Ermitteln welcher Benutzer eine Datei geöffnet hat
-
Guten Tag
Ich habe mehrere Netzwerkordner auf denen pdf und dxf Ordner liegen auf die mehrere Personen zugreifen.
Es kommt immer wieder vor dass eine Datei geöffnet ist wenn sie ersetzt werden soll.
Es werden nur die Betriebssysteme WinXP und Win7 verwendet.
Gibt es eine Möglichkeit herauszufinden welcher Benutzer die betreffende Datei gerade geöffnet hat?
-
Ich würde vermuten, das diese Funktion da nützlich ist:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb525378(v=vs.85).aspx...ansonsten gibts das auch schon als fertiges Tool: "openfiles.exe" (keine Ahnung seit welcher Windows Version das schon existiert)
-
Offiziell gibt es dazu seit Vista nur:
http://msdn.microsoft.com/en-us/library/ms645793.aspxDie erwähnte NetFileEnum fiunktioniert nicht für lokale Dateien. Bzw. für Dateien die icht über einen Share geöffnet wurden.
Gleiches gilt für OpenFiles.
Es gibt aber Hacks, die inoffizielle Windowsfunktionen benutzen.
-
Danke für den Link.
Es gibt aber Hacks, die inoffizielle Windowsfunktionen benutzen.
Kennst du zufälligerweise passende Links bzw. Beispiele zu diesem Thema?
Ich konnte leider nichts dazu finden.Denn leider laufen ca. 98% aller Rechner die auf diese Dateien zugreifen mit WinXP.
-
-
Stell deine Frage eventuell mal dort -> www.openrce.org
Dort findest du eine Reverse Code Engineering Community.
-
@geeky
Wenn ich dieses Projekt richtig verstehe, dann kann man nur das Programm ermitteln, der die Datei geöffnet hat aber nicht wer bzw. wo.Diese Frage kann ich auch ohne Programm beantworten:
Adobe Reader und DXF-View.Ich müsste aber wissen wen ich anrufen muss um ihn zu bitten die Datei zu schließen.
Ich habe inzwischen diverse Beispiele angeschaut und alle haben das Ergebnis geliefert dass der Administrator die Datei geöffnet hat.
Und dass obwohl es nicht der Fall ist.Hat zufällig jemand ein Beispiel das auch unter WinXP funktioniert?
-
Barny_ schrieb:
@geeky
Wenn ich dieses Projekt richtig verstehe, dann kann man nur das Programm ermitteln, der die Datei geöffnet hat aber nicht wer bzw. wo....
Hat zufällig jemand ein Beispiel das auch unter WinXP funktioniert?
Vielleicht so:
Mit dem Ansatz von geeky bekommt man die ProzessID raus
PSYSTEM_HANDLE_INFORMATION pSysHandleInformation = new SYSTEM_HANDLE_INFORMATION; DWORD size = sizeof(SYSTEM_HANDLE_INFORMATION); DWORD needed = 0; NTSTATUS status = NtQuerySystemInformation( SystemHandleInformation, pSysHandleInformation, size, &needed );
Mit der ProzessID die SID
Searching for a SID in an Access Token in C++
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379554(v=vs.85).aspxOpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &hToken )
Danach wird man vermutlich auch die SID noch in einen Benutzernamen
umrechnen koennen.Auch koennte das hier weiterhelfen
Get Process Info with NtQueryInformationProcess
http://www.codeproject.com/Articles/19685/Get-Process-Info-with-NtQueryInformationProcess