Windows NT driverek fejlesztése

Slides:



Advertisements
Hasonló előadás
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Advertisements

64 bites architektúra, csapdák és átjárók Tóth Sándor Terméktámogatási tanácsadó.
1 Számítógépek felépítése 9. előadás I/O rendszerek.
Erőállóképesség mérése Találjanak teszteket az irodalomban
Piacképes programozói tudás a középiskolában
Hálózati architektúrák
2 Forrás: The Standish Group International, Extreme Chaos, The Standish Group International, Inc., 2000.
IEEE1394, avagy közvetlen kapcsolat az agyba. Bemutatkozás Barta Csaba Deloitte Zrt. manager CHFI
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
ASP.NET MVC 3 platform áttekintés
A Windows operációs rendszer
Hibakezelés és Tesztelés a Visual Studio.NET-ben
A Windows 7 automatizált telepítése Windows AIK használatával
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
A szoftver.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Mérés és adatgyűjtés Kincses Zoltán, Mingesz Róbert, Vadai Gergely 10. Óra MA-DAQ – Műszer vezérlése November 12., 15. v
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Microsoft Virtual PC 2007 Beszerzés, telepítés
Ember László XUBUNTU Linux (ami majdnem UBUNTU) Ötödik nekifutás 192 MB RAM és 3 GB HDD erőforrásokkal.
OCLC Online Computer Library Center. Tartalom 1. Könyvtárközi kölcsönzés 2. Adatbázisokban szereplő dokumentumok címlistája 3. Adatbázisokban szereplő.
JSP és JavaBean JavaServer Pages és Java Beans Fabók Zsolt Általános Informatikai Tanszék Miskolci Egyetem.
MSI készítése mindennapi használatra
SQL Server 2005 Reporting Services Kószó Károly rendszermérnök Microsoft Magyarország.
Átállás.
Számítógépes grafika OpenGL 1. gyakorlat.
Module 1: A Microsoft Windows XP Professional telepítése
1 Operációs rendszerek Az NT folyamatok kezelése.
1 Operációs rendszerek Az ütemezés megvalósítása.
Windows Server 2012 Kiadások, licencelés, lehetőségek
Programrendszer 2. Erőforrás – erőforrás elosztás 3. Indítja és ütemezi a programokat 4. kommunikáció 2 Takács Béla.
OAIS. Megőrzés feladatai Viability –Meg kell őrizni a bitfüzér változatlanságát és olvashatóságát a tároló eszközön Rendbebility –Meg kell őrizni a bitfüzér.
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Windows NT driverek fejlesztése: Egyszerű.
szakmérnök hallgatók számára
Rendelkezésre álló erőforrások pontos ismerete Kiosztott feladatok közel „valósidejű” követése Átláthatóság Tervezési folyamatok támogatása.
J.Zs.Cs.: Vizuális programozás (c) 2010 Vizuális programozás Fájl- és állományrendszer kezelés Névtér: System.IO.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Visual Basic 2008 Express Edition
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Fontos információk.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
Alapozó eszközök Eseménynapló Eseményszámba megy… Analytic and Debug Logs Custom Views / Cross-log queries Event Forwarding > Subscriptions Feladatütemező.
Magas rendelkezésre állású Hyper-V rendszer építése
Objektum orientált programozás
Objektum orientált programozás
Power Lutár Patrícia Pellek Krisztián.  -ltLess than  -leLess than or equal to  -gtGreater than  -geGreater than or equal to  -eqEqual to  -neNot.
Programozás III KIVÉTEL.
Ismerkedjünk tovább a számítógéppel
Írja fel a tizes számrendszerbeli
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
A Windows Server 2003 termékcsalád A Windows Server 2003 termékcsaládnak 4 tagja van: Windows Server 2003, Standard Edition Windows Server 2003, Enterprise.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
2. Operációs rendszerek.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Piramis klaszter rendszer
DLL használata és készítése Feladat
TÁMOP /1-2F Modern informatikai eszközök Alkalmazások a számítógépen Papp Szabolcs 2009.
Informatikai gyakorlatok 11. évfolyam
Maven és Ant Build eszközök bemutatása
Microsoft SQL licenselés a gyakorlatban
Előadás másolata:

Windows NT driverek fejlesztése 8 előadás dr. Robu Judit szeminárium drd. Lukács Sándor 2006

Copyright / Felhasznált anyag a prezentáció részben felhasználja a Windows Operating System Internals Curriculum Resource Kit-ben található prezentációkat az eredeti anyagot David A. Solomon, Mark E. Russinovich és Andreas Polze készítették a Microsoft licenszelte az anyagot és szabadon felhasználhatóvá tette akadémiai környezetben a MSDNAA / CRK keretében a teljes licensz megtalálható a következő címen: http://www.msdnaa.net/curriculum/license_curriculum.aspx ebben a prezentációban külön meg vannak jelölve azok a slide-ok, amelyek a CRK felhasználásával készültek az egyetem (BBTE) keretében a CRK és WRK szabadon elérhető és letölthető a diákok számára [ide utólag, amikor felkerül a CRK a hálózatra link kerül] BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver fejlesztői eszközök 1 Visual Studio 6 / 2005 csak a C/C++ IDE fontos, a kompiler más driver fejlesztői és tesztelési kitek Driver Development Kit (DDK, 3790) Windows 2000, XP (32 / 64 bit) , 2003 (32 / 64 bit) szabadon letölthető a Microsoft weblapjáról Visual Studio 6 SP5-öt igényel tartalmazza a driverek fordításához szükséges C/C++ kompilert Installabel File System Kit (IFSK, 3790) állományrendszerek és file sytem filterek fejlesztését teszi lehetővé nem ingyenes (körülbelül 110 USD a Windows 2003 SP1 számára) Hardware Compatibility Test Kit (HCT, 12.1) Windows XP (32 / 64 bit) , 2003 (32 / 64 bit) nagyon sok standard tesztet tartalmaz, amelyek segítségével „Designed for Windows” logo-kat lehet szerezeni (ez jelzi, hogy egy driver minőségileg megfelel a Microsoft elvárásainak) szabadon letölthető Windows Driver Kit (WDK, 6000RTM) Windows 2000, XP, 2003, 2003 R2, Vista, Longhorn (egyelőre) nem tölthető le ingyen, de elérhető a connect.microsoft.com alatt Beta programok keretében Visual Studio 2005-öt igényel tartalmazza az új IFS kitet, tartalmazza a DTM-et (Driver Test Manager, ez helyettesíti a HCT-t) BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver fejlesztői eszközök 2 DDKBUILD.BAT megkönnyíti a driverek fordítását különböző platformok számára OsrLoader lehetővé teszi a driverek gyors regisztrálását és indítását/leállítását PoolTag nyomon követi a paged/non-paged kernel memória allokálását ProcessExplorer egy, a Task Manager-t helyettesitő, sokkal erőteljesebb processz manager DbgView lehetővé teszi a debug / trace üzenetek nyomon kötevését, akár remote számítógépről is PreFAST a WDK része, statikus C forráskód ellemző erőteljesebbek szűri ki a hibákat, mint a C fordító DeviceTree a device és driver objektumokat és azok hierarchikus kapcsolatát lehet böngészni vele WinObj a teljes NT objktum névteret (objet namespace) láthatóvá teszi RegMon / FileMon nyomon követi a Windows Registry és a Windows FS I/O műveleteit Windows Debugging Tools – WinDBG kernel módbeli debugger, akár remote számítógépek számára is BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver fejlesztési dokumentációk a DDK / WDK help kitűnő referencia rengeteg kész példát is tartalmaz http://www.microsoft.com/whdc/winhec/default.mspx prezentációk, cikkek www.osronline.com NT Insider, példák, cikkek NTDEV, NTFSD, WINDBG fórumok fejlesztői eszközök www.sysinternals.com Mark Russinovich, David Solomon – Microsoft Windows Internals, 4th edition, Microsoft Press, 2004 Walter Oney – Programming the Windows Driver Model, 2nd edition, Microsoft Press, 2003 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Windows driver modellek, kategóriák Legacy NT driver modell NT4-ben is használatos nem igényli a PnP és PM támogatást a file-system driverek is ebben iródnak WDM modell (Windows Driver Modell) Win 9x és 2000/XP támogatás teljes mértékű PnP és PM támogatás konkrét hardvereszközök számára írnak WDM drivereket több miniport modell NDIS, SCSI, Storage etc. számára általában jóval kevesebb kódot igényelnek mint a legacy driverek minifilter modell (File System Mini-filters) FS, FS filter, registry filter driverek írását teszi lehetővé kriptográfiai szoftverek, anti-virus filterek, on-the-fly tömörítés WDF (Windows Driver Foundation) bizonyos WDM driverek egyszerűbb megírását teszi lehetővé, Vista-tól kezdődően KMDF (Kernel Mode Driver Framework), UMDF (User Mode DF) megengedi pl. a C++-ban, user módban írt USB vagy printer drivereket BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Windows driver típusok highest level drivers file system drivers (NTFS, FAT, CDFS, UDFS) intermediate level drivers function drivers megadott hardver/virtuális eszközöket vezérélnek filter drivers a fukció driverek fölé vagy alá szúrják be maguakt módosítják a bus vagy funkció driverek szerepét software bus drivers egy sor child eszközt nyújt a fukció driverek számára class drivers for class/miniport pairs egy class driver egy teljes általános eszköz családot vezérel (pl. SCSI, NDIS) minden effektív eszköz számára egy-egy miniport driver iródik, amely hardver specifikus lowest level drivers hardware bus drivers a fizikai hardver buszokat (PCI, PCI Express, ISA etc.) vezérelik legacy drivers klasszikus driverek, amelyek közvetlenül egy-egy hardvereszközt vezérelnek BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Általános NT kernel driver elvárások hordozhatóság szinte kivétel nélkül 100%-an C-ben íródnak a Windows-al csak a DDK általá támogatott interfészeken keresztül kommunikálnak konfigurálhatóság dinamikusan reagál a hardver változásaira független attól, hogy altta / fölötte hány más filter driver helyezkedik el always preemtible, always interruptible minden szál megszakítható minden ISR megszakítható egy nagyobb IRQL szinten lévő ISR által multiprocessor safe objektum alapú architektúra driver, device, file stb. objektumok csomag / kérés (packet) alapú I/O nagy mértékű aszinkron I/O támogatás BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Objektumok az Object Manager kezeli őket Driver Object Device Object minden egyes driver egy-egy objektum által van reprezentálva driver stack-et alkotnak Device Object minden egyes fizikai hardver eszköz egy-egy PDO (Physical DO, a bus driverek hozzák létre), minden egyes funkció egy-egy FDO (Functional DO) által van reprezentálva vannak Filter DO-k device stack-et alkotnak (pl. az NTFS-től a fizikai lemezig) File Object állományokat, könyvtárakat vagy olyan eszközöket reprezentálnak, amelyek támogatják a file jellegű I/O-t (read, write etc.) event, mutex, semaphore etc. szinkronizációs objektumok BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

IRP csomagok az I/O műveletek rétegezett modell szerint működnek IRP (I/O Request Packet) egy-egy I/O kérést reprezentálnak egy IRP csomagot több driver dolgozhat fel minden driver számára külön egy-egy IRP Stack Location (vagy I/O stack location) van fenntartva – ez driver specifikus információkat tartalmaz az IRP csomagokat tipikusan az I/O manager hozza létre de létre hozhatja őket egy driver is az IRP csomagoknak két irányú feldolgozása van dispatch / pre-processing – mielőtt az IRP-et effektíven végre hajtanánk completion / post-processing – miután az IRP végre hajtódott létezik nem IRP alapú I/O is, pl. a fast I/O path, amely esetén a FS driverek a cache manager és memory manager segítségével fizikai I/O kérés nélkül végezik el az adatok írását / olvasását BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Standard driver rutinok (legacy) DriverEntry egy driver belépési pontja elvégzi a driver és hardver specifikus inicializálásokat dispatch rutinok – pre-processing egy-egy függvény amely végrehajtja az I/O managertől kapott IRP kéréseket IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_WRITE… általában miután egy IRP végrehajtása során egy driver-t megfelelő dispatch függvényét meghívta a rendszer, az IRP feldolgozása átkerül a következő (a hardverhez közelebb lévő, alsóbb szintű) driverhez tipikusan PASSIVE_LEVEL IRQL szinten hívódnak meg, a hívó szál / processz kontextusában, de van jópár kivétel is I/O completion rutinok – post-processing miután egy IRP-et egy driver véglegesen végrehajt (azaz nem küldi tovább egy alsóbb szintű driverhez), az I/O manager sorra meghívja, a legalsóbb szintű drivertől a legfelsőbb szintűig minden egyes driver esetén az I/O completion rutint rendszerint tetszőleges szál / processz kontextusban és akár DPC_LEVEL szinten hivódnak meg DriverUnload egy driver leállítása során hívódik meg tipikusan deinicializálást, a lefoglalt erőforrások felszabadítását végezi el !!! ez egy nagyon minimális lista !!! BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

DPC és APC rutinok DPC – Deferred Procedure Call a megszakítás-kiszolgáló ISR rutinok kezdeményezik, mivel az ISR magas IRQL szinten fut és ezért minimális műveleteket végzi el egy DPC tetszőleges szál kontextusban fut DISPATCH_LEVEL szinten hajtja végre őket a rendszer minden processzor számára egy-egy külön DPC lista van APC – Asynchronous Procedure Call akárcsak a DPC, ez is késleltetett eljáráshívás a DPC kezdeményezésére az I/O manager hívja meg őket egy APC egy megadott szál és processz kontextusban fut minden szál esetén van egy-egy lista BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Szinkron IRP kérés végrehajtása BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Hardver megszakítás kiszolgálása BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

I/O kérések befelyezése (completion) BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Aszinkron IRP kérés végrehajtása BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver support függvények Executive – ExXXX... Hal – HalXXX... I/O Manager – IoXXX... Kernel – KeXXX... Memory Manager – MmXXX... Cache Manager – CcXXX... Object Manager – ObXXX... Power Management – PoXXX... Process Structure – PsXXX... Run-Time Library – RtlXXX... Safe String – RtlStringXXX... Security Reference Monitor – SeXXX... NT Native API driverek számára – ZwXXX... BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

NT státusz kódok 32 bites DWORD értékek, az NT kernel függvények jó része ezt téríti vissza a legrangosabb két bit határozza meg a státusz osztályát (severity) 00 – success 01 – informational 10 – warning 11 – error NT_SUCCESS(status) makró, TRUE ha sikeres végreahajtás nagyon sok státusz kód van (NTSTATUS.H), pl: STATUS_SUCCESS, STATUS_TIMEOUT, STATUS_PENDING, STATUS_REPARSE, … STATUS_OBJECT_NAME_EXISTS, STATUS_THREAD_WAS_SUSPENDED, … STATUS_NO_MORE_ENTRIES, … STATUS_UNSUCCESFULL, STATUS_NOT_IMPLEMENTED, STATUS_INVALID_HANDLE, STATUS_INVALID_PARAMETER, STATUS_ACCESS_DENIED, STATUS_INSUFFICIENT_RESOURCES, … BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

NT kernel unicode karakterláncok typedef struct _UNICODE_STRING {   USHORT   Length;   USHORT   MaximumLength;   PWSTR   Buffer; } UNICODE_STRING *PUNICODE_STRING; a kernel leginkább UNICODE_STRING karakterláncokkal dolgozik a karakterlánc mérete bájtokban van megadva különbséget kell tenni a karakterláncra mutató pointer (PUNICODE_STRING) és a karaktereket tartalmazó tömbre mutató pointer (PWSTR Buffer) között mind a kettő lehet dinamikusan allokált, sőt folytonos is az RTL taltamaz egy egész szett speciális feldolgozó függvényt BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Executive függvények ExAllocatePool, ExAllocatePoolWithTag ExFreePool, ExFreePoolWithTag ExInitializeWorkItem, ExQueueWorkItem ExIsProcessorFeaturePresent BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Kernel függvények KeInitializeSpinLock, KeAcquireSpinLock, KeReleaseSpinLock KeInitializeMutex, KeReadStateMutex, KeReleaseMutex KeWaitForSingleObject, KeWaitForMultipleObjects KeInitializeEvent, KeSetEvent, KeResetEvent KeInitializeSemaphore, KeReleaseSemaphore KeSetPriorityThread, KeGetCurrentThread KeRaiseIrql, KeLowerIrql, KeGetCurrentIrql KeQuerySystemTime, KeQueryTickCount KeGetCurrentProcessorNumber BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

I/O manager függvények IoGetRequestorProcess, IoGetRequestorProcessId IoIsOperationSynchronous IoCreateDevice, IoDeleteDevice IoCreateSymbolicLink IoQueryFileDosDeviceName IoCancelFileOpen IoGetAttachedDevice, IoGetLowerDeviceObject IoGetDiskDeviceObject IoAllocateMdl, IoFreeMdl BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Memory manager függvények MmIsAddressValid MmProbeAndLockPages, MmUnlockPages MmMapLockedPages, MmUnmapLockedPages MmQuerySystemSize BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Object manager függvények ObOpenObjectByPointer ObQueryNameString ObDereferenceObject, ObReferenceObject, ObReferenceObjectByHandle InitializeObjectAttributes BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Process management függvények PsGetCurrentThread, PsGetCurrentThreadId PsGetCurrentProcess, PsGetCurrentProcessId PsImpersonateClient PsLookupProcessByProcessId PsLookupThreadByThreadId PsCreateSystemThread, PsTerminateSystemThread PsSetCreateProcessNotifyRoutine, PsSetCreateThreadNotifyRoutine, PsSetLoadImageNotifyRoutine BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Run-time library függvények RtlCompareMemory, RtlCopyMemory, RtlFillMemory RtlCreateUnicodeString, RtlInitUnicodeString, RtlCopyUnicodeString, RtlFreeUnicodeString, RtlAppendUnicodeToString RtlAnsiStringToUnicodeString, RtlUpcaseUnicodeString, RtlUnicodeStringToInteger RtlCreateRegistryKey, RtlWriteRegistryValue RtlGetVersion, RtlIsServicePackVersionInstalled BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

NT native API kernel függvények ZwCreateFile, ZwClose, ZwReadFile, ZwWriteFile ZwQueryInformationFile, ZwSetInformationFile ZwDeleteFile, ZwDeviceIoControlFile ZwCreateSection, ZwMapViewOfSection, ZwUnmapViewOfSection ZwLoadDriver, ZwUnloadDriver ZwCreateKey, ZwQueryValueKey, ZwSetValueKey, ZwDeleteKey BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driverek fordítása 1 hagyományosan parancssorból fordítjuk a DDK/WDK alatt minden támogatott Windows verzió és minden platform (x86, x64, IA64) számára két fordítási környezet, pl. Windows XP x86 Checked Build Environment Windows XP x86 Free Build Environment parancssorból a build utasítással fordíthatunk build . – normal build build . -cZ – rebuild all a fordítás számára szükségünk van három speciális állományra DIRS – meghatározza, hogy milyen könyvtárakat kell bejárni a fordítás során SOURCES – minden könyvtárban egy-egy; meghatározza, hogy milyen állományokat kell lefordítani és a fordítás paramétereit MAKEFILE – standard makefile a DDK-ból BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driverek fordítása 2 DIRS SOURCES src SOURCES TARGETPATH=..\bin MSC_WARNING_LEVEL=/W4 /WX /FR TARGETNAME=sumdriver TARGETTYPE=DRIVER C_DEFINES=$(C_DEFINES) -DUNICODE -D_UNICODE SOURCES=driver.c \ irpmj.c \ debug.c \ sumdriver.rc gyakran a fordítást a Visual Studio-ba integráljuk, mint makefile projekt – ilyen esetben jól fog a DDKBUILD.BAT is BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver projekt készítése VS2005 alatt 1 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver projekt készítése VS2005 alatt 2 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver projekt készítése VS2005 alatt 3 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver projekt készítése VS2005 alatt 4 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Driver projekt készítése VS2005 alatt 5 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Debug üzenetek kiíratása // debug log related macros #define ExKdPrint(what) { \ KdPrint(("%15s, %4d, %s: ", (strlen(__FILE__)<15)? (__FILE__):(&__FILE__[strlen(__FILE__)-15]), __LINE__, __FUNCTION__)); \ KdPrint(what); \ } DbgView-el lehet figyelni őket háttérben a DDK által nyújtott DbgPrint() függvény áll nagyon hasonlít a printf() függvényre, csak nem konzolra ír BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Egy minimális driver szerkezete csak DriverEntry és DriverUnload initializálás és deinicializálás jó kezdeti példa egyszerű forráskód szerkezet driverver.h – driver verzió konstansok, külön állományban; leegyszerűsíti a build number increment megoldásokat driver.h – általános definíciók prototypes.h – függvény prototipusok driver.c – általános driver függvények ez a szerkezet könnyen bővíthető BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Globális adatok typedef struct _DRV_GLOBAL_DATA { // DRV specific fields PDRIVER_OBJECT DriverObject; PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName; } DRV_GLOBAL_DATA, *PDRV_GLOBAL_DATA; extern DRV_GLOBAL_DATA DrvGlobalData; BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

DriverEntry NTSTATUS DriverEntry(__in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath) { ExKdPrint(("try to load driver %d.%d.%d build %d\n", DRV_HIVERSION, DRV_LOVERSION, ... )); RtlZeroMemory(&DrvGlobalData, sizeof(DRV_GLOBAL_DATA)); DrvGlobalData.DriverObject = DriverObject; // get DriverObject into global data RtlInitUnicodeString(&(DrvGlobalData.DeviceName), DEVICE_NAME); // create the main device object status = IoCreateDevice( DriverObject, 0, &DrvGlobalData.DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DrvGlobalData.DeviceObject ); if (!NT_SUCCESS(status)) ExKdPrint((" DriverEntry - error loading driver\n")); return status; } DrvGlobalData.DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING; // clear DO_DEVICE_INITIALIZING DrvGlobalData.DriverObject->DriverUnload = DriverUnload; // setup unload routine BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

DriverUnload VOID DriverUnload(__in PDRIVER_OBJECT DriverObject) { PAGED_CODE(); UNREFERENCED_PARAMETER(DriverObject); ExKdPrint(("try to unload driver\n")); // delete main device object IoDeleteDevice(DrvGlobalData.DeviceObject); ExKdPrint(("...GAME OVER!\n")); } BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

A driver fordítása ------ Rebuild All started: Project: emptydriver, Configuration: Debug Win32 ------ Performing Makefile project actions OSR DDKBUILD.BAT V6.9 - OSR, Open Systems Resources, Inc. WLH 32 BIT BUILD using WLH DDK build in directory . with arguments -cZ (basedir C:\DDK.5384) run build -Ze -cZ for checked version in . BUILD: Compile and Link for x86 ... build complete building browse information files POSTBUILD - XP x86 32 bit build with Longhorn WDK... 1 file(s) copied. Build log was saved at "file://c:\Projects\phd\asm 2 kurzus\11. Windows NT driverek fejlesztese I\emptydriver\Debug\BuildLog.htm" emptydriver - 0 error(s), 0 warning(s) ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

A driver regisztálása és indítása előzőleg be kell másolni a System32\Drivers könyvtárba ezt lokális rendszeren elvégez-heti egy post-build szkript is az OSR Loader-el lehet... egy driver-t regisztrálni, deregisztrálni a registry-be Service start: DEMAND egy, már regisztált drivert indítani illetve leállítani megnézni a futó driverek / servic-ek listáját BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

A driver végrehajtásának követése DbgView-el könnyen elvégezhető indítsuk el mielőtt a drivert indítanánk jól fog az Options | Force Carriage Returns opció lehet az üzeneteket filterelni és szinezni (highlight) BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Köszönöm a figyelmet! BBTE, Alkalmazások és operációs rendszerek optimizálása 2006