also ich hab jetzt schonmal folgendes hinbekommen:
ich hab mir ein kleines delphi test programm geschrieben, dass mir eine Datei (hier C:\Test.txt) exklusiv öffnet. ich hab es jetzt hinbekommen mit code aus nebbets buch mir alle geöffneten handles eines projekts anzeigen zu lassen.
dazu öffne ich den Prozess mit OpenProcess, dann ruf ich ZwQuerySystemInformation auf, um die
handle informationen zu bekommen mit ZwDuplicateObject dupliziere ich den
Handle und mit ZwQueryObject les ich informationen über das
Handle aus.
Somit hab ich mir mal nur die File Handles rausgefiltert.
Komischer weise sind das aber immer ganz ganz viele, jedoch wird immer nur das aktuelle Verzeichnis in dem das Programm läuft gesperrt und die geöffnete Datei (Test.txt). jedoch gibt es diese zwei objecte mit jede menge handles (siehe Anhang: all_file_handles.txt)
mein test programm hat jetzt beispielsweise die ProzessId: B84
wenn man in der all_file_handles.txt schaut sieht man genau folgende zwei einträge mit der prozessId: B84
Code:
Prozess-ID: b84
Object-Address: FD697228
Handle: c
GrantedAccess: 100020
Flags: 2
Attributes: 2
HandleCount: 1
PointerCount: 1
ObjectTypeInformation-Name: File
ObjectNameInformation-Name: \Device\HarddiskVolume1\
Prozess-ID: b84
Object-Address: 821D9C60
Handle: 4c
GrantedAccess: 120089
Flags: 0
Attributes: 0
HandleCount: 1
PointerCount: 1
ObjectTypeInformation-Name: File
ObjectNameInformation-Name: \Device\HarddiskVolume1\Test.txt
meine frage ist jetzt, warum bekomme ich hier so viele handles??? und wieso gehören nur die zwei zum prozess? was sind das dann für andere handles?
ich bin jetzt auch schon so weit, dass ich das
handle an den treiber übergeben kann. nur wie muss ich jetzt vorgehen, wenn ich die dateisperre auf treiber basis lösen will? was muss ich da aufrufen der reihe nach? ich denk mal ich hab eigentlich alle informationen.
vielen dank
gruß