小编Fin*_*nix的帖子

为什么在系统服务中运行的此代码中 LoadUserProfile() 失败并出现错误 5“拒绝访问”?

我有一段代码在我的系统级 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)

c++ windows winapi visual-studio

0
推荐指数
1
解决办法
2540
查看次数

标签 统计

c++ ×1

visual-studio ×1

winapi ×1

windows ×1