CTX108614 - Time Zone Redirection and Legacy Applications This document was published at: http://support.citrix.com/article/CTX108614 Document ID: CTX108614, Created on: Jan 18, 2006, Updated: Jan 19, 2006 Products: Citrix Presentation Server 4.0 for Microsoft Windows 2003, Citrix Presentation Server 4.0 for Microsoft Windows 2000, Citrix MetaFrame XP 1.0 for Microsoft Windows 2003, Citrix MetaFrame XP 1.0 for Microsoft Windows 2000, Citrix MetaFrame Presentation Server 3.0 for Microsoft Windows 2003, Citrix MetaFrame Presentation Server 3.0 for Microsoft Windows 2000 Symptoms The Time Zone Redirection feature in MetaFrame XP 1.0, MetaFrame Presentation Server 3.0, and Citrix Presentation Server 4.0 may not work for certain applications that do not load User32.dll. Cause The current implementation of the MetaFrame Time Zone redirection feature is based on Microsoft?s Windows Hooking capabilities. In an ICA session, certain calls made by an application process to the Windows operating system to retrieve Time and Time Zone information are intercepted and answered by the MetaFrame server?s Time Zone components. In order for these components to work, an application must load the Windows User32.dll file. This DLL must be loaded, in order to enumerate the following registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows One of the values in this registry key is: AppInit_DLLs This value needs to be read in order to load the core MetaFrame hooking file, mfaphook.dll, into the process space of an application process. This then allows other components to be loaded that provide MetaFrame specific functionality, such as Time Zone Redirection. For more information on mfaphook.dll, refer to CTX107824 ? Citrix API Hooks (mfaphook.dll) Explained and Enumerated. Resolution The following suggestion is more applicable to programs that are not GUI based, written in C/C++, and probably written some time ago. Whereas most GUI based applications will automatically load User32.dll. Since the challenge is to get the application process to load User32.dll, an easy way would be to call one of the Exported functions of this DLL ? for example GetTopWindow(NULL); Another method would be to actually use the Windows API LoadLibraryEx(), and load the DLL. More Information CTX303498 ? Troubleshooting Client Time Zone Issues In MetaFrame XP. Jim Kenzig CEO The Kenzig Group http://www.kenzig.com Sponsorships Available! Blog: http://www.techblink.com Terminal Services Downloads: http://www.thinhelp.com Windows Vista: http://www.VistaPop.com Virtualization: http://www.virtualize-it.com Games: http://www.stressedpuppy.com