IOCTL_SCSI_MINIPORT_DSM IOCTL (scsi.h)
Уведомление об управлении набором данных (DSM) передается в драйвер мини-порта в запросе кода управления IOCTL_SCSI_MINIPORT_DSM . Запрос IOCTL_SCSI_MINIPORT_DSM является вложенным IOCTL IOCTL_SCSI_MINIPORT. Этот IOCTL, созданный StorPort в ответ на действие DSM, затем отправляется в мини-порт в виде STORAGE_REQUEST_BLOCK (SRB) с типом функции SRB_FUNCTION_IO_CONTROL. Входные и выходные данные содержатся в блоке данных SRB.
Основной код
Входной буфер
Буфер, указанный в элементе DataBuffer SRB, должен содержать структуру SRB_IO_CONTROL и структуру DSM_NOTIFICATION_REQUEST_BLOCK .
Длина входного буфера
DataTransferLength указывает размер буфера в байтах, который должен быть не менее sizeof (SRB_IO_CONTROL) + sizeof(DSM_NOTIFICATION_REQUEST_BLOCK) с дополнительным хранилищем для MP_DEVICE_DATA_SET_RANGE включенных структур.
Выходной буфер
Обновленная структура SRB_IO_CONTROL возвращается в буфер данных в SRB. SrbStatus содержит результат обработки запроса минипортом.
Длина выходного буфера
Длина структуры SRB_IO_CONTROL .
Блок состояния
Полученное состояние запроса функции задается в элементе SrbStatusSRB_IO_CONTROL. Ниже приведены коды состояния IOCTL диска DSM.
Состояние SRB | Описание |
---|---|
SRB_STATUS_SUCCESS | Запрос успешно выполнен. |
SRB_STATUS_INVALID_REQUEST | Запрос содержит недопустимый размер буфера. |
Комментарии
DSM_NOTIFICATION_REQUEST_BLOCK
Структура DSM_NOTIFICATION_REQUEST_BLOCK сразу же следует за структурой SRB_IO_CONTROL в буфере данных SRB. DSM_NOTIFICATION_REQUEST_BLOCK определяется в ntddscsi.h следующим образом.
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
Диапазоны LBA включаются в элемент DataSetRangesDSM_NOTIFICATION_REQUEST_BLOCK как массив MP_DEVICE_DATA_SET_RANGE структур. MP_DEVICE_DATA_SET_RANGE определяется в ntddscsi.h следующим образом.
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
Структура DSM_NOTIFICATION_REQUEST_BLOCK находится после структуры SRB_IO_CONTROL в DataBuffer SRB.
Структура SRB_IO_CONTROL для этого IOCTL содержит IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION в элементе Signature и IOCTL_SCSI_MINIPORT_DSM в элементе ControlCode .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8.1. |
Верхняя часть | scsi.h (включая Ntddscsi.h, Storport.h) |