A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Windows Device Drivers Fernando Sola Pereira Programação de Periféricos PUCRS - 2007/2.

Apresentações semelhantes


Apresentação em tema: "Windows Device Drivers Fernando Sola Pereira Programação de Periféricos PUCRS - 2007/2."— Transcrição da apresentação:

1 Windows Device Drivers Fernando Sola Pereira Programação de Periféricos PUCRS /2

2 Arquitetura Windows

3 Tipos de processos user-mode System Support Process Logon process e session manager Service Processes Agendador de tarefas, spool de impressao e servidores em geral incluem processos que executam como serviços no windows (MySQL, Tomcat, SQLServer …) User Application Windows 32-bit, Windows 64-bit, Windows bit, MS-DOS 16-bit, POSIX 32-bit, or OS/2 32-bit Subsistems POSIX, OS/2 e Windows

4 Tipos de processos kernel-mode Windows Executive Contém os principais serviços do sistema operacional como gerência de memória, gerência de processos e threads, segurança, I/O, comunicação entre processos Windows Kernel Funções de baixo nível do sistema como escalonamento de threads, interrupções e lançamento de exceções, e contém também um conjunto de rotinas e objetos básicos que são usados pelo executive para implementar os serviços de mais alto nível Device Drivers Incluem os drivers de dispositivos, sistema de arquivos e protocolos de rede Hardware Abstraction Layer É uma camada de código que isola o kernel, os drivers e o executive das diferenças de hardware de plataformas específicas (como motherboards, por exemplo) Windowing e graphics system Implementa todas as funções de renderização, janelas e controles de interface, conhecido como Windows User and GDI Functions

5 Drivers possuem a extensão.sys Geralamente são armazenados no diretório windows/system32/drivers possuem geralmente um arquivo.inf que possui todas as informações de instalação do driver

6 Tipos de Drivers User-mode drivers Virtual Device Drivers: usados para compatibilidade de aplicações DOS 16bits, capturam as chamadas feitas por estas aplicações e mapeiam para Win32 Printer Drivers Kernel-mode drivers File system drivers: tratam as requisições direcionadas aos dispositivos de armazenamento ou dispositivos de rede Plug and play drivers:trabalham com algum hardware e integram- se ao power manager e ao plug and play manager do windows Class Drivers: drivers genéricos para classes de dispositivos Minidrivers: drivers que adicionam aos class drivers algumas funções específicas do fabricante Function drivers: incorporam todas as funcionalidades necessárias para suportar um dispositivo Filter Drivers: filtram requisições de I/O para um driver específico e adicionam informações ou modificam seu comportamento Legacy drivers: drivers que controlam diretamente um hardware sem a ajuda de nenhum outro driver

7 Tipos de Drivers

8 Windows Driver Model – WDM framework introduzido à partir das versões Win98 e Win2000 que padroniza os drivers em um modelo unificado e implementa os padrões de plug and play e power management os drivers WDM são organizados em camadas (layered drivers) e comunicam-se através de I/O Request Packets IRPs vantagens dos drivers que aderem ao WDM são compatíveis com Win98, WinME Win2000, WinXP e Win2003 server, Windows Vista (source and binary) desvantagens curva de aprendizado é muito alta interações com eventos de power managemente a plug and play é muito complexa e por isso várias máquinas apresentam problemas nas funções de sleep e wakeup devido à bugs nos drivers é necessário muito código de suporte para codificar um driver é necessário conhecimento muito avançado do WDM mesmo para criar drivers muito simples

9 I/O Request Packet o IRP é uma estrutura de dados criada pelo I/O System onde ele armazena todas as informações necesárias para realizar a operação o IRP contém informações sobre qual a rotina Dispatch que será chamada do driver (create, read, write, close...), informações do status da operação (que vai sendo atualizada conforme o andamento) e também contém ponteiros para estruturas importantes que serão utilizadas no processo

10 Exemplo da hierarquia

11 Estrutura de um driver

12 DriverEntry a principal função dessa rotina é informar ao I/O System os ponteiros para as funções que o driver irá implementar extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { DriverObject->DriverUnload = DriverUnload; DriverObject->DriverExtension->AddDevice = AddDevice; DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower; DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi; servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR)); if (!servkey.Buffer) return STATUS_INSUFFICIENT_RESOURCES; servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR); RtlCopyUnicodeString(&servkey, RegistryPath); servkey.Buffer[RegistryPath->Length/sizeof(WCHAR)] = 0; return STATUS_SUCCESS; }

13 Driver Development Kit - DDK ambiente utilizado para a compilação de drivers que possui diversas ferramentas utilitárias e exemplos funcionais para quase todos os tipos de drivers possíveis a maior parte dos desenvolvedores de drivers e inclusive a própria documentação do DDK aconselha que se inicie o desenvolvimento de um novo driver sempre a partir de um dos exemplos do DDK download gratuito no site da Micro$oft possui uma extensa e desorganizada documentação técnica sobre o desenvolvimento de drivers

14 Exemplo 1: Stupid driver o driver possui apenas as rotinas DriverEntry e DriverUnload não realiza nenhuma operação, apenas é carregado e descarregado pelo sistema a configuração do driver é feita manualmente no registro

15 Código do driver #include VOID OnDriverUnload(IN PDRIVER_OBJECT pDriverObject); NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pusRegistryPath) { DbgPrint("Carregando o driver!!\n"); //informando o endereço da rotina de unload pDriverObject->DriverUnload = OnDriverUnload; return STATUS_SUCCESS; } VOID OnDriverUnload(IN PDRIVER_OBJECT pDriverObject) { DbgPrint("Finalizando o driver...\n"); }


Carregar ppt "Windows Device Drivers Fernando Sola Pereira Programação de Periféricos PUCRS - 2007/2."

Apresentações semelhantes


Anúncios Google