MmSetPageProtection

UINT8 __stdcall MmSetPageProtection(VOID *VirtualAddress, UINT64 NumberOfBytes, UINT64 NewProtect){
  unsigned int v3; 
  unsigned int ProtectionMask; 
  char v7; 
  _XSTATE_CONFIGURATION *v8; 
  UINT64 v9; 
  __int64 v10; 
  __int64 v11; 
  int v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  _MMPFN *v17; 
  __int64 v19[2]; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  v3 = NewProtect;
  memset(TbFlushList, 0i64, 0xB8u);
  if( MI_IS_PHYSICAL_ADDRESS(VirtualAddress) )
    return 0;
  ProtectionMask = MiMakeProtectionMask(v3);
  v7 = ProtectionMask;
  if( ProtectionMask > 7 || (ProtectionMask & 5) == 5 || (ProtectionMask & 2) != 0 && (MiFlags & 0x10000) != 0 )
    return 0;
  v8 = (_XSTATE_CONFIGURATION *)((char *)MmGetPteBase() + (((unsigned __int64)VirtualAddress >> 9) & 0x7FFFFFFFF8i64));
  v9 = (NumberOfBytes >> 12) + ((NumberOfBytes & 0xFFF) != 0);
  LODWORD(v10) = MiMakeValidPte(v8, 0i64, ProtectionMask | 0xA0000000);
  *(_QWORD *)&TbFlushList[6] = 0i64;
  TbFlushList[2] = 20;
  v11 = v10;
  MiInsertTbFlushEntry(TbFlushList, VirtualAddress, v9, 0i64);
  if( v9 )
  {
    MiPteInShadowRange((UINT64)v19);
    v12 = v7 & 4;
    do
    {
      LODWORD(v13) = MI_READ_PTE_LOCK_FREE((INT64)v8);
      v19[0] = v13;
      v14 = (v13 >> 12) & 0xFFFFFFFFFi64;
      v15 = (v14 << 12) | v11 & 0xFFFF000000000FFFui64;
      v16 = v15;
      v17 = &MmGetPfnDb()[v14];
      if( v12 )
      {
        v15 |= 0x42ui64;
        if( (v19[0] & 0x42) == 0 )
          v15 = v16;
      }
      else if( (((unsigned __int64)MmGetPfnDb()[v14].u4._bf_0 >> 50) & 1) != 0 )
      {
        MiLockPageAndSetDirty(v17, 0i64);
      }
      v11 = v15 | 0x20;
      MiWriteValidPteNewProtection((INT64 *)v8, v11);
      v8 = (_XSTATE_CONFIGURATION *)((char *)v8 + 8);
      --v9;
    }
    while( v9 );
  }
  MiFlushTbList(TbFlushList);
  return 1;
}

Referenced by:

KeWriteProtectProcessorState
MmAllocateIsrStack
VslpIumPhase0Initialize
sub_1403E91C0