16 votos

¿Por qué un programa llamado " C:\Program "¿Influye en otros programas?

Hoy, de repente, un archivo llamado Program apareció en root de C:\ y al iniciar la sesión en el sistema, una ventana emergente muestra un mensaje:

Advertencia sobre el nombre del archivo

Hay un archivo o carpeta en su ordenador llamado " C:\Program ", lo que podría hacer que algunas aplicaciones no funcionaran correctamente. Cambiar el nombre a " C:\Program1 " resolvería el problema. ¿Quiere cambiar el nombre ahora?

Aunque el mensaje se explica por sí mismo, me pregunto por qué este archivo podría tener una influencia tan grande. En efecto, algunos de los programas (quizá todos, no lo he comprobado) situados en C:\Program Files... no arrancaban en absoluto. Puedo entender cómo se puede crear ese archivo (por ejemplo, al intentar escribir en la carpeta C:\Program Files\Something... pero sin comillas), pero no entiendo cómo puede afectar a otros programas.

1 votos

¿Seguro que es un mensaje generado por Windows?

1 votos

Sí, lo he comprobado dos veces desde Process Exploer, era un diálogo de explorer.exe

2 votos

Suena poco claro, ningún programa (fuera de unos pocos seleccionados) debería instalarse en otro lugar que no sea en Program Files* para el consumidor típico. Pero yo pensaría que es porque una mala coincidencia para una búsqueda podría encontrar eso en lugar de Program Files .

27voto

JdeBP Puntos 17351

Su influencia es tan grande debido a una debilidad conocida desde hace tiempo en la API de Win32.

Los programas se inician en Win32 a través de la función CreateProcess() llamada del sistema. Se puede utilizar de varias maneras. La gente que viene de Unix, Linux, o OS/2 normalmente pensará que toma dos argumentos separados para el programa (archivo de imagen) a generar y la cola de comandos a pasar al nuevo proceso, porque los nombres de archivo y los vectores de argumentos/colas de comandos son dos cosas separadas en las APIs de esos sistemas operativos. Pero, de hecho, la llamada al sistema puede ser invocada de forma alternativa con el nombre del programa y los argumentos mezclados en una gran cadena. CreateProcess() intentará separar el nombre del programa de la cola del comando.

El problema es que lo hace dividiendo progresivamente la cadena en dos en cada carácter de espacio sucesivo, hasta que la parte izquierda coincide con un archivo o un directorio. Muchos programas Win32 intentarán pasar cadenas como C:\Program Files\Contoso\TakeOver.exe StackExchange.com a la llamada del sistema. Esto ejecutará el programa correcto - C:\Program Files\Contoso\TakeOver.exe - con la cola de comandos adecuada - StackExchange.com - hasta el momento en que una persona obviamente peligrosa llega y crea un C:\Program archivo al igual que usted.

En ese momento, la llamada al sistema termina intentando ejecutar el archivo de imagen del programa C:\Program con el comando tail Files\Contoso\TakeOver.exe StackExchange.com . Que el cielo te ayude si C:\Program es de hecho una imagen de programa ejecutable.

Esta es una debilidad general, y se aplica a cualquier nombre de archivo de programa que contenga espacios en combinación con cualquier programa que utilice una gran cadena para generar otros programas. Pero el más común caso que se ve afectado por esto son todos los programas que viven bajo C:\Program Files\ y un gran número de programas Win32 que utilizan el enfoque de una gran cadena.

Es demasiado tarde para cambiar la API de Win32. Ya era demasiado tarde hace una década. Y Microsoft no puede cambiar todos los programas escrito por otras personas que pasan una gran cadena en lugar de dos a CreateProcess() . Así que Microsoft hace que Windows compruebe, al iniciar la sesión del usuario, la existencia de C:\Program y mostrar la advertencia que se ve.

Y, como puede ver, hay una gran advertencia de "Seguridad" en la documentación de Microsoft sobre Win32 que dice a los desarrolladores no escribir programas utilizando el enfoque de "Una gran cadena", que ya existe desde hace algunos años.

Más información

6 votos

¡Excelente respuesta! Como soy desarrollador, lo siguiente que voy a hacer es, obviamente, crear un dummy C:\Program.exe que registra todos sus parámetros de línea de comandos. ¡Veremos quién lo usa!

1 votos

Así que este es por lo que la configuración de seguridad por defecto desde XP no permite la creación de archivos en root por parte de los no administradores.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: