Я хотел бы знать, возможно ли перечислить дескрипторы файлов в c#, возможно, с помощью Win32API. Это легко сделано для окна и дескрипторов процесса, но кажется, что это не возможно для дескрипторов файлов.
В то время как некоторая функциональность предлагается NtQuerySystemInformation, это постепенно сокращается, и поэтому не рекомендуется использовать такой метод.
Вы можете вызвать sysinternal Handle и проанализировать результат или написать драйвер файловой системы (может потребоваться несколько человеко-лет, а не может быть выполнено в C # )
Ну, вы знаете, что это возможно, утилита Handle от SysInternals делает это. NtQueryInformation не будет вытеснен, это важный низкоуровневый интерфейс между Win32 и "настоящей" операционной системой.
Что, однако, никогда не произойдет, так это то, что аргументы NtQueryInformation, позволяющие итерировать дескрипторы, будут документированы. Потому что это не ограничивается только этим, какой-нибудь придурок будет использовать это для вызова CloseHandle() на файле, который он/она не хочет, чтобы был заблокирован. Что является очень хорошим способом уничтожить содержимое вашего жесткого диска.
Процесс, которому принадлежал хэндл, не знает, что он закрыт. Он просто продолжит писать на него, вероятно, полностью игнорируя код возврата WriteFile() "ничего не получилось". Это безобидно до тех пор, пока программа не откроет другой хэндл, получив обратно то же значение, что и закрытый ранее. Теперь она начинает записывать в него смесь мусора (предназначенного для предыдущего хэндла) и новых данных. Полностью уничтожая содержимое того, куда он записывается. Раскрутите резервные ленты, если это что-то вроде критически важной базы данных.
Вот готовый класс для C # http://sourceforge.net/projects/processhacker/
Я нашел рабочий пример перечисления дескрипторов файлов с именами в C# здесь...
Прокрутите вниз до последней темы и перейдите по ссылке. И будьте предупреждены, когда вы скачаете код, комментарии будут на французском. Так получилось, что я изучаю французский, так что я могу понять большую часть этого.