ViKeWaitSanityChecks

VOID __stdcall ViKeWaitSanityChecks(
        UINT64 ObjectCount,
        VOID **Object,
        CHAR WaitMode,
        _LARGE_INTEGER *Timeout,
        UINT64 EnableStackSwap,
        UINT8 WaitIrql,
        UINT64 DisableChecks){
  UINT64 v7; 
  __int64 v8; 
  unsigned __int64 v9; 
  ULONG_PTR 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 = 288;
    goto LABEL_11;
  }
  if( WaitIrql == 2 )
  {
    if( !Timeout )
    {
      v13 = 289;
      goto LABEL_11;
    }
    if( Timeout->QuadPart )
    {
      v13 = 290;
LABEL_11:
      if( (MmVerifierData & 2) != 0 )
        VerifierBugCheckIfAppropriate(0xC4ui64, v13, WaitIrql, (ULONG_PTR)*Object, (ULONG_PTR)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, 1u);
      if( (MmVerifierData & 0x800) != 0 && v15 && (unsigned __int64)v16 >= v7 && (unsigned __int64)v16 < v9 )
        VerifierBugCheckIfAppropriate(0xC4ui64, 0x123u, (ULONG_PTR)v16, 0, 0, v17);
      ++Object;
      --v8;
    }
    while( v8 );
  }
}

Referenced by:

ViKeWaitForMultipleObjectsCommon
ViKeWaitForSingleObjectCommon