AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweigert
Thema durchsuchen
Ansicht
Themen-Optionen

XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweigert

Ein Thema von Zacherl · begonnen am 25. Sep 2009 · letzter Beitrag vom 27. Sep 2009
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweigert

  Alt 25. Sep 2009, 19:48
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
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 01:34
Schonmal mit PROCESS_ALL_ACCESS den Prozess geöffnet und gesehen was passiert?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 11:40
Ja, sowohl mit PROCESS_ALL_ACCESS als auch mit TOKEN_ALL_ACCESS und in Kombination. Der Fehler scheint allerdings bekannt zu sein:
http://social.msdn.microsoft.com/For...7-d78c5a4ca8af

Werde das Workaround jetzt gleich mal testen und dann hier nochmal Feedback geben, inwiefern es funktioniert
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 12:36
Leider nicht zufriedenstellend:

Delphi-Quellcode:
var
  dwBufSize: DWord;
  bSuccess: Boolean;
  Descriptor: PSecurityDescriptor;
  SID: Pointer;
  Defaulted: LongBool;
begin
  Descriptor := nil;
        bSuccess := GetKernelObjectSecurity(hProcess,
          OWNER_SECURITY_INFORMATION, nil, 0, dwBufSize);
        while (not bSuccess) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) do
        begin
          ReallocMem(Descriptor, dwBufSize);
          bSuccess := GetKernelObjectSecurity(hProcess,
            OWNER_SECURITY_INFORMATION, Descriptor, dwBufSize, dwBufSize);
        end;
        if (bSuccess) then
        begin
          if GetSecurityDescriptorOwner(Descriptor, SID, Defaulted) then
          begin
            Result := SID;
          end;
        end;
Teilweise funktioniert ist, bei den meisten Prozessen aber wird eine SECURITY_CREATOR_SID_AUTHORITY oder SECURITY_LOCAL_SID_AUTHORITY zurückgegeben. Wie kann ich nun die wirkliche SID ermitteln? Ich brauche diese, um sie mit der SYSTEM RID, der LOCALSERVIVE RID und der NETWORKSERVICE RID zu vergleichen.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 18:10
Hmm, kommt mir wie ein Bug in XP vor. In Vista habe ich das Problem nicht.
Es tritt auch nicht auf, wenn man als SYSTEM Benutzer darauf zugreift.

Der Quelltext bezieht sich auf den Besitzer der Sicherheitseinstellungen, also wer diese uneingeschränkt ändern darf. Nicht jedoch auf den Prozessbesitzer.

btw:
Der ProcessExplorer nutzt einen Treiber, um die Prozessinformationen auszulesen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 19:11
Scheint echt ein Bug in WinXP zu sein. Unter Win7 (sogar 64 Bit) funktioniert alles wunderbar. Der ProzessExplorer benutzt zwar einen Treiber, aber z.B. der Taskmanager zeigt unter XP ja auch die korrekten Prozess Benutzernamen an.

Hast du eine Idee, wie das dort funktioniert?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 26. Sep 2009, 19:34
Ich bin nicht sicher, aber ich glaube der nutzt WTSEnumerateProcesses, um die Prozesse aufzulisten. Die Funktion gibta auch den Benutzer zurück.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: XP: OpenProcessToken bei NETZWERKDIENST: Zugriff verweig

  Alt 27. Sep 2009, 12:31
Ah das klingt gut. Werde ich mal versuchen

Edit: Vielen Dank, funktioniert einwandfrei!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:53 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