有沒有通過編程的方式找出映射驅動器當前正在使用的方法?如果我嘗試使用net use
卸載驅動器,並且正在使用該驅動器,它會告訴我驅動器正在使用並提示我採取進一步的行動。我可以編程方式查明驅動器是否在使用中?
我希望能夠自動取消映射驅動器,如果它不再被使用。該系統是Windows XP。
有沒有通過編程的方式找出映射驅動器當前正在使用的方法?如果我嘗試使用net use
卸載驅動器,並且正在使用該驅動器,它會告訴我驅動器正在使用並提示我採取進一步的行動。我可以編程方式查明驅動器是否在使用中?
我希望能夠自動取消映射驅動器,如果它不再被使用。該系統是Windows XP。
在較高層次上,您需要枚舉所有打開的文件句柄(或者更確切地說,所有打開的句柄,然後過濾除文件句柄之外的所有內容),然後查找任何文件句柄,其對象名稱與映射網絡驅動器的設備相匹配名稱。
這是很多低級的Win32 APIs(NtQuerySystemInformation,NtQueryInformationFile,NtQueryObject等),但是it's definitely doable。如果你要走這條路,我建議你拿起Windows Internals的副本加上淘汰MSDN和Mark Russinovich的blog。
我不認爲這是你會在這裏得到一個完整的答案的類型,除非可能有一個開源項目已經在做它可以鏈接到。例如,Sysinternals工具的來源曾經是免費提供的,仍然可以找到,就像這個v4.3x version of the FileMon source,這可能會有所幫助。
如果這是一個室內的應用程序,爲lowtech簡單的解決辦法,我建議從Technet下載Handle
應用程序,並從流程執行,然後你的過程可以讀取每個驅動器的結果和過濾器,看看是否有任何人都在您感興趣的驅動器上。
請注意,我沒有檢查過Handle
的許可條款實際上允許這種用法,但是他們會在您第一次執行它時彈出,以便您可以檢查它們。
即使該特定應用的許可與他的用例不兼容,也有許多應用能夠提供此信息。 Sysinternals Suite絕對是一個體面的開始。 – hemp 2010-06-02 07:50:29