Поделиться через


функция обратного вызова PSCSIWMI_QUERY_DATABLOCK (scsiwmi.h)

Подпрограмма HwScsiWmiQueryDataBlock драйвера мини-порта вызывается для получения одного экземпляра или всех экземпляров блока данных. Эта подпрограмма является обязательной.

Примечание В будущем модели драйвера портов SCSI и драйвера для минипорта SCSI могут быть изменены или недоступны. Вместо этого рекомендуется использовать модели драйверов Storport и драйверов для мини-портов Storport .
 

Синтаксис

PSCSIWMI_QUERY_DATABLOCK PscsiwmiQueryDatablock;

BOOLEAN PscsiwmiQueryDatablock(
  [in]      PVOID Context,
  [in]      PSCSIWMI_REQUEST_CONTEXT DispatchContext,
  [in]      ULONG GuidIndex,
  [in]      ULONG InstanceIndex,
  [in]      ULONG InstanceCount,
  [in, out] PULONG InstanceLengthArray,
  [in]      ULONG BufferAvail,
  [out]     PUCHAR Buffer
)
{...}

Параметры

[in] Context

Указывает на определяемое драйвером мини-порта значение контекста, переданное в ScsiPortWmiDispatchFunction.

[in] DispatchContext

Указывает на структуру SCSIWMI_REQUEST_CONTEXT, переданную драйвером мини-порта в ScsiPortWmiDispatchFunction.

[in] GuidIndex

Указывает блок данных по индексу в списке GUID в структуре SCSI_WMILIB_CONTEXT, переданной драйвером мини-порта в ScsiPortWmiDispatchFunction.

[in] InstanceIndex

Если HwScsiWmiQueryDataBlock вызывается в ответ на запрос IRP_MN_QUERY_SINGLE_INSTANCE, InstanceIndex указывает экземпляр для запроса. Если HwScsiWmiQueryDataBlock вызывается в ответ на запрос IRP_MN_QUERY_ALL_DATA, InstanceIndex равен нулю.

[in] InstanceCount

Если HwScsiWmiQueryDataBlock вызывается в ответ на запрос IRP_MN_QUERY_SINGLE_INSTANCE, instanceCount имеет значение 1. Если HwScsiWmiQueryDataBlock вызывается в ответ на запрос IRP_MN_QUERY_ALL_DATA, InstanceCount — это количество возвращаемых экземпляров.

[in, out] InstanceLengthArray

Указывает на массив ULONG, указывающий длину каждого экземпляра возвращаемого блока данных. Этот массив содержит элементы InstanceCount . Это значение может иметь значение NULL , если в выходном буфере недостаточно места для выполнения запроса.

[in] BufferAvail

Указывает максимальное количество байтов, доступных для получения данных в буфере в буфере.

[out] Buffer

Указывает на буфер для получения данных экземпляра. Если буфер достаточно велик для получения всех данных, драйвер мини-порта записывает данные экземпляра в буфер, при этом каждый экземпляр выравнивается по 8-байтовой границе. Если буфер слишком мал для получения всех данных, драйвер мини-порта вызывает ScsiPortWmiPostProcess с состоянием SRB_STATUS_DATA_OVERRUN и задает bufferUsed размер выходного буфера, необходимый для выполнения запроса.

Возвращаемое значение

HwScsiWmiQueryDataBlock возвращает SRB_STATUS_PENDING, если запрос находится в ожидании, или ненулевое значение состояния SRB, если запрос был выполнен. Значение состояния SRB, возвращаемое этой подпрограммой, совпадает со значением, переданным в ScsiPortWmiPostProcess. Хотя тип данных возвращаемого значения — BOOLEAN, подпрограмма HwScsiWmiQueryDataBlock фактически возвращает значение состояния SRB.

Комментарии

Когда драйвер мини-порта получает SRB, в котором члену Функции задано значение SRB_FUNCTION_WMI, он вызывает ScsiPortWmiDispatchFunction с указателем на инициализированную структуру SCSI_WMILIB_CONTEXT, а MinorFunctionSrb-WmiSubFunction>. Драйвер порта SCSI вызывает подпрограмму HwScsiWmiQueryDataBlock драйвера мини-порта, если MinorFunction указывает запрос на получение одного экземпляра или всех экземпляров блока данных.

Драйвер мини-порта записывает данные экземпляра в буфер. Для запросов, которые не выполняются, драйвер мини-порта вызывает ScsiPortWmiPostProcess с соответствующим значением SrbStatus перед возвратом из HwScsiWmiQueryDataBlock. Если запрос выполняется, драйвер мини-порта вызывает ScsiPortWmiPostProcess по завершении запроса.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть scsiwmi.h (включая Scsiwmi.h)

См. также раздел

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess