在WinNT.h中,为什么STANDARD_RIGHTS_READ、...WRITE和...EXECUTE定义为相同?

Xha*_*lie 5 c++ winapi

我正在做一些 Win32 互操作。在搜索标题、仔细阅读 MSDN 并在快乐的泡沫中定义常量和 dll 导入时,我在 WinNT.h 中发现了一些奇怪的行(我的版本中的第 6486-6488 行...呃...7.1a,我思考)

#define STANDARD_RIGHTS_READ             (READ_CONTROL)
#define STANDARD_RIGHTS_WRITE            (READ_CONTROL)
#define STANDARD_RIGHTS_EXECUTE          (READ_CONTROL)
Run Code Online (Sandbox Code Playgroud)

我一边喝着茶,一边盯着它看了一会儿,想知道为什么这三个常量都被定义为相同的值。

这很有趣。有人知道吗?

arx*_*arx 2

不同类型的内核对象具有不同的预定义的读取、写入和执行访问掩码。

例如,令牌使用TOKEN_READTOKEN_WRITETOKEN_EXECUTE。文件使用FILE_GENERIC_READ,FILE_GENERIC_WRITEFILE_GENERIC_EXECUTE:

TOKEN_READ比较和的定义FILE_GENERIC_READ

#define TOKEN_READ       (STANDARD_RIGHTS_READ      |\
                          TOKEN_QUERY)

#define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ     |\
                                   FILE_READ_DATA           |\
                                   FILE_READ_ATTRIBUTES     |\
                                   FILE_READ_EA             |\
                                   SYNCHRONIZE)
Run Code Online (Sandbox Code Playgroud)

STANDARD_RIGHTS_READ是一组标准访问权限,需要出现在特定于对象类型的访问掩码中以供读取。对于STANDARD_RIGHTS_WRITE和也是如此STANDARD_RIGHTS_EXECUTE

碰巧,您需要的读、写和执行的标准访问权限是READ_CONTROL、所以STANDARD_RIGHTS_READSTANDARD_RIGHTS_WRITESTANDARD_RIGHTS_EXECUTE都被定义为那样。