Функция 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 |