Ovladače Windows A4M38KRP Str. 1
Struktura OS Windows Str. 2
Typy ovladačů Str. 3
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
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
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
Proces zavedení ovladače Ovladače pro Windows Str. 7
Driver objekt Ovladače pro Windows 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
Rutiny ovladače Str. 9
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
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);
Prostředí jádra Io rutiny (I/O manager) Ovladače pro Windows funkce používané při komunikaci mezi drivery Ps rutiny (Process Structure Module) 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
Interrupt Request Level Aktivita s danou IRQL nemůže být přerušena aktivitou s nižší nebo stejnou IRQL Ovladače pro Windows 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
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
PnP stavy a žádosti Str. 15