現在のソースはこんな感じ:
HANDLE hMutex = NULL;

hMutex = ::CreateMutex( NULL, TRUE, SYSTEM_HOOK_MUTEX_NAME );
if ( hMutex == NULL ) {
// exception
}

if (::GetLastError() == ERROR_ALREADY_EXISTS) {
DWORDdwWaitResult;

dwWaitResult = ::WaitForSingleObject( hMutex, 1000 );

if (dwWaitResult != WAIT_OBJECT_0) {
// exception
}

}

g_hMouseHook = ::SetWindowsHookEx(
WH_MOUSE,
(HOOKPROC)g_MouseProc,
hinstDLL,
0
);

if (g_hMouseHook == NULL) {
// exception
}

::ReleaseMutex( hMutex );