ThemeStopCallback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
{
CloseHandle(hServiceProcess);
- UnregisterWait(hThemeStopWaitObject);
UnregisterWait(hThemeServiceWaitObject);
ThemeWatchForStart();
ResetEvent(hStartEvent);
ResetEvent(hStopEvent);
- ThemeStopCallback(lpParameter, TimerOrWaitFired);
+ CloseHandle(hServiceProcess);
+ UnregisterWait(hThemeStopWaitObject);
+ ThemeWatchForStart();
+ ThemeHooksRemove();
}
static
CALLBACK
ThemeStartCallback(PVOID lpParameter, BOOLEAN TimerOrWaitFired)
{
- UnregisterWait(hThemeStartWaitObject);
-
hServiceProcess = GetThemeServiceProcessHandle();
- RegisterWaitForSingleObject(&hThemeStopWaitObject, hStopEvent, ThemeStopCallback, NULL, INFINITE, WT_EXECUTEDEFAULT);
- RegisterWaitForSingleObject(&hThemeServiceWaitObject, hServiceProcess, ThemeServiceDiedCallback, NULL, INFINITE, WT_EXECUTEDEFAULT);
+ RegisterWaitForSingleObject(&hThemeStopWaitObject, hStopEvent, ThemeStopCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
+ RegisterWaitForSingleObject(&hThemeServiceWaitObject, hServiceProcess, ThemeServiceDiedCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
ThemeHooksInstall();
}
hStartEvent = CreateEventW(NULL, TRUE, FALSE, L"Global\\ThemeStartEvent");
hStopEvent = CreateEventW(NULL, TRUE, FALSE, L"Global\\ThemeStopEvent");
- RegisterWaitForSingleObject(&hThemeStartWaitObject, hStartEvent, ThemeStartCallback, NULL, INFINITE, WT_EXECUTEDEFAULT);
+ RegisterWaitForSingleObject(&hThemeStartWaitObject, hStartEvent, ThemeStartCallback, NULL, INFINITE, WT_EXECUTEONLYONCE);
return TRUE;
}