Red de conocimiento informático - Problemas con los teléfonos móviles - Directorio para la programación principal de Windows

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>

2.3 Windows 2000 y Unicode

2.4 Windows 98 y Unicode

2.5 Windows CE y Unicode

2.6 Comentarios

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

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

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

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

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

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

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