Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   OpenThread schlägt außerhalb von Delphi fehl (https://www.delphipraxis.net/159616-openthread-schlaegt-ausserhalb-von-delphi-fehl.html)

Neutral General 5. Apr 2011 13:42

OpenThread schlägt außerhalb von Delphi fehl
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

Ich lasse mir mit CreateToolhelp32Snapshot alle Prozesse und deren Threads auflisten.
Was mir eben aufgefallen ist, ist, dass ich von einigen Threads/Prozessen von "System-Prozessen" kein Handle bekomme, wenn ich mein Programm NICHT aus Delphi heraus starte. Wenn ich es aus Delphi heraus starte komme ich eigentlich an fast alle Handles ran.

Weiß jemand woran das liegen könnte?
Hab mal 2 Screenshots angehangen. Threads von Prozessen mit dem grauen Fragezeichen davor kann ich nicht öffnen (OpenThread).

Info: Ich versuche die Threads mit dem Recht THREAD_SUSPEND_RESUME zu öffnen.

Gruß
Neutral General

Bernhard Geyer 5. Apr 2011 13:43

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Iste Delphi mit Adminrechten (Stichwort UAC) gestartet?

Neutral General 5. Apr 2011 13:44

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Hallo,

Ich benutze Vista und die UAC ist abgeschaltet (bitte nicht hauen :mrgreen:).
Habe das Programm auch schonmal explizit (außerhalb von Delphi) als Admin gestartet.
Das hat aber nichts geändert.

himitsu 5. Apr 2011 16:12

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Eventuell erbt dein Programm in der IDE die Debugging-Rechte des Debuggers?

Und nein, selbst ein Admin-Programm muß nicht alle möglichen Rechte besitzen.

Neutral General 5. Apr 2011 16:50

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Zitat:

Zitat von himitsu (Beitrag 1093202)
Eventuell erbt dein Programm in der IDE die Debugging-Rechte des Debuggers?

Ja sowas in der Art hatte ich mir schon fast gedacht.
Kann ich mir diese Rechte denn noch nachträglich irgendwie besorgen?

himitsu 5. Apr 2011 17:14

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Versuchen kann man's ... nur müßte man wohl erstmal rausbekommen welche(s) Recht(e) deinem Programm fehlen. :?



Wäre ja zu praktisch, wenn es ein Programm gäbe, welches einem die akiven Rechte eines Programmes auflisten könnte.

rollstuhlfahrer 5. Apr 2011 17:29

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Prozess Explorer macht das (Process -> Properties -> Security)

Bernhard

Neutral General 5. Apr 2011 17:55

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Hallo,

Es wäre auch ganz praktisch wenn ich wüsste wie (mit welcher API?) man sich generell Rechte verschaffen kann ;) Werde mir den Prozess Explorer aber schon mal runterladen :)

Edit: Das einzige Recht was eine Anwendung in Delphi mehr hat ist das SeDebugPrivilege.

Assarbad 5. Apr 2011 18:06

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Zitat:

Zitat von Neutral General (Beitrag 1093237)
Edit: Das einzige Recht was eine Anwendung in Delphi mehr hat ist das SeDebugPrivilege.

Genau wie vermutet (siehe Himitsu).

Neutral General 5. Apr 2011 18:58

AW: OpenThread schlägt außerhalb von Delphi fehl
 
Hallo,

Zitat:

Zitat von MSDN
Indem Sie die Berechtigung SeDebugPrivilege für den laufenden Prozess festlegen, können Sie das Prozesshandle für jede aktive Anwendung beziehen

Folgender Code funktioniert bei mir:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var hToken: THandle;
    New: PTokenPrivileges;
    Len, OutLen: Cardinal;
    DebugLUID: Int64;
begin
  if OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES,hToken) then
  begin
    try
      if LookupPrivilegeValue(nil,'SeDebugPrivilege',DebugLUID) then
      begin
        Len := SizeOf(TTokenPrivileges)+SizeOf(TLUIDAndAttributes);
        GetMem(New,Len);
        try
          New^.PrivilegeCount := 1;
          New^.Privileges[0].Luid := DebugLUID;
          New^.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

          if not AdjustTokenPrivileges(hToken,false,New^,0,nil,OutLen) then
            RaiseLastOSError;
        finally
          FreeMem(New);
        end;
      end;
    finally
      CloseHandle(hToken);
    end;
  end;
end;
Problem ist also damit gelöst :)

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.
Seite 1 von 2  1 2      

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