¿Donde aloja Windows estos mensajes?
¿donde están localizados?
El título de tu pregunta es ligeramente distinto a la pregunta que formulas en el post, y se puede interpretar de varias formas, así que intentaré resolver tus dudas aunque no me queda muy claro lo que realmente quieres averiguar:
Por un lado, y hasta donde yo se, los errores no-controlados de un proceso/librería se reportan y se registran en logs con un formato específico (y, siempre que tengas activado el servicio de registro de eventos de Windows, '
EventLog'), y los puedes visualizar/depurar con el visor de eventos de Windows (
Windows EventViewer), que está ubicado en el directorio
...\System32\eventvwr.exeSi eso es lo único que querías saber, entonces no es necesario que sigas leyendo
.
Por otro lado, y, también hasta donde yo se, los mensajes de dichos errores, es decir, el mensaje que te muestra en un idioma determinado, están localizados (definidos) en alguno de los archivos de los runtimes de esa aplicación en cuestión, puden estar ubicados entre varios archivos, por ejemplo, si estás ejecutando un ensamblado .Net, es decir, un programa que esté desarrollado en C#/VB.Net, y si éste programa lanza una excepción, entonces el mensaje provendrá de los runtimes de .Net Framework, de cual, es decir, ¿de que "archivo.dll"?, eso dependerá del tipo de excepción, cada librería tiene unos Namespaces diferentes, pero en el ensamblado '
mscorlib.dll' es donde mayor cantidad de excepciones hay definidas (otro ensamblado con excepciones definidas sería '
System.dll', y su tabla de mensajes de errores en el archivo
System.Resources.dll).
Por ejemplo un error que practicamente todos los programadores de la plataforma .Net hemos sufrido en al menos una ocasión, sería una excepción del tipo '
NullReferenceException', el mensaje en castellano se obtiene de la tabla de recursos contenida en el ensamblado '
mscorlib.resources.dll':
EDITO: Para ser más específicos, cuando se produce una excepción proveniente de los namespaces del ensamblado '
mscorlib.dll', éste hace una llamada a la función "get_Message", y ésta realiza unas evaluaciones para obtener el mensaje a mostrar dependiendo de la cultura/localización actual de la aplicación ("en-US", "es-ES", etc), si la cultura de la aplicación es "es-ES" entonces sacará el mensaje desde la tabla '
mscorlib.es.resources'.
Aunque sospecho que con una aplicación desarrollada en Visual-C++ sería algo diferente y quizás se obtenga el mensaje de error en alguna de las librerías '
msvcr*.dll', aunque para ser honestos de eso ya no estoy nada seguro, quizás me esté equivocando y se utilicen las mismas tablas porque dicho lenguaje trabaja bajo el C.L.I. y la plataforma .Net Framework, de todas formas tampoco se exactamente de donde se obtienen por ejemplo los mensajes de los errores en tiempo de ejecución que se muestran en aplicaciones desarrolladas en otros lenguajes como C/C++ o Java, aunque cómo ya digo, esos mensajes deben estar definidos en alguno de los archivos de sus runtimes.
EDITO 2:Aunque lo siguiente que voy a decir resulte muy obvio para muchos de nosotros, cabe mencionar que, un error se puede controlar y se puede suplantar el mensaje de error por un mensaje totalmente único ...personalizado, dicho mensaje se hallará solamente en el binario de esa aplicación, no en los archivos de Windows, claro está.
Saludos