background image

Sterownik

  – jest to plik wykonawczy systemu 

operacyjnego,   który   zarządza   komunikacją 
pomiędzy fizycznym urządzeniem i programem 
użytkownika.

Klasyfikacja ze względu na funkcjonalność: 

monolityczny,

filtrujący (FILTER DRIVER)

miniport

Monolityczny:

Jest to sterownik obsługujący w pełni określone 
urządzenie,   nie   wymagający   dodatkowych 
komponentów   programowych.   Obsługuje 
urządzenia   fizyczne,   jak   również   świadczy 
usługi bezpośrednio dla systemu operacyjnego. 
Zawiera  w   sobie  wszystkie   funkcje  potrzebne 
do prawidłowego działania urządzenia. Dostęp 
do sterownika ma jedna lub kilka aplikacji. 

FILTER DRIVER:

Jest   sterownikiem,   który   reguluje   przepływ 
sterowania pomiędzy systemem a urządzeniem 
zewnętrznym. Ich działanie polega na:

przekształcaniu żądań systemowych,

ukierunkowaniu   sterownika   pod   kątem 
konkretnego modelu urządzenia.

Sterownik   jest   częścią   stosu   pomiędzy 
urządzeniem   a   aplikacją,   przejmuje   wszystkie 
dane   transferowe   do/z   dysku,   znajduje   się 
ponad   sterownikiem   urządzenia   i   zajmuje   się 
tylko (de)szyfrowaniem danych.

Miniport:

To sterownik niskopoziomowy, który dostarcza 
standardowy   interfejs   we-wy   sprzętu   dla 
sterowników   grup   urządzeń,   jak   również 
zaawansowane procedury dla oprogramowania 
dedykowanego dla konkretnych modeli sprzętu. 

DriverEntry-

 

główny   punkt   wejściowy, 

wywoływany   tylko   raz   w   trakcie   ładowania 
drivera do systemu.

DRIVER_OBJECT

 (struktura inicjowana przez 

DriverEntry):
Z   punktu   widzenia   systemu   operacyjnego 
DRIVER_OBJECT   jest   widziany   jako 
wskaźnik   do   wywołania  dodatkowych   funkcji 
odwołujących   się   do   urządzenia. 
DRIVER_OBJECT   jest   tworzony   przez 
sterownik i reprezentuje fizyczne lub wirtualne 
urządzenie, które sterownik obsługuje. 
DRIVER_OBJECT   jest   blokiem   pamięci 
umieszczanym i częściowo inicjowanym przez 
system   operacyjny.   Ten   obiekt   opisuje   gdzie 
kod   sterownika   jest   ładowany   do   pamięci, 
nazwę   sterownika   oraz   zawiera   wskaźniki   do 
adresów funkcji, które sterownik oferuje. Jeden 
ze   wskaźników   do   adresów   funkcji   musi  być 
umieszczony w tablicy wskaźników nazywanej 
„Function Dispatch Table”.
Function   Dispatch   Table   zawira   wejścia   do 
każdej Major Function Code oferowanej przez 
system operacyjny. Obecnie istnieje 28 funkcji, 
które   sterownik   może   zawierać,   jednak   w 
większości   przypadków   wystarcza   obsługa   8 
funkcji:   IRP_MJ_CREATE,   IRP_MJ_CLOSE, 
IRP_MJ_READ,

 

IRP_MJ_WRITE, 

IRP_MJ_PNP,

 

IRP_MJ_POWER, 

IRP_MJ_DEVICE_CONTROL, 
IRP_MJ_SYSTEM_CONTROL.

Komunikacja aplikacji z urządzeniami I/O:

systemowe   funkcje   API   stosowane   są   do 
komunikacji   z   urządzeniami   zewnętrznymi   w 
trybie   jądra.   W   pierwszej   fazie   obsługi 
zarządzania we-wy sprawdzane są parametry, z 
jakimi   funkcja   została   wywołana.   Jeżeli 
wartości   te   ingerują   w   chronione   obszary 
systemowe,   funkcja   nie   jest   wykonywana.   W 
drugiej   fazie   tworzone   są   struktury   danych 
zwane   pakietami   żądań   we-wy   (IRP),   które 
przesyłane   są   do   sterownika   urządzenia.   W 
zależności   od   rodzaju   wykonywanej   operacji, 
sterownik   zwraca   do   systemu   pakiet   IRP   o 
zawartości odpowiedniej rodzajowi wykonanej 
operacji. Może to być przykładowo: komunikat 
PENDING,   komunikat   SUCCESS,   dane, 
których   czytania   dotyczyło   polecenie   we-wy, 
liczba bajtów danych wysłanych do urządzenia, 
których dotyczył polecenie we-wy.

Sterownik   wykonuje   polecenie   zawarte   w 
odebranym pakiecie IRP, może to być zapis lub 
odczyt   określonych   portów   we-wy   lub   też 
odwzorowanych w pamięć operacyjną rejestrów 
urządzenia zewnętrznego.
Sterowniki   działają   w   trybie   jądra   i 
wykorzystują   funkcje   abstrakcyjnej   warstwy 

sprzętu HAL do komunikacji ze sprzętem.
Po   zakończeniu   operacji   we-wy   sterownik, 
poprzez wywołanie odpowiednich funkcji jądra 
uzupełnia danymi pakiet IRP. Następnie system 
przekazuje   dane   zawarte   w   IRP   do   aplikacji, 
pozwalając na dalsze jej wykonywanie.