winapi - 从提升的权限中获取 SHGetFolderPath 的当前登录安全令牌
问题描述
我需要通过 SHGetFolderPath 获取当前用户的系统文件夹,但在安装程序应用程序中,系统将其提升为管理员帐户,而是返回管理员帐户文件夹。如何获取当前用户的安全令牌?我试过这个:
HANDLE token = NULL;
PWTS_SESSION_INFO sessions;
DWORD cnt = 0;
WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &sessions, &cnt);
for (DWORD i=0; i<cnt; i++)
{
if (WTSActive == sessions->State)
{
WTSQueryUserToken(sessions->SessionId, &token);
break;
};
sessions++;
};
但它并没有真正起作用。有任何想法吗?
解决方案
可能获取 shell 进程 ID(资源管理器),从中获取令牌并在查询中使用此令牌。
if (HWND hwnd = GetShellWindow())
{
ULONG dwProcessId;
if (GetWindowThreadProcessId(hwnd, &dwProcessId))
{
HANDLE hToken;
if (HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, dwProcessId))
{
BOOL b = OpenProcessToken(hProcess, TOKEN_QUERY|TOKEN_IMPERSONATE, &hToken);
CloseHandle(hProcess);
if (b)
{
if (0 <= SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, hToken, &pszPath))
{
DbgPrint("<%S>\n", pszPath);
CoTaskMemFree(pszPath);
}
CloseHandle(hToken);
}
}
}
}
推荐阅读
- twilio - 试图了解 Twilio
- c# - 过程 deleterecord 没有参数并且提供了参数
- authentication - Nuxt auth 未正确更新会话
- elasticsearch - 用于在 Kibana 中写入 logstash 和渲染的 grok 脚本
- python - 为强力球模拟器生成 5 个唯一号码
- html - 如何在 React 中通过单击锚标记 ( ) 更顺畅地过渡到同一页面的另一个部分?
- google-earth-engine - 你如何计算rgee中一个区域中所有像素的面积?
- python - NameError:未定义名称“to_date”
- r - 将数据框传递给函数
- java - 如何正确使用 CountDownLatch 测试特定线程交错