VfFreeMapRegisters

VOID __stdcall VfFreeMapRegisters(_DMA_ADAPTER *DmaAdapter, PVOID MapRegisterBase, UINT64 NumberOfMapRegisters){
  INT64 v4; 
  unsigned int v5; 
  char v7; 
  void(__fastcall *v8)(_DMA_ADAPTER *, PVOID, _QWORD); 
  INT64 v9; 
  void(__fastcall *v10)(_DMA_ADAPTER *, PVOID, _QWORD); 
  LIST_ENTRY *AdapterInformationInternal; 
  INT64 v12; 
  _QWORD *v13; 
  struct _SLIST_ENTRY *v14; 
  v4 = 0i64;
  v5 = NumberOfMapRegisters;
  v7 = 0;
  LODWORD(v8) = ViGetRealDmaOperation(DmaAdapter, 0x38ui64);
  LOBYTE(v9) = 1;
  v10 = v8;
  AdapterInformationInternal = ViGetAdapterInformationInternal(DmaAdapter, v9);
  if( AdapterInformationInternal )
  {
    VF_ASSERT_IRQL(2u);
    v4 = (INT64)MapRegisterBase;
    if( MapRegisterBase == (PVOID)-559026163i64 )
    {
      MapRegisterBase = 0i64;
      v7 = 1;
      v4 = 0i64;
    }
    else if( MapRegisterBase && *(_DWORD *)MapRegisterBase == -1393569779 )
    {
      MapRegisterBase = (PVOID)*((_QWORD *)MapRegisterBase + 6);
    }
  }
  v10(DmaAdapter, MapRegisterBase, v5);
  if( AdapterInformationInternal )
  {
    if( v7 == 1 )
      v4 = -559026163i64;
    v12 = ViRemoveChannelWcb((INT64)AdapterInformationInternal, v4, 0i64);
    v13 = (_QWORD *)v12;
    if( v12 )
    {
      SUBTRACT_MAP_REGISTERS((INT64)AdapterInformationInternal, *(unsigned int *)(v12 + 48));
      v14 = (struct _SLIST_ENTRY *)v13[12];
      if( v14 )
        ViFreeMapRegisterFile((__int64)AdapterInformationInternal, v14);
      ExFreeToNPagedLookasideList((NPAGED_LOOKASIDE_LIST *)ViHalWaitBlockLookaside, v13);
    }
  }
}

Referenced by:

No references.