2017-07-27 2 views
5

Ich versuche, ein einfaches Protokoll von Dateien über SMB übertragen.C# Log SMB Dateizugriff

Dies funktioniert mit Windows 8 oder höher:

var scope = new ManagementScope(@"\\.\root\Microsoft\Windows\SMB"); 

var query = new WqlEventQuery(

@"SELECT * 
    FROM 
     __InstanceOperationEvent WITHIN 1 
    WHERE 
     TargetInstance ISA 'MSFT_SmbOpenFile'" 

); 

ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query); 
watcher.EventArrived += new EventArrivedEventHandler(HandleEvent); 

watcher.Start(); 

.... 

But it does not work for windows 7 or lower. (Run-time requirements)

Gibt es eine ähnliche Lösung, die mit Windows 7 kompatibel ist zumindest?

1º bearbeiten

Es sieht möglich, da diese Windows 7-Modul diese Aufgabe hat:

Computerverwaltung (Ich sehe diese Daten auf Windows 7)

mmc.exe

2º Bearbeiten

Um den Zweck zu verdeutlichen. Ich baue eine DLP application (Data Loss Prevention). Ich muss Dateien überwachen und protokollieren, auf die über Windows-Freigabe (Benutzer, Dateiname) zugegriffen wird, und diesen Zugriff in dem Moment blockieren, in dem der Benutzer die Datei anfordert.

+1

Sie können sich die NET-Befehlsfamilie anschauen - 'net files' - gibt die [Liste der geöffneten Dateien] (https://technet.microsoft.com/en-us/library/bb490702.aspx). 'net session' gibt [die Liste der Sitzungen] (https: // technet.microsoft.com/en-us/library/bb490711.aspx). – Subbu

+0

Great Subbu, ich schaue mir jetzt die Dokumentation an und suche nach etwas Ereignisbasiertem, damit ich benachrichtigt werden kann, anstatt den Befehl nacheinander auszuführen. –

Antwort

0
+0

Hallo @ sancho.s, tks für die Antwort. Ich habe diese Funktion vor dem Posten gesehen. Dies ist die erste verwandte Frage in der Liste. Obwohl es etwas ist, was ich brauche, ist es nicht ereignisgesteuert und erlaubt mir nicht, die Leseanforderung abzubrechen. Könnten Sie bitte ein Beispiel veröffentlichen? –

+0

@ ViniciusGonçalves - Sie haben Recht. Bitte sehen Sie die aktualisierte Antwort. –