MiMakeDriverPageStayResident

CHAR __stdcall MiMakeDriverPageStayResident(INT64 a1, INT64 a2, UINT64 a3){
  UINT64 v5; 
  signed __int32 *v6; 
  CHAR result; 
  char *v8; 
  UINT64 v9; 
  UINT64 v10; 
  _MMPFN *v11; 
  UINT64 SpinCount; 
  UINT64 v13; 

  v5 = (a3 - *(_QWORD *)(a1 + 48)) >> 12;
  v6 = *(signed __int32 **)(*(_QWORD *)(a1 + 272) + 8i64);
  result = v5;
  if( !_bittest64((const signed __int64 *)v6, (unsigned int)v5) )
  {
    _bittestandset(v6, v5);
    result = MiGetWsleContents((INT64)v6, a3) & 0xF;
    if( result != 9 )
    {
      v8 = (char *)MmGetPteBase() + ((a3 >> 9) & 0x7FFFFFFFF8i64);
      LODWORD(v9) = MI_READ_PTE_LOCK_FREE((INT64)v8);
      v13 = v9;
      v10 = v9;
      MiPteInShadowRange((UINT64)&v13);
      v11 = &MmGetPfnDb()[(v10 >> 12) & 0xFFFFFFFFFi64];
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&v11->u2, 0x3Fui64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( v11->u2._bf_0 < 0 );
      }
      MiRemoveSystemImagePage(a2, (INT64)v8, (INT64)v11);
      result = -1;
      _InterlockedAnd64(&v11->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
    }
  }
  return result;
}

Referenced by:

MiMakeDriverPagesPrivate