Запускаем приложение от имени другого пользователя.
1 2 3 4 5 6 7 8 9 |
var user, pass, pathAndParams: string; begin user:='user'; pass:= 'password'; pathAndParams:= 'C:\Windows\notepad.exe'; runAsUser(user, pass, pathAndParams); end; |
Параметры
user - имя пользователя
pass - пароль
pathAndParams - путь к запускаемому приложению
Результат
True, если приложение было запущено или false, если нет
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
function CreateProcessWithLogonW(user:pwidechar; domain:pwidechar; passw:pwidechar; flags: DWORD; lpApplicationName: PwideChar; lpCommandLine: PwideChar; dwCreationFlags: DWORD; lpEnvironment: Pointer; lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo; var lpProcessInformation: TProcessInformation): BOOL; stdcall; external 'advapi32.dll' name 'CreateProcessWithLogonW'; function runAsUser(user, pass, pathAndParams: WideString):Boolean; var si: TSTARTUPINFO; pif: PROCESS_INFORMATION; begin Result:= False; si.cb := SizeOf(tstartupinfo); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOWDEFAULT; si.lpReserved := nil; si.lpDesktop := nil; si.lpTitle := nil; if CreateProcessWithLogonW(PChar(user), nil, PChar(pass), 0, nil, PChar(pathAndParams), 0, nil, nil, si, pif) then begin Result:= True; CloseHandle(pif.hThread); CloseHandle(pif.hProcess); end; end; |