Autor Beitrag
Jason_Gregory
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: Do 26.08.10 08:41 
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.

ausblenden C#-Quelltext
1:
2:
Process[] ProcList_Messenger = Process.GetProcessesByName("Mobile_Messenger");
IntPtr Handle_Messenger = OpenProcess(0x001F0FFFtrue, 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.com - Home, Sweat Home
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 26.08.10 10:57 
Bei 0 solltest du mal GetLastError msdn.microsoft.com/e...679360(v=VS.85).aspx aufrufen.

Verwendest du Vista (gilt evtl. auch für Win7), dann schau dir mal den letzten Absatz unter msdn.microsoft.com/e...80%28v=VS.85%29.aspx an.
Jason_Gregory Threadstarter
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: Do 26.08.10 11:30 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Bei 0 solltest du mal GetLastError msdn.microsoft.com/e...679360(v=VS.85).aspx aufrufen.

Verwendest du Vista (gilt evtl. auch für Win7), dann schau dir mal den letzten Absatz unter msdn.microsoft.com/e...80%28v=VS.85%29.aspx an.


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^).

msdn.microsoft.com/e...80%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 ?

_________________
Jason-Gregory.com - Home, Sweat Home
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.08.10 14:11 
user profile iconJason_Gregory hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden 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: msdn.microsoft.com/e...80%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 Threadstarter
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: 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.

_________________
Jason-Gregory.com - Home, Sweat Home