как я могу получить набор открытых дескрипторов для всех процессов - PullRequest
1 голос
/ 05 октября 2009

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

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

Ответы [ 3 ]

1 голос
/ 16 октября 2009

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

Enum РУЧКИ для процесса

1 голос
/ 06 октября 2009

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

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

С наилучшими пожеланиями, дон

0 голосов
/ 15 октября 2009

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

...