WMI 查询的不同结果取决于用户帐户?
Different results from WMI query dependent on user account?
如果我 运行 针对 WMI 的以下查询:
\.\root\ccm\ClientSDK
Select * from CCM_Application where InstallState = "Installed"
当 运行 作为本地帐户(提升)时,我返回,比如 26 个结果,当 运行 作为本地系统帐户(来自 Windows 服务)时,我得到回少。在某些 PC 上它只是一个不同,在其他 PC 上它说 10 个结果不同,但没有错误或失败,只是结果数量不同。而且总是 SYSTEM 少,从来没有用户查询少。
我该如何解决这个问题,以便 运行ning as SYSTEM 返回所有数据?
P.S。这是 SCCM WMI 提供程序,如果您还没有听说过该命名空间。
这是由于某些应用程序针对的是用户而不是计算机。
我发现解决此问题的唯一方法是模拟当前登录的用户以进行此 WMI 调用。我使用以下本机 windows API 执行此操作:
WTSGetActiveConsoleSessionId
WTSQueryUserToken
以便为当前登录的用户(在计算机上打开控制台会话的用户)获取令牌。然后假设这些 return okay 然后调用 :
ImpersonateLoggedOnUser
模拟该用户令牌,然后我们在该模拟下调用 WMI 查询。 WMI 调用返回后,我们将调用:
RevertToSelf
因此服务可以继续并执行其他操作。似乎工作正常并给出与提升用户 运行 相同的结果。
如果我 运行 针对 WMI 的以下查询:
\.\root\ccm\ClientSDK
Select * from CCM_Application where InstallState = "Installed"
当 运行 作为本地帐户(提升)时,我返回,比如 26 个结果,当 运行 作为本地系统帐户(来自 Windows 服务)时,我得到回少。在某些 PC 上它只是一个不同,在其他 PC 上它说 10 个结果不同,但没有错误或失败,只是结果数量不同。而且总是 SYSTEM 少,从来没有用户查询少。
我该如何解决这个问题,以便 运行ning as SYSTEM 返回所有数据?
P.S。这是 SCCM WMI 提供程序,如果您还没有听说过该命名空间。
这是由于某些应用程序针对的是用户而不是计算机。
我发现解决此问题的唯一方法是模拟当前登录的用户以进行此 WMI 调用。我使用以下本机 windows API 执行此操作:
WTSGetActiveConsoleSessionId
WTSQueryUserToken
以便为当前登录的用户(在计算机上打开控制台会话的用户)获取令牌。然后假设这些 return okay 然后调用 :
ImpersonateLoggedOnUser
模拟该用户令牌,然后我们在该模拟下调用 WMI 查询。 WMI 调用返回后,我们将调用:
RevertToSelf
因此服务可以继续并执行其他操作。似乎工作正常并给出与提升用户 运行 相同的结果。