VfPnpVerifyIrpStackUpward

void __fastcall VfPnpVerifyIrpStackUpward(__int64 a1, __int64 a2, __int64 a3, __int64 a4, int a5){
  const VOID *v9; 
  __int64 v10; 
  const void *v11; 
  int v12; 
  int v13; 
  int v14; 
  INT64 v15; 
  void *LowerDeviceObjectWithTag; 
  DEVICE_OBJECT *v17; 
  DEVICE_OBJECT *v18; 
  DEVICE_OBJECT *v19; 
  int IsPdo; 
  const VOID *v21; 
  if( !(unsigned int)IovUtilIsWdmStack(*(_DEVICE_OBJECT **)(a2 + 40)) )
    return;
  v9 = *(const VOID **)a1;
  v10 = *(_QWORD *)(a1 + 240);
  v11 = *(const void **)(a4 + 40);
  v12 = *(_DWORD *)(*(_QWORD *)a1 + 48i64);
  if( !a5 )
    goto LABEL_16;
  v13 = *(_DWORD *)(a1 + 56) & 0x20;
  v14 = *(_DWORD *)(a4 + 4) & 0x10000000;
  if( *(int *)(a4 + 4) < 0 )
    goto LABEL_14;
  if( v14 )
  {
LABEL_15:
    ViPnpVerifyMinorWasProcessedProperly((__int64)v9, a2, 0, (v12 != -1073741637) + 1, v11, 0);
    goto LABEL_16;
  }
  if( *(_BYTE *)(a2 + 1) == 8 )
    goto LABEL_14;
  if( v13 )
  {
    v15 = 557i64;
    goto LABEL_24;
  }
  if( (int)(v12 + 0x80000000) >= 0 && v12 != -1073741637 )
    goto LABEL_14;
  if( VfIoSwitchedOffNoReboot )
    goto LABEL_16;
  if( v12 >= 0 )
  {
    v15 = 558i64;
LABEL_24:
    ViErrorReport1(v15, *(const VOID **)(a4 + 40), v9);
    goto LABEL_16;
  }
  if( v12 == -1073741637 )
  {
    ViErrorReport1(559i64, *(const VOID **)(a4 + 40), v9);
LABEL_14:
    if( v14 )
      goto LABEL_15;
LABEL_16:
    if( v12 == -1073741637 && (*(_DWORD *)(a3 + 4) & 0x2000000) == 0 && *(_DWORD *)(a3 + 96) != -1073741637 )
    {
      ViErrorReport1(534i64, v11, v9);
      *(_DWORD *)(a3 + 4) |= 0x2000000u;
    }
  }
  if( *(_BYTE *)(a2 + 1) == 23 )
  {
    LowerDeviceObjectWithTag = IovUtilGetLowerDeviceObjectWithTag(*(_QWORD *)(a2 + 40));
    if( LowerDeviceObjectWithTag )
    {
      ObfDereferenceObjectWithTag(LowerDeviceObjectWithTag, 0x49667256ui64);
    }
    else
    {
      v17 = *(DEVICE_OBJECT **)(a2 + 40);
      LODWORD(v18) = IovUtilGetBottomDeviceObjectWithTag(v17);
      v19 = v18;
      if( v18 == v17 )
        IsPdo = PpvUtilIsPdo(v18);
      else
        IsPdo = 0;
      ObfDereferenceObjectWithTag(v19, 0x49667256ui64);
      if( !IsPdo )
        ViErrorReport10(577i64, v11, *(const VOID **)(v10 + 64), *(const VOID **)(a2 + 40));
    }
    if( (unsigned int)IovUtilIsDeviceObjectMarked(*(_QWORD *)(a2 + 40), 0) )
      ViErrorReport10(578i64, v11, *(const VOID **)(v10 + 64), v21);
  }
}

Referenced by:

No references.