Re: MS_VC_EXCEPTION with a dwType 0f 0x1001, and a subcode of 0x1004. Meaning ?
I grabbed the sample code from MSDN and built this as a console app:
//
// Usage: SetThreadName (-1, "MainThread");
//
#include <windows.h>
#include <cstdio>
const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
void SetThreadName( DWORD dwThreadID, char* threadName)
{
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
__try
{
puts("in try");
RaiseException(11111, 0, sizeof(info)/sizeof(ULONG_PTR),
(ULONG_PTR*)&info );
}
__except(puts("in filter"), EXCEPTION_EXECUTE_HANDLER)
{
puts("Exception was handled...");
DWORD ec = GetExceptionCode();
printf("Exception code: %i in %s: ID %i\n", ec, info.szName,
info.dwThreadID);
}
}
int main ()
{
HANDLE mythread = GetCurrentThread();
DWORD myThreadID = GetThreadId(mythread);
SetThreadName (myThreadID, "MainThread");
}
If I replace 11111 with MS_VC_EXCEPTION the __except block isn't
executed when I run it in the debugger but it is executed when I run
it in a console. If you're getting that exception in your application
I'd have to conclude you've got some interesting debugging ahead. If
you're going to throw your own exceptions then you simply use your own
codes.
Here's a list of exception codes:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms679356(v=vs.85).aspx