структура SCSI_POWER_REQUEST_BLOCK (storport.h)
Структура SCSI_POWER_REQUEST_BLOCK — это специальная версия SCSI_REQUEST_BLOCK, которая используется для запросов управления питанием.
Заметка
В будущем драйвер портов SCSI и модели драйверов мини-порта SCSI могут быть изменены или недоступны. Вместо этого мы рекомендуем использовать драйвера Storport и минипорта Storport модели драйверов.
Синтаксис
typedef struct _SCSI_POWER_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
UCHAR SrbPowerFlags;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
STOR_DEVICE_POWER_STATE DevicePowerState;
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID SenseInfoBuffer;
struct _SCSI_REQUEST_BLOCK *NextSrb;
PVOID OriginalRequest;
PVOID SrbExtension;
STOR_POWER_ACTION PowerAction;
ULONG Reserved;
UCHAR Reserved5[16];
} SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
Члены
Length
Размер структуры SCSI_POWER_REQUEST_BLOCK в байтах.
Function
Выполняемая операция. Для структуры SCSI_POWER_REQUEST_BLOCK этот элемент всегда имеет значение SRB_FUNCTION_POWER.
SrbStatus
Состояние завершенного запроса. Этот элемент должен быть задан минипорт-драйвером перед уведомлением драйвера Storport о завершении запроса. Минипорт-драйвер уведомляет драйвер Storport о том, что запрос выполнен путем вызова функции StorPortNotification с типом уведомления RequestComplete.
Список возможных значений этого элемента см. в SCSI_REQUEST_BLOCK в документации по WDK.
SrbPowerFlags
Флаги управления питанием. В настоящее время единственным флагом является SRB_POWER_FLAGS_ADAPTER_REQUEST, что указывает, что запрос на управление питанием предназначен для адаптера. Если этот флаг задан, драйвер минипорта должен игнорировать значения в PathId, TargetIdи Lun.
PathId
Идентификатор порта SCSI или шины для запроса. Это значение равно нулю.
TargetId
Целевой контроллер или идентификатор устройства на шине.
Lun
Логический номер единицы (LUN) устройства.
DevicePowerState
Значение перечислителя типа STOR_DEVICE_POWER_STATE, указывающее запрошенное состояние питания устройства.
SrbFlags
Минипорт-драйвер должен игнорировать этот элемент.
DataTransferLength
Минипорт-драйвер должен игнорировать этот элемент.
TimeOutValue
Интервал в секундах, который запрос может выполняться до того, как драйвер Storport определяет время ожидания запроса.
DataBuffer
Минипорт-драйвер должен игнорировать этот элемент.
SenseInfoBuffer
Минипорт-драйвер должен игнорировать этот элемент.
NextSrb
Минипорт-драйвер должен игнорировать этот элемент.
OriginalRequest
Минипорт-драйвер должен игнорировать этот элемент.
SrbExtension
Указатель на расширение SRB. Драйвер минипорта не должен использовать этот элемент, если он задается SrbExtensionSize равным нулю в структуре HW_INITIALIZATION_DATA. Драйвер Storport не инициализирует память, на которую указывает этот член. HBA может напрямую получить доступ к данным, которые драйвер минипорта записывает в расширение SRB. Минипорт-драйвер может получить физический адрес расширения SRB, вызвав подпрограмму StorPortGetPhysicalAddress.
PowerAction
Значение перечислителя типа STOR_POWER_ACTION, указывающее тип завершения работы системы, который будет происходить. Это значение имеет смысл, только если устройство перемещается в состояние питания D1, D2 или D3, как указано элементом DevicePowerState.
Reserved
Зарезервировано для использования системы.
Reserved5[16]
Зарезервировано для использования системы.
Замечания
Драйвер Storport вызывает HwStorBuildIo для передачи SRBS мини-порту. HwStorBuildIo должен проверить функцию элемента SRB, чтобы определить тип SRB. Если для элемента функции задано значение SRB_FUNCTION_POWER, SRB — это структура типа SCSI_POWER_REQUEST_BLOCK.
Драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запросы к драйверу минипорта, чтобы уведомить минипорт-драйвер событий Windows Power, влияющих на устройства хранения, подключенные к адаптеру. В случае события питания этот запрос дает минипорт-драйверу возможность инициализировать себя. В случае события гибернации или завершения работы этот запрос дает драйверу мини-порта возможность завершить запросы ввода-вывода и подготовиться к отключению питания. Минипорт-драйвер может использовать значение в элементе PowerAction элемента SCSI_POWER_REQUEST_BLOCK для определения необходимых действий. После завершения запроса SCSI_POWER_REQUEST_BLOCK драйвер Storport вызывает HwScsiAdapterControl с запросом управления ScsiStopAdapter для отключения адаптера. Драйвер минипорта повторно инициализируется при обработке запроса SRB_FUNCTION_POWER или может ожидать и повторно инициализировать, когда драйвер Storport вызывает HwStorAdapterControl для выполнения запроса ScsiRestartAdapter элемента управления.
При переходе из состояния питания D0 в более низкое состояние (D1, D2 или D3) драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запрос к минипорту, прежде чем базовый водитель шины переключится на адаптер.
Следующие условия должны существовать до того, как драйвер Storport отправит запрос SCSI_POWER_REQUEST_BLOCK драйверу минипорта:
- Адаптер не остановлен.
- Очередь ввода-вывода для адаптера приостановлена.
- Оборудование адаптера работает с питанием.
- Минипорт может получить доступ к аппаратным ресурсам адаптера.
Требования
Требование | Ценность |
---|---|
заголовка | storport.h (include Storport.h, Minitape.h, Srb.h) |