是否可以默认启用权限?

问题描述 投票:0回答:1

我正在尝试创建一个允许管理权限的程序。但不幸的是,我无法达到我想要的结果。我想我错过了什么。

我试图使用这里的代码默认启用特权 并将

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.

所以这些是我的问题:

  1. 为什么3变成2,1变成0?是否可以将特权的
    Attribute
    设置为3或1?换句话说,我可以做些什么来使用
    whoami /priv
    并看到启用了之前未启用的权限吗?
  2. 是否可以为帐户添加更多权限?我尝试使用 secpol.msc 和
    LsaAddAccountRights
    函数来做到这一点,但权限数量是相同的。

补充问题:

  1. 经过大量搜索,我找到了这篇关于使用 powershell 脚本启用权限的文章。为什么 c# 代码不起作用,但包装在 powershell 脚本中的相同代码却可以完成这项工作?

如果你能给我指出正确的方向,我将不胜感激。谢谢,对不起我的英语。

c++ winapi privileges
1个回答
0
投票

问题1:

根据文档:AdjustTokenPrivileges函数

[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:

能否请您提供示例以帮助我们重现该问题?

© www.soinside.com 2019 - 2024. All rights reserved.