IovpLogStackTrace
_IOV_IRP_TRACE *__stdcall IovpLogStackTrace(_IRP *Irp){
_IOV_IRP_TRACE *v2;
_ETHREAD *CurrentThread;
if( !IovIrpTraces )
return 0i64;
v2 = (_IOV_IRP_TRACE *)(IovIrpTraces
+ ((unsigned __int64)(_InterlockedIncrement(&IovIrpTracesIndex) & (unsigned int)(IovIrpTracesLength - 1)) << 7));
v2->Irp = Irp;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2->Thread = CurrentThread;
v2->CombinedApcDisable = *((_DWORD *)CurrentThread + 121);
LOBYTE(CurrentThread) = KeGetCurrentIrql();
v2->Irql = (unsigned __int8)CurrentThread;
if( (unsigned __int8)CurrentThread > 1u || RtlEnoughStackSpaceForStackCapture() )
{
ViPoolLogStackCallout(v2);
}
else if( KeExpandKernelStackAndCallout(ViPoolLogStackCallout, v2, 0xE30ui64) < 0 )
{
v2->StackTrace[0] = 0i64;
}
return v2;
}Referenced by:
IoReuseIrp
IovAllocateIrp
IovCancelIrp
IovCompleteRequest