Скачать презентацию Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Alkalmazások és operációs rendszerek Скачать презентацию Babeş-Bolyai Tudományegyetem Matematika-Informatika Kar Alkalmazások és operációs rendszerek

533eec1db40d07cf3a0a77b83a370f5e.ppt

  • Количество слайдов: 43

„Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Alkalmazások és operációs rendszerek optimizálása 8 Windows NT driverek fejlesztése „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Alkalmazások és operációs rendszerek optimizálása 8 Windows NT driverek fejlesztése előadás dr. Robu Judit szeminárium drd. Lukács Sándor 2006 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

CRK Copyright / Felhasznált anyag 2 ¢ a prezentáció részben felhasználja a Windows Operating CRK Copyright / Felhasznált anyag 2 ¢ a prezentáció részben felhasználja a Windows Operating System Internals Curriculum Resource Kit-ben található prezentációkat l az eredeti anyagot David A. Solomon, Mark E. Russinovich és Andreas Polze készítették l a Microsoft licenszelte az anyagot és szabadon felhasználhatóvá tette akadémiai környezetben a MSDNAA / CRK keretében l a teljes licensz megtalálható a következő címen: • http: //www. msdnaa. net/curriculum/license_curriculum. aspx l ¢ 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 l [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 3 ¢ Visual Studio 6 / 2005 l ¢ csak Driver fejlesztői eszközök 1 3 ¢ Visual Studio 6 / 2005 l ¢ csak a C/C++ IDE fontos, a kompiler más driver fejlesztői és tesztelési kitek l Driver Development Kit (DDK, 3790) • • l Windows 2000, XP (32 / 64 bit) , 2003 (32 / 64 bit) szabadon letölthető a Microsoft weblapjáról Visual Studio 6 SP 5 -ö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 SP 1 számára) l 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ő l Windows Driver Kit (WDK, 6000 RTM) • • Windows 2000, XP, 2003 R 2, 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 4 ¢ DDKBUILD. BAT l ¢ Osr. Loader l ¢ Driver fejlesztői eszközök 2 4 ¢ DDKBUILD. BAT l ¢ Osr. Loader l ¢ l a teljes NT objktum névteret (objet namespace) láthatóvá teszi Reg. Mon / File. Mon l ¢ a device és driver objektumokat és azok hierarchikus kapcsolatát lehet böngészni vele Win. Obj l ¢ a WDK része, statikus C forráskód ellemző erőteljesebbek szűri ki a hibákat, mint a C fordító Device. Tree l ¢ lehetővé teszi a debug / trace üzenetek nyomon kötevését, akár remote számítógépről is Pre. FAST l ¢ egy, a Task Manager-t helyettesitő, sokkal erőteljesebb processz manager Dbg. View l ¢ nyomon követi a paged/non-paged kernel memória allokálását Process. Explorer l ¢ lehetővé teszi a driverek gyors regisztrálását és indítását/leállítását Pool. Tag l ¢ megkönnyíti a driverek fordítását különböző platformok számára nyomon követi a Windows Registry és a Windows FS I/O műveleteit Windows Debugging Tools – Win. DBG l 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 5 ¢ a DDK / WDK help kitűnő referencia l ¢ Driver fejlesztési dokumentációk 5 ¢ a DDK / WDK help kitűnő referencia l ¢ http: //www. microsoft. com/whdc/winhec/default. mspx l ¢ l l ¢ NT Insider, példák, cikkek NTDEV, NTFSD, WINDBG fórumok fejlesztői eszközök www. sysinternals. com l ¢ prezentációk, cikkek www. osronline. com l ¢ rengeteg kész példát is tartalmaz fejlesztői eszközök Mark Russinovich, David Solomon – Microsoft Windows Internals, 4 th edition, Microsoft Press, 2004 Walter Oney – Programming the Windows Driver Model, 2 nd edition, Microsoft Press, 2003 BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

Windows driver modellek, kategóriák 6 ¢ Legacy NT driver modell l ¢ WDM modell Windows driver modellek, kategóriák 6 ¢ Legacy NT driver modell l ¢ WDM modell (Windows Driver Modell) l l l ¢ l 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) l l ¢ Win 9 x és 2000/XP támogatás teljes mértékű Pn. P és PM támogatás konkrét hardvereszközök számára írnak WDM drivereket több miniport modell l ¢ NT 4 -ben is használatos nem igényli a Pn. P és PM támogatást a file-system driverek is ebben iródnak 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) l l l 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 7 ¢ highest level drivers l ¢ file system drivers (NTFS, Windows driver típusok 7 ¢ highest level drivers l ¢ file system drivers (NTFS, FAT, CDFS, UDFS) intermediate level drivers l function drivers • megadott hardver/virtuális eszközöket vezérélnek l 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 l software bus drivers • egy sor child eszközt nyújt a fukció driverek számára l 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 l hardware bus drivers • a fizikai hardver buszokat (PCI, PCI Express, ISA etc. ) vezérelik l 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 8 ¢ hordozhatóság l l ¢ konfigurálhatóság l l Általános NT kernel driver elvárások 8 ¢ hordozhatóság l l ¢ konfigurálhatóság l l ¢ ¢ minden szál megszakítható minden ISR megszakítható egy nagyobb IRQL szinten lévő ISR által multiprocessor safe objektum alapú architektúra l ¢ 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 l ¢ 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 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 9 ¢ ¢ az Object Manager kezeli őket Driver Object l l ¢ Objektumok 9 ¢ ¢ az Object Manager kezeli őket Driver Object l l ¢ Device Object l l l ¢ 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 l ¢ minden egyes driver egy-egy objektum által van reprezentálva driver stack-et alkotnak á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. l szinkronizációs objektumok BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

IRP csomagok 10 ¢ ¢ az I/O műveletek rétegezett modell szerint működnek IRP (I/O IRP csomagok 10 ¢ ¢ az I/O műveletek rétegezett modell szerint működnek IRP (I/O Request Packet) l ¢ egy IRP csomagot több driver dolgozhat fel l ¢ de létre hozhatja őket egy driver is az IRP csomagoknak két irányú feldolgozása van l l ¢ 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 l ¢ egy-egy I/O kérést reprezentálnak 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) 11 ¢ Driver. Entry l l ¢ dispatch rutinok – Standard driver rutinok (legacy) 11 ¢ Driver. Entry l l ¢ dispatch rutinok – pre-processing l l ¢ l 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 Driver. Unload l l ¢ 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 l ¢ egy driver belépési pontja elvégzi a driver és hardver specifikus inicializálásokat 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

12 ¢ ¢ DPC és APC rutinok DPC – Deferred Procedure Call l a 12 ¢ ¢ DPC és APC rutinok DPC – Deferred Procedure Call l 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 l egy DPC tetszőleges szál kontextusban fut l DISPATCH_LEVEL szinten hajtja végre őket a rendszer l minden processzor számára egy-egy külön DPC lista van APC – Asynchronous Procedure Call l akárcsak a DPC, ez is késleltetett eljáráshívás l a DPC kezdeményezésére az I/O manager hívja meg őket l egy APC egy megadott szál és processz kontextusban fut l minden szál esetén van egy-egy lista BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

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

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

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

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

17 ¢ ¢ ¢ ¢ Driver support függvények Executive – Ex. XXX. . . 17 ¢ ¢ ¢ ¢ Driver support függvények Executive – Ex. XXX. . . Hal – Hal. XXX. . . I/O Manager – Io. XXX. . . Kernel – Ke. XXX. . . Memory Manager – Mm. XXX. . . Cache Manager – Cc. XXX. . . Object Manager – Ob. XXX. . . Power Management – Po. XXX. . . Process Structure – Ps. XXX. . . Run-Time Library – Rtl. XXX. . . Safe String – Rtl. String. XXX. . . Security Reference Monitor – Se. XXX. . . NT Native API driverek számára – Zw. XXX. . . BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

NT státusz kódok 18 ¢ ¢ 32 bites DWORD értékek, az NT kernel függvények NT státusz kódok 18 ¢ ¢ 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) l l ¢ ¢ 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: l l 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

19 ¢ ¢ ¢ NT kernel unicode karakterláncok typedef struct _UNICODE_STRING { USHORT Length; 19 ¢ ¢ ¢ NT kernel unicode karakterláncok typedef struct _UNICODE_STRING { USHORT Length; USHORT Maximum. Length; 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 l 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

20 Executive függvények Ex. Allocate. Pool, Ex. Allocate. Pool. With. Tag ¢ Ex. Free. 20 Executive függvények Ex. Allocate. Pool, Ex. Allocate. Pool. With. Tag ¢ Ex. Free. Pool, Ex. Free. Pool. With. Tag ¢ Ex. Initialize. Work. Item, Ex. Queue. Work. Item ¢ Ex. Is. Processor. Feature. Present ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

21 ¢ ¢ ¢ ¢ ¢ Kernel függvények Ke. Initialize. Spin. Lock, Ke. Acquire. 21 ¢ ¢ ¢ ¢ ¢ Kernel függvények Ke. Initialize. Spin. Lock, Ke. Acquire. Spin. Lock, Ke. Release. Spin. Lock Ke. Initialize. Mutex, Ke. Read. State. Mutex, Ke. Release. Mutex Ke. Wait. For. Single. Object, Ke. Wait. For. Multiple. Objects Ke. Initialize. Event, Ke. Set. Event, Ke. Reset. Event Ke. Initialize. Semaphore, Ke. Release. Semaphore Ke. Set. Priority. Thread, Ke. Get. Current. Thread Ke. Raise. Irql, Ke. Lower. Irql, Ke. Get. Current. Irql Ke. Query. System. Time, Ke. Query. Tick. Count Ke. Get. Current. Processor. Number BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

22 ¢ ¢ ¢ ¢ ¢ I/O manager függvények Io. Get. Requestor. Process, Io. 22 ¢ ¢ ¢ ¢ ¢ I/O manager függvények Io. Get. Requestor. Process, Io. Get. Requestor. Process. Id Io. Is. Operation. Synchronous Io. Create. Device, Io. Delete. Device Io. Create. Symbolic. Link Io. Query. File. Dos. Device. Name Io. Cancel. File. Open Io. Get. Attached. Device, Io. Get. Lower. Device. Object Io. Get. Disk. Device. Object Io. Allocate. Mdl, Io. Free. Mdl BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

23 Memory manager függvények Mm. Is. Address. Valid ¢ Mm. Probe. And. Lock. Pages, 23 Memory manager függvények Mm. Is. Address. Valid ¢ Mm. Probe. And. Lock. Pages, Mm. Unlock. Pages ¢ Mm. Map. Locked. Pages, Mm. Unmap. Locked. Pages ¢ Mm. Query. System. Size ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

24 ¢ ¢ ¢ Object manager függvények Ob. Open. Object. By. Pointer Ob. Query. 24 ¢ ¢ ¢ Object manager függvények Ob. Open. Object. By. Pointer Ob. Query. Name. String Ob. Dereference. Object, Ob. Reference. Object. By. Handle Initialize. Object. Attributes BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

25 ¢ ¢ ¢ ¢ Process management függvények Ps. Get. Current. Thread, Ps. Get. 25 ¢ ¢ ¢ ¢ Process management függvények Ps. Get. Current. Thread, Ps. Get. Current. Thread. Id Ps. Get. Current. Process, Ps. Get. Current. Process. Id Ps. Impersonate. Client Ps. Lookup. Process. By. Process. Id Ps. Lookup. Thread. By. Thread. Id Ps. Create. System. Thread, Ps. Terminate. System. Thread Ps. Set. Create. Process. Notify. Routine, Ps. Set. Create. Thread. Notify. Routine, Ps. Set. Load. Image. Notify. Routine BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

26 ¢ ¢ ¢ Run-time library függvények Rtl. Compare. Memory, Rtl. Copy. Memory, Rtl. 26 ¢ ¢ ¢ Run-time library függvények Rtl. Compare. Memory, Rtl. Copy. Memory, Rtl. Fill. Memory Rtl. Create. Unicode. String, Rtl. Init. Unicode. String, Rtl. Copy. Unicode. String, Rtl. Free. Unicode. String, Rtl. Append. Unicode. To. String Rtl. Ansi. String. To. Unicode. String, Rtl. Upcase. Unicode. String, Rtl. Unicode. String. To. Integer Rtl. Create. Registry. Key, Rtl. Write. Registry. Value Rtl. Get. Version, Rtl. Is. Service. Pack. Version. Installed BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

27 NT native API kernel függvények Zw. Create. File, Zw. Close, Zw. Read. File, 27 NT native API kernel függvények Zw. Create. File, Zw. Close, Zw. Read. File, Zw. Write. File ¢ Zw. Query. Information. File, Zw. Set. Information. File ¢ Zw. Delete. File, Zw. Device. Io. Control. File ¢ Zw. Create. Section, Zw. Map. View. Of. Section, Zw. Unmap. View. Of. Section ¢ Zw. Load. Driver, Zw. Unload. Driver ¢ Zw. Create. Key, Zw. Query. Value. Key, Zw. Set. Value. Key, Zw. Delete. Key ¢ BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

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

29 ¢ Driverek fordítása 2 DIRS= ¢  src SOURCES TARGETPATH=. . bin MSC_WARNING_LEVEL=/W 29 ¢ Driverek fordítása 2 DIRS= ¢ src SOURCES TARGETPATH=. . bin MSC_WARNING_LEVEL=/W 4 /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

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

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

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

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

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

Debug üzenetek kiíratása 35 // debug log related macros #define Ex. Kd. Print(what) { Debug üzenetek kiíratása 35 // debug log related macros #define Ex. Kd. Print(what) { Kd. Print(("%15 s, %4 d, %s: ", (strlen(__FILE__)<15)? (__FILE__): (&__FILE__[strlen(__FILE__)-15]), __LINE__, __FUNCTION__)); Kd. Print(what); } ¢ ¢ Dbg. View-el lehet figyelni őket háttérben a DDK által nyújtott Dbg. Print() függvény áll l 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 36 ¢ csak Driver. Entry és Driver. Unload l l Egy minimális driver szerkezete 36 ¢ csak Driver. Entry és Driver. Unload l l ¢ egyszerű forráskód szerkezet l l ¢ initializálás és deinicializálás jó kezdeti példa 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

37 Globális adatok typedef struct _DRV_GLOBAL_DATA { // DRV specific fields PDRIVER_OBJECT Driver. Object; 37 Globális adatok typedef struct _DRV_GLOBAL_DATA { // DRV specific fields PDRIVER_OBJECT Driver. Object; PDEVICE_OBJECT Device. Object; UNICODE_STRING Device. Name; } DRV_GLOBAL_DATA, *PDRV_GLOBAL_DATA; extern DRV_GLOBAL_DATA Drv. Global. Data; BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

38 Driver. Entry NTSTATUS Driver. Entry(__in PDRIVER_OBJECT Driver. Object, __in PUNICODE_STRING Registry. Path) { 38 Driver. Entry NTSTATUS Driver. Entry(__in PDRIVER_OBJECT Driver. Object, __in PUNICODE_STRING Registry. Path) { Ex. Kd. Print(("try to load driver %d. %d build %dn", DRV_HIVERSION, DRV_LOVERSION, . . . )); Rtl. Zero. Memory(&Drv. Global. Data, sizeof(DRV_GLOBAL_DATA)); Drv. Global. Data. Driver. Object = Driver. Object; // get Driver. Object into global data Rtl. Init. Unicode. String(&(Drv. Global. Data. Device. Name), DEVICE_NAME); // create the main device object status = Io. Create. Device( Driver. Object, 0, &Drv. Global. Data. Device. Name, FILE_DEVICE_UNKNOWN, 0, FALSE, &Drv. Global. Data. Device. Object ); if (!NT_SUCCESS(status)) { Ex. Kd. Print((" Driver. Entry - error loading drivern")); return status; } Drv. Global. Data. Device. Object->Flags &= ~DO_DEVICE_INITIALIZING; // clear DO_DEVICE_INITIALIZING Drv. Global. Data. Driver. Object->Driver. Unload = Driver. Unload; // setup unload routine return status; BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

39 Driver. Unload VOID Driver. Unload(__in PDRIVER_OBJECT Driver. Object) { PAGED_CODE(); UNREFERENCED_PARAMETER(Driver. Object); Ex. 39 Driver. Unload VOID Driver. Unload(__in PDRIVER_OBJECT Driver. Object) { PAGED_CODE(); UNREFERENCED_PARAMETER(Driver. Object); Ex. Kd. Print(("try to unload drivern")); // delete main device object Io. Delete. Device(Drv. Global. Data. Device. Object); Ex. Kd. Print((". . . GAME OVER!n")); } BBTE, Alkalmazások és operációs rendszerek optimizálása 2006

40 A driver fordítása ------ Rebuild All started: Project: emptydriver, Configuration: Debug Win 32 40 A driver fordítása ------ Rebuild All started: Project: emptydriver, Configuration: Debug Win 32 -----Performing Makefile project actions OSR DDKBUILD. BAT V 6. 9 - OSR, Open Systems Resources, Inc. WLH 32 BIT BUILD using WLH DDK build in directory. with arguments -c. Z (basedir C: DDK. 5384) run build -Ze -c. Z for checked version in. BUILD: Compile and Link for x 86. . . build complete building browse information files POSTBUILD - XP x 86 32 bit build with Longhorn WDK. . . 1 file(s) copied. Build log was saved at "file: //c: Projectsphdasm 2 kurzus11. Windows NT driverek fejlesztese IemptydriverDebugBuild. Log. 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 41 ¢ előzőleg be kell másolni a System 32Drivers A driver regisztálása és indítása 41 ¢ előzőleg be kell másolni a System 32Drivers könyvtárba l ¢ ezt lokális rendszeren elvégezheti egy post-build szkript is az OSR Loader-el lehet. . . l egy driver-t regisztrálni, deregisztrálni a registry-be • Service start: DEMAND l l 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 42 ¢ Dbg. View-el könnyen elvégezhető l ¢ ¢ indítsuk A driver végrehajtásának követése 42 ¢ Dbg. View-el könnyen elvégezhető l ¢ ¢ 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

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