E 'possibile che quando un'operazione di file viene chiamata in qualche modo - come open o close - che posso gestirla prima che la richiesta proceda dal sistema operativo e, se possibile, cancellarla tramite .NET? Se .NET non ha abilità del genere, come posso fare questo?È possibile tracciare le operazioni sui file con .NET?
risposta
Che cosa il vostro chiedendo di fare può essere fatto. Gli scanner antivirus, ad esempio, lo fanno sempre. È possibile monitorare facilmente l'attività dei file con Process Monitor. Puoi anche farlo a livello di programmazione in C# usando FileSystemWatcher Class. Ma cercare di impedire a un programma di aprirsi o tentare di impedire a un programma di accedere al file non può essere fatto in C#. Dovrai usare C o C++. È necessario creare un File System Filter Driver. È una cosa complessa da costruire ma è esattamente ciò di cui hai bisogno. Per quotare 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.
È possibile collegare l'API di Windows se si desidera. Dai un'occhiata a questo modo di fare che in .NET/C#:
Sysinternals offre uno strumento gratuito chiamato Process Monitor, una funzione è quello di collegare a processi arbitrari Windows (incluse le applicazioni .NET) e la cattura chiamate di sistema, tra cui file aperto, chiuso, letto, ecc.
È possibile scaricarlo allo Process Monitor Download Page.
EDIT
Come ho riletto la tua domanda, vedo che si sta chiedendo intercettare ed eventualmente l'annullamento di tali operazioni. Credo che la classe FileSystemWatcher
sia la soluzione migliore, anche se non penso che possa annullare unilateralmente le operazioni sui file - è necessario creare una sorta di meccanismo cooperativo per segnalare al chiamante di interrompere la sua operazione.
Sono abbastanza sicuro che devi entrare nel kernel per questo tipo di operazione e sono abbastanza sicuro che significa che dovrai codificare C. Osservare File System Drivers.
AGGIORNAMENTO: questo SO link può essere d'aiuto.
UPDATE: aggiunta una ricerca su Google per Windows File System Drivers
ANCHE What is a good resource to get started with Windows file system driver development?
- 1. operazioni sui file Python
- 2. Come tracciare le operazioni IO per file in Linux?
- 3. Asyncio supporta l'I/O asincrono per le operazioni sui file?
- 4. iOS supporta le operazioni sui file tramite SMB?
- 5. è possibile tracciare timeline con matplotlib?
- 6. Le operazioni del terminale sui flussi chiudono la sorgente?
- 7. È possibile utilizzare le funzioni a punto fisso sui polinomi?
- 8. Tracciare le frecce con gnuplot
- 9. È possibile tracciare un'immagine su una mappa con matplotlib?
- 10. È possibile tracciare una linea con SpriteKit animato?
- 11. è possibile impostare i metadati personalizzati sui file, utilizzando Java?
- 12. È possibile eseguire gli assembly .NET 2.0 con .NET 4.0?
- 13. Come limitare le operazioni di I/O nell'applicazione .NET?
- 14. È possibile creare un'applicazione con .NET 4.5 su .NET 4.0?
- 15. È possibile tracciare la busta SOAP inviata da un client di servizio Web .NET?
- 16. Operazioni binarie sui binari di Erlang?
- 17. Come utilizzare le operazioni interbloccate su file mappati in memoria .Net
- 18. È possibile recuperare le informazioni sui file tramite riflessione in C#?
- 19. In Protobuf-net, è possibile serializzare le classi non decorate?
- 20. Come verificare le operazioni di file system
- 21. Le operazioni di stringa .NET sono sensibili al maiuscolo/minuscolo?
- 22. Come utilizzare le operazioni interbloccate x64 contro MemoryMappedFiles in .net
- 23. È possibile eseguire Hadoop in operazioni Pseudo-Distribuite senza HDFS?
- 24. Operazioni matematiche di precisione singola in .NET?
- 25. Operazioni [SQLITE_BUSY] file di database è bloccato con select
- 26. Tracciare le normali distribuzioni
- 27. Distribuire l'applicazione exe .NET (C#) sui desktop
- 28. drawRect UIView: è possibile tracciare all'interno di un percorso?
- 29. Target .net 4.5 ma distribuire su .net 4.0 è possibile?
- 30. È possibile eseguire Mercurial per preservare le autorizzazioni dei file?
Link non funziona più. –
@JamesWilkins deve essere stato temporaneo. Entrambi i link hanno funzionato per me. Migliore – kenny