MSDN говорит
Если функция завершается ошибкой, возвращается значение WAIT_FAILED. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError.
Код:
HANDLE m_mutex_handle; /**< m_mutex_handle. The handle to the created mutex. */
m_mutex_handle = ::CreateMutex( 0, false, NULL );
::WaitForSingleObject( m_mutex_handle, INFINITE );
Но по каким причинам это могло произойти?