web-dev-qa-db-ja.com

異なるプロセスがSystem32フォルダーの異なるインスタンスを参照するのはなぜですか?

Windows 8 Enterprisex64を実行しています。 Administratorsグループのアカウントを使用してログオンしました。 Windowsエクスプローラーまたはコマンドプロンプトを開くと、ファイルcdd.dllが表示されます。

Windows Explorer


C:\Windows\system32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\system32

07/25/2012  09:49 PM           199,680 cdd.dll

しかし、Chromeブラウザー、Visual Studio、またはその他のアプリケーション(すべて32ビットアプリ)から[ファイルを開く]ダイアログを開いてC:\Windows\system32に移動すると、そのようなファイルはありません) (フィルターはすべてのファイルを表示するように設定されています)そして、[ファイルを開く]ダイアログでShift + RightClickを使用して[ここでコマンドウィンドウを開く]コンテキストメニュー項目を呼び出し、dirと入力すると、そのようなファイルがないことが確認されます。 :

Open File Dialog


C:\Windows\System32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\System32

File Not Found

この効果はcdd.dllに固有のものではなく、他の多くのファイルも同様に異なります。これはファイルシステムの仮想化の影響であると言われていますが、私はほとんど知りません。

これが実際にどのように機能するかを説明する説明またはリファレンスを教えてください。実際には、System32フォルダーのいくつかの異なるインスタンスがありますか。ディスク上の物理的な場所はどこですか?デフォルトで32ビットプロセスに表示されるものとは異なるSystem32フォルダーにある32ビットプロセスファイルからアクセスすることは可能ですか。

10

問題は フォルダリダイレクト です。32ビットプログラムが%windir%\System32フォルダにアクセスしようとすると、目に見えない形で%windir%\SysWOW64ディレクトリにリダイレクトされます。これは、32/64ビットアプリケーション用です。互換性。

System32内のすべてのファイルは64ビットですが、プログラムが正しく記述されていない場合、DLLを探すときにSystem32がプログラムにハードコードされている可能性があります。誤って記述されたプログラムによるランダムなプログラムクラッシュを防ぐために、Microsoftはそのリダイレクトを行います。

SysWOW64フォルダーではなくSystem32フォルダーにアクセスする必要がある場合は、「隠し」フォルダー%windir%\sysnativeに移動すると、「実際の」System32フォルダーに移動し、通常どおりフォルダーを参照できます。

11

WOW64(Windows on Windows 64ビット)は、さまざまなテクノロジ/手法を使用して32ビットアプリケーションをサポートします。それらの中には、フォルダとレジストリのリダイレクタがあります。

Windows Dev Center:デスクトップ 2ビットアプリケーションの実行

4
Brian