我有System.Management.WqlEventQuery收听"__InstanceOperationEvent"
事件。此事件是"__InstanceCreationEvent"
,"__InstanceDeletionEvent"
和"__InstanceModificationEvent"
事件的基类,因此它会捕获所有这三个事件。
当我的 WqlEventQuery.Condition 为"TargetInstance ISA 'Win32_LogicalDisk'"
时,我只会按预期获得逻辑磁盘的事件。
但是,当我的 WqlEventQuery.Condition 为"(TargetInstance ISA 'Win32_LogicalDisk' or TargetInstance ISA 'Win32_MappedLogicalDisk')"
时,我仍然只能获得 Win32_LogicalDisk 事件。
或者,我也应该能够将 WqlEventQuery.Condition 设置为"TargetInstance ISA 'CIM_LogicalDisk'"
,因为 CIM_LogicalDisk 是 Win32_LogicalDisk 的基类和 Win32_MappedLogicalDisk 。不幸的是,这个替代查询也只返回 Win32_LogicalDisk 事件。
总之,我似乎无法捕获 Win32_MappedLogicalDisk 事件。我的假设是,当我右键单击网络共享并将其作为网络驱动器映射到新的驱动器号时,应生成此类事件。尽管这个新的映射驱动器在Explorer中显示得很好,但我的程序从未收到任何事件。
我的假设是否有误?什么是Win32_MappedLogicalDrive或与 DriveType 为“NetworkDrive”的Win32_LogicalDrive区别开来的是什么?如何使用WMI捕获连接/断开网络驱动器的事件?
更新:我在这里发布了更多有关此问题的信息:http://social.technet.microsoft.com/Forums/en-US/ocsmanagement/thread/1c92f08b-b9c9-4f27-a1bb-0c16a8868d19这是UAC的一个不幸的副作用,除了在一个网站下创建重复的驱动器映射之外没有任何解决方法行政帐户。
答案 0 :(得分:2)
我在周围搜索,这是(像往常一样)某种与Vista / Window 7 UAC相关的行为,而且确实足够...... http://www.vistax64.com/powershell/270814-win32_mappedlogicaldisk-returns-null-vista.html
由于映射的驱动器是“每个用户”,因此作为管理员提升运行的WMI查询无法看到由非提升用户(例如,来自资源管理器)映射的驱动器。这是违反直觉的,因为通常应用程序可以访问以管理员身份运行的更多信息,而不是更少。因此,根据谁映射驱动器,它可能对程序可见,具体取决于它是否以提升的权限运行。我想我将不得不使用模拟选项来确保程序找到它可能访问的所有驱动器。
此外,一旦这个工作,我看到网络驱动器的重复条目,并意识到Win32_LogicalDisk对象集包括Win32_MappedLogicalDisk对象,即使Win32_MappedLogicalDIsk不是任何类层次结构的Win32_LogicalDisk。 Win32_MappedLogicalDisk,如Win32_LogicalDisk,根据文档直接从CIM_LogicalDisk扩展。
请参阅此处有关UAC对映射驱动器引起的问题的讨论:http://blogs.msdn.com/b/cjacks/archive/2007/02/19/mapped-network-drives-with-uac-on-windows-vista.aspx?PageIndex=2
摘录:
“我的存根正在升级为管理员。 你有什么建议吗? 检测驱动标准用户的是什么 已映射,然后进行映射 再次?或者我需要两个存根: 首先运行没有提升,a 列出(例如,到注册表)的列表 映射的驱动器,然后炮弹到 存根#2,要求提升到 管理员,读取注册表列表和 重新映射驱动器。 听起来有点儿 Rube Goldberg跟我一样!“
另一种解决方法有点像复制管理员的驱动器映射,但涉及允许通过链接其标记与管理员共享正常的用户驱动器映射。见http://support.microsoft.com/kb/937624