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, должен содержать структуру 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 |
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.
- 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) |