HalpDmaFreeMapRegisters

VOID __stdcall HalpDmaFreeMapRegisters(
        _ADAPTER_OBJECT *ChildAdapterObject,
        _HALP_DMA_TRANSLATION_ENTRY *Translation,
        UINT64 a3){
  unsigned int v3; 
  unsigned int v4; 
  _HALP_DMA_TRANSLATION_ENTRY *v7; 
  union {void *VirtualAddress;struct {unsigned __int64 BoundToMaster : 1;unsigned __int64 BoundToScatterPool : 1;unsigned __int64 OwnedByMaster : 1;unsigned __int64 OwnedByScatterPool : 1;unsigned __int64 TemporaryMapping : 1;unsigned __int64 ZeroBuffer : 1;unsigned __int64 Address : 58;} Flags;} v8; 
  unsigned __int64 v9; 
  char v10; 
  char v11; 
  unsigned __int8 CurrentIrql; 
  VOID *v13; 
  INT64 v14[2]; 
  __int128 v15; 
  __int128 i; 
  __int64 v17; 
  _HALP_DMA_TRANSLATION_ENTRY *Next; 

  v3 = 0;
  v17 = 0i64;
  v4 = a3;
  v7 = Translation;
  *(_OWORD *)v14 = 0i64;
  v15 = 0i64;
  for( i = 0i64; v3 < v4; ++v3 )
  {
    Next = v7->Next;
    v8.VirtualAddress = (void *)v7->u;
    if( ((__int64)v8.VirtualAddress & 0x20) != 0 )
    {
      v9 = (unsigned __int64)v8.VirtualAddress & 0xFFFFFFFFFFFFFFDFui64;
      v10 = 0;
      v11 = 0;
      v7->u.VirtualAddress = (void *)v9;
      CurrentIrql = 0;
      if( (v9 & 0xFFFFFFFFFFFFF000ui64) == 0 )
      {
        CurrentIrql = KeGetCurrentIrql();
        if( CurrentIrql > 2u )
          KeBugCheckEx(0xACu, (PVOID)0x1000, (PVOID)0xEF03, 0i64, 0i64);
        if( CurrentIrql < 2u )
        {
          CurrentIrql = KeGetCurrentIrql();
          __writecr8(2ui64);
          v11 = 1;
        }
        HalpDmaAcquireBufferMappings(2i64, v7, 1u, (__int64)v14);
        v10 = 1;
      }
      v13 = (VOID *)((unsigned __int64)v7->u.VirtualAddress & 0xFFFFFFFFFFFFF000ui64);
      if( v13 )
        memset(v13, 0i64, 0x1000u);
      if( v10 )
        HalpDmaReleaseBufferMappings((INT64)v13, (INT64)Translation, 1ui64, (INT64)v14);
      if( v11 )
        __writecr8(CurrentIrql);
    }
    HalpDmaReturnPageToOwner(ChildAdapterObject, ChildAdapterObject->MasterAdapter, v7);
    v7 = Next;
  }
}

Referenced by:

HalDmaAllocateCrashDumpRegistersEx
HalDmaFreeCrashDumpRegistersEx
HalpDmaFreeCrashDumpRegisters
HalpDmaProcessMapRegisterQueueV2
IoFreeMapRegistersV2
IoFreeMapRegistersV3