我正在尝试用客户端扩展中的一些代码来帮助同事。由于添加了对回调的调用,该函数似乎可以正常完成,但是 Windows 事件日志中的一个事件在处理组策略对象时抱怨访问冲突。
删除现有代码后,仅添加对回调的调用,它仍会报告此访问冲突。
你能帮忙确定我们可能缺少什么吗?
//
// Entry point for processing group policy objects.
//
// For full details, see http://msdn.microsoft.com/en- us/library/windows/desktop/aa374383(v=vs.85).aspx.
//
extern "C" DWORD CALLBACK ProcessGroupPolicyEx (
__in DWORD dwFlags,
__in HANDLE hToken,
__in HKEY hKeyRoot,
__in PGROUP_POLICY_OBJECT pDeletedGPOList,
__in PGROUP_POLICY_OBJECT pChangedGPOList,
__in ASYNCCOMPLETIONHANDLE pHandle,
__in BOOL *pbAbort,
__in PFNSTATUSMESSAGECALLBACK pStatusCallback,
__in IWbemServices *pWbemServices,
__out HRESULT *pRsopStatus)
{
if(pStatusCallback)
pStatusCallback (FALSE, L"Aaaaargh!");
return (0);
}
此代码已尝试使用静态字符串、堆栈上的字节数组、新的并故意泄露的字节数组 - 以防该方法获取内存的所有权。也被 CoTaskMemAlloc'd,以防万一。都产生同样的问题。
事件日志中的(编辑的)错误是:
Windows 无法处理组策略客户端扩展异常 0xc0000005。
为了让事情变得有趣,这只是在某些操作系统上,完全修补的 XP 32 位是明确的问题之一。2008R2 工作正常。
是的——我们需要它在 XP 32bit 上工作。
其他可能与此有关的奇怪行为:如果我们多次调用此函数,它会在第 3 次调用时失败。没有抛出异常,没有显示文本,调用执行后没有我们的代码,事件日志中没有其他错误。时间在这里不是一个因素:如果你连续调用 3 次,或者在 5 分钟内调用 3 次,就会发生这种情况。如果我们将调用包装在通用的 try/catch 块中,则不会发生这种情况。没有发现异常 - 显示所有文本。所有代码都运行。但是,我们仍然在事件日志中收到错误。