在管理员模式下无法查询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;
}
代码说明:在消息框上返回映射网络位置的字母和文件夹/卷名
参见Win32_MappedLogicalDisk的备注,特别是:
但是,是否返回实例取决于控制面板管理工具中的本地安全策略设置。如果将以下策略设置为"Object Creator",则不返回映射的驱动器实例,即使A是Administrators组的成员:"系统对象:由administrators组成员创建的对象的默认所有者。"
和
如果机器上有多个用户A的会话,则不返回映射的驱动器实例(因为提供者没有合理的方法来决定使用哪个会话)。
所以有一些情况下,Win32_MappedLogicalDisk不返回驱动器,即使它们被添加。我可能会检查安全设置、策略等。