Sistemas Operativos I

Transcrição

Sistemas Operativos I
Windows Device Drivers
Programação de Periféricos
SO - 2013/14
Arquitetura Windows
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 3.1 16-bit,
MS-DOS 16-bit, POSIX 32-bit, or OS/2 32-bit
Subsistems
•
POSIX, OS/2 e Windows
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
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
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 integramse 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
Tipos de Drivers
Windows Driver Model – WDM




Framework introduzido à partir das versões Win98 e Win2000 que
standariza 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
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
Exemplo da hierarquia
Estrutura de um driver
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;
}
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
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 register
Código do driver
#include <ntddk.h>
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");
}

Documentos relacionados