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


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

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

Синтаксис

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, если такая предварительная обработка не требуется. Дополнительные сведения см. в разделе "Примечания".

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

None

Remarks

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

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

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

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

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

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

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть spbcx.h
Библиотека Spbcxstubs.lib
IRQL PASSIVE_LEVEL

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

EvtIoInCallerContext

EvtSpbControllerIoOther

SpbControllerSetRequestAttributes