ViKeWaitForSingleObjectCommon
INT64 __stdcall ViKeWaitForSingleObjectCommon(
PVOID Object,
_KWAIT_REASON WaitReason,
CHAR WaitMode,
UINT8 Alertable,
_LARGE_INTEGER *Timeout,
UINT64 DisableChecks){
_ETHREAD *CurrentThread;
UINT8 WaitIrql;
_LARGE_INTEGER *v11;
__int64 v12;
__int64 v13;
UINT64 EnableStackSwap;
UINT64 v16;
VOID *Objecta;
Objecta = Object;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
if( (*((_DWORD *)CurrentThread + 29) & 4) != 0 )
WaitIrql = *((_BYTE *)CurrentThread + 390);
else
WaitIrql = KeGetCurrentIrql();
v11 = Timeout;
LODWORD(EnableStackSwap) = (*((_DWORD *)CurrentThread + 30) >> 6) & 1;
ViKeWaitSanityChecks(1ui64, &Objecta, WaitMode, Timeout, EnableStackSwap, WaitIrql, v16);
if( (unsigned int)ViKeInjectStatusAlerted(Alertable) )
return 257i64;
LOBYTE(v13) = Alertable;
LOBYTE(v12) = WaitMode;
return((__int64(__fastcall *)(VOID *, _QWORD, __int64, __int64, _LARGE_INTEGER *))pXdvKeWaitForSingleObject)(
Objecta,
(unsigned int)WaitReason,
v12,
v13,
v11);
}Referenced by:
VerifierKeWaitForSingleObject
VerifierKeWaitForSingleObjectNoReboot