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