Freigeben über


GetCommandLineA-Funktion (processenv.h)

Ruft die Befehlszeilenzeichenfolge für den aktuellen Prozess ab.

Syntax

LPSTR GetCommandLineA();

Rückgabewert

Der Rückgabewert ist ein Zeiger auf die Befehlszeilenzeichenfolge für den aktuellen Prozess.

Bemerkungen

Die Lebensdauer des zurückgegebenen Werts wird vom System verwaltet, Anwendungen sollten diesen Wert nicht freigeben oder ändern.

Konsolenprozesse können die argumente argc und argumentieren argumente der haupt- oder wmain funktionen verwenden, indem sie diese als Einstiegspunkt des Programms implementieren.

GUI-Prozesse können das lpCmdLine--Argument der WinMain- oder wWinMain-Funktionen verwenden, indem sie diese als Programmeinstiegspunkt implementieren.

Um die Befehlszeile in ein argv Stylearray von Zeichenfolgen zu konvertieren, übergeben Sie das Ergebnis von GetCommandLineA an CommandLineToArgvW.

Anmerkung

Der Name der ausführbaren Datei in der Befehlszeile, die das Betriebssystem für einen Prozess bereitstellt, ist nicht unbedingt mit dem in der Befehlszeile identisch, die der aufrufende Prozess der CreateProcessA-Funktion. Das Betriebssystem kann einen vollqualifizierten Pfad zu einem ausführbaren Namen vorangestellt haben, der ohne vollqualifizierten Pfad bereitgestellt wird.

Sicherheitsmerkungen

Die von GetCommandLineA zurückgegebene Befehlszeile ist eine Konvertierung der Unicode-Befehlszeile in die 8-Bit-Prozesscodeseite.

Für die meisten Codeseiten ist diese Konvertierung verlustig, und die konvertierte Befehlszeile kann sich von der Unicode-Befehlszeile unterscheiden, wodurch mögliche Sicherheitsprobleme wie die folgenden erstellt werden:

  • Die Konvertierung kann Zeichenfolgen ändern, die als Dateinamen verwendet werden sollen. Wenn die ANSI-Codeseite beispielsweise Windows-1252 ist, wird das Unicode-Zeichen U+0100 (lateinischer Großbuchstabe A mit Makro: Ā) in 0x41 (lateinischer Großbuchstabe A) konvertiert. Wenn ein Benutzer einen Dateinamen mit dem Zeichen Ā übergibt, erhält ein Programm, das GetCommandLineA verwendet, mit dem Zeichen A und arbeitet mit der falschen Datei.
  • Die Konvertierung kann die Analyse der Befehlszeile ändern. Wenn beispielsweise die ANSI-Codeseite Windows-1252 ist, wird das Unicode-Zeichen U+FF02 (Vollständiges Anführungszeichen: ") in 0x22 (das ASCII-Anführungszeichen) und das Unicode-Zeichen U+2010 (Bindestrich: ‐) in 0x2D (das ASCII-Minuszeichen) konvertiert. Beide können dazu führen, dass Befehlszeilendateiargumente als Befehlszeilenoptionen falsch interpretiert werden.

Um dieses Problem zu vermeiden, verwenden Sie die GetCommandLineW-Funktion, um die Unicode-Befehlszeile zu empfangen, oder verwenden Sie ein Anwendungsmanifest (unter Windows Version 1903 oder höher), um UTF-8 als Prozesscodepagefestzulegen.

Anmerkung

Der processenv.h-Header definiert GetCommandLine als Alias, der automatisch die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows XP [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- processenv.h (include Windows.h on Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL- Kernel32.dll

Siehe auch

CreateProcessA-Funktion

Prozess- und Threadfunktionen