我正在做一些 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)
我一边喝着茶,一边盯着它看了一会儿,想知道为什么这三个常量都被定义为相同的值。
这很有趣。有人知道吗?
不同类型的内核对象具有不同的预定义的读取、写入和执行访问掩码。
例如,令牌使用TOKEN_READ、TOKEN_WRITE和TOKEN_EXECUTE。文件使用FILE_GENERIC_READ,FILE_GENERIC_WRITE和FILE_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_READ、STANDARD_RIGHTS_WRITE和STANDARD_RIGHTS_EXECUTE都被定义为那样。