Red de conocimiento informático - Conocimiento sistemático - Introducción detallada al directorio de desarrollo de controladores de Windows

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

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

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

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

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

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

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

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

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

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