Directorio para la programación principal de Windows
Prefacio del traductor
Prólogo
Introducción al traductor
La parte 1 es una lectura obligada para los programadores
Capítulo Capítulo 1 Manejo de errores
1.1 Implementación del manejo de errores personalizado
1.2 Rutina de visualización de errores
Capítulo 2 Unicode
2.1 Conjunto de caracteres
2.1.1 Juegos de caracteres de un solo byte y doble byte
2.1.2 Unicode: juego de caracteres de byte ancho
2.2 Por qué es necesario Unicode p>
p>
2.3 Windows 2000 y Unicode
2.4 Windows 98 y Unicode
2.5 Windows CE y Unicode
2.6 Comentarios p>
2.7 Acerca de COM
2.8 Cómo escribir código fuente Unicode
2.8.1 Compatibilidad Unicode con la biblioteca en tiempo de ejecución C
2.8.2 Datos Unicode tipos definidos por Windows
p>
2.8.3 Funciones Unicode y funciones ANSI en sistemas Windows
2.8.4 Funciones de cadena de Windows
2.9 Crear aplicaciones cumplir con las especificaciones ANSI y Unicode
2.9.1 Funciones de cadenas de Windows
2.9.2 Recursos
2.9.3 Determinar si el texto es ANSI o Unicode
2.9.4 Convertir cadenas entre Unicode y ANSI
Capítulo 3 Objetos del kernel
3.1 Concepto de objetos del kernel
3.1.1 Conteo de uso p>
3.1.2 Seguridad
3.2 Tabla de manejo de objetos del kernel
3.2.1 Crear objeto del kernel
3.2.2 Cerrar objeto del kernel
3.3 Compartir objetos del kernel entre procesos
3.3.1 Herencia de identificadores de objetos
3.3.2 Cambiar indicadores de identificadores
3.3.3 Nombrar objetos
3.3.4 Espacio de nombres de Terminal Server
3.3.5 Copiar identificadores de objetos
Parte 2 Tareas de programación completas
Parte 4 Proceso del capítulo
4.1 Escribir la primera aplicación de Windows
4.1.1 El identificador de instancia del proceso
4.1.2 El identificador de instancia anterior del proceso
4.1.3 Línea de comando del proceso
4.1.4 Variables de entorno del proceso
4.1.5 Afinidad
4.1.6 Errores del proceso Modo
4.1.7 Unidad y directorio actual
4.1.8 Directorio actual
4.1.9 Versión del sistema
4.2 Función CreateProcess
4.2.1 pszApplicationName y pszCommandLine
4.2.2 psaProcess, psaThread y bInheritHandles
4.2.3 fdwCreate
4.2.4 pvEnvironment
4.2.5 pszCurDir
4.2.6 psiStartInfo
4.2.7 ppiProcInfo
4.3 Terminación del proceso
4.3.1 El retorno de la función de entrada del hilo principal
4.3.2 Función ExitProcess
Número
4.3.3 Función TerminateProcess
4.3.4 Terminación de todos los hilos del proceso
4.3.5 Terminación del proceso
4.4 Subproceso
4.5 Enumerar los procesos que se ejecutan en el sistema
Capítulo 5 Trabajos
5.1 Restricciones a los procesos de trabajo
5.2 Poner el proceso en el trabajo
5.3 Finalizar la ejecución de todos los procesos en el trabajo
5.4 Consultar las estadísticas del trabajo
5.5 Información de notificación del trabajo
5.6 Aplicación de muestra de JobLab
Capítulo 6 Conocimientos básicos de los subprocesos
6.1 Cuándo crear un subproceso
6.2 Cuándo no crear un subproceso
6.3 Escribir la función del primer hilo
6.4 Función CreateThread
6.4.1 psa
6.4.2 cbStack
6.4 3 pfnStartAddr. y pvParam
6.4.4 fdwCreate
6.4.5 pdwThreadID
6.5 Terminar hilo
6.5.1 La función de hilo regresa
>6.5.2 Función ExitThread
6.5.3 Función TerminateThread
6.5.4 Terminar el hilo cuando el proceso termina de ejecutarse
6.5.5 Operaciones de hilo que ocurren cuando finaliza el tiempo de ejecución
6.6 Algunos detalles internos de los subprocesos
6.7 Consideraciones para las bibliotecas de tiempo de ejecución de C/C
6.7.1 Vaya, se creó CreateThread incorrectamente llamado
6.7.2 Funciones de la biblioteca de tiempo de ejecución de C/C que no deben llamarse
6.8 Identidad de subprocesos
Capítulo 7 Programación, prioridad y afinidad de subprocesos
7.1 Suspensión y reanudación de la ejecución de subprocesos
7.2 Suspensión y reactivación de procesos
7.3 Suspensión
7.4 Cambio de subprocesos
7.5 Tiempo de ejecución del hilo
7.6 Cambio de contexto
7.7 Prioridad del hilo
7.8 Descripción abstracta de la prioridad
7.9 Prioridades de programación
7.9.1 Aumentar dinámicamente el nivel de prioridad de los subprocesos
7.9.2 Ajustar el programador para el proceso en primer plano
7.9.3 Programación de la aplicación de muestra de laboratorio
7.10 Afinidad
Capítulo 8 Sincronización de subprocesos en modo usuario
8.1 Acceso atómico: familia de funciones entrelazadas
8.2 Líneas de caché
8.3 Sincronización avanzada de subprocesos
8.4 Secciones críticas
8.4.1 Descripción precisa de las secciones críticas
8.4.2 Secciones críticas y bloqueos de bucle
8.4.3 Secciones críticas y manejo de errores
8.4.4 Consejos y trucos útiles
Capítulo 9 Sincronización de subprocesos y objetos del kernel
9.1 Funciones de espera
p>
9.2 Efectos secundarios de una espera exitosa
9.3 Objetos del kernel de eventos
9.4 Objeto del kernel del temporizador de espera
9.4.1 Poner en cola elementos APC con temporizadores de espera
9.4.2 Características sueltas de los temporizadores
9.5 Objeto del kernel semáforo
9.6 Objetos del kernel mutuamente excluyentes
9.6.1 Problemas de lanzamiento
9.6.2 Comparación de objetos mutuamente excluyentes y secciones críticas
9.6.3 Aplicación de cola.
Ejemplo de programa
9.7 Tabla de objetos de sincronización de subprocesos
9.8 Otras funciones de sincronización de subprocesos
9.8.1 E/S de dispositivo asíncrono
9.8. 2WaitForInputIdle
9.8.3 MsgWaitForMultipleObjects(Ex)
9.8.4 WaitForDebugEvent
9.8.5SignalObjectAndWait
Capítulo 10 Kit de herramientas de sincronización de subprocesos p>
10.1 Implementación de la sección crítica: Optex
10.2 Creación de tipos de datos seguros para subprocesos y anti-semáforos
10.3 Protección de programas de escritura única y lectura múltiple
p>
10.4 Implementación de la función WaitForMultipleExpressions
Capítulo 11 Grupo de subprocesos
11.1 Escenario 1: llamar a la función de forma asincrónica
11.2 Escenario 2: según regulaciones Llamar a la función en el intervalo de tiempo
11.3 Escenario 3: Llamar a la función cuando un objeto del kernel cambia al estado notificado
11.4 Escenario 4: Llamar a la función cuando la I/ asíncrona Se completó la solicitud
Capítulo 12 Fibras
12.1 Uso de fibras
12.2 Aplicación de muestra de contador
Parte 3 Gestión de memoria
Capítulo 13 Estructura de la memoria de Windows
13.1 Espacio de direcciones virtuales del proceso
13.2 Partición del espacio de direcciones virtuales
13.2.1 Partición de asignación de puntos de interrupción no válida (aplicable a Windows 2000 y Windows 98)
13.2.2 Partición compatible con aplicaciones MS-DOS/Windows de 16 bits (aplicable únicamente a Windows 98)
13.2.3 Partición en modo de usuario (aplicable a Windows 2000 y Windows 98)
13.2.4 Partición prohibida de 64 KB (aplicable únicamente a Windows 2000)
13.2.5 ***Partición MMF compartida (aplicable únicamente a Windows) 98 )
13.2.6 Partición en modo kernel (utilizada en Windows 2000 y Windows 98)
13.3 Región del espacio de direcciones
13.4 Envío de particiones físicas en el espacio de direcciones región Almacenamiento
13.5 Almacenamiento físico y archivo de página
13.6 Propiedades de protección
13.6.1 Acceso de copia en escritura
13.6. 2 indicadores de atributos de protección de acceso especial
13.7 Uso de todos los elementos juntos
13.7.1 Detalles internos de las regiones
13.7.2 Diferencias en los espacios de direcciones en Windows 98
p>
13.8 La importancia de la alineación de datos
Capítulo 14 Memoria virtual
14.1 Información del sistema
14.2 Estado de la memoria virtual
14.3 Determinar el estado del espacio de direcciones
14.3.1 Función VMQery
14.3.2 Ejemplo de aplicación de tabla de memoria virtual
Capítulo 15 Virtual Memoria en Aplicaciones Uso de
15.1 Área reservada en el espacio de direcciones
15.2 Confirmar memoria en el área reservada
15.3 Reservar área y confirmar memoria al mismo tiempo p>
15.4 Cuándo comprometer el almacenamiento físico
15.5 Recuperación de almacenamiento físico y liberación del área de espacio de direcciones
15.5.1 Cuándo reciclar el almacenamiento físico
15.5.2 Aplicación de muestra de asignación de memoria virtual
Prefacio
15.6 Cambiar atributos de protección
15.7 Borrar el contenido de la memoria física
15.8 Extensión de la ventana de direcciones (sólo para Windows 2000)
Capítulo Capítulo 16 Pila de subprocesos
16.1 Pila de subprocesos en Windows 98
16.2 Función de detección de pila en la biblioteca de tiempo de ejecución C/C
16.3 Aplicación de muestra de suma
Capítulo 17 Archivos asignados en memoria
17.1 Archivos ejecutables y archivos DLL asignados en memoria
17.1.1 Entre múltiples instancias de archivos ejecutables o DLL Datos estáticos que no se pueden compartir
17.1.2 Compartir datos estáticos entre varias instancias de un ejecutable o DLL
17.1.3 Aplicación de muestra AppInst
17.2 Archivos de datos asignados en memoria
17.2 .1 Método 1: Un archivo, un caché
17.2.2 Método 2: Dos archivos, un caché
17.2.3 Método 3: Un archivo, dos cachés
17.2.4 Método 4: Un archivo, cero cachés
17.3 Uso de archivos asignados en memoria
17.3.1 Paso 1: Crear o abrir un objeto de núcleo de archivo
17.3.2 Paso 2: Crear un objeto kernel de mapeo de archivos
17.3.3 Paso 3: Convertir los datos del archivo se asignan al espacio de direcciones del proceso
17.3.4 Paso 4 : Desasignar los datos del archivo en el espacio de direcciones del proceso
17.3.5 Pasos 5 y 6: cerrar el objeto de asignación de archivos y el objeto de archivo
17.3.6 Aplicación de muestra de orden inverso del archivo p>
17.4 Procesamiento de archivos grandes utilizando archivos mapeados en memoria
17.5 Consistencia de los archivos mapeados en memoria
17.6 Configuración de la dirección base de los archivos mapeados en memoria
17.7 Detalles específicos de la implementación de archivos mapeados en memoria
17.8 Uso de archivos mapeados en memoria para lograr el intercambio de datos entre procesos
17.9 Archivos mapeados en memoria compatibles con archivos de página
17.10 Escasamente comprometidos archivos mapeados en memoria
Capítulo 18 Montón
18.1 Proceso de montón predeterminado
18.2 Razones para crear un montón auxiliar
18.2.1 Protección de componentes
18.2.2 Administrar la memoria de manera más eficiente
18.2 .3 Realizar acceso local
18.2.4 Reducir la sobrecarga de sincronización de subprocesos
18.2.5 Lanzamiento rápido
18.3 Método para crear un montón auxiliar
18.3.1 Asignar bloques de memoria en el montón
18.3.2 Cambiar el tamaño del bloque de memoria p>
18.3.3 Obtener el tamaño del bloque de memoria
18.3.4 Liberar el bloque de memoria
18.3.5 Destruir el montón
18.3 .6 Usar el montón con el programa C
18.4 Otras funciones del montón
Cuarta parte de la biblioteca de enlaces dinámicos
Capítulo 19 Conceptos básicos de DLL
19.1 DLL y espacio de direcciones de proceso
19.2 Funcionamiento general de DLL
19.3 Crear módulo DLL
19.3.1 El verdadero significado de exportar
19.3.2 Usar herramientas que no sean de Visual C para crear DLL
19.4 Crear módulo ejecutable
19.5 Ejecutar módulos ejecutables
Capítulo 20 Tecnología DLL avanzada p>
20.1 Carga explícita de módulos DLL y enlaces simbólicos
20.1.1 Carga explícita de DL
Módulo L
20.1.2 Desinstalar explícitamente el módulo DLL
20.1.3 Vincular explícitamente a símbolos exportados
20.2 Función de entrada de DLL
20.2 .1 Notificación DLL_PROCESS_ATTACH
20.2.2 Notificación DLL_PROCESS_DETACH
20.2.3 Notificación DLL_THREAD_ATTACH
20.2.4 Notificación DLL_THREAD_DETACH
20.2.5 Llamar secuencialmente a DllMain
20.2.6 Biblioteca de tiempo de ejecución DllMain y C/C
20.3 Carga retrasada de DLL
20.4 Reenviador de funciones
20.5 DLL conocidas
20.6 Redirección de DLL
20.7 Restablecimiento de la dirección base del módulo
20.8 Módulos de enlace
Capítulo 21 Almacenamiento local de subprocesos
21.1 TLS dinámico
21.2 TLS estático
Capítulo 22 Inyección de DLL y enlace de API
22.1 Inyección de DLL: un ejemplo
22.2 Inyectar DLL usando el registro
22.3 Inyectar DLL usando ganchos de Windows
22.4 Inyectar DLL usando un subproceso remoto
22.4.1 Inyectar aplicación de muestra de biblioteca
22.4.2 Image Walk DLL
22.5 Inyectar DLL usando Trojan DLL
22.6 Inyectar DLL como depurador
22.7 Usar archivos asignados en memoria para inyectar código en el Plataforma Windows 98
22.8 Uso de CreateProcess para inyectar código
22.9 Enganche de API: un ejemplo
22.9.1 Implemente el enganche de API sobrescribiendo el código
22.9.2 Implementar el enlace API operando la parte de importación del módulo
22.9.3 Aplicación de muestra LastMsgBoxInfo
Parte 5 Manejo estructurado de excepciones
Capítulo 23 Rutinas de manejo de terminaciones
23.1 Funcenstein1
23.2 Funcenstein2
23.3 Funcenstein3
23.4 Funcfurter1
23.5 Cuestionario: FuncaDoodleDoo
23.6 Funcenstein4
23.7 Funcarama1
23.8 Funcarama2
23.9 Funcarama3
23.10 Funcarama4: La última frontera
23.11 Notas sobre los bloques finalmente
23.12 Funcarama2
23.13 SEH finaliza la aplicación de muestra
Capítulo 24 Manejadores de excepciones y excepciones de software
24.1 Comprender los filtros de excepción y los controladores de excepciones a través de ejemplos
24.1.1 Funcmeister1
24.1.2 Funcmeister2
24.2 EXCEPTION_EXECUTE_HANDLER
24.2.1 Algunos ejemplos útiles
24.2.2 Expansión global
24.2.3 Pausar la expansión global
24.3 E
XCEPTION_CONTINUE_EXECUTION
24.4 EXCEPTION_CONTINUE_SEARCH
24.5GetExceptionCode
24.5.1 Excepciones relacionadas con la memoria
24.5.2 Excepciones relacionadas con excepciones
24.5.3 Excepciones relacionadas con la depuración
24.5.4 Excepciones relacionadas con enteros
24.5.5 Excepciones relacionadas con punto flotante
24.6 GetExceptionInformation
24.7 Excepciones de software
Capítulo 25 Excepciones no controladas y excepciones C
25.1 Depuración justo a tiempo
25.2 Cerrar excepciones Cuadro de mensaje
25.2.1 Forzar la finalización del proceso
25.2.2 Envolver una función de hilo
25.2.3 Envolver todas las funciones de hilo
25.2.4 Llamar automáticamente al depurador
25.3 Llame usted mismo a UnhandledExceptionFilter
25.4 Detalles internos de la función UnhandledExceptionFilter
25.5 Excepciones y depuradores
25.6 Comparación de excepciones de C y excepciones estructuradas
Ventana de la parte 6
Capítulo 26 Mensajes de ventana
26.1 Cola de mensajes de subprocesos
26.2 Publicar un mensaje a la cola de mensajes de un hilo
26.3 Enviar un mensaje a una ventana
26.4 Activar un hilo
26.4.1 Indicador de estado de cola
26.4.2 Algoritmo para extraer mensajes de la cola de subprocesos
26.4.3 Usar un objeto del núcleo o un indicador de estado de la cola para activar un subproceso
26.5 Usar datos de envío de mensajes
26.6 Cómo maneja Windows los caracteres y cadenas ANSI/Unicode
Capítulo 27 Modelo de entrada de hardware y estado de entrada local
27.1 Hilo de entrada original
p>
27.2 Estado de entrada local
27.2.1 Entrada y enfoque del teclado
27.2.2 Gestión del cursor del mouse
27.3 Convertir cola de entrada virtual y asociación de estado de entrada local
27.3.1 Aplicación de muestra LISLab
27.3.2 Aplicación de muestra LISWatch
Apéndice
Apéndice A Entorno de compilación
Apéndice B Analizador de mensajes, macros de subcontrol y macros API