Czy jest to możliwe, gdy operacja na plikach jest wywołana w jakiś sposób - jak otwarcie lub zamknięcie - że mogę obsłużyć ją, zanim żądanie zostanie wykonane przez system operacyjny i, jeśli to możliwe, anulować ją przez .NET? Jeśli .NET nie ma takich umiejętności, jak mogę to zrobić?Czy można śledzić operacje na plikach w .NET?
Odpowiedz
co się z prośbą, aby zrobić można zrobić. Skanery antywirusowe, na przykład, robią to cały czas. Możesz łatwo monitorować aktywność plików za pomocą Process Monitor. Można to również zrobić programowo w języku C# przy użyciu FileSystemWatcher Class. Ale próba uniemożliwienia otwarcia programu lub próby zatrzymania programu dostępu do pliku nie może być wykonana w języku C#. Będziesz musiał użyć C lub C++. Musisz utworzyć File System Filter Driver. Jest to skomplikowana rzecz do zbudowania, ale jest dokładnie tym, czego potrzebujesz. Aby zacytować MSDN:
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.
Możesz podłączyć interfejs Windows API, jeśli chcesz. Sprawdź ten sposób, aby to zrobić w .NET/C#:
Sysinternals oferuje bezpłatne narzędzie o nazwie Process Monitor, którego jedną z funkcji jest dołączenie do dowolnych procesów systemu Windows (w tym aplikacji .NET) oraz wychwytywanie wywołania systemowe, w tym plik otwarty, zamknij, przeczytaj itd.
Możesz pobrać go pod numerem Process Monitor Download Page.
EDIT
Jak ponownie przeczytać pytanie, widzę, że pytasz o przechwytywaniu i ewentualnie anulowania takich operacji. Wierzę, że klasa FileSystemWatcher
będzie najlepsza, choć nie sądzę, że może jednostronnie anulować operacje na plikach - musiałbyś stworzyć jakiś mechanizm współpracy, który sygnalizowałby rozmówcy przerwanie jego działania.
Jestem prawie pewien, że musisz dostać się do jądra tego rodzaju operacji i jestem prawie pewien, że oznacza to, że będziesz musiał kodować w C. Spójrz na File System Drivers.
AKTUALIZACJA: ten SO link może pomóc.
UPDATE: dodano wyszukiwania Google dla Windows File System Drivers
TAKŻE What is a good resource to get started with Windows file system driver development?
- 1. RSpec: jak sprawdzić operacje na plikach i złożyć zawartości
- 2. Czy można śledzić PostMessage między procesami?
- 3. Operacje matematyczne z jedną precyzją w .NET?
- 4. czy można ustawić niestandardowe metadane na plikach, używając Java?
- 5. Czy można wycofywać operacje TransactionScope w przypadku Selenium lub Watin?
- 6. Android Czy chcesz śledzić użytkownika na Twitterze?
- 7. Czy operacje terminalowe na strumieniach zamykają źródło?
- 8. Czy można klonować strumień .NET?
- 9. Czy można definiować tablice ciągów w plikach zasobów .resx?
- 10. Czy należy zagnieżdżać oczekiwane operacje?
- 11. Czy można szeregować ExpandoObject w .NET 4?
- 12. python - operacje na listach
- 13. Czy można śledzić widoki i klony moich repozytoriów github?
- 14. Operacje na plikach C: Sprawdź tryb dostępu do wskaźnika otwartych plików
- 15. operacje LINQ na IDictionary
- 16. Czy Jedis obsługuje operacje asynchroniczne
- 17. Czy istnieje maksymalna liczba wydarzeń, które można śledzić w Google Analytics na iOS?
- 18. Jak można niezawodnie śledzić zwyczaje CSS?
- 19. LAPACK: Czy operacje na macierzach ze spakowanymi zasobami są szybsze?
- 20. Jak śledzić słuchaczy w Firebase na Androida?
- 21. Czy operacje zmiennoprzecinkowe w asocjacji C?
- 22. Bitowe operacje w OCaml
- 23. Czy parkiet obsługuje równoczesne operacje zapisu?
- 24. Jakie operacje są operacje atomowe
- 25. Epoll na zwykłych plikach
- 26. Czy źle jest śledzić zmienne wywołania zwrotnego?
- 27. Czy firma Dokan/Dokan.NET (nie) obsługuje synchroniczne operacje we/wy?
- 28. Klikanie na zwykłych plikach
- 29. Czy można załadować formularz .Net jako formant?
- 30. Czy można zatrzymać zbieranie śmieci .NET?
Link już nie działa. –
@JamesWilkins musi być tymczasowy. Oba łącza właśnie dla mnie działały. Najlepiej – kenny