Fremdes Datei-Handle: ShareMode auslesen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Fremdes Datei-Handle: ShareMode auslesen

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

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag von NoUser »

.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag 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
NoUser

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag von NoUser »

.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag 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 :wink:
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.
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.
NoUser

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag von NoUser »

.
Zuletzt geändert von NoUser am 01.09.2012 07:35, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Fremdes Datei-Handle: ShareMode auslesen

Beitrag 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. :oops: 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.
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.
Antworten