MiDeleteNonPagedPoolPte

NTSTATUS __stdcall MiDeleteNonPagedPoolPte(PVOID BugCheckParameter2){
  INT64 v1; 
  int v2; 
  int v4; 
  UINT64 v5; 
  UINT64 v6; 
  UINT64 v7; 
  __int64 v8; 
  int i; 
  __int64 v10; 
  __int64 v11; 
  _MMPFN *v12; 
  unsigned __int64 Long; 
  int v14; 
  int v15; 
  bool v16; 
  UINT64 v17; 
  int v18; 
  UINT64 v19; 
  void *v21; 
  INT64 BugCheckParameter4; 
  __int64 v23; 
  UINT64 v24[7]; 
  UINT64 SpinCount; 

  v4 = v2;
  v5 = v1;
  LODWORD(v6) = MI_READ_PTE_LOCK_FREE(v1);
  v24[0] = v6;
  v7 = v6;
  if( (v6 & 1) != 0 && v4 <= 1 )
  {
    v8 = 1i64;
    for( i = v4; i; --i )
      v8 <<= 9;
    v10 = *((_QWORD *)BugCheckParameter2 + 21);
    if( (v7 & 0x80u) != 0i64 )
    {
      if( (*(_DWORD *)(v10 + 204) & 1) != 0 )
      {
        LODWORD(v21) = MiGetLeafVa(v5);
        if( (unsigned __int64)v21 < *((_QWORD *)BugCheckParameter2 + 4)
          || (unsigned __int64)v21 + 4096 * BugCheckParameter4 - 1 > *((_QWORD *)BugCheckParameter2 + 5) )
        {
          KeBugCheckEx(0x1Au, (PVOID)0x5306, BugCheckParameter2, v21, (PVOID)BugCheckParameter4);
        }
        MiDecommitLargePoolVa(v21, v5, BugCheckParameter4);
        *(_DWORD *)(v10 + 212) += 512;
      }
    }
    else
    {
      MiPteInShadowRange((UINT64)v24);
      v11 = (v7 >> 12) & 0xFFFFFFFFFi64;
      v12 = &MmGetPfnDb()[v11];
      if( v4 == 1 )
      {
        if( (v12->u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64) != 1
          || !MiEvictPageTableLock((INT64)&stru_140C4DB30 + 6224, (UINT64 *)v5, ZeroPte.u.Hard._bf_0, 2) )
        {
          return 0;
        }
      }
      else
      {
        if( (*(_DWORD *)(v10 + 204) & 1) == 0 )
          return 0;
        Long = ZeroPte.u.Long;
        LOBYTE(v14) = MiPteInShadowRange(v5);
        if( v14 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (ZeroPte.u.Long & 1) != 0 )
          Long = ZeroPte.u.Long | 0x8000000000000000ui64;
        *(_QWORD *)v5 = Long;
        if( (*((_BYTE *)&v12->u3 + 3) & 0x10) == 0 )
          ++*(_DWORD *)(v10 + 212);
      }
      v15 = *(_DWORD *)(v10 + 208);
      if( !v15 )
      {
        LODWORD(v23) = MiGetContainingPageTable(v5);
        *(_QWORD *)(v10 + 216) = v23;
      }
      *(_DWORD *)(v10 + 208) = v15 + 1;
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&v12->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( v12->u2._bf_0 < 0 );
      }
      if( (*(_DWORD *)(v10 + 204) & 2) == 0 )
      {
        if( v12->u3.ReferenceCount != 1 )
          KeBugCheckEx(
            0x4Eu,
            (PVOID)0x9A,
            (PVOID)(v11 * 48 / 48),
            (PVOID)(*(_BYTE *)(&v12->u3 + 1) & 7),
            (PVOID)v12->u3.ReferenceCount);
        *((_BYTE *)&v12->u3 + 2) = *(_BYTE *)(&v12->u3 + 1) & 0xF8 | 5;
      }
      if( v4 )
      {
        v12->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = *(_QWORD *)(v10 + 192);
        *(_QWORD *)(v10 + 192) = v12;
        _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        MiInsertRecursiveTbFlushEntries((_MI_TB_FLUSH_LIST *)v10, (unsigned int)v4, v5);
      }
      else
      {
        if( (*(_DWORD *)(v10 + 204) & 2) == 0 )
        {
          v12->u1.$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::_bf_0 = *(_QWORD *)(v10 + 184);
          *(_QWORD *)(v10 + 184) = v12;
        }
        _InterlockedAnd64(&v12->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
        v16 = (*(_DWORD *)(v10 + 200) & 0x40000000) == 0;
        v24[0] = 0i64;
        if( v16 )
        {
          MiInitializeTbFlushStamps(v24);
          v17 = v24[0];
          LOBYTE(v18) = MiPteInShadowRange(v5);
          if( v18 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v17 & 1) != 0 )
            v17 |= 0x8000000000000000ui64;
          *(_QWORD *)v5 = v17;
        }
        v19 = v24[0];
        if( *(&stru_140C4DB30 + 42) && (v24[0] & 0x10) == 0 )
          v19 = v24[0] & ~*(&stru_140C4DB30 + 42);
        if( (v19 & 0xFFFFFFFF00000000ui64) == 0 )
          MiInsertTbFlushEntry(
            (_MI_TB_FLUSH_LIST *)v10,
            (VOID *)((__int64)((v5 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16),
            1ui64,
            0i64);
      }
    }
  }
  return 0;
}

Referenced by:

MiClearNonPagedPtes