Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Dateisperre freigeben (https://www.delphipraxis.net/53005-dateisperre-freigeben.html)

Olli 9. Jan 2006 16:37

Re: Dateisperre freigeben
 
Zitat:

Zitat von mumu
hmm ok danke olli.

wenn ich jetzt die Funktion ZwQueryObject im Treiber ausführen möchte, dann muss ich die sozusagen selbst importieren.

ich habe eine seite gefunden, die wirklich sau viel definiert hat...
pyrasis

Im Vergleich zum IFSKit ist das starker Mist, aber es ist nutzbar. Die aktuellste Headerdatei findest du ummer hier: http://www.acc.umu.se/~bosse/ntifs.h
Der "Autor" wird seit Jahren als Dieb beschimpft (diverse Mailinglisten).

Zitat:

Zitat von mumu
Wenn ich jetzt z.B. die Funktion ZwQueryObject verwenden möchte, dann leg ich mir ne header datei an in der ich folgendes schreib...
Code:
NTSYSAPI
NTSTATUS
NTAPI
ZwQueryObject (
    IN HANDLE              ObjectHandle,
    IN OBJECT_INFO_CLASS   ObjectInformationClass,
    OUT PVOID              ObjectInformation,
    IN ULONG               Length,
    OUT PULONG             ResultLength
);
und dann include ich diese header datei. oder?

Ja ...

Zitat:

Zitat von mumu
was bedeuten die 3 Ausdrücke vor dem ZwQueryObject?
NTSYSAPI
NTSTATUS
NTAPI

NTSTATUS ist ein Typ für die Statuscodes (ntstatus.h) und NTSYSAPI und NTAPI sind weitere Deklarationen, welche abhängig vom Linking entweder die Funktion exportieren (wenn MS den Source kompiliert) oder importieren (wenn du es tust). Ist ja ein übliches Schema in allen Headern.

Kleine Empfehlung: besorge dir das PSDK und das DDK (besser IFSKit oder WDK - in letzterem ist das IFSKit enthalten), danach besorge dir eine Desktop-Suchmaschine (ich benutze Copernic/CDS) - danach lasse das PSDK und das DDK indizieren und du kannst sogleich alles was du suchst einfach finden ;)

Mache ich schon eine Weile mit meinen Sourcen.

mumu 10. Jan 2006 07:12

Re: Dateisperre freigeben
 
Zitat:

Zitat von Olli
Kleine Empfehlung: besorge dir das PSDK und das DDK (besser IFSKit oder WDK - in letzterem ist das IFSKit enthalten), danach besorge dir eine Desktop-Suchmaschine (ich benutze Copernic/CDS) - danach lasse das PSDK und das DDK indizieren und du kannst sogleich alles was du suchst einfach finden ;)

Mache ich schon eine Weile mit meinen Sourcen.

ja danke werd ich auf jeden fall machen... Ach ja und die Function ZwQueryObject kann ich dann wahrscheinlich über ne header datei im IFSkit importieren, oder?

vielen dank erstmal, mal schauen ob ichs jetzt hinkrieg. meld mich mal wenn ich zeit gefunden hab weng was zu machen.

gruß

Olli 10. Jan 2006 09:11

Re: Dateisperre freigeben
 
Zitat:

Zitat von mumu
ja danke werd ich auf jeden fall machen... Ach ja und die Function ZwQueryObject kann ich dann wahrscheinlich über ne header datei im IFSkit importieren, oder?

Nein, daß ist leider eine, die nirgends deklariert ist (außer bei Nebbett, GNU-ntifs.h und vermutlich ROS).

Schreib mir mal ne PM.

NicoDE 10. Jan 2006 10:14

Re: Dateisperre freigeben
 
Zitat:

Zitat von Olli
Ich hoffe mal, daß z.B. Nico uns da etwas Aufklärung verschaffen kann?

Die Browseinfos kann man vergessen (nur meine persönliche Meinung :)).
Wer das Geld für MSVC hat, kann sich auch Visual Assist leisten.

Olli 10. Jan 2006 10:50

Re: Dateisperre freigeben
 
Zitat:

Zitat von NicoDE
Die Browseinfos kann man vergessen (nur meine persönliche Meinung :)).

Ohne die geht aber Intellisense nun mal nicht ... :-(
Zitat:

Zitat von NicoDE
Wer das Geld für MSVC hat, kann sich auch Visual Assist leisten.

Schon von gehört, umgeht das die Tatsache, daß man eine Browseinfo braucht? In dem Falle werde ich es mir nämlich zulegen.

Luckie 10. Jan 2006 11:38

Re: Dateisperre freigeben
 
Hallo ihr beiden, ihr werdet etwas offtopic. ;)

NicoDE 10. Jan 2006 12:26

Re: Dateisperre freigeben
 
Zitat:

Zitat von Olli
Schon von gehört, umgeht das die Tatsache, daß man eine Browseinfo braucht? In dem Falle werde ich es mir nämlich zulegen.

Es erzeugt seine eigenen Informationen (dadurch kann Visual Assist auch Makros und Konsorten bei der Autovervollständigung anbieten...). Wenn du dich erstmal an die Vorzüge von VA gewöhnt hast, kommt es dir vor, als ob du vorher mit den Händen auf dem Rücken gearbeitet hast :)
Zitat:

Zitat von Luckie
Hallo ihr beiden, ihr werdet etwas offtopic. ;)

Es geht IMHO immer noch um die Lösung des (nicht ganz trivialen) Problems...
edit: ja, es geht gerade darum, welche Tools eingesetzt werden können um das Problem effizienter zu lösen - dazu gehören nunmal IDEs und Tools :)
(wie auch immer, die Diskussion ist in dieser Richtung ohnehin zu Ende *g*)

Luckie 10. Jan 2006 12:30

Re: Dateisperre freigeben
 
Diskutioert ihr da jetzt nicht gerade die Vorzüge irgendwelche IDEs und Hilfsprogrammen? Aber gut wenn ihr meint... Ich will nichts gesagt haben. :cyclops:

mumu 10. Jan 2006 14:38

Re: Dateisperre freigeben
 
Zitat:

Zitat von NicoDE
Die Browseinfos kann man vergessen (nur meine persönliche Meinung :)).

wieso findest du, dass man die Browseinfos vergessen kann?!?!

Zitat:

Zitat von NicoDE
Es geht IMHO immer noch um die Lösung des (nicht ganz trivialen) Problems...
edit: ja, es geht gerade darum, welche Tools eingesetzt werden können um das Problem effizienter zu lösen - dazu gehören nunmal IDEs und Tools
(wie auch immer, die Diskussion ist in dieser Richtung ohnehin zu Ende *g*)

jo bin ich auch der meinung. gerade bei der treiber entwicklung gibt es jede menge auswahl möglichkeiten an tools und IDEs, welche die Entwicklung mehr oder weniger kompliziert machen.

Olli 10. Jan 2006 14:55

Re: Dateisperre freigeben
 
Zitat:

Zitat von mumu
jo bin ich auch der meinung. gerade bei der treiber entwicklung gibt es jede menge auswahl möglichkeiten an tools und IDEs, welche die Entwicklung mehr oder weniger kompliziert machen.

Also ich finde, daß VS schon ziemlich gut geeignet ist, wenn man es mit DDKBUILD betreibt usw., aber dennoch war da bei mir immer diese Sache mit dem fehlenden Intellisense. Ich hatte zwar das von Nico erwähnte Produkt schon aucf CodeProject gesehen, aber noch eine Weile bevor ich mir VC++ 2003 .NET geleistet hatte. Aber jetzt, wo ich schon professionell damit arbeite, kann ich mir ruhig auch mal sowas leisten :-D (ist bestellt, ich warte auf den Key).
An DDKBUILD hatte mich zuvor gestört, daß man bittesehr bei jedem Mal seine Projektdateien neu erstellen möge - und zwar manuell. Das hat sich mit meinem Perlscript dann ja auch erledigt :-P

Danke nochmal, Nico! :mrgreen: :zwinker:

Gruß nach Darmstadt und zum Rest der im Thread beteiligten,

mumu 18. Mär 2006 11:29

Re: Dateisperre freigeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
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ß

NicoDE 18. Mär 2006 12:16

Re: Dateisperre freigeben
 
Zitat:

Zitat von mumu
Komischer weise sind das aber immer ganz ganz viele

Etliche Dinge werden als 'Dateiobjekte' abgebildet (Mailslots, Pipes, Festplatten, Dateien, ...).

Olli 18. Mär 2006 13:28

Re: Dateisperre freigeben
 
Siehe Nico's Antwort und dann gibt es noch die Kernelobjekte, die eben in jedem Prozess eingeblendet sind. Wie es bei vererbten Handles aussieht, weiß ich im Moment garnicht.

mumu 18. Mär 2006 14:11

Re: Dateisperre freigeben
 
ja gut, dass würde auch sinn machen, dass teilweise handles von anderen prozessen eingeblendet werden. nur wie man in der all_file_handles.txt sieht, sind es immer pro prozess id 2 handles, einer auf das ausführungsverzeichnis und einer auf meine geöffnete datei. also ca. 20 verschiedene prozess-ids mit immer den genau gleichen 2 handles.

wie muss ich jetzt vorgehen, wenn ich die dateisperre lösen will? Muss ich da einfach das handle schließen? ich bin schon soweit, dass ich da zu schließende handle an den treiber übergeben kann.

mumu 21. Mär 2006 12:18

Re: Dateisperre freigeben
 
Zitat:

Zitat von mumu
ja gut, dass würde auch sinn machen, dass teilweise handles von anderen prozessen eingeblendet werden. nur wie man in der all_file_handles.txt sieht, sind es immer pro prozess id 2 handles, einer auf das ausführungsverzeichnis und einer auf meine geöffnete datei. also ca. 20 verschiedene prozess-ids mit immer den genau gleichen 2 handles.

wie muss ich jetzt vorgehen, wenn ich die dateisperre lösen will? Muss ich da einfach das handle schließen? ich bin schon soweit, dass ich da zu schließende handle an den treiber übergeben kann.

versteht ihr was ich da mein? wär klasse, wenn mir noch jemand helfen könnte


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz