在管理员模式下无法查询WMI

本文关键字:查询 WMI 管理员 模式 | 更新日期: 2023-09-27 18:05:33

我花了半天的时间才意识到,每当程序(c#)在管理员模式下运行时,我对WMI的所有查询都以0的计数返回,但是每当它正常运行时,它都会收到7的计数(这是我应该得到的正确计数值)及其相关值。如果VS在ADMIN模式下运行,这个问题也会在调试模式下发生。

这是在windows 10的最终版本(并在2015年7月31日完成更新)。尝试了不同的框架(4.0->4.6),以防它与此有关,尽管很明显它没有。

下面的代码可以在正常情况下工作,但不能在ADMIN模式下工作:

public static Dictionary<String, String> GetNetworkDrives()
        {
            Dictionary<String, String> RetuningDic = new Dictionary<string, string>();
            try
            {
                ManagementObjectSearcher searcher =
                    new ManagementObjectSearcher("root''CIMV2",
                        "SELECT * FROM Win32_MappedLogicalDisk");
                MessageBox.Show("Query count: " + searcher.Get().Count.ToString());
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    //Console.WriteLine("-----------------------------------");
                    //Console.WriteLine("Win32_MappedLogicalDisk instance");
                    //Console.WriteLine("-----------------------------------");
                    MessageBox.Show(queryObj["VolumeName"] + "||" + queryObj["DeviceID"]);
                    //String stuff = queryObj["ProviderName"] + "||" + queryObj["DeviceID"]; //queryObj["VolumeName"]
                    //Console.WriteLine(stuff);
                }
                MessageBox.Show("No errors");
            }
            catch (ManagementException e)
            {
                //Console.WriteLine("Error");
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
            return RetuningDic;
        }

代码说明:在消息框上返回映射网络位置的字母和文件夹/卷名

在管理员模式下无法查询WMI

参见Win32_MappedLogicalDisk的备注,特别是:

但是,是否返回实例取决于控制面板管理工具中的本地安全策略设置。如果将以下策略设置为"Object Creator",则不返回映射的驱动器实例,即使A是Administrators组的成员:"系统对象:由administrators组成员创建的对象的默认所有者。"

如果机器上有多个用户A的会话,则不返回映射的驱动器实例(因为提供者没有合理的方法来决定使用哪个会话)。

所以有一些情况下,Win32_MappedLogicalDisk不返回驱动器,即使它们被添加。我可能会检查安全设置、策略等。