Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Уведомление об управлении наборами данных (DSM) передается мини-драйверу в запросе кода IOCTL_SCSI_MINIPORT_DSM. Запрос IOCTL_SCSI_MINIPORT_DSM является вложенным IOCTL_SCSI_MINIPORTIOCTL. Этот IOCTL, созданный StorPort в ответ на действие DSM, затем отправляется в минипорт как STORAGE_REQUEST_BLOCK (SRB) с типом функции SRB_FUNCTION_IO_CONTROL. Входные и выходные данные содержатся в блоке данных SRB.
Основной код
Входной буфер
Буфер, указанный в элементе 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) |