ViFlushZeroMapRegisterBaseWcbs

VOID __stdcall ViFlushZeroMapRegisterBaseWcbs(_ADAPTER_INFORMATION *AdapterInformation){
  UINT64 *v1; 
  unsigned __int64 v3; 
  _ADAPTER_INFORMATION *v4; 
  _ADAPTER_INFORMATION *v5; 
  __int64 v6; 
  _ADAPTER_INFORMATION **v7; 

  v1 = (UINT64 *)(AdapterInformation + 36);
  v3 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)AdapterInformation + 18);
  v4 = (_ADAPTER_INFORMATION *)*((_QWORD *)AdapterInformation + 16);
  while( v4 != AdapterInformation + 32 )
  {
    v5 = v4 - 18;
    v4 = *(_ADAPTER_INFORMATION **)v4;
    if( !*((_QWORD *)v5 + 11) && !*((_QWORD *)v5 + 12) && v5[13] == 3 )
    {
      v6 = *((_QWORD *)v5 + 9);
      v7 = (_ADAPTER_INFORMATION **)*((_QWORD *)v5 + 10);
      if( *(_ADAPTER_INFORMATION **)(v6 + 8) != v5 + 18 || *v7 != v5 + 18 )
        __fastfail(3u);
      *v7 = (_ADAPTER_INFORMATION *)v6;
      *(_QWORD *)(v6 + 8) = v7;
      SUBTRACT_MAP_REGISTERS(AdapterInformation, (unsigned int)v5[12]);
      ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v5);
      break;
    }
  }
  KxReleaseSpinLock(v1);
  __writecr8(v3);
}

Referenced by:

VfPutDmaAdapter