Могу ли я программно узнать, используется ли диск?
Есть ли способ программно узнать, используется ли подключенный диск в настоящее время? Если я попытаюсь размонтировать диск с net use
, и диск используется, он сообщит мне, что диск используется, и предложит мне предпринять дальнейшие действия.
Я хотел бы иметь возможность автоматически отключать диск, если он больше не используется. Система Windows XP.
2 ответа
На высоком уровне вам нужно будет перечислить все открытые дескрипторы файлов (или, вернее, все открытые дескрипторы, затем отфильтровать все, кроме файловых дескрипторов), а затем искать любые файловые дескрипторы, имя объекта которых соответствует имени устройства подключенного сетевого диска.
Это много низкоуровневых Win32 API (NtQuerySystemInformation, NtQueryInformationFile, NtQueryObject и т. Д.), Но это определенно выполнимо. Если вы идете по этому пути, я бы порекомендовал взять копию Windows Internals, а также просмотреть MSDN и блог Марка Руссиновича.
Я не думаю, что это тот тип вещей, на который вы получите полный ответ здесь, если, возможно, не существует проекта с открытым исходным кодом, который уже делает это, с которым можно связать. Например, источник инструментов Sysinternals имел обыкновение быть в свободном доступе и все еще может быть найден, как эта версия v4.3x источника FileMon, которая может пролить некоторый свет.
Если это внутреннее приложение, то в качестве простого решения я бы предложил загрузить Handle
приложение из Technet и выполнение из вашего процесса, а затем ваш процесс может прочитать результаты и отфильтровать по каждому диску, чтобы увидеть, есть ли какие-либо из них на диске, который вас интересует.
Обратите внимание, я не проверил, что условия лицензии для Handle
на самом деле разрешает такое использование, но они появляются при первом запуске, так что вы можете проверить их потом.