функция обратного вызова PSCSIWMI_QUERY_DATABLOCK (scsiwmi.h)
Подпрограмма HwScsiWmiQueryDataBlock драйвера мини-порта вызывается для получения одного экземпляра или всех экземпляров блока данных. Эта подпрограмма является обязательной.
Синтаксис
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, а MinorFunction — Srb-WmiSubFunction>. Драйвер порта SCSI вызывает подпрограмму HwScsiWmiQueryDataBlock драйвера мини-порта, если MinorFunction указывает запрос на получение одного экземпляра или всех экземпляров блока данных.
Драйвер мини-порта записывает данные экземпляра в буфер. Для запросов, которые не выполняются, драйвер мини-порта вызывает ScsiPortWmiPostProcess с соответствующим значением SrbStatus перед возвратом из HwScsiWmiQueryDataBlock. Если запрос выполняется, драйвер мини-порта вызывает ScsiPortWmiPostProcess по завершении запроса.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | scsiwmi.h (включая Scsiwmi.h) |