2

ウィンドウのヘッダーには、

//
// 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_WOW64_RES」に詳しく記載されています。これは何を意味するのでしょうか?矛盾するフラグをオンにしているようです。

4

1 に答える 1

5

KEY_WOW64_RESKEY_WOW64_32KEYとの組み合わせですKEY_WOW64_64KEY。これは、既存の権利マスクを変更する必要があるが WOW64 ビットを保持したい場合など、WOW64 ビットをマスクするのに役立ちます。

たとえばAND、マスクでKEY_WOW64_RES既存の WOW64 ビットを取得しKEY_WOW64_RES、新しいマスクからマスク アウトしてからOR、元の WOW64 ビットを新しいマスクに入れることができます。

REGSAM Rights = ...;
REGSAM Wow64Rights = rights & KEY_WOW64_RES;
Rights = (NewRights & ~KEY_WOW64_RES) | Wow64Rights;

私が知っている 1 つのライブラリはKEY_WOW64_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)
        {
            ...
        }
    }
}
于 2013-09-04T22:54:22.797 に答える