11. Implementace ovladače ve Windows

Podobné dokumenty
Metody připojování periferií

Metody připojování periferií

Ovladače pro Windows. Ovladače Windows A4M38KRP. Str. 1

P D S - 5 P. Psychologický diagnostický systém. Instalační manuál. Popis instalace a odinstalace programu Popis instalace USB driverů

Nastavení připojení k internetu prostřednictvím terminálu Axesstel TX210LF platí pro Windows 98 SE (Second Edition) a Windows ME (Millenium Edition)

5. Čtení/zápis sektorů z/do USB paměťového média I

Návod k aktualizaci firmwaru pro Web Server OZW a OZW772...

Instalační průvodce pro EasyGate UMTS Data

JetFlash Uživatelský Manuál

USB PARALLEL PRINTER ADAPTER

Stručný Průvodce (Čeština)

2015 GEOVAP, spol. s r. o. Všechna práva vyhrazena.

Uživatelská příručka

Programování v jazyce C a C++

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Rocrail. Nejprve: Obecný úvod. Instalace

Operační systémy. Cvičení 4: Programování v C pod Unixem

Návod na použití Konfigurační softvér DJ LCD config v1.3

Motorola Phone Tools. Začínáme

ZAŘÍZENÍ PRO ČTENÍ KARET TRUST 630 USB 2.0. Návod k prvnímu použití zařízení

OBD II kabel Fast KKL - USB, komp. s VAG-COM instalace ovladače pro Windows

Střední úložiště. Uživatelská dokumentace Zřízení přístupu

Vývoj ovladačů jádra

PT Instalace programového vybavení

Value Adaptér USB -> telefon (RJ11) Katalogové číslo: Typ: EzSKY050

PROGRAM AZA Control návod k použití

Pokladna CHD - Jak nainstalovat USB ovladač CHD7

Kapitola 1: Úvod. 1.1 Obsah balení. 1.2 Požadavky na systém. Česky

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Instalace webové služby Mydlinka

Certifikační autorita EET Modelové postupy vytvoření souboru žádosti o certifikát

Nastavení DCOM. Uživatelský manuál

Děkujeme Vám za zakoupení HSPA USB modemu Huawei E1750. Pomocí něj se můžete připojit k vysokorychlostnímu internetu.

Ovládací panel. Barevná multifunkční tiskárna Xerox AltaLink C8030/C8035/C8045/C8055/C8070

Abstraktní datové typy: zásobník

FilmScan35 I. Uživatelská příručka

STRUč Ná Př íruč KA pro Windows Vista

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Návod k zapojení Bluetooth MIDI

Téma 10: Správa hardwarových zařízení a ovladačů II

Informace o bezpečnosti

Konstruktory a destruktory

Řada Prestige 630-C. ADSL USB Modem. Příručka pro rychlou orientaci

Stručný Průvodce (Čeština)

Návod k aktualizaci firmwaru pro Web Server OZW672..., OZW772 a OCI670

Αlpha 8 instalace a upgrade. Poznámky k instalaci Αlpha V8, Logical Medical Systems. GENNET s.r.o Kostelní Praha 7

Téma 8: Konfigurace počítačů se systémem Windows 7 IV

STATISTICA 9 Postup instalace plovoucí síťové verze na terminálovém serveru a Citrixu

Patrol Management System 2.0

Návod k použití pro telefon Nokia E52 pro službu viphone break

Funkce verze Premium

Instalace webové služby Mydlinka

U3000/U3100 Mini. (Pro počítač Eee PC s operačním systémem Linux) Stručná příručka

Základy programování (IZP)

Interface LPG / CNG Bluetooth. Instrukce k instalaci a konfiguraci zařízení v1.0 cz. U rozhraní bluetooth není instalace ovladače potřebná.

Základy programování (IZP)

Změna USB driveru. Návod, jak změnit typ nainstalovaného USB driveru. 21. března 2006 w w w. p a p o u c h. c o m

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Spuštění instalace. nastavení boot z cd v BIOSu vložení CD s instal. médiem spuštění PC. nastavení parametrů instalace (F2 čěština)

Uživatelský manuál. A3600 DL ( Data Download)

Gluco Diary Elektronický diář měření krevní glukózy

STRUČNÝ PRŮVODCE (ČEŠTINA)

Roury a zprávy Mgr. Josef Horálek

Manuál. i-tec Display over Ethernet Adapter (DoIP) LAN2DVI

Management procesu I Mgr. Josef Horálek

Česky. Informace o bezpečnosti. UPOZORNĚNÍ: Neinstalujte tento produkt ani neprovádějte žádná zapojení kabelů (napájení atd.) za bouřky.

INSTALACE SOFTWARE A AKTIVACE PRODUKTU NÁVOD

Požadavky pro konfiguraci internetového připojení

SB485, SB232. Průmyslové převodníky USB na RS485, RS422 a RS232. S galvanickým oddělením

IUJCE 07/08 Přednáška č. 6

Instalační manuál pixel-fox

Firmware USBasp pro modul AVRUSB. Milan Horkel. Parametr Hodnota Poznámka. Rozhraní USB Low Speed. Procesor ATmega8 ATmega88 Varianty překladu

USB komunikační adaptér RS virtuální sériový port ELO E215. Uživatelský manuál

Základní programové vybavení počítače

C2110 Operační systém UNIX a základy programování

SB485. Převodník rozhraní USB na linku RS485 nebo RS422. s galvanickým oddělením. Převodník SB485. RS485 nebo RS422 USB. přepínače PWR TXD RXD

FIREMNÍ CERTIFIKÁT V APLIKACI PŘÍMÝ KANÁL NÁVOD PRO KLIENTY

Metody připojování periferií BI-MPP Přednáška 2

Tužka s kamerou EKONOMY, 720x480px

M4 PDF rozšíření. Modul pro PrestaShop.

Metody připojování periferií

Česká verze. Doporučení. Obsah balení. Zapojení. SC016 Sweex 7.1 externí USB zvuková karta

Roline USB 2.0 elektronický přepínač 2:1 (4:1)

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 8

Jak obnovit ztraceny dokumentu

ŘADA LASERJET ENTERPRISE M4555 MFP. Průvodce instalací softwaru

IM Instalace síťové verze SprutCAM. 1Nastavení serveru Vlastní instalace serveru...2 3Nastavení uživatelského počítače...

Uživatelská příručka Autor: Martin Fiala

2.1.2 V následujícím dialogovém okně zvolte Instalovat ze seznamu či daného umístění. stiskněte tlačítko Další

Více o konstruktorech a destruktorech

StoreJet 25 mobile. Uživatelská příručka

Návod pro připojení telefonu Nokia 3650 přes IrDA pro Windows 2000/XP instalace programu PC Suite a modemu (GPRS)

D7 Uživatelský manuál Konfigurace klientských stanic

Automatický přenos dat z terminálů BM-Finger

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

SA765_d-01 strana 1 z 6. Návod k obsluze USB 100 SL. konvertor rozhraní

STATISTICA 10 Postup instalace plovoucí síťové verze s odpojováním licencí (BNET)

Program. Uživatelská příručka. Milan Hradecký

IPFW. Aplikace pro ovládání placeného připojení k Internetu. verze 1.1

Value USB telefon pro Skype Katalogové číslo:

Transkript:

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 1 z 6 11. Implementace ovladače ve Windows Náplň cvičení V tomto cvičení se naučíte napsat ovladač zařízení pro operační systém Windows. Úkol Ovladač USB zařízení pro Linux přepište do podoby ovladače pro Windows včetně ovládací aplikace na straně PC. Obsah 11. Implementace ovladače ve Windows Náplň cvičení Úkol Návod Hlavičkové soubory Vsupní bod ovladače Funkce EvtDriverDeviceAdd Překlad ovladače Přidání nového zařízení Registrace souborového rozhraní ovladače Zpětná volání pro souborové operace Návod Hlavičkové soubory Ovladač začněte vložením požadovaných hlavičkových souborů do zdrojového souboru #include <ntddk.h> #include <wdf.h> #include <initguid.h> #include <stdlib.h> #include <ntstrsafe.h> Vsupní bod ovladače

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 2 z 6 Dále vytvořte vstupní bod ovladače NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPat { WDF_DRIVER_CONFIG config; WDF_OBJECT_ATTRIBUTES attributes; DbgPrint("MPP: DriverEntry - begin\n"); // Inicializace argumentů nezbytných pro vytvoření // instance ovladače. WDF_OBJECT_ATTRIBUTES_INIT(&attributes); WDF_DRIVER_CONFIG_INIT( &config, EvtDriverDeviceAdd ); // // Vytvoření instance ovladače // status = WdfDriverCreate(DriverObject, RegistryPath, &attributes, &config, WDF_NO_HANDLE); DbgPrint("MPP: DriverEntry - end (status: %d)\n", status); Funkce EvtDriverDeviceAdd Napište funkci EvtDriverDeviceAdd, která bude volána pokaždé, když je nové zařízení připojeno do systému (obdoba funkce probe v Linuxu). NTSTATUS EvtDriverDeviceAdd (IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit) { DbgPrint("MPP: EvtDriverDeviceAdd - begin\n"); // tělo funkce v tomto místě doplníme později return STATUS_SUCCESS; Překlad ovladače Pro překlad ovladače vytvořte soubor makefile s následujícím obsahem!include $(NTMAKEENV)\makefile.def a soubor SOURCES TARGETNAME=mpp TARGETTYPE=DRIVER KMDF_VERSION_MAJOR=1 MSC_WARNING_LEVEL=/W4 /WX INF_NAME=mpp NTTARGETFILE0=$(OBJ_PATH)\$(O)\$(INF_NAME).inf

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 3 z 6 MISCFILES=$(NTTARGETFILE0) C_DEFINES= SOURCES=mpp.c Dále nakopírujte vzorový soubor mpp.idx spolu s makefile a SOURCES ke zdrojovému souboru. V hlavním menu Start vyberte Všechny programy Windows Driver Kits WDK 7600.16385.1 Build Environments Windows XP a otevřte tak terminálové okno se všemi potřebnými nastaveními pro překlad. V tomto okně příkazem cd přejděte do adresáře se zdrojovými soubory. Napište příkaz build a vyčkejte dokončení překladu. Ovladač nainstalujte z nabídky Ovladací panely Přidat hardware nebo použijte program devcon. Využijte inf souboru, který se vytvořil během překladu. Otevřete Ovladací panely System Správce zařízení a ovladač vyhledejte. Dále spusťte program DbgView, kterým zobrazíte ladící zprávy jádra. Přidání nového zařízení NTSTATUS EvtDriverDeviceAdd (IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit) { WDFDEVICE device; PCWSTR systemdevicenamestr = L"\\Device\\mpp0"; UNICODE_STRING systemdevicename; DbgPrint("MPP: EvtDriverDeviceAdd - begin\n"); // Vytvoř systémové jméno pro zařázení DbgPrint("System device name: %ws\n", systemdevicenamestr); RtlInitUnicodeString(&systemDeviceName, systemdevicenamestr); // Přiřaď zařízení systémové jméno status = WdfDeviceInitAssignName(DeviceInit,&systemDeviceName); if (!NT_SUCCESS(status)) { // Vytvoř instanci zařízení status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &device); return STATUS_SUCCESS; Registrace souborového rozhraní ovladače NTSTATUS EvtDriverDeviceAdd (IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit) { WDF_IO_QUEUE_CONFIG ioqueueconfig; WDFQUEUE hqueue; WDFDEVICE device; PCWSTR systemdevicenamestr = L"\\Device\\mpp0";

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 4 z 6 PCWSTR devicefilenamestr = L"\\DosDevices\\mpp"; UNICODE_STRING systemdevicename; UNICODE_STRING devicefilename; DbgPrint("System device name: %ws\n", systemdevicenamestr); RtlInitUnicodeString(&systemDeviceName, systemdevicenamestr); status = WdfDeviceInitAssignName(DeviceInit,&systemDeviceName); if (!NT_SUCCESS(status)) { // Nastav způsob předávání dat mezi uživatelským paměťovým // prostorem a paměťovým prostorem jádra při // voláních souborových operací z aplikace. // Nastavuje na WdfDeviceIoBuffered, což znamená, že data se z uživatelského // prostoru překopírují do operačním systémem vyhrazeného // bufferu v prostoru jádra. Jednoduchý, ale pomalejší způsob. WdfDeviceInitSetIoType(DeviceInit, WdfDeviceIoBuffered); // Vytvoření instance nového zařízení status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &device); // Registrace souborového rozhraní, kterým se bude zařízení prezentovat aplikacím // Zavedli jsme nový typ DEVINTERFACE_FIT. Interface je reprezentován // námi vytvořeným GUID GUID GUID_DEVINTERFACE_FIT = { 0x5781faab, 0x0434, 0x48bb, { 0x89, 0x5c, 0xba, 0 status = WdfDeviceCreateDeviceInterface(device, &GUID_DEVINTERFACE_FIT, NULL); // Z důvodu kompatibility a snadnějšímu přístupu k ovladači ze strany aplikace vy // DOSově kompatibilní jméno souboru pro ovladač DbgPrint("MPP: Device filename: %ws\n", devicefilenamestr); RtlInitUnicodeString(&deviceFilename, devicefilenamestr); status = WdfDeviceCreateSymbolicLink(device, &devicefilename); if (!NT_SUCCESS(status)) { // Inicializuj V/V frontu, přes kterou budeme dostávat události // od aplikace. WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&ioQueueConfig, WdfIoQueueDispatchSequential); // Definuj zpětná volání pro souborové operace ioqueueconfig.evtiodefault = EvtIoDefault; ioqueueconfig.evtioread = EvtIoRead; ioqueueconfig.evtiowrite = EvtIoWrite;

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 5 z 6 ioqueueconfig.evtiodevicecontrol = EvtIoControl; // Registruj V/V frontu status = WdfIoQueueCreate(device, &ioqueueconfig, WDF_NO_OBJECT_ATTRIBUTES, &hqueue); Zpětná volání pro souborové operace EvtIoDeafault // Implicitni callback pro V/V události void EvtIoDefault(IN WDFQUEUE Queue, IN WDFREQUEST Request) { DbgPrint("IO Default"); EvtIoControl void EvtIoControl(IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t OutputBufferLength, IN size_t InputBufferLength, IN ULONG IoControlCode) { int r; int* ibuf; PVOID obuf; size_t isize; size_t osize; r = WdfRequestRetrieveInputBuffer(Request, InputBufferLength, &ibuf, &isize); r = WdfRequestRetrieveOutputBuffer(Request, OutputBufferLength, &obuf, &osize); DbgPrint("EvtIoDeviceControl[ibuflen: %d, obuflen: %d, ioc: %d]\n", InputBufferLength, OutputBufferLength, IoControlCode);

BI-MPP Cvičení 11 - Ovladače (Windows), Miroslav Skrbek (C)2010,2011 6 z 6 switch (IoControlCode) { case 100: // zde doplňte funkcionalitu pro I/O Control Code 100 WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, l); break; case 101: // zde doplňte funkcionalitu pro I/O Control Code 100 WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, l); break; default: EvtIoRead // Callback pro operaci čtení (read) void EvtIoRead(IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t Length) { int r; PVOID buf; size_t size; DbgPrint("EvtIoRead"); r = WdfRequestRetrieveOutputBuffer(Request, Length, &buf, &size); return // zde doplňte požadovanou funkcionalitu WdfRequestCompleteWithInformation(Request, STATUS_SUCCESS, size); EvtIoWrite // Callback pro operaci zapisu (write) void EvtIoWrite(IN WDFQUEUE Queue, IN WDFREQUEST Request, IN size_t Length) { int r; PVOID buf; size_t size; DbgPrint("EvtIoWrite"); r = WdfRequestRetrieveInputBuffer(Request, Length, &buf, &size); // zde doplňte požadovanou funkcionalitu WdfRequestComplete(Request, STATUS_SUCCESS);