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