MmUnmapIoSpace

VOID __stdcall MmUnmapIoSpace(VOID *BaseAddress, UINT64 NumberOfBytes){
  UINT64 v2; 
  unsigned __int64 v3; 
  UINT64 v4; 
  NTSTATUS HasIoTracker; 
  _KTBFLUSH_TYPE v6; 
  NTSTATUS v7; 
  _MMPTE *PteBase; 
  UINT64 v9; 
  UINT64 v10; 
  unsigned int v11; 
  __int64 v12; 
  __int64 v13; 
  unsigned __int64 v14; 
  int v15; 
  _MI_TB_FLUSH_LIST TbFlushList[48]; 

  v2 = NumberOfBytes;
  v3 = (unsigned __int64)BaseAddress;
  v4 = (((unsigned __int16)BaseAddress & 0xFFF) + NumberOfBytes + 4095) >> 12;
  if( (dword_140CFA17C & 1) != 0 )
    MiRemovePteTracker(0i64, BaseAddress, (((unsigned __int16)BaseAddress & 0xFFF) + NumberOfBytes + 4095) >> 12);
  HasIoTracker = MiMappingHasIoTracker((VOID *)v3);
  v7 = MI_IS_PHYSICAL_ADDRESS((VOID *)v3);
  if( HasIoTracker == 1 )
    MiZeroAndFlushPtes((VOID *)v3, v4);
  PteBase = MmGetPteBase();
  v9 = (UINT64)PteBase + ((v3 >> 9) & 0x7FFFFFFFF8i64);
  if( !v7 )
  {
    MiReleasePtes(
      (_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432),
      (_MMPTE *)((char *)PteBase + ((v3 >> 9) & 0x7FFFFFFFF8i64)),
      (unsigned int)v4,
      v6);
    return;
  }
  if( (v2 & 0x1FFFFF) != 0 )
  {
LABEL_9:
    MiUnmapLargePages((VOID *)v3, v2, MiVaSystemPtes);
    return;
  }
  memset(TbFlushList, 0i64, 0xB8u);
  do
  {
    v9 = (UINT64)PteBase + ((v9 >> 9) & 0x7FFFFFFFF8i64);
    --v7;
  }
  while( v7 );
  *(_QWORD *)&TbFlushList[6] = 0i64;
  v10 = v2 >> 21;
  TbFlushList[2] = 20;
  if( !HasIoTracker )
  {
    v11 = 0;
    v12 = MiSwizzleInvalidPte(768i64);
    if( (_DWORD)v10 )
    {
      v13 = (unsigned int)v10;
      v11 = v2 >> 21;
      do
      {
        v14 = v12;
        LOBYTE(v15) = MiPteInShadowRange(v9);
        if( v15 && (KeGetCurrentThread()->ApcState.Process->Flags3 & 0x1000) != 0 && (v12 & 1) != 0 )
          v14 = v12 | 0x8000000000000000ui64;
        *(_QWORD *)v9 = v14;
        MiInsertLargeTbFlushEntry(TbFlushList, 1ui64, v9);
        v9 += 8i64;
        --v13;
      }
      while( v13 );
      v3 = (unsigned __int64)BaseAddress;
      v2 = NumberOfBytes;
    }
    v9 -= 8i64 * v11;
  }
  if( MiInsertCachedPte((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (_MMPTE *)v9, (unsigned int)v10) != 1 )
  {
    MiFlushTbList(TbFlushList);
    goto LABEL_9;
  }
}

Referenced by:

BgpFwLibraryEnable
ExpGetSystemPlatformBinary
HalInitializeBios
HalpAcpiCheckAndMapTable
HalpAcpiGetAllTablesWork
HalpAcpiGetRsdt
HalpAcpiGetTableWork
HalpAcpiIsCachedTableCompromised
HalpAuditEnumerateRsdtsInRange
HalpAuditGetExtendedBiosDataArea
HalpAuditQuerySlicAddresses
HalpDmaAllocateNewTranslationBuffer
HalpDmaInitializeMasterAdapter
HalpFreeNvsBuffers
HalpInitGenericErrorSourceEntry
HalpInitGenericErrorSourceEntryV2
HalpMcaExtendedLogInitialize
HalpPowerInitFwPerformanceTableMappings
MiAllocateContiguousMemory
MiHugePageOperation
MiMapNewPfns
PipInitComputerIds
PopGetHwConfigurationSignature
WheapClearPoison
WmipFindSMBiosStructure
WmipFindSysIdTable
WmipFirmwareTableHandler
WmipGetSMBiosEventlog
WmipGetSMBiosTableData
WmipGetSysIds
WmipParseSysIdTable