MiInitializePfn

VOID __fastcall MiInitializePfn(_RTL_BITMAP_EX *BitMapHeader, UINT64 *BitMapBuffer, UINT64 SizeOfBitMap){
  char v3; 
  UINT64 v4; 
  char v6; 
  unsigned int v7; 
  INT64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  unsigned int v12; 
  UINT64 v13; 
  _ETHREAD *CurrentThread; 
  char *v15; 
  unsigned int v16; 
  unsigned int v17; 
  unsigned __int8 v18; 
  unsigned __int8 v19; 
  unsigned __int64 *Buffer; 
  char v21; 
  UINT64 v22; 
  UINT64 v23; 
  UINT64 SpinCount; 
  v4 = *BitMapBuffer;
  v6 = v3;
  v7 = SizeOfBitMap;
  if( (v3 & 4) != 0 )
  {
    v9 = 32 * (SizeOfBitMap & 0x1F);
    if( v4 )
      v4 = v9 | v4 & 0xFFFFFFFFFFFFFC1Fui64;
    else
      v4 = MiSwizzleInvalidPte(v9);
  }
  v10 = -9i64;
  if( (v4 & 0x400) != 0 )
    v10 = -2049i64;
  v11 = v4 & v10;
  BitMapHeader[1].SizeOfBitMap = v11;
  if( (v6 & 2) != 0 )
  {
    BitMapHeader[2].Buffer = (unsigned __int64 *)((unsigned __int64)BitMapHeader[2].Buffer | 0x8000000000000000ui64);
  }
  else if( (v6 & 8) == 0 )
  {
    BitMapHeader->SizeOfBitMap &= 0xFFFFFFFFFFFFC00Fui64;
    BitMapHeader[1].SizeOfBitMap = v11 & 0xFFFFFFFFFC00FFFFui64;
  }
  v12 = MiProtectionToCacheAttribute(v7);
  LOWORD(BitMapHeader[2].SizeOfBitMap) = 1;
  v23 = *(_QWORD *)((char *)MmGetPteBase() + (((unsigned __int64)BitMapBuffer >> 9) & 0x7FFFFFFFF8i64));
  v13 = (v23 >> 12) & 0xFFFFFFFFFi64;
  BitMapHeader[2].Buffer = (unsigned __int64 *)(v13 | (unsigned __int64)BitMapHeader[2].Buffer & 0xFFFFFFF000000000ui64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v15 = (char *)MmGetPfnDb() + 48 * v13;
  v16 = *((_DWORD *)CurrentThread + 326);
  if( (v16 & 0x100) != 0 )
    v17 = v16 >> 9;
  else
    LOBYTE(v17) = PsGetPagePriorityThread((__int64)CurrentThread);
  v18 = 17;
  if( (v6 & 1) == 0 )
  {
    if( (v6 & 0x10) != 0 )
    {
      LODWORD(SpinCount) = v6 & 1;
      while( _interlockedbittestandset64((volatile signed __int32 *)&BitMapHeader[1].Buffer, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( (__int64)BitMapHeader[1].Buffer < 0 );
      }
    }
    else
    {
      v18 = MiLockPageInline((INT64)BitMapHeader);
    }
  }
  LODWORD(v22) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)v15 + 6, 0x3Fui64) )
  {
    do
      KeYieldProcessorEx(&v22);
    while( *((__int64 *)v15 + 3) < 0 );
  }
  *((_QWORD *)v15 + 3) ^= ((*((_QWORD *)v15 + 3) + 1i64) ^ *((_QWORD *)v15 + 3)) & 0x3FFFFFFFFFFFFFFFi64;
  _InterlockedAnd64((volatile signed __int64 *)v15 + 3, 0x7FFFFFFFFFFFFFFFui64);
  v19 = BYTE2(BitMapHeader[2].SizeOfBitMap);
  if( v19 >> 6 != v12 )
  {
    MiChangePageAttribute((INT64)BitMapHeader, v12, 1);
    v19 = BYTE2(BitMapHeader[2].SizeOfBitMap);
  }
  Buffer = BitMapHeader[1].Buffer;
  v21 = v19 & 0xF8 | 6;
  BitMapHeader->Buffer = BitMapBuffer;
  BitMapHeader[1].Buffer = (unsigned __int64 *)((unsigned __int64)Buffer & 0xC000000000000000ui64 | 1);
  BYTE3(BitMapHeader[2].SizeOfBitMap) ^= (v17 ^ BYTE3(BitMapHeader[2].SizeOfBitMap)) & 7;
  BYTE2(BitMapHeader[2].SizeOfBitMap) = v21;
  if( (v6 & 0x20) == 0 )
    BYTE2(BitMapHeader[2].SizeOfBitMap) = v21 | 0x10;
  if( (v6 & 0x40) != 0 )
    BYTE3(BitMapHeader[2].SizeOfBitMap) |= 0x20u;
  if( (v6 & 1) == 0 )
  {
    _InterlockedAnd64((volatile signed __int64 *)&BitMapHeader[1].Buffer, 0x7FFFFFFFFFFFFFFFui64);
    if( (v6 & 0x10) == 0 )
      __writecr8(v18);
  }
}

Referenced by:

MiCreateSharedZeroPages
MiInitializeProtoPfn
MiMapNewSession
MmAllocateIndependentPagesEx
MmCheckCachedPageStates