Windows2003-3790/termsrv/newclient/clshell/sh.h
2020-09-30 16:53:55 +02:00

309 lines
10 KiB
C++

//SH.h
//Header for SH (client Shell Utilities)
//
#ifndef _SH_H_
#define _SH_H_
#include "wuiids.h"
#include "autil.h"
#define DEFAULT_DESKTOP_WIDTH 800
#define DEFAULT_DESKTOP_HEIGHT 600
#define SH_MAX_DOMAIN_LENGTH 52
#define SH_MAX_USERNAME_LENGTH 512
#define SH_MAX_PASSWORD_LENGTH 256
#define SH_SALT_LENGTH 20
#define SH_FILENAME_MAX_LENGTH 15
#define SH_MAX_WORKINGDIR_LENGTH 512
#define SH_MAX_ALTERNATESHELL_LENGTH 512
#define SH_MAX_ADDRESS_LENGTH 256
#define SH_REGSESSION_MAX_LENGTH 32
#define SH_MAX_SUBKEY 265
#define SH_NUM_SERVER_MRU 10
#define SH_DEFAULT_REG_SESSION TEXT("Default")
#define SH_WINDOW_POSITION_STR_LEN 256
#define SH_FRAME_TITLE_RESOURCE_MAX_LENGTH 256
#define SH_DISCONNECT_RESOURCE_MAX_LENGTH 1024
#define SH_BUILDNUMBER_STRING_MAX_LENGTH 256
#define SH_VERSION_STRING_MAX_LENGTH 256
#define SH_DISPLAY_STRING_MAX_LENGTH 256
#define SH_INTEGER_STRING_MAX_LENGTH 10
#define SH_SHORT_STRING_MAX_LENGTH 32
#define UI_HELP_SERVERNAME_CONTEXT 103
#ifdef DC_DEBUG
#define SH_NUMBER_STRING_MAX_LENGTH ( 18 * sizeof (TCHAR) )
#endif /* DC_DEBUG */
#define TS_CONTROL_DLLNAME TEXT("mstscax.dll")
extern DCUINT clientResSizeTable[UI_NUMBER_DESKTOP_SIZE_IDS][2];
extern PDCTCHAR clientResSize[UI_NUMBER_DESKTOP_SIZE_IDS];
#define REMOTEDESKTOPFOLDER_REGKEY TEXT("RemoteDesktopFolder")
#ifdef OS_WINCE
#define PRINTER_APPLET_NAME _T("\\windows\\wbtprncpl.dll")
#endif
// Screen mode constants
#define UI_WINDOWED 1
#define UI_FULLSCREEN 2
#define SH_DEFAULT_BPP 8
#define SH_DEFAULT_NUMCOLS 256
#define SH_NUMBER_FIELDS_TO_READ 6
#define SH_WINDOW_POSITION_INI_FORMAT _T("%u,%u,%d,%d,%d,%d")
#define TRANSPORT_TCP 1
#if defined(OS_WIN32) && !defined(OS_WINCE)
#define SH_ICON_FILE _T("Icon File")
#define SH_ICON_INDEX _T("Icon Index")
#endif
#ifdef OS_WINCE
#define PEGHELP_EXE _T("\\Windows\\peghelp.exe")
#define TSC_HELP_FILE _T("\\Windows\\termservclient.htm")
#define HH_DISPLAY_TOPIC 0x0000
#endif
typedef struct tagSH_DATA
{
DCTCHAR regSession[MAX_PATH];
DCBOOL fRegDefault;
DCUINT connectedStringID;
DCUINT disconnectedStringID;
#if defined(OS_WIN32) && !defined(OS_WINCE)
DCTCHAR szIconFile[MAX_PATH];
DCINT iconIndex;
#endif
DCBOOL fAutoLogon;
DCBOOL fClearPersistBitmapCache;
DCBOOL autoConnectEnabled;
DCBOOL fStartFullScreen;
DCTCHAR szServer[SH_MAX_ADDRESS_LENGTH];
// Server specified from the command line
DCTCHAR szCommandLineServer[SH_MAX_ADDRESS_LENGTH];
DCUINT desktopWidth;
DCUINT desktopHeight;
TCHAR szCLXCmdLine[256];
DCINT cipherStrength;
DCTCHAR szControlVer[SH_DISPLAY_STRING_MAX_LENGTH];
// Command line settings
DCBOOL fCommandStartFullScreen;
DCUINT commandLineWidth;
DCUINT commandLineHeight;
} SH_DATA, *PSH_DATA;
typedef HWND (WINAPI* PFNHtmlHelp)(HWND hwndCaller,
LPCSTR pszFile,
UINT uCommand,
DWORD_PTR dwData);
typedef HRESULT (*PFNEnableThemeDialogTexture)(HWND hwnd,
BOOL fEnable);
typedef struct tagCTL_ENABLE
{
UINT ctlID;
BOOL fPrevDisabled;
} CTL_ENABLE, *PCTL_ENABLE;
#ifndef OS_WINCE
//
// Mstsc's private copy of StrRetToStrW because
// this is not availalbe on less than shlwapi.dll v5.00
//
HRESULT XSHStrDupA(LPCSTR psz, WCHAR **ppwsz);
HRESULT XStrRetToStrW(STRRET *psr, LPCITEMIDLIST pidl, WCHAR **ppsz);
#endif
//
// CMD Line parsing error codes
//
#define SH_PARSECMD_OK 1
#define SH_PARSECMD_ERR_INVALID_CMD_LINE (-1)
#define SH_PARSECMD_ERR_INVALID_CONNECTION_PARAM (-2)
class CSH
{
public:
//
// Public members
//
CSH();
~CSH();
DCBOOL SH_Init(HINSTANCE hInstance);
DWORD SH_ParseCmdParam(LPTSTR lpszCmdParam);
DCBOOL SH_ValidateParams(CTscSettings* pTscSet);
DCBOOL SH_ReadControlVer(IMsRdpClient* pTsControl);
DCVOID SH_ApplyCmdLineSettings(CTscSettings* pTscSet, HWND hwnd);
DCBOOL SH_IsScreenResSpecifiedOnCmdLine();
DCBOOL SH_CanonicalizeServerName(PDCTCHAR szServer);
static void InitServerAutoCmplCombo(CTscSettings* pTscSet, HWND hwndSrvCombo);
BOOL SH_GetCmdFileForEdit() {return _fFileForEdit;}
BOOL SH_GetCmdFileForConnect() {return _fFileForConnect;}
LPTSTR SH_GetCmdLnFileName() {return _szFileName;}
BOOL SH_GetPathToDefaultFile(LPTSTR szPath, UINT nLen);
BOOL SH_GetRemoteDesktopFolderPath(LPTSTR szPath, UINT nLen);
#ifndef OS_WINCE
BOOL SH_GetMyDocumentsDisplayName(LPTSTR szName, UINT nLen);
#endif
BOOL SH_GetCmdMigrate() {return _fMigrateOnly;}
BOOL SH_GetCmdConnectToConsole(){return _fConnectToConsole;}
VOID SH_SetCmdConnectToConsole(BOOL bCon) {_fConnectToConsole=bCon;}
static BOOL SH_GetPluginDllList(LPTSTR szSession, LPTSTR szPlugins, size_t cchSzPlugins);
static BOOL HandleServerComboChange(HWND hwndCombo, HWND hwndDlg,
HINSTANCE hInst,
LPTSTR szPrevText);
BOOL SH_AutoFillBlankSettings(CTscSettings* pTsc);
BOOL SH_FileExists(LPTSTR szFileName);
BOOL SH_TSSettingsRegKeyExists(LPTSTR szKeyName);
BOOL SH_DisplayErrorBox(HWND hwndParent, INT errStringID);
BOOL SH_DisplayMsgBox(HWND hwndParent, INT errStringID, INT flags);
BOOL SH_DisplayErrorBox(HWND hwndParent, INT errStringID, LPTSTR szParam);
static BOOL SH_GetNameFromPath(LPTSTR szPath, LPTSTR szName, UINT nameLen);
HWND SH_DisplayClientHelp(HWND hwndOwner, INT helpCommand);
BOOL SH_Cleanup();
static BOOL SH_CreateDirectory(LPTSTR szPath);
static BOOL SH_CreateHiddenFile(LPCTSTR szPath);
static UINT SH_GetScreenBpp();
static BOOL SH_IsRunningOn9x();
//
// Property accessers
//
LPTSTR GetCmdLineFileName();
DCINT GetCipherStrength() {return _SH.cipherStrength;}
PDCTCHAR GetControlVersionString() {return _SH.szControlVer;}
VOID SetAutoConnect(DCBOOL bAutoCon) {_SH.autoConnectEnabled = bAutoCon;}
DCBOOL GetAutoConnect() {return _SH.autoConnectEnabled;}
DCVOID SetServer(PDCTCHAR szServer);
PDCTCHAR GetServer() {return _SH.szServer;}
DCUINT GetCmdLineDesktopWidth() {return _SH.commandLineWidth;}
DCUINT GetCmdLineDesktopHeight() {return _SH.commandLineHeight;}
DCVOID SetStartFullScreen(DCBOOL b) {_SH.fStartFullScreen = b;}
DCBOOL GetStartFullScreen() {return _SH.fStartFullScreen;}
DCBOOL GetCmdLineStartFullScreen(){return _SH.fCommandStartFullScreen;}
LPTSTR GetCmdLineServer() {return _SH.szCommandLineServer;}
LPTSTR GetClxCmdLine() {return _SH.szCLXCmdLine;}
DCBOOL GetUsingDefaultRegSession() {return _SH.fRegDefault;}
PDCTCHAR GetRegSession() {return _SH.regSession;}
DCUINT GetConnectedStringID() {return _SH.connectedStringID;}
HICON GetAppIcon();
DCBOOL GetAutoLogon() {return _SH.fAutoLogon;}
DCVOID SetAutoLogon(DCBOOL b) {_SH.fAutoLogon = b;}
static VOID EnableControls(HWND hwndDlg, PUINT pCtls,
const UINT numCtls, BOOL fEnable);
static VOID EnableControls(HWND hwndDlg, PCTL_ENABLE pCtls,
const UINT numCtls, BOOL fEnable);
BOOL GetRegSessionSpecified() {return _fRegSessionSpecified;}
VOID SetRegSessionSpecified(BOOL b) {_fRegSessionSpecified = b;}
// Crypto helpter fns
static BOOL IsCryptoAPIPresent();
static BOOL DataProtect(PDATA_BLOB pInData, PDATA_BLOB pOutData);
static BOOL DataUnprotect(PDATA_BLOB pInData, PDATA_BLOB pOutData);
// Multimon helpers
static BOOL GetLargestMonitorRect(LPRECT prc);
static BOOL MonitorRectFromHwnd(HWND hwnd, LPRECT prc);
static BOOL MonitorRectFromNearestRect(LPRECT prcNear, LPRECT prcMonitor);
static LPTSTR FormatMessageVArgs(LPCTSTR pcszFormat, ...);
static LPTSTR FormatMessageVAList(LPCTSTR pcszFormat, va_list *argList);
HRESULT SH_ThemeDialogWindow(HWND hwnd, DWORD dwFlags);
private:
//
// Internal member functions
//
PDCTCHAR SHGetSwitch(PDCTCHAR lpszCmdParam);
LPTSTR SHGetSession(LPTSTR lpszCmdParam);
LPTSTR SHGetFileName(LPTSTR lpszCmdParam);
LPTSTR SHGetServer(LPTSTR lpszCmdParam);
UINT CLX_GetSwitch_CLXCMDLINE(IN LPTSTR lpszCmdParam);
BOOL ParseFileOrRegConnectionParam();
LPTSTR SHGetCacheToClear(LPTSTR lpszCmdParam);
DCVOID SHUpdateMRUList(PDCTCHAR pBuffer);
LPTSTR SHGetCmdLineInt(LPTSTR lpszCmdParam, PDCUINT pInt);
LPTSTR SHGetCmdLineString(LPTSTR lpszCmdParam, LPTSTR lpszDest,
DCINT cbDestLen);
DCBOOL SHValidateParsedCmdParam();
public:
//
// Public data members
//
DCTCHAR _fullFrameTitleStr[SH_FRAME_TITLE_RESOURCE_MAX_LENGTH +
SH_REGSESSION_MAX_LENGTH];
DCTCHAR _frameTitleStr[SH_FRAME_TITLE_RESOURCE_MAX_LENGTH];
private:
//
// Private data members
//
SH_DATA _SH;
CUT _Ut;
HICON _hAppIcon;
TCHAR _szFileName[MAX_PATH];
static TCHAR _szBrowseForMore[SH_DISPLAY_STRING_MAX_LENGTH];
BOOL _fFileForEdit;
BOOL _fFileForConnect;
BOOL _fRegSessionSpecified;
TCHAR _szAppName[MAX_PATH];
BOOL _fMigrateOnly;
HINSTANCE _hInstance;
BOOL _fConnectToConsole;
//
// Handle to HHCTL.OCX for HTML Help
//
HMODULE _hModHHCTRL;
PFNHtmlHelp _pFnHtmlHelp;
HMODULE _hUxTheme;
PFNEnableThemeDialogTexture _pFnEnableThemeDialogTexture;
BOOL _fFailedToGetThemeDll;
};
#endif // _SH_H_