Ist es möglich, wenn eine Dateioperation irgendwie aufgerufen wird - wie Öffnen oder Schließen -, dass ich damit umgehen kann, bevor die Anforderung vom Betriebssystem ausgeführt wird, und wenn möglich, durch . NET ? Wenn .NET keine Fähigkeiten wie diese hat, wie kann ich das tun?
Was Sie tun können, kann getan werden. Viren-Scanner zum Beispiel machen es die ganze Zeit. Mit Process Monitor können Sie die Dateiaktivität einfach überwachen. Sie können dies auch programmgesteuert in C # mithilfe der FileSystemWatcher-Klasse tun. Aber es kann nicht in C # getan werden, ein Programm daran zu hindern, das Programm zu öffnen oder zu versuchen, den Zugriff auf die Datei zu verhindern. Sie müssen entweder C oder C ++ verwenden. Sie müssen einen Dateisystemfiltertreiber erstellen. Es ist eine komplexe Sache zu bauen, aber es ist genau das, was Sie brauchen. Um MSDN zu zitieren:
A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its intended target, the filter driver can extend or replace functionality provided by the original target of the request. Examples of file system filter drivers include anti-virus filters, backup agents, and encryption products.
Sie können die Windows-API anschließen, wenn Sie möchten. Sehen Sie sich dazu in .NET / C # an:
Sysinternals bietet ein kostenloses Tool mit der Bezeichnung Process Monitor, mit dem man sich an beliebige Windows-Prozesse (einschließlich .NET-Anwendungen) anhängen und Systemaufrufe erfassen kann, einschließlich Öffnen, Schließen, Lesen usw.
Sie können es auf der Download-Seite des Prozess-Monitors herunterladen.
BEARBEITEN
Wenn ich Ihre Frage noch einmal durchgelesen habe, sehe ich, dass Sie solche Vorgänge abfangen und möglicherweise abbrechen möchten. Ich glaube, dass die FileSystemWatcher
-Klasse die beste Wahl ist, obwohl ich nicht denke, dass sie Dateioperationen einseitig abbrechen kann - Sie müssten einen kooperativen Mechanismus aufbauen, der dem Aufrufer signalisiert, den Vorgang abzubrechen.
Ich bin mir ziemlich sicher, dass Sie bei dieser Art von Operation in den Kernel einsteigen müssen und ich bin mir ziemlich sicher, dass das bedeutet, dass Sie in C programmieren müssen. Sehen Sie sich Dateisystemtreiber .
UPDATE: Dieser SO-Link kann helfen.
UPDATE: Es wurde eine Google-Suche für Windows-Dateisystemtreiber
ALSO Was ist eine gute Ressource, um mit der Entwicklung von Windows-Dateisystemtreibern zu beginnen?