我正在尝试创建一个允许管理权限的程序。但不幸的是,我无法达到我想要的结果。我想我错过了什么。
我试图使用这里的代码默认启用特权 并将
Attributes
设置为SE_PRIVILEGE_ENABLED_BY_DEFAULT
或SE_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.
所以这些是我的问题:
Attribute
设置为3或1?换句话说,我可以做些什么来使用 whoami /priv
并看到启用了之前未启用的权限吗?LsaAddAccountRights
函数来做到这一点,但权限数量是相同的。补充问题:
如果你能给我指出正确的方向,我将不胜感激。谢谢,对不起我的英语。
问题1:
[in, optional] NewState
指向 TOKEN_PRIVILEGES 结构的指针,该结构指定一个数组 特权及其属性。如果 DisableAllPrivileges 参数 为 FALSE,AdjustTokenPrivileges 函数启用、禁用或 删除令牌的这些特权。
就我而言,
tp.Privileges[0].Attributes
的价值是SE_PRIVILEGE_ENABLED
或SE_PRIVILEGE_REMOVED
或None
。
问题2:
您可以使用本地安全策略 Microsoft 管理控制台 (MMC) 管理单元 (Secpol.msc) 或调用
LsaAddAccountRights function
. 为帐户分配权限
在我看来,你可以给账户分配权限,你不能给一个账户添加更多的权限。
根据文档:更改令牌中的权限
您可以更改主要或模拟中的权限 令牌有两种方式:
使用
启用或禁用权限。AdjustTokenPrivileges function
使用
.限制或删除权限CreateRestrictedToken function
问题3:
能否请您提供示例以帮助我们重现该问题?