c++ - 修改访问令牌的用户(令牌用户)或运行在标准用户上下文中提升的进程
问题描述
我正在尝试为我的大学实施一个小型权限管理应用程序。我正在尝试在标准用户本身的上下文中提升流程。我有管理员用户凭据。Logonuser() api 以管理员用户身份登录并获取它的令牌。然后使用CreateProcessAsUser()或CreateProcessWithToken()获得令牌。但是这里的问题是,尽管创建过程具有管理员权限(以另一种方式提升),但它在 admini 用户的上下文中运行,因此无法访问与标准用户共享的所有网络文件夹。所以我想在标准用户的上下文中运行该过程,但具有管理员用户的权限。
所以我了解了这个SetTokenInformation(),我可以在其中更改令牌的 TokenUser 属性。这样 TokenUser 将单独更改为标准用户,所有其他权限将保持与 admin 用户相同。
struct STokenUser
{
TOKEN_USER* tu;
DWORD sizeOfToken;
};
STokenUser GetTokenUserFromToken(HANDLE tokenHandle)
{
STokenUser tu;
TOKEN_USER *tokenUser = NULL;
DWORD tokenSize;
DWORD sidLength;
GetTokenInformation(tokenHandle,
TokenUser,
tokenUser,
0,
&tokenSize);
if(GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
std::cout << "GetTokenInformation failed with " << GetLastError() << std::endl;
}
tokenUser = (TOKEN_USER *)malloc(tokenSize);
if (!GetTokenInformation(tokenHandle,
TokenUser,
tokenUser,
tokenSize,
&tokenSize))
{
free(tokenUser);
std::cout << "GetTokenInformation failed with " << GetLastError() << std::endl;
}
tu.tu = tokenUser;
tu.sizeOfToken = tokenSize;
return tu;
}
auto tu = GetTokenUserFromToken(hToken);
tu.tu->User.Sid = psidOfTheStandardUser;
if(!SetTokenInformation(hToken, TokenUser, &tu.tu, tu.sizeOfToken))
{
std::cout << "SetTokenInformation fails with error " << GetLastError() << std::endl;
}
我希望该过程在标准用户的上下文中运行提升。但是 SetTokenInformation 失败,错误代码为 87(表示传递的参数无效)。
我不知道我在哪里失败。我在某处读到无法更改令牌的 TokenUser 。
如何解决这个问题?还是有其他方法可以实现我想要做的事情?
解决方案
推荐阅读
- javascript - facebook登录后expo不重定向用户
- ios - SwitfUI - 如何在特定操作、时间或 coreData 有任何更改后更新视图
- r - 寻求想法在 R 中绘制大变量与它们的 R 平方值(从线性回归模型中得出)(最好使用 GGPLOT2)
- linux-kernel - 为什么在 qemu-system-x86_64 上启动 linux 时需要将控制台设置为 ttyS0
- composer-php - Laragon 定义外部 Composer 路径
- java - 如何在java中仅使用不为空的文本字段
- html - 在html css中对齐文本和切换按钮
- node.js - 服务器不加载数据
- php - 文件上传 CURL 命令到 PHP Curl
- installation - 无法接受来自 Pycharm 在 Raspberry Pi 上的隐私政策