![]() |
Fremden Mutex schließen
Mahlzeit die Herren,
ich habe momentan folgendes Problem: Ich brauche eine Möglichkeit wie ich einen Mutex eines anderen Programmes killen / closen kann. über den ![]() PID Handle Type Process Name Handle Name 5368 564 Mutant(14) xyz.dll \BaseNamedObjects\XXX1 4412 564 Mutant(14) xyz.dll \BaseNamedObjects\XXX2 ich habe das entsprechende programm 2 mal gestartet - der erste prozess legt xxx1, der 2. xxx2 an. Vielleicht kann mir ja jemand weiterhelfen. Gruß, reli |
Re: Fremden Mutex schließen
OpenMutex() und CloseHandle() sollten den Job tun. :)
|
Re: Fremden Mutex schließen
Leider nein :-)
Bekomme kein Handle zurück von OpenMutex. Auch wenn ich das Handle aus dem Tool versuche zu Closen passiert nichts. Außerdem verwundert es mich, dass beide Mutex'e das selbe Handle haben obwohl sie anders heißen. OpenMutex(MUTEX_ALL_ACCESS,true,'XXX1') failed. OpenMutex(MUTEX_ALL_ACCESS,false,'XXX1') failed. OpenMutex(MUTEX_MODIFY_STATE,false,'XXX1') failed. OpenMutex(MUTEX_MODIFY_STATE,true,'XXX1') failed. OpenMutex(MUTEX_ALL_ACCESS,true,'\BaseNamedObjects \XXX1') failed. OpenMutex(MUTEX_ALL_ACCESS,false,'\BaseNamedObject s\XXX1') failed. OpenMutex(MUTEX_MODIFY_STATE,false,'\BaseNamedObje cts\XXX1') failed. OpenMutex(MUTEX_MODIFY_STATE,true,'\BaseNamedObjec ts\XXX1') failed. |
Re: Fremden Mutex schließen
Kann es sein, dass man einfach nicht das Recht hat fremde Muticies ( :stupid: ) zu schließen?
|
Re: Fremden Mutex schließen
Mit CloseHandle kann man eh keine Mutex in anderen Prozessen schließen.
Denn dieses greift nur bei eigenen Handle ... also müßte man erstmal in den fremden Prozess rein und von da drinnen aus die Mutex-Handle schließen. Zitat:
Und warum gekommst du kein Handle, bzw. was sagt deine Fehlerbehandlung? (Du hast doch eine Fehlerbehandleung eingebaut? Also GetLastError und Co.) Und selbst wenn du so ein Handle bekommst, dann würde CloseHandle nur dein Mutex-Handle schließen und nicht das Fremde. :zwinker: |
Re: Fremden Mutex schließen
Zitat:
|
Re: Fremden Mutex schließen
Zitat:
|
Re: Fremden Mutex schließen
Hallo Relicted.
1. Du hast das Handle eines fremden Prozesses mit den Sourcen im angegebenen Link ermittelt. 2. Wie himitsu geschrieben hat, musst du in den fremden Prozess Dies kannst du mit Dll-Injection, einfacher aber mit CreateRemoteThread erreichen. Zu beachten ist, dass die notwendigen Synchronization Object Security and Access Rights vorhanden sind. Siehe MSDN Link.
Delphi-Quellcode:
[msdn]http://msdn.microsoft.com/en-us/library/ms686670(VS.85).aspx[/msdn]
function RemoteCloseHandle(PID, FileHandle, Timeout: DWORD): LongBool;
var hProcess, hThread, TID: DWORD; begin Result := False; hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID); if hProcess <> 0 then begin try hThread := CreateRemoteThread(hProcess, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'), 'CloseHandle'), ptr(FileHandle), CREATE_SUSPENDED, TID); if hThread <> 0 then begin ResumeThread(hThread); WaitForSingleObject(hThread, Timeout); CloseHandle(hThread); Result := True; end; finally CloseHandle(hProcess); end; end; end; lg. Astat |
Re: Fremden Mutex schließen
Juhu,
habe es auch endlich geschafft das Ganze zu testen. Läuft einwandfrei! Vielen Dank für Eure Hilfe! Gruß, Reli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz