VerifierKeWaitForMultipleObjects

NTSTATUS __stdcall VerifierKeWaitForMultipleObjects(
        UINT64 Count,
        VOID **Object,
        _WAIT_TYPE WaitType,
        _KWAIT_REASON WaitReason,
        INT8 WaitMode,
        UINT8 Alertable,
        _LARGE_INTEGER *Timeout,
        _KWAIT_BLOCK *WaitBlockArray){
  int v9; 
  NTSTATUS v10; 
  NTSTATUS v11; 
  signed int v12; 
  bool v13; 
  VOID **v14; 
  UINT64 v15; 
  __int64 v16; 
  UINT64 v18; 
  VOID *retaddr; 

  v9 = Count;
  v10 = ViKeWaitForMultipleObjectsCommon(
          Count,
          Object,
          WaitType,
          WaitReason,
          WaitMode,
          Alertable,
          Timeout,
          WaitBlockArray,
          v18);
  v11 = v10;
  if( (MmVerifierData & 0x400000) != 0 )
  {
    if( !ViDeadlockDetectionEnabled )
      return v11;
    v12 = v10 & 0xFFFFFF7F;
    if( !WaitMode )
    {
      v13 = v12 == 0;
      goto LABEL_5;
    }
    if( v10 < 0 || v12 >= v9 )
      return v11;
    v16 = v12;
LABEL_15:
    v15 = 1i64;
    v14 = &Object[v16];
    goto LABEL_16;
  }
  LODWORD(v16) = v10 & 0xFFFFFF7F;
  if( WaitMode )
  {
    if( (int)v16 < 0 || (int)v16 >= v9 )
      return v11;
    v16 = (int)v16;
    goto LABEL_15;
  }
  v13 = (_DWORD)v16 == 0;
LABEL_5:
  if( v13 )
  {
    v14 = Object;
    v15 = (unsigned int)v9;
LABEL_16:
    ViKeObjectAcquired(v15, v14, Timeout, retaddr);
  }
  return v11;
}

Referenced by:

No references.