2009/12/04(金)Windows x64のWOW64リダイレクトを回避する方法

WOW64のファイルシステムリダイレクタとその回避方法

SysWOW64リダイレクトが邪魔になることがあったので、回避方法をメモ。

WOW64のファイルシステムリダイレクタ

Windows x64では、WOW64(Windows On Windows 64)という仕組みによって32ビットアプリケーションを動作させています。しかし、アプリケーションが使用するDLLは、アプリケーションが32ビットならDLLも32ビット、アプリケーションが64ビットならDLLも64ビットでなければなりません。

この問題を解決するのがファイルシステムリダイレクタです。具体的には、32ビットアプリケーションが「%windir%\System32」ディレクトリにアクセスすると、「%windir%\SysWOW64」にリダイレクトされます。「%windir%\SysWOW64」には32ビットDLLが格納されているので、32ビットアプリケーションから見るとSystem32にある32ビットDLLを使っているように見えます。(この話はWindows 7 RCの記事で少ししています。)

また、「%windir%\System32」ディレクトリには64ビットDLLが格納されていて、64ビットアプリケーションはこのディレクトリに普通にアクセスできます。

リダイレクトで発生する問題

32ビットアプリケーションから「%windir%\System32」ディレクトリにアクセスしようとしてもリダイレクトされてしまうため、単純にSystem32にアクセスできないという問題が発生します。

例えば、32ビットアプリケーションから64ビット版コマンドプロンプト「%windir%\System32\cmd.exe」を起動しようとしても、実際に起動するのは32ビット版コマンドプロンプト「%windir%\SysWOW64\cmd.exe」になってしまいます。

リダイレクトの回避方法

32ビットアプリケーションから「%windir%\System32」にアクセスする時には、代わりに「%windir%\Sysnative」にアクセスします。

例えば、32ビットアプリケーションから64ビット版コマンドプロンプトを呼び出すには、「%windir%\Sysnative\cmd.exe」を指定します。

参考ページ