本文提供了解决在 Windows Server 2012 R2 中使用 ResultCode = 0x80041032 记录的 WMI-Activity 事件 ID 5858 的解决方案。
原始 KB 数: 3124914
现象
将 Windows Server 2012 R2 用于发出 WMI 查询IWbemServices:ExecQuery的应用程序时,管理员可能会在事件查看器中观察到以下事件:
Log Name: Microsoft-Windows-WMI-Activity/Operational
Source: WMI-Activity
Event ID: 5858
Level: Error
Id = {guid}; ClientMachine = <computer>; User = <user>; ClientProcessId = <process ID>; Component = Unknown; Operation = Start IWbemServices::ExecQuery - <WMI namespace>: <Select Query Statement>; ResultCode = 0x80041032; PossibleCause = Unknown
where 0x80041032 indicates WBEM_E_CALL_CANCELLED.
注意
此事件可以与许多不同的 ResultCode 值一起发生。 本文中所述的问题仅适用于以下情况 ResultCode = 0x80041032 (WBEM_E_CALL_CANCELLED)。
原因
WMI-Activity Error 5858 with ResultCode = 0x80041032 (WBEM_E_CALL_CANCELLED) 指示 WMI 调用方已成功发出,但在使用IEnumWbemClassObject::Next该方法检索完整结果集之前释放IWbemContext了IWbemServices:ExecQuery对象。 如果客户端终止链接(通过释放 IWbemContext 对象)时,WMI 服务仍保留客户端的数据,则会记录此事件。
如果 WMI 应用程序调用 IEnumWbemClassObject::Next 的超时值(lTimeout)不够长,无法检索要查询的对象,并且不检查返回代码 WBEM_S_TIMEDOUT (0x40004) 以便再次发出请求,则会发生此错误。
解决方法
在释放 IWbemContext 对象之前,应修改 WMI 客户端应用程序以发出调用以 IEnumWbemClassObject::Next 检索完整结果集。 如果未收到任何对象,请确保超时值 (lTimeout) 大于 0 且 WBEM_S_TIMEDOUT (0x40004) 未返回。
详细信息
有关详细信息,请参阅:
-
注意
此页末尾包含的示例代码显示
IEnumWbemClassObject::Next正在调用的超时值 (lTimeout) 为 0,并且未检查 WBEM_S_TIMEDOUT 错误。
数据收集
如果需要Microsoft支持方面的帮助,建议按照使用 TSS 收集信息中的 步骤收集用户体验问题来收集信息。