IovpCompleteRequest4

void __fastcall IovpCompleteRequest4(__int64 a1, UINT64 a2, const void *a3, _QWORD *a4){
  int v5; 
  INT64 v7; 
  char v8; 
  _BYTE *v9; 
  v5 = a2;
  if( *a4 )
  {
    v7 = a4[1];
    KeAcquireSpinLockRaiseToDpc((UINT64 *)(v7 + 8), a2);
    *(_BYTE *)(v7 + 16) = v8;
    if( v5 != -1073741802 )
    {
      v9 = *(_BYTE **)(a1 + 184);
      if( *(_BYTE *)(a1 + 67) <= *(_BYTE *)(a1 + 66)
        && (unsigned __int8)(*v9 - 3) <= 1u
        && *(_QWORD *)(a1 + 8)
        && (MmVerifierData & 0x6000) != 0 )
      {
        MdlInvariantPostDriverCompletion(v7, a1);
      }
      if( *(_QWORD *)(v7 + 216) && *(int *)(v7 + 56) >= 0 && (v9[3] & 1) == 0 )
      {
        ViErrorReport1(552i64, a3, (const VOID *)a1);
        *(_BYTE *)(*(_QWORD *)(a1 + 184) + 3i64) |= 1u;
      }
    }
    VfIrpDatabaseEntryReleaseLock((_QWORD *)v7);
  }
}

Referenced by:

IovpLocalCompletionRoutine