ファイル システム リダイレクター
%windir%\System32 ディレクトリは、64 ビット Windows 上の 64 ビット アプリケーション用に予約されています。 DLL の 64 ビット バージョンが作成された場合、ほとんどの DLL ファイル名は変更されていないため、32 ビット バージョンの DLL は別のディレクトリに格納されます。 WOW64 では、 ファイル システム リダイレクターを使用してこの違いを非表示にします。
ほとんどの場合、32 ビット アプリケーションが %windir%\System32、%windir%\lastgood\system32、または %windir%\regedit.exe にアクセスしようとすると、アクセスはアーキテクチャ固有のパスにリダイレクトされます。
注意
これらのパスは参照用にのみ提供されます。 互換性のために、アプリケーションではこれらのパスを直接使用しないでください。 代わりに、以下で説明する API を呼び出す必要があります。
Original Path (元のパス) | 32 ビット x86 プロセスのリダイレクトされたパス | 32 ビット ARM プロセスのリダイレクトされたパス |
---|---|---|
%windir%\System32 | %windir%\SysWOW64 | %windir%\SysArm32 |
%windir%\lastgood\system32 | %windir%\lastgood\SysWOW64 | %windir%\lastgood\SysArm32 |
%windir%\regedit.exe | %windir%\SysWOW64\regedit.exe | %windir%\ SysArm32\regedit.exe |
アクセスによってシステムに UAC プロンプトが表示される場合、リダイレクトは行われません。 代わりに、要求されたファイルの 64 ビット バージョンが起動されます。 この問題を回避するには、リダイレクトを回避し、32 ビット バージョンのファイルに確実にアクセスできるように SysWOW64 ディレクトリを指定するか、UAC プロンプトが表示されないように管理者特権で 32 ビット アプリケーションを実行します。
Windows Server 2003 および Windows XP: UAC はサポートされていません。
特定のサブディレクトリはリダイレクトから除外されます。 これらのサブディレクトリへのアクセスは、%windir%\SysWOW64 にリダイレクトされません。
- %windir%\system32\catroot
%windir%\system32\catroot2
%windir%\system32\driverstore
%windir%\system32\drivers\etc
%windir%\system32\logfiles
%windir%\system32\spool
Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP: %windir%\system32\driverstore がリダイレクトされます。
32 ビット システム ディレクトリの名前を取得するには、64 ビット アプリケーションで GetSystemWow64Directory2 関数 (Windows 10バージョン 1511) または GetSystemWow64Directory 関数を使用する必要があります。
アプリケーションでは 、SHGetKnownFolderPath 関数を使用して%ProgramFiles% ディレクトリ名を決定する必要があります。
Windows Server 2003 および Windows XP: アプリケーションでは 、SHGetSpecialFolderPath 関数を使用して、%ProgramFiles% ディレクトリ名を決定する必要があります。
アプリケーションは、 Wow64DisableWow64FsRedirection、Wow64EnableWow64FsRedirection、 Wow64RevertWow64FsRedirection 関数を使用して WOW64 ファイル システム リダイレクター を制御できます。 ファイル システム リダイレクトを無効にすると、呼び出し元のスレッドによって実行されるすべてのファイル操作に影響するため、1 回の CreateFile 呼び出しに必要な場合にのみ無効にし、関数が戻った直後に再度有効にする必要があります。 ファイル システム リダイレクトを長期間無効にすると、32 ビット アプリケーションがシステム DLL を読み込めなくなり、アプリケーションが失敗する可能性があります。
32 ビット アプリケーションは、%windir%\Sysnative を %windir%\System32 に置き換えることで、ネイティブ システム ディレクトリにアクセスできます。 WOW64 は Sysnative を、ファイル システムがアクセスをリダイレクトしないことを示すために使用される特別なエイリアスとして認識します。 このメカニズムは柔軟で使いやすいため、ファイル システムのリダイレクトをバイパスすることをお勧めします。 64 ビット アプリケーションでは、Sysnative エイリアスは実際のディレクトリではなく仮想ディレクトリであるため、使用できないことに注意してください。
Windows Server 2003 および Windows XP: Sysnative エイリアスは、Windows Vista 以降に追加されました。