SMKM_STORE_MGR::SmCompressCtxProcessReadyQueue

__int64 __fastcall SMKM_STORE_MGR::SmCompressCtxProcessReadyQueue(__int64 a1, __int64 a2, KIRQL a3, int a4){
  __int64 v4; 
  INT64 *v6; 
  KIRQL v7; 
  char v9; 
  __int64 *v10; 
  unsigned int *v11; 
  __int64 result; 
  int v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  unsigned __int64 *v16; 
  INT64 *v17; 
  INT64 v18; 
  struct _EX_RUNDOWN_REF *v19; 
  v4 = a1 + 96;
  v6 = (INT64 *)(a1 + 112);
  v7 = a3;
  if( a3 == 0xFF )
    v7 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(a1 + 112));
  while( 1 )
  {
    v9 = 0;
    if( !a4 && (**(_QWORD **)(v4 + 8) & 0xFFFFFFFFFFFFFFF8ui64) < 0x80 )
      v9 = 4;
    v10 = *(__int64 **)(v4 + 8);
    if( v10 == (__int64 *)v4 )
    {
      v11 = 0i64;
    }
    else
    {
      v11 = *(unsigned int **)v4;
      *(_QWORD *)v4 = **(_QWORD **)v4 & 0xFFFFFFFFFFFFFFF8ui64;
      if( v11 == (unsigned int *)v10 )
      {
        *(_QWORD *)v4 = 0i64;
        *(_QWORD *)(v4 + 8) = v4;
      }
      else
      {
        *v10 = *v10 & 7 | (8 * (((unsigned __int64)*v10 >> 3) - 1));
      }
    }
    ExReleaseSpinLockExclusiveFromDpcLevel(v6);
    result = v7;
    __writecr8(v7);
    if( !v11 )
      break;
    v13 = SMKM_STORE_MGR::SmFeAddInitiate(
            a2,
            v11 + 6,
            1,
            *(_DWORD *)(*((_QWORD *)v11 + 13) + 6016i64) & 0x3FF,
            (__int64)v11,
            *((_ETHREAD **)v11 + 4),
            v9);
    if( v13 < 0 )
    {
      if( v13 == -1073741739 )
      {
        v14 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)v6);
        v15 = (**(_QWORD **)(v4 + 8) >> 3) + 1i64;
        *(_QWORD *)v11 = *(_QWORD *)v4 | *v11 & 7;
        v16 = *(unsigned __int64 **)(v4 + 8);
        *(_QWORD *)v4 = v11;
        if( v16 == (unsigned __int64 *)v4 )
        {
          *(_QWORD *)(v4 + 8) = v11;
          v16 = (unsigned __int64 *)v11;
        }
        *v16 = *(_DWORD *)v16 & 7 | (unsigned __int64)(8 * v15);
        ExReleaseSpinLockExclusiveFromDpcLevel(v6);
        result = (unsigned int)KiIrqlFlags;
        __writecr8(v14);
        return result;
      }
      MmUnmapLockedPages(*(PVOID *)(**((_QWORD **)v11 + 2) + 24i64), **((PMDL **)v11 + 2));
      v17 = (INT64 *)*((_QWORD *)v11 + 4);
      v18 = *v17;
      *(_DWORD *)v17 = v13;
      *(_QWORD *)(*((_QWORD *)v11 + 4) + 8i64) = 0i64;
      SmIoRequestComplete((INT64)v17, v11, v18, *((_QWORD *)v11 + 4));
      v19 = (struct _EX_RUNDOWN_REF *)SmKmStoreRefFromStoreIndex(
                                        a2,
                                        *(_DWORD *)(*((_QWORD *)v11 + 13) + 6016i64) & 0x3FF);
      ExReleaseRundownProtection(v19 + 1);
      ExFreePoolWithTag(v11, 0);
    }
    v7 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)v6);
  }
  return result;
}

Referenced by:

No references.