Hallo,
Also ich hab momentan ein kleines Problem mit einem Datei-Handle, welches ich nicht selbst erstellt habe. Prinzipiell kann man sich das so vorstellen: ich bekomme ein Datei-Handle eines fremden Prozesses und weiß also nicht wie dieses erstellt wurde. Nun brauche ich einen Nt/WinAPI Befehl um zu erfahren, um herauszufinden, welcher Sharing-Modus das Handle gerade hat. Auf Treiberebene würde es ja über die FILE_OBJECT Struktur gehen, nur leider darf ich das Windows DDK nicht nutzen und ich glaube das würde die Benutzer nur verärgern, wenn sie extra einen Treiber installieren müssten. Gibt es vielleicht einen Weg auf User-Application Ebene darauf zuzugreifen? Ich meine das dwShareMode Flag, welches schon bei CreateFile gesetzt wird.
Fremdes Datei-Handle: ShareMode auslesen
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Fremdes Datei-Handle: ShareMode auslesen
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Re: Fremdes Datei-Handle: ShareMode auslesen
.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Fremdes Datei-Handle: ShareMode auslesen
Hallo,marroh hat geschrieben:Grüsse Dich
Schau Dir mal dieses VB6 Beispiel an.
Das Programm dient dazu gesperrte Dateien und deren Handels ausfindig zu machen. Ev. kann man daraus etwas erarbeiten.
Wenn Du kein VB6 hat - alle Dateien lassen sich auch im normalen Windows-Editor öffnen.
Auf den ersten Blick in den Source (modLockFileInfo.bas) scheinen mir folgende API-Funktion zu gebrauchen sein:
NtQuerySystemInformation(), NtQueryObject(), NtDuplicateObject(), NtOpenProcess() und NtClose().
Hoffe es hilft Dir etwas weiter.
Gruss
Martin
Leider hilft mir das nicht, denn das alles steht bereits. Trotzdem Danke für deine Antwort. Ich muss nur noch wissen mit welchem Shared-Modus die Datei geöffnet wurde.
Mit freundlichen Grüßen,
Daniel
Re: Fremdes Datei-Handle: ShareMode auslesen
.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Fremdes Datei-Handle: ShareMode auslesen
Nein, da wird nur geprüft, ob sich die Datei öffnen lässt mit CreateFile, aber da wird nicht geprüft, ob sie z.B. fürs löschen gelockt ist. Hierfür gibt es kein Prüfverfahren, das der Methode ähnelt, denn wenn man die Datei löscht ist sie weg. Ich muss vor dem löschen wissen, ob ich die Datei löschen kann. Umbenennen zählt nicht, denn das geht trotz Shared-Deletion Modus nicht. Deshalb will ich ja auf einem sauberen und halbwegs professionellen Weg den SharedMode des Handles auslesen.marroh hat geschrieben:Naja, so wie ich es auf den ersten Blick gesehen habe ist da sehr wohl der Wert für den Shared-Mode enthalten. Natürlich nicht in Purebasic... naja... guckst Du eben weiter![]()
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Re: Fremdes Datei-Handle: ShareMode auslesen
.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
-
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
Re: Fremdes Datei-Handle: ShareMode auslesen
Das GrantedAccess Feld beinhaltet nicht die Shared-Mask (überprüft, Wert ändert sich nicht bei geändertem Shared Status). Sysinternals gibt diesbezüglich auch nicht viel her, das war meine erste Suchquelle.marroh hat geschrieben:Dachte dies sei in dieser Struktur bei der ACCESS_MASK drin. Aber ich Denke inzwischen dass ich mich da geirrt habe.Code: Alles auswählen
typedef struct _SYSTEM_HANDLE { ULONG ProcessId; BYTE ObjectTypeNumber; BYTE Flags; USHORT Handle; PVOID Object; ACCESS_MASK GrantedAccess; } SYSTEM_HANDLE, *PSYSTEM_HANDLE;
Habe Die DDK-Doku privat nicht zu Verfügung.
![]()
Hast Du das Forum von sysinternals.com schon abgegrast und durchforstet? Denke wenn es einen "Sauberen" Weg gibt dann müsste diese Info dort zu kriegen sein.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.