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 предназначено для использования сторонними приложениями или фильтрами дисков, которые управляют функциями безопасности, такими как шифрование или поведение путем записи.
Основной код
Входной буфер
Буфер, указанный в элементе 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 |
HYBRID_REQUEST_BLOCK |
HYBRID_REQUEST_BLOCK + |
HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD |
HYBRID_REQUEST_BLOCK + HYBRID_DIRTY_THRESHOLDS |
|
HYBRID_FUNCTION_DEMOTE_BY_SIZE |
HYBRID_REQUEST_BLOCK + HYBRID_DEMOTE_BY_SIZE |
Структура 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) |