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