有没有通过编程的方式找出映射驱动器当前正在使用的方法?如果我尝试使用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