HalpDmaGetNextWcb

INT64 *__stdcall HalpDmaGetNextWcb(INT64 a1){
  UINT64 *v1; 
  unsigned __int8 v3; 
  INT64 *v4; 
  INT64 *v5; 
  unsigned __int64 v6; 
  INT64 v7; 

  v1 = (UINT64 *)(a1 + 176);
  v3 = KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 176));
  *(_QWORD *)(a1 + 352) = 0i64;
  v4 = (INT64 *)(a1 + 184);
  v5 = *(INT64 **)(a1 + 184);
  v6 = v3;
  if( v5 == (INT64 *)(a1 + 184) )
  {
    v5 = 0i64;
    *(_BYTE *)(a1 + 216) = 0;
  }
  else
  {
    v7 = *v5;
    if( (INT64 *)v5[1] != v4 || *(INT64 **)(v7 + 8) != v5 )
      __fastfail(3u);
    *v4 = v7;
    *(_QWORD *)(v7 + 8) = v4;
  }
  KxReleaseSpinLock(v1);
  __writecr8(v6);
  return v5;
}

Referenced by:

IoFreeAdapterChannelV3