Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
Delphi XE2 Professional
|
Re: Programm unter NT 4.0 als anderer User starten
3. Sep 2004, 13:03
Ja, und CreateProcessAsUser benötigt außerdem noch SeIncreaseQuotaPrivilege und SeAssignPrimaryTokenPrivilege. Aber als System-Service sollte das eigentlich funktionieren...
Hier mal ein Code den ich problemlos in einem Service verwendet hab:
Delphi-Quellcode:
var
hToken: THandle;
aSI: TStartupInfo;
aPI: TProcessInformation;
procedure ShowLastError;
begin
MessageBox(0, PChar(SysErrorMessage(GetLastError)), ' Error', MB_ICONERROR or MB_OK);
end;
begin
ZeroMemory(@aSI, SizeOf(aSI));
aSI.cb := SizeOf(aSI);
// create process as specific principal
if cbCreateAsUser.Checked then
begin
if LogonUser(PChar(edUserName.Text), nil, PChar(edPassword.Text),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then
begin
if CreateProcessAsUser(hToken, PChar(edProgramPath.Text), nil, nil, nil,
False, NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
begin
CloseHandle( aPI.hProcess);
CloseHandle( aPI.hThread);
end
else
ShowLastError;
CloseHandle(hToken);
end
else
ShowLastError;
end
// create process in system-logonsession
else
begin
if CreateProcess(PChar(edProgramPath.Text), nil, nil, nil, False,
NORMAL_PRIORITY_CLASS, nil, nil, aSI, aPI) then
begin
CloseHandle( aPI.hProcess);
CloseHandle( aPI.hThread);
end
else
ShowLastError;
end;
end;
Manuel Pöter
|
|
Zitat
|