Как контролировать активность ввода-вывода процесса с помощью C #? - PullRequest
4 голосов
/ 19 октября 2010

Используя FileSystemWatcher, мы можем отслеживать активность ввода-вывода конкретной файловой системы, но есть ли возможность узнать, какой из запущенных процессов вызывает этот ввод?

В частности, предположим, что запущен процесс, а именно.abc.exe создает файл text.txt на диске D. Мы можем отслеживать, что файл с именем text.txt был создан на диске D, с помощью FileSystemWatcher, но мы можем программно определить, что процесс с именем abc.exe создает этот конкретный файлна диске D?

Ответы [ 3 ]

6 голосов
/ 19 октября 2010

handle.exe от SysInternals - это инструмент командной строки, который обеспечивает программный доступ к той программе, в которой открыт определенный файл или каталог.

C:\>handle.exe c:\Windows\system32\stdole2.tlb

Производит этот вывод:

Handle v3.42
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com
devenv.exe         pid: 5240    184: C:\Windows\System32\stdole2.tlb
Ssms.exe           pid: 5000    1F4: C:\Windows\System32\stdole2.tlb

Который может быть проанализирован программно.

http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx

1 голос
/ 19 октября 2010

Нет, это невозможно. FSW находится на очень низком уровне в стеке драйверов файловой системы. Он может только сказать, что файловая система модифицируется, он не знает, кем. Это очень задумано, это может быть процесс, который находится на полпути по всему миру, используя VPN-соединение через Интернет для использования общего файлового ресурса. Для вашего запроса нет разумной альтернативы.

0 голосов
/ 19 октября 2010

Я бы порекомендовал для этого утилиты SysInternals, а не свои собственные.

http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx

...