ViPnpVerifyMinorWasProcessedProperly

VOID __stdcall ViPnpVerifyMinorWasProcessedProperly(
        _IRP *Irp,
        _IO_STACK_LOCATION *IrpSp,
        VF_DEVOBJ_TYPE DevObjType,
        VI_PNP_HOW_PROCESSED HowProcessed,
        VOID *CallerAddress,
        UINT64 ForwardingDown){
  unsigned __int8 MinorFunction; 
  _VF_ERROR_ID v9; 
  _DWORD *Information; 
  __int64 i; 
  _DEVICE_OBJECT *v12; 
  _DEVICE_OBJECT *v13; 
  _DEVICE_OBJECT *v14; 
  _VF_ERROR_ID v15; 

  MinorFunction = IrpSp->MinorFunction;
  if( MinorFunction > 0xCu )
  {
    if( MinorFunction < 0xFu )
      return;
    if( MinorFunction > 0x12u )
    {
      if( MinorFunction == 19 )
      {
        if( LODWORD(IrpSp->Parameters.SecurityContext) > 3 )
          return;
      }
      else if( MinorFunction != 21 )
      {
        return;
      }
    }
    goto LABEL_41;
  }
  if( MinorFunction >= 0xAu )
  {
LABEL_41:
    if( DevObjType == VF_DEVOBJ_PDO || HowProcessed != ViPnpDefinitelyProcessed )
      return;
    v15 = 536;
LABEL_44:
    VfErrorReport1(v15, CallerAddress, Irp);
    return;
  }
  if( MinorFunction <= 1u )
    goto LABEL_32;
  if( MinorFunction == 2 )
  {
    if( (_DWORD)ForwardingDown || HowProcessed == ViPnpDefinitelyProcessed )
      return;
    v15 = 774;
    goto LABEL_44;
  }
  if( MinorFunction <= 6u )
  {
LABEL_32:
    if( (_DWORD)ForwardingDown || HowProcessed )
      return;
    v15 = 535;
    goto LABEL_44;
  }
  if( MinorFunction != 7 )
    return;
  if( LODWORD(IrpSp->Parameters.SecurityContext) != 4 )
    goto LABEL_17;
  if( DevObjType )
  {
    if( HowProcessed == ViPnpDefinitelyProcessed )
    {
      v9 = 536;
LABEL_16:
      VfErrorReport1(v9, CallerAddress, Irp);
    }
  }
  else
  {
    if( HowProcessed == ViPnpNotProcessed )
    {
      v9 = 554;
      goto LABEL_16;
    }
    if( Irp->IoStatus.Status >= 0 && !Irp->IoStatus.Information )
    {
      v9 = 555;
      goto LABEL_16;
    }
  }
LABEL_17:
  if( !VfIoDisabled && Irp->IoStatus.Status >= VfIoDisabled )
  {
    Information = (_DWORD *)Irp->IoStatus.Information;
    if( Information )
    {
      if( LODWORD(IrpSp->Parameters.SecurityContext) <= 4 )
      {
        if( MmIsNonPagedSystemAddressValid((VOID *)Irp->IoStatus.Information) )
        {
          for( i = 0i64; (unsigned int)i < *Information; i = (unsigned int)(i + 1) )
          {
            v12 = *(_DEVICE_OBJECT **)&Information[2 * i + 2];
            if( !(unsigned int)IovUtilIsDeviceObjectMarked(v12, 5) )
            {
              LODWORD(v13) = IovUtilGetBottomDeviceObjectWithTag(v12);
              v14 = v13;
              if( v13 != v12 )
                ViErrorReport10(584, CallerAddress, Irp, v12);
              IovUtilMarkDeviceObject(v12, 5);
              ObfDereferenceObjectWithTag(v14, 0x49667256ui64);
            }
          }
        }
      }
    }
  }
}

Referenced by:

VfPnpVerifyIrpStackDownward
VfPnpVerifyIrpStackUpward