структура 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. Драйвер мини-порта не должен использовать этот член, если в структуре HW_INITIALIZATION_DATA для SrbExtensionSize задано значение 0. Драйвер Storport не инициализирует память, на которую указывает этот элемент. HBA может напрямую получать доступ к данным, которые драйвер мини-порта записывает в расширение SRB. Драйвер мини-порта может получить физический адрес расширения SRB, вызвав подпрограмму StorPortGetPhysicalAddress .
PowerAction
Значение перечислителя типа STOR_POWER_ACTION , указывающее тип завершения работы системы, которое ожидается. Это значение имеет смысл, только если устройство переходит в состояние питания D1, D2 или D3, как указано элементом DevicePowerState .
Reserved
Зарезервировано для системного использования.
Reserved5[16]
Зарезервировано для системного использования.
Комментарии
Драйвер Storport вызывает HwStorBuildIo , чтобы передать SРБ драйверу мини-порта. 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) |
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по