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


IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)

Код управления IOCTL_SCSI_MINIPORT_HYBRID отправляет запрос гибридного управления дисками на мини-порт HBA. Запрос IOCTL_SCSI_MINIPORT_HYBRID — это вложенный IOCTL IOCTL_SCSI_MINIPORT. Этот IOCTL получает и переформатируется StorPort, а затем отправляется в мини-порт как STORAGE_REQUEST_BLOCK (SRB) с типом функции SRB_FUNCTION_IO_CONTROL. Входные и выходные данные содержатся в блоке данных SRB.

IOCTL_SCSI_MINIPORT_HYBRID предназначено для использования сторонними приложениями или фильтрами дисков, которые управляют функциями безопасности, такими как шифрование или поведение путем записи.

предупреждение использование IOCTL_SCSI_MINIPORT_HYBRID для изменения поведения гибридного кэша будет конфликтовать с операцией системных компонентов Windows и не поддерживается.
 
примечание модели драйверов портов SCSI и мини-порта SCSI могут быть изменены или недоступны в будущем. Вместо этого мы рекомендуем использовать драйвера Storport и минипорта Storport модели драйверов.
 

Основной код

IRP_MJ_DEVICE_CONTROL

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

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

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

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

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

Обновленная SRB_IO_CONTROL структура возвращается в буфер данных в SRB.

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

Элементы DataBufferOffset и DataBufferLength члены HYBRID_REQUEST_BLOCK не являются ненулевой, если данные возвращаются для указанной функции . Элемент DataTransferLength SRB обновляется при возврате данных для функции запроса.

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

Результирующее состояние запроса функции задается в элементе SRB_IO_CONTROLReturnCode . Ниже приведены коды состояния IOCTL гибридного диска.

Код возврата Описание
HYBRID_STATUS_SUCCESS Функция успешно завершена.
HYBRID_STATUS_ILLEGAL_REQUEST Запрос содержит недопустимый код функции.
HYBRID_STATUS_INVALID_PARAMETER Входные или выходные параметры отформатированы неправильно.
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL Длина данных, указанная в DataBufferLength, слишком мала, чтобы содержать выходные данные запроса.

Замечания

Структура HYBRID_REQUEST_BLOCK сразу же следует SRB_IO_CONTROL структуре в буфере данных. HYBRID_REQUEST_BLOCK определяется в ntddscsi.h следующим образом.

typedef struct _HYBRID_REQUEST_BLOCK {
    ULONG   Version;
    ULONG   Size;
    ULONG   Function;
    ULONG   Flags;
    ULONG   DataBufferOffset;
    ULONG   DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;

Требования к параметру зависят от кода функции запроса гибридного диска. В следующей таблице перечислены параметры, необходимые для каждой функции.

Функция Входные параметры Выходные параметры
HYBRID_FUNCTION_GET_INFO

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_INFORMATION

HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK

SRB_IO_CONTROL

HYBRID_FUNCTION_SET_DIRTY_THRESHOLD

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DIRTY_THRESHOLDS

SRB_IO_CONTROL

HYBRID_FUNCTION_DEMOTE_BY_SIZE

SRB_IO_CONTROL +

HYBRID_REQUEST_BLOCK +

HYBRID_DEMOTE_BY_SIZE

SRB_IO_CONTROL

 

Структура HYBRID_REQUEST_BLOCK расположена после SRB_IO_CONTROL структуры в DataBuffer SRB. Все данные функций, включенные в запрос, находятся в смещение в DataBufferOffset после начала структуры SRB_IO_CONTROL.

В следующем примере показано получение данных функции для запроса HYBRID_FUNCTION_SET_DIRTY_THRESHOLD.

    PSRB_IO_CONTROL srbIoCtl = (PSRB_IO_CONTROL)srb->DataBuffer;
    PHYBRID_REQUEST_BLOCK hybridRequest = (PHYBRID_REQUEST_BLOCK)(srbIoCtl + 1);
    PHYBRID_DIRTY_THRESHOLDS hybridDirtyThresholds = NULL;

    if (hybridRequest->DataBufferOffset >= sizeof(SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK))
    {
        if (hybridRequest->DataBufferLength >= sizeof(HYBRID_FUNCTION_SET_DIRTY_THRESHOLD))
        {
            hybridDirtyThresholds = (PHYBRID_DIRTY_THRESHOLDS)((PUCHAR)srbIoCtl + hybridRequest->DataBufferOffset);
        }
        else
        {
            srbIoCtl->ReturnCode = HYBRID_STATUS_INVALID_PARAMETER;
        }
    }

HYBRID_DIRTY_THRESHOLDS

Функция HYBRID_FUNCTION_SET_DIRTY_THRESHOLD использует структуру HYBRID_DIRTY_THRESHOLDS для входных параметров. HYBRID_DIRTY_THRESHOLDS определяется в ntddscsi.h следующим образом.

typedef struct _HYBRID_DIRTY_THRESHOLDS {
    ULONG   Version;
    ULONG   Size;
    ULONG   DirtyLowThreshold;
    ULONG   DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
версия
Версия структуры. Установите значение HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
размер
Размер структуры. Задайте значение sizeof(HYBRID_DIRTY_THRESHOLDS).
DirtyLowThreshold
Дробное значение низкого порога для гибридного кэша дисков для синхронизации с диском.
DirtyHighThreshold
Доля высокого порогового значения для гибридного кэша дисков для синхронизации с диском.

Значения DirtyLowThreshold и DirtyHighThreshold выражаются как меньшая часть соотношения между пороговым значением и базой дроби. База дробей определяется элементом FractionBase структуры HYBRID_INFORMATION.

HYBRID_DEMOTE_BY_SIZE

Функция HYBRID_FUNCTION_DEMOTE_BY_SIZE использует структуру HYBRID_DEMOTE_BY_SIZE для входных параметров. HYBRID_DEMOTE_BY_SIZE определяется в ntddscsi.h следующим образом.

typedef struct _HYBRID_DEMOTE_BY_SIZE {
    ULONG       Version;
    ULONG       Size;
    UCHAR       SourcePriority;
    UCHAR       TargetPriority;
    USHORT      Reserved0;
    ULONG       Reserved1;
    ULONGLONG   LbaCount;
} HYBRID_DEMOTE_BY_SIZE, *PHYBRID_DEMOTE_BY_SIZE;
версия
Версия структуры. Установите значение HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
размер
Размер структуры. Задайте значение sizeof(HYBRID_DEMOTE_BY_SIZE).
SourcePriority
Исходный уровень приоритета данных для понижения. Это значение должно быть <= значение в элементе MaximumHybridPriorityLevel элемента структуры HYBRID_INFORMATION, возвращаемой из запроса функции HYBRID_FUNCTION_GET_INFO. Это значение должно быть > 0.
TargetPriority
Целевой уровень приоритета данных для понижения с уровня SourcePriority. Это значение должно быть < SourcePriority.
Зарезервировано
Скрытный.
Зарезервировано1
Скрытный.
LbaCount
Количество LBAs для понижения до нового уровня приоритета.

Структура SRB_IO_CONTROL для этого IOCTL содержит IOCTL_MINIPORT_SIGNATURE_HYBRDISK в элементе подписи и IOCTL_SCSI_MINIPORT_HYBRID в элементе ControlCode.

Требования

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

См. также

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK