Objetivo
O objetivo deste curso é preparar os alunos que queiram entender, testar, complementar ou construir drivers para Windows empregando os conceitos da plataforma Windows NT, identificando e apresentando as informações essenciais para o entendimento do papel de um driver e de como ele interage com o resto do sistema operacional.
Os conceitos e práticas apresentados neste curso são requisitos mínimos para o perfeito entendimento dos cursos de WDM Drivers e de File Systems Drivers. Técnicas de acesso ao hardware não são abordados, sendo elas parte integrante do curso de WDM Drivers.
Público alvo
Este curso é destinado aos desenvolvedores ou estudantes que precisam entender os conceitos fundamentais sobre implementação de drivers para Windows, técnicas de depuração de drivers de Kernel tais como Live Debug e análises de dump do sistema, e instalação de drivers.
Pré-requisitos
- Os estudantes deverão ter sólidos conhecimentos da linguagem C tais como estruturas, ponteiros, heap, utilização da pilha, alocação dinâmica de memória e listas. O uso de linguagem C++ não será empregado neste curso. Os estudantes também deverão conhecer conceitos de depuração de software.
- Conhecimentos básicos da API do Windows tais como lidar com arquivos, handles, eventos, threads e processos.
- Conceitos básicos de Sistemas Operacionais.
Medotologia
Os tópicos são abordados de maneira simples e gradativa de forma a colocar em prática cada novo tópico apresentado. O curso é repleto de atividades práticas que despertam novas dúvidas enquanto o estudante ainda está em curso, tendo assim a oportunidade de consultar um profissional da área. O curso é todo apresentado em slides e acompanha material impresso.
Tópicos abordados
- Visão Geral da Arquitetura do Sistema
- Processos e Threads
- Memória Virtual
- Address Spaces
- Page Fault
- Paginação
- MDL
- Section
- Kernel-Mode x User-Mode
- Subsistemas e API Nativa
- I/O Manager
- File Objects
- Driver Objects
- Device Objects
- IRP
- Pilha de Dispositivos
- Object Manager
- Registry
- Camada de Abstração de Hardware
- Tipos de Drivers
- Legacy
- WDM
- WDF (KMDF e UMDF)
- File Systems
- Minifilters
- Ambiente (obtenção, instalação e utilização)
- Windows Driver Foundation Kit
- Microsoft Visual Studio Express
- Microsoft Debuggging Tools for Windows
- Símbolos
- Máquinas Virtuais
- Escrevendo um Driver
- Criando um Projeto
- DriverEntry
- DriverUnload
- Compilando um Driver
- Instalando um Driver
- Dependências
- Grupos
- Load Order
- Depurando um Driver
- Configurando o Sistema
- Instalações Checked Build
- Driver Verifier
- Mapeando Imagens
- Máquinas Virtuais
- Iniciando um Driver
- Strings e Conversões
- Alocando Memória
- Pools de Alocação
- Tags
- Listas
- Criando Device Object
- Symboyc Links
- I/O Request Packets
- Parâmetros de uma IRP
- Completando IRPs
- Objetos, Handles e Ponteiros
- Create, Cleanup e Close
- Implementando Dispatch Routines
- Buffered I/O
- Direct I/O
- Neither I/O
- IOCTls e DeviceIoControl
- Contexto Arbitrário
- IRQLs, APCs e DPCs
- Alertas
- Criando um Projeto
- Escrevendo Filtros
- Filtros para Drivers Legacy
- Repassando IRPs
- Stack Locations
- I/O Completion Routines
- Tratamento de IRPs Pendentes
- Filas de Sistema
- Filas Customizadas
- Cancelamento de IRPs
- Criando IRPs para outros Drivers
- Alocando/Reutilizando IRPs
- Drivers de Alto Nível
- IRPs Síncronas / Assíncronas
- Miscelaneous
- Notificações
- Shutdown
- Processos / Threads
- Imagens
- System Threads e Work Items
- Dispatch Objects
- Evento
- Mutex
- Semáforo
- Timer
- Thread
- Esperando Objetos
- Sincronismo
- Critical Region
- ERESOURCE
- Spin Locks
- Fast Mutex
- Interlocked Actions
- Notificações
- Instalações
- Service Control Manager
- Criando um arquivo INF
- Instalando um Driver
- Desinstalando um Driver
- Referências
- Web Sites
- Grupos de Discussão
- Livros