как я могу получить набор открытых дескрипторов для всех процессов

Я хотел бы знать, открыт ли файл каким-либо процессом (включая вызывающего). Уже опубликован ряд предложений, которые, как правило, вращаются вокруг попытки открыть файл исключительно и поймать исключение.

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


person Ralph Shillington    schedule 05.10.2009    source источник


Ответы (3)


Я не думаю, что вы можете решить эту проблему просто с помощью .NET и P/Invoke. Вам потребуется доступ к функциям низкого уровня. См. решение, опубликованное AdaraCD в этой теме на другом форуме, использующем комплект разработки драйверов (DDK):

Перечисление HANDLE для процесса

person Dirk Vollmar    schedule 16.10.2009

Путь бедняка состоял бы в том, чтобы обработать файл handle.exe от sysinternals. Я не знаю, можно ли его распространять. он должен быть запущен от имени администратора (я почти уверен, что вам нужны права администратора, чтобы делать то, что вы хотите). в любом случае, если вы можете просто запустить его и перенаправить вывод в файл или захватить его стандартный вывод, вам просто нужно проанализировать его вывод, чтобы получить то, что вы хотите. Я сделал поиск в Интернете, и не оказалось, что метка r. когда-либо выпускал исходный код для своей утилиты.

это, очевидно, не очень хорошее решение, если у вас есть приложение, которое вы распространяете, но если оно только внутри компании, возможно, этого будет достаточно.

с уважением, дон

person Don Dickinson    schedule 05.10.2009

Насколько я помню, код handle.exe имеет открытый исходный код, поэтому вы можете использовать эту замечательную утилиту в качестве эталона.

person Pirks    schedule 15.10.2009