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


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

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

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

Синтаксис

PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;

BOOLEAN PscsiwmiExecuteMethod(
  [in]      PVOID DeviceContext,
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG GuidIndex,
  [in]      ULONG InstanceIndex,
  [in]      ULONG MethodId,
  [in]      ULONG InBufferSize,
  [in]      ULONG OutBufferSize,
  [in, out] PUCHAR Buffer
)
{...}

Параметры

[in] DeviceContext

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

[in] RequestContext

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

[in] GuidIndex

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

[in] InstanceIndex

Если блок, указанный в GuidIndex , содержит несколько экземпляров, InstanceIndex указывает экземпляр .

[in] MethodId

Указывает идентификатор метода для выполнения. Драйвер мини-порта определяет идентификатор метода как элемент в блоке данных.

[in] InBufferSize

Указывает размер входных данных в байтах. Если входные данные отсутствуют, значение InBufferSize равно нулю.

[in] OutBufferSize

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

[in, out] Buffer

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

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

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

Комментарии

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

Если драйвер мини-порта не реализует подпрограмму HwScsiWmiExecuteMethod , он должен задать для executeWmiMethodзначение NULL в SCSI_WMILIB_CONTEXT драйвер минипорта передает в ScsiPortWmiDispatchFunction. В этом случае драйвер порта возвращает вызывающей SRB_STATUS_ERROR.

Если метод создает выходные данные, драйвер мини-порта должен проверка размер выходного буфера в OutBufferSize перед выполнением любой операции, которая может иметь побочные эффекты или которая не должна выполняться дважды. Например, если метод возвращает значения группы счетчиков, а затем сбрасывает счетчики, драйвер мини-порта должен проверка размер буфера перед сбросом счетчиков. Это гарантирует, что драйвер порта сможет безопасно повторно отправить запрос с большим буфером. Если буфер слишком мал, драйвер мини-порта должен вызвать ScsiPortWmiPostProcess с SRB_STATUS_DATA_OVERRUN и размером выходного буфера, необходимым для выполнения запроса.

Драйвер мини-порта выполняет метод и записывает выходные данные, если таковые есть, в буфер. Перед возвратом из HwScsiWmiExecuteMethod драйвер мини-порта вызывает ScsiPortWmiPostProcess с соответствующим значением SrbStatus и числом байтов, используемых в выходном буфере.

Требования

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

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

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess