次の方法で共有


GetCommandLineA 関数 (processenv.h)

現在のプロセスのコマンド ライン文字列を取得します。

構文

LPSTR GetCommandLineA();

戻り値

戻り値は、現在のプロセスのコマンド ライン文字列へのポインターです。

備考

戻り値の有効期間はシステムによって管理されます。アプリケーションはこの値を解放したり変更したりしないでください。

コンソール プロセスでは、メインargc 引数と argv 引数を使用するか、プログラム エントリ ポイントとして実装することで wmain 関数を できます。

GUI プロセスでは、WinMain 関数または wWinMain 関数の lpCmdLine 引数をプログラム エントリ ポイントとして実装することで できます。

コマンド ラインを文字列の argv スタイル配列に変換するには、GetCommandLineA から CommandLineToArgvWに結果を渡します。

手記

オペレーティング システムがプロセスに提供するコマンド ラインの実行可能ファイルの名前は、呼び出し元のプロセスが CreateProcessA 関数に与えるコマンド ラインの名前と必ずしも同。 オペレーティング システムは、完全修飾パスなしで提供される実行可能ファイル名の先頭に完全修飾パスを付加できます。

セキュリティに関する備考

GetCommandLineA によって返されるコマンド ラインは、Unicode コマンド ラインから 8 ビット プロセス コード ページへの変換です。

ほとんどのコード ページでは、この変換は損失であり、変換されたコマンド ラインは Unicode コマンド ラインとは異なる場合があり、次のようなセキュリティの問題が発生する可能性があります。

  • 変換により、ファイル名として使用する文字列が変更される場合があります。 たとえば、ANSI コード ページが Windows-1252 の場合、Unicode 文字 U+0100 (マクロを含むラテン大文字 A: Ā) は 0x41 (ラテン大文字 A) に変換されます。 ユーザーが文字 Ā を含むファイル名を渡した場合、GetCommandLineA を使用するプログラムは、文字 A と共にそれを受け取り、間違ったファイルを操作します。
  • 変換によって、コマンド ラインの解析方法が変更される場合があります。 たとえば、ANSI コード ページが Windows-1252 の場合、Unicode 文字 U+FF02 (Fullwidth 引用符: ") は 0x22 (ASCII 引用符) に変換され、Unicode 文字 U+2010 (ハイフン: ‐) は0x2D (ASCII マイナス記号) に変換されます。 どちらの場合も、コマンド ライン ファイルの引数がコマンド ライン オプションとして誤って解釈される可能性があります。

この問題を回避するには、GetCommandLineW 関数を使用して Unicode コマンド ラインを受け取るか、アプリケーション マニフェスト (Windows バージョン 1903 以降) を使用して、プロセス コード ページとして UTF-8設定

手記

processenv.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして GetCommandLine を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリ |UWP アプリ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリ |UWP アプリ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー processenv.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CreateProcessA 関数 の

プロセス関数とスレッド関数の