Einzelnen Beitrag anzeigen

Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#12

AW: Prozess finden, der Datei offen hat

  Alt 4. Nov 2010, 13:51
Habs: http://www.delphipraxis.net/53005-da...freigeben.html
Zitat von dir:
Zitat:
Indem man die Handles des Prozesses auflistet und deren Namen findet. Das geht zwar auch ohne Treiber, aber nur in einem bestimmten Fall. Daher vermutlich der Treiber.
Puh, mein früheres Ich

Aber Nico hat recht, und zwar hier:

Zitat von Olli:
ZwQuerySystemInformation und ZwQueryObject[...]
Der Treiber ist deswegen notwendig, weil die Abfrage des Namens eines Dateiobjektes (Dateien, Verzeichnisse, Pipes, MailSlots, ...) bei synchronisierten Objekten solange benötigt bis die aktuelle Operation abgeschlossen ist (und das kann ewig dauern). Da zum Beispiel der Service Control Manager (SCM) Pipes verwendet um mit Service-DLLs zu kommunizieren, gibt es eine Menge solcher Objekte. Zudem gibt es aus dem Benutzermodus keinen sicheren Weg um Dateien von Pipes und/oder MailSlots zu untercheiden. Der Treiber löst das erste Problem üblicherweise dadurch, dass er den IRP zur Abfrage des Objekts selbst erzeugt. Das zweite Problem kann ebenso im Treiber (mit Hilfe des IFS-Kits) gelöst werden (MailSlots oder Pipes sind an Flags erkennbar).

Kurz, für eine saubere Lösung kommt man nicht um einen Treiber herum.
... das war der Hasenfuß.

I stand corrected
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat