Могу ли я программно узнать, используется ли диск? - PullRequest
2 голосов
/ 02 июня 2010

Есть ли способ программно узнать, используется ли подключенный диск в настоящее время? Если я попытаюсь размонтировать диск с помощью net use и использовать диск, он сообщит мне, что диск используется, и предложит мне предпринять дальнейшие действия.

Я бы хотел иметь возможность автоматически отключать диск, если он больше не используется. Система Windows XP.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

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

Обратите внимание, я не проверял, что условия лицензии для Handle фактически разрешают такое использование, но они появляются при первом запуске, так что вы можете проверить их потом.

1 голос
/ 02 июня 2010

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

Это много низкоуровневых Win32 API (NtQuerySystemInformation, NtQueryInformationFile, NtQueryObject и т. Д.), Но это определенно выполнимо . Если вы идете по этому пути, я бы порекомендовал взять копию Windows Internals плюс чистящий MSDN и блог Марка Руссиновича .

Я не думаю, что это тот тип вещей, на который вы получите полный ответ здесь, если, возможно, не существует проекта с открытым исходным кодом, который уже делает это, с которым можно связать. Например, источник инструментов Sysinternals имел обыкновение быть в свободном доступе и все еще может быть найден, как эта v4.3x версия источника FileMon , которая может пролить некоторый свет.

...