当在一个进程中运行而不是在另一个进程中运行时,会从以下代码行抛出无用的“通用失败”错误。我无法弄清楚进程之间有什么不同(它们都以管理员身份运行 32 位)。
WbemScripting::ISWbemObjectSetPtr hdobjects = services->ExecQuery("Select * from Win32_LogicalDisk","WQL",0x10,NULL);
任何想法为什么?
这是因为 COM 安全性在每个进程中设置不同。这在每个进程中由对 的启动调用确定CoInitializeSecurity
。
DLL 一旦被调用就无法重置它,但可以为当前的 Wbem 连接设置安全性CoSetProxyBlanket
。
我无法轻易弄清楚如何通过 WbemScripting 正确设置它,所以我用 COM 调用重新实现,就像这里的广泛示例一样,只是没有步骤 2:
http://msdn.microsoft.com/en-gb/library/windows/desktop/aa390423(v=vs.85).aspx