STARTUPINFOA 구조체(processthreadsapi.h)
생성 시 프로세스에 대한 주 창의 창 스테이션, 데스크톱, 표준 핸들 및 모양을 지정합니다.
통사론
typedef struct _STARTUPINFOA {
DWORD cb;
LPSTR lpReserved;
LPSTR lpDesktop;
LPSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;
회원
cb
구조체의 크기(바이트)입니다.
lpReserved
예약; 은 NULL이어야 합니다.
lpDesktop
바탕 화면의 이름 또는 이 프로세스에 대한 데스크톱 및 창 스테이션의 이름입니다. 문자열의 백슬래시는 문자열에 데스크톱 및 창 스테이션 이름이 모두 포함되어 있음을 나타냅니다.
자세한 내용은 데스크톱대한
lpTitle
콘솔 프로세스의 경우 새 콘솔 창이 만들어지면 제목 표시줄에 표시되는 제목입니다. NULL이면 실행 파일의 이름이 창 제목으로 대신 사용됩니다. 이 매개 변수는 새 콘솔 창을 만들지 않는 GUI 또는 콘솔 프로세스의 경우 NULL이어야 합니다.
dwX
dwFlags STARTF_USEPOSITION 지정하는 경우 이 멤버는 새 창을 만든 경우 창의 왼쪽 위 모서리에 있는 x 오프셋(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.
오프셋은 화면의 왼쪽 위 모서리에서 가져옵니다. GUI 프로세스의 경우 CreateWindowx 매개 변수가 CW_USEDEFAULT 경우 새 프로세스가 CreateWindow 처음으로 호출하여 겹치는 창을 만들 때 지정된 위치가 사용됩니다.
dwY
dwFlags STARTF_USEPOSITION 지정하는 경우 이 멤버는 새 창이 만들어지면 창의 왼쪽 위 모서리에 있는 y 오프셋(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.
오프셋은 화면의 왼쪽 위 모서리에서 가져옵니다. GUI 프로세스의 경우 CreateWindowy 매개 변수가 CW_USEDEFAULT 경우 새 프로세스가 CreateWindow 처음으로 호출하여 겹치는 창을 만들 때 지정된 위치가 사용됩니다.
dwXSize
dwFlags STARTF_USESIZE 지정하는 경우 새 창이 만들어지면 이 멤버는 창의 너비(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.
GUI 프로세스의 경우 CreateWindownWidth 매개 변수가 CW_USEDEFAULT 경우 새 프로세스가 CreateWindow 호출하여 겹치는 창을 만드는 경우에만 사용됩니다.
dwYSize
dwFlags STARTF_USESIZE 지정하는 경우 새 창이 만들어지면 이 멤버는 창의 높이(픽셀)입니다. 그렇지 않으면 이 멤버는 무시됩니다.
GUI 프로세스의 경우 CreateWindownHeight 매개 변수가 CW_USEDEFAULT 경우 새 프로세스가 CreateWindow 호출하여 겹치는 창을 만드는 경우에만 사용됩니다.
dwXCountChars
dwFlags STARTF_USECOUNTCHARS 지정하는 경우 콘솔 프로세스에서 새 콘솔 창이 만들어지면 이 멤버는 문자 열에서 화면 버퍼 너비를 지정합니다. 그렇지 않으면 이 멤버는 무시됩니다.
dwYCountChars
dwFlags STARTF_USECOUNTCHARS 지정하는 경우 콘솔 프로세스에서 새 콘솔 창이 만들어지면 이 멤버는 문자 행에서 화면 버퍼 높이를 지정합니다. 그렇지 않으면 이 멤버는 무시됩니다.
dwFillAttribute
dwFlags STARTF_USEFILLATTRIBUTE 지정하는 경우 콘솔 애플리케이션에서 새 콘솔 창이 만들어지면 이 멤버는 초기 텍스트 및 배경색입니다. 그렇지 않으면 이 멤버는 무시됩니다.
이 값은 FOREGROUND_BLUE, FOREGROUND_GREEN, FOREGROUND_RED, FOREGROUND_INTENSITY, BACKGROUND_BLUE, BACKGROUND_GREEN, BACKGROUND_RED 및 BACKGROUND_INTENSITY 조합할 수 있습니다. 예를 들어 다음 값 조합은 흰색 배경에 빨간색 텍스트를 생성합니다.
FOREGROUND_RED| BACKGROUND_RED| BACKGROUND_GREEN| BACKGROUND_BLUE
dwFlags
프로세스가 창을 만들 때 특정 STARTUPINFO 멤버가 사용되는지 여부를 결정하는 비트 필드입니다. 이 멤버는 다음 값 중 하나 이상일 수 있습니다.
값 | 의미 |
---|---|
|
CreateProcess 호출된 후 2초 동안 커서가 피드백 모드에 있음을 나타냅니다. 백그라운드에서 작업 커서가 표시됩니다(마우스 제어판 유틸리티의 포인터 탭 참조).
이 2초 동안 프로세스가 첫 번째 GUI 호출을 수행하는 경우 시스템은 프로세스에 5초 더 줍니다. 이 5초 동안 프로세스에 창이 표시되면 시스템은 창 그리기를 완료하기 위해 프로세스에 5초를 더 제공합니다. 시스템은 프로세스 그리기 여부에 관계없이 GetMessage |
|
프로세스가 시작되는 동안 피드백 커서가 강제로 해제되었음을 나타냅니다. 일반 선택 커서가 표시됩니다. |
|
프로세스에서 만든 창을 작업 표시줄에 고정할 수 없음을 나타냅니다.
이 플래그는 STARTF_TITLEISAPPID 함께 사용해야 합니다. |
|
프로세스가 창 모드가 아닌 전체 화면 모드로 실행되어야 했음을 나타냅니다.
이 플래그는 x86 컴퓨터에서 실행되는 콘솔 애플리케이션에만 유효합니다. |
|
lpTitle 멤버에는 AppUserModelID가 포함되어 있습니다. 이 식별자는 작업 표시줄 및 시작 메뉴가 애플리케이션을 표시하는 방법을 제어하고 올바른 바로 가기 및 점프 목록과 연결할 수 있도록 합니다. 일반적으로 애플리케이션은 이 플래그를 설정하는 대신 STARTF_PREVENTPINNING 사용하는 경우 애플리케이션 창을 작업 표시줄에 고정할 수 없습니다. 애플리케이션에서 AppUserModelID 관련 창 속성을 사용하면 해당 창에 대해서만 이 설정이 재정의됩니다. 이 플래그는 STARTF_TITLEISLINKNAME 사용할 수 없습니다. |
|
lpTitle 멤버에는 사용자가 이 프로세스를 시작하기 위해 호출한 바로 가기 파일(.lnk)의 경로가 포함되어 있습니다. 이는 일반적으로 시작된 애플리케이션을 가리키는 .lnk 파일이 호출될 때 셸에 의해 설정됩니다. 대부분의 애플리케이션은 이 값을 설정할 필요가 없습니다.
이 플래그는 STARTF_TITLEISAPPID 사용할 수 없습니다. |
|
명령줄은 신뢰할 수 없는 원본에서 제공되었습니다. 자세한 내용은 비고를 참조하세요. |
|
dwXCountChars 및 dwYCountChars 멤버에는 추가 정보가 포함되어 있습니다. |
|
dwFillAttribute 멤버에는 추가 정보가 포함되어 있습니다. |
|
hStdInput 멤버에는 추가 정보가 포함되어 있습니다.
이 플래그는 STARTF_USESTDHANDLES사용할 수 없습니다. |
|
dwX 및 dwY 멤버에는 추가 정보가 포함되어 있습니다. |
|
wShowWindow 멤버에는 추가 정보가 포함되어 있습니다. |
|
dwXSize 및 dwYSize 멤버에는 추가 정보가 포함되어 있습니다. |
|
hStdInput, hStdOutput및 hStdError 멤버에는 추가 정보가 포함됩니다.
프로세스 생성 함수 중 하나를 호출할 때 이 플래그를 지정하는 경우 핸들을 상속할 수 있어야 하며 함수의 bInheritHandles 매개 변수를 TRUE로 설정해야 합니다. 자세한 내용은 상속 GetStartupInfo 함수를 호출할 때 이 플래그를 지정하는 경우 이러한 멤버는 프로세스를 만드는 동안 지정된 핸들 값이거나 INVALID_HANDLE_VALUE. 핸들은 더 이상 필요하지 않은 경우 CloseHandle 사용하여 닫아야 합니다. 이 플래그는 STARTF_USEHOTKEY사용할 수 없습니다. |
wShowWindow
dwFlags STARTF_USESHOWWINDOW 지정하는 경우 이 멤버는 SW_SHOWDEFAULT 제외하고 ShowWindow 함수에 대한 nCmdShow 매개 변수에 지정할 수 있는 값이 될 수 있습니다. 그렇지 않으면 이 멤버는 무시됩니다.
GUI 프로세스의 경우 ShowWindow 처음
cbReserved2
C 런타임에서 사용하도록 예약됨; 은 0이어야 합니다.
lpReserved2
C 런타임에서 사용하도록 예약됨; 은 NULL이어야 합니다.
hStdInput
dwFlags STARTF_USESTDHANDLES 지정하는 경우 이 멤버는 프로세스의 표준 입력 핸들입니다. STARTF_USESTDHANDLES 지정하지 않으면 표준 입력의 기본값은 키보드 버퍼입니다.
dwFlags STARTF_USEHOTKEY 지정하는 경우 이 멤버는 프로세스를 소유한 애플리케이션에서 만든 첫 번째 적격 최상위 창에 WM_SETHOTKEY 메시지의 wParam 매개 변수로 전송되는 바로 가기 키 값을 지정합니다. WS_POPUP 창 스타일을 사용하여 창을 만든 경우 WS_EX_APPWINDOW 확장 창 스타일도 설정되지 않은 한 해당 창은 적합하지 않습니다. 자세한 내용은 CreateWindowEx참조하세요.
그렇지 않으면 이 멤버는 무시됩니다.
hStdOutput
dwFlags STARTF_USESTDHANDLES 지정하는 경우 이 멤버는 프로세스의 표준 출력 핸들입니다. 그렇지 않으면 이 멤버가 무시되고 표준 출력의 기본값은 콘솔 창의 버퍼입니다.
작업 표시줄 또는 점프 목록에서 프로세스가 시작되면 시스템은 hStdOutput 프로세스를 시작하는 데 사용되는 작업 표시줄 또는 점프 목록을 포함하는 모니터에 대한 핸들로 설정합니다. 자세한 내용은 비고를 참조하세요.Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP 및 Windows Server 2003: 이 동작은 Windows 8 및 Windows Server 2012에서 도입되었습니다.
hStdError
dwFlags STARTF_USESTDHANDLES 지정하는 경우 이 멤버는 프로세스의 표준 오류 핸들입니다. 그렇지 않으면 이 멤버가 무시되고 표준 오류의 기본값은 콘솔 창의 버퍼입니다.
발언
GUI(그래픽 사용자 인터페이스) 프로세스의 경우 이 정보는 CreateWindow 함수에서 만들고 ShowWindow 함수에 의해 표시되는 첫 번째 창에 영향을 줍니다. 콘솔 프로세스의 경우 이 정보는 프로세스에 대해 새 콘솔을 만든 경우 콘솔 창에 영향을 줍니다. 프로세스는 GetStartupInfo 함수를 사용하여 프로세스가 생성될 때 지정된 STARTUPINFO 구조를 검색할 수 있습니다.
GUI 프로세스가 시작되고 STARTF_FORCEONFEEDBACK 또는 STARTF_FORCEOFFFEEDBACK 지정되지 않은 경우 프로세스 피드백 커서가 사용됩니다. GUI 프로세스는 하위 시스템이 "windows"로 지정된 프로세스입니다.
작업 표시줄 또는 점프 목록에서 프로세스가 시작되면 시스템은 getStartupInfo
STARTF_UNTRUSTEDSOURCE 플래그가 지정된 경우 애플리케이션은 명령줄이 신뢰할 수 없다는 것을 알고 있어야 합니다. 이 플래그가 설정되면 애플리케이션은 매크로, 다운로드한 콘텐츠 및 자동 인쇄와 같은 잠재적으로 위험한 기능을 사용하지 않도록 설정해야 합니다. 이 플래그는 선택 사항이지만 CreateProcess 호출하는 애플리케이션은 새로 만든 프로세스가 적절한 정책을 적용할 수 있도록 신뢰할 수 없는 명령줄 인수(예: 웹 콘텐츠에서 제공하는 인수)를 사용하여 프로그램을 시작할 때 이 플래그를 설정하는 것이 좋습니다.
STARTF_UNTRUSTEDSOURCE 플래그는 Windows Vista부터 지원되지만 Windows 10 SDK 이전의 SDK 헤더 파일에는 정의되어 있지 않습니다. Windows 10 이전 버전에서 플래그를 사용하려면 프로그램에서 수동으로 정의할 수 있습니다.
예제
다음 코드 예제에서는 StartUpInfoA사용하는 방법을 보여 줍니다.
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
void _tmain( int argc, TCHAR *argv[] )
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if( argc != 2 )
{
printf("Usage: %s [cmdline]\n", argv[0]);
return;
}
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
이 예제에 대한 자세한 내용은 프로세스 만들기
메모
processthreadsapi.h 헤더는 STARTUPINFO를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
헤더 | processthreadsapi.h(Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2의 Windows.h 포함) |
참고 항목
CreateProcess
CreateProcessAsUser
CreateProcessWithLogonW
CreateProcessWithTokenW
GetStartupInfo