// mcd.h
typedef struct _MCD_INIT_DATA {
ULONG InitDataSize;
CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize;
CHANGER_INITIALIZE ChangerInitialize;
CHANGER_ERROR_ROUTINE ChangerError;
CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics;
CHANGER_COMMAND_ROUTINE ChangerGetParameters;
CHANGER_COMMAND_ROUTINE ChangerGetStatus;
CHANGER_COMMAND_ROUTINE ChangerGetProductData;
CHANGER_COMMAND_ROUTINE ChangerSetAccess;
CHANGER_COMMAND_ROUTINE ChangerGetElementStatus;
CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus;
CHANGER_COMMAND_ROUTINE ChangerSetPosition;
CHANGER_COMMAND_ROUTINE ChangerExchangeMedium;
CHANGER_COMMAND_ROUTINE ChangerMoveMedium;
CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit;
CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags;
} MCD_INIT_DATA, *PMCD_INIT_DATA;
View the official Windows Driver Kit DDI referenceNo description available.
The changer miniclass driver fills the MCD_INIT_DATA structure with pointers to its internal command processing routines and passes them to the changer class driver.
InitDataSizeSize of this structure in bytes.
ChangerAdditionalExtensionSizePointer to changer miniclass driver routine that returns the number of bytes the changer miniclass driver requires to store device-specific information in the device extension. This routine has the following prototype:
typedef
ULONG
(*CHANGER_EXTENSION_SIZE)(
IN VOID
);
ChangerInitializePointer to changer miniclass driver routine that does miniclass driver-specific initialization and readies the changer to receive other requests. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_INITIALIZE)(
IN PDEVICE_OBJECT DeviceObject
);
ChangerErrorPointer to changer miniclass driver routine that does device-specific error processing. This routine has the following prototype:
typedef
VOID
(*CHANGER_ERROR_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PSCSI_REQUEST_BLOCK Srb,
IN NTSTATUS *Status,
IN BOOLEAN *Retry
);
ChangerPerformDiagnosticsPointer to changer miniclass driver routine that performs diagnostic tests on the device. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_PERFORM_DIAGNOSTICS)(
IN PDEVICE_OBJECT DeviceObject,
OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR changerDeviceError
);
ChangerGetParametersPointer to changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_GET_PARAMETERS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerGetStatusPointer to changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_GET_STATUS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerGetProductDataPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_GET_PRODUCT_DATA. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerSetAccessPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_SET_ACCESS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerGetElementStatusPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_GET_ELEMENT_STATUS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerInitializeElementStatusPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerSetPositionPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_SET_POSITION. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerExchangeMediumPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_EXCHANGE_MEDIUM. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerMoveMediumPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_MOVE_MEDIUM. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerReinitializeUnitPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code IOCTL_CHANGER_REINITIALIZE_TRANSPORT. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
ChangerQueryVolumeTagsPointer to a changer miniclass driver routine that handles the device-specific aspects of a device-control IRP with the IOCTL code of IOCTL_CHANGER_QUERY_VOLUME_TAGS. This routine has the following prototype:
typedef
NTSTATUS
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
This structure is used by the changer driver in Windows XP and later operating systems only.
ChangerAdditionalExtensionSize
ChangerInitializeElementStatus
IOCTL_CHANGER_GET_ELEMENT_STATUS
IOCTL_CHANGER_GET_PRODUCT_DATA
IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS