PnprRecopyMappingReserve

INT64 __fastcall PnprRecopyMappingReserve(INT64 a1){
  UINT64 v1; 
  int v3; 
  UINT64 ContainingPageTable; 
  INT64 v5; 
  UINT64 v6; 
  int v7; 
  UINT64 v9; 
  int v10; 
  int v11; 
  INT64 v12; 
  v1 = 0i64;
  v3 = 0;
  while( 1 )
  {
    ContainingPageTable = MiGetContainingPageTable(
                            (UINT64)MmGetPteBase()
                          + (((*(_QWORD *)(a1 + 8) + (unsigned __int64)(unsigned int)(v3 << 12)) >> 9) & 0x7FFFFFFFF8i64));
    if( ContainingPageTable != v1 )
    {
      v1 = ContainingPageTable;
      v7 = PnprMarkOrMirrorPages((_LARGE_INTEGER)(ContainingPageTable << 12), (_LARGE_INTEGER)4096i64, 1u);
      if( v7 < 0 )
        break;
    }
    if( (unsigned int)++v3 >= 0x10 )
    {
      PnprRecopyAddress(*(_QWORD *)a1, 0x30ui64, v5, v6, v12);
      return 0i64;
    }
  }
  v9 = PnprContext;
  v10 = *(_DWORD *)(PnprContext + 20984);
  if( !v10 )
    v10 = 5721;
  *(_DWORD *)(PnprContext + 20984) = v10;
  v11 = *(_DWORD *)(v9 + 20988);
  if( !v11 )
    v11 = 1;
  *(_DWORD *)(v9 + 20988) = v11;
  return(unsigned int)v7;
}

Referenced by:

PnprRecopyMirrorPages