MiAllocateFixupVad

RTL_BITMAP *__fastcall MiAllocateFixupVad(INT64 a1){
  _QWORD *v2; 
  __int64 v3; 
  __int64 v4; 
  unsigned __int64 v5; 
  int v6; 
  RTL_BITMAP *result; 
  v2 = **(_QWORD ***)(a1 + 72);
  if( !*(_QWORD *)(v2[12] + 32i64) )
    return 0i64;
  LODWORD(v3) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
  v4 = v3;
  if( !v3 )
    return 0i64;
  *(_OWORD *)v3 = *(_OWORD *)a1;
  *(_OWORD *)(v3 + 16) = *(_OWORD *)(a1 + 16);
  *(_OWORD *)(v3 + 32) = *(_OWORD *)(a1 + 32);
  *(_OWORD *)(v3 + 48) = *(_OWORD *)(a1 + 48);
  *(_OWORD *)(v3 + 64) = *(_OWORD *)(a1 + 64);
  *(_OWORD *)(v3 + 80) = *(_OWORD *)(a1 + 80);
  *(_OWORD *)(v3 + 96) = *(_OWORD *)(a1 + 96);
  *(_OWORD *)(v3 + 112) = *(_OWORD *)(a1 + 112);
  *(_QWORD *)(v3 + 128) = *(_QWORD *)(a1 + 128);
  *(_QWORD *)(v3 + 136) = -4096 * ((__int64)(*(_QWORD *)(a1 + 80) - v2[17]) >> 3)
                        + ((*(unsigned int *)(a1 + 24) | ((unsigned __int64)*(unsigned __int8 *)(a1 + 32) << 32)) << 12)
                        - *(_QWORD *)(*v2 + 32i64);
  v5 = MiInitializePrivateFixupBitmap((struct _RTL_BITMAP *)(v3 + 144), v2);
  v6 = (v5 ^ *(_DWORD *)(v4 + 52)) & 0x7FFFFFFF;
  *(_BYTE *)(v4 + 34) = v5 >> 31;
  *(_DWORD *)(v4 + 52) ^= v6;
  result = (RTL_BITMAP *)v4;
  *(_DWORD *)(v4 + 48) |= 0x200000u;
  return result;
}

Referenced by:

MiMapViewOfImageSection