MiUpdateCfgSystemWideBitmapWorker

INT64 __fastcall MiUpdateCfgSystemWideBitmapWorker(INT64 a1, _DWORD *a2, UINT64 a3, UINT64 a4){
  unsigned int v4; 
  ULONG_PTR v7; 
  UINT64 v8; 
  INT64 result; 
  unsigned __int64 v10; 
  _CONTROL_AREA *v11; 
  __int64 *PagefileSubsection; 
  __int64 v13; 
  _DWORD *v14; 
  unsigned int v15; 
  int v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  unsigned __int8 *v19; 
  __int64 v20; 
  __int64 v21; 
  int v22; 
  unsigned int v23; 
  unsigned int v24; 
  int v25; 
  __int64 v26; 
  __int64 v27; 
  int v28; 
  CHAR *AnyMultiplexedVm; 
  int *v30; 
  int a3a; 
  _RTL_BITMAP_EX ViewSize; 
  __int64 v33; 
  PVOID MappedBase; 
  _DWORD *v35; 
  _LARGE_INTEGER SectionOffset; 
  ULONG_PTR BugCheckParameter3; 
  unsigned int v38; 
  v4 = 0;
  v35 = a2;
  MappedBase = 0i64;
  a3a = 0;
  BugCheckParameter3 = 0i64;
  v38 = 0;
  v7 = 0i64;
  if( a2 )
    v7 = *((_QWORD *)a2 + 2);
  v8 = a3 >> 3;
  SectionOffset.QuadPart = a3 >> 3;
  ViewSize.SizeOfBitMap = a4 >> 3;
  v33 = (a4 >> 15) + ((((a3 >> 3) & 0xFFF) + 4095 + ((a4 >> 3) & 0xFFF)) >> 12);
  result = MiMapViewInSystemSpace((VOID *)a1, &Session, &MappedBase, &ViewSize.SizeOfBitMap, &SectionOffset, 0i64);
  if( (int)result >= 0 )
  {
    v10 = (unsigned __int64)MappedBase | (unsigned __int16)v8;
    v11 = MiSectionControlArea((_SECTION *)a1);
    ViewSize.SizeOfBitMap = v8 >> 12;
    PagefileSubsection = (__int64 *)MiLocatePagefileSubsection((unsigned int *)v11 + 32, &ViewSize.SizeOfBitMap);
    v13 = v33;
    if( (unsigned int)MiChargeSegmentCommit(
                         PagefileSubsection,
                         (__int64 *)(PagefileSubsection[1] + 8 * ViewSize.SizeOfBitMap),
                         v33) )
    {
      v14 = v35;
      if( v35 && (*v35 & 1) != 0 && v7 )
      {
        ViewSize.Buffer = (unsigned __int64 *)v10;
        ViewSize.SizeOfBitMap = a4;
        RtlClearAllBitsEx(&ViewSize);
        v15 = RtlEnumRvaListFirst(v7, &BugCheckParameter3, &a3a);
        if( v15 )
        {
          LOBYTE(v16) = a3a;
          do
          {
            if( (v16 & 1) != 0 )
            {
              v17 = (unsigned __int64)v15 >> 4;
              if( (v15 & 0xF) == v14[1] )
              {
                v18 = 2 * v17;
                if( (v16 & 4) != 0 )
                  ++v18;
                _bittestandset64((signed __int64 *)v10, v18);
              }
              else
              {
                RtlSetBitsEx((INT64)&ViewSize, 2 * v17, 2ui64);
              }
            }
            ++HIDWORD(BugCheckParameter3);
            v19 = (unsigned __int8 *)(v38 + *(_QWORD *)(v7 + 16));
            v15 = BugCheckParameter3;
            v20 = *(_QWORD *)(v7 + 24) - v38;
            if( !v20 )
              break;
            while( 1 )
            {
              --v20;
              v21 = *v19 >> 6;
              v22 = *v19++ & 0x3F;
              v15 += v22 * *((_DWORD *)RtlpRvaCompressionTableScales + v21);
              if( (_DWORD)v21 == 3 )
                break;
              if( !v20 )
                KeBugCheckEx(0x1Au, 0x43666720ui64, v7, (ULONG_PTR)&BugCheckParameter3, v15);
            }
            LODWORD(BugCheckParameter3) = v15;
            LOBYTE(v16) = 0;
            v38 = (_DWORD)v19 - *(_DWORD *)(v7 + 16);
            v23 = *(_DWORD *)(v7 + 8);
            if( v23 <= 1 )
            {
              if( v23 == 1 )
              {
                v30 = *(int **)(v7 + 48);
                if( v30 )
                  v16 = *v30;
                else
                  LOBYTE(v16) = 1;
              }
            }
            else
            {
              v24 = 0;
              v25 = 1;
              v26 = 0i64;
              do
              {
                if( _bittest64(*(const signed __int64 **)(v7 + 40), HIDWORD(BugCheckParameter3) * v23 + v24) )
                {
                  v27 = *(_QWORD *)(v7 + 48);
                  if( v27 )
                    v28 = *(_DWORD *)(v26 + v27);
                  else
                    LOBYTE(v28) = v25;
                  LOBYTE(v16) = v28 | v16;
                }
                ++v24;
                v25 = __ROL4__(v25, 1);
                v26 += 4i64;
              }
              while( v24 < v23 );
              v14 = v35;
            }
          }
          while( v15 );
          v13 = v33;
        }
        AnyMultiplexedVm = MiGetAnyMultiplexedVm(1i64);
        MiEliminateZeroPages((INT64)AnyMultiplexedVm, v10 & 0xFFFFFFFFFFFFF000ui64, v13 << 12);
      }
      else
      {
        memset(v10, 255i64);
      }
    }
    else
    {
      v4 = -1073741523;
    }
    MmUnmapViewInSystemSpace(MappedBase);
    return v4;
  }
  return result;
}

Referenced by:

MiUpdateCfgSystemWideBitmap