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.
Major code
Input buffer
The buffer specified in the DataBuffer member of the SRB must contain an SRB_IO_CONTROL structure and a DSM_NOTIFICATION_REQUEST_BLOCK structure.
Input buffer length
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.
Output buffer
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.
Output buffer length
The length of an SRB_IO_CONTROL structure.
Status block
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 |
Remarks
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.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows 8.1. |
Header | storport.h (include Ntddscsi.h, Storport.h) |