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.