Расширение платформы SPB (SpbCx)
Расширение платформы SPB (SpbCx) — это системное расширение платформы драйверов в режиме ядра (KMDF). SpbCx работает вместе с драйвером контроллера SPB для выполнения операций ввода-вывода на периферийных устройствах, подключенных к простой периферийной шине (SPB), например I2C или SPI.
Драйвер контроллера SPB выполняет все аппаратные операции. К этим операциям относятся доступ к аппаратным регистрам контроллера SPB для настройки контроллера и запуска передачи шины на периферийные устройства, подключенные к SPB, и из них.
SpbCx выполняет задачи обработки, которые являются общими для устройств контроллера SPB. В частности, SpbCx управляет очередями запросов ввода-вывода для контроллера SPB. Эти очереди содержат запросы ввода-вывода для периферийных устройств, подключенных к шине. Поставщик оборудования для контроллера SPB предоставляет драйвер контроллера SPB для выполнения всех аппаратных операций, необходимых для обработки этих запросов.
Разделение обязанностей между SpbCx и драйвером контроллера SPB выглядит следующим образом:
SpbCx управляет универсальными функциями, общими для всех членов класса устройства контроллера SPB. SpbCx предоставляет большую часть обработки запросов по умолчанию и управления потоком для драйвера контроллера. Начиная с Windows 8 spbCx — это компонент папки "Входящие" операционной системы Windows.
Драйвер контроллера SPB управляет аппаратными функциями на устройстве контроллера SPB. Поставщики оборудования предоставляют драйверы контроллера для своих устройств контроллера SPB.
SpbCx и драйвер контроллера SPB выполняются в режиме ядра. SpbCx — это расширение платформы, а драйвер контроллера SPB — драйвер KMDF. Драйвер контроллера SPB вызывает методы в интерфейсе драйвера устройства SpbCx (DDI) для выполнения операций с поставщиком служб spB и вызывает методы KMDF для выполнения других, более универсальных функций драйвера. Дополнительные сведения о создании драйвера KMDF см. в разделе "Создание и загрузка драйвера на основе платформы".
Драйверы контроллера SPB статически связываются с точками входа DDI в библиотеке заглушки SpbCx Spbcx.lib. Во время выполнения эта библиотека выполняет необходимые переговоры по версии драйвера для динамического связывания с модулем расширения платформы, Spbcx.sys, который реализует DDI. Драйвер контроллера SPB, требующий определенной версии Spbcx.sys, может безопасно связаться с версией Spbcx.sys с более высоким номером версии. Однако этот драйвер не может связаться с версией Spbcx.sys с более низким номером версии. Интерфейс запроса ввода-вывода SpbCx аналогичен обратной совместимости.
Хотя поставщик оборудования имеет возможность написания монолитного драйвера контроллера SPB, который не использует SpbCx, для этого требуется значительное усилие. По сравнению с драйвером контроллера, использующим SpbCx, проще разрабатывать и, как правило, надежнее.