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
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 |