MSDN文章Enabling and Disabling Privileges in C++提供了一个代码示例,以显示如何启用或禁用访问 token 中的特权。

我引用有疑问的部分:

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
    tp.Privileges[0].Attributes = 0;
Attributes成员的零值是什么意思?

根据TOKEN_PRIVILEGES结构的文档,特权的属性可以是以下值的组合:
  • SE_PRIVILEGE_ENABLED(在WinNT.h中为0x00000002L)
  • SE_PRIVILEGE_ENABLED_BY_DEFAULT(在WinNT.h中为0x00000001L)
  • SE_PRIVILEGE_REMOVED(在WinNT.h中为0x00000004L)
  • SE_PRIVILEGE_USED_FOR_ACCESS(在WinNT.h中为0x80000000L)

  • 因此,我们看不到任何值为零的有效常数。我猜,零等于SE_PRIVILEGE_REMOVED

    再一次,如果零表示禁用所有特权,那么我对此表示怀疑,因为禁用所有特权可以简单地通过将AdjustTokenPrivileges()DisableAllPrivileges参数设置为TRUE来完成。

    这里有人可以解释零值的实际作用吗?

    最佳答案

    If SE_PRIVILEGE_REMOVED等于零,因此将其定义为零。考虑到存在的定义,我建议零值表示没有启用或随后使用/删除任何特权:曾经有过 token 特权,而从未有过。

    07-26 09:11