MiUnmapFrameBuffer

NTSTATUS __stdcall MiUnmapFrameBuffer(
        ULONG_PTR PointerPte,
        _MI_PFN_CACHE_ATTRIBUTE CacheAttribute,
        UINT64 Locked,
        UINT64 *IoPageFrame){
  NTSTATUS v5; 
  unsigned __int64 *v7; 
  INT64 v8; 
  INT64 v9; 
  __int64 v10; 
  int v11; 
  UINT64 v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  char *BugCheckParameter4; 
  __int64 v17; 
  unsigned __int16 v18; 
  int v19; 
  int v20; 
  INT64 v22; 

  *IoPageFrame = -1i64;
  v5 = Locked;
  v7 = *(unsigned __int64 **)&PointerPte;
  LODWORD(v8) = MI_READ_PTE_LOCK_FREE(*(INT64 *)&PointerPte);
  v22 = v8;
  v9 = v8;
  MI_READ_PTE_LOCK_FREE((INT64)&v22);
  v10 = MiSwizzleInvalidPte(128i64);
  v15 = v10;
  if( CacheAttribute == MiWriteCombined )
  {
    v15 = v10 | 0x300;
  }
  else if( CacheAttribute )
  {
    if( CacheAttribute == MiNotMapped )
    {
      if( v11 )
        v15 = 0i64;
      else
        v15 = v9 & 0xFFFFFFFFFFFFFBFEui64 | 0x400;
    }
  }
  else
  {
    v15 = v10 | 0x100;
  }
  BugCheckParameter4 = &MmGetPfnDb()->$976DF529DAC3D73085C9E386D94B91E6::$E228DCF3D8940E384DBC5EFCA756D8B6::gap0[8 * v13];
  if( v11 )
  {
    v17 = *((_QWORD *)BugCheckParameter4 + 5);
    v18 = 1;
    if( (v17 & 0x1000000000i64) != 0 || (v14 & v17) == 0xFFFFFFFFDi64 )
      v18 = 2;
    if( *((_WORD *)BugCheckParameter4 + 16) < v18 )
      KeBugCheckEx(0x1Au, (PVOID)0x41301, v7, (PVOID)v9, BugCheckParameter4);
    v19 = 1;
    if( *((_WORD *)BugCheckParameter4 + 16) <= v18 )
      v19 = v5;
    v5 = v19;
  }
  else
  {
    *IoPageFrame = v12;
  }
  if( CacheAttribute != MiNotMapped )
    v15 = (v15 & 0xFF1F ^ (v15 & 0xFF1F | (unsigned __int16)((v9 & 0x800) != 0 ? 128 : 32))) & 0x3E0 ^ v15 & 0xFFFFFFFFFFFFFF1Fui64;
  LOBYTE(v20) = MiPteInShadowRange((UINT64)v7);
  if( v20 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v15 & 1) != 0 )
    v15 |= 0x8000000000000000ui64;
  *v7 = v15;
  return v5;
}

Referenced by:

MiDeleteVa
MiReplaceRotateWithDemandZero