【HSP3】WOW64のファイルのリダイレクトを一時無効にするサンプル

64bit環境で32bitアプリを動かした場合、WOW64のリダイレクト機能が働き、意図したところにファイルが読み書きできなくます。System32フォルダにアクセスしたつもりでも、実際はSysWOW64フォルダを参照してしまいます。それを無効化するサンプルです。

64bit環境で32bitアプリを動かした場合、WOW64のリダイレクト機能が働き、意図したところにファイルが読み書きできなくます。System32フォルダにアクセスしたつもりでも、実際はSysWOW64フォルダを参照してしまいます。それを無効化するサンプルです。

#uselib "kernel32"
#func Wow64DisableWow64FsRedirection "Wow64DisableWow64FsRedirection" var
#func Wow64RevertWow64FsRedirection "Wow64RevertWow64FsRedirection" var

	// わざと決め打ちしてしてます

	// 64bit環境では リダイレクトされ、
	// 実際は C:\Windows\SysWOW64\kernel32.dll が参照されている
	exist "C:\\Windows\\System32\\kernel32.dll"
	mes "kernel32.dll size:"+strsize

	// WOW64のリダイレクトを一時的に無効に
	OldValue = 0
	Wow64DisableWow64FsRedirection OldValue
	
	exist "C:\\Windows\\System32\\kernel32.dll"
	mes "kernel32.dll size:"+strsize
	// 処理が終わったらすぐに戻す
	Wow64RevertWow64FsRedirection OldValue
	
	exist "C:\\Windows\\System32\\kernel32.dll"
	mes "kernel32.dll size:"+strsize