2009-06-17 4 views
4

Wie erkennen Sie, welcher Prozess ein geöffnetes Handle für eine Datei hat? Insbesondere, wie machen Sie das programmatisch?Wem gehört ein Datei-Handle in Windows?

+0

Vorausgesetzt, dass er wissen möchte, wie dies programmatisch zu tun ist, ist dies * programmierbezogen und * gehört nicht zu den Serverfehlern. – ChrisW

Antwort

-1

Process Explorer von Sysinternals wird Ihnen dies sagen.

+0

Genau, wie macht es das? – fryguybob

+0

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx – young

1

Möglicherweise gibt es eine API dafür, ich weiß es nicht. Wenn ja, kann es eine API im Kernel geben.

Eine andere Möglichkeit (Entschuldigung, vage zu sein, aber ich beantworte dies jetzt, falls niemand eine bessere Antwort postet) ist, dass es keine (dokumentierte) API gibt, und dass die Programme es tun, indem sie es tun mit undokumentiertem Wissen über den Inhalt des Handles und/oder des Speichers, auf den der Handle (wenn er als Pointer behandelt wird) zeigt: Ich habe zum Beispiel A Process' Kernel Object Handle Table gefunden, und ich denke, dass (die Leute sagen, dass sie umgekehrt waren). manipulierte undokumentierte Speicherstrukturen) erinnere ich mich an das Lesen im Softice-Handbuch vor Jahren.

Ein Ort für weitere Informationen könnte File System Filter Drivers sein.

Ein anderer (vielleicht besserer) Weg könnte sein, depends oder dumpbin /imports zu verwenden, um zu sehen, welche APIs das relevante Sysinternals-Programm verwendet.