Using the CorrectFilePaths Fix
Applies To: Windows 7, Windows Vista
This section includes information about using the CorrectFilePaths compatibility fix, including the available variables, command-line options, usage, and any default file path and API-related information.
CorrectFilePaths
CorrectFilePaths enables you to modify an existing file path, so that it redirects to a new file path location. This compatibility fix contains several default corrections, in addition to enabling you to add custom corrections.
Important
These corrections are not environmental variables. Both the old and new file path locations are searched for this variable.
This compatibility fix might perform up to three complete passes to correct all of your file path location redirections.
Investigating the Issue
Application-related issues that can be resolved by applying the CorrectFilePaths compatibility fix are typically detected by a User Account Control (UAC) detection tool, such as Standard User Analyzer (SUA), or by a file monitoring tool, such as Process Monitor. In either of these tools, you will look for files to which you have been denied access or where an application has been unable to locate an expected file.
Intercepted APIs
The following sections provide a list of APIs that are intercepted by the CorrectFilePaths compatibility fix. The APIs are grouped according to the configurable section.
CreateProcess Routines
The following routines are classified within the CreateProcess configuration group.
CreateProcessA / CreateProcessW
WinExec
ShellExecuteA / ShellExecuteW
ShellExecuteExA / ShellExecuteExW
GetCommandLine Routines
The following routines are classified within the GetCommandLine configuration group.
Note
The routines included in this category are disabled by default.
- GetCommandLineA / GetCommandLineW
Profile Routines
The following routines are classified within the Profile configuration group.
GetPrivateProfileIntA / GetPrivateProfileIntW
GetPrivateProfileSectionA / GetPrivateProfileSectionW
GetPrivateProfileSectionNamesA / GetPrivateProfileSectionNamesW
GetPrivateProfileStringA / GetPrivateProfileStringW
GetPrivateProfileStructA / GetPrivateProfileStructW
WritePrivateProfileSectionA / WritePrivateProfileSectionW
WritePrivateProfileStringA / WritePrivateProfileStringW
WritePrivateProfileStructA / WritePrivateProfileStructW
File Routines
The following routines are classified within the File configuration group.
CopyFileA / CopyFileW
CopyFileExA / CopyFileExW
CreateDirectoryA / CreateDirectoryW
CreateDirectoryExA / CreateDirectoryExW
CreateFileA / CreateFileW
DeleteFileA /DeleteFileW
FindFirstFileA / FindFirstFileW
FindFirstFileExA / FindFirstFileExW
GetBinaryTypeA / GetBinaryTypeW
GetFileAttributesA / GetFileAttributesW
GetFileAttributesExA / GetFileAttributesExW
SetFileAttributesA / SetFileAttributesW
GetTempFileNameA / GetTempFileNameW
GetLongPathNameA / GetLongPathNameW
MoveFileA / MoveFileW
MoveFileExA / MoveFileExW
MoveFileWithProgressA / MoveFileWithProgressW
RemoveDirectoryA / RemoveDirectoryW
SetCurrentDirectoryA / SetCurrentDirectoryW
OpenFile
_lopen
_lcreat
Registry Set Value Routines
The following routines are classified within the Registry Set Value configuration group.
Note
The routines included in this category are disabled by default.
RegSetValueA / RegSetValueW
RegSetValueExA / RegSetValueExW
ShellLink Routines
The following routines are classified within the ShellLink configuration group.
IShellLinkA::SetPath / IShellLinkW::SetPath
IShellLinkA::SetArguments / IShellLinkW::SetArguments
IShellLinkA::SetIconLocation / IShellLinkW::SetIconLocation
IPersistFile::Save
LoadImage Routines
The following routines are classified within the LoadImage configuration group.
- LoadImageA
CorrectFilePaths Command-Line Options
The following table provides the command-line options that can be used to modify the behavior of the CorrectFilePaths compatibility fix.
Important
The command-line options that contain a minus (-) symbol subtract from the default functionality of the fix, while the command-line options with a (+) symbol adds to the default functionality. All command-line options must be entered at the beginning of the command-line syntax.
Command-Line Option | Description | ||
---|---|---|---|
-a |
Provides the default corrections, including the All Users configuration options. |
||
-c |
Does not apply fixes to the CreateProcess routines. |
||
-f |
Does not apply fixes to the File routines. |
||
-p |
Does not apply fixes to the Profile routines. |
||
-s |
Does not apply fixes to the ShellLink routines. |
||
-b |
Does not apply any of the default corrections. |
||
-u |
Provides the default corrections, including the User configuration options. |
||
+GetCommandLine |
Applies fixes to the GetCommandLine routines. |
||
+RegSetValue |
Applies fixes to the Registry Set Value routines. |
||
+LoadBitmap |
Applies fixes to the LoadImage routines. |
||
+Win9xPath |
Applies the default Windows 9x path-specific fixes. |
||
-Profiles |
Provides the default corrections, including the User configuration options. This is the same as using the -u option. |
||
old_file_path;new_file_path "old file path 2;new file path 2" |
Replaces instances of the old file path location with the new file path location. Old file path The original file path location, which is to be replaced. New file path The corrected file path location. Include additional path corrections separated by spaces.
|
Usage Examples
The following section provides examples for how to use the command-line options with the CorrectFilePaths fix.
Example 1: Additional Path Correction
In this example, you will apply the default path corrections, and then you will replace all occurrences of setup.exe with setupapp.exe.
setup.exe;setupapp.exe
Example 2: Additional Path Correction with Spaces
In this example, you will replace mplayer
with a full path location to the mplayer2. Pay particular attention to the use of straight quotation marks.
"mplayer;%PROGRAMFILES%\Windows Media Player\mplayer2"
Example 3: Removing All Default Path Corrections
In this example, you will replace setup.exe with setupapp.exe, without applying the default path corrections.
-b setup.exe;setupapp.exe
Example 4: Correct Only the CreateProcess Routines
In this example, you will replace setup.exe with setupapp.exe for any CreateProcess routines. You will not apply the default path corrections.
-f -p -s -b setup.exe;setupapp.exe
Example 5: Cumulative Path Corrections
In this example, you will apply the default path corrections, which are still incorrect and must again be modified.
wordpad.exe;%SYSTEMDIR%\wordpad.exe .\%SYSTEMDIR%;%SYSTEMDIR%
Example 6: Creating a Command-Line Syntax Using Quotes
In this exercise, we are going to use the Win9xPath fixes to change all of the paths from C:\Program Files\abc to D:\Program Files\Applications\def.
+Win9xPath "c:\Program Files\abc;d:\Program Files\Applications\def"
Included Modules
The following modules are included by the CorrectFilePaths compatibility fix.
shell32.dll
ole32.dll
shlwapi.dll
Fixing Your Code
File path location issues typically occur when an application attempts to write to a protected area of the file system, or when an application includes a hard-coded file path location that has moved in a newer version of the Windows operating system.
To correct these issues, you must:
Modify your application, so that it writes to per-user areas at runtime, or to areas that have been specifically set up for per-computer sharing during the installation process.
Modify your application, so that it does not include hard-coded file path locations. Instead, you should use one of the intercepted API calls listed in the Intercepted APIs section of this topic, to resolve the local file path for a particular type of variable.
CorrectFilePaths Default Corrections
Initial Pass (Optional)
The first pass is used to apply the following default corrections to any computer running a version of the Windows 9x operating system.
Important
This pass only occurs if you have configured by using the command-line options listed in the "CorrectFilePaths Command-Line Options" section of this topic. If you do not specify that this pass should occur, it will not run.
Converts all "/" characters to "\" characters
Removes any blank directory names, for example "abc\ \def" changes to "abc\def"
Removes any instances of ".\" from the file path
Second Pass
After the initial pass is complete, the compatibility fix will correct the file path locations, based on your configured requirements. There are several corrections that are available for configuration, based on the following three types of configuration options:
Base: Does not apply the default corrections. No file path locations are changed.
User: Applies the default corrections by using the per-user settings
All Users: Applies the default corrections by using the all-users settings
User Configuration Options
The following table lists all of the default corrections that are included with the User configuration option, listed in the order by which they are applied.
Original File Path | Corrected File Path | |
---|---|---|
C:\windows | %WINDIR% | |
%WINDIR% \rundll32.exe | %SYSTEMDIR% \rundll32.exe | |
%WINDIR% \rundll.exe | %SYSTEMDIR% \rundll.exe | |
%WINDIR% \write.exe | %SYSTEMDIR% \write.exe | |
%WINDIR% \dxdiag.exe | %SYSTEMDIR% \dxdiag.exe | |
%WINDIR% \wordpad.exe | Returned value from the HKEY_CLASSES_ROOT\Applications\wordpad.exe\shell\open\command registry key. For example, %ProgramFiles% \Windows NT\Accessories\WORDPAD.EXE" "%1 | |
%PROGRAMFILES% \Accessories\wordpad.exe | Returned value from the HKEY_CLASSES_ROOT\Applications\wordpad.exe\shell\open\command registry key. For example, %ProgramFiles% \Windows NT\Accessories\WORDPAD.EXE" "%1 | |
%WINDIR% \Start Menu | %USERSTARTMENU% | |
%WINDIR% \Desktop | %USERDESKTOP% | |
%WINDIR% \Favorites | %USERFAVORITES% | |
%WINDIR% \%CSIDL_STARTMENU_NAME% | %USERSTARTMENU% | |
%WINDIR% \%CSIDL_DESKTOPDIRECTORY_NAME% | %USERDESKTOP% | |
%WINDIR% \%CSIDL_FAVORITES_NAME% | %USERFAVORITES% | |
%WINDIR% \Profiles\ %USERNAME% \Start Menu | %USERSTARTMENU% | |
%WINDIR% \Profiles\ %USERNAME% \Desktop | %USERDESKTOP% | |
%WINDIR% \Profiles\ %USERNAME% \Favorites | %USERFAVORITES% | |
%WINDIR% \Profiles\ %USERNAME% \%CSIDL_STARTMENU_NAME% | %USERSTARTMENU% | |
%WINDIR% \Profiles\ %USERNAME% \%CSIDL_DESKTOPDIRECTORY_NAME% | %USERDESKTOP% | |
%WINDIR% \Profiles\ %USERNAME% \%CSIDL_FAVORITES_NAME% | %USERFAVORITES% | |
%WINDIR% \Profiles\All Users\Start Menu | %ALLSTARTMENU% | |
%WINDIR% \Profiles\All Users\Desktop | %ALLDESKTOP% | |
%WINDIR% \Profiles\All Users\Favorites | %USERFAVORITES% | |
%WINDIR% \Profiles\ %ALLUSERSPROFILE_NAME% \%CSIDL_STARTMENU_NAME% | %ALLSTARTMENU% | |
%WINDIR% \Profiles\ %ALLUSERSPROFILE_NAME% \%CSIDL_DESKTOPDIRECTORY_NAME% | %ALLDESKTOP% | |
%WINDIR% \Profiles\ %ALLUSERSPROFILE_NAME% \%CSIDL_FAVORITES_NAME% | %USERFAVORITES% | |
DDHELP.EXE | DDRAW.DLL | |
DDRAW16.DLL | DDRAW.DLL | |
DSOUND.VXD | DDRAW.DLL |
All Users Configuration Options
The All Users configuration option includes the User configuration options listed in the table above, in addition to changing the %USERSTARTMENU% location to the %ALLSTARTMENU% location.
Third Pass (Optional)
During the final pass, the compatibility fix will correct any additional locations that you explicitly included by using the command-line options.
Important
This pass only occurs if you have configured by using the command-line options listed in the "CorrectFilePaths Command-Line Options" section of this topic. If you do not specify that this pass should occur, it will not run.
To correct any additional file path locations during this pass, you must use at least one of the following variables in your command prompt.
%WINDIR% = returns the value from the GetWindowsDirectoryW function
%SYSTEMROOT% = returns the value from the GetWindowsDirectoryW function
%SYSTEMDRIVE% = returns the first two characters from the GetWindowsDirectoryW function
%SYSTEMDIR% = returns the value from the GetSystemDirectoryW function
%USERNAME% = returns the value from the GetUserNameW function
%PROGRAMFILES% = returns the value from the ShGetFolderPathW(…,CSIDL_PROGRAM_FILES, …) function
%USERSTARTMENU% = returns the value from the ShGetFolderPathW(…,CSIDL_STARTMENU, …) function
%ALLSTARTMENU% = returns the value from the ShGetFolderPathW(…,CSIDL_COMMON_STARTMENU, …) function
%USERDESKTOP% = returns the value from the ShGetFolderPathW(…,CSIDL_DESKTOPDIRECTORY, …) function
%ALLDESKTOP% = returns the value from the ShGetFolderPathW(…,CSIDL_COMMON_DESKTOPDIRECTORY, …) function
%USERFAVORITES% = returns the value from the ShGetFolderPathW(…,CSIDL_FAVORITES, …) function
%ALLFAVORITES% = returns the value from the ShGetFolderPathW(…,CSIDL_COMMON_FAVORITES, …) function
%USERAPPDATA% = returns the value from the ShGetFolderPathW(…,CSIDL_APPDATA, …) function
%ALLAPPDATA% = returns the value from the ShGetFolderPathW(…,CSIDL_COMMON_APPDATA, …) function
%USERPROFILE% = returns the value from the GetUserProfileDirectoryW function
%ALLUSERSPROFILE% = returns the value from the GetAllUsersProfileDirectoryW function
%APPEXEDIR% = returns the value from the GetModuleFileNameW function