static void enableCrashOnCrashes() { // Makes sure the application actually crashes when one of its callbacks // called from the kernel crashes. // // See http://support.microsoft.com/kb/976038 // http://www.altdevblogaday.com/2012/07/06/when-even-crashing-doesnt-work/ typedef BOOL (WINAPI *tGetPolicy)(LPDWORD lpFlags); typedef BOOL (WINAPI *tSetPolicy)(DWORD dwFlags); const DWORD PROCESS_CALLBACK_FILTER_ENABLED = 0x01; HMODULE kernel32 = LoadLibrary(L"kernel32.dll"); tGetPolicy pGetPolicy = (tGetPolicy) GetProcAddress(kernel32, "GetProcessUserModeExceptionPolicy"); tSetPolicy pSetPolicy = (tSetPolicy) GetProcAddress(kernel32, "SetProcessUserModeExceptionPolicy"); if (pGetPolicy && pSetPolicy) { // Only available as of Vista SP2 / Win7 SP1 DWORD dwFlags; if (pGetPolicy(&dwFlags)) { if (!pSetPolicy(dwFlags & ~PROCESS_CALLBACK_FILTER_ENABLED)) qWarning("enableCrashOnCrashes: Failed to set policy"); } else { qWarning("enableCrashOnCrashes: Failed to get policy"); } } }
//Copy-Pasted from altdevblog void EnableCrashingOnCrashes() { typedef BOOL (WINAPI *tGetPolicy)(LPDWORD lpFlags); typedef BOOL (WINAPI *tSetPolicy)(DWORD dwFlags); const DWORD EXCEPTION_SWALLOWING = 0x1; HMODULE kernel32 = LoadLibraryA( "kernel32.dll" ); tGetPolicy pGetPolicy = (tGetPolicy)GetProcAddress( kernel32, "GetProcessUserModeExceptionPolicy" ); tSetPolicy pSetPolicy = (tSetPolicy)GetProcAddress( kernel32, "SetProcessUserModeExceptionPolicy" ); if( pGetPolicy && pSetPolicy ) { DWORD dwFlags; if( pGetPolicy( &dwFlags ) ) { // Turn off the filter pSetPolicy(dwFlags & ~EXCEPTION_SWALLOWING); } } FreeLibrary( kernel32 ); }