Mutex löschen von fremden Programm



  • Klar gibt's noch ein HANDLE, und zwar das des Prozesses der den von dir skizzierten Code drinnen hat.

    ReleaseMutex() gibt ja nicht das Mutex-Object frei (freigeben im Sinn von CloseHandle), sondern versetzt es nur in einen anderen Zustand, nämlich in den "Signaled" Zustand.

    Und du als Prozess X kannst nicht einfach das Handle von Prozess Y freigeben.
    Also es gibt soweit ich weiss schon Mittel und Wege, aber für die braucht man Admin-Rechte, und ich weiss ehrlich gesagt auch garnicht wie diese Wege aussehen.



  • ok danke, dachte mir schon, dass man da nichts machen kann, ohne in dem Zielprozess rumzupfuschen.



  • @hustbaer

    Wen du kein Schimmer hast von was du da sprichst, dann lass es einfach.
    Schlaumeier.



  • naja machen kann man bestimmt irgendwas wenn man sich damit extrem auskennt, vielleicht kann man nen driver laden da es ja kernel objecte sind und die da irgendwie löschen oder was weiß ich^^ Aber das ist es natürlich nicht wert.



  • Lass es sein, von aussen in fremde Prozesse eingreifen zu wollen! Als Autor eines Programmes hätte ich stark etwas dagegen, wenn mir jemand etwas wie z.B. ein Mutex-Objekt aushebeln will. 😡


  • Mod

    Ich schließe mich Bernie Butts Meinung an. Der Mutex hat ja einen Sinn... 😉
    Ich hätte auch was dagegen...

    Zudem müsstest Du den Mutex genau aus dem Thread freigeben in dem er belegt wurde... also selbst einen neuen Thread im anderen Prozess starten würde nichts nutzen. Du müsstest Code genau in den Thread injezieren, der den Mutex hält...



  • @Martin:
    Ich hab das so verstanden dass er die Mutex freigeben will im Sinn von "löschen", nicht "entsperren".
    Und dazu braucht er nicht unbedingt den Thread der das Ding ursprünglich gesperrt hat.

    Bzw. müsste er das überhaupt, also für ReleaseMutex()? Würde mich nämlich grad etwas wundern, habs aber auch noch nie probiert.


  • Mod

    Wenn es die letzte Referenz ist, dann nicht. Dann vernichtet das CloseHandle den Mutex in welchem Zustand auch immer.

    Existiert noch eine weitere Referenz aufdas Handle (evtl. extern, weil es ein benamter Mutex ist) dann hat man ein Problem... aber da erzähle ich Dir nichts neues so wie ich Dich kenne... 😉



  • Bzw. müsste er das überhaupt, also für ReleaseMutex()? Würde mich nämlich grad etwas wundern, habs aber auch noch nie probiert.

    Äh, jo, ich hab' mich grad selbst etwas verwirrt.

    Ich meinte ob ich in Thread A WaitForSingleObject() machen kann, und in Thread B dann ReleaseMutex(). Und das geht nicht, zumindest nicht laut Doku, und es wäre auch ziemlich seltsam.

    p.S.: zur Erklärung warum ich mir eingebildet habe es könnte (müsste) gehen: ich durfte mal nen Bug suchen, wo ein Thread *manchmal* ein Mutex Handle eines ganz anderen Programmteils (auch anderer Thread wenn ich mich recht erinnere) freigegeben hat. Uninitialisierte Variable, juche, *den* haben wir lange gesucht 🙂
    Und ich dachte automatisch an Freigeben im Sinne von ReleaseMutex(). Bin mir mittlerweile aber fast sicher dass es Freigeben im Sinne von CloseHandle() war.

    p.p.S.: ja, der CloseHandle Teil ist mir soweit klar 😉



  • My Gosh, was ihr für Probleme habt.
    Wenn er es machen will, dann macht er es halt!

    Wenn ihr nicht wollt, dass euer superhypermegatollextremleiwandeszuschützenwürdiges Programm manipuliert wird, dann hört doch einfach auf zu entwickeln 😡😡😡😡😡😡



  • 🙂 🙂 👍


Anmelden zum Antworten