Se produce una infracción de acceso de BEX o APPCRASH en Windows Server 2008 R2 con Terminal Services.

Este artículo ayuda a resolver la infracción de acceso de BEX o APPCRASH en Windows Server 2008 R2 con Terminal Services.

Versión del producto original:   Winsock
Número de KB original:   2279689

Síntomas

Puede experimentar una infracción de acceso cuando la aplicación:

  • Usa la API de Winsock o Crypto API y, con frecuencia, puede cargar o descargar una DLL dinámicamente.
  • Es una aplicación multiproceso.

Cuando se produce una infracción de acceso, se genera el siguiente mensaje de error. Puede que reciba APPCRASH o un error de evento BEX.

Sample.exe aplicación ha dejado de funcionar.

Firma del problema:
Nombre del evento de problema: APPCRASH
Nombre de la aplicación: Sample.exe
Versión de la aplicación: 0.0.0.0
Marca de hora de la aplicación: 4afa1ed3
Nombre del módulo de error: MSVCR80.dll
Versión del módulo con errores: 8.0.50727.4927
Marca de hora del módulo de error: 4a2752ff
Código de excepción: 40000015
Desplazamiento de la excepción: 000046b4
Versión del sistema operativo: 6.1.7600.2.0.0.16.7
IDENTIFICADOR de configuración regional: 1041

Firma del problema:
Nombre del evento de problema: BEX
Nombre de la aplicación: Sample.exe
Versión de la aplicación: 0.0.0.0
Marca de hora de la aplicación: 4afa1ed3
Nombre del módulo de error: mswsock.dll
Versión del módulo con errores: 6.1.7600.16385
Marca de hora del módulo de error: 4a5bda77
Desplazamiento de la excepción: 000016bf
Código de excepción: c0000005
Datos de la excepción: 00000008
Versión del sistema operativo: 6.1.7600.2.0.0.16.7
IDENTIFICADOR de configuración regional: 1041

Causa

La causa raíz de este problema es un cambio realizado en Windows Server 2008 R2 en el momento en que se inicializa el módulo de tsappcmp.dll (DLL de compatibilidad de aplicaciones de servicios de escritorio remoto), lo que hace que la aplicación llame a funciones DLL antes de establecer un vínculo a funciones dentro de la DLL.

Solución

Para resolver este problema, realice una de las cuatro opciones siguientes:

  1. Excluya la aplicación que produce el error de prevención de ejecución de datos (DEP).

  2. Agregue la opción del vinculador/tsaware para compilar la aplicación.

  3. Agregue la opción /tsaware con editbin.exe herramienta.

    • Ejecute el símbolo del sistema de Visual Studio.

    • Escriba el comando siguiente.

      editbin.exe /TSAWARE <Program file name>
      
    • Puede confirmar que el programa conoce el servicio de Terminal Server siguiendo el comando.

      editbin.exe /headers <Program file name>
       :
       8540 DLL characteristics
       Dynamic base
       NX compatible
       No structured exception handler
       Terminal Server Aware
      

Para obtener más información acerca de la marca TSAware, vea el cambio en el comportamiento de la marca TSAware en .NET Framework 3,5 SP1