Seite 1 von 1
Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 01.06.2012 20:28
von DarkDragon
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.
Re: Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 14.06.2012 10:27
von NoUser
.
Re: Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 14.06.2012 19:20
von DarkDragon
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
Hallo,
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
Verfasst: 15.06.2012 14:58
von NoUser
.
Re: Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 15.06.2012 19:54
von DarkDragon
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
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.
Re: Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 17.06.2012 12:14
von NoUser
.
Re: Fremdes Datei-Handle: ShareMode auslesen
Verfasst: 17.06.2012 13:00
von DarkDragon
marroh hat geschrieben: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;
Dachte dies sei in dieser Struktur bei der ACCESS_MASK drin. Aber ich Denke inzwischen dass ich mich da geirrt habe.

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.
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.