Crash using WscRegisterForChanges.
Posted
by user335126
on Stack Overflow
See other posts from Stack Overflow
or by user335126
Published on 2010-05-07T06:18:00Z
Indexed on
2010/05/07
6:28 UTC
Read the original article
Hit count: 220
I'm trying to use the WscRegisterForChanges with C++ function in Windows 7.
Documentation located here:
http://msdn.microsoft.com/en-us/library/bb432507(v=VS.85).aspx
My problem is that even though the callback properly executes, the code crashes when it gets to the end of the callback's execution.
Here's the code in question. It's very simple, so I'm not sure why it's crashing:
#include #include #include void SecurityCenterChangeOccurred(void *param) { printf("Change occurred!\n"); } int main() { HRESULT result = S_OK; HANDLE callbackRegistration = NULL; result = WscRegisterForChanges( NULL, &callbackRegistration, (LPTHREAD_START_ROUTINE)SecurityCenterChangeOccurred, NULL); while(1) { Sleep(100); } return 0; }
My call stack looks like this when the crash occurs:
> 00faf6e8() ntdll.dll!_TppWorkerThread@4() + 0x1293 bytes kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
If I add ExitThread(0); to the end of SecurityCenterChangeOccurred, I get an error and the following trace (So I don't think I should be using ExitThread):
Unhandled exception at 0x7799852b (ntdll.dll) in WscRegisterForChangesCrash.exe: 0xC000071C: An invalid thread, handle %p, is specified for this operation. Possibly, a threadpool worker thread was specified. ntdll.dll!_TpCheckTerminateWorker@4() + 0x3ca2f bytes ntdll.dll!_RtlExitUserThread@4() + 0x30 bytes > WscRegisterForChangesCrash.exe!SecurityCenterChangeOccurred(void * param=0x00000000) Line 8 + 0xa bytes C++ wscapi.dll!WorkItemWrapper() + 0x19 bytes ntdll.dll!_RtlpTpWorkCallback@8() + 0xdf bytes ntdll.dll!_TppWorkerThread@4() + 0x1293 bytes kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
Does anyone have any ideas why this might be happening?
To trigger the crash run the program and turn the firewall on or off.
© Stack Overflow or respective owner