Entwickler-Ecke
Basistechnologien - API OpenProcess Handle kann nicht initialisiert werden
Jason_Gregory - Do 26.08.10 08:41
Titel: API OpenProcess Handle kann nicht initialisiert werden
Guten Tag Liebe Community^,
ich sitze derzeit an einer Methode / Klasse um zur Laufzeit Adressen aus einer Anwendung zu saugen,
nur klappt es gerade nicht so wie es sollte^.
Benötigte API Aufrufe lass ich mal weg, damit sich das nicht in die Länge zieht.
C#-Quelltext
1: 2:
| Process[] ProcList_Messenger = Process.GetProcessesByName("Mobile_Messenger"); IntPtr Handle_Messenger = OpenProcess(0x001F0FFF, true, ProcList_Messenger[0].Id); |
Statt eines gültigen Handles hier liefert mir OpenProcess bzw. Handle_Messenger 0 zurück (oder soll es das etwa ?!?),
weshalb es natürlicherweiße auch nicht klappt Daten aus Adressen zu lesen / in diese zu schreiben.
Eine Überprüfung ob der Prozess läuft, ist in meinem zuhause liegenden Quellcode vorhanden.
Hat jemand eine Ahnung oder kann es an den Prozess Benutzer Rechten (also dem ersten Parameter von OpenProcess) liegen ?
Mir ist nicht bekannt das man Administratorenrechte benötigen würde um in Adressräume zu schreiben, falls
es denoch so sein sollte, wär ich für eine kleine Instruktion dankbar.
Mfg Jason
Jason_Gregory - Do 26.08.10 11:30
Mhm...aber wie wahrscheinlich ist es denn, das eine Anwendung mit den Standard Rechten
nicht in eine Adresse schreiben bzw. in diesem Fall lesen kann. Werde es zuhause mal testen, melde mich dann ob
es als Administrator klappt (was ich mir aber persönlich nicht vorstellen kann^).
http://msdn.microsoft.com/en-us/library/ms684880%28v=VS.85%29.aspx
Wenn ich es richtig verstehe, reichen mir für Write/Read Rechte die Zugriffs-Adresse 0x0020.
Mit welcher Adresse werden Zugriffsrechte den normalerweiße klassifiziert zum Prozesse auslesen ?
Delete - Do 26.08.10 14:11
Jason_Gregory hat folgendes geschrieben : |
Wenn ich es richtig verstehe, reichen mir für Write/Read Rechte die Zugriffs-Adresse 0x0020.
Mit welcher Adresse werden Zugriffsrechte den normalerweiße klassifiziert zum Prozesse auslesen ? |
Was haben Rechte mit Adressen zu tun? Die Rechte werden durch Konstanten definiert. Ich glaube, da fehlt noch einiges an Grundlagen.
Delphi-Quelltext
1:
| OpenProcess(0x001F0FFF, true, ProcList_Messenger[0].Id); |
Was ist das für eine hexadezimale Konstante als erster Parameter? Da gehören die gewünschten Zugriffsrechte hin:
http://msdn.microsoft.com/en-us/library/ms684880%28v=VS.85%29.aspx
Und dazu kann man die definierten Konstanten verwenden, dann weiß man auch, was für Rechte man gesetzt hat.
| Zitat: |
Return Value
If the function succeeds, the return value is an open handle to the specified process.
If the function fails, the return value is NULL. To get extended error information, call GetLastError. |
Was sagt die Fehlerbehandlung?
Jason_Gregory - Fr 27.08.10 09:33
| Zitat: |
| Und dazu kann man die definierten Konstanten verwenden, dann weiß man auch, was für Rechte man gesetzt hat. |
Kann man eben nicht, die Möglichkeit bietet sich nur in C++ (in C# muss er mit Hexdezimalen Adressen / Konstanten arbeiten)
Hab mein Problem aber gelöst, es lag tatsächlich an den Administratorenrechten.
Während des Compilierens bzw. in desen Ausführung danach konnte es also nicht funktionieren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!