|
|
/*++
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
|