структура SCSI_POWER_REQUEST_BLOCK (srb.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

Зарезервировано для системного использования.

Примечания

Драйвер Storport вызывает HwStorBuildIo для передачи SRB в драйвер мини-порта. HwStorBuildIo должен проверить член функции SRB, чтобы определить тип SRB. Если для элемента функции задано значение SRB_FUNCTION_POWER, SRB является структурой типа SCSI_POWER_REQUEST_BLOCK.

Драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запросы к драйверу мини-порта, чтобы уведомить драйвер минипорта о событиях питания Windows, которые влияют на устройства хранения, подключенные к адаптеру. В случае события включения этот запрос дает драйверу мини-порта возможность инициализировать себя. В случае события гибернации или завершения работы этот запрос предоставляет драйверу мини-порта возможность завершить запросы ввода-вывода и подготовиться к отключению питания. Минипорт-драйвер может использовать значение в элементе PowerActionSCSI_POWER_REQUEST_BLOCK для определения необходимых действий. После завершения запроса SCSI_POWER_REQUEST_BLOCK драйверу Miniport драйвер Storport вызывает HwScsiAdapterControl с запросом управления ScsiStopAdapter для отключения адаптера. Драйвер мини-порта повторно инициализируется при обработке запроса SRB_FUNCTION_POWER или может ожидать и повторно инициализироваться, когда драйвер Storport вызывает HwStorAdapterControl для выполнения запроса элемента управления ScsiRestartAdapter .

При переходе из состояния питания D0 в более низкое состояние (D1, D2 или D3) драйвер Storport отправляет SCSI_POWER_REQUEST_BLOCK запрос к драйверу мини-порта, прежде чем базовый драйвер шины переключится на адаптер.

Следующие условия должны существовать до того, как драйвер Storport отправит SCSI_POWER_REQUEST_BLOCK запрос к драйверу мини-порта:

  • Адаптер не останавливается.
  • Очередь ввода-вывода для адаптера приостановлена.
  • Оборудование адаптера подключено к сети.
  • Минипорт может получить доступ к аппаратным ресурсам адаптера.

Требования

   
Заголовок srb.h (include Storport.h, Minitape.h, Srb.h)

См. также

HwStorBuildIo

SCSI_REQUEST_BLOCK

StorPortNotification