ObWaitForSingleObject

NTSTATUS __stdcall ObWaitForSingleObject(
        VOID *Handle,
        INT8 AccessMode,
        INT8 WaitMode,
        UINT8 Alertable,
        _LARGE_INTEGER *Timeout){
  int v7; 
  char *v8; 
  VOID *WaitObject; 
  UINT64 Tag; 
  PVOID Object; 

  Object = 0i64;
  LODWORD(Tag) = 1951883855;
  v7 = ObReferenceObjectByHandleWithTag(Handle, 0x100000ui64, 0i64, AccessMode, Tag, &Object, 0i64);
  if( v7 < 0 )
    return v7;
  v8 = (char *)Object;
  WaitObject = ObpGetWaitObject((_OBJECT_HEADER *)((char *)Object - 48));
  if( !*(&WheapDeferredInternalLogsEventLock + 56)
    || ObTypeIndexTable[(unsigned __int8)ObHeaderCookie ^ (unsigned __int8)*(v8 - 24) ^ (unsigned __int64)(unsigned __int8)((unsigned __int16)((_WORD)v8 - 48) >> 8)] != *(&WheapDeferredInternalLogsEventLock + 56) )
  {
    v7 = KeWaitForSingleObject((UINT64)WaitObject, 6, WaitMode, Alertable, (INT64)Timeout);
    ObfDereferenceObjectWithTag(v8, 0x7457624Fui64);
    return v7;
  }
  ObfDereferenceObjectWithTag(v8, 0x7457624Fui64);
  return -1073741788;
}

Referenced by:

NtWaitForSingleObject