/*++ Copyright (c) 1998 Microsoft Corporation Module Name: tsappcmp.h Abstract: Terminal server application compatibility support Author: Revision History: --*/ #ifndef _INC_TSAPPCMP #define _INC_TSAPPCMP // @@BEGIN_DDKSPLIT #define TERMSRV_VALUE \ L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Compatibility\\Registry Values" #define TERMSRV_INSTALL \ L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install" #define TERMSRV_USERREGISTRY \ L"\\Registry\\User" #define TERMSRV_MACHINEREGISTRY \ L"\\Registry\\Machine" #define TERMSRV_CLASSES \ L"\\Registry\\Machine\\Software\\Classes" #define TERMSRV_INSTALLCLASSES \ L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install\\Software\\Classes" #define TERMSRV_CLASSES_SIZE sizeof(WCHAR)*(sizeof(TERMSRV_INSTALLCLASSES)+1) #define TERMSRV_SOFTWARECLASSES \ L"\\Software\\Classes" #define TERMSRV_COPYONCEFLAG \ L"TermSrvCopyKeyOnce" // // Compat flags for the register command, used for import table patching at run time. // #define TERMSRV_COMPAT_DONT_PATCH_IN_LOAD_LIBS 0x00000001 // turn off the new Whistler defaul behavior which patches all // load libs to go thru our redirected load lib first. // // The images marked as GLOBAL would still patch in the loadlibs // regardless of this flag #define TERMSRV_COMPAT_IAT_FLAGS L"IAT" // flags used by the register module which patches // the import-address-table // So far, the following flags are defines/used: // TERMSRV_COMPAT_DONT_PATCH_IN_LOAD_LIBS // // // Application compatibility flags // #define TERMSRV_COMPAT_DOS 0x00000001 #define TERMSRV_COMPAT_OS2 0x00000002 #define TERMSRV_COMPAT_WIN16 0x00000004 #define TERMSRV_COMPAT_WIN32 0x00000008 #define TERMSRV_COMPAT_ALL 0x0000000F #define TERMSRV_COMPAT_USERNAME 0x00000010 // return username for computername #define TERMSRV_COMPAT_CTXBLDNUM 0x00000020 // return Terminal Server build number #define TERMSRV_COMPAT_INISYNC 0x00000040 // sync user ini file to system #define TERMSRV_COMPAT_ININOSUB 0x00000080 // Don't subst. user dir for sys dir #define TERMSRV_COMPAT_NOREGMAP 0x00000100 // Disable registry mapping for app #define TERMSRV_COMPAT_PEROBJMAP 0x00000200 // Per object user/system global mapping #define TERMSRV_COMPAT_SYSWINDIR 0x00000400 // return system windows directory #define TERMSRV_COMPAT_PHYSMEMLIM \ 0x00000800 // Limit the reported physical memory info #define TERMSRV_COMPAT_LOGOBJCREATE \ 0x00001000 // Log object creation to file #define TERMSRV_COMPAT_SYSREGMAP 0x00002000 // Let system processes take advantage of // registry mapping. #define TERMSRV_COMPAT_PERUSERWINDIR \ 0x00004000 // Log object creation to file #define TERMSRV_COMPAT_WAIT_USING_JOB_OBJECTS \ 0x00008000 // Use kernelJobObject for tracking // execution completion, since some apps, // such as VS60WIX.EXE self spawn and // parent dies immediately. #define TERMSRV_COMPAT_NO_ENABLE_ACCESS_FLAG_MODIFICATION 0x00010000 #define TERMSRV_COMPAT_NO_PER_USER_CLASSES_REDIRECTION 0x00020000 #define TERMSRV_COMPAT_KBDPOLL_NOSLEEP \ 0x20000000 // Don't put app to sleep on unsuccessful // keyboard polling (WIN16 only) #define TERMSRV_COMPAT_APP NTAPI_COMPAT_APPS_REG_PREFIX //Registry extension flags #define TERMSRV_SOFTWARE \ L"\\Registry\\Machine\\Software" #define TERMSRV_BASE \ L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server" #define TERMSRV_ENABLE_ACCESS_FLAG_MODIFICATION 0x00000001 #define TERMSRV_ENABLE_PER_USER_CLASSES_REDIRECTION 0x00000002 void GetRegistryExtensionFlags(); extern DWORD gdwRegistryExtensionFlags; // // Clipboard compatibility flags // #define TERMSRV_COMPAT_CLIPBRD_METAFILE 0x00000008 typedef enum _TERMSRV_COMPATIBILITY_CLASS { CompatibilityApp = 1, CompatibilityIniFile, CompatibilityRegEntry } TERMSRV_COMPATIBILITY_CLASS, *PTERMSRV_COMPATIBILITY_CLASS; #define IsTerminalServer() (BOOLEAN)(USER_SHARED_DATA->SuiteMask & (1 << TerminalServer)) void InitializeTermsrvFpns(void); //Kernel32 API's typedef PWCHAR (*PTERMSRVFORMATOBJECTNAME) ( IN LPCWSTR SrcObjectName ); extern PTERMSRVFORMATOBJECTNAME gpTermsrvFormatObjectName; typedef DWORD (*PTERMSRVGETCOMPUTERNAME) ( OUT LPWSTR lpBuffer, OUT LPDWORD nSize ); extern PTERMSRVGETCOMPUTERNAME gpTermsrvGetComputerName; typedef void (*PTERMSRVADJUSTPHYMEMLIMITS) ( IN OUT PULONG_PTR TotalPhys, IN OUT PULONG_PTR AvailPhys, IN DWORD SysPageSize ); extern PTERMSRVADJUSTPHYMEMLIMITS gpTermsrvAdjustPhyMemLimits; typedef UINT (*PTERMSRVGETWINDOWSDIRECTORYA) ( OUT LPSTR lpBuffer, OUT UINT uSize ); extern PTERMSRVGETWINDOWSDIRECTORYA gpTermsrvGetWindowsDirectoryA; typedef UINT (*PTERMSRVGETWINDOWSDIRECTORYW) ( OUT LPWSTR lpBuffer, OUT UINT uSize ); extern PTERMSRVGETWINDOWSDIRECTORYW gpTermsrvGetWindowsDirectoryW; typedef NTSTATUS (* PTERMSRVCONVERTSYSROOTTOUSERDIR)( OUT PUNICODE_STRING pFQPath, IN PUNICODE_STRING BaseWindowsDirectory ); extern PTERMSRVCONVERTSYSROOTTOUSERDIR gpTermsrvConvertSysRootToUserDir; typedef NTSTATUS (*PTERMSRVBUILDINIFILENAME)( OUT PUNICODE_STRING pFQName, IN PUNICODE_STRING pBaseFileName ); extern PTERMSRVBUILDINIFILENAME gpTermsrvBuildIniFileName; typedef VOID (*PTERMSRVCORINIFILE)( PUNICODE_STRING pUserFullPath ); extern PTERMSRVCORINIFILE gpTermsrvCORIniFile; typedef BOOL (* PTERMSRVCREATEREGENTRY)(IN HANDLE hKey, IN POBJECT_ATTRIBUTES pObjAttr, IN ULONG TitleIndex, IN PUNICODE_STRING pUniClass OPTIONAL, IN ULONG ulCreateOpt); extern PTERMSRVCREATEREGENTRY gpfnTermsrvCreateRegEntry; typedef BOOL (*PTERMSRVOPENREGENTRY)(OUT PHANDLE pUserhKey, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES pUserObjectAttr); extern PTERMSRVOPENREGENTRY gpfnTermsrvOpenRegEntry; typedef BOOL (*PTERMSRVSETVALUEKEY)(HANDLE hKey, PUNICODE_STRING ValueName, ULONG TitleIndex, ULONG Type, PVOID Data, ULONG DataSize); extern PTERMSRVSETVALUEKEY gpfnTermsrvSetValueKey; typedef BOOL (* PTERMSRVDELETEKEY)(HANDLE hKey); extern PTERMSRVDELETEKEY gpfnTermsrvDeleteKey; typedef BOOL (*PTERMSRVDELETEVALUE)(HANDLE hKey, PUNICODE_STRING pUniValue); extern PTERMSRVDELETEVALUE gpfnTermsrvDeleteValue; typedef BOOL (* PTERMSRVRESTOREKEY)(IN HANDLE hKey, IN HANDLE hFile, IN ULONG Flags); extern PTERMSRVRESTOREKEY gpfnTermsrvRestoreKey; typedef BOOL (* PTERMSRVSETKEYSECURITY)(IN HANDLE hKey, IN SECURITY_INFORMATION SecInfo, IN PSECURITY_DESCRIPTOR pSecDesc); extern PTERMSRVSETKEYSECURITY gpfnTermsrvSetKeySecurity; typedef BOOL (* PTERMSRVOPENUSERCLASSES)(IN ACCESS_MASK DesiredAccess, OUT PHANDLE pUserhKey); extern PTERMSRVOPENUSERCLASSES gpfnTermsrvOpenUserClasses; typedef NTSTATUS ( * PTERMSRVGETPRESETVALUE)( IN HANDLE hKey, IN PUNICODE_STRING pValueName, IN ULONG Type, OUT PVOID *Data ); extern PTERMSRVGETPRESETVALUE gpfnTermsrvGetPreSetValue; typedef int (*PTERMSRVUPDATEALLUSERMENU)(int RunMode); extern PTERMSRVUPDATEALLUSERMENU gpTermsrvUpdateAllUserMenu; typedef ULONG ( *PGETTERMSRCOMPATFLAGS)(LPWSTR, LPDWORD, TERMSRV_COMPATIBILITY_CLASS); extern PGETTERMSRCOMPATFLAGS gpGetTermsrCompatFlags; typedef BOOL (*PTERMSRVBUILDSYSINIPATH) ( PUNICODE_STRING pIniPath, PUNICODE_STRING pSysPath, PUNICODE_STRING pUserPath ); extern PTERMSRVBUILDSYSINIPATH gpTermsrvBuildSysIniPath; typedef BOOL (* PTERMSRVCOPYINIFILE)( PUNICODE_STRING pSysFullPath, PUNICODE_STRING pUserBasePath, PUNICODE_STRING pUserFullPath ); extern PTERMSRVCOPYINIFILE gpTermsrvCopyIniFile; typedef NTSTATUS (* PTERMSRVGETSTRING)( HANDLE SrcHandle, PCHAR *ppStringPtr, PULONG pStringSize, PCHAR pIOBuf, ULONG IOBufSize, PULONG pIOBufIndex, PULONG pIOBufFillSize ); extern PTERMSRVGETSTRING gpTermsrvGetString; typedef BOOL (*PTERMSRVLOGINSTALLINIFILE)(PUNICODE_STRING NtFileName); extern PTERMSRVLOGINSTALLINIFILE gpTermsrvLogInstallIniFile; // @@END_DDKSPLIT #ifdef __cplusplus extern "C" { #endif WINBASEAPI BOOL WINAPI TermsrvAppInstallMode( VOID ); WINBASEAPI BOOL WINAPI SetTermsrvAppInstallMode( BOOL bState ); #ifdef __cplusplus } #endif #endif