ViKeWaitSanityChecks

VOID __fastcall ViKeWaitSanityChecks(
        UINT64 ObjectCount,
        VOID **Object,
        CHAR WaitMode,
        _LARGE_INTEGER *Timeout,
        UINT64 EnableStackSwap,
        UINT8 WaitIrql,
        UINT64 DisableChecks){
  UINT64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  UINT64 v13; 
  UINT8 StackLimits; 
  int v15; 
  VOID *v16; 
  UINT64 v17; 
  UINT64 LowLimit; 
  __int64 HighLimit[4]; 
  v7 = 0i64;
  v8 = (unsigned int)ObjectCount;
  v9 = 0i64;
  LowLimit = 0i64;
  HighLimit[0] = 0i64;
  if( (MmVerifierData & 0x400000) != 0 && (MmVerifierData & 2) == 0 && (MmVerifierData & 0x800) == 0 )
    return;
  if( WaitIrql > 2u )
  {
    v13 = 288i64;
    goto LABEL_11;
  }
  if( WaitIrql == 2 )
  {
    if( !Timeout )
    {
      v13 = 289i64;
      goto LABEL_11;
    }
    if( Timeout->QuadPart )
    {
      v13 = 290i64;
LABEL_11:
      if( (MmVerifierData & 2) != 0 )
        VerifierBugCheckIfAppropriate(0xC4ui64, v13, WaitIrql, (UINT64)*Object, (UINT64)Timeout, v17);
    }
  }
  if( WaitMode == 1 && (!Timeout || Timeout->QuadPart) && (_DWORD)EnableStackSwap )
  {
    StackLimits = RtlpGetStackLimits(&LowLimit, (UINT64 *)HighLimit);
    v7 = LowLimit;
    v9 = HighLimit[0];
    v15 = StackLimits;
  }
  else
  {
    v15 = 0;
  }
  if( (_DWORD)v8 )
  {
    do
    {
      v16 = *Object;
      VfUtilSynchronizationObjectSanityChecks(*Object, 1ui64);
      if( (MmVerifierData & 0x800) != 0 && v15 && (unsigned __int64)v16 >= v7 && (unsigned __int64)v16 < v9 )
        VerifierBugCheckIfAppropriate(0xC4ui64, 0x123ui64, (UINT64)v16, 0i64, 0i64, v17);
      ++Object;
      --v8;
    }
    while( v8 );
  }
}

Referenced by:

ViKeWaitForMultipleObjectsCommon
ViKeWaitForSingleObjectCommon