Поделиться через


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.

Примечание Модели драйверов портов SCSI и драйверов мини-портов SCSI могут быть изменены или недоступны в будущем. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
 

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Буфер, указанный в элементе 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)

См. также раздел

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK