2012-05-10 19 views
8

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

6

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.

2

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.

1

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?

+0

Link już nie działa. –

+0

@JamesWilkins musi być tymczasowy. Oba łącza właśnie dla mnie działały. Najlepiej – kenny

Powiązane problemy