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