функция обратного вызова PSCSIWMI_EXECUTE_METHOD (scsiwmi.h)
Подпрограмма HwScsiWmiExecuteMethod драйвера мини-порта вызывается для выполнения метода, связанного с блоком данных. Эта подпрограмма является необязательной.
Синтаксис
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, а MinorFunction — Srb-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) |