Compartir a través de


Función GetCommandLineA (processenv.h)

Recupera la cadena de línea de comandos para el proceso actual.

Sintaxis

LPSTR GetCommandLineA();

Valor devuelto

El valor devuelto es un puntero a la cadena de línea de comandos para el proceso actual.

Observaciones

El sistema administra la duración del valor devuelto, las aplicaciones no deben liberar ni modificar este valor.

Los procesos de consola pueden usar el argc de y argumentos argv de la principal o funciones de wmain mediante la implementación de las mismas como punto de entrada del programa.

Los procesos de GUI pueden usar el argumento de lpCmdLine de las funciones WinMain o wWinMain de mediante la implementación de las mismas como punto de entrada del programa.

Para convertir la línea de comandos en un argv matriz de estilos de cadenas, pase el resultado de GetCommandLineA a CommandLineToArgvW.

Nota

El nombre del archivo ejecutable en la línea de comandos que proporciona el sistema operativo a un proceso no es necesariamente idéntico al de la línea de comandos que el proceso de llamada proporciona a la función CreateProcessA . El sistema operativo puede anteponer una ruta de acceso completa a un nombre ejecutable que se proporciona sin una ruta de acceso completa.

Comentarios de seguridad

La línea de comandos devuelta por GetCommandLineA es una conversión de la línea de comandos Unicode a la página de códigos de proceso de 8 bits.

Para la mayoría de las páginas de código, esta conversión es perdida y la línea de comandos convertida puede diferir de la línea de comandos Unicode, creando posibles problemas de seguridad como los siguientes:

  • La conversión puede modificar las cadenas diseñadas para su uso como nombres de archivo. Por ejemplo, si la página de códigos ANSI es Windows-1252, el carácter Unicode U+0100 (letra mayúscula latina A con stor: Ā) se convierte en 0x41 (letra mayúscula latina A). Si un usuario pasa un nombre de archivo que contiene el carácter Ā, un programa que usa GetCommandLineA lo recibirá con el carácter A y funcionará en el archivo incorrecto.
  • La conversión puede modificar cómo se analiza la línea de comandos. Por ejemplo, si la página de códigos ANSI es Windows-1252, el carácter Unicode U+FF02 (comillas Fullwidth: ") se convierte en 0x22 (comillas ASCII) y el carácter Unicode U+2010 (Guion: **) se convierte en 0x2D (el signo menos ASCII). Ambos pueden dar lugar a que los argumentos del archivo de línea de comandos se malinterpreten como opciones de línea de comandos.

Para evitar este problema, use la función GetCommandLineW para recibir la línea de comandos Unicode o use un manifiesto de aplicación (en windows versión 1903 o posterior) para establecer UTF-8 como página de códigos de proceso.

Nota

El encabezado processenv.h define GetCommandLine como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de processenv.h (incluya Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
biblioteca de Kernel32.lib
DLL de Kernel32.dll

Consulte también

de función CreateProcessA

funciones de proceso y subproceso de