Program CreateProcess;
{$APPTYPE CONSOLE}
Uses
SysUtils, Windows;
Const
LOGON_WITH_PROFILE = 1;
LOGON_NETCREDENTIALS_ONLY = 2;
Var
lpUsername : LPCWSTR;
lpDomain : LPCWSTR;
lpPassword : LPCWSTR;
dwLogonFlags : LongWord;
lpApplicationName : LPCWSTR;
lpCommandLine : LPWSTR;
dwCreationFlags : LongWord;
lpEnvironment : Pointer;
lpCurrentDirectory : LPCWSTR;
StartupInfo : TSTARTUPINFO;
lpStartupInfo : PSTARTUPINFO;
ProcessInfo : TProcessInformation;
lpProcessInfo : PProcessInformation;
lpMsgBuf : Array[0..100] Of Char;
Function CreateProcessWithLogonW
(
lpUsername : LPCWSTR;
lpDomain : LPCWSTR;
lpPassword : LPCWSTR;
dwLogonFlags : LongWord;
lpApplicationName : LPCWSTR;
lpCommandLine : LPWSTR;
dwCreationFlags : LongWord;
lpEnvironment : Pointer;
lpCurrentDirectory : LPCWSTR;
lpStartupInfo : PSTARTUPINFO;
lpProcessInfo : PProcessInformation
)
: Boolean; StdCall;
External 'advapi32.dll' NAME 'CreateProcessWithLogonW';
Begin
If ParamCount <> 4 Then
WriteLn ('Uso: ' + #13#10 +
'CreateProcess NOMEAPPLICAZIONE USERNAME' +
'DOMINIO PASSWORD')
Else
Begin
lpApplicationName := PWideChar(WideString(ParamStr(1)));
lpUserName := PWideChar(WideString(ParamStr(2)));
lpDomain := PWideChar(WideString(ParamStr(3)));
lpPassword := PWideChar(WideString(ParamStr(4)));
lpCommandLine := NIL;
lpCurrentDirectory := PWideChar(WideString(
ExtractFilePath(ParamStr(1))));
dwLogonFlags := LOGON_WITH_PROFILE;
dwCreationFlags := CREATE_DEFAULT_ERROR_MODE Or
CREATE_NEW_CONSOLE Or
CREATE_NEW_PROCESS_GROUP;
lpEnvironment := NIL;
With StartupInfo Do
Begin
cb := SizeOf(StartupInfo);
lpReserved := NIL;
lpDesktop := NIL;
lpTitle := NIL;
dwFlags := STARTF_USEPOSITION Or
STARTF_USEFILLATTRIBUTE Or
STARTF_USECOUNTCHARS Or
STARTF_USESHOWWINDOW Or
STARTF_USESIZE;
wShowWindow := SW_SHOWDEFAULT;
cbReserved2 := 0;
lpReserved2 := NIL;
End;
lpStartupInfo := @StartupInfo;
lpProcessInfo := @ProcessInfo;
If CreateProcessWithLogonW(
lpUserName,
lpDomain,
lpPassword,
dwLogonFlags,
lpApplicationName,
lpCommandline,
dwCreationFlags,
lpEnvironment,
lpCurrentDirectory,
lpStartupInfo,
lpProcessInfo)
Then
WriteLn('Handle processo: ', ProcessInfo.hProcess,
#13#10,
'Handle thread: ', ProcessInfo.hThread,
#13#10,
'PID: ', ProcessInfo.dwProcessId,
#13#10,
'Thread ID: ', ProcessInfo.dwThreadId)
Else
Begin
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NIL,
GetLastError,
GetUserDefaultLangID,
@lpMsgBuf,
100,
NIL);
MessageBox(0,
@lpMsgBuf,
'CreateProcessWithLogonW',
MB_ICONERROR);
End;
End;
End.
|