http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_entercriticalsection.htm
::EnterCriticalSection()が出す例外「STATUS_INVALID_HANDLE」を
捕まえるにはどうしたらいいんでしょうか?

#define STATUS_INVALID_HANDLE ((DWORD )0xC0000008L)

としか定義されてないので、どんな型で捕まえればいいのかさっぱり。

try {
  ::EnterCriticalSection(&m_oCriticalSection);
}catch (void*){
  assert(0);
}catch (char){
  assert(0);
}catch (long){
  assert(0);
}catch (int){
  assert(0);
}catch (DWORD){
  assert(0);
}catch (...){
  assert(0);
}

こうやって、どれで捕まるかなーとやってみたら、捕まえたのは最後の(...)でした。
(...)で捕まえた例外の種類を判別する方法とか、ありませんかね?