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


IOCTL_SCSI_MINIPORT_DSM IOCTL (scsi.h)

Уведомление об управлении наборами данных (DSM) передается мини-драйверу в запросе кода IOCTL_SCSI_MINIPORT_DSM. Запрос IOCTL_SCSI_MINIPORT_DSM является вложенным IOCTL_SCSI_MINIPORTIOCTL. Этот IOCTL, созданный StorPort в ответ на действие DSM, затем отправляется в минипорт как STORAGE_REQUEST_BLOCK (SRB) с типом функции SRB_FUNCTION_IO_CONTROL. Входные и выходные данные содержатся в блоке данных SRB.

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

Основной код

IRP_MJ_DEVICE_CONTROL

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

Буфер, указанный в элементе DataBuffer DataBuffer, должен содержать SRB_IO_CONTROL структуру и структуру DSM_NOTIFICATION_REQUEST_BLOCK.

Длина входного буфера

DataTransferLength указывает размер буфера в байтах, который должен быть по крайней мере размер (SRB_IO_CONTROL) + размер(DSM_NOTIFICATION_REQUEST_BLOCK) с дополнительным хранилищем для включенных структур MP_DEVICE_DATA_SET_RANGE.

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

Обновленная SRB_IO_CONTROL структура возвращается в буфер данных в SRB. SrbStatus содержит результат обработки запроса минипорта.

Длина выходного буфера

Длина SRB_IO_CONTROL структуры.

Блок состояния

Результирующее состояние запроса функции задается в элементе SrbStatus элемента SRB_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 включены в DataSetRanges члена DSM_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 в элементе подписи и IOCTL_SCSI_MINIPORT_DSM в элемент е ControlCode.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.1.
заголовка scsi.h (include Ntddscsi.h, Storport.h)

См. также

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK