Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Für svchost.exe(Dienst) den richtigen anmeldenamen erhalten (https://www.delphipraxis.net/74775-fuer-svchost-exe-dienst-den-richtigen-anmeldenamen-erhalten.html)

Metal_Snake2 8. Aug 2006 15:08


Für svchost.exe(Dienst) den richtigen anmeldenamen erhalten
 
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.

Luckie 8. Aug 2006 15:23

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
SYSTEM ist ja auch richtig, denn das sind die Host-Anwendungen für die Dienste und diese laufen nun mal, wenn nicht anders angegeben unter dem Systemkonto.

Metal_Snake2 8. Aug 2006 16:17

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
villeicht wird es an hand eines screenshots vom Process Explorer deutlicher:

Bild

naja wie gesagt ich erhalte halt nicht die benutzernamen welche mit einem Pfeil markiert sind.
Wie kann ich die erhalten, muß ich erst in der Registry durchstöbern?

Luckie 8. Aug 2006 19:12

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
Bitte sei so gut und füge das Bild als Anhang an. Dafür gibt es dieses Feature.

Metal_Snake2 9. Aug 2006 14:31

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
Hat keiner ne idee?
Mir gehts einfach darum warum ich nicht die richtigen dienst-anmeldenamen erhalte.

RWarnecke 20. Mai 2007 12:49

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
Hallo zusammen,

ich stehe jetzt vor dem gleichen Problem. Hat jemand dafür eine Lösung ?

DP-Maintenance 20. Mai 2007 16:09

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Das passt hier wohl besser hin.

RWarnecke 22. Mai 2007 19:47

Re: Für svchost.exe(Dienst) den richtigen anmeldenamen erhal
 
Gibt es denn wirklich keine Möglichkeit den Prozessen svchost.exe und den anderen die Usernamen Lokaler Dienst oder Netzwerkdienst zuzuordnen ?

Edit: Ich weiß, das Lokaler Dienst und Netzwerkdienst keine Usernamen sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz