MiUpdateCfgSystemWideBitmapWorker

NTSTATUS __stdcall MiUpdateCfgSystemWideBitmapWorker(
        _SECTION *Section,
        VOID *ControlFlowContext,
        UINT64 StartBit,
        UINT64 NumberOfBits,
        _MI_RVA_LIST_TYPE ListType){
  NTSTATUS v5; 
  INT64 v8; 
  UINT64 v9; 
  NTSTATUS result; 
  size_t v11; 
  unsigned __int64 v12; 
  _CONTROL_AREA *v13; 
  _SUBSECTION *PagefileSubsection; 
  UINT64 v15; 
  _DWORD *v16; 
  __int64 v17; 
  unsigned int v18; 
  unsigned __int64 v19; 
  unsigned __int64 v20; 
  unsigned __int8 *v21; 
  __int64 v22; 
  __int64 v23; 
  int v24; 
  unsigned int v25; 
  unsigned int v26; 
  int v27; 
  __int64 v28; 
  __int64 v29; 
  int v30; 
  _MMSUPPORT_INSTANCE *AnyMultiplexedVm; 
  unsigned int *v32; 
  unsigned int v33; 
  _RTL_BITMAP_EX ViewSize; 
  UINT64 QuotaCharge; 
  VOID *MappedBase; 
  _DWORD *v37; 
  UINT64 v38; 
  __int64 BugCheckParameter3; 
  unsigned int v40; 

  v5 = 0;
  v37 = ControlFlowContext;
  MappedBase = 0i64;
  v33 = 0;
  BugCheckParameter3 = 0i64;
  v40 = 0;
  v8 = 0i64;
  if( ControlFlowContext )
    v8 = *((_QWORD *)ControlFlowContext + 2);
  v9 = StartBit >> 3;
  v38 = StartBit >> 3;
  ViewSize.SizeOfBitMap = NumberOfBits >> 3;
  QuotaCharge = (NumberOfBits >> 15) + ((((StartBit >> 3) & 0xFFF) + 4095 + ((NumberOfBits >> 3) & 0xFFF)) >> 12);
  MiMapViewInSystemSpace(Section, &Session, &MappedBase, &ViewSize.SizeOfBitMap);
  if( result >= 0 )
  {
    v11 = LODWORD(ViewSize.SizeOfBitMap) - (unsigned __int16)v9;
    v12 = (unsigned __int64)MappedBase | (unsigned __int16)v9;
    v13 = MiSectionControlArea(Section);
    ViewSize.SizeOfBitMap = v9 >> 12;
    PagefileSubsection = MiLocatePagefileSubsection((_SUBSECTION *)&v13[1], &ViewSize.SizeOfBitMap);
    v15 = QuotaCharge;
    if( MiChargeSegmentCommit(
           (VOID **)&PagefileSubsection->ControlArea,
           &PagefileSubsection->SubsectionBase[ViewSize.SizeOfBitMap],
           QuotaCharge,
           (UINT64)PagefileSubsection) )
    {
      v16 = v37;
      if( v37 && (*v37 & 1) != 0 && v8 )
      {
        ViewSize.Buffer = (unsigned __int64 *)v12;
        ViewSize.SizeOfBitMap = NumberOfBits;
        RtlClearAllBitsEx(&ViewSize);
        v18 = RtlEnumRvaListFirst(v8, (unsigned int *)&BugCheckParameter3, &v33);
        if( v18 )
        {
          v17 = v33;
          do
          {
            if( (v17 & 1) != 0 )
            {
              v19 = (unsigned __int64)v18 >> 4;
              if( (v18 & 0xF) == v16[1] )
              {
                v20 = 2 * v19;
                if( (v17 & 4) != 0 )
                  ++v20;
                _bittestandset64((signed __int64 *)v12, v20);
              }
              else
              {
                RtlSetBitsEx(&ViewSize, 2 * v19, 2ui64);
              }
            }
            ++HIDWORD(BugCheckParameter3);
            v21 = (unsigned __int8 *)(v40 + *(_QWORD *)(v8 + 16));
            v18 = BugCheckParameter3;
            v22 = *(_QWORD *)(v8 + 24) - v40;
            if( !v22 )
              break;
            while( 1 )
            {
              --v22;
              v23 = *v21 >> 6;
              v24 = *v21++ & 0x3F;
              v18 += v24 * *((_DWORD *)RtlpRvaCompressionTableScales + v23);
              if( (_DWORD)v23 == 3 )
                break;
              if( !v22 )
                KeBugCheckEx(0x1Au, (PVOID)0x43666720, (PVOID)v8, &BugCheckParameter3, (PVOID)v18);
            }
            LODWORD(BugCheckParameter3) = v18;
            v17 = 0i64;
            v40 = (_DWORD)v21 - *(_DWORD *)(v8 + 16);
            v25 = *(_DWORD *)(v8 + 8);
            if( v25 <= 1 )
            {
              if( v25 == 1 )
              {
                v32 = *(unsigned int **)(v8 + 48);
                if( v32 )
                  v17 = *v32;
                else
                  v17 = 1i64;
              }
            }
            else
            {
              v26 = 0;
              v27 = 1;
              v28 = 0i64;
              do
              {
                if( _bittest64(*(const signed __int64 **)(v8 + 40), HIDWORD(BugCheckParameter3) * v25 + v26) )
                {
                  v29 = *(_QWORD *)(v8 + 48);
                  if( v29 )
                    v30 = *(_DWORD *)(v28 + v29);
                  else
                    v30 = v27;
                  v17 = v30 | (unsigned int)v17;
                }
                ++v26;
                v27 = __ROL4__(v27, 1);
                v28 += 4i64;
              }
              while( v26 < v25 );
              v16 = v37;
            }
          }
          while( v18 );
          v15 = QuotaCharge;
        }
        AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemViews, (VOID *)v17);
        MiEliminateZeroPages(AnyMultiplexedVm, (VOID *)(v12 & 0xFFFFFFFFFFFFF000ui64), v15 << 12);
      }
      else
      {
        memset((VOID *)v12, 255i64, v11);
      }
    }
    else
    {
      v5 = -1073741523;
    }
    MmUnmapViewInSystemSpace(MappedBase);
    return v5;
  }
  return result;
}

Referenced by:

MiUpdateCfgSystemWideBitmap