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


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, должен содержать структуру SRB_IO_CONTROL и структуру HYBRID_REQUEST_BLOCK . В зависимости от элемента функцииHYBRID_REQUEST_BLOCK можно предоставить дополнительные данные.

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

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

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

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

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

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

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

Полученное состояние запроса функции задается в элементе ReturnCodeSRB_IO_CONTROL. Ниже приведены коды состояния 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.
Reserved0
Зарезервировано.
Зарезервировано1
Зарезервировано.
LbaCount
Число LBA для понижения до нового уровня приоритета.

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

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.1.
Верхняя часть ntddscsi.h (включая Ntddscsi.h)

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

HYBRID_INFORMATION

IOCTL_SCSI_MINIPORT

SRB_IO_CONTROL

STORAGE_REQUEST_BLOCK