Hey,
ich habe ein seltsames Problem. Ich versuche anhand der Prozess Token den Benutzernamen herauszufinden. Für SYSTEM Prozesse und Prozesse, die von lokalen Benutzern gestartet wurden, funktioniert dies wunderbar.
Bei allen Prozessen von NETZWERKDIENST oder LOKALER DIENST schlägt OpenProcessToken() allerdings mit Fehlercode 5 (Zugriff verweigert) fehl.
Debug Privilegien habe ich mir mit folgendem Code geholt:
Delphi-Quellcode:
function EnableDebugPrivilege: Boolean;
var
hToken: THandle;
TP: TTokenPrivileges;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken)
then
begin
try
TP.PrivilegeCount := 1;
if LookupPrivilegeValue(
nil, '
SeDebugPrivilege',
TP.Privileges[0].Luid)
then
begin
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
Result := AdjustTokenPrivileges(hToken, false,
TP, SizeOf(
TP),
nil,
DWord(
nil^));
end;
finally
CloseHandle(hToken);
end;
end;
end;
Den Prozess öffne ich mit:
Delphi-Quellcode:
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ, false, Process32.th32ProcessID);
Das Token öffne ich mit:
if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
Hoffe jemand weiß Rat. Unter Win7 können übrigens alle Benutzernamen wunderbar abgefragt werden.
Viele Grüße
Zacherl