IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
A Data Set Management (DSM) notification is transferred to a miniport driver in a IOCTL_SCSI_MINIPORT_DSM control code request. The IOCTL_SCSI_MINIPORT_DSM request is a sub-IOCTL of IOCTL_SCSI_MINIPORT. This IOCTL generated by StorPort in response to a DSM action, then sent to the miniport as a STORAGE_REQUEST_BLOCK (SRB) with a function type of SRB_FUNCTION_IO_CONTROL. The input and output data is contained in the SRB data block.
The buffer specified in the DataBuffer member of the SRB must contain an SRB_IO_CONTROL structure and a DSM_NOTIFICATION_REQUEST_BLOCK structure.
DataTransferLength indicates the size, in bytes, of the buffer, which must be at least sizeof (SRB_IO_CONTROL) + sizeof(DSM_NOTIFICATION_REQUEST_BLOCK), with additional storage for the MP_DEVICE_DATA_SET_RANGE structures included.
An updated SRB_IO_CONTROL structure is returned to the data buffer in the SRB. The SrbStatus contains the result of the miniport's processing of the request.
The length of an SRB_IO_CONTROL structure.
The resulting status of the function request is set in the SrbStatus member of SRB_IO_CONTROL. The following are the DSM disk IOCTL status codes.
SRB Status | Description |
---|---|
SRB_STATUS_SUCCESS | The request completed successfully. |
SRB_STATUS_INVALID_REQUEST | The request contains an invalid buffer size |
DSM_NOTIFICATION_REQUEST_BLOCK
A DSM_NOTIFICATION_REQUEST_BLOCK structure immediately follows the SRB_IO_CONTROL structure in the data buffer of the SRB. DSM_NOTIFICATION_REQUEST_BLOCK is defined in ntddscsi.h as the following.
typedef struct _DSM_NOTIFICATION_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG NotifyFLags;
ULONG DataSetProfile;
ULONG Reserved[3];
ULONG DataSetRangesCount;
MP_DEVICE_DATA_SET_RANGE DataSetRanges[ANYSIZE_ARRAY];
} DSM_NOTIFICATION_REQUEST_BLOCK, *PDSM_NOTIFICATION_REQUEST_BLOCK;
MP_DEVICE_DATA_SET_RANGE
The LBA ranges are included in the in DataSetRanges member of DSM_NOTIFICATION_REQUEST_BLOCK as an array of MP_DEVICE_DATA_SET_RANGE structures. MP_DEVICE_DATA_SET_RANGE is defined in ntddscsi.h as the following.
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
The DSM_NOTIFICATION_REQUEST_BLOCK structure is located after the SRB_IO_CONTROL structure in the DataBuffer of the SRB.
The SRB_IO_CONTROL structure for this IOCTL contains IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION in its Signature member and IOCTL_SCSI_MINIPORT_DSM in the ControlCode member.
Requirement | Value |
---|---|
Minimum supported client | Windows 8.1. |
Header | storport.h (include Ntddscsi.h, Storport.h) |