AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fremden Mutex schließen

Offene Frage von "Relicted"
Ein Thema von Relicted · begonnen am 11. Dez 2009 · letzter Beitrag vom 19. Dez 2009
Antwort Antwort
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#1

Fremden Mutex schließen

  Alt 11. Dez 2009, 11:57
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 sourcecode bzw das tool habe ich folgende daten ermitteln können:

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
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 11:58
OpenMutex() und CloseHandle() sollten den Job tun.
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 12:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 12:20
Kann es sein, dass man einfach nicht das Recht hat fremde Muticies ( ) zu schließen?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.137 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 12:56
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:
Bekomme kein Handle zurück von OpenMutex.
Vielleicht hast du einfach nicht die nötigen Rechte, um auf diese Mutex zuzugreifen?
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 13:22
Zitat von himitsu:
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.
Denke ich auch. über DLL-Injection sollte sowas möglich sein (nicht umbedingt mit Delphi wenn es ein 64-Bit Prozess ist).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 13:27
Zitat von Bernhard Geyer:
Zitat von himitsu:
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.
Denke ich auch. über DLL-Injection sollte sowas möglich sein (nicht umbedingt mit Delphi wenn es ein 64-Bit Prozess ist).
Ja daran dachte ich im ersten Moment auch, aber wie kommt er dann an das gerade geöffnete Handle des Prozesses?
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Astat

Registriert seit: 2. Dez 2009
Ort: München
320 Beiträge
 
Lazarus
 
#8

Re: Fremden Mutex schließen

  Alt 11. Dez 2009, 13:29
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:
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;
[msdn]http://msdn.microsoft.com/en-us/library/ms686670(VS.85).aspx[/msdn]

lg. Astat
Lanthan Astat
06810110811210410503210511511603209711003210010110 9032084097103
03211611111604403209711003210010110903210010510103 2108101116122
11610103209010110510810103206711110010103210511003 2068101108112
10410503210310111509910411410510109810111003211910 5114100046
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Fremden Mutex schließen

  Alt 19. Dez 2009, 17:28
Juhu,

habe es auch endlich geschafft das Ganze zu testen. Läuft einwandfrei! Vielen Dank für Eure Hilfe!

Gruß,
Reli
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 Uhr.
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