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) |
Library | Kernel32.lib |
DLL | Kernel32.dll |