Misc Research

32Bit Application Shim Fixes

otherwindows

This table lists all documented (with descriptions) application shims as extracted from the `Microsoft Application Compatibility Database` (Compatadmin.exe) Some of the Shims are a…

32Bit Application Shim Fixes

This table lists all documented (with descriptions) application shims as extracted from the Microsoft Application Compatibility Database (Compatadmin.exe)

Some of the Shims are also documented in MSDN - Windows Vista, Windows 7, and Windows 8 Operating Systems - Windows XP and Earlier

Shim Fix Description
AddProcessParametersFlags Add flags to Peb-ProcessParameter-Flags. The flags are a ULONG. Specify it as a hex number (so at most 8 digits).
AddRestrictedSidInCoInitializeSecurity If set, combase will allow a restricted process to call into a non-restricted process for apps that implement some sort of protected view mode in win7-.
AddWritePermissionsToDeviceFiles Force device Read/Write permissions to match the permission necessary for all IOCTLs. This compatibility fix enables SecureROM applications to correctly open the sound devices. Applies to: Windows 95, Windows 98
AliasDXDC Windows 9x and Windows 2000 internally cache DirectDraw DC handles. This guarantees that the same DC would be returned for a particular surface regardless of how many times it was released and acquired. This compatibility fix aliases DCs returned by DirectDraw and then de-aliases them when GDI functions are called.
AllowDesktopSetProp A security change for Windows Server 2003 disallowed apps from using SetProp on the Desktop window. This shim caches the data from calls to SetProp on the desktop window and supplies the data when later requested.
AllowMaximizedWindowGamma If set, allow maximized windowed DX apps to change gamma ramp.
AlwaysActiveMenus In Windows XP, we set the inactive look on menus that belong to non-foreground windows.
APILogger Logs API calls made by the application to an .LGV file in %windir%\AppPatch. You must copy LogExts.dll, LogViewer.exe and the Manifest directory to %windir%\AppPatch in order for this shim to function properly.
AspNetRegiis11 Enables aspnet_regiis.exe v1.1 to run on Vista and register ASP.NET: grants Admin access to ADO-related registry keys and prepares IIS7 configuration.
ChangeAuthenticationLevel Changes COM Security Level from RPC_C_AUTHN_LEVEL_NONE to RPC_C_AUTHN_LEVEL_COMMON. This enables temporary elevation of the security context for an application. Applies to: Windows 95, Windows 98
CopyHKCUSettingsFromOtherUsers Some updaters/upgrade installers running elevated requires HKCU settings created by the application at runtime. This shim is intended to fix the Over-the-Shoulder scenario where the application has not been run in the elevated user, but has run in standard users. It scans the existing user profiles in the machine and attempts to copy the specified keys into HKEY_CURRENT_USER.
CorrectACMArgs This compatibility fix handles applications that pass a cbSrcLength value that is too big in the ACMSTREAMHEADER parameter to acmStreamConvert or acmStreamPrepareHeader.
CorrectACMStreamOpen Corrects the samples per block for acmStreamOpen so that it will pass IMA ADPCM's parameter validation.
CorrectActiveMoviePath Redirects calls from legacy movies to Windows Media Player instead of using the AMOVIE.OCX control to display the movie.
CorrectBitmapHeader This compatibility fix corrects known bad bitmap headers. Windows XP is more restrictive in the format of bitmap headers in an effort to promote wider compatibility. Applies to: Windows 95, Windows 98
CorrectCreateEventName The CreateEvent function doesn't accept event names that contain a backslash. This compatibility fix will replace backslashes with an underscore. Applies to: Windows 95, Windows 98
CorrectCreateIcon This compatibility fix intercepts calls made to the CreateIcon API and zeros the alpha channel in lpbXORbits. This has the effect of improving the display of certain icons in Windows XP.
CorrectCreateSurface Corrects the DDSCAPS structure of DirectDraw CreateSurface operations.
CorrectFarEastFont This compatibility fix corrects the lfCharSet value in LOGFONTA to correctly display localized versions of East Asia characters. Some localized East Asia applications create fonts to display localized characters by supplying only the font face name, and let the system pick up the correct character set. This works fine on Windows 9x platforms. But on Windows XP, you need to specify the correct character set in order to display localized characters correctly.
CorrectFilePathInSetDlgItemText Looks for c:\windows\system\ in calls to the SetDlgItemTextA API and replaces it with the string returned from the GetSystemDirectory API.
CorrectFilePaths This compatibility fix corrects file paths that were changed between Windows 9x and Windows XP. It works by hooking the file APIs and converting the file paths to the correct location for Windows XP. For example, a Windows 9x path of C:\Windows\Write.exe would be converted to C:\Windows\System32\Write.exe. Applies to: Windows 95, Windows 98
CorrectFilePathsUninstall If file locations are corrected during install, the uninstall program should attempt to find the file in its new location when uninstalling. If the CorrectFilePaths compatibility fix is used with an application, then this compatibility fix should be applied to the application’s uninstall program.
CorrectOpenFileExclusive The OpenFile(fileName, xxx, OF_SHARE_EXCLUSIVE) API fails on Windows 9x if the file referenced by fileName is currently opened. Windows XP allows the OpenFile call to succeed. This compatibility fix forces the OpenFile API to fail if the file is already open.
CorrectSoundDeviceId This compatibility fix makes calls to the waveOutOpen, waveOutGetDevCaps, midiOutOpen and midiOutGetDevCaps APIs with the uDeviceID equal to 0xFFFF, which was the constant for the Wave/MIDI Mapper under 16-bit windows. Under 32-bit Windows the constant is 0xFFFFFFFF. Applies to: Windows 95, Windows 98
CorrectVerInstallFile In Windows XP, due to a modification in the caching between MoveFile and DeleteFile API's, when the VerInstallFileW API is called, the short (8.3) filename gets set instead of the long filename. This compatibility fix corrects this problem. This issue may affect the installation of an application if an older version is still present.
CUASAppFix Execute a custom CUAS command-line behavior change.
DelayAppDllMain This compatibility fix attempts to alleviate loader lock issues by isolating application and system DLL initialization.
DelayApplyFlag Apply either a KERNEL, USER or PROCESS flag when the specified DLL is loaded. Command line: dll.dll;flagType;0xValue
DelayDllInit Some applications may use static DLLs, which could potentially issue calls to APIs before the application is ready. This compatibility fix provides a workaround for this behavior by causing a delay in the application’s static DLLs. This compatibility fix takes a command line containing a list of the DLLs affected. They will be loaded in the reverse order of the command line listing. Note that this compatibility fix is similar to InjectDll, which works with dynamically loaded DLLs.
DelayShowGroup The DDE command ShowGroup does not operate synchronously, though it should. Often the application will resume before the group is visible, not a problem in and of itself, but this creates problems if the application calls DeleteGroup before the group is visible. In that case, Explorer will generate this lengthy message: "DirName refers to a location that is unavailable. It could be on a hard drive on this computer, on a network, or on a different computer on your home network. Check to make sure that the disk is properly inserted, or that you are connected to the Internet or home network, and then try again. If it still cannot be located, the information may have been moved to a different location."
DelayWin95VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 95 version credentials. This compatibility fix takes a command line number which is the number of calls by which to delay version lying. This is useful in cases where some parts of an application are version sensitive, but others are not.
DelayWinMMCallback WaveOutOpen provides a callback mechanism, where very few APIs may be called. While inside this callback the entire Wave Out system is locked. It is very easy to deadlock the application. This compatibility fix catches all the WINMM callback data, and passes it to the application from the WM_TIMER callback which exists in the main application thread.
DeleteSpecifiedFiles This is a general purpose compatibility fix which can delete any file in a given path and FileVersion. The path and the FileVersion are optional. The command line can contain FileName:Path;FileVersion,FileName1:Path1;FileVersion1 etc... E.g. Ole2.dll:system,MFC42.dll:;6082.0.0.945,Foo.dll:d:\program Files\DisneyInteractive;. etc.. 'system' implies the %windir%. '0' OR "" implies that the filename itself is a fully qualified path OR one has the option of giving the path separately...The same holds good for FileVersion also. It is optional.
DeprecatedServiceShim This shim is written for the applications which are installing a service which had dependency on some service in the OS which has been deprecated. Catching CreateService APIs and stripping the deprecated dependency service from the lpDependencies parameter in the CreateService API before calling the original API.
DeRandomizeExeName Some installation programs will create a randomly named executable when they are launched that is responsible for performing the actual setup. This compatibility fix takes a command line that specifies what random executable name is created, and upon creation, renames it to the new name specified on the command line. The command line is given as the source name followed by the desired name. For example: *.EXE;RANDOMSETUP.EXE.
DirectPlayEnumOrder Some applications may expect the DirectPlay devices to be enumerated in a specific order. This compatibility fix enables the DirectPlay devices to enumerate in the expected order for applications that exhibit this behavior. Applies to: Windows 95, Windows 98
DirectXTrimTextureFormats Trim the list of textures returned by Direct3D for apps that don't handle long lists well. These lists are exposed by the driver, so there is no good general fix.
DirectXVersionLie Hooks the DXDIAGN GetProp API so that it returns specified version parameters. The command line is given as the version in the following form: MAJORVERSION . MINORVERSION . LETTER, e.g. 9.0.c.
DisableAdvancedRPCrangeCheck If set, rpcrt4.dll will not check advanced range check enabled in Windows Vista RPC stub.
DisableAdvanceRPCClientHardening If set, rpcrt4.dll will disable advanced client side buffer consistency check.
DisableAnimation Do not animate menus and listboxes.
DisableBoostThread This compatibility fix disables the automatic boost threads get when they are unblocked. Windows 9X does this only on message objects, and not on synchronization objects. The COMMAND_LINE options are: +HigherMainThread or +LowerMainThread to change the main thread priority and +BoostMainThread to leave the automatic boost for the main thread
DisableFadeAnimations Fade animations on buttons and other controls in Windows, causes application compatibility regressions with some applications that do not support this functionality. This compatibility fix disables fade animations for applications that do not support them.
DisableFilterKeys This compatibility fix disables the Filter Keys Accessibility Option at application startup and restores it on termination of the application.
DisableKeyboardCues Do not send Keyboard Cues messages.
DisableMaybeNULLSizeisConsistencycheck If set, rpcrt4.dll will not check the size_is consistency when pointer is NULL.
DisableNDRIIDConsistencyCheck If set, NDR will not check that an Interface Pointer returned in a call has the same IID as was requested by [iid_is]. NB: IID is always checked if /robust was set when compiling the IDL.
DisableNewWMPAINTDispatchInOLE If this flag is set, OLE's modal message loop will use the pre-Vista WM_PAINT dispatch behavior.
DisableNX This compatibility fix disables execution protection (NX) for a process. This is useful for applications that decide to execute from memory region marked with NX attribute (like stack, heap etc.).
DisableScreenSaver This compatibility fix disables the screen saver at application startup and restores it on termination of the application. It's useful for DirectX applications that don't work well with an active screen saver.
DisableStickyKeys This compatibility fix disables the Sticky Keys Accessibility Option at application startup, and re-enables it on termination of the application.
DisableThemeMenus Because of the display themes in Windows, some applications may have unpredictable behavior when trying to detect and use the correct window settings. This compatibility fix temporarily disables the Windows menu theme functionality for applications that do not support it.
DisableThemes Because of the display themes in Windows, some applications may have unpredictable behavior when trying to detect and use the correct window settings. This compatibility fix temporarily disables the Windows theme functionality for applications that do not support it.
DisableW2KOwnerDrawButtonStates Windows 2000 introduced new owner-draw button states that can be sent to an application during WM_DRAWITEM messages. These owner-draw states are used in Windows XP as well. This compatibility fix removes those states for applications that are not expecting this information.
DisallowCOMBindingNotifications If set, the process will not be notified of changes in the local machine bindings used by COM.
DuplicateHandleFix DuplicateHandle was changed from Win2000 to always NULL the destination handle, even if errors were generated. This shim ensures that *lpTargetHandle is not modified if the duplication was not successful.
ElevateCreateProcess Handles CreateProcess's ERROR_ELEVATION_REQUIRED by launching app elevated.
EmptyClipboardtoSet For Apps calling SetClipboardData (CF_TEXT) without emptying the clipboard first.
EmulateBitmapStride The GetObjectA API incorrectly calculates bitmap strides. The stride should be a multiple of 4. Note that the underlying bitmap or dibsection object is stored correctly, but the GetObject calculation is wrong. This compatibility fix is for Windows 2000-specific applications only.
EmulateCDFS Windows 9x does not set the read-only flag on CD-ROM directories like Windows XP. This compatibility fix removes such flags from file operations and causes the application to ignore all sharing and write attributes to emulate Windows 9x. This compatibility fix also handles the substantial differences in the CD attributes between Windows 9x and Windows XP. Applies to: Windows 95, Windows 98
EmulateClipboardDIBFormat On Windows 9x when you copy a high color bitmap onto the clipboard, it always gets converted to a 24-bit DIB when the CF_DIB format is specified. On Windows XP this conversion doesn't happen. Some applications are only designed to handle 8-bit and 24-bit DIBs. This compatibility fix converts the high-color DIBs to 24-bit DIBs.
EmulateCreateFileMapping The Windows 9x version of the CreateFileMapping API requires a SEC_COMMIT flag, while the Windows XP version does not. This compatibility fix adds the SEC_COMMIT flag for applications that expect it to be present. Applies to: Windows 95, Windows 98
EmulateCreateProcess This compatibility fix hooks the CreateProcessA API and ensures that all parameters have acceptable values for Windows XP's implementation of the API, which is more restrictive than Windows 9x. Applies to: Windows 95, Windows 98
EmulateDeleteObject This compatibility fix causes the Windows XP version of DeleteObject to return success, which is the Windows 9x behavior. Applies to: Windows 95, Windows 98
EmulateDirectDrawSync This compatibility fix hooks the mutex APIs that DirectDraw uses to synchronize exclusive mode access and ensures all synchronization events happen on the same thread. DirectDraw may produce unstable results if the exclusive mode is released from a thread other than the one that acquired it. Applies to: Windows 95, Windows 98
EmulateDrawText In Windows 9x, the DrawText API would accept out of range values and then convert them to acceptable values. This compatibility fix mimics that behavior for Windows XP. Applies to: Windows 95, Windows 98
EmulateEnvironmentBlock This compatibility fix causes Windows XP to return a significantly reduced environment block from the environment APIs. This reduces the chance of a buffer overrun causing corruption.
EmulateFindHandles If an application calls the FindFirstFile API on a directory, and then attempts to remove that directory without first closing the FindFirstFile handle, the directory will be reported as being in use. The RemoveDirectory API call will return an ERROR_SHARING_VIOLATION error. This compatibility fix will force the FindFirstFile handle closed to ensure the directory is removed. The fix also ensures the FindFirstFile handles are valid before calling the FindNext or FindClose APIs. The FindFirstFile handle will not be forced closed unless the directory is empty. Applies to: Windows 95, Windows 98
EmulateGetCommandLine The behavior of GetCommandLine differs from Windows 9x to Windows XP. For example, if a user enters the command line: E:\temp\test.exe -dm -cdrom, Windows XP's GetCommandLine() returns: test.exe -dm -cdrom. Windows 9x's GetCommandLine() returns: E:\TEMP\TEST.EXE -dm -cdrom. Applies to: Windows 95, Windows 98
EmulateGetDeviceCaps This compatibility fix checks for known issues with the GetDeviceCaps API between the Windows 9x and Windows XP versions, and corrects them where possible. Applies to: Windows 95, Windows 98
EmulateGetDiskFreeSpace This compatibility fix causes the Windows XP version of GetFreeDiskSpace to return values similar to those returned by Windows 9x. It hooks the GetDiskFreeSpace API and determines the true free space on FAT32/NTFS systems. If the free space is larger than 2GB, the compatibility fix will return 2GB as Windows 9x would return. If it is smaller than 2GB, it converts the sector geometry to emulate Windows 9x. Applies to: Windows 95, Windows 98
EmulateGetProfileString The GetProfileString API in Windows 9x stripped trailing white space (including tabs) from the end of INI file strings. In Windows XP, the full line is returned, including the white space at the end. This can sometimes result in bitmaps failing to load because the filename is invalid. This compatibility fix causes the Windows XP version of the GetProfileString API to emulate the behavior of the Windows 9x version. Applies to: Windows 95, Windows 98
EmulateGetStdHandle Normally, when a process is created on Windows XP, the hStdInput, hStdOutput, and hStdError members of the STARTUPINFO structure are set to NULL. Some applications may check these handles and send error messages. This compatibility fix can be used in this case to send appropriate handles and prevent program termination.
EmulateGetStringType Emulate Windows 2000 GetStringType[W, ExW, A, ExA].
EmulateGetUIEffects If on a TS session, force SPI_GETUIEFFECTS to FALSE (default) or TRUE
EmulateHeap This compatibility fix emulates the functionality of the Windows 9x heap manager. It is a full implementation of the Windows 9x heap manager ported to Windows XP. Applies to: Windows 95, Windows 98
EmulateJoystick This compatibility fix will retrieve JOYCAPS data for a given joystick number and copy the number of requested bytes to an application structure. If the return value is an error, then this compatibility fix will fill the JoyCaps structure with the same values from Windows 9x. Applies to: Windows 95, Windows 98
EmulateLZHandles This compatibility fix intercepts all of the LZ API calls and either increments or decrements the handles so that a valid handle (from the application's perspective) is always greater than 0 instead of greater than or equal to 0. This compatibility fix applies to applications that treat a handle value of zero as an error. Windows 9x never returned handles of zero, but this is a possibility on Windows XP.
EmulateMissingEXE This compatibility fix hooks the CreateProcess and WinExec APIs to spoof executables that need redirection such as Start.exe, ScanDskW.exe, Defrag.exe, Rundll32.exe, Control.exe, WinHelp.exe, and PBrush.exe. Applies to: Windows 95, Windows 98
EmulateOldPathIsUNC This compatibility fix reverts shlwapi PathIsUNC to old behavior.
EmulatePlaySound If an application calls PlaySound with a SND_LOOP flag, the sound plays continuously until PlaySound is called with a NULL sound name. Windows 9x will automatically stop the sound if a different sound is played. This compatibility fix will catch all PlaySound calls, remember the current sound and automatically stop it if a different sound is to be played. Applies to: Windows 95, Windows 98
EmulatePrinter This compatibility fix corrects a variety of differences that occur between the printer routines in Windows 9x and Windows XP. Most of the issues deal with the EnumPrinters API, and the different behavior of this API between Windows 9x and Windows XP. Applies to: Windows 95, Windows 98
EmulateSlowCPU This compatibility fix modifies the return values of QueryPerformanceCounter and QueryPerformanceFrequency in order to emulate those expected from performance checking routines to emulate slower processors. If +timeGetTime is specified as a command line, timeGetTime will delay slightly. Applies to: Windows 95, Windows 98
EmulateSortingServer2008 This compatibility fix enables Windows Server 2008 sorting behavior for the CompareString, LCMapString, FindNLSString and IsNLSDefinedString APIs.
EmulateSortingVista This compatibility fix enables Windows Vista sorting behavior for the CompareString, LCMapString, FindNLSString and IsNLSDefinedString APIs.
EmulateSortingWindows61 This compatibility fix enables Windows 7 and Server 2008 R2 sorting behavior for the CompareString, LCMapString, FindNLSString, IsNLSDefinedString and GetNLSVersion APIs.
EmulateTextColor This compatibility fix compensates for some incompatibilities between the Windows 9x version of the GDI APIs and the versions found in Windows XP. In particular, this compatibility fix relates to the COLORREF flags used for text color. Applies to: Windows 95, Windows 98
EmulateToolHelp32 This compatibility fix addresses two separate issues with the PROCESSENTRY32 API. The first converts the standard Windows XP usage of the szExeFile field from the image name to the Windows 9x style, which includes the full path and executable name. The second issue addressed is that of the cntUsage field, which on Windows 9x is always non-zero, and on Windows XP is always zero. Applies to: Windows 95, Windows 98
EmulateUSER Fixes for known API differences between Win9x and NT: SetWindowsHookEx, SetWindowLong, RegisterClass, ChangeDisplaySettings/ChangeDisplaySettingsEx, ToAscii/ToAsciiEx, GetMessage/PeekMessage, ShowWindow. Also persists palette state through mode changes. Applies to: Windows 95, Windows 98
EmulateVerQueryValue This compatibility fix permits a NULL buffer to be passed to VerQuery functions. In Windows XP this technique is considered obsolete as it was corrected in the API. Applies to: Windows 95, Windows 98
EmulateWriteFile Windows 9x permitted a NULL buffer to be passed to the WriteFile API, with the assumption being that a series of zeroes should be written. Windows XP will fail on this call when a NULL buffer is passed. This compatibility fix emulates the behavior of WriteFile on Windows 9x when it receives a NULL buffer. Applies to: Windows 95, Windows 98
EnableAppConfig Use this flag if you want to let the app config overwrite the publisher's config.
EnableDEP This compatibility fix enables data execution protection (DEP) for a process. This is useful for applications that decide to execute from memory region marked with NX attribute (like stack, heap etc.).
EnableLegacyExceptionHandlinginOLE If set, ole32 will revert back to the old exception handling behavior.
EnableLegacyExceptionHandlingInRPC Enable legacy RPC exception handling
EnableLegacyLoadTypeLibForRelativePaths If set, oleaut32 will use the legacy search logic for relative type library file names instead of the safe search path when calling LoadTypeLib.
EnableLegacyNTFSFlagsForDocfileOpens If set, APIs that open OLE Structured Storage docfiles for writing (StgOpenStorageEx, etc.) will revert to passing FILE_SHARE_WRITE when calling CreateFile, even if the STGM_SHARE_DENY_WRITE flag is specified.
EnableRestarts In Windows 9x applications could restart the computer by calling the ExitWindowsEx API. Windows XP requires the application to run with adequate security privileges to successfully call the ExitWindowsEx API. This compatibility fix enables an application to call the ExitWindowsEx API with correct security privileges. Applies to: Windows 95, Windows 98
EnlargeGetObjectBufferSize For apps calling GetObjectA() with cbBuffer is less than sizeof(BITMAP).
ExtraAddRefDesktopFolder Some applications obtain the shell desktop folder and invoke the Release() method too many times, resulting in the object being destroyed prematurely. This compatibility fix invokes the AddRef() method on the desktop folder returned by the SHGetDesktopFolder function to counteract the erroneous Release().
ExtractAssociatedIcon Some applications that use the ExtractAssociatedIcon API call do not handle the 32bpp icons correctly. This compatibility fix forces the icon to revert to an 8bbp icon.
FailCloseProfileUserMapping Some applications require that the CloseProfileUserMapping API call fail. On Windows XP, there is no way for this API to fail. This compatibility fix causes the call to fail. Note that this issue is machine dependent
FailGetStdHandle Some applications expect a call to GetStdHandle to fail. This compatibility fix causes all calls to the GetStdHandle API to fail.
FailObsoleteShellAPIs Some applications call obsolete private shell32 API's which are no longer supported. This compatibility fix implements those functions with stubs that fail. Functions handled in this manner are the FileMenu_* functions plus those which were retired between Windows XP and Windows Vista.
FailOpenFile This compatibility fix causes the OpenFile API to fail on specific files. The file names to be failed are supplied on the command line when this compatibility fix is used.
FailRemoveDirectory This shim fails calls to RemoveDirectory() when called with a path matching the one specified in the shim command-line. Only a single path is currently supported. The path can contain environment variables, which will be expanded when the shim attaches. You should specify the exact path against which you wish to match, i.e., partial paths are not supported.
FakeLunaTheme MS Office 2003 applications rely on the filename of the current theme to determine their rendering mode. This compatibility fix causes the default 'aero' theme in Windows Vista to appear to be the default 'luna' theme of Windows XP.
FakeThemeMetrics Some application’s menus may not behave correctly when the system color for menu does not match the system color for button face. This compatibility fix forces a match between the menu and button colors.
FileVersionInfoLie This compatibility fix hooks the GetFileVersionInfo and GetFileVersionInfoSize APIs to return the version block for DirectX 6.1 components. The command line input allows you to select specific filenames and resources to use instead of the defaults. Applies to: Windows 95, Windows 98
FilterNetworkResources Remove certain network providers to fix apps that depend on Microsoft Windows Network being either the only provider, or the first in the list.
FixSectionProtection Some applications execute from sections not marked for execution. This compatibility fix patches the section protection for such image sections. Command line for this shim has the following format: COMMAND_LINE: SECTION_INFO
FixServiceStartupCircularDependency A service startup circular dependency occurs when two or more installed services depend upon each other to start. That is, service ‘A’ cannot start until service ‘B’ starts, but service ‘B’ cannot start without service ‘A’ running. This compatibility fix attempts to counter this behavior.
Force640x480 This compatibility fix sets the screen display to 640x480 pixels when the process starts as a temporary resolution change.
Force640x480x16 This compatibility fix sets the screen display to 640x480 pixels with 16-bit color when the process starts as a temporary resolution change.
Force640x480x8 This compatibility fix sets the screen display to 640x480 pixels with 8-bit color when the process starts as a temporary resolution change.
Force8BitColor This compatibility fix forces the color depth of the display to use 8-bit color (256 colors) when the process starts.
ForceAdminAccess This compatibility fix addresses issues that may be encountered when an application uses various API calls to verify if the current user is part of the Administrators group.
ForceAnsiGetDisplayNameOf This compatibility fix forces the IShellFolder::GetDisplayNameOf API to return an ANSI string as Windows 98 would, instead of a Unicode string as Windows XP would return. Applications that use the GetDisplayNameOf API to get the path for the Desktop or the Start Menu folders that fail to check the uType flag to see if it is Unicode will get an unreadable path name. Applies to: Windows 95, Windows 98
ForceAnsiWindowProc This compatibility fix intercepts calls made to the GetWindowLongA API and redirects them to the GetWindowLongW API to get the WindowProc address. This is because in Windows XP, the GetWindowLongA API does not return the "Window Procedure" address directly and the application has to use the CallWindowProc API to call the window procedure. This compatibility fix also works for the Dialog procedure.
ForceAppendMenuSuccess In Windows XP, applications are restricted from modifying the system menu. Instead, each application gets a separate copy of the system menu. Some applications may try to get a handle to the real system menu and attempt to modify it. This compatibility fix makes the AppendMenu API return TRUE all the time, since there is no way to tell if an HMENU is the handle to the real system menu or simply a handle to the local copy of the system menu.
ForceApplicationFocus Some applications may lose focus and are unable to regain it due to Windows XP window manager changes. This compatibility fix forces new windows to receive focus and move to the foreground.
ForceAVIWindow Some apps that use MCI to play their AVIs send messages in an order that causes mciavi32 to continually re-open the window it's supposed to be playing to. This compatibility fix filters the calls made to MCI and cause them to be executed in the existing target window.
ForceCDStop This compatibility fix addresses the problem of contention with the CD drive. Some applications may try to access the CD even if they are playing a movie or sound via MCI. Note that this compatibility fix assumes the application is running off of a single CD-ROM drive at a time. Applies to: Windows 95, Windows 98
ForceCoInitialize Some multimedia applications on Windows 9x would call AVIFileInit without first calling CoInitialize. This would work in Windows 9x but will fail on Windows XP. This compatibility fix will call CoInitialize on CoCreateInstance if it hasn't already been called. Applies to: Windows 95, Windows 98
ForceDefaultSystemPaletteEntries In Windows 9x, DirectDraw manipulates the palette directly without using GDI, while on NT it uses GDI. Therefore, if an application mixes calls to GDI and DirectDraw palette operations, they will get different results from Windows 9x to NT. This compatibility fix attempts to isolate GDI palette operations from DirectDraw in order to more closely emulate Windows 9x behavior.
ForceDirectDrawEmulation Some applications don't handle certain aspects of hardware acceleration correctly. For example, they may assume that the pitch is always double the width in 16bpp displays, which is not necessarily the case. This compatibility fix forces DirectDraw into emulation mode where the pitch is directly scaled to the width.
ForceDirectDrawWait DirectDraw Blt and Lock calls may encounter device busy situations more frequently on Windows XP than was common on Windows 9x. This compatibility fix adds WAIT flags to Blt and Lock calls to avoid application failure due to device busy scenarios.
ForceDisplayMode This compatibility fix applies to applications that require a specific resolution to run. It takes a command line to specify the resolution. The command line options must specify the width (pixels), height (pixels), and color depth (bits). If the desired resolution is omitted, the current system resolution will be used. For example, if you specify a setting of 1024,768,16 the application will use a setting of 1024x768 at a color depth of 16 bits. If you were to specify the command line of ,,16, the application would use the current system resolution but would change to 16-bit color depth.
ForceDXSetupSuccess Some applications built to use older version of DirectX may encounter problems on Windows XP when they call the LoadLibrary or GetProcAddress functions of DSETUP.DLL. This compatibility fix intercepts calls made to these APIs and forces them to return success. Applies to: Windows 95, Windows 98
ForceKeepFocus This compatibility fix ensures that when a window is destroyed, another visible window from the current application is ready to take its place. Otherwise, the application can lose focus altogether, which is inconsistent with Windows 9x behavior. Applies to: Windows 95, Windows 98
ForceMessageBoxFocus This compatibility fix intercepts calls made to the MessageBox API and adds MB_SETFOREGROUND style. This effectively forces the resulting MessageBox to be the foreground window.
ForceSeparateVDM Add the CREATE_SEPARATE_WOW_VDM to CreateProcess calls, so that a separate VDM process is always created.
ForceShellLinkResolveNoUI This compatibility fix resolves an issue that some applications may encounter where a call to IShellLink::Resolve may generate a dialog box even when the SLR_NO_UI flag is set in the parameters. Applies to: Windows 95, Windows 98
ForceSimpleWindow This compatibility fix adjusts the CreateWindow API parameters to make only very simple windows. This is useful for fixing issues where an application passes combinations of styles that had special meaning on Windows 9x, but are unsupported on Windows XP.
ForceTemporaryModeChange This compatibility fix ensures that any mode changes the application makes are temporary in nature. When this fix is applied, all mode changes will be reset when the application terminates.
ForceWorkingDirectoryToEXEPath This compatibility fix sets the working directory to match the executable path when using the IShellLink SetWorkingDirectory and SetPath APIs.
GenericInstaller This flag indicates a match against a class of installers.
GetDiskFreeSpace2GB If set, GetDiskFreeSpace results will be scaled for applications that do not understand > 2GB free space.
GetShortPathNameNT4 In NT 4, GetShortPathName did not care if the file existed
GetVolumeInformationLie This shim will strip out specified flags from the lpFileSystemFlags parameter on the return from GetVolumeInformationA/W. This allows apps that improperly handle compression or encryption to be lied to that the filesystem does not support that feature.
GiveupForeground In Windows XP, we have changed foreground semantics to stop foreground focus stealing by one app if another application is active. However, this has caused a few application compatibility bugs. This application compatibility flag is used to enable the old foreground focus behavior for these bugs.
GlobalMemoryStatus2GB This compatibility fix modifies the pagefile and physical memory status so that it reports available pagefile+avail physical memory not more than 2GB. Applies to: Windows XP
GlobalMemoryStatusLie This compatibility fix modifies the memory status structure so that it reports values similar to those that Win9x would have reported. Applies to: Windows 95, Windows 98
GrabMatchingInformation Many of the application compatibility strategies in Windows XP depend on “matching information”, which will help to identify an application in need of a particular fix. This compatibility fix will go through the current process' directory and each spawned process' directory and produce matching information in a file named matchinginfo.txt on the desktop.
HandleAPIExceptions This compatibility fix addresses issues with APIs that may not gracefully handle receiving bad parameters. Currently, this works with the BackupSeek, CreateEvent, and GetFileAttributes APIs. Applies to: Windows 95, Windows 98
HandleBadPtr Some APIs removed IsBadReadPtr from their parameter validation so applications that used to get away with passing bad pointers now AV when they try to use them. This shim reverts the code to using the IsBadPtr APIs so that applications continue to work.
HandleDBCSUserName Applications fail when its app path name has high ASCII characters. This shim wraps the app path with double quotes at GetCommandLineA. If app path is double quoted, the application can sometimes handle DBCS characters.
HandleDBCSUserName2 Some old non-DBCS applications handle characters by byte rather than by character. If the application calls a DBCS-enabled Win32 API (e.g. CharNextA), it will break the DBCS character at the second byte. This compatibility fix is used to disable the DBCS feature for CharNextA if the string is a DBCS user profile.
HandleEmptyAccessCheck AccessCheck used to return STATUS_SUCCESS if the DesiredAccess flag was 0, it now returns STATUS_FAILURE
HandleRegExpandSzRegistryKeys This compatibility fix intercepts calls to the RegQueryValueEx APIs for REG_EXPAND_SZ registry keys and converts them to REG_SZ by expanding the embedded environment strings. Applies to: Windows 95, Windows 98
HandleWvsprintfExceptions This compatibility fix provides a facility to convert the argument list from LPSTR into VA_LIST. Some native Windows 9x applications use LPSTR instead of VA_LIST. Without properly checking the return value, these applications may assume that it is safe to use Wvsprintf, but in Windows XP, this may cause an access violation. This compatibility fix takes one command line: "arglistfix" (case insensitive). Applies to: Windows 95, Windows 98
HardwareAudioMixer Set the Multimedia APIs to report the audio hardware information.
HeapClearAllocation This compatibility fix will clear out every heap allocation for the application with zeroes.
HeapDelayLocalFree This compatibility fix will delay calls to LocalFree. This may help applications that are trying to free heap memory using LocalFree before all activities have been concluded.
HeapForceGrowable Zero the maximum size of a heap on HeapCreate for applications that didn't give themselves enough space.
HeapIgnoreMoveable Remove the GMEM_MOVEABLE flag if GlobalAlloc fails. The NT heap manager has a 64K limit on the number of moveable blocks it allocates. This compatibility fix simply removes the moveable flag if the allocation fails. This compatibility fix is superseded by EmulateHeap.
HeapLookasideFree This compatibility fix addresses potential problems with applications that may need help with heap memory free calls. The fix also checks to insure that all free calls are made to the correct heap.
HeapLookasideFreeKernel32 Similar to HeapLookasideFree, but directly targets problematic components which directly import Kernel32!HeapAlloc or HeapFree.
HeapPadAllocation This compatibility fix allocates additional memory for every allocation made through the HeapAlloc API. This fix is command line driven, but 256 is the default amount to add.
HeapValidateFrees This compatibility fix validates the calls to the HeapFree API to ensure the pointer is in the heap that it was allocated from.
HideCursor ShowCursor will display the cursor if the count is >= 0, this shim will force ShowCursor to act as a toggle rather than a count. In other words it forces the count to be 0 or -1.
HideDisplayModes Display modes are enumerated differently for Windows XP than they were on Windows 9x. This may cause issues for some applications when they attempt to list all of the supported display modes and store that information in a fixed-length buffer. This compatibility fix reduces the number of display modes reported to mimic the behavior of Windows 9x. Applies to: Windows 95, Windows 98
HideTaskBar In Windows XP, the WS_EX_CLIENTEDGE window style causes applications to run with the taskbar still visible. This may not be the expected behavior for some applications running in full screen mode. This compatibility fix simply removes the flag and enables the application to correctly use full screen mode.
HighDpiAware Mark an application as High DPI aware. Application will not be scaled by DWM.
HpatOptOutForNonOsBinariesFlag If set, we will not allocate HPAT for non-Os binaries (binaries under \Systemroot).
IgnoreAltTab Many Windows 9x applications were not programmed to respond to task switches caused by pressing Alt-Tab, the Windows key, Ctrl-Esc, or Alt-Esc. This compatibility fix disables those key presses. Note that Ctrl-Alt-Del cannot be ignored in Windows XP.
IgnoreCoCreateInstance Some applications test for the existence of a component using CoCreateInstance. If that component is incompatible, it may crash the application. This compatibility fix fails the CoCreateInstance call, thereby allowing an application to gracefully handle the error. The command line is a semi-colon delimited list of class ids of the form {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.
IgnoreCRTExit Prevent CRT shutdown routines from running.
IgnoreDebugOutput This compatibility fix causes the application to disregard any output sent to the OutputDebugString API. This type of debug information is generally not useful to an end-user and will only serve to slow application performance under Windows XP.
IgnoreException This compatibility fix causes the application to ignore certain specified exceptions. By default, the only exceptions ignored are privileged mode instructions, but any exception can be ignored with this compatibility fix. Applies to: Windows 95, Windows 98
IgnoreFloatingPointRoundingControl Before floating point sse2 support in C runtime library, the rounding control request was being ignored which would use round to nearest option by default. This shim ignores the rounding control request to support applications relying on old behavior.
IgnoreFontQuality Anti-aliasing is now on by default, so any app using PROOF_QUALITY will now get an anti-aliased font. If the font is combined with a color-key, this will cause undesirable looking text.
IgnoreFreeLibrary Some applications free DLLs that are still in use. If this occurs, and the offending application attempts to make a call to an exported function, the call fails with an access violation. This compatibility fix ignores calls to the FreeLibrary API using a list of DLLs to ignore. For example: USER32.DLL;GDI32.DLL.
IgnoreHungAppPaint This compatibility fix intercepts calls to the RegisterClass API and changes the brush type to HOLLOW_BRUSH. This prevents the USER process from painting over application windows if it detects they stopped responding.
IgnoreLoadLibrary This compatibility fix will prevent specified DLLs from being loaded by the LoadLibrary API. This may be useful for applications that have fallback mechanisms for features that are not supported. In addition, it reduces the error mode so library problems won't cause the system to generate an error dialog. Applies to: Windows 95, Windows 98
IgnoreMCISTOP This compatibility fix intercepts calls made to the mciSendCommand API and ignores any MCI_STOP commands. MCI_STOP on Windows 9x has a relatively fast response time, but on Windows 2000 and Windows XP can take up to several seconds to respond. Applications that use this API in time-sensitive areas may experience performance issues.
IgnoreMessageBox This compatibility fix intercepts calls to the MessageBox API and, based on the supplied command line, prevents the message box from being displayed. Many applications display a message box with debugging or other extraneous content that can be confusing to users. These are normally the result of differences between Windows 9x and Windows XP.
IgnoreMSOXMLMF This compatibility fix will just ignore the registered MSOXMLMF and fail the CoGetClassObject for its CLSID.
IgnoreNoModeChange This compatibility fix causes Windows XP to ignore irrelevant mode change requests from the application. This will prevent the mode uniqueness value from changing. If the mode uniqueness value changes, DirectDraw will reset all its objects even if the new mode is identical to the current mode.
IgnoreOemToChar Installation programs that call the OemToCharA API on a string that is already ANSI may cause problems with DBCS user names. This compatibility fix ignores the call if it sees the temporary directory in ANSI format within the string.
IgnoreOleUninitialize Some applications may call the ole32!OleUnitialize function in their DllMain. This worked on Windows 2000, but is no longer supported on Windows XP. This compatibility fix causes calls to ole32!OleUnitialize to be ignored.
IgnoreScheduler This compatibility fix is used to handle scheduling issues that may arise with applications, such as threads suspending or resuming themselves. It also normalizes all thread and process priorities that may starve other threads or processes. Applies to: Windows 95, Windows 98
IgnoreSysColChanges This compatibility fix prevents system color changes made by applications that are not restored correctly after exit.
IgnoreTAPIDisconnect Some TAPI applications do not correctly handle a disconnect message. This compatibility fix removes the disconnect message from the queue.
IgnoreVBOverflow Some VB apps try to store win32 handles in WORD size variables. On Win9x this works because most handles are 16-bit. However, on NT, the VB type checking code throws a "Runtime Error 6". The shim intercepts the type checking code and ignores the check.
IgnoreWM_CHARRepeatCount The app uses CallWindowProcA to send WM_CHAR messages with bogus lParam values. Intercept these and replace the LOWORD(lParam) repeat count with 1
IgnoreZeroMoveWindow Some applications need to have zero width MoveWindow calls filtered out or it will fail an internal check.
InjectDll Some applications may use dynamically loaded DLLs, which could potentially issue calls to static DLLs before the application is ready. This compatibility fix provides a workaround for this behavior by preloading the required static DLLs for the application. This compatibility fix takes a command line containing a list of the DLLs affected. They will be loaded in the order of the command line listing. This compatibility fix is similar to DelayDllInit, which works with statically loaded DLLs.
KeepWindowOnMonitor This compatibility fix forces all windows to display (centered) on the correct monitor. It can be used to prevent windows from being moved off screen
LazyReleaseDC Some applications written for Windows 9x may expect to be able to use a device context that has already been released through a call to the ReleaseDC API. This compatibility fix delays the device context release by one call.
LimitFindFile This compatibility fix limits the DEPTH, BRANCH, or number of FILES returned by a FindFile search. Limits fully qualified paths and optionally relative paths. The compatibility fix can optionally return short filenames. Command line usage is any combination of "DEPTH=#", "BRANCH=#", "FILES=#", "SHORTFILENAMES", "LONGFILENAMES", "LIMITRELATIVE", or "ALLOWRELATIVE".
LoadComctl32Version5 This compatibility fix intercepts calls to the CreateWindow, DialogBox, and CreateDialog routines in order to ensure that Comctl32 version 5 is loaded. This means that applications will launch Comctl32 version 5 when linking to Shell32 and not by explicitly calling the API for their application.
LoadLibraryCWD This compatibility attempts to emulate legacy behavior by loading from the current directory first.
LoadLibraryRedirectFlag If set, the shim engine will redirect loading of locally shipped versions of system DLLs to their inbox versions.
LocalMappedObject Force all Global named file mapping objects into the Local namespace
LowerThreadPriority This compatibility fix lowers thread and process priority if they are very high.
MapMemoryB0000 Some applications require that a block of memory be mapped at B0000 as it is on Windows 9x. This compatibility fix will map a block of memory at the B0000 address for the application. Applies to: Windows 95, Windows 98
MoveIniToRegistry Applications may still be storing data in INI files instead of using the registry. This is a generic compatibility fix to move INI data into the registry. The compatibility fix is command line driven.
MoveToCopyFileShim This shim hooks MoveFileA and MoveFileW API mostly used by set ups and instead copies the file. Using copy will avoid moving the security descriptor of the files to the destination and the files will be assigned the default descriptor of the destination folder.
MoveWinInitRenameToReg This compatibility fix intercepts calls made to ExitWindowsEx, waits for DLL_PROCESS_DETACH, and then moves the contents of the [Rename] section of wininit.ini into the registry via MoveFileEx().
NoGdiBatching Turn GDI batching off.
NoGDIHWAcceleration If set, the process will opt out of GDI hardware acceleration.
NoGhost No window ghosting for this application.
NoPaddedBorder Windows of this application will not get padded borders (they will get WS_EX_NOPADDEDBORDER).
NoShadow Don't apply windows shadow for this app.
NoTimerCoalescing If set, the process will opt out of WM_TIMER coalescing.
NoVirtualization This compatibility fix turns off file and registry virtualization for this application.
NullHwndInMessageBox If an application passes an invalid window handle to the MessageBox API, and the lower 16 bits of that handle are NULL, Windows 9x treats it as the desktop (because window handles are only 16 bit on Windows 9x). On Windows XP, since the full 32 bits are used, the call to MessageBox would fail. This compatibility fix intercepts the MessageBox API and determines if the window handle that was passed is a valid handle. If it is not valid, it is set to NULL.
Ole32ValidatePointers If this flag is set, ole32.dll will use the IsBadReadPtr family of functions to verify pointer arguments in the standard COM APIs. This was the default behavior on all platforms prior to Whistler.
OpenDirectoryAcl Gives builtin\USERS full permission to the directory specified on the command line.
OpenGLEmfAware Mark an application as OpenGL EMF aware.
PaletteRestore Applications may be unable to correctly track palette changes across a mode change. This issue typically manifests itself as color corruption. It's fairly easy for an application to run into this problem, because all palette state is lost during a mode change on Windows XP. This compatibility fix helps the application to track all palette changes and maintain them through mode changes.
PopulateDefaultHKCUSettings This compatibility fix populates HKEY_CURRENT_USER with the necessary default registry settings for the application. This will enable various applications that write these keys at install time to run for other users.
PreInitApplication This compatibility fix pre-initializes applications that would otherwise attempt to initialize them by copying files or registering DLLs during first run.
PreInstallDriver This compatibility fix preinstalls drivers for applications that would otherwise attempt to install/start them during first run.
PrinterIsolationAware If set, the process will opt into Printer Isolation Mode.
ProcessPerfData Some applications read the process performance data registry value to determine if they are the only instance of the application running at any one time. This value was locked down, so that processes that try to open it for write will fail. Handle the failure case and fake the value so that the application thinks it is the only instance.
ProfilesEnvStrings Some applications use the USERPROFILE environment variable to find the location of the user’s directory. This would limit the usage of the application to only the user that performed the install. This compatibility fix returns the ALLUSERSPROFILE instead, so that the application will be available for all users after install. Applies to: Windows 95, Windows 98
ProfilesGetFolderPath This compatibility fix applies to applications that use the shell32 SHGetFolderPath APIs to find the Start Menu, Programs, or Startup directories. This compatibility fix returns the common path so that the application will be available for all users after install. Applies to: Windows 95, Windows 98
ProfilesRegQueryValueEx Some applications attempt to directly read the "Shell Folders" values in HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER, which would return the folders for the user performing the install. This compatibility fix returns the common path so that the application will be available for all users of the computer after install. Applies to: Windows 95, Windows 98
PromoteDAM Opt legacy applications into DAM notifications.
PropagateProcessHistory This compatibility fix sets the __PROCESS_HISTORY environment variable enabling any child processes to look in their parent's directory for matching information. This is typically needed when a 32-bit unpacker creates a temporary executable that needs to have a compatibility fix applied to it.
ProtectedAdminCheck Some applications perform non-standard admin checks such as calling GetTokenInformation to retrieve TokenGroups then compare the group SID with S-1-5-32-544. This will generate false positive for Protected Admins since they have that SID, although deny-only. This shim is intended to fix such problems.
RecopyExeFromCD This compatibility fix accepts a command line that tells it to re-copy a file from the CD. Some applications truncate some NULL bytes from an executable image. This worked under Windows 9x because there was no image validation. However, Windows XP performs image validation on files and will fail if the image size changes.
RedirectBDE This compatibility fix redirects writes to c:\pdoxusrs.net to help fix legacy Borland Database Engine applications.
RedirectCRTTempFile This compatibility fix intercepts failing CRT calls that attempt to create a temporary file at the root of the volume and redirects them to a temporary file in the user's temp directory.
RedirectDBCSTempPath This compatibility fix redirects the DBCS temp path to the SBCS temp path. With a DBCS user name logon, the temp path contains a DBCS path. Some applications handle a DBCS temp path correctly.
RedirectDefaultAudioToCommunications This shim is to fix applications that request the default audio device but are better suited for the default communications device.
RedirectEXE This compatibility fix calls WinExec on the passed command line, and then terminates the caller process. The command line can contain any environment variables that need to be passed to the executable. If the command line starts with a '+', the app directory is added to the path. By default, the command line of the shimmed process is passed to the redirected child process. If the command line includes the option "-ParameterToDelete:", the listed parameter is filtered out of the redirected child's command line.
RedirectHKCUKeys The purpose of this shim is to duplicate the newly created HKCU keys to other users HKCU, namely HKUS{SID}, at the end of the process. Command line parameters are used to restrict the subtrees to detect the new key creation. This is a generic mitigation to the UAC Over-The-Shoulder installation that creates HKCU keys which are required by the app at runtime.
RedirectMP3Codec This compatibility fix is for applications that CoCreateInstance an old MP3 Codec directly and use it as a filter in a DirectShow graph. This is an unsupported way of getting at the filter. The fix intercepts the CoCreateInstance for the missing filter and redirects it to a supported one.
RedirectShortCut The purpose of this shim is to redirect all the shortcuts created by a set up according to the place where they are created. This is to take care of problems where a setup which runs elevated under Toby account in Vista places all the shortcuts with regards to the elevated users context. Here is what we do: For Start Menu: In case of Start Menu shortcuts, we create shortcuts and put it in shortcut of for all users (\ProgramData\Microsoft\Windows\Start Menu) For Desktop or Quick Launch: We find what all users are there in the box and place shortcut in each individual users desktop or quick launch.
RedirectWindowsDirToSystem32 Some applications may have difficulty adjusting to the differences in folder structure between Windows 9x and Windows XP. For applications that use the GetWindowsDirectory API call, this compatibility fix will intercept those calls and redirect them through the GetSystemDirectory API instead.
RegisterAppRestart This shim calls RegisterApplicationRestart so the app can restart after a user signs out and back in. The shim reference's COMMAND_LINE attribute can specify the command line arguments to use when registered. If the token "
RelaunchElevated This shim causes the process to which it is applied to try to relaunch itself as an elevated user. It is intended to be used in cases where it is difficult to target the parent process with the ElevateCreateProcess shim. An example is that it is difficult to apply ElevateCreateProcess to self-extracting archives because they can have their name mangled when downloaded by a web browser. The RelaunchElevated can instead be applied to the extracted executable that requires elevation.
RemoveBroadcastPostMessage This compatibility fix applies to applications that may not correctly handle broadcast messages to their window process. The compatibility fix will intercept and remove any such broadcast message.
RemoveDDEFlagFromShellExecuteEx Some applications call ShellExecute which in turn calls ShellExecuteEx. One of the flags in the SHELLEXECUTEINFO structure is SEE_MASK_FLAG_DDEWAIT. This flag gets set by ShellExecuteEx as a default whenever ShellExecute is called. When the flag gets passed, it can sometimes cause synchronization problems. This compatibility fix resolves the issue by removing the SEE_MASK_FLAG_DDEWAIT flag.
RemoveInvalidW2KWindowStyles This compatibility fix removes any invalid window styles from calls made to the CreateWindowEx API. Invalid window styles in this case refer to any window style not supported by Windows XP.
RemoveIpFromMsInfoCommandLine This compatibility fix provides a modified version of CreateProcess, which will remove IP from the MsInfo command line. This will cause MsInfo on Windows XP behave as it did on Windows NT 4 (with the option to have MsInfo print a blank page instead of showing system info).
RemoveNoBufferingFlagFromCreateFile This modified version of the kernel32!CreateFile* APIs prevents an application from using the FILE_FLAG_NO_BUFFERING flag if the application doesn't use it correctly.
RemoveOverlappedFlagFromCreateFile This modified version of the kernel32!CreateFile* APIs prevents an application from using the FILE_FLAG_OVERLAPPED flag if the application doesn't handle it correctly. This could perhaps be rolled into a layer shim: Win9x ignores this flag for disk types.
RemoveReadOnlyAttribute This compatibility fix will remove the Read-Only attribute from all directories. This may be helpful to applications that don’t expect the shell folders to be set to Read-Only.
ReorderWaveForCommunications Set the Multimedia APIs to reorder wave devices to have the preferred communication device as device 0.
RepairStringVersionResources Some applications contain corrupted version resources and attempt to read them when run. This compatibility fix hooks the GetFileVersionInfo function and repairs certain classes of string version resource corruption.
RestoreSystemCursors Some applications that use the SetSystemCursor() function to restore the system cursor may encounter problems in Windows 2000 or Windows XP. This compatibility fix resolves the problem so that the system cursors are restored correctly.
RunAsAdmin This compatibility fix marks this application as needing administrator privileges to run correctly. It will not run correctly in a standard user context.
RunAsHighest This compatibility fix marks this application to run in the most privileged security context available to the user. This means that it will run with standard user privileges for a standard user or with administrator privileges for an administrator.
RunAsInvoker This compatibility fix marks this application to run in the context of its parent, reducing its security exposure.
SearchPathInAppPaths This compatibility fix will intercept calls to the SearchPath API and modifies the command to also search the shell’s App Paths registry key.
SessionShim This compatibility shim was written to try and fix applications which fail when trying to interact with services running in different sessions. In LH, a user cannot log in as Session 0 (Global Session) as in XP. The apps which assumed to be running in Session 0 fail. It catches APIs which take terminal services name prefix(Global or Local) as there parameters. If there is a command line option given to the shim with object names specified, it tries to apply Global/Local prefix to the only specified object names, else it does to everyone.
SetEnvironmentVariable This compatibility fix enables the application to set specific environment variables at application startup. These variables are provided through a command line, and multiple environment variables in the list should be separated by a pipe (
SetProtocolHandler Register application as a protocol handler. The command line takes a series of 3 values, multiple Clients may be separated by the pipe
ShowWindowIE Shim which intercepts the ShowWindow API call and fixes the problem due to tabbed browsing architecture changes in IE. The window an application finds is not the top level window any more, but the child tab window. Caught the ShowWindow API which checks if the class and process name of the window is IE's tab window. And then calls the real ShowWindow on the top level parent window.
Shrinker This compatibility fix fixes problems with any application that uses the Shrinker resource compression library. This library hacks resource functions in ntdll and kernel32 and redirect calls into their own function routines. But Ntdll code has different opcodes in Windows XP. The program failed to find the opcode signature and decided to cancel WriteProcessMemory call to write their redirection. Because of this, the necessary decompression of program code and resources were not executed and caused access violation. Shrinker compatibility fix resolves this by providing necessary opcode signature so the app could write those redirection into ntdll.
SingleProcAffinity Set single processor affinity for apps that have multi-proc bugs.
SpecificInstaller This flag indicates a match against a specific executable that is an installer.
SpecificNonInstaller This flag indicates a match against a specific executable that is not an installer.
StackSwap Many APIs use much more stack space on NT than Win9x. This compatibility fix is command line driven and takes a list of APIs that will be hooked, making them use no stack. The format the command line is "MODULENAME!APINAME[:X]; MODULENAME!APINAME[:X] ..." where X is 0 : fill old stack with zeroes 1 : fill old stack with pointers 2 : fill old stack with pointers to pointers by default, no stack filling occurs.
SyncSystemAndSystem32 This compatibility fix takes a semi-colon delimited command line of filenames. At process termination, the DLL will extract each filename from the command line and make sure that the file exists in both the System directory and System32 (if it exists in either). Some older applications expect certain DLLs to be in System when under NT they belong in System32 (and vice versa).
TerminateExe This compatibility fix terminates an executable (.EXE) immediately upon launch.
TrimDisplayDeviceNames Trim the names of display devices returned by EnumDisplayDevices.
TrimVersionInfo This compatibility fix trims file and product version resource strings so that they are identical to the Win2000 structure.
UIPIEnableCustomMsgs This compatibility fix enables custom window messages to pass through to current process from lower desktop integrity levels. The list of messages is passed in the COMMAND_LINE as a space separated list of message strings, for example COMMAND_LINE = "Message1 Message2 Message3"
UIPIEnableStandardMsgs This compatibility fix enables standard window messages to pass through to current process from lower desktop integrity levels. The list of messages is passed in the COMMAND_LINE as a space separated list of integers, for example COMMAND_LINE = "100 234 1100"
UnMirrorImageList PictureIt 2001 checks if the system is localized then mirror the thumbnails.
UseWARPRendering If set, the process will opt into WARP Rendering if specific hardware is installed.
VirtualizeDeleteFile Virtualizes the DeleteFile calls that the application makes and hooks other File APIs to ensure the virtualization of the file deleted.
VirtualRegistry Hooks all the registry functions to allow virtual keys, redirection and expansion values.
WaveOutUsePreferredDevice Forces the application to use the WAVE_MAPPER device instead of device 0. It is only safe to apply this compatibility fix to applications that (incorrectly) attempt to open device 0 expecting to open the default device.
WerDisableReportException This shim will hook calls to RtlReportException and return Status_Not_Supported. This in effect will turn off the silent reporting of exceptions to WER including those reported by OLE
Win2000SP1VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2000 SP1 version credentials.
Win2000SP2VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2000 SP2 version credentials.
Win2000SP3VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2000 SP3 version credentials.
Win2000VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2000 version credentials.
Win2k3RTMVersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2003 RTM version credentials.
Win2k3SP1VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 2003 SP1 version credentials.
Win95VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 95 version credentials. Applications often check to ensure that they are running on a Win9x system, even though they will run OK on an NT based system.
Win98VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows 98 version credentials. Applications often check to ensure that they are running on a Win9x system, even though they will run OK on an NT based system.
WinExecRaceConditionFix This compatibility fix hooks WinExec if COMMAND_LINE == "nowait" calls CreateProcess without waiting for the created process If COMMAND_LINE is a number, it Sleep()s the process in hook initialization for that number of ms. Otherwise, it simply calls the standard WinExec
WinG32SysToSys32 Hooks GetModuleFileName and parses the return string. WinG32 will post a messagebox and fail if it finds that it is not installed in system32.
WinNT4SP5VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows NT 4.0 Service Pack 5 version credentials.
WinXPSP1VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows XP SP1 version credentials.
WinXPSP2VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows XP SP2 version credentials.
WinXPSP3VersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows XP SP3 version credentials.
WinXPVersionLie Hooks the GetVersion and GetVersionEx APIs so that they return Windows XP version credentials.
WOWCF_NOWAITFORINPUTIDLE Compatibility flag for 16 bit applications. This flag will prevent the application from waiting on a spawned process after calling LoadModule32. Without this flag applied the application will wait for the new process to idle before continuing with its own thread. This may appear to the user that the application is not responding.
WOWCF_USER_DDENOSYNC Compatibility flag for 16 bit applications. This flag prevents the application from syncing when sending DDE messages. This may cause unpredictable behavior in some applications.
WOWCF2_DELAYTIMEGETTIME Compatibility flag for 16 bit applications. This flag fixes divide by zero problems resulting from 2 consecutive timegettime call results being the same
WOWCF2_FIXLUNATRAYRECT Compatibility flag for 16 bit applications. This flag fixes window placement problems resulting from themes. Apps calculate wrong coordinates because uxtheme returns different window coordinates than classic
WOWCF2_HACKPROFILECALL Used to hack the various Profile API's (ie.GetProfileInt()). See mvdm\wow32\wkernel.c for command_line syntax.
WOWCF2_HACKWINFLAGS Compatibility flag for 16 bit applications. This flag version lies to the application by turning off a winflag bit specifying that the application is running on a WindowsNT OS. It does not change the major or minor version returned by the OS.
WOWCF2_SETFOREGROUND Compatibility flag for 16 bit applications. This flag attempts to give the focus to the application. This flag should normally be used in conjunction with the GiveUpForeground flag applied to the application owning the blocking window.
WOWCF2_SYNCSYSFILE Compatibility flag for 16 bit applications. This flag redirects the applications file open calls from %windir%\system to %windir%\system32.
WOWCF2_USEMINIMALENVIRONMENT Compatibility flag for 16 bit applications. This flag tells WOW to strip out most of the NT specific environment vars from the environment that we pass to the app.
WOWCFEX_DISPMODE256 Compatibility flag for 16 bit applications. This flag forces the display mode to 256 colors. It does not change the screen resolution.
WOWCFEX_DIVIDEOVERFLOWPATCH Internal: 16-bit compatibility flag that allows us to trap divide overflow exceptions and change the dividend to a happier value. These are usually manifested by "Divide by Zero" popup's. #103459, #440943 et. al.
WOWCFEX_EATDEVMODEMSG Compatibility flag for 16 bit applications. This flag will prevent the WM_DEVMODECHANGE message from being sent to the application. Some applications are unable to properly handle this message.
WOWCFEX_FORCEINCDPMI Compatibility flag for 16 bit applications. This forces DPMI memory allocations to use ever increasing linear addresses. This may prevent the ntvdm from hitting a GPF.
WOWCFEX_PLATFORMVERSIONLIE Compatibility flag for 16 bit applications. This flag will version lie to the application by changing the parameters in the OSVERSIONINFO structure passed to GetVersionEx(). The changes are separated by a semi-colon(;). Do not use quotes around string parameters. Command line: [dwVersionInfoSize];[dwMajorVersion];[dwMinorVersion];[dwBuildNumber];[dwPlatformID];[szCSDVersion]
WOWCFEX_USEWINHELP32 Compatibility flag for 16 bit applications. This flag forces the application to use winhlp32 instead of winhelp.
WOWCFEX_WIN31VERSIONLIE Compatibility flag for 16 bit applications. This flag version lies to an application it is running on win3.1
WOWCFEX_ZEROINITMEMORY Compatibility flag for 16 bit applications. This flag fixes problems where app uses uninitialized allocated memory
WRPDllRegister Skips registering DLLs specified in the command line or system shipped DLLs.
WRPMitigation AccessCheck return success on WRP protected files
WRPRegDeleteKey Fakes deletion of WRP protected keys