Partager via


GetCommandLineA, fonction (processenv.h)

Récupère la chaîne de ligne de commande pour le processus actuel.

Syntaxe

LPSTR GetCommandLineA();

Valeur de retour

La valeur de retour est un pointeur vers la chaîne de ligne de commande du processus actuel.

Remarques

La durée de vie de la valeur retournée est gérée par le système, les applications ne doivent pas libérer ou modifier cette valeur.

Les processus de console peuvent utiliser les argc et les arguments argv des fonctions principales ou wmain en implémentant celles-ci comme point d’entrée du programme.

Les processus gui peuvent utiliser l’argument lpCmdLine des fonctions WinMain ou wWinMain en implémentant ceux en tant que point d’entrée du programme.

Pour convertir la ligne de commande en tableau de style argv de chaînes, passez le résultat de GetCommandLineA à CommandLineToArgvW.

Note

Le nom de l’exécutable dans la ligne de commande que le système d’exploitation fournit à un processus n’est pas nécessairement identique à celui de la ligne de commande que le processus appelant donne à la fonction CreateProcessA. Le système d’exploitation peut ajouter un chemin complet à un nom exécutable fourni sans chemin complet.

Remarques de sécurité

La ligne de commande retournée par GetCommandLineA est une conversion de la ligne de commande Unicode vers la page de codes de processus 8 bits.

Pour la plupart des pages de code, cette conversion est perdue et la ligne de commande convertie peut différer de la ligne de commande Unicode, créant des problèmes de sécurité possibles comme suit :

  • La conversion peut modifier les chaînes destinées à être utilisées comme noms de fichiers. Par exemple, si la page de codes ANSI est Windows-1252, le caractère Unicode U+0100 (lettre majuscule latine A avec macron : Ā) se convertit en 0x41 (lettre majuscule latine A). Si un utilisateur transmet un nom de fichier contenant le caractère Ā, un programme qui utilise GetCommandLineA le reçoit avec le caractère A et fonctionne sur le fichier incorrect.
  • La conversion peut modifier la façon dont la ligne de commande est analysée. Par exemple, si la page de codes ANSI est Windows-1252, le caractère Unicode U+FF02 (guillemet complet : ") se convertit en 0x22 (guillemet ASCII) et le caractère Unicode U+2010 (trait d’union : −) se convertit en 0x2D (signe moins ASCII). Ces deux arguments peuvent entraîner une mauvaise interprétation des arguments de fichier de ligne de commande en tant qu’options de ligne de commande.

Pour éviter ce problème, utilisez la fonction GetCommandLineW pour recevoir la ligne de commande Unicode ou utilisez un manifeste d’application (sur Windows version 1903 ou ultérieure) pour définir UTF-8 comme page de codes de processus.

Note

L’en-tête processenv.h définit GetCommandLine comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Exigences

Exigence Valeur
client minimum pris en charge Windows XP [applications de bureau | Applications UWP]
serveur minimum pris en charge Windows Server 2003 [applications de bureau | Applications UWP]
plateforme cible Windows
d’en-tête processenv.h (inclure Windows.h sur Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

fonction CreateProcessA

processus et fonctions de thread