MiInitializeMdlPfn
VOID __stdcall MiInitializeMdlPfn(_MMPFN *Pfn1, UINT64 Flags){
int v2;
char v4;
_MMPTE *PteBase;
unsigned __int64 v6;
v2 = Flags;
if( (Flags & 0x100) != 0 )
{
v4 = *((_BYTE *)&Pfn1->u3 + 2);
if( (v4 & 7) != 5 )
*((_BYTE *)&Pfn1->u3 + 2) = v4 & 0xF8 | 5;
Pfn1->u2._bf_0 &= 0xC000000000000000ui64;
}
else
{
Pfn1->u2._bf_0 = Pfn1->u2._bf_0 & 0xC000000000000000ui64 | 1;
Pfn1->u3.ReferenceCount = 2;
PteBase = MmGetPteBase();
v6 = 0i64;
if( (Flags & 0x80000200) == 0 )
v6 = (unsigned __int64)PteBase;
Pfn1->PteLong = v6;
if( (Flags & 0x80000000) != 0i64 )
Pfn1->u2._bf_0 &= ~0x4000000000000000ui64;
if( (Flags & 0x200) != 0 )
{
MiAbortCombineScan(Pfn1);
Pfn1->u4._bf_0 = Pfn1->u4._bf_0 & 0x8FFFFFFFFFFFFFFFui64 | 0x3000000000000000i64;
if( (v2 & 0x20000) == 0 )
_InterlockedIncrement64((_QWORD *)&stru_140C4DB30 + 66);
}
*((_BYTE *)&Pfn1->u3 + 2) = *(_BYTE *)(&Pfn1->u3 + 1) & 0xF8 | 6;
if( v2 < 0 )
Pfn1->u4._bf_0 = Pfn1->u4._bf_0 & 0x8FFFFFFFFFFFFFFFui64 | 0x1000000000000000i64;
}
*((_BYTE *)&Pfn1->u3 + 3) &= 0xF8u;
*(_DWORD *)&Pfn1->NodeBlinkLow = 0;
}Referenced by:
MiCreateEnclaveRegions
MiInitializeMdlLeafPfns
MmAllocateNonChargedSecurePages
MmAllocateSecureKernelPages