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.