다음을 통해 공유


GetCommandLineA 함수(processenv.h)

현재 프로세스의 명령줄 문자열을 검색합니다.

통사론

LPSTR GetCommandLineA();

반환 값

반환 값은 현재 프로세스의 명령줄 문자열에 대한 포인터입니다.

발언

반환된 값의 수명은 시스템에서 관리되며 애플리케이션은 이 값을 해제하거나 수정해서는 안 됩니다.

콘솔 프로세스는 또는 wmain 함수의 인수를 프로그램 진입점으로 구현하여 인수argv 인수를 사용할 수 있습니다.

GUI 프로세스는 프로그램 진입점으로 구현하여 WinMain 또는 wWinMain 함수의 lpCmdLine 인수를 사용할 수 있습니다.

명령줄을 문자열의 argv 스타일 배열로 변환하려면 GetCommandLineA의 결과를 commandLineToArgvW전달합니다.

메모

운영 체제가 프로세스에 제공하는 명령줄의 실행 파일 이름이 호출 프로세스가CreateProcessA 함수에 제공하는 명령줄의 실행 파일 이름과 반드시 동일하지는 않습니다. 운영 체제는 정규화된 경로 없이 제공되는 실행 파일 이름 앞에 정규화된 경로를 추가할 수 있습니다.

보안 설명

GetCommandLineA에서 반환된 명령줄은 유니코드 명령줄을 8비트 프로세스 코드 페이지로 변환한 것입니다.

대부분의 코드 페이지에서 이 변환은 손실되고 변환된 명령줄은 유니코드 명령줄과 다를 수 있으므로 다음과 같은 보안 문제가 발생할 수 있습니다.

  • 변환은 파일 이름으로 사용하기 위한 문자열을 변경할 수 있습니다. 예를 들어 ANSI 코드 페이지가 Windows-1252인 경우 유니코드 문자 U+0100(Latin capital letter A with macron: Ā)은 0x41(라틴 문자 A)로 변환됩니다. 사용자가 Ā 문자가 포함된 파일 이름을 전달하면 GetCommandLineA를 사용하는 프로그램에서 해당 이름을 A 문자와 함께 수신하고 잘못된 파일에서 작동합니다.
  • 변환은 명령줄을 구문 분석하는 방법을 변경할 수 있습니다. 예를 들어 ANSI 코드 페이지가 Windows-1252인 경우 유니코드 문자 U+FF02(Fullwidth 따옴표: ")는 0x22(ASCII 따옴표)로 변환되고 유니코드 문자 U+2010(하이픈: -)은 0x2D(ASCII 빼기 기호)로 변환됩니다. 이 두 가지 모두 명령줄 파일 인수가 명령줄 옵션으로 잘못 해석될 수 있습니다.

이 문제를 방지하려면 GetCommandLineW 함수를 사용하여 유니코드 명령줄을 받거나 애플리케이션 매니페스트(Windows 버전 1903 이상)를 사용하여 프로세스 코드 페이지UTF-8을 설정합니다.

메모

processenv.h 헤더는 GETCommandLine을 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 processenv.h(Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

createProcessA 함수

프로세스 및 스레드 함수