MiInitializePrivateFixupBitmap
__int64 __fastcall MiInitializePrivateFixupBitmap(struct _RTL_BITMAP *a1, _QWORD *a2){
_QWORD *v2;
__int64 v3;
unsigned int v5;
unsigned int v6;
__int64 v7;
__int64 v8;
unsigned __int64 i;
__int64 *v10;
__int64 v11;
UINT64 v12;
int v13;
v2 = a2 + 16;
v3 = a2[12];
v5 = *(_DWORD *)(*a2 + 8i64);
a1->Buffer = &a1[1].SizeOfBitMap;
a1->SizeOfBitMap = v5;
RtlClearAllBits(a1);
v6 = 0;
v7 = 0i64;
do
{
v8 = 8i64 * *((unsigned int *)v2 + 11);
if( v2[1] < (unsigned __int64)(v8 + v2[1]) )
{
for( i = ((unsigned __int64)(v8 - 1) >> 3) + 1; i; --i )
{
v10 = *(__int64 **)(v3 + 32);
v11 = *v10;
if( v6 >= (unsigned __int64)v10[7] )
{
LABEL_14:
if( (v2[4] & 0xA) != 10 )
goto LABEL_10;
}
else
{
v12 = v6;
while( !*(_QWORD *)(v11 + 8i64 * (unsigned int)v12)
&& !MiDoesPageRequireRetpolineFixups((INT64)(v10 + 9), v12) )
{
v12 = (unsigned int)(v13 + 1);
if( (_DWORD)v12 != v6 )
goto LABEL_14;
}
_bittestandset((signed __int32 *)a1->Buffer, v6);
}
++v7;
LABEL_10:
++v6;
}
}
v2 = (_QWORD *)v2[2];
}
while( v2 );
return v7;
}Referenced by:
MiAddPrivateFixupEntryForSystemImage
MiAllocateFixupVad