SMKM_STORE_MGR::SmWorkItemFree
void __fastcall SMKM_STORE_MGR::SmWorkItemFree(__int64 a1, _DWORD *a2, __int64 a3, int *a4){
VOID *v4;
unsigned int v5;
int v7;
int v9;
__int128 v10;
_SLIST_HEADER *v11;
_BOOL4 v12;
_EX_RUNDOWN_REF *v13;
int v14;
__int128 v15;
__int128 v16;
__int64 v17;
v4 = *(VOID **)(a3 + 32);
v5 = *(_DWORD *)a3 & 7;
v7 = 1;
v9 = 1;
v15 = 0i64;
v16 = 0i64;
v17 = 0i64;
if( a4 )
{
v10 = *(_OWORD *)(a3 + 16);
v15 = *(_OWORD *)a3;
v17 = *(_QWORD *)(a3 + 32);
v16 = v10;
}
if( v5 < 4 )
{
if( v5 == 2 )
{
if( (*(_DWORD *)(a3 + 8) & 0x4000000) != 0 )
{
if( LOWORD(stru_140D22EA0.Alignment) >= 0x1000u )
{
ExFreePoolWithTag((PVOID)a3, 0);
goto LABEL_9;
}
v11 = &stru_140D22EA0;
goto LABEL_8;
}
}
else if( !v5 && *(int *)(a3 + 8) < 0 )
{
*(_QWORD *)&v16 = **(_QWORD **)(a3 + 16);
v11 = &stru_140D22F40;
LABEL_8:
RtlpInterlockedPushEntrySList(v11, (PSLIST_ENTRY)a3);
LABEL_9:
v12 = v5 == 1;
goto LABEL_10;
}
SMKM_STORE_MGR::SmWorkItemFreeResource((__int64)&SmGlobals, (_DWORD *)a3, v4);
goto LABEL_9;
}
v14 = *(_DWORD *)(a3 + 8) & 7;
if( v5 == 5 )
{
if( v14 )
{
v12 = 0;
ExFreePoolWithTag((PVOID)a3, 0);
goto LABEL_10;
}
LABEL_32:
ExFreePoolWithTag((PVOID)a3, 0);
LABEL_16:
v13 = (_EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex((__int64)&SmGlobals, a2[1504] & 0x3FF);
ExReleaseRundownProtection(v13 + 1);
return;
}
v12 = 0;
if( v14 )
{
if( v14 == 3 )
goto LABEL_32;
if( (unsigned int)(v14 - 1) <= 1 )
v9 = 0;
}
else
{
*(_QWORD *)(a3 + 32) = 0i64;
}
LABEL_10:
if( a4 )
v7 = SMKM_STORE_MGR::SmIoCtxWorkItemComplete((__int64)&v15, (__int64)a2, a2, *a4);
if( v7 )
{
if( v12 )
SmFpFree(&dword_140D22F50, SmFpResourceIoCtx, v4, v4);
}
if( v9 )
goto LABEL_16;
}
Referenced by:
No references.