Registriert seit: 9. Aug 2007
207 Beiträge
|
AW: Re: CreateProcessAsUser ERROR_PRIVILEGE_NOT_HELD
3. Apr 2013, 14:11
Ich nutze die Gelegenheit, um nach einem anderen Posting aus diesem Thread nochmal nachzufragen:
Interessant. In den Comments findet sich ein Link zu DropMyRights, wo gezeigt wird wie einem Admin Token die Rechte genommen werden können.
Gibt es dazu schon eine Delphi-Portierung?
Diese Variante hatte ich auch versucht. Hat jedoch bei mir nicht geklappt. D.h. der Prozess lief trotzdem mit Admin-Rechten. Kann aber auch an der Umsetzung selbst liegen.
Hier der Code:
Delphi-Quellcode:
function StartUserProcess(ApplicationName, CommandLine, WorkingDir: PAnsiChar): DWORD;
var
hSaferLevel: DWORD;
hAuthzLevel: SAFER_LEVEL_HANDLE;
hToken: THandle;
si:STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
Result := ERROR_SUCCESS;
hSaferLevel := SAFER_LEVELID_NORMALUSER;
hAuthzLevel := 0;
if (SaferCreateLevel(SAFER_SCOPEID_USER, hSaferLevel, 0, @hAuthzLevel, nil)) then
begin
hToken := 0;
if (SaferComputeTokenFromLevel(hAuthzLevel, 0, @hToken, 0, nil)) then
begin
ZeroMemory(@si, sizeof(STARTUPINFO));
si.cb := sizeof(STARTUPINFO);
si.lpDesktop := nil;
if (CreateProcessAsUser(hToken, ApplicationName, CommandLine, nil, nil, False, CREATE_NEW_CONSOLE, nil, WorkingDir, si, pi)) then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end else
Result := GetLastError;
end else
Result := GetLastError;
SaferCloseLevel(hAuthzLevel);
end else
Result := GetLastError;
end;
|
|
Zitat
|