|
|
//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_
|