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


Функция SpbControllerSetIoOtherCallback (spbcx.h)

Метод spbControllerSetIoOtherCallback регистрирует функцию обратного вызова драйвера контроллера SPB EvtSpbControllerIoOther обратного вызова.

Синтаксис

void SpbControllerSetIoOtherCallback(
  [in]           WDFDEVICE                    FxDevice,
  [in]           PFN_SPB_CONTROLLER_OTHER     EvtSpbControllerIoOther,
  [in, optional] PFN_WDF_IO_IN_CALLER_CONTEXT EvtIoInCallerContext
);

Параметры

[in] FxDevice

Дескриптор WDFDEVICE для объекта устройства, представляющего контроллер SPB.

[in] EvtSpbControllerIoOther

Указатель на функцию обратного вызова EvtSpbControllerIoOther. Драйвер контроллера SPB реализует эту функцию. Расширение платформы SPB (SpbCx) вызывает эту функцию для передачи запроса элемента управления ввода-вывода драйверу контроллера. Дополнительные сведения о типе запросов ввода-вывода, передаваемых этой функции, см. в следующем разделе "Примечания".

[in, optional] EvtIoInCallerContext

Указатель на функцию обратного вызова EvtIoInCallerContext, которая вызывается при первом поступлении запроса управления ввода-вывода в очередь ввода-вывода контроллера, а запрос содержит код IOCTL, который не распознает расширение платформы SPB (SpbCx). Этот обратный вызов выполняется в контексте процесса инициатора запроса и может предварительно обработать запросы, которые позже будут обработаны EvtSpbControllerIoOther обратного вызова. Этот параметр является необязательным и может быть указан как NULL, если такая предварительная обработка не требуется. Дополнительные сведения см. в следующем разделе "Примечания".

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

Никакой

Замечания

Этот метод позволяет драйверу контроллера SPB объявить поддержку пользовательских кодов управления ввода-вывода (IOCTLs), относящихся к шине или драйверу. Если драйвер контроллера SPB не вызывает этот метод, SpbCx отклоняет все такие запросы управления ввода-вывода, а драйвер контроллера SPB никогда не видит их.

SpbCx управляет очередью ввода-вывода для контроллера SPB. По умолчанию, если SpbCx получает запрос управления ввода-вывода, имеющий IOCTL, который не поддерживается, SpbCx завершает запрос с кодом состояния ошибки STATUS_INVALID_DEVICE_REQUEST.

Однако путем вызова SpbControllerSetIoOtherCallbackдрайвер контроллера SPB объявляет поддержку запросов управления ввода-вывода, что расширение платформы SPB (SpbCx) не поддерживает. В этом случае, когда SpbCx получает запрос управления ввода-вывода с кодом IOCTL, который не поддерживается, SpbCx вызывает функцию EvtSpbControllerIoOther, чтобы передать запрос драйверу контроллера SPB для обработки. Драйвер контроллера SPB отвечает за выполнение запроса.

Список списков операций ввода-вывода, поддерживаемых SpbCx, см. в разделе Коды элементов управления SpbCx ввода-вывода.

Необязательная функция обратного вызова EvtIoInCallerContext выполняется в контексте процесса инициатора запроса и может предварительно обработать параметры запроса, зависящие от контекста, такие как указатели буфера, перед передачей запроса в функцию обратного вызова EvtSpbControllerIoOther. При вызове функции EvtIoInCallerContext любой контекст для каждого запроса, запрошенный драйвером контроллера SPB в предыдущем вызове SpbControllerSetRequestAttributes уже будет выделен и назначен запросу.

Драйвер контроллера SPB должен вызвать этот метод, прежде чем он фиксирует объект устройства, то есть, прежде чем он возвращается из EvtDriverDeviceAdd обратного вызова или добавляет PDO в дочерний список контроллера. Дочерний список представляет устройства, подключенные к шине. Дополнительные сведения см. в разделе Перечисление устройств вшины.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.
целевая платформа Всеобщий
заголовка spbcx.h
библиотеки Spbcxstubs.lib
IRQL PASSIVE_LEVEL

См. также

EvtIoInCallerContext

EvtSpbControllerIoOther

SpbControllerSetRequestAttributes