MiInitializeMdlPfn
CHAR __fastcall MiInitializeMdlPfn(INT64 a1, INT64 a2){
int v2;
char v4;
unsigned __int64 v5;
_MMPTE *PteBase;
_MMPTE *v7;
v2 = a2;
if( (a2 & 0x100) != 0 )
{
v4 = *(_BYTE *)(a1 + 34);
if( (v4 & 7) != 5 )
*(_BYTE *)(a1 + 34) = v4 & 0xF8 | 5;
LOBYTE(v5) = 0;
*(_QWORD *)(a1 + 24) &= 0xC000000000000000ui64;
}
else
{
*(_QWORD *)(a1 + 24) = *(_QWORD *)(a1 + 24) & 0xC000000000000000ui64 | 1;
*(_WORD *)(a1 + 32) = 2;
PteBase = MmGetPteBase();
v7 = 0i64;
if( (a2 & 0x80000200) == 0 )
v7 = PteBase;
*(_QWORD *)(a1 + 8) = v7;
if( (int)a2 < 0 )
*(_QWORD *)(a1 + 24) &= ~0x4000000000000000ui64;
if( (a2 & 0x200) != 0 )
{
MiAbortCombineScan(a1);
*(_QWORD *)(a1 + 40) = *(_QWORD *)(a1 + 40) & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
if( (v2 & 0x20000) == 0 )
_InterlockedIncrement64(&qword_140C4DD40);
}
LOBYTE(v5) = *(_BYTE *)(a1 + 34) & 0xF8 | 6;
*(_BYTE *)(a1 + 34) = v5;
if( v2 < 0 )
{
v5 = *(_QWORD *)(a1 + 40) & 0x8FFFFFFFFFFFFFFFui64 | 0x1000000000000000i64;
*(_QWORD *)(a1 + 40) = v5;
}
}
*(_BYTE *)(a1 + 35) &= 0xF8u;
*(_DWORD *)(a1 + 36) = 0;
return v5;
}Referenced by:
MiCreateEnclaveRegions
MiInitializeMdlLeafPfns
MmAllocateNonChargedSecurePages
MmAllocateSecureKernelPages