Моделът на драйвера на Windows ясно разделя компонентите на драйвера, които управляват периферно устройство (например температурен сензор) в шината, от компонентите на драйвера, които управляват контролера на шината, който прехвърля данни и контролна информация към и от периферното устройство. Това разделяне дава възможност на доставчика на хардуер за периферно устройство, което се свързва с обикновена периферна шина (SPB), да напише драйвер, който контролира устройството на различни контролери на шина, типове шини и хардуерни платформи. По същия начин, доставчикът на хардуер за контролер SPB може да напише драйвер за този контролер, който може да даде възможност за свързване към различни периферни устройства.

драйвери

В Windows периферно устройство, прикрепено към Plug and Play (PnP) шина, е представено от два, а може би и повече обекта на устройството. Обектите на устройството за това устройство са организирани йерархично, за да образуват стек от устройства. Функционален обект на устройство (FDO) представлява вътрешното състояние на устройството и се създава и притежава от драйвера на функцията, който контролира вътрешните функции на периферното устройство. Под FDO в стека има физически обект на устройство (PDO), който представлява връзката на устройството към шината. PDO се създава и притежава от драйвера на контролера на шината, който открива и изброява устройството за PnP мениджъра. Този PDO съдържа информацията (например адрес на шината), необходима на контролера на шината за достъп до устройството през шината. Ако драйверът на функцията се нуждае от помощ от контролера на шината за извършване на I/O операция на устройството, функционалният драйвер изпраща I/O пакет с искания (IRP) надолу по стека на устройството до PDO, а драйверът на контролера на шината получава IRP . За повече информация вижте Обекти на устройства и стекове на устройства.

За разлика от това, SPB (например I²C или SPI шина) не поддържа PnP и драйверът на контролера SPB не открива и изброява периферните устройства на SPB. Вместо това, фърмуерът на хардуерната платформа ACPI описва тези устройства и техните шинни връзки, а ACPI драйверът, Acpi.sys, изброява тези устройства за PnP мениджъра.

Освен това Acpi.sys създава PDO за периферно устройство на SPB. За да извърши I/O операция на това устройство, функционалният драйвер на устройството не изпраща IRP надолу по стека към PDO, тъй като PDO е собственост на Acpi.sys, който не може да извършва I/O операции. Вместо това, функционалният драйвер трябва да изпрати IRP до драйвера на контролера SPB. Драйверът на контролера SPB притежава FDO за контролера SPB, който не е в същия стек устройства като FDO за периферното устройство. За да изпрати този IRP, функционалният драйвер на устройството трябва първо да отвори логическа връзка към контролера SPB и да получи манипулатор на обект WDFFILEOBJECT към тази връзка. След това драйверът определя този манипулатор като цел за IRP, които изпраща на устройството. Драйверът на контролера SPB получава тези IRP и (заедно с разширението на рамката SPB, SpbCx) изпълнява заявените I/O операции на устройството. За повече информация относно отварянето на логически връзки към контролери SPB вижте Идентификатори на връзки за периферни устройства SPB.

Някои IRP могат да се обработват изцяло от драйвери, които са над драйвера на контролера SPB във веригата за входно/изходни заявки, включително функционалния драйвер за периферното устройство. Въпреки това, IRP, които изискват трансфери на данни или контролна информация към и от периферното устройство през шината, трябва да бъдат обработени от драйвера на контролера SPB.

Драйвер на филтър, проектиран да работи с функционалния драйвер за периферно устройство SPB, може да бъде вмъкнат над FDO на функционалния драйвер. Вмъкването на такъв филтър между FDO и PDO обаче няма ефект, тъй като не може да прихване IRP, които се обменят между драйвера на функцията и драйвера на контролера SPB.

Ако е необходимо, филтърният драйвер може да бъде вмъкнат над драйвера на контролера SPB (и SpbCx, който управлява опашките за IRP, изпратени до драйвера на контролера SPB). Интерфейсът за заявки SPB за вход/изход обаче е интерфейс на драйвер от първо ниво и драйверите във веригата за вход/изход трябва да гарантират, че заявките за вход/изход се доставят в контекста на извикващата нишка, така че SpbCx и контролерът SPB драйверът има достъп до буфери в потребителски режим по време на I/O трансфери.