SmFpCleanup
VOID __fastcall SmFpCleanup(INT64 a1){
unsigned int v1;
unsigned __int16 *v2;
void **v3;
void *v4;
v1 = 0;
v2 = (unsigned __int16 *)(a1 + 88);
v3 = (void **)(a1 + 32);
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)*v2 << 12, 1ui64, 1ui64);
}
else
{
ExFreePoolWithTag(*((PVOID *)v4 + 1), 0);
}
}
else
{
MmFreeMappingAddress(*((PVOID *)v4 + 1), 0x6D526D73u);
}
ExFreePoolWithTag(v4, 0);
}
++v1;
++v3;
++v2;
}
while( v1 < 6 );
}Referenced by:
SMKM_STORE::SmStCleanup
SmFirstTimeInit
SmFpPreAllocate