Red de conocimiento informático - Conocimiento informático - Pescando solo en el río frío: un directorio de libros sobre programación de seguridad del kernel de Windows

Pescando solo en el río frío: un directorio de libros sobre programación de seguridad del kernel de Windows

Capítulo 1 Instrucción de la computadora del kernel 1

La programación del kernel de Windows es un poco problemática. No se trata solo de instalar un software independiente (como VC) y luego puede comenzar a escribir código de forma segura. , y luego corrió. Debe descargar el paquete de desarrollo, configurar el entorno de desarrollo, preparar herramientas de depuración y es posible que también necesite algunas herramientas pequeñas para trabajar en conjunto. Este paso detiene a muchos principiantes. Este capítulo utiliza una guía gráfica detallada para guiar a los lectores a través de este paso problemático.

1.1 Descargar y usar WDK 2

1.1.1 Descargar e instalar WDK 2

1.1.2 Escribir el primer archivo C 3

1.1.3 Compilar un proyecto 5

1.2 Instalar y ejecutar 6

1.2.1 Descargar una herramienta de instalación 6

1.2.2 Ejecutar y ver el resultado información 7

1.2.3 Ejecución en una máquina virtual 9

1.3 Depuración del módulo del kernel 9

1.3.1 Descargar e instalar WinDbg 9

1.3.2 Configurar la depuración y ejecución de Windows XP 10

1.3.3 Configurar la depuración y ejecución de Vista 11

1.3.4 Configurar el puerto serie virtual de tubería de VMWare 11

1.3 .5 Configuración de la tabla de símbolos del kernel de Windows 13

1.3.6 Depuración práctica primero 14

Ejercicio 16

Capítulo 2 Programación del kernel Entorno y sus particularidades 17

Los lectores que han escrito controladores pueden estar familiarizados con todo esto, pero para los lectores que sólo han trabajado en aplicaciones, se necesita algo de esfuerzo y comprensión para comprender las particularidades del entorno de programación del kernel. En las aplicaciones, la situación de subprocesos múltiples ha provocado ciertas dificultades de comprensión, pero ¿qué pasa con el código del núcleo? Se ejecuta con subprocesos múltiples casi todo el tiempo. ¿Dónde empieza? ¿Dónde termina? ¿En qué proceso se ejecuta? Estas preguntas son difíciles de responder en una sola frase.

2.1 Entorno de programación del kernel 18

2.1.1 Aplicaciones aisladas 18

2.1.2 Espacio del kernel compartido 19

2.1.3 Ubicuo módulo del kernel 20

2.2 Tipo de datos 21

2.2.1 Tipo de datos básicos 21

2.2.2 Estado de retorno 22

2.2. 3 Cadena 23

2.3 Estructura de datos importante 23

2.3.1 Objeto controlador 23

2.3.2 Objeto dispositivo 25

2.3. 3 Solicitud 26

2.4 Llamada a función 28

2.4.1 Consultar ayuda 28

2.4.2 Ayuda Varios tipos de funciones encontradas en la ayuda 30

2.4.3 Funciones no encontradas en la ayuda 32

2.5 Modelo de desarrollo de controladores de Windows 32

2.6 Características especiales en la programación WDK Punto 33

2.6 .1 Fuente de llamada principal de la programación del kernel 33

2.6.2 Seguridad de la función multiproceso 34

2.6.3 Nivel de interrupción del código 36

2.6. 4 Códigos especiales que aparecen en WDK 37

Preguntas de ejercicio 38

Capítulo 3 Filtrado de puerto serie 40

En En el desarrollo de software de seguridad, la aplicación del puerto serie Los conductores no son comunes. Sin embargo, este libro utiliza el controlador del puerto serie como primer ejemplo presentado. ¿Por qué? Simplemente porque el puerto serie es sencillo. Comenzar con un ejemplo simple puede brindarle al lector un sentimiento ligeramente relajado.

3.1 El concepto de filtrado 41

3.1.1 Una de las API del kernel para la vinculación de dispositivos 41

3.1.2 La segunda API del kernel para la vinculación de dispositivos 43

3.1.3 Generar dispositivo de filtro y vincular 43

3.1.4 Obtener objeto de dispositivo del nombre 45

3.1.5 Vincular todos los puertos serie 46

3.2 Obtener datos reales 47

3.2.1 Distinguir solicitudes 47

3.2.2 Finalizar solicitudes 48

3.2.3 Escribir datos de solicitudes 49

3.3 Código completo 50

3.3.1 Función de distribución completa 50

3.3.2 Cómo desinstalar dinámicamente 52

3.3.3 Código completo 53

Código de muestra 53 de este capítulo

Ejercicio 54

Capítulo 4 Filtrado de teclado 56

El teclado es un elemento muy importante dispositivo de entrada! Esto se debe a que usamos el teclado para ingresar información, usamos el teclado para ingresar contraseñas, incluso usamos el teclado para programar y también usamos el teclado para escribir libros. Para los piratas informáticos, ¿cómo podría ser más fácil utilizar enormes recursos informáticos para descifrar esos algoritmos de cifrado indestructibles que escribir en secreto la clave ingresada por el usuario en el teclado? Este capítulo se centra en la protección del teclado.

4.1 Principios técnicos 57

4.1.1 Conocimientos previos 57

4.1.2 De las pulsaciones al kernel en Windows 58

4.1. 3 Principios del hardware del teclado 60

4.2 Marco de filtrado del teclado 61

4.2.1 Buscar todos los dispositivos de teclado 61

4.2.2 Extensión del dispositivo de aplicación 64

4.2.3 DriverEntry del módulo de filtrado de teclado 65

4.2.4 Desinstalación dinámica del módulo de filtrado de teclado 66

4.3 Solicitud de procesamiento de filtrado de teclado 68

4.3.1 Procesamiento normal 68

4.3.2 Procesamiento PNP 69

4.3.3 Procesamiento de lectura 70

4.3.4 Procesamiento de lectura completa 71

4.4 Imprimir la información clave de la solicitud 72

4.4.1 Obtener KEYBOARD_INPUT_DATA del buffer 72

4.4.2 Obtener de KEYBOARD_INPUT_DATA Clave 73

4.4.3 De MakeCode a caracteres reales 74

4.5 Función de distribución de gancho 75

4.5.1 Obtener objeto controlador de clase 76

4.5.2 Modificar la distribución puntero de función del controlador de clase 77

4.5.3 Controlador de puerto bajo controlador de clase 78

4.5.4 Mecanismo de cooperación entre el controlador de puerto y el controlador de clase 79

4.5. 5 Encuentre las condiciones para la función de devolución de llamada de tecla 80

4.5.6 Definir constantes y estructuras de datos 80

4.5.7 Abrir dos teclados El controlador de puerto busca el dispositivo 81

4.5.8 Búsquedas de dirección en el controlador de clase KbdClass 83

4.6 Antifiltrado de interrupción de teclado Hook 86

4.6.1 Interrupción: IRQ e INT 86

4.6.2 Cómo modificar IDT 87

4.6.3 Reemplazar la dirección de salto 88 en IDT

4.6.4 PS/ de QQ 2 Medidas antifiltrado 90

4.7 Uso de IOAPIC para reubicar la función de procesamiento de interrupciones 90

4.7.1 ¿Qué es IOAPIC 90?

4.7.2 Cómo acceder a IOAPIC 91

4.7 .3 Modificar programáticamente la tabla de reubicación IOAPIC 92

4.7.4 Insertar nuevo procesamiento de interrupciones 93

4.7.5 Implementación de entrada y descarga de controladores 95

4.8 Directamente usar el puerto para operar el teclado 96

4.8.1 Leer los datos del teclado y el puerto de comando 96

4.8.2 La implementación final de p2cUserFilter 97

Muestra código 98 de este capítulo

Pregunta de ejercicio 99

Capítulo 5 Disco virtual 100

La CPU es el núcleo de la computadora, pero no guarda información. Si nos lo roban, simplemente podemos comprar uno nuevo. Pero si le roban un disco duro lleno de información confidencial, comprar uno nuevo no lo compensará. Este capítulo presenta la magia del núcleo del disco duro: el disco duro virtual. ¿Se pueden proteger los discos duros virtuales de los ladrones? Un buen diseño puede hacer esto.

5.1 Disco virtual 101

5.2 Un ejemplo específico 101

5.3 Función de entrada 102

5.3.1 Definición de función de entrada 102

5.3.2 Función de entrada del controlador Ramdisk 103

5.4 Función EvtDriverDeviceAdd 104

5.4.1 Definición de EvtDriverDeviceAdd 104

5.4 .2 Declaración de variables locales 105

5.4.3 Creación de dispositivos de disco 105

5.4.4 Cómo manejar las solicitudes enviadas al dispositivo 107

5.4.5 Inicialización de configuración de usuario 108

5.4.6 Vinculación a aplicaciones 110

5.4.7 Resumen 111

5.5 Inicialización del volumen de disco FAT12/16 111

5.5.1 Introducción a la estructura del volumen del disco 111

5.5.2 Inicialización del disco Ramdisk 113

5.6 Procesamiento de solicitudes en el controlador 119

5.6 .1 Solicitud procesamiento 119

5.6.2 Solicitud de lectura/escritura 120

5.6.3 Solicitud DeviceIoControl 122

5.7 Compilación e instalación de Ramdisk 124

5.7.1 Compilación 124

5.7.2 Instalación 125

5.7.3 Exploración en profundidad de la instalación 125

Preguntas de ejercicio 126

p >

Capítulo 6 Filtrado de disco 127

Muchos propietarios de cibercafés, departamentos de administración de TI de empresas y los propios lectores odian que los discos duros siempre estén estropeados por virus y troyanos. Un sencillo software de recuperación puede solucionar este problema: tras reiniciar, las modificaciones realizadas en el disco duro desaparecen milagrosamente. ¿Cómo se logra esto? Este capítulo le dice la respuesta.

6.1 El concepto de controlador de filtro de disco 128

6.1.1 Filtrado de dispositivos y filtrado de clases 128

6.1.2 Controlador de filtro de dispositivo de disco y dispositivo de volumen de disco 128

6.1.3 Controlador de filtro de dispositivo de volumen de disco y registro 129

6.2 Controlador de filtro de volumen de disco con función de restauración 129

6.2.1 Introducción 129

6.2.2 Idea básica 130

6.3 Análisis del controlador 130

6.3.1 Función DriverEntry 130

6.3.2 Función AddDevice 132

6.3.3 Procesamiento de solicitudes PnP 136

6.3.4 Procesamiento de solicitudes de energía 140

6.3.5 Procesamiento de solicitudes DeviceIoControl 140

6.3 .6 El rol y análisis de mapa de bits 144

6.3.7 El controlador de arranque completa la función de devolución de llamada y archivos dispersos 150

6.3.8 El procesamiento de solicitudes de lectura/escritura 152

6.3.9 Código de muestra 160

6.3.10 Ejercicio 161

Capítulo 7 Filtrado y monitoreo del sistema de archivos 162

Un disco duro es un disco duro y un archivo El sistema es un sistema de archivos, pero algunas personas siempre los tratan como la misma cosa. De hecho, el disco duro es muy simple. El disco duro es una caja muy simple que almacena información, pero lo complicado es el sistema de archivos, que organiza datos simples en archivos complejos de manera muy exquisita. Como expertos en seguridad de la información, ciertamente no podemos permitir que el sistema de archivos escape a nuestro control.

7.1 Objeto de dispositivo del sistema de archivos 163

7.1.1 Dispositivo de control y dispositivo de volumen 163

7.1.2 Genera tu propio dispositivo de control 165

7.2 Función de distribución del sistema de archivos 166

7.2.1 Función de distribución común 166

7.2.2 Función de distribución rápida de E/S de filtrado de archivos 167

7.2.3 An implementación de la función de distribución rápida de IO 169

7.2.4 Introducción a la función de distribución rápida de IO uno por uno 170

7.3 Trabajo preliminar de vinculación de dispositivos 172

7.3. 1 Seleccione dinámicamente la función de enlace 172

7.3.2 Registrar la devolución de llamada de cambio del sistema de archivos 173

7.3.3 Una implementación de la devolución de llamada de cambio del sistema de archivos 175

7.3.4 Identificador del sistema de archivos 176

7.4 Vinculación del dispositivo de control del sistema de archivos 177

7.4.1 Generación de dispositivo de filtro para el dispositivo de control del sistema de archivos 177

7.4. 2 Vincular dispositivos de control del sistema de archivos 178

7.4.3 Utilizar solicitudes de control del sistema de archivos 180

7.5 Vincular dispositivos de volumen del sistema de archivos 183

7.5.1 Obtener el VPB puntero del IRP183

7.5.2 Configure la función de finalización y espere a que se complete el IRP184

7.5.3 Trabajo de montaje de volumen después de que se complete el IRP187

7.5.4 Implementación correspondiente de la función de finalización 190

7.5.5 Implementación de volúmenes enlazados 191

7.6 Filtrado de operaciones de lectura/escritura 193

7.6.1 Conjunto activar una función de procesamiento de lectura 193

7.6.2 Procesamiento de diferenciación de objetos de dispositivo 194

7.6.3 Analizar la información del archivo en la solicitud de lectura 195

7.6. 4 Finalización de solicitudes de lectura 198

7.7 Filtrado de otras operaciones 202

7.7.1 Ciclo de vida de los objetos de archivo 202

7.7.2 Apertura y cierre de archivos 203

7.7.3 Eliminación de archivos 205

7.8 Implementación del filtrado de rutas 206

7.8.1 Tres situaciones para obtener rutas de archivos 206

7.8.2 Obtener la ruta después de una apertura exitosa 207

7.8.3 Obtener la ruta del archivo en otros momentos 209

7.8.4 Obtener la ruta antes de que se complete la solicitud de apertura Nombre 209

7.8.5 Convertir un nombre corto en un nombre largo 211

7.9 Compilar sfilter en una biblioteca estática 212

7.9.1 Cómo usar sfilter cómodamente 212

7.9.2 Devolución de llamada de inicialización, devolución de llamada de descarga y devolución de llamada de vinculación 213

7.9.3 Devolución de llamada de vinculación y devolución de llamada 215

7.9.4 Devolución de llamada de solicitud de inserción 216

7.9.5 Cómo usar sfilter.lib 218

Código de muestra 221 de este capítulo

Ejercicio 221

Capítulo 8 Cifrado transparente del sistema de archivos 223

¿Cómo evitar que los documentos confidenciales de la empresa se filtren activamente, pero sin cerrar la red, prohibir las unidades flash USB, etc., y limitar a todos? Hay muchos indicios de que el cifrado transparente del sistema de archivos es la opción óptima. Ahora que el lector ha aprendido a controlar el sistema de archivos del capítulo anterior, es hora de que nos preparemos y lo utilicemos para proteger nuestra información confidencial.

8.1 Aplicación de cifrado transparente de archivos224

8.1.1 Prevención de la fuga de información corporativa224

8.1.2 Cifrado transparente de archivos que evita la fuga de información corporativa224

8.1.3 Ejemplos de software de cifrado de archivos transparente 225

8.2 Distinguir procesos 226

8.2.1 Procesos confidenciales y procesos ordinarios 226

8.2. ubicación del nombre del proceso 227

8.2.3 Obtener el nombre del proceso actual 228

8.3 Mapeo de memoria y almacenamiento en búfer de archivos 229

8.3.1 Memoria del Bloc de notas archivos mapeados 229

8.3.2 Almacenamiento en búfer de archivos de Windows 230

8.3.3 Almacenamiento en búfer de archivos: elección de texto sin formato o texto cifrado 232

8.3.4 Borrar archivo almacenamiento en búfer 233

8.4 Identificación del cifrado 236

8.4.1 ¿Se guarda fuera del archivo, al principio del archivo o al final del archivo 236

8.4.2 El tamaño del encabezado del archivo oculto 237

8.4.3 Configuración del desplazamiento del encabezado del archivo oculto 239

8.4.4 Desplazamiento de lectura/escritura del encabezado del archivo oculto 240

8.5 Tabla de cifrado de archivos 241

8.5.1 Cuándo realizar la operación de cifrado 241

8.5.2 Bloque de control de archivos y objeto de archivo 242

8.5.3 Estructura de datos de la tabla de cifrado de archivos e inicialización 243

8.5.4 Operación de la tabla de cifrado de archivos: consulta 244

8.5.5 Operación de la tabla de cifrado de archivos: agregar 245

8.5.6 Operación de archivos de tabla cifrada: eliminar 246

8.6 Procesamiento de apertura de archivos 248

8.6.1 Envío directo de IRP para operaciones de consulta y configuración 248

8.6.2 El envío directo de IRP realiza operaciones de lectura/escritura 250

8.6.3 Apertura de archivos no reentrante 252

8.6.4 Preprocesamiento de apertura de archivos 255

8.7 Lectura y escritura Cifrado/descifrado 260

8.7.1 Descifrado en lectura 260

8.7.2 Asignar y liberar MDL 261

8.7. 3 Cifrado de solicitud de escritura 262

8.8 Ensamblaje de crypt_file 265

8.8.1 Inicialización de crypt_file 265

8.8.2 Preprocesamiento IRP de crypt_file 266

8.8 .3 Postprocesamiento IRP de crypt_file 269

Código de muestra de este capítulo 272

Preguntas de ejercicio 272

Capítulo 9 Controlador de microfiltro del sistema de archivos 273

Microsoft, que nunca se detiene, ya ha preparado el marco de filtrado, documentos y ejemplos de código del sistema de archivos de próxima generación. Aunque los ejemplos de los dos primeros capítulos de este libro aún pueden ejecutarse normalmente en Windows 7, los lectores definitivamente se sentirán incómodos si no aprenden las interfaces más recientes. Pero los lectores pueden estar seguros de que, basándose en el aprendizaje previo, es fácil comprender la nueva interfaz.

9.1 Introducción al controlador de microfiltro del sistema de archivos 274

9.1.1 El origen del controlador de microfiltro del sistema de archivos 274

9.1.2 Ventajas y desventajas de Minifilter 275

9.2 Marco de programación de minifiltro 275

9.2.1 Registro de filtrado del sistema de micro archivos 276

9.2.2 Estructura de datos de minifiltro 277

9.2.3 Función de devolución de llamada de desinstalación 280

9.2.4 Función de devolución de llamada previa a la operación 281

9.2.5 Función de devolución de llamada posterior a la operación 284

9.2. 6 Otras funciones de devolución de llamada 285

9.3 Cómo se comunica Minifilter con la aplicación 288

9.3.1 Método para establecer el puerto de comunicación 288

9.3.2 A través de DLL en el usuario mode Ejemplos de uso de puertos de comunicación 290

9.4 Instalación y carga de Minifilter 292

9.4.1 Instalar el archivo INF de Minifilter 293

9.4.2 Iniciar el instalación completada Minifiltro 294

Código de muestra para este capítulo 295

Preguntas de ejercicio 295

Capítulo 10 Filtrado de la capa de transporte de red 296

El autor A menudo usa firewalls, se ven realmente increíbles. Si sospecha que hay un proceso sospechoso en su máquina que ha abierto un puerto de red para robar información confidencial, el firewall se lo recordará, aunque no sabe si se trata de un caballo de Troya. ¿Cómo se hace esto? Este capítulo le revela el misterio.

10.1 Descripción general de TDI 297

10.1.1 Por qué elegir TDI 297

10.1.2 Del socket al kernel de Windows 297

10.1 3 ejemplos de código de filtrado TDI 299

10.2 Marco de filtrado TDI 299

10.2.1 Vinculación de dispositivos TDI 299

10.2.2 La función de distribución única 300

10.2.3 Implementación del marco de filtrado 302

10.2.4 Principales tipos de solicitudes filtradas 304

10.3 Generar solicitud: obtener dirección 305

10.3 .1 Filtrar la solicitud generada 305

10.3.2 Prepararse para resolver la dirección IP y el puerto 307

10.3.3 Obtener la dirección IP generada y el puerto 308

10.3.4 Generación de terminal de conexión y almacenamiento de información relacionada 310

10.4 Solicitud de control 311

10.4.1 Filtrado de TDI_ASSOCIATE_ADDRESS 311

10.4.2 TDI_CONNECT filtrado 313

10.4.3 Otros números de subfunciones 314

10.4.4 Configuración de filtrado de eventos 316

10.4.5 TDI_EVENT_CONNECT tipo configuración de filtrado de eventos 318

10.4.6 Obtener directamente el filtrado de la función de envío 320

10.4.7 Filtrado de la solicitud de limpieza 322

10.5 Ejemplo de la aplicación tdifw.lib de este libro 323

10.5.1 Interfaz de devolución de llamada de la biblioteca tdifw 323

10.5.2 Ejemplos de uso de la biblioteca tdifw 325

Código de muestra de este capítulo 326

Ejercicio 327

Capítulo 11 Controlador del protocolo NDIS 328

Las conexiones de red son solo apariencias, de hecho, eventualmente se convierten en redes que van y vienen en el cable de red. Un hacker inteligente no utilizará Socket para generar una conexión.

Oculta mensajes oscuros en paquetes de datos individuales, ¿aún puedes descubrirlos? El controlador del protocolo NDIS presentado en este capítulo es la base de la herramienta de captura de paquetes de red de Windows.

11.1 Arquitectura de controlador de red y paquete Ethernet 329

11.1.1 Controlador de protocolo y paquete Ethernet 329

11.1.2 Controlador de red NDIS 330

11.2 DriverEntry controlado por protocolo 331

11.2.1 Generar dispositivo de control 331

11.2.2 Registrar protocolo 333

11.3 Vinculación de protocolo y tarjeta de red 335

11.3.1 El concepto de vinculación entre protocolos y tarjetas de red 335

11.3.2 Implementación del procesamiento de devolución de llamada vinculante 335

11.3.3 Vinculación de protocolo Tarjeta de red API 338

11.3.4 Resolver problemas de competencia vinculante 339

11.3.5 Asignar grupos de paquetes y grupos de buffer para recibir y enviar 340

11.3. envío y devolución de llamada de finalización de solicitud 342

11.3.7 Implementación final de ndisprotCreateBinding 345

11.4 Desvinculación 351

11.4.1 Desvinculación La API que se utilizará 351

11.4.2 Implementación de ndisprotShutdownBinding 353

11.5 Operando el controlador de protocolo en modo usuario 356

11.5.1 Recepción y envío de paquetes de protocolo 356

11.5.2 Programación para abrir el dispositivo en modo usuario 357

11.5.3 Usar DeviceIoControl para enviar solicitudes de control 358

11.5.4 Usar WriteFile para enviar paquetes de datos 360

11.5.5 Usar ReadFile para enviar paquetes de datos 362

11.6 Implementación de funciones en modo kernel 363

11.6.1 Distribución e implementación de solicitudes 363

p >

11.6.2 Esperando a que se complete la vinculación del dispositivo y especificando el nombre del dispositivo 364

11.6.3 La finalización de la asignación del dispositivo 365

11.6.4 Procesando la lectura solicitud 368

11.6.5 Procesamiento de solicitudes de escritura 370

11.7 Devoluciones de llamada de recepción basadas en protocolo 374

11.7.1 Funciones de devolución de llamada relacionadas con la recepción de paquetes 374

11.7.2 Implementación de ReceiverHandler 376

11.7.3 Implementación de TransferDataCompleteHandler 380

11.7.4 Implementación de ReceiverPacketHandler 381

11.7.5 Entrada de recibir paquetes de datos Cola 383

11.7.6 Quitar de la cola el paquete de datos recibido y completar la solicitud de lectura 385

Código de muestra de este capítulo 388

Preguntas de ejercicio 389

Capítulo 12 Controlador de puerto pequeño NDIS 390

Si estoy cansado de Ethernet lleno de lagunas, ¿hay algo más que pueda servir como interfaz de red? Por supuesto, cualquier dispositivo que pueda comunicarse tiene el potencial de reemplazar a Ethernet. Incluso si no estamos dispuestos a modificar innumerables aplicaciones programadas a través de la interfaz TCP, aún podemos usar otros dispositivos de comunicación para virtualizar la tarjeta de red. Este capítulo presenta la tecnología de uso de controladores de puertos pequeños para virtualizar tarjetas de red.

12.1 Aplicación y descripción general del controlador Miniport 391

12.1.1 Aplicación del controlador Miniport 391

12.1.2 Ejemplo de controlador Miniport 392

p >

12.1.3 Descripción general del funcionamiento y programación del controlador de minipuerto 393

12.2 Inicialización del controlador de minipuerto 393

12.2.1 Entrada del controlador del controlador de minipuerto 393

12.2.2 Estructura del adaptador del controlador de minipuerto 396

12.2.3 Lectura de información de configuración 397

12.2.4 Configuración del contexto del adaptador de minipuerto 398

12.2 .5 Implementación de MPInitialize 399

12.2.6 Implementación de MPHalt 402

12.3 Abrir dispositivo ndisprot 403

12.3.1 Destino de E/S 403

12.3.2 Enviar una solicitud DeviceIoControl al destino IO 404

12.3.3 Abra la interfaz ndisprot y complete la configuración del dispositivo 406

12.4 Utilice ndisprot para enviar un paquete 409

12.4.1 Interfaz de envío de paquetes impulsada por minipuerto 409

12.4.2 Bloque de control de envío (TCB) 409

12.4.3 Atravesar el grupo de paquetes y complete el TCB 412

12.4.4 Construcción y envío de solicitudes de escritura 415

12.5 Uso de ndisprot para recibir paquetes 417

12.5.1 API del kernel para enviar paquetes de datos 417

12.5.2 Enviar el paquete 418 desde el bloque de control de recepción (RCB)

12.5.3 Función de finalización para la solicitud de lectura ndisprot 420

12.5 .4 Envío de solicitud de lectura 422

12.5.5 Tarea de trabajo WDF para lectura de paquetes 424

12.5.6 Generación y puesta en cola de tarea de trabajo de lectura ndisedge 426

12.6 Otras características Implementación de la función de devolución de llamada 428

12.6.1 Devolución del paquete 428

12.6.2 Finalización directa del procesamiento de consultas OID 429

12.6.3 OID procesamiento de configuración 432

Código de muestra 433 de este capítulo

Preguntas de ejercicio 434

Capítulo 13 Controlador de capa intermedia NDIS 435

Cuando estamos no satisfecho con la captura Cuando se intenta controlar todos los paquetes que entran y salen de la máquina local, el controlador de capa intermedia NDIS es la mejor opción. Aquí se potencia la función del firewall: ya no nos conformamos con ver la conexión, el puerto y la dirección IP de la otra parte, sino que debemos ver la estructura original de cada paquete de datos. Este capítulo presenta el controlador de capa intermedia NDIS.

13.1 Descripción general del controlador de capa intermedia NDIS 436

13.1.1 Resumen de la arquitectura de red de Windows 436

13.1.2 Introducción al controlador de capa intermedia NDIS 437

13.1.3 Aplicación del controlador de capa intermedia NDIS 438

13.1.4 Estudio en profundidad de la estructura de descriptores de paquetes NDIS 439

13.2 Entrada y vinculación de controlador de capa intermedia 442

13.2.1 Función de entrada del controlador de capa intermedia 442

13.2.2 Dispositivo NIC de enlace dinámico 443

13.2.3 Puerto pequeño inicialización (MpInitialize) 445

13.3 El controlador de capa intermedia envía paquetes de datos 447

13.3.1 Principio de envío de paquetes de datos 447

13.3.2 Descriptor de paquete " reutilizar" 448

13.3.3 Descriptor de paquete "reaplicación" 451

13.3.4 Finalización asincrónica del envío de paquetes de datos 453

13.4 Controlador de capa intermedia que recibe paquetes de datos 455

13.4.1 Descripción general de la recepción de paquetes de datos 455

13.4.2 Uso de PtReceive para recibir paquetes de datos 456

13.4.3 Uso de PtReceivePacket para recibir 461

13.4.4 Filtrado de paquetes derecho 463

13.5 Consulta y configuración del controlador intermedio 466

13.5.1 Procesamiento de solicitudes de consulta 466

13.5. 2 Configuración del procesamiento de solicitudes 468

13.6 Identificador NDIS 470

13.6.1 Puntero de estructura invisible 470

13.6.2 Identificador NDIS común 471

13.6 .3 NDIS maneja el problema de uso indebido 473

13.6.4 Una solución 475

13.7 Generación de dispositivos de control comunes 476

13.7.1 Controlador en la capa intermedia Agregar dispositivos comunes 476

13.7.2 Usar métodos tradicionales para generar dispositivos de control 478

Código de muestra para este capítulo 483

Preguntas de ejercicio 483

Apéndice A Cómo utilizar el código fuente CD 485 de este libro