c++ 是否可以默认启用权限?

ego6inou  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(126)

我正在尝试创建一个允许管理权限的程序。但不幸的是,我不能达到我想要的结果。我想我错过了一些东西。
我尝试使用here中的代码默认启用特权,并将Attributes设置为SE_PRIVILEGE_ENABLED_BY_DEFAULTSE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED。特权的属性可以是以下值的组合:

SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
SE_PRIVILEGE_ENABLED            (0x00000002L)
SE_PRIVILEGE_REMOVED            (0X00000004L)
SE_PRIVILEGE_USED_FOR_ACCESS    (0x80000000L)

我使用cmd中的whoami /priv检查了用户的权限,还使用函数GetTokenInformation检索了有关权限的信息,并比较了结果,发现启用的权限Attributes为3(即SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED)。
我尝试将Attributes设置为3,然后再次使用GetTokenInformation检查权限信息,但权限的Attributes设置为2。我还尝试SE_PRIVILEGE_ENABLED_BY_DEFAULT并再次检查,但Attributes设置为0。
我的问题是
1.为什么3变成2,1变成0?是否可以将权限的Attribute设置为3或1?换句话说,我可以做一些事情来使用whoami /priv并查看是否有以前未启用的权限被启用?
1.是否可以为一个帐户添加更多的权限?我尝试使用secpol.msc和LsaAddAccountRights函数来完成此操作,但权限的数量是相同的。
补充问题:
1.经过大量的搜索,我找到了这个article关于使用powershell脚本来启用特权的文章。为什么c#代码不能工作,但 Package 在powershell脚本中的相同代码却可以完成这项工作?
如果你能给我指出正确的方向,我将不胜感激。谢谢,我为我的英语感到抱歉。

mspsb9vt

mspsb9vt1#

问题1:

根据文件:AdjustTokenPrivileges function
[in,可选] NewState
指向TOKEN_PRIVILEGES结构的指针,该结构指定权限数组及其属性。如果DisableAllPrivileges参数为FALSE,则AdjustTokenPrivileges函数为令牌启用、禁用或移除这些权限。
就我而言,tp.Privileges[0].Attributes的值是SE_PRIVILEGE_ENABLEDSE_PRIVILEGE_REMOVEDNone

问题2:

您可以通过使用本地安全策略Microsoft管理控制台(MMC)管理单元(Secpol.msc)或调用LsaAddAccountRights function为帐户分配权限。
在我看来,你可以给帐户分配特权,你不能给一个帐户添加更多的特权。
根据文件:Changing Privileges in a Token
您可以通过两种方式更改主令牌或模拟令牌中的权限:
使用AdjustTokenPrivileges function启用或禁用权限。
使用CreateRestrictedToken function限制或删除权限。

问题3:

您能否提供样品以帮助我们重现问题?

相关问题