структура 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
Драйвер miniport должен игнорировать этот элемент.
DataTransferLength
Драйвер miniport должен игнорировать этот элемент.
TimeOutValue
Интервал выполнения запроса (в секундах) до того, как драйвер Storport определит, что время ожидания запроса истекло.
DataBuffer
Драйвер miniport должен игнорировать этот элемент.
SenseInfoBuffer
Драйвер miniport должен игнорировать этот элемент.
NextSrb
Драйвер miniport должен игнорировать этот элемент.
OriginalRequest
Драйвер miniport должен игнорировать этот элемент.
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. Если для элемента Function задано значение SRB_FUNCTION_POWER, SRB представляет собой структуру типа SCSI_POWER_REQUEST_BLOCK.
Драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запросы драйверу мини-порта, чтобы уведомить его о событиях питания Windows, влияющих на запоминающие устройства, подключенные к адаптеру. В случае события включения питания этот запрос дает драйверу мини-порта возможность инициализировать себя. В случае события гибернации или завершения работы этот запрос дает драйверу мини-порта возможность выполнить запросы ввода-вывода и подготовиться к отключению питания. Драйвер мини-порта может использовать значение в элементе PowerActionSCSI_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 (включая Storport.h, Minitape.h, Srb.h) |