4

特定のレジストリ キーがリダイレクトされているかどうかを判断することはできますか?

私の問題は、32 ビット アプリケーションから一般的な方法で、32 ビットと 64 ビットの両方のレジストリ ビューでレジストリ キーを列挙したいということです。最初は KEY_WOW64_64KEY で、次に KEY_WOW64_32KEY で、各キーを 2 回開くだけです。ただし、キーがリダイレクトされない場合、まったく同じキーが得られ、まったく同じコンテンツを 2 回列挙することになります。これは私が避けようとしているものです。

それに関するドキュメントをいくつか見つけましたが、ハイブを調べて、キーで一連の文字列比較を行うしかないようです。私が考えた別の可能性は、各サブキーで Wow6432Node を開こうとすることです。存在する場合は、キーをリダイレクトする必要があります。つまり、HKCU\Software\Microsoft\Windows を開こうとしている場合、次のキーを開こうとします: HKCU\Wow6432Node、HKCU\Software\Wow6432Node、HKCU\Software\Microsoft\Wow6432Node、および HKCU\Software\Microsoft\Windows\うわー6432ノード。残念ながら、ドキュメントは、リダイレクトされたキーの子が必ずしもリダイレクトされないため、ルートにも問題があることを暗示しているようです。

それで、ここで私のオプションは何ですか?

4

2 に答える 2

2

あなたはかなりの苦痛を感じています、それはオペレーティングシステムのバージョンに依存します。完全なリストはこちらから入手できます

于 2010-04-22T18:19:25.500 に答える
2

あなたの目標は明確ではありません。32 ビット アプリケーションから一般的な方法で、32 ビットと 64 ビットの両方のレジストリ ビューでレジストリ キーを列挙する必要があるのはなぜですか? アプリケーションで 64 ビット値をどうしたいですか? x64 キーと x86 キーの値が異なる場合はどうしますか? 奇妙というか間違った考えのように感じます。

キーは重要な理由でリダイレクトされます: x86 アプリケーションの動作を壊さないようにするためです。例:CLSID特定のインターフェイスの適切な実装を見つけるために COM によって使用されます。とりわけ、「適切な」とは、呼び出し元コードによって実行される可能性があることを意味します。つまり、同じプラットフォームである必要があります。そのため、x64 と x86 では異なるエントリ セットが必要です。他のリダイレクトされたキーの理由も同様です。一般的に言えば、これらのリダイレクトされたキーは、x86 アプリケーションと x64 アプリケーションで異なる必要があります。

Raymond Chen が書いたように、「64 ビット Windows では、32 ビット プログラムはエミュレーション レイヤーで実行されます。それが気に入らない場合は、エミュレーターを使用しないでください」。私は彼のアドバイスに完全に同意します。したがって、このようなものが必要な場合の私の最善のアドバイスは、x64 アプリケーションから実行することです。しかし、最初に本当に必要かどうかを再検討してください。

編集:便利なsamDesiredパラメーターがあります。MSDN の記事「Accessing an Alternate Registry View」もRegOpenKeyEx参照してください。

于 2010-04-22T17:28:43.067 に答える