MiMarkRetpolineBits
NTSTATUS __stdcall MiMarkRetpolineBits(INT64 a1){
UINT64 v1;
__int64 v2;
UINT64 v3;
__int64 v4;
__int64 v5;
__int64 v6;
UINT64 v7;
int v8;
char v9;
LODWORD(v1) = MiAddressToRetpolineBit(a1);
v3 = v1;
LODWORD(v5) = MiAddressToRetpolineBit((v4 + v2 + 0xFFFF) & 0xFFFFFFFFFFFF0000ui64);
v6 = v5;
v7 = v5 - v3;
if( v8 || (RtlAreBitsClearEx(&BitMap, v3, v5 - v3), v9) )
{
if( !MiSplitBitmapPages(MiVaNonPagedPool, (char *)BitMap.Buffer + (v3 >> 3), v6 + (v3 & 7) - v3) )
return -1073741801;
RtlSetBitsEx(&BitMap, v3, v7);
}
else
{
RtlClearBitsEx(&BitMap, v3, v7);
}
return 0;
}Referenced by:
MiInitializeRetpoline
MiMarkKernelImageRetpolineBits
MiReloadBootLoadedDrivers
MmMarkHypercallPageRetpolineBit