Èíòåðôåéñ WDM äëÿ Plug and Play. Òèïû äðàéâåðîâ.
Ñèñòåìà ââîäà/âûâîäà ïðåäîñòàâëÿåò óðîâíåâóþ àðõèòåêòóðó äðàéâåðîâ. Â äàííîì ðàçäåëå îáñóæäàþòñÿ òèïû äðàéâåðîâ WDM, óðîâíè äðàéâåðîâ è îáúåêòû óñòðîéñòâ. Áîëåå ïîäðîáíóþ èíôîðìàöèþ ïî äàííîìó âîïðîñó ìîæíî íàéòè â ôàéëàõ ñîïðîâîäèòåëüíîé äîêóìåíòàöèè ê ïîñëåäíåé âåðñèè Windows DDK.
Ñ òî÷êè çðåíèÿ ñèñòåìû Plug and Play ñóùåñòâóþò ñëåäóþùèå òðè òèïà äðàéâåðîâ.
Øèííûé äðàéâåð îáñëóæèâàåò êîíòðîëëåð øèíû, àäàïòåð, ìîñò èëè ëþáîå óñòðîéñòâî, êîòîðîå èìååò äî÷åðíèå óñòðîéñòâà. Øèííûå äðàéâåðû îòíîñÿòñÿ ê îáÿçàòåëüíûì äðàéâåðàì è îáû÷íî ïîñòàâëÿþòñÿ Microsoft. Äëÿ êàæäîãî òèïà øèíû â ñèñòåìå èìååòñÿ ñîáñòâåííûé øèííûé äðàéâåð.
Ôóíêöèîíàëüíûé äðàéâåð – ýòî îñíîâíîé äðàéâåð óñòðîéñòâà, êîòîðûé ïðåäîñòàâëÿåò èíòåðôåéñ ñ ýòèì óñòðîéñòâîì. Ýòîò äðàéâåð ÿâëÿåòñÿ îáÿçàòåëüíûì, çà èñêëþ÷åíèåì ñëó÷àåâ, êîãäà ââîä/âûâîä óñòðîéñòâà îñóùåñòâëÿåòñÿ øèííûì äðàéâåðîì èëè ëþáûìè äðàéâåðàìè ôèëüòðà. Ôóíêöèîíàëüíûé äðàéâåð óñòðîéñòâà îáû÷íî ðåàëèçóåòñÿ â âèäå ïàðû äðàéâåð/ìèíè-äðàéâåð.  òàêèõ ïàðàõ äðàéâåðîâ äðàéâåð êëàññà (îáû÷íî ðàçðàáàòûâàåìûé Microsoft) îáåñïå÷èâàåò ôóíêöèîíàëüíûå âîçìîæíîñòè, íåîáõîäèìûå âñåì óñòðîéñòâàì ýòîãî òèïà, à ìèíè-äðàéâåð (îáû÷íî ðàçðàáàòûâàåìûé ôèðìîé – ïîñòàâùèêîì êîíêðåòíîãî óñòðîéñòâà) îáåñïå÷èâàåò ñïåöèôè÷åñêèå ôóíêöèîíàëüíûå îñîáåííîñòè óñòðîéñòâà. Plug and Play Manager çàãðóæàåò ïî îäíîìó ôóíêöèîíàëüíîìó äðàéâåðó äëÿ êàæäîãî óñòðîéñòâà.
Äðàéâåð ôèëüòðà ñîðòèðóåò çàïðîñû ââîäà/âûâîäà äëÿ øèíû, óñòðîéñòâà èëè êëàññà óñòðîéñòâ. Äðàéâåðû ôèëüòðà ÿâëÿþòñÿ íåîáÿçàòåëüíûìè è ìîãóò ñóùåñòâîâàòü â ëþáîì êîëè÷åñòâå, ðàñïîëàãàÿñü íà ðàçëè÷íûõ óðîâíÿõ – êàê âûøå, òàê è íèæå ôóíêöèîíàëüíîãî äðàéâåðà è øèííîãî äðàéâåðà. Îáû÷íî òàêèå äðàéâåðû ïîñòàâëÿþòñÿ ôèðìàìè OEM èëè íåçàâèñèìûìè ïîñòàâùèêàìè àïïàðàòíûõ ñðåäñòâ (IHV).
 áîëüøèíñòâå ñëó÷àåâ äðàéâåðû ôèëüòðîâ íèæíåãî óðîâíÿ ìîäèôèöèðóþò ïîâåäåíèå àïïàðàòíûõ ñðåäñòâ. Íàïðèìåð, íèçêîóðîâíåâûé äðàéâåð ôèëüòðà êëàññà äëÿ ìûøè ìîæåò îáåñïå÷èâàòü óñêîðåíèå åå ðàáîòû, âûïîëíÿÿ íåëèíåéíîå ïðåîáðàçîâàíèå äàííûõ î ïåðåìåùåíèè ìûøè.
Âûñîêîóðîâíåâûå äðàéâåðû ôèëüòðîâ îáû÷íî ïðåäîñòàâëÿþò äîïîëíèòåëüíûå ôóíêöèè äëÿ óñòðîéñòâà. Íàïðèìåð, âûñîêîóðîâíåâûé äðàéâåð ôèëüòðà äëÿ êëàâèàòóðû ìîæåò ââîäèòü äîïîëíèòåëüíûå ïðîâåðêè ïî áåçîïàñíîñòè.
Óðîâíè äðàéâåðîâ
Äëÿ êàæäîãî êîíêðåòíîãî óñòðîéñòâà ñóùåñòâóåò äâà èëè áîëåå óðîâíåé äðàéâåðà: øèííûé äðàéâåð äëÿ øèíû ââîäà/âûâîäà (èëè Plug and Play Manager – äëÿ óñòðîéñòâ, ïîìåùåííûõ ïðè ýíóìåðàöèè íà êîðíåâîé óðîâåíü) è ôóíêöèîíàëüíûé äðàéâåð óñòðîéñòâà. Ïîìèìî ýòîãî, ìîãóò ïðèñóòñòâîâàòü îäèí èëè íåñêîëüêî äðàéâåðîâ ôèëüòðà äëÿ øèíû èëè óñòðîéñòâà.
Îáúåêòû óñòðîéñòâ
Äðàéâåð ñîçäàåò îáúåêò óñòðîéñòâà (device object) äëÿ êàæäîãî óñòðîéñòâà, êîòîðûì îí óïðàâëÿåò. Îáúåêò óñòðîéñòâà ïðåäñòàâëÿåò óñòðîéñòâî äëÿ äðàéâåðà. Ñ òî÷êè çðåíèÿ Plug and Play, ñóùåñòâóþò òðè òèïà îáúåêòîâ óñòðîéñòâ.
Ôèçè÷åñêèå îáúåêòû óñòðîéñòâ (Physical Device Objects, PDO).
Ôóíêöèîíàëüíûå îáúåêòû óñòðîéñòâ (Functional Device Objects, FDO).
Îáúåêòû ôèëüòðîâ óñòðîéñòâ
PDO ïðåäñòàâëÿþò óñòðîéñòâî íà øèíå; êàæäûé èíòåðôåéñ ïðèêëàäíîãî ïðîãðàììèðîâàíèÿ Plug and Play API, êîòîðûé ññûëàåòñÿ íà óñòðîéñòâî, ññûëàåòñÿ íà PDO. FDO ïðåäñòàâëÿþò ôóíêöèîíàëüíûå âîçìîæíîñòè óñòðîéñòâà ôóíêöèîíàëüíîìó äðàéâåðó. Îáúåêòû ôèëüòðîâ ïðåäñòàâëÿþò äðàéâåð ôèëüòðà. Ýòè òðè òèïà îáúåêòîâ óñòðîéñòâ èìåþò òèï DEVICE_OBJECT, íî èñïîëüçóþòñÿ ïî-ðàçíîìó è ìîãóò èìåòü äîïîëíèòåëüíûå ðàñøèðåíèÿ.