Compartir a través de


Comprobador de aplicaciones (Guía paso a paso de calidad de aplicaciones de Windows 7 y Windows Server 2008 R2)

Plataformas afectadas

Clients: Windows XP, Windows Vista, Windows 7
Servidores: Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

Descripción

Promueva y aplique el Comprobador de aplicaciones como puerta de calidad para todo el desarrollo. Incluye varias mejoras:

  • Hemos proporcionado comprobaciones adicionales para solucionar los problemas detectados por el equipo de informes de errores de Windows durante el uso del grupo de subprocesos.
  • Combinamos versiones de 32 y 64 bits del paquete para abordar los cambios en Windows 7, incluidas las necesidades de probar componentes de 32 bits en una versión de 64 bits de Windows, así como para la simplificación general.
  • Hemos incluido comprobaciones adicionales para aplicaciones multiproceso, que ejecutan aplicaciones de 32 bits en Windows de 64 bits, así como muchas correcciones de errores.

Estos cambios no deberían tener ningún impacto negativo en los usuarios que no habilitan las comprobaciones de subprocesos; aquellos que sí, deberían recibir soporte técnico adicional en la detección y el diagnóstico de problemas de uso del grupo de subprocesos existentes. Tanto si habilita comprobaciones de subprocesos como si no, se beneficiará de las otras mejoras y correcciones de errores en este servicio.

Aunque hay una ligera penalización de rendimiento al usar este servicio, los niveles de rendimiento deberían permanecer aceptables porque normalmente no se ejecutan en entornos comerciales.

Uso

Información general

Para ofrecer aplicaciones confiables de Windows:

  1. Pruebe las aplicaciones escritas en código no administrado (nativo) con el comprobador de aplicaciones en el depurador y con el montón de página completa antes de entregarlo a los clientes.
  2. Siga los pasos proporcionados por el comprobador de aplicaciones para resolver las condiciones errantes.
  3. Una vez publicada la aplicación, supervise periódicamente los informes de errores de la aplicación recopilados por el informe de errores de Windows.

Las comprobaciones del grupo de subprocesos están habilitadas de forma predeterminada en el encabezado de comprobación "Aspectos básicos". Como se incluye en la configuración predeterminada, los usuarios solo deben ejecutar el comprobador de aplicaciones en su código con la configuración predeterminada para aprovechar las nuevas comprobaciones.

Detalles

Como mínimo, debe ejecutar el comprobador de aplicaciones con la opción Aspectos básicos seleccionada. Esto es necesario para WinLogo y WinQual. La configuración Aspectos básicos comprueba lo siguiente:

  • Detalles de detención de excepciones: garantiza que las aplicaciones no ocultan las infracciones de acceso mediante el control de excepciones estructurado
  • Detalles de detención de identificadores: pruebas para asegurarse de que la aplicación no intenta usar identificadores no válidos
  • Detalles de detención de montones: comprueba si hay problemas de daños en la memoria en el montón
  • Detalles de detención de entrada y salida: supervisa la ejecución de E/S asincrónica y realiza varias validaciones
  • Detalles de detención de fugas: detecta pérdidas mediante el seguimiento de los recursos realizados por un archivo DLL que no están liberados en el momento en que se descargó el archivo DLL
  • Detalles de detención de bloqueos: comprueba el uso correcto para las secciones críticas
  • Detalles de detención de memoria: garantiza que las API para las manipulaciones de espacio virtual se usan correctamente (por ejemplo, VirtualAlloc, MapViewOfFile)
  • Detalles de detención de TLS: garantiza que las API de almacenamiento local de subprocesos se usan correctamente
  • Detalles de detención del grupo de subprocesos: garantiza el uso correcto de las API de subproceso y aplica comprobaciones de coherencia en los estados de worker-thread-states después de una devolución de llamada

Si la aplicación va a migrar desde una aplicación "Pre-Vista", querrá aprovechar "LuaPriv" (también conocido como comprobaciones de UAC). El predictor de privilegios de cuenta de usuario limitado (LuaPriv) tiene dos objetivos principales:

  • Predictivo: al ejecutar una aplicación con privilegios administrativos, prediga si esa aplicación funcionaría también si se ejecuta con menos privilegios (por lo general, como usuario normal). Por ejemplo, si la aplicación escribe en archivos que solo permiten el acceso de los administradores, esa aplicación no podrá escribir en el mismo archivo si se ejecuta como no administrador.
  • Diagnóstico: mientras se ejecuta con privilegios que no son de administrador, identifique los posibles problemas que ya pueden existir con la ejecución actual. Siguiendo con el ejemplo anterior, si la aplicación intenta escribir en un archivo que concede acceso solo a los miembros del grupo de administradores, la aplicación recibirá un error de ACCESS_DENIED. Si la aplicación no funciona correctamente, esta operación puede ser el culpable.

LuaPriv identifica los siguientes tipos de problemas:

Problema potencial Descripción
Espacios de nombres restringidos La creación de un objeto de sincronización con nombre (Event, Semaphore, Mutex, etc.) sin un espacio de nombres puede complicar la ejecución sin privilegios en algunos sistemas operativos, ya que el sistema operativo puede optar por colocar el objeto en un espacio de nombres restringido. La creación de este objeto en un espacio de nombres restringido (como el espacio de nombres Global) requiere SeCreateGlobalPrivilege, que solo se concede a los administradores.
LuaPriv marca ambos problemas si los detecta.
Comprobaciones de administrador estrictas Algunas aplicaciones interrogan el token de seguridad del usuario para averiguar cuánto privilegio tiene. En esos casos, la aplicación puede cambiar su comportamiento en función de los privilegios que cree que tiene el usuario.
LuaPriv marca las llamadas de API que devuelven esta información.
Solicitud de privilegios Una aplicación puede intentar habilitar un privilegio relevante para la seguridad (como SeTcbPrivilege o SeSecurityPrivilege) antes de realizar una operación que lo requiera.
LuaPriv marca los intentos de habilitar privilegios relevantes para la seguridad.
Faltan privilegios Si una aplicación intenta habilitar un privilegio que el usuario no tiene, probablemente señala que la aplicación espera el privilegio, lo que puede provocar diferencias de comportamiento.
LuaPriv marca las solicitudes de privilegios realizadas erróneamente.
Operaciones en archivos INI Los intentos de escritura en archivos INI asignados (WritePrivateProfileSection y API similares) pueden producir un error con un usuario que no es administrador.
LuaPriv marca estas operaciones.
Acceso denegado Si la aplicación intenta acceder a un objeto (Archivo, clave del Registro, etc.), pero se produce un error en el intento debido a un acceso insuficiente, es probable que la aplicación espere ejecutarse con más privilegios de los que tiene.
LuaPriv marca los intentos de apertura de objetos que producen errores de ACCESS_DENIED y errores similares.
Denegación de ACE Si un objeto tiene denegaciones de ACE en su DACL, deniega explícitamente el acceso a entidades específicas.
Esto es poco común y dificulta la predicción, por lo que LuaPriv marca las denegaciones de ACE cuando las encuentra.
Acceso restringido Si una aplicación intenta abrir un objeto para los derechos que no se conceden a los usuarios normales (por ejemplo, intentando escribir en un archivo en el que solo pueden escribir los administradores), es probable que la aplicación no funcione igual cuando se ejecuta como un usuario normal.
LuaPriv marca estas operaciones.
MAXIMUM_ALLOWED Si una aplicación abre un objeto para MAXIMUM_ALLOWED, la comprobación de acceso real en el objeto se producirá en otro lugar. La mayoría del código que hace esto no funciona correctamente y casi sin duda funcionarán de forma diferente cuando se ejecute sin privilegios.
LuaPriv marca por tanto todos los incidentes de MAXIMUM_ALLOWED.

 

Los problemas que se suelen pasar por alto se capturan en las nebulosas comprobaciones misceláneas:

  • Detalles de detención de API peligrosas
  • Detalles de detención de pilas con modificaciones
  • Sustitución de tiempo

Hemos agregado un nuevo comprobador de impresión. Esta capa ayuda a encontrar y solucionar problemas que pueden producirse cuando una aplicación llama al subsistema de impresión. El comprobador de impresión tiene como destino las dos capas del subsistema de impresión, la capa PrintAPI y la capa PrintDriver.

Capa de API de impresión

El comprobador de impresión prueba la interfaz entre un programa y Winspool.drv y prntvpt.dll y prueba las interfaces de esos archivos DLL.

Capa de controlador de impresión

El comprobador de impresión también prueba la interfaz entre un controlador de impresión principal, como UNIDRV.DLL, UNIDRUI.DLL, PSCRIPT5.DLL, PS5UI.DLL o MXDWDRV.DLL, y los complementos del controlador de impresión.

Tenga en cuenta que algunas de estas comprobaciones son solo para Windows 7 y otras simplemente funcionarán mejor en Windows 7.

Normalmente, solo las versiones de depuración ejecutan el comprobador de aplicaciones, por lo que el rendimiento no suele ser un problema. Si surgen problemas de rendimiento debidos al uso de esto, o cualquier otra comprobación del comprobador de aplicaciones, ejecute una comprobación cada vez hasta que haya realizado todas las comprobaciones necesarias.

Casi el 10 % de los bloqueos de aplicaciones en los sistemas Windows se deben a daños en el montón. Estos bloqueos son casi imposibles de depurar después del hecho. La mejor manera de evitar estos problemas es probar con las características del montón de páginas que se encuentran en el comprobador de aplicaciones. Hay dos tipos de montón de páginas: "Full" y "Light". Full es el valor predeterminado; forzará la detención de un depurador al instante al detectar daños. Esta característica DEBE ejecutarse mientras se encuentra en el depurador. Sin embargo, también es la más exigente en cuanto a recursos. Si un usuario tiene problemas de tiempo y ya ha ejecutado un escenario en el montón de páginas "Full", establecerlo en "Light" probablemente solucionará estos problemas. Además, el montón de páginas Light no se bloquea hasta que se cierra el proceso. Proporciona un seguimiento de pila a la asignación, pero puede tardar considerablemente más tiempo en diagnosticar que aprovechar su homólogo Full.

Supervise el estado de confiabilidad de las aplicaciones a través del portal web de Winqual. En este portal se muestran los informes de errores recopilados a través del informe de errores de Windows, por lo que es fácil identificar los errores más frecuentes. Obtenga información sobre esto en Informe de errores de Windows: Introducción. Microsoft no cobra por este servicio.

Para aprovechar WinQual, debe:

  1. Registre su empresa para WinQual, que requiere un identificador de VeriSign. Puede encontrar información de Windows 7 sobre WinQual en el portal para desarrolladores agrupado en Windows Vista SP1 \ Windows Server 2008. Pronto tendrá una ubicación de Windows 7.
  2. Asigne las aplicaciones de ISV a un nombre de producto y el nombre del ISV, que vincula los informes de error a la empresa. Otros ISV no pueden ver los informes de errores.
  3. Use el portal para identificar los principales problemas. Los ISV también pueden crear respuestas que informen a los clientes qué pasos realizar después de un error. El sistema de respuesta admite más de 10 idiomas en todo el mundo.

Una nota adicional: la calidad del comprobador de aplicaciones dependerá de las rutas de código en las que se ejecuta. El valor de combinar esta herramienta con una herramienta de cobertura de código es incalculable.

Herramientas de depuración para Windows:

Comprobador de aplicaciones:

WinQual: