65.9K
CodeProject is changing. Read more.
Home

Disabling Windows file system redirection on a CFileDialog

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (6 votes)

Jan 29, 2010

CPOL
viewsIcon

28848

Introduction...

Introduction

Windows on Windows 64-bit (WOW64) provides file system redirection. In a 64-bit version of Windows Server 2003 or of Windows XP, the %WinDir%\System32 folder is reserved for 64-bit applications. When a 32-bit application tries to access the System32 folder, access is redirected to the following folder: %WinDir%\SysWOW64 By default, file system redirection is enabled.

Background

You can use the following functions to control file system redirection:
  • Wow64DisableWow64FsRedirection
  • Wow64EnableWow64FsRedirection
  • Wow64RevertWow64FsRedirection
The problem is that it is disabled on the current thread. Hence I faced a problem where I could not use CFileDialog Box to access the System32 folder. I searched on the net and could not find an article, so here goes my first article :)

Using the Code

You should derive a class from CFileDialog. And in the constructor, disable the flags and enable it back again in the destructor :)
class CFileDialogEx :	public CFileDialog
{
public:
	CFileDialogEx(void);
	~CFileDialogEx(void);
private:
	PVOID OldValue;
}; 

CFileDialogEx::CFileDialogEx(void):CFileDialog(true)
{
	Wow64DisableWow64FsRedirection(&OldValue);
}

CFileDialogEx::~CFileDialogEx(void)
{
	Wow64RevertWow64FsRedirection(OldValue);
}