MiCheckPteReserve

VOID __stdcall MiCheckPteReserve(_MMPTE *PointerPte, ULONG_PTR NumberOfPtes){
  void *BugCheckParameter4; 
  __int64 v3; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  volatile signed __int32 *v11; 
  int v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  volatile signed __int32 *v15; 
  int v16; 
  unsigned __int64 v17; 

  BugCheckParameter4 = *(void **)&NumberOfPtes;
  v3 = (_QWORD)MmGetPteBase() << 25;
  v4 = (((_QWORD)PointerPte << 25) - v3) >> 16;
  if( !*(_QWORD *)&NumberOfPtes )
    KeBugCheckEx(0xDAu, (PVOID)0x200, (PVOID)((((_QWORD)PointerPte << 25) - v3) >> 16), 0i64, 0i64);
  v5 = 2i64 * (unsigned int)(((__int64)PointerPte - *(&stru_140C4DB30 + 556)) >> 3);
  v6 = v5;
  LOBYTE(v7) = 2;
  v8 = v5 + 2 * (*(_QWORD *)&NumberOfPtes - 1i64);
  if( v5 < v8 )
  {
    do
    {
      if( !_bittest64(*(&stru_140C4DB30 + 414), v6) )
        KeBugCheckEx(
          0xDAu,
          (PVOID)0x201,
          (PVOID)v4,
          (PVOID)(v4 + (((v6 - v5) << 11) & 0xFFFFFFFFFFFFF000ui64)),
          BugCheckParameter4);
      v9 = v6 & 0x1F;
      LOBYTE(v10) = 1;
      v11 = (volatile signed __int32 *)(*(&stru_140C4DB30 + 414) + 4 * (v6 >> 5));
      if( v9 + 1 > 0x20 )
      {
        if( (v6 & 0x1F) != 0 )
        {
          _InterlockedAnd(v11++, ~(((1 << (32 - (v6 & 0x1F))) - 1) << v9));
          v10 = 1i64 - (32 - (unsigned int)(v6 & 0x1F));
          if( v10 >= 0x20 )
          {
            v13 = v10 >> 5;
            v10 += -32i64 * (v10 >> 5);
            do
            {
              *v11++ = 0;
              --v13;
            }
            while( v13 );
          }
          if( !v10 )
            goto LABEL_14;
        }
        v12 = -1 << v10;
      }
      else
      {
        v12 = ~(1 << v9);
      }
      _InterlockedAnd(v11, v12);
LABEL_14:
      v6 += 2i64;
    }
    while( v6 < v8 );
  }
  v14 = v6 & 0x1F;
  v15 = (volatile signed __int32 *)(*(&stru_140C4DB30 + 414) + 4 * (v6 >> 5));
  if( v14 + 2 > 0x20 )
  {
    if( (v6 & 0x1F) == 0 )
      goto LABEL_23;
    v16 = v6 & 0x1F;
    _InterlockedAnd(v15++, ~(((1 << (32 - v16)) - 1) << v14));
    v7 = 2i64 - (unsigned int)(32 - v16);
    if( v7 >= 0x20 )
    {
      v17 = v7 >> 5;
      v7 += -32i64 * (v7 >> 5);
      do
      {
        *v15++ = 0;
        --v17;
      }
      while( v17 );
    }
    if( v7 )
LABEL_23:
      _InterlockedAnd(v15, -1 << v7);
  }
  else
  {
    _InterlockedAnd(v15, ~(3 << v14));
  }
}

Referenced by:

MiReservePtes