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為零,可以是Null。
[in, out] pcchSize
在輸入上,以字元指定 pwzCommandLine 緩衝區的大小。
如果緩衝區不夠大,無法接收命令列,則函式會失敗,HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER) 並將此參數設定為所需的緩衝區大小,以字元為單位。
在輸出上,指定使用的緩衝區大小。
若要判斷所需的緩衝區大小,請將 pwzCommandLine 設定為 Null ,並將此參數設定為零。 大小包含 null結束字元的一個。 請注意,函式會傳回S_OK,在此案例中不會傳回HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER) 。
[out, optional] pdwFlags
在呼叫 RegisterApplicationRestart 函式時,接收應用程式所指定旗標的變數指標。
傳回值
此函式會在成功或下列其中一個錯誤碼時 傳回S_OK 。
傳回碼 | 描述 |
---|---|
|
一或多個參數無效。 |
|
應用程式未註冊重新開機。 |
|
pwzCommandLine緩衝區太小。 函式會傳回 pcchSize中所需的緩衝區大小。 使用必要的大小來重新配置緩衝區。 |
備註
這項資訊僅適用于目前的進程;重新開機程式之後,您無法呼叫此函式,以取得重新開機命令列。 若要在重新開機之後取得命令列,請存取main函式的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 |