GetApplicationRestartSettings 함수(winbase.h)
지정된 프로세스에 대해 등록된 다시 시작 정보를 검색합니다.
구문
HRESULT GetApplicationRestartSettings(
[in] HANDLE hProcess,
[out, optional] PWSTR pwzCommandline,
[in, out] PDWORD pcchSize,
[out, optional] PDWORD pdwFlags
);
매개 변수
[in] hProcess
프로세스에 대한 핸들입니다. 이 핸들에는 PROCESS_VM_READ 액세스 권한이 있어야 합니다.
[out, optional] pwzCommandline
RegisterApplicationRestart 함수를 호출할 때 애플리케이션에서 지정한 다시 시작 명령줄을 수신하는 버퍼에 대한 포인터입니다. 명령줄의 최대 크기(문자)는 RESTART_MAX_CMD_LINE. pcchSize가 0인 경우 NULL일 수 있습니다.
[in, out] pcchSize
입력에서 pwzCommandLine 버퍼의 크기를 문자 단위로 지정합니다.
버퍼가 명령줄을 받을 만큼 크지 않은 경우 함수는 HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)으로 실패하고 이 매개 변수를 필요한 버퍼 크기(문자)로 설정합니다.
출력에서 은 사용된 버퍼의 크기를 지정합니다.
필요한 버퍼 크기를 확인하려면 pwzCommandLine 을 NULL 로 설정하고 이 매개 변수를 0으로 설정합니다. 크기에는 null 종결자 문자에 대한 항목이 포함됩니다. 이 경우 함수는 HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)가 아닌 S_OK 반환합니다.
[out, optional] pdwFlags
RegisterApplicationRestart 함수를 호출할 때 애플리케이션에서 지정한 플래그를 수신하는 변수에 대한 포인터입니다.
반환 값
이 함수는 성공 또는 다음 오류 코드 중 하나에 대한 S_OK 반환합니다.
반환 코드 | 설명 |
---|---|
|
하나 이상의 매개 변수가 유효하지 않습니다. |
|
애플리케이션이 다시 시작에 등록되지 않았습니다. |
|
pwzCommandLine 버퍼가 너무 작습니다. 함수는 pcchSize에서 필요한 버퍼 크기를 반환합니다. 필요한 크기를 사용하여 버퍼를 다시 할당합니다. |
설명
이 정보는 현재 프로세스에만 사용할 수 있습니다. 프로그램을 다시 시작한 후에는 이 함수를 호출하여 다시 시작 명령줄을 가져올 수 없습니다. 다시 시작한 후 명령줄을 얻으려면 기본 함수의 argv 매개 변수에 액세스합니다.
예제
다음 예제에서는 RegisterApplicationRestart 함수를 호출할 때 지정된 다시 시작 설정을 가져오는 방법을 보여줍니다.
#include <windows.h>
#include <stdio.h>
void wmain(int argc, WCHAR* argv[])
{
HRESULT hr = S_OK;
WCHAR wsCommandLine[RESTART_MAX_CMD_LINE + 1];
DWORD cchCmdLine = sizeof(wsCommandLine) / sizeof(WCHAR);
DWORD dwFlags = 0;
LPWSTR pwsCmdLine = NULL;
UNREFERENCED_PARAMETER(argv);
UNREFERENCED_PARAMETER(argc);
wprintf(L"Registering for restart...\n");
hr = RegisterApplicationRestart(L"/restart -f .\\filename.ext", 0);
if (FAILED(hr))
{
wprintf(L"RegisterApplicationRestart failed, 0x%x\n", hr);
goto cleanup;
}
wprintf(L"Get restart command line using static buffer...\n");
hr = GetApplicationRestartSettings(GetCurrentProcess(), wsCommandLine, &cchCmdLine, &dwFlags);
if (FAILED(hr))
{
wprintf(L"GetApplicationRestartSettings failed, 0x%x\n", hr);
goto cleanup;
}
wprintf(L"Command line: %s\n", wsCommandLine);
wprintf(L"\nGet settings using dynamic buffer...\n");
cchCmdLine = 0;
// Returns S_OK instead of ERROR_INSUFFICIENT_BUFFER when pBuffer is NULL and size is 0.
hr = GetApplicationRestartSettings(GetCurrentProcess(), (PWSTR)pwsCmdLine, &cchCmdLine, &dwFlags);
if (SUCCEEDED(hr))
{
pwsCmdLine = (LPWSTR)malloc(cchCmdLine * sizeof(WCHAR));
if (pwsCmdLine)
{
hr = GetApplicationRestartSettings(GetCurrentProcess(), (PWSTR)pwsCmdLine, &cchCmdLine, &dwFlags);
if (FAILED(hr))
{
wprintf(L"GetApplicationRestartSettings failed with 0x%x\n", hr);
goto cleanup;
}
wprintf(L"Command line: %s\n", pwsCmdLine);
}
else
{
wprintf(L"Allocating the command-line buffer failed.\n");
}
}
else
{
if (hr != HRESULT_FROM_WIN32(ERROR_NOT_FOUND)) // Not a restart.
{
wprintf(L"GetApplicationRestartSettings failed with 0x%x\n", hr);
goto cleanup;
}
}
cleanup:
if (pwsCmdLine)
free(pwsCmdLine);
}
요구 사항
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |