Я пытаюсь помочь коллеге с некоторым кодом в клиентском расширении.После добавления вызова к обратному вызову функция, кажется, завершается нормально, но событие в журнале событий 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 32bit является одной из определенных проблем.2008R2 работает нормально.
Да - нам нужно, чтобы он работал на XP 32-битной версии.
Другое странное поведение, которое может иметь здесь значение: если мы вызываем эту функцию несколько раз, она завершается ошибкой 3-говызов.Никаких исключений не выдается, текст не отображается, ни один из нашего кода после выполнения вызова, никаких дополнительных ошибок в журнале событий.Время здесь не имеет значения: это происходит, если вы вызываете его 3 раза подряд или 3 раза за 5 минут.Этого не произойдет, если мы обернем вызовы в общий блок try / catch.Никаких исключений не ловится - весь текст отображается.Весь код запускается.Однако мы все равно получаем ошибку в журнале событий.