Introducción detallada al directorio de desarrollo de controladores de Windows
Dile al mundo del kernel: hola, estoy aquí. Si eres un principiante y estás lleno de curiosidad sobre este mundo, comienza desde este capítulo y saludemos ~
Capítulo 1 Controlador Hello World 1
1.1 Desde Hello World comienza 2
1.1.1 HelloDRIVER 4
1.1.2 Explicación del código 8
1.1.3 Compilación e instalación del controlador 11
1.1.4 Verificar Descubra nuestros controladores 14
1.2 Entorno virtual 15
1.2.1 Utilice un entorno virtual para el desarrollo de controladores 15
1.2.2 Utilice la máquina virtual VMware 15
1.2.3 Configuración de la máquina de destino 16
1.2.4 Máquina virtual de PC virtual 18
1.3 Resumen 19
Cómo desarrollar un controlador exitoso y eficaz software en un entorno empresarial regulado? El administrador del sitio web Ma Yong (ZnSoft) le informará al respecto. Aprenderá estos contenidos: establecer un entorno de desarrollo y depuración simple y efectivo; habilidades de programación del kernel en un entorno de 64 bits; cómo publicar su software de controlador;
Capítulo 2 Tecnología de desarrollo impulsada por el negocio 20
2.1 Establecimiento de un entorno de desarrollo y depuración 21
2.1.1 Entorno SVN 21
2.1.2 Crear un proyecto e importarlo a SVN 23
2.1.3 Establecer un servidor de símbolos 25
2.1.4 Usar símbolos para depurar 27
2.2 Tecnología de desarrollo de controladores de 64 bits 34
2.2.1 Tecnología de escritura de controladores de 64 bits 35
2.2.2 Modo mixto de aplicación de 32 bits y controlador de 64 bits 36
2.3 Lanzamiento y prueba del controlador 42
2.3.1 Firma del controlador 42
2.3.2 Prueba del controlador 46
2.3.3 WHQL 49
2.4 Resumen 50
WDF es el último marco de programación de controladores. Si bien muchos programadores del kernel todavía se aferran a los enormes pies de Buda de WDM, deben recordar que WDF es la tendencia general. Este capítulo presenta algunos de los conceptos más importantes de WDF y realiza un cierto grado de exploración en profundidad. Este capítulo se centra en los tres modelos centrales del marco WDF: modelo de objetos, modelo de eventos y modelo PNP/Power.
Capítulo 3 Descripción general de WDF 51
3.1 Características principales 52
3.2 Vista de marco 53
3.3 Compatibilidad 55
3.4 Modelo de objetos 56
3.4.1 Objetos y identificadores 59
3.4.2 Conteo de referencias 60
3.4.3 Espacio de contexto 61
3.4.4 Interfaz PME 67
3.4.5 Interfaz DDI 69
3.4.6 Relación padre-hijo 76
3.4.7 Sincronización de objetos 77
3.5 Objeto de controlador y objeto de dispositivo 78
3.5.1 Objeto de controlador 78
3.5.2 Entrada de controlador DriverEntry 81
3.5.3 Objeto de dispositivo 84
3.5.4 Creación de objeto de dispositivo 85
3.5.5 Pila de dispositivos 86
3.6 Modelo IO 88
3.6. 1 objeto de destino IO 88
3.6.2 Detalles del objeto de destino IO 90
3.6.3 Búfer seguro 93
3.6.4 Objeto de memoria (1 ) 96
3.6.5 Objetos de memoria (2) 98
3.6.6 Marco y solicitudes de IO 102
3.6.7 Flujo de procesamiento más detallado 103
3.6.8 Parámetros de solicitud de IO 105
3.6.9 Cola 107
3.6.10 Crear solicitud de IO 110
3.7 Modelo PNP y fuente de alimentación 112
3.8 Resumen 115
Usar el marco WDF para desarrollar controladores USB es conveniente y simple. Este capítulo primero presenta puntos de conocimiento relacionados con USB en general desde aspectos de hardware y software, incluidas las características eléctricas del dispositivo, la estructura del bus, el tipo de controlador USB y la clase de controlador. En cuanto a la programación, se explica de forma exhaustiva e informativa desde varios aspectos como la inicialización del dispositivo USB, la operación de datos y el control del dispositivo.
Capítulo 4 Desarrollo del controlador del dispositivo USB WDF 116
4.1 Estructura del hardware del dispositivo USB 117
4.1.1 Estructura maestro-esclavo 117
4.1.2 Topología de hardware 118
4.1.3 Interrupción USB 119
4.2 Estructura del software USB 120
4.2.1 Controlador de bus 120
4.2.2 Controlador de clase de sistema 121
4.2.3 Controlador de función 122
4.2.4 Controlador principal y dispositivo híbrido 122
4.2.5 Controlador de filtro 125
4.2.6 Pila de controladores USB, pila de dispositivos 125
4.3 Desarrollo del kernel 127
4.3.1 Controlador de dispositivo 127
4.3. 2 Función de entrada 128
4.3.3 Descriptor USB 129
4.3.4 Introducción al descriptor 130
4.3.5 Ejemplo de resumen 133
4.3.6 Leer descriptor 135
4.3.7 Inicialización 137
4.3.8 Función de inicialización del dispositivo 138
4.3.9 Crear objeto de dispositivo 141
4.3.10 Nomenclatura de dispositivos, enlaces simbólicos 143
4.3.11 Iniciar el dispositivo 147
4.3.12 Crear una cola 156
4.3 .13 Detener dispositivo/desinicialización 158
4.4 Operación de E/S de datos 160
4.4.1 Comando de control USB 160
4.4.2 Construir y enviar comando de control 162
4.4.3 Lectura del puerto de interrupción USB 163
4.4.4 Operación de lectura continua 165
4.4.5 Función de procesamiento de datos 166
4.4 .6 Eficiencia del puerto de interrupción 167
4.4.7 Puerto por lotes de lectura/escritura 168
4.5 Control de dispositivo 171
4.5.1 Acerca del objeto de destino de E/S 171
4.5.2 Obtener la versión USB 172
4.5.3 Restablecer tubería 174
4.5.4 Restablecer dispositivo 176
4.5. 5 Aborto y terminación de tuberías 177
4.6 Programa de usuario 179
4.6.1 Lectura/escritura del kernel 179
4.6.2 Comandos de control 179
4.7 Resumen 180
1394 se conoce comúnmente como cable vivo. El lugar donde todo el mundo suele entrar en contacto con él es probablemente durante la depuración del kernel, utilizando la tarjeta 1394 para interconectar dos máquinas. Este capítulo presenta primero el conocimiento de 1394 desde el aspecto del hardware. Su estructura de bus es muy especial y extremadamente escalable. Puede establecer fácilmente enlaces de datos entre varios tipos de dispositivos 1394. En términos de programación del kernel, este capítulo se centra en el conocimiento relacionado con la comunicación de datos, que se divide en dos métodos: comunicación asíncrona y comunicación síncrona. Es bastante complicado y relativamente difícil de dominar, pero las rutinas están listas y existen. No hay muchos cambios. La práctica hace la perfección. Este capítulo finalmente presenta el principio de interconexión de doble máquina 1394, y los lectores interesados pueden consultarlo.
Capítulo 5 Desarrollo del controlador WDF 1394 181
5.1 Charla 1394 182
5.1.1 Estado de la versión 183
5.1.2 Fuente de alimentación características 183
5.1.3 Tarjeta 1394 183
5.1.4 Topología de bus 184
5.2 Enviar solicitud 186
5.2.1 Síncrono modo 187
5.2.2 Modo asíncrono 189
5.2.3 Memorias de WDM 191
5.3 Restablecimiento y conteo del bus 193
5.3 .1 Restablecimiento del bus 193
5.3.2 Establecer devolución de llamada de reinicio 193
5.3.3 Actualización del conteo 194
5.4 Operación PNP 195
p>5.5 Comunicación asincrónica 196
5.5.1 Rango de direcciones 197
5.5.2 Lectura asincrónica 200
5.5.3 Escritura asincrónica 201
p >5.5.4 Solicitud de bloqueo asíncrono 202
5.5.5 Flujo de datos 203
5.6 Comunicación isócrona 204
5.6.1 Solicitar ancho de banda 205
5.6.2 Liberar ancho de banda 206
5.6.3 Canal isócrono 206
5.6.4 Controlador de recursos 207
5.6.5 Montaje del búfer 210
5.6.6 Desmontaje del buffer 211
5.6.7 Iniciar transmisión 211
5.6.8 Detener transmisión 212
5.6.9 Otras operaciones isócronas 213
5.7 Otras operaciones 213
5.7.1 Configuración del dispositivo 213
5.7.2 Obtención de información del controlador 214
5.7 .3 Información de velocidad 215
5.7.4 Comandos definidos por el fabricante 216
5.8 Instalación y pruebas 216
5.8.1 1394 Dispositivo virtual 216 p>
5.8.2 Creación de un dispositivo virtual 218
5.8.3 Código de muestra 219
5.8.4 Instalación y prueba 221
5.9 Resumen 222
El kernel es naturalmente adecuado para la programación en lenguaje C, pero cada vez hay más proyectos de kernel en escala que alcanzan decenas de miles. En este caso, la gente no puede evitar centrar su atención en el elegante lenguaje C++. En términos generales, C y C ++ son amigos cercanos. No debería haber grandes problemas al usar C ++ en el kernel, pero hay algunas rocas ocultas que han estado al acecho durante mucho tiempo, no debes toparte con ellas.
Capítulo 6 Programación del controlador kernel en C++ 223
6.1 Clases en el controlador 224
6.1.1 Un ejemplo simple 224
6.1. 2 nuevo/eliminar 225
6.1.3 C externo 227
6.1.4 Variables globales/estáticas 228
6.1.5 Preocupaciones de pila 230
6.2 Controlador encapsulado de clase 233
6.2.1 Encontrar una ubicación de almacenamiento adecuada 233
6.2.2 Métodos de clase y funciones de eventos 235
6.2.3 Implementación del controlador KMDF 236
6.2.4 Implementación del controlador WDM 237
6.3 Polimorfismo 238
6.3.1 Clase base y subclase 238
6.3.2 Implementación del polimorfismo 239
6.3.3 Pruebas 241
6.4 Resumen 241
Controlador escrito utilizando el marco WDF, existen herramientas especiales para realizar pruebas y depurar.
Este capítulo presenta los tres conocidos actualmente, que son: el comando de depuración extendido Windbg, la herramienta de prueba WDFTester y la herramienta de prueba WDFVerifier. Este capítulo presentará el uso de estas herramientas a través de ejemplos.
Capítulo 7 Prueba del controlador WDF 242
7.1 Error de WDF 243
7.1.1 Análisis de ejemplo 245
7.1.2 Error de USB 246
7.2 Comando de depuración extendido WDF 247
7.3 WDFTester 254
7.3.1 WDFFiTester 254
7.3.2 Uso de 256 p >
7.3.3 WDFCallTracer 260
7.4 WDFVerifier 263
7.4.1 Identificación del controlador KMDF 263
7.4.2 Uso e introducción 265 p >
7.5 Resumen 266
Después de que SoftIce desapareciera gradualmente, Windbg se convirtió en la primera herramienta para la depuración del kernel. La mayor dificultad al utilizar Windbg es la gran cantidad de comandos y parámetros complejos. En forma de resumen, este capítulo presenta varios tipos principales de comandos de depuración que el autor utiliza con frecuencia en su trabajo, y los presenta uno por uno con ejemplos. La clasificación realizada por el autor basándose en la experiencia personal no es completa, pero lo que se puede garantizar es que todos los ejemplos son detallados y fiables y pueden utilizarse como referencia creíble.
Capítulo 8 Explicación detallada de los comandos de depuración 267
8.1 Descripción general 268
8.1.1 Solicitar ayuda 269
8.1.2 DML idioma 270
8.1.3 Información básica 271
8.1.4 Configuración básica 272
8.1.5 Pantalla formateada 273
8.1. 6 Iniciar la depuración 273
8.2 Símbolos y código fuente 276
8.2.1 Lista de módulos 277
8.2.2 Información del módulo 279
8.2.3 Ruta del símbolo 280
8.2.4 Carga de símbolo 283
8.2.5 Búsqueda de símbolo 285
8.2.6 Comando de código fuente 287
8.3 Procesos y subprocesos 289
8.3.1 Comandos de proceso 289
8.3.2 Comandos de subprocesos 292
8.3.3 Excepciones y eventos 296 p>
8.3.4 Variables locales 300
8.3.5 Tipo de visualización 301
8.4 Punto de interrupción 301
8.4.1 Punto de interrupción del software 301
8.4.2 Punto de interrupción de hardware 303
8.4.3 Otras operaciones 303
8.5 Comando de memoria 304
8.5.1 Ver memoria 304
8.5.2 Información de la memoria 307
8.5.3 Otros comandos 311
8.6 Resumen 312
Creo que la mayoría de las personas están aprendiendo el desarrollo del kernel, ya lo han hecho. Todos hicieron esta pregunta: ¿Cómo envía el controlador del kernel mensajes a los programas del usuario o cómo llamar a las funciones de Win32? La sincronización entre los programas del usuario y el kernel es un conocimiento básico e importante. Este capítulo presenta tres métodos de implementación principales. En cuanto a si el kernel puede llamar a funciones de Win32, lea el comienzo de este capítulo y tendrá la respuesta.
Capítulo 9 Sincronización del kernel 313
9.1 Acerca de la sincronización del kernel 314
9.2 Sincronización de eventos del kernel 316
9.2.1 Principio 316
p>
9.2.2 Programa de usuario 318
9.2.3 Implementación del kernel 319
9.3 Sincronización IRP 320
9.3.1 Programa de usuario 321< / p>
9.3.2 Implementación del kernel 323
9.4 Sincronización WMI 325
9.5 Sincronización del buffer de datos 326
9.6 Llamada inversa 328 p>
9.7 Resumen 330
El último marco de programación de audio y video de Microsoft es el marco AVStream No importa desde ningún aspecto, la programación de audio y video es un campo muy especializado. El marco AVStream es extremadamente complejo y mi opinión personal es que es más difícil de dominar que WDF. Este capítulo presenta varios puntos de conocimiento básico del marco AVStream y utiliza ejemplos para explicar cómo funciona un filtro de audio del kernel en el sistema.
Capítulo 10 Desarrollo de controladores de audio 331
10.1 Introducción 332
10.1.1 Arquitectura del módulo de audio 332
10.1.2 Dispositivo de audio del sistema 334
10.2 Objeto AVStream 338
10.2.1 Objeto de dispositivo 339
10.2.2 Fábrica de filtros y objeto de filtro 340
10.2. 3 Fábrica de pines y objeto Pin 342
10.2.4 Objeto de nodo y estructura de conexión 343
10.3 Descriptor AVStream 346
10.3.1 Descripción Introducción a los descriptores 346
10.3.2 Ejemplo de descriptor 347
10.3.3 Tabla de funciones de distribución 349
10.3.4 Tabla de autocontrol 349
10.3. 5 Ejemplo de tabla de control automático 351
10.4 Explicación del código 355
10.4.1 Función de entrada 355
10.4.2 Función de distribución de equipos 357
10.4.3 Función de filtro y distribución de pines 358
10.4.4 Creación y eliminación 359
10.4.5 Procesamiento de datos 360
10.4.6 Formato de datos 362
10.5 Función de tabla de control automático 364
10.5.1 Función de evento 364
10.5.2 Función de atributo 366
10.5.3 Método función 367
10.5.4 Interfaz de usuario 367
10.6 Operación del hardware 370
10.6.1 Datos DMA 370
10.6.2 DMA implementación en AVStream 371
10.6.3 Hable sobre ISR 374
10.7 Instalación y pruebas 376
10.7.1 Instalación 376
10.7 .2 Herramienta de prueba 376
10.8 Resumen 379
El controlador de audio ASIO tiene dos ventajas muy llamativas: baja latencia y multicanal. La baja latencia puede alcanzar unos pocos milisegundos, lo que dificulta la detección incluso para los oídos más sensibles; el multicanal paraliza los habituales dos canales, 6.1 canales, etc., y puede permitir fácilmente hasta una docena o más. Se pueden escuchar docenas de parlantes simultáneamente, lo cual es muy importante cuando se realiza una edición de audio avanzada.
Capítulo 11 Tarjeta de sonido virtual ASIO 380
11.1 Introducción 381
11.2 Acerca de ASIO 383
11.3 Controlador de usuario ASIO 384
11.3.1 Interfaz COM 384
11.3.2 Instalación y desinstalación 386
11.3.3 Interfaz IASIO 387
11.3.4 Núcleo tecnológico 390
11.3.5 Retraso de cálculo 392
11.4 Implementación del controlador kernel 393
11.4.1 Sincronización 393
11.4.2 Principio 393
11.4.3 Implementación 396
11.5 Software de audio ASIO 396
11.6 Resumen 397
El contenido de los tres capítulos a partir de este capítulo son: Todos están relacionados con el tema "instalación del controlador". En este capítulo, se presentan varios módulos del sistema relacionados con la instalación del controlador en el sistema. Después de leer este capítulo, los lectores podrán dominar al menos estos dos conocimientos básicos: cómo el sistema identifica un dispositivo antiguo y carga el archivo del controlador apropiado para él; cómo el sistema descubre un nuevo dispositivo y completa la instalación del controlador.
Capítulo 12 Introducción a la instalación del controlador del dispositivo 399
12.1 Conocimientos básicos preliminares 400
12.1.1 Tipo de dispositivo 400
12.1. 2 ID de instancia de dispositivo 401
12.1.3 Carga e instalación del controlador 403
12.2 Instalación del módulo 404
12.2.1 Administrador Kernel PNP 405
12.2.2 Usuario PNP Manager 406
12.2.3 Función de interfaz de instalación (Setup API) 408
12.2.4 Interfaz del administrador de configuración (CfgMgr API) 410 p>
12.2.5 Instaladores de clase 410
12.2.6 Co-instaladores de clase 410
12.2.7 Co-instaladores de dispositivos Co-instaladores de dispositivos 411
12.2 .8 Paquete de controladores 412
12.2.9 Tienda de controladores 413
12.2 .10 Administrador de dispositivos 414
12.2.11 Instalador 415
12.2.12 Asistente para nuevo dispositivo 416
12.2.13 Asistente para agregar hardware 416
12.2.14 Instalador de controladores 416
12.3 Problemas importantes 417
12.3.1 Búsqueda y selección 417
12.3.2 Compatibilidad entre sistemas de 32 y 64 bits 418
12.3.3 Reinicio del sistema 419
12.4 Modo de instalación 420
12.4.1 Ejemplo 1: Modo Cliente Cliente 421
12.4.2 Ejemplo 2: Modo Servidor 423
12.5 Programación del instalador 424 p>
12.5.1 Código DIF 424
12.5.2 Flujo de procesamiento 427
12.5.3 Ejemplo de proyecto 429
12.5.4 Registro 430
12.6 Resumen 431
INF El archivo es el "archivo de instalación" del controlador, que contiene información diversa de instrucciones relacionadas con la instalación del controlador. A través del archivo INF, el sistema sabe cómo procesar cada archivo en el paquete del controlador y realiza registros precisos en el registro del sistema. Este capítulo explica principalmente desde dos aspectos: instrucciones y dominios.
Capítulo 13 Análisis en profundidad de archivos INF 432
13.1 Descripción general 433
13.1.1 Dominio 433
13.1.2 Instrucciones 434
13.1.3 Múltiples sistemas 435
13.2 Comandos de registro 436
13.2.1 Claves raíz abreviadas 436
13.2.2 Software claves 437
13.2.3 Clave de hardware 437
13.2.4 AddReg 438
13.2.5 DelReg 440
13.2.6 BitReg 441
13.3 Instrucciones de operación de archivos 441
13.3.1 CopyFiles 441
13.3.2 DelFiles 443
13.3.3 RenFiles 443
p>13.4 Comando de servicio 444
13.4.1 AddService 444
13.4.2 DelService 445
13.5 Dominio básico 446
13.5.1 Dominio de versión 446
13.5.2 Dominio de archivo 447
13.5.3 Dominio de instalación predeterminado 451
13.5.4 Dominio de control 454
13.5.5 Dominio de cadena 457
13.6 Dominio de instalación de clase de dispositivo 458
13.6.1 Dominio principal 459
13.6.2 Servicio subdominio 461
13.7 Dominio de instalación de clase de interfaz 461
13.8 Dominio fabricante/producto 462
13.8.1 Dominio fabricante 463
13.8. 2 Dominio del producto 464
13.9 Dominio de instalación del dispositivo 464
13.9.1 Subdominio de hardware 466
13.9.2 Subdominio del coinstalador 467
13.9.3 Subdominio de interfaz 468
13.9.4 Subdominio de configuración predeterminada del fabricante 469
13.9.5 Subdominio de configuración de prioridad lógica 470
13.10 Introducción a ChkInf 471 p>
13.11 Resumen 472
El programa de instalación del controlador hace que el software del controlador luzca más profesional, así que abandone la práctica de instalar el controlador manualmente y su controlador se verá más hermoso. El software de muestra MyDrvInst de este capítulo se puede utilizar como punto de partida para que los lectores diseñen un software de instalación más atractivo.
Capítulo 14 Diseño del programa de instalación del controlador 473
14.1 Paquete de controladores 474
14.1.1 Método de instalación 474
14.1.2 Instalación Paquete de controladores 475
14.1.3 Desinstalar el paquete de controladores 476
14.2 Actualización del controlador 477
14.2.1 Dispositivo conectado 477
14.2. 2 El dispositivo no está conectado 478
14.2.3 Enumeración de dispositivos del sistema 481
14.3 Análisis de archivos INF 484
14.3.1 Introducción a la función 484
14.3.2 ID del dispositivo de impresión 486
14.4 Introducción a MyDrvInst 487
14.5 Creación del paquete de instalación de software 490
14.5.1 Ver introducción 490 p >
14.5.2 Nuestro proyecto 492
14.5.3 Compilación y ejecución 493
14.6 Resumen 494
Apéndice A Placa de desarrollo USB CY001 495< / p>
Apéndice B VisualKD + VMWare implementa la depuración 501 del kernel en una sola máquina