2010-06-02 38 views
2

有没有通过编程的方式找出映射驱动器当前正在使用的方法?如果我尝试使用net use卸载驱动器,并且正在使用该驱动器,它会告诉我驱动器正在使用并提示我采取进一步的行动。我可以编程方式查明驱动器是否在使用中?

我希望能够自动取消映射驱动器,如果它不再被使用。该系统是Windows XP。

回答

1

在较高层次上,您需要枚举所有打开的文件句柄(或者更确切地说,所有打开的句柄,然后过滤除文件句柄之外的所有内容),然后查找任何文件句柄,其对象名称与映射网络驱动器的设备相匹配名称。

这是很多低级的Win32 APIs(NtQuerySystemInformation,NtQueryInformationFile,NtQueryObject等),但是it's definitely doable。如果你要走这条路,我建议你拿起Windows Internals的副本加上淘汰MSDN和Mark Russinovich的blog

我不认为这是你会在这里得到一个完整的答案的类型,除非可能有一个开源项目已经在做它可以链接到。例如,Sysinternals工具的来源曾经是免费提供的,仍然可以找到,就像这个v4.3x version of the FileMon source,这可能会有所帮助。

1

如果这是一个室内的应用程序,为lowtech简单的解决办法,我建议从Technet下载Handle应用程序,并从流程执行,然后你的过程可以读取每个驱动器的结果和过滤器,看看是否有任何人都在您感兴趣的驱动器上。

请注意,我没有检查过Handle的许可条款实际上允许这种用法,但是他们会在您第一次执行它时弹出,以便您可以检查它们。

+0

即使该特定应用的许可与他的用例不兼容,也有许多应用能够提供此信息。 Sysinternals Suite绝对是一个体面的开始。 – hemp 2010-06-02 07:50:29

相关问题