Winapi 什么是钥匙?

Winapi 什么是钥匙?,winapi,Winapi,在windows标题中,有 // // Registry Specific Access Rights. // #define KEY_QUERY_VALUE (0x0001) #define KEY_SET_VALUE (0x0002) #define KEY_CREATE_SUB_KEY (0x0004) #define KEY_ENUMERATE_SUB_KEYS (0x0008) #define KEY_NOTIFY

在windows标题中,有

//
// Registry Specific Access Rights.
//

#define KEY_QUERY_VALUE         (0x0001)
#define KEY_SET_VALUE           (0x0002)
#define KEY_CREATE_SUB_KEY      (0x0004)
#define KEY_ENUMERATE_SUB_KEYS  (0x0008)
#define KEY_NOTIFY              (0x0010)
#define KEY_CREATE_LINK         (0x0020)
#define KEY_WOW64_32KEY         (0x0200)
#define KEY_WOW64_64KEY         (0x0100)
#define KEY_WOW64_RES           (0x0300)
这些都在MSDN文章中有很好的记录,除了
KEY\u WOW64\u RES
。这是什么意思?它似乎打开了矛盾的标志。

KEY\u WOW64\u RES
KEY\u WOW64\u 32KEY
KEY\u WOW64\u 64KEY
的组合。它对于屏蔽WOW64位非常有用,例如当您需要更改现有的权限掩码但希望保留WOW64位时

例如,您可以
使用
键WOW64\u RES
的掩码来检索其现有WOW64位,从新掩码屏蔽出
键WOW64\u RES
,然后
将原始WOW64位放入新掩码,例如:

REGSAM Rights = ...;
REGSAM Wow64Rights = rights & KEY_WOW64_RES;
Rights = (NewRights & ~KEY_WOW64_RES) | Wow64Rights;
我所知道的一个库在每次尝试打开注册表项进行只读访问时都会使用
KEY\u WOW64\u RES
,每次失败时都会使用限制较少的权限:

// Preserve KEY_WOW64_XXX flags for later use
WOWFlags = FAccess & KEY_WOW64_RES;

Result = RegOpenKeyEx(..., KEY_READ | WOWFlags, ...);
if (Result == 0)
{
    ...
}
else
{
    Result = RegOpenKeyEx(..., STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | WOWFlags, ...);
    if (Result == 0)
    {
        ...
    }
    else
    {
        Result = RegOpenKeyEx(..., KEY_QUERY_VALUE | WOWFlags, ...);
        if (Result == 0)
        {
            ...
        }
    }
}

@用户:那没有道理。如果您正在调用
RegCreateKeyEx
,则必须在某个地方创建密钥。啊,因此
\u RES
可能意味着“保留”+1但是,如果它的意思是“保留”,那么它可能不是用来屏蔽的,也不能保证将来还会定义它。。。如果您真的需要屏蔽WOW64位,那么简单地将它们合并在一起就更有意义了。