Ist es möglich, wenn eine Dateioperation irgendwie aufgerufen wird - wie Öffnen oder Schließen - dass ich damit umgehen kann, bevor die Anfrage vom Betriebssystem ausgeführt wird und wenn möglich, durch .NET abbrechen? Wenn .NET keine Fähigkeiten wie diese hat, wie kann ich das tun?Ist es möglich, Dateioperationen mit .NET zu verfolgen?
Antwort
Was Ihr fragen können zu tun getan werden. Viren-Scanner zum Beispiel machen es die ganze Zeit. Sie können die Dateiaktivität einfach mit Process Monitor überwachen. Sie können es auch programmgesteuert in C# mit der FileSystemWatcher Class 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 eine File System Filter Driver 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 diese Art und Weise heraus zu tun, dass in .NET/C#:
Sysinternals bietet ein kostenloses Tool Process Monitor genannt, eine Funktion, von denen beliebige Windows-Prozesse zu befestigen ist (einschließlich .NET-Anwendungen) und Capture Systemaufrufe, einschließlich Datei öffnen, schließen, lesen usw.
Sie können es unter der Process Monitor Download Page herunterladen.
EDIT
Wie ich Ihre Frage erneut lesen, ich sehe, dass Sie über das Abfangen und möglicherweise Aufhebung solcher Operationen sind gefragt. Ich glaube, dass die FileSystemWatcher
Klasse Ihre beste Wette sein wird, obwohl ich nicht denke, dass sie Dateioperationen einseitig abbrechen kann - Sie müssten eine Art kooperativen Mechanismus aufbauen, um dem Anrufer zu signalisieren, dass er den Vorgang abbricht.
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 Sie in C programmieren müssen. Schauen Sie sich File System Drivers an.
UPDATE: diese SO link kann helfen.
UPDATE: hinzugefügt, um eine Google-Suche nach Windows File System Drivers
AUCH What is a good resource to get started with Windows file system driver development?
- 1. Ist es möglich, die Zuordnung/Freigabe zu verfolgen?
- 2. Ist es möglich, Zieltelefon ohne Netzwerk zu verfolgen
- 3. Ist es möglich, eine PostMessage zwischen Prozessen zu verfolgen?
- 4. Ist es möglich, einen Alias mit .net-Typ zu deklarieren?
- 5. Ist es möglich, .NET Reactor mit ClickOnce-Bereitstellung zu verwenden?
- 6. C# .NET Winforms: Ist es möglich, Label.Autosize zu überschreiben?
- 7. Ist es möglich, Hashcodes als Bitmaske zu verwenden, um Sammlungsmitgliedschaft effizient zu speichern/zu verfolgen?
- 8. Ist es möglich, Beobachter zu TableView.contentOffset hinzuzufügen?
- 9. Ist es möglich, anonyme Funktionen in C++ .NET zu verwenden?
- 10. Ist es möglich, die .NET-Garbage Collection zu stoppen?
- 11. Nhibernate .Net-Attributzuordnung. Es ist möglich, den Standardwert zu setzen?
- 12. Ist es möglich, .net dll aus Lua-Code zu laden?
- 13. Ist es möglich, die gesamte .NET-Anwendung zu dekompilieren?
- 14. ESP8266 - ist .Net möglich?
- 15. Mit Crossfilter ist es möglich, Max/Min beim Gruppieren zu verfolgen?
- 16. Ist es möglich zu wissen, ob .NET Framework von einer .NET-Anwendung installiert ist?
- 17. Ist es möglich, mit Boost.Hana zu deserialisieren?
- 18. Ist es möglich, InfluxDB zu verwenden, um Kundennutzungen zu verfolgen (Server, Desktops, etc ...)
- 19. Ist es möglich, die Speichernutzung in einer C# -Anwendung zu verfolgen, ohne einen Profiler zu verwenden?
- 20. Ist es möglich, Thread-Exit mit spezifischem Fehlercode zu unterbrechen?
- 21. Ist es möglich, eine ListViewGroup zu erstellen
- 22. Ist es möglich, mit javaFX & swing sexy GUI zu machen?
- 23. Ist es möglich, Click Throughs vom iPhone zu verfolgen Smart Banner
- 24. Ist es möglich, einen PC mit "reinem" .NET und * ohne * mit p/invoke neu zu starten?
- 25. Ist es möglich, einen Benutzer zu verfolgen, der die Proxy-Website verwendet?
- 26. Ist es möglich, kopierten Code auf eine Website zu verfolgen, von der er abgerufen wurde?
- 27. Ist es möglich, Ansichten und Klone meiner GitHub Repositories zu verfolgen
- 28. Ist es möglich, Google Analytics für die Serverseite zu verwenden?
- 29. Ist es möglich, C++ Assert von .net App
- 30. Ist es möglich, Reflexion mit LINQ zu Entität zu verwenden?
Link funktioniert nicht mehr. –
@JamesWilkins es muss vorübergehend gewesen sein. Beide Links haben nur für mich funktioniert. Beste – kenny