Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

308 lines
10 KiB

  1. //SH.h
  2. //Header for SH (client Shell Utilities)
  3. //
  4. #ifndef _SH_H_
  5. #define _SH_H_
  6. #include "wuiids.h"
  7. #include "autil.h"
  8. #define DEFAULT_DESKTOP_WIDTH 800
  9. #define DEFAULT_DESKTOP_HEIGHT 600
  10. #define SH_MAX_DOMAIN_LENGTH 52
  11. #define SH_MAX_USERNAME_LENGTH 512
  12. #define SH_MAX_PASSWORD_LENGTH 256
  13. #define SH_SALT_LENGTH 20
  14. #define SH_FILENAME_MAX_LENGTH 15
  15. #define SH_MAX_WORKINGDIR_LENGTH 512
  16. #define SH_MAX_ALTERNATESHELL_LENGTH 512
  17. #define SH_MAX_ADDRESS_LENGTH 256
  18. #define SH_REGSESSION_MAX_LENGTH 32
  19. #define SH_MAX_SUBKEY 265
  20. #define SH_NUM_SERVER_MRU 10
  21. #define SH_DEFAULT_REG_SESSION TEXT("Default")
  22. #define SH_WINDOW_POSITION_STR_LEN 256
  23. #define SH_FRAME_TITLE_RESOURCE_MAX_LENGTH 256
  24. #define SH_DISCONNECT_RESOURCE_MAX_LENGTH 1024
  25. #define SH_BUILDNUMBER_STRING_MAX_LENGTH 256
  26. #define SH_VERSION_STRING_MAX_LENGTH 256
  27. #define SH_DISPLAY_STRING_MAX_LENGTH 256
  28. #define SH_INTEGER_STRING_MAX_LENGTH 10
  29. #define SH_SHORT_STRING_MAX_LENGTH 32
  30. #define UI_HELP_SERVERNAME_CONTEXT 103
  31. #ifdef DC_DEBUG
  32. #define SH_NUMBER_STRING_MAX_LENGTH ( 18 * sizeof (TCHAR) )
  33. #endif /* DC_DEBUG */
  34. #define TS_CONTROL_DLLNAME TEXT("mstscax.dll")
  35. extern DCUINT clientResSizeTable[UI_NUMBER_DESKTOP_SIZE_IDS][2];
  36. extern PDCTCHAR clientResSize[UI_NUMBER_DESKTOP_SIZE_IDS];
  37. #define REMOTEDESKTOPFOLDER_REGKEY TEXT("RemoteDesktopFolder")
  38. #ifdef OS_WINCE
  39. #define PRINTER_APPLET_NAME _T("\\windows\\wbtprncpl.dll")
  40. #endif
  41. // Screen mode constants
  42. #define UI_WINDOWED 1
  43. #define UI_FULLSCREEN 2
  44. #define SH_DEFAULT_BPP 8
  45. #define SH_DEFAULT_NUMCOLS 256
  46. #define SH_NUMBER_FIELDS_TO_READ 6
  47. #define SH_WINDOW_POSITION_INI_FORMAT _T("%u,%u,%d,%d,%d,%d")
  48. #define TRANSPORT_TCP 1
  49. #if defined(OS_WIN32) && !defined(OS_WINCE)
  50. #define SH_ICON_FILE _T("Icon File")
  51. #define SH_ICON_INDEX _T("Icon Index")
  52. #endif
  53. #ifdef OS_WINCE
  54. #define PEGHELP_EXE _T("\\Windows\\peghelp.exe")
  55. #define TSC_HELP_FILE _T("\\Windows\\termservclient.htm")
  56. #define HH_DISPLAY_TOPIC 0x0000
  57. #endif
  58. typedef struct tagSH_DATA
  59. {
  60. DCTCHAR regSession[MAX_PATH];
  61. DCBOOL fRegDefault;
  62. DCUINT connectedStringID;
  63. DCUINT disconnectedStringID;
  64. #if defined(OS_WIN32) && !defined(OS_WINCE)
  65. DCTCHAR szIconFile[MAX_PATH];
  66. DCINT iconIndex;
  67. #endif
  68. DCBOOL fAutoLogon;
  69. DCBOOL fClearPersistBitmapCache;
  70. DCBOOL autoConnectEnabled;
  71. DCBOOL fStartFullScreen;
  72. DCTCHAR szServer[SH_MAX_ADDRESS_LENGTH];
  73. // Server specified from the command line
  74. DCTCHAR szCommandLineServer[SH_MAX_ADDRESS_LENGTH];
  75. DCUINT desktopWidth;
  76. DCUINT desktopHeight;
  77. TCHAR szCLXCmdLine[256];
  78. DCINT cipherStrength;
  79. DCTCHAR szControlVer[SH_DISPLAY_STRING_MAX_LENGTH];
  80. // Command line settings
  81. DCBOOL fCommandStartFullScreen;
  82. DCUINT commandLineWidth;
  83. DCUINT commandLineHeight;
  84. } SH_DATA, *PSH_DATA;
  85. typedef HWND (WINAPI* PFNHtmlHelp)(HWND hwndCaller,
  86. LPCSTR pszFile,
  87. UINT uCommand,
  88. DWORD_PTR dwData);
  89. typedef HRESULT (*PFNEnableThemeDialogTexture)(HWND hwnd,
  90. BOOL fEnable);
  91. typedef struct tagCTL_ENABLE
  92. {
  93. UINT ctlID;
  94. BOOL fPrevDisabled;
  95. } CTL_ENABLE, *PCTL_ENABLE;
  96. #ifndef OS_WINCE
  97. //
  98. // Mstsc's private copy of StrRetToStrW because
  99. // this is not availalbe on less than shlwapi.dll v5.00
  100. //
  101. HRESULT XSHStrDupA(LPCSTR psz, WCHAR **ppwsz);
  102. HRESULT XStrRetToStrW(STRRET *psr, LPCITEMIDLIST pidl, WCHAR **ppsz);
  103. #endif
  104. //
  105. // CMD Line parsing error codes
  106. //
  107. #define SH_PARSECMD_OK 1
  108. #define SH_PARSECMD_ERR_INVALID_CMD_LINE (-1)
  109. #define SH_PARSECMD_ERR_INVALID_CONNECTION_PARAM (-2)
  110. class CSH
  111. {
  112. public:
  113. //
  114. // Public members
  115. //
  116. CSH();
  117. ~CSH();
  118. DCBOOL SH_Init(HINSTANCE hInstance);
  119. DWORD SH_ParseCmdParam(LPTSTR lpszCmdParam);
  120. DCBOOL SH_ValidateParams(CTscSettings* pTscSet);
  121. DCBOOL SH_ReadControlVer(IMsRdpClient* pTsControl);
  122. DCVOID SH_ApplyCmdLineSettings(CTscSettings* pTscSet, HWND hwnd);
  123. DCBOOL SH_IsScreenResSpecifiedOnCmdLine();
  124. DCBOOL SH_CanonicalizeServerName(PDCTCHAR szServer);
  125. static void InitServerAutoCmplCombo(CTscSettings* pTscSet, HWND hwndSrvCombo);
  126. BOOL SH_GetCmdFileForEdit() {return _fFileForEdit;}
  127. BOOL SH_GetCmdFileForConnect() {return _fFileForConnect;}
  128. LPTSTR SH_GetCmdLnFileName() {return _szFileName;}
  129. BOOL SH_GetPathToDefaultFile(LPTSTR szPath, UINT nLen);
  130. BOOL SH_GetRemoteDesktopFolderPath(LPTSTR szPath, UINT nLen);
  131. #ifndef OS_WINCE
  132. BOOL SH_GetMyDocumentsDisplayName(LPTSTR szName, UINT nLen);
  133. #endif
  134. BOOL SH_GetCmdMigrate() {return _fMigrateOnly;}
  135. BOOL SH_GetCmdConnectToConsole(){return _fConnectToConsole;}
  136. VOID SH_SetCmdConnectToConsole(BOOL bCon) {_fConnectToConsole=bCon;}
  137. static BOOL SH_GetPluginDllList(LPTSTR szSession, LPTSTR szPlugins, size_t cchSzPlugins);
  138. static BOOL HandleServerComboChange(HWND hwndCombo, HWND hwndDlg,
  139. HINSTANCE hInst,
  140. LPTSTR szPrevText);
  141. BOOL SH_AutoFillBlankSettings(CTscSettings* pTsc);
  142. BOOL SH_FileExists(LPTSTR szFileName);
  143. BOOL SH_TSSettingsRegKeyExists(LPTSTR szKeyName);
  144. BOOL SH_DisplayErrorBox(HWND hwndParent, INT errStringID);
  145. BOOL SH_DisplayMsgBox(HWND hwndParent, INT errStringID, INT flags);
  146. BOOL SH_DisplayErrorBox(HWND hwndParent, INT errStringID, LPTSTR szParam);
  147. static BOOL SH_GetNameFromPath(LPTSTR szPath, LPTSTR szName, UINT nameLen);
  148. HWND SH_DisplayClientHelp(HWND hwndOwner, INT helpCommand);
  149. BOOL SH_Cleanup();
  150. static BOOL SH_CreateDirectory(LPTSTR szPath);
  151. static BOOL SH_CreateHiddenFile(LPCTSTR szPath);
  152. static UINT SH_GetScreenBpp();
  153. static BOOL SH_IsRunningOn9x();
  154. //
  155. // Property accessers
  156. //
  157. LPTSTR GetCmdLineFileName();
  158. DCINT GetCipherStrength() {return _SH.cipherStrength;}
  159. PDCTCHAR GetControlVersionString() {return _SH.szControlVer;}
  160. VOID SetAutoConnect(DCBOOL bAutoCon) {_SH.autoConnectEnabled = bAutoCon;}
  161. DCBOOL GetAutoConnect() {return _SH.autoConnectEnabled;}
  162. DCVOID SetServer(PDCTCHAR szServer);
  163. PDCTCHAR GetServer() {return _SH.szServer;}
  164. DCUINT GetCmdLineDesktopWidth() {return _SH.commandLineWidth;}
  165. DCUINT GetCmdLineDesktopHeight() {return _SH.commandLineHeight;}
  166. DCVOID SetStartFullScreen(DCBOOL b) {_SH.fStartFullScreen = b;}
  167. DCBOOL GetStartFullScreen() {return _SH.fStartFullScreen;}
  168. DCBOOL GetCmdLineStartFullScreen(){return _SH.fCommandStartFullScreen;}
  169. LPTSTR GetCmdLineServer() {return _SH.szCommandLineServer;}
  170. LPTSTR GetClxCmdLine() {return _SH.szCLXCmdLine;}
  171. DCBOOL GetUsingDefaultRegSession() {return _SH.fRegDefault;}
  172. PDCTCHAR GetRegSession() {return _SH.regSession;}
  173. DCUINT GetConnectedStringID() {return _SH.connectedStringID;}
  174. HICON GetAppIcon();
  175. DCBOOL GetAutoLogon() {return _SH.fAutoLogon;}
  176. DCVOID SetAutoLogon(DCBOOL b) {_SH.fAutoLogon = b;}
  177. static VOID EnableControls(HWND hwndDlg, PUINT pCtls,
  178. const UINT numCtls, BOOL fEnable);
  179. static VOID EnableControls(HWND hwndDlg, PCTL_ENABLE pCtls,
  180. const UINT numCtls, BOOL fEnable);
  181. BOOL GetRegSessionSpecified() {return _fRegSessionSpecified;}
  182. VOID SetRegSessionSpecified(BOOL b) {_fRegSessionSpecified = b;}
  183. // Crypto helpter fns
  184. static BOOL IsCryptoAPIPresent();
  185. static BOOL DataProtect(PDATA_BLOB pInData, PDATA_BLOB pOutData);
  186. static BOOL DataUnprotect(PDATA_BLOB pInData, PDATA_BLOB pOutData);
  187. // Multimon helpers
  188. static BOOL GetLargestMonitorRect(LPRECT prc);
  189. static BOOL MonitorRectFromHwnd(HWND hwnd, LPRECT prc);
  190. static BOOL MonitorRectFromNearestRect(LPRECT prcNear, LPRECT prcMonitor);
  191. static LPTSTR FormatMessageVArgs(LPCTSTR pcszFormat, ...);
  192. static LPTSTR FormatMessageVAList(LPCTSTR pcszFormat, va_list *argList);
  193. HRESULT SH_ThemeDialogWindow(HWND hwnd, DWORD dwFlags);
  194. private:
  195. //
  196. // Internal member functions
  197. //
  198. PDCTCHAR SHGetSwitch(PDCTCHAR lpszCmdParam);
  199. LPTSTR SHGetSession(LPTSTR lpszCmdParam);
  200. LPTSTR SHGetFileName(LPTSTR lpszCmdParam);
  201. LPTSTR SHGetServer(LPTSTR lpszCmdParam);
  202. UINT CLX_GetSwitch_CLXCMDLINE(IN LPTSTR lpszCmdParam);
  203. BOOL ParseFileOrRegConnectionParam();
  204. LPTSTR SHGetCacheToClear(LPTSTR lpszCmdParam);
  205. DCVOID SHUpdateMRUList(PDCTCHAR pBuffer);
  206. LPTSTR SHGetCmdLineInt(LPTSTR lpszCmdParam, PDCUINT pInt);
  207. LPTSTR SHGetCmdLineString(LPTSTR lpszCmdParam, LPTSTR lpszDest,
  208. DCINT cbDestLen);
  209. DCBOOL SHValidateParsedCmdParam();
  210. public:
  211. //
  212. // Public data members
  213. //
  214. DCTCHAR _fullFrameTitleStr[SH_FRAME_TITLE_RESOURCE_MAX_LENGTH +
  215. SH_REGSESSION_MAX_LENGTH];
  216. DCTCHAR _frameTitleStr[SH_FRAME_TITLE_RESOURCE_MAX_LENGTH];
  217. private:
  218. //
  219. // Private data members
  220. //
  221. SH_DATA _SH;
  222. CUT _Ut;
  223. HICON _hAppIcon;
  224. TCHAR _szFileName[MAX_PATH];
  225. static TCHAR _szBrowseForMore[SH_DISPLAY_STRING_MAX_LENGTH];
  226. BOOL _fFileForEdit;
  227. BOOL _fFileForConnect;
  228. BOOL _fRegSessionSpecified;
  229. TCHAR _szAppName[MAX_PATH];
  230. BOOL _fMigrateOnly;
  231. HINSTANCE _hInstance;
  232. BOOL _fConnectToConsole;
  233. //
  234. // Handle to HHCTL.OCX for HTML Help
  235. //
  236. HMODULE _hModHHCTRL;
  237. PFNHtmlHelp _pFnHtmlHelp;
  238. HMODULE _hUxTheme;
  239. PFNEnableThemeDialogTexture _pFnEnableThemeDialogTexture;
  240. BOOL _fFailedToGetThemeDll;
  241. };
  242. #endif // _SH_H_