Как мне перечислить все открытые файлы в системе в C #? - PullRequest
2 голосов
/ 01 ноября 2010

Попытка перечислить все открытые файлы в системе Windows в C #.Я не могу найти собственный способ сделать это, есть ли другой способ, кроме как использовать API NtQuerySystemInformation?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Да, это было намеренно не включено в документированный API. Перечисление открытых файлов никогда не может работать надежно в многозадачной операционной системе, вы не можете «заморозить» операционную систему и помешать другим процессам открывать и закрывать файлы во время их перечисления. Состояние гонки неразрешимо. Единственный документированный способ - попытаться открыть файл без общего доступа.

Да, NtQuerySystemInformation - это задняя дверь. Используется утилитой SysInternals 'Handle. И поддерживается ими, поскольку каждая новая версия Windows требует обновления утилиты.

0 голосов
/ 01 ноября 2010

Вы, вероятно, можете сделать это, сначала перечислив все дескрипторы в системе, а затем получив имя файла для каждого дескриптора, являющегося дескриптором файла.

Это моя старая программа, которая перечисляет дескрипторы, найдитекоторые являются дескрипторами процесса для определенного процесса и печатают их.Вам нужно будет изменить его с дескрипторов процесса на дескрипторы файла.http://nopaste.info/eb9917d719.html Но он использует NtQuerySystemInformation.

Здесь описывается, как получить имя файла из дескриптора: http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx

...