The IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO I/O control code controls the enumeration of virtual subunits. It is available to user mode as well as kernel-mode components through the IRP_MJ_DEVICE_CONTROL dispatch. For driver-to-driver communication, it is a METHOD_BUFFERED IOCTL, so set the IRP fields accordingly (IrpStack->Parameters.DeviceIoControl.InputBufferLength and Irp->AssociatedIrp.SystemBuffer).
IOCTL_AVC_UPDATE_VIRTUAL_SUBUNIT_INFO is used to add or remove subunit IDs of a single type. Successive calls with a different ID part of the subunit address cause the number of enumerated IDs to change. Note that avc.sys adds or removes the highest IDs only. This is a limitation of the AV/C specification, not the driver implementation.
This IOCTL uses the AVC_SUBUNIT_ADDR_SPEC structure.
If successful, the AV/C protocol driver sets Irp->IoStatus.Status to STATUS_SUCCESS.
Possible other return values include:
|STATUS_INSUFFICIENT_RESOURCES||No buffer was passed, or insufficient resources available to perform a registry query.|
|STATUS_INVALID_BUFFER_SIZE||The buffer passed in Irp->AssociatedIrp.SystemBuffer must be at least as large as sizeof(AVC_SUBUNIT_ADDR_SPEC) which includes a single-byte subunit address, but limited to a 32 byte subunit address.|
|STATUS_INVALID_PARAMETER||The subunit address was specified incorrectly.|
|STATUS_ACCESS_DENIED||The current user has insufficient registry access privileges to make the update persistent.|
Must be called at IRQL = PASSIVE_LEVEL.
|Header||avc.h (include Avc.h)|