ViKeWaitForMultipleObjectsCommon
NTSTATUS __stdcall ViKeWaitForMultipleObjectsCommon(
UINT64 Count,
VOID **Object,
_WAIT_TYPE WaitType,
_KWAIT_REASON WaitReason,
CHAR WaitMode,
UINT8 Alertable,
_LARGE_INTEGER *Timeout,
_KWAIT_BLOCK *WaitBlockArray,
UINT64 DisableChecks){
_ETHREAD *CurrentThread;
unsigned int v13;
UINT8 CurrentIrql;
UINT64 EnableStackSwap;
int EnableStackSwapa;
int WaitIrql;
UINT64 v19;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = Count;
if( (CurrentThread->Tcb._bf_0 & 4) != 0 )
CurrentIrql = CurrentThread->Tcb.WaitIrql;
else
CurrentIrql = KeGetCurrentIrql();
LODWORD(EnableStackSwap) = ((unsigned int)*(&CurrentThread->Tcb.MiscFlags + 1) >> 6) & 1;
ViKeWaitSanityChecks(Count, Object, WaitMode, Timeout, EnableStackSwap, CurrentIrql, v19);
if( (unsigned int)ViKeInjectStatusAlerted(Alertable) )
return 257;
LOBYTE(WaitIrql) = Alertable;
LOBYTE(EnableStackSwapa) = WaitMode;
return((__int64(__fastcall *)(_QWORD, VOID **, _QWORD, _QWORD, int, int, _LARGE_INTEGER *, _KWAIT_BLOCK *))pXdvKeWaitForMultipleObjects)(
v13,
Object,
(unsigned int)WaitType,
(unsigned int)WaitReason,
EnableStackSwapa,
WaitIrql,
Timeout,
WaitBlockArray);
}Referenced by:
VerifierKeWaitForMultipleObjects
VerifierKeWaitForMultipleObjectsNoReboot