VfPoolDelayFreeIfPossible
VOID __stdcall VfPoolDelayFreeIfPossible(VOID *p, VF_POOL_DELAY_FREE_TYPE FreeType){
char *v2;
unsigned __int16 v3;
if( (unsigned int)FreeType > VfPoolDelayFreeBelowDispatchLevel
|| (v2 = (char *)&unk_140CEC840 + 64 * (__int64)(int)FreeType, ++*((_DWORD *)v2 + 13), !*((_DWORD *)v2 + 12)) )
{
ExFreePoolWithTag(p, 0);
return;
}
v3 = *(_WORD *)v2;
if( *(_WORD *)v2 >= 0x200u )
{
++*((_DWORD *)v2 + 14);
ExFreePoolWithTag(p, 0);
LABEL_7:
KeSetEvent((PRKEVENT)(v2 + 16), 1, 0);
return;
}
RtlpInterlockedPushEntrySList((PSLIST_HEADER)v2, (PSLIST_ENTRY)p);
if( v3 >= 0x40u )
goto LABEL_7;
}Referenced by:
VfUtilFreePoolCheckIRQL
VfUtilFreePoolDispatchLevel