Ovladače pro Windows
Ovladače Windows A4M38KRP
Str. 1
Ovladače pro Windows Struktura OS Windows
Str. 2
Ovladače pro Windows
Typy ovladačů
Str. 3
Ovladače pro Windows
Typy ovladačů •
Virtual Device Driver User mode ovladač Virtualizace HW pro DOS aplikace
•
Legacy Driver Pro zařízení nepodporující PnP, typicky se nahrává se při startu systému
•
Class Driver Pro zařízení s obdobnou funkcionalitou (např. HID) Podporuje společné rysy
•
Mini Driver Podporuje specifické vlastnosti nepodporované class ovladačem
•
Monolitic Function Driver Standardní ovladač konkrétního zařízení
•
Filter Driver
Umožňuje modifikovat funkce standardního ovladače Str. 4
Ovladače pro Windows
Základní pojmy IRP
Driver object
Device object
Driver/Device extension URB
I/O request packet Struktura sloužící ke komunikaci mezi ovladači respektive mezi operačním systémem a ovladačem. Funguje na principu posílání zpráv. Objekt reprezentující vlastní ovladač. Obsahuje ukazatele na funkce provádějící obsluhu IRP a na funkce zajišťující zavedení a odstranění ovladače z paměti. Dále obsahuje ukazatel na Driver extension a na Device object. Objekt reprezentující data (instanci) daného ovladače. Obsahuje ukazatel na Driver object a ukazatel na Device extension. (Pokud bude v systému více stejných zařízení, tak pro ně bude existovat jeden Driver object a pro každé zařízení jeden Device object). Ukazatel na námi definovanou strukturu, do které si můžeme uložit potřebné informace (proměnné), které potřebujeme mít globálně k dispozici po celou dobu běhu zařízení. USB request block Struktura pomocí které ovladač komunikuje (předává data) s nižším USB ovladačem (ovladač sběrnice). Jako parametr je předána s IRP do zásobníku nižšího ovladače.
Str. 5
Ovladače pro Windows
Spolupráce ovladačů
•
Upper Filter Driver Dostane IRP dříve Může implementovat rozšiřující funkce Může být použit pro obejití chyb
•
Lower Filter Driver Dostane IRP později Může modifikovat např. pořadí prováděných operací
Str. 6
Ovladače pro Windows
Proces zavedení ovladače
Str. 7
Ovladače pro Windows
Driver objekt • •
Device Object je spravován komponentou I/O Manager Driver Extension pointer struktura obsahuje globální data driveru adresu funkce AddDevice, vytvářející Device objekt
•
• •
HW Database název zařízení v registrech umožňuje uložit konfigurační info pro ne PnP zařízení FastIoDispatch pro drivery filesystému Major Function tabulka ukazatelů na funkce, obsluhující standardní požadavky Str. 8
Ovladače pro Windows
Rutiny ovladače
Str. 9
Ovladače pro Windows
Driver Entry WDM Driver inicializuje Driver Object a končí Ne WDM ovladač navíc
• •
detekuje hardware
vytváří device objekty dokončuje konfiguraci
Inicializace WDM Driver objektu adresa Driver Unload adresa AddDevice adresy pro zpracování PnP, Power a SystemControl žádostí
•
Driver Unload •
Úklid po Driver Entry např. uvolnění paměti apod. Str. 10
Ovladače pro Windows
Add Device NTSTATUS AddDevice (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo) { PDEVICE_OBJECT fdo; NTSTATUS status = IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; IoRegisterDeviceInterface(pdo, &GUID_DEVINTERFACE_SIMPLE, pdx->DeviceObject = fdo; pdx->Pdo = pdo; IoInitializeRemoveLock(&pdx->RemoveLock, 0,0,0); pdx->devstate = STOPPED; pdx->devpower = PowerDeviceD0; pdx->syspower = PowerSystemWorking; fdo->Flags │= DO_BUFFERED_IO │ DO_POWER_PAGABLE;
pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo); fdo->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; } Str. 11
NULL, &pdx->ifname);
Ovladače pro Windows
Prostředí jádra •
Io rutiny (I/O manager)
•
Ps rutiny (Process Structure Module)
•
funkce používané při komunikaci mezi drivery
funkce pro vytváření a řízení vláken jádra
Mm rutiny (Memory Manager) funkce pro mapování virtuální a fyzické paměti
•
Se rutiny (Security Reference Monitor)
funkce pro řízení a sledování bezpečnosti •
Rtl rutiny (Run time library) náhrada standardních ANSI knihoven
•
Zw rutiny část API32 pro přístup k registrům a souborům
•
Ke rutiny (Kernel) funkce pro synchronizaci
•
Hal rutiny (Hardware Abstraction Layer) Str. 12
Ovladače pro Windows
Interrupt Request Level •
Aktivita s danou IRQL nemůže být přerušena aktivitou s nižší nebo stejnou IRQL
•
Passive level
•
•
uživatelské procesy
většina rutin ovladače
Dispatch Level
scheduler
DPC rutiny ovladače
StartIo rutina
nefunguje stránkování (i pro vyšší levely)
IRQ Level obsluha přerušení Str. 13
Ovladače pro Windows
Synchronizace •
Objekty jádra
Event, semaphore
Mutex
Timer
Spin Lock
podpora i v symetrickém multiprocesorovém systému
•
Opakovaný pokus téhož CPU o získání již vlastněného Spin Locku způsobí DeadLock
•
Po získání Spin Locku automaticky přechod na Dispatch Level
•
nefunguje stránkování
CPU čekající na SpinLock prakticky jen obsluha přerušení
•
Čas, po nějž CPU vlastní SpinLock, by měl být minimální prakticky jen obsluha přerušení
Str. 14
Ovladače pro Windows
PnP stavy a žádosti
Str. 15