我有一段代码在我的系统级 Windows 服务中运行,如下所示。如果我将 CreateEnvironmentBlock() 和 CreateProcessAsUser() 添加到代码中,那就可以了。但我使用“LoadUserProfile()”,它失败并出现错误 5,这应该意味着“访问被拒绝”。请帮忙检查一下缺少什么。我想要的是从此系统服务检索用户级注册表值。代码中的注释是另一种方式,但也未能检索到用户级注册表值。
void GetUserRegistry()
{
#ifdef Q_OS_WIN
DWORD lastError = 0;
DWORD sessionId = WTSGetActiveConsoleSessionId();
qInfo() << "Session ID = " << sessionId;
wchar_t* ppUserName[100];
DWORD sizeOfUserName;
WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionId, WTSUserName, ppUserName, &sizeOfUserName);
qInfo() << "Windows User Name = " << QString::fromWCharArray(*ppUserName);
std::wstring strValueOfBinDir = L"Unknown Value";
// LONG regOpenResult = ERROR_SUCCESS;
HANDLE hUserToken = NULL;
HANDLE hFakeToken = NULL;
if (WTSQueryUserToken(sessionId, &hUserToken))
{
if (DuplicateTokenEx(hUserToken, TOKEN_ASSIGN_PRIMARY | TOKEN_ALL_ACCESS, 0, SecurityImpersonation, TokenPrimary, &hFakeToken) == TRUE) …Run Code Online (Sandbox Code Playgroud)