Share via


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)으로 실패하고 이 매개 변수를 필요한 버퍼 크기(문자)로 설정합니다.

출력에서 은 사용된 버퍼의 크기를 지정합니다.

필요한 버퍼 크기를 확인하려면 pwzCommandLineNULL 로 설정하고 이 매개 변수를 0으로 설정합니다. 크기에는 null 종결자 문자에 대한 항목이 포함됩니다. 이 경우 함수는 HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)가 아닌 S_OK 반환합니다.

[out, optional] pdwFlags

RegisterApplicationRestart 함수를 호출할 때 애플리케이션에서 지정한 플래그를 수신하는 변수에 대한 포인터입니다.

반환 값

이 함수는 성공 또는 다음 오류 코드 중 하나에 대한 S_OK 반환합니다.

반환 코드 설명
E_INVALIDARG
하나 이상의 매개 변수가 유효하지 않습니다.
HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
애플리케이션이 다시 시작에 등록되지 않았습니다.
HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
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

참고 항목

RegisterApplicationRestart