Guten tag!
Ich erhalte mit dieser Funktion für alle Prozesse den Domain und Benutzer- namen:
Delphi-Quellcode:
function GetUserAndDomain(ProcessId: DWORD):String;
var
cbBuf : Cardinal;
ptiUser : PTOKEN_USER;
snu : SID_NAME_USE;
ProcessHandle,hToken: THandle;
UserSize, DomainSize: DWORD;
bSuccess : Boolean;
s,User,Domain : String;
begin
ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
if ProcessHandle <> 0 then
begin
//EnableProcessPrivilege(ProcessHandle, 'SeSecurityPrivilege', True);
if OpenProcessToken(ProcessHandle, TOKEN_QUERY, hToken) then
begin
bSuccess := GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf);
ptiUser := nil;
while (not bSuccess) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) do
begin
ReallocMem(ptiUser, cbBuf);
bSuccess := GetTokenInformation(hToken, TokenUser, ptiUser, cbBuf, cbBuf);
end;
CloseHandle(hToken);
if not bSuccess then
Exit;
UserSize := 0;
DomainSize := 0;
LookupAccountSid(nil, ptiUser.User.Sid, nil, UserSize, nil, DomainSize, snu);
if (UserSize <> 0) and (DomainSize <> 0) then
begin
SetLength(User, UserSize);
SetLength(Domain, DomainSize);
if LookupAccountSid(nil, ptiUser.User.Sid, PChar(User), UserSize, PChar(Domain), DomainSize, snu) then
begin
User := StrPas(PChar(User));
Domain := StrPas(PChar(Domain));
end;
end;
if bSuccess then
begin
FreeMem(ptiUser);
end;
end;
CloseHandle(ProcessHandle);
end;
s := Domain +'\' + User;
result:= s;
end;
Ich habe auch die Privilegien 'SeSecurityPrivilege' und 'SeDebugPrivilege' aktiviert, jedoch
erhalte ich nicht die richtigen Anmelde/Benutzer- namen für den Dienst svchost.exe, welcher ja
5-8 instanzen hat und unter anderen Benutzernamen startet. Für svchost.exe erhalte ich nur den "SYSTEM" Benutzernamen.
Wie kann ich auch die anderen Benutzernamen wie "Nezwerkdienst"oder "Lokalerdienst" erhalten??
Danke für antworten.