VfPnpVerifyIrpStackUpward

VOID __stdcall VfPnpVerifyIrpStackUpward(
        _IOV_REQUEST_PACKET *IovPacket,
        _IO_STACK_LOCATION *IrpSp,
        _IOV_STACK_LOCATION *RequestHeadLocationData,
        _IOV_STACK_LOCATION *StackLocationData,
        UINT64 IsNewlyCompleted,
        UINT64 RequestFinalized){
  _IRP *v10; 
  __int64 v11; 
  VOID *CallerAddress; 
  int v13; 
  int v14; 
  int v15; 
  _VF_ERROR_ID v16; 
  VOID *LowerDeviceObjectWithTag; 
  _DEVICE_OBJECT *DeviceObject; 
  _DEVICE_OBJECT *v19; 
  _DEVICE_OBJECT *v20; 
  int IsPdo; 
  const VOID *v22; 
  UINT64 v23; 

  if( !(unsigned int)IovUtilIsWdmStack(IrpSp->DeviceObject) )
    return;
  v10 = *(_IRP **)IovPacket;
  v11 = *((_QWORD *)IovPacket + 30);
  CallerAddress = (VOID *)*((_QWORD *)StackLocationData + 5);
  v13 = *(_DWORD *)(*(_QWORD *)IovPacket + 48i64);
  if( !(_DWORD)IsNewlyCompleted )
    goto LABEL_16;
  v14 = IovPacket[14] & 0x20;
  v15 = StackLocationData[1] & 0x10000000;
  if( StackLocationData[1] < 0 )
    goto LABEL_14;
  if( v15 )
  {
LABEL_15:
    LODWORD(v23) = 0;
    ViPnpVerifyMinorWasProcessedProperly(
      v10,
      IrpSp,
      VF_DEVOBJ_PDO,
      (VI_PNP_HOW_PROCESSED)((v13 != -1073741637) + 1),
      CallerAddress,
      v23);
    goto LABEL_16;
  }
  if( IrpSp->MinorFunction == 8 )
    goto LABEL_14;
  if( v14 )
  {
    v16 = 557;
    goto LABEL_24;
  }
  if( (int)(v13 + 0x80000000) >= 0 && v13 != -1073741637 )
    goto LABEL_14;
  if( VfIoSwitchedOffNoReboot )
    goto LABEL_16;
  if( v13 >= 0 )
  {
    v16 = 558;
LABEL_24:
    ViErrorReport1(v16, *((VOID **)StackLocationData + 5), v10);
    goto LABEL_16;
  }
  if( v13 == -1073741637 )
  {
    ViErrorReport1(559, *((VOID **)StackLocationData + 5), v10);
LABEL_14:
    if( v15 )
      goto LABEL_15;
LABEL_16:
    if( v13 == -1073741637
      && (RequestHeadLocationData[1] & 0x2000000) == 0
      && RequestHeadLocationData[24] != -1073741637 )
    {
      ViErrorReport1(534, CallerAddress, v10);
      RequestHeadLocationData[1] |= 0x2000000u;
    }
  }
  if( IrpSp->MinorFunction == 23 )
  {
    LowerDeviceObjectWithTag = IovUtilGetLowerDeviceObjectWithTag((INT64)IrpSp->DeviceObject);
    if( LowerDeviceObjectWithTag )
    {
      ObfDereferenceObjectWithTag(LowerDeviceObjectWithTag, 0x49667256ui64);
    }
    else
    {
      DeviceObject = IrpSp->DeviceObject;
      LODWORD(v19) = IovUtilGetBottomDeviceObjectWithTag(DeviceObject);
      v20 = v19;
      if( v19 == DeviceObject )
        IsPdo = PpvUtilIsPdo(v19);
      else
        IsPdo = 0;
      ObfDereferenceObjectWithTag(v20, 0x49667256ui64);
      if( !IsPdo )
        ViErrorReport10(577, CallerAddress, *(const VOID **)(v11 + 64), IrpSp->DeviceObject);
    }
    if( (unsigned int)IovUtilIsDeviceObjectMarked(IrpSp->DeviceObject, 0) )
      ViErrorReport10(578, CallerAddress, *(const VOID **)(v11 + 64), v22);
  }
}

Referenced by:

No references.