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 p>
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 p >
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 p>
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 p>
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 p>
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 p>
¿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 p>
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 p>
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 p>
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 p>
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 p >
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