Функция ScsiPortWmiDispatchFunction (scsiwmi.h)
Подпрограмма ScsiPortWmiDispatchFunction — это подпрограмма диспетчеризации для драйверов мини-порта, поддерживающих WMI.
Синтаксис
BOOLEAN ScsiPortWmiDispatchFunction(
[in] PSCSI_WMILIB_CONTEXT WmiLibInfo,
[in] UCHAR MinorFunction,
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] PVOID DataPath,
[in] ULONG BufferSize,
[in] PVOID Buffer
);
Параметры
[in] WmiLibInfo
Указатель на структуру SCSI_WMILIB_CONTEXT , содержащую сведения о регистрации для блоков данных мини-порта и блоков событий драйвера и определяет точки входа для подпрограмм обратного вызова библиотеки WMI мини-порта драйвера.
[in] MinorFunction
Указывает действие WMI для выполнения. Драйвер мини-порта устанавливает значение MinorFunction на Srb-WmiSubFunction> из входного SRB.
[in] DeviceContext
Указатель на значение контекста, определяемого драйвером мини-порта. Драйвер порта передает DeviceContext в подпрограмму обратного вызова HwScsiWmiXxxx hwScsiWxxx . Обычно это значение указывает на структуру HW_DEVICE_EXTENSION.
[in] RequestContext
Указатель на структуру SCSIWMI_REQUEST_CONTEXT, содержащую сведения о контексте для WMI SRB. Если SRB может быть пером, драйвер мини-порта должен выделить эту структуру из расширения SRB, так как контекст запроса должен оставаться допустимым до тех пор, пока ScsiPortWmiPostProcess не возвращает окончательное состояние возврата SRB и размер буфера. ScsiPortWmiDispatchFunction передает RequestContext подпрограмме обратного вызова драйвера мини-порта, обрабатывающей этот запрос.
[in] DataPath
Указатель на GUID, представляющий блок данных, связанный с запросом. Драйвер мини-порта устанавливает DataPath на Srb-DataPath> из входного SRB.
[in] BufferSize
Задает размер в байтах буфера данных. Драйвер минипорта задает BufferSize значение Srb-DataTransferLength> из входного SRB.
[in] Buffer
Указатель на буфер данных. Драйвер минипорта задает буфер для Srb-DataBuffer> из входного SRB.
Возвращаемое значение
ScsiPortWmiDispatchFunction возвращает значение TRUE , если запрос находится в состоянии ожидания, или значение FALSE , если запрос был завершен.
Комментарии
Когда мини-драйвер получает SRB, в котором член функции имеет значение SRB_FUNCTION_WMI, он вызывает ScsiPortWmiDispatchFunction с параметрами запроса, включая указатель на инициализированную структуру SCSI_WMILIB_CONTEXT. Эта структура содержит сведения о блоках данных и блоках событий драйвера мини-порта и определяет точки входа для подпрограмм обратного вызова HwScsiWmiXxxx .
ScsiPortWmiDispatchFunction подтверждает, что SRB является запросом WMI и определяет, является ли блок, указанный запросом, допустимым для драйвера мини-порта. При соблюдении этих условий ScsiPortWmiDispatchFunction обрабатывает SRB, вызывая соответствующую точку входа HwScsiWmiXxxx в SCSI_WMILIB_CONTEXT структуре драйвера мини-порта. Если драйвер минипорта не определяет точку входа для необязательной подпрограммы HwScsiWmiXxxx , драйвер порта обрабатывает запрос.
В любом случае после возврата ScsiPortWmiDispatchFunction драйвер мини-порта должен выполнить следующие действия для запросов, которые он не заносил:
- Задайте значение DataTransferLength srb-> значением, возвращаемым ScsiPortWmiGetReturnSize
- Присвойте Srb->SrbStatus значение, возвращаемое ScsiPortWmiGetReturnStatus
- Вызов ScsiPortNotification с помощью RequestComplete и повторно с помощью NextRequest
Требования
Целевая платформа | Рабочий стол |
Заголовок | scsiwmi.h (include Miniport.h, Scsi.h) |