ViPoolLogStackTrace
VOID __stdcall ViPoolLogStackTrace(PVOID Address, UINT64 a2){
PVOID *v2;
BOOL v3;
if( VfPoolTraces )
{
v2 = (PVOID *)(VfPoolTraces
+ ((unsigned __int64)(_InterlockedIncrement(&VfPoolTracesIndex) & (unsigned int)(VfPoolTracesLength - 1)) << 7));
v2[2] = KeGetCurrentThread();
*v2 = Address;
v2[1] = (PVOID)a2;
if( (VfOptionFlags & 2) != 0 )
{
LABEL_3:
v2[3] = 0i64;
return;
}
if( KeGetCurrentIrql() > 1u || RtlEnoughStackSpaceForStackCapture() )
{
ViPoolLogStackCallout(v2);
}
else
{
LOBYTE(v3) = 1;
if( KeExpandKernelStackAndCalloutEx(ViPoolLogStackCallout, v2, 0xE30ui64, v3, 0i64) < 0 )
goto LABEL_3;
}
}
}Referenced by:
VfAllocPoolNotification
VfFreePoolNotification