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 特权,而从未有过。