SmFpCleanup
VOID __stdcall SmFpCleanup(_SM_FORWARD_PROGRESS_CTX *FpContext){
unsigned int v1;
_SM_FORWARD_PROGRESS_CTX *v2;
void **v3;
void *v4;
v1 = 0;
v2 = FpContext + 22;
v3 = (void **)(FpContext + 8);
do
{
while( 1 )
{
v4 = *v3;
if( !*v3 )
break;
*v3 = *(void **)v4;
if( v1 < 5 )
{
if( v1 == 2 )
{
SmKmFreeMdlForLock(*((_MDL **)v4 + 1));
}
else if( v1 == 3 )
{
SmAcquireReleaseCharges((unsigned __int64)*(unsigned __int16 *)v2 << 12, 1ui64, 1ui64);
}
else
{
ExFreePoolWithTag(*((PVOID *)v4 + 1), 0);
}
}
else
{
MmFreeMappingAddress(*((PVOID *)v4 + 1), 0x6D526D73u);
}
ExFreePoolWithTag(v4, 0);
}
++v1;
++v3;
v2 = (_SM_FORWARD_PROGRESS_CTX *)((char *)v2 + 2);
}
while( v1 < 6 );
}Referenced by:
SMKM_STORE::SmStCleanup
SmFirstTimeInit
SmFpPreAllocate
void