#ifndef _TSUSERSHEET_H #define _TSUSERSHEET_H #include #define NUM_OF_PAGES 4 class CDialogBase; #ifdef UNICODE #define COPYWCHAR2TCHAR( SRC , DEST ) \ wcscpy( SRC , DEST ); #else #define COPYWCHAR2TCHAR( SRC , DEST ) \ { \ DWORD dwLen; \ dwLen = wcslen( DEST ); \ WideCharToMultiByte( CP_ACP , 0 , DEST , dwLen , SRC , dwLen / sizeof( WCHAR ) , 0 , 0 ); \ } #endif #define ALN_APPLY ( WM_USER + 900 ) const ULONG kMilliMinute = 60000; const ULONG kMaxTimeoutMinute = 71580; #define E_PARSE_VALUEOVERFLOW 0x80000000 #define E_PARSE_INVALID 0xffffffff #define E_SUCCESS 0 #define E_PARSE_MISSING_DIGITS 0X7fffffff enum TOKEN { TOKEN_DAY , TOKEN_HOUR , TOKEN_MINUTE }; //--------------------------------------------------------------------- // Class for managing user manager for Terminal server extensions //--------------------------------------------------------------------- class CTSUserSheet { private: LPTSTR m_pstrMachinename; LPTSTR m_pstrUsername; CDialogBase *m_pDlg[ NUM_OF_PAGES ]; BOOL m_bDC; // domain controller BOOL m_bIsConfigLoaded; BOOL GetUserConfig( PDWORD ); TCHAR m_szRemoteServerName[ MAX_PATH ]; BOOL m_bDSAType; PSID m_pUserSid; public: CTSUserSheet(); ~CTSUserSheet(); BOOL SetServerAndUser( LPWSTR , LPWSTR ); BOOL GetServer(PWSTR *); HRESULT AddPagesToPropSheet( LPPROPERTYSHEETCALLBACK pProvider ); HRESULT AddPagesToDSAPropSheet( LPFNADDPROPSHEETPAGE , LPARAM ); BOOL SetUserConfig( USERCONFIG& , PDWORD ); USERCONFIG& GetCurrentUserConfig( PDWORD ); LPTSTR GetUserName( ) { return m_pstrUsername; } void SetDSAType( BOOL bT ) { m_bDSAType = bT; } BOOL GetDSAType( void ) { return m_bDSAType; } void CopyUserSid( PSID ); PSID GetUserSid( ) { return m_pUserSid; } // // public data // USERCONFIG m_userconfig; UINT m_cref; }; //--------------------------------------------------------------------- // CDialogBase - as the name implies base class for all the dialogs //--------------------------------------------------------------------- class CDialogBase { protected: BOOL m_bPersisted; HWND m_hWnd; CTSUserSheet *m_pUSht; static UINT CALLBACK PageCallback(HWND hDlg, UINT uMsg, LPPROPSHEETPAGE ppsp); public: virtual BOOL OnInitDialog( HWND , WPARAM , LPARAM ); virtual BOOL OnDestroy( ){ return TRUE; } virtual BOOL GetPropertySheetPage( PROPSHEETPAGE& ){ return FALSE;} virtual BOOL PersistSettings( HWND ){ return FALSE;} virtual BOOL IsValidSettings( HWND ){ return TRUE;} virtual BOOL OnNotify( int , LPNMHDR , HWND ); virtual BOOL OnContextMenu( HWND , POINT& ); virtual BOOL OnHelp( HWND , LPHELPINFO ); CDialogBase( ); //virtual ~CDialogBase( ); }; //--------------------------------------------------------------------- // Dialog for profile page //--------------------------------------------------------------------- class CEnviroDlg : public CDialogBase { public: CEnviroDlg( CTSUserSheet *); BOOL OnInitDialog( HWND , WPARAM , LPARAM ); BOOL GetPropertySheetPage( PROPSHEETPAGE& ); BOOL OnDestroy( ); BOOL PersistSettings( HWND ); void OnCommand( WORD , WORD , HWND ); static INT_PTR CALLBACK DlgProc( HWND , UINT , WPARAM , LPARAM ); }; //--------------------------------------------------------------------- // retains object state for the timeout dlg combx //--------------------------------------------------------------------- typedef struct _cbxstate { int icbxSel; BOOL bEdit; } CBXSTATE; //--------------------------------------------------------------------- // keeps a list of the time unit abbreviations and full names // ie: h hr hrs hour hours //--------------------------------------------------------------------- typedef struct _toktable { LPTSTR pszAbbrv; DWORD dwresourceid; } TOKTABLE, *PTOKTABLE; //--------------------------------------------------------------------- // Dialog for Timeout settings page //--------------------------------------------------------------------- class CTimeOutDlg : public CDialogBase { static WNDPROC m_pfWndproc; CBXSTATE m_cbxst[ 3 ]; WORD m_wAction; WORD m_wCon; TOKTABLE m_tokday[ 4 ]; TOKTABLE m_tokhour[ 6 ]; TOKTABLE m_tokmin[ 5 ]; public: CTimeOutDlg( CTSUserSheet * ); BOOL OnInitDialog( HWND , WPARAM , LPARAM ); BOOL GetPropertySheetPage( PROPSHEETPAGE& ); BOOL OnDestroy( ); BOOL PersistSettings( HWND ); BOOL IsValidSettings( HWND ); void OnCommand( WORD , WORD , HWND ); static INT_PTR CALLBACK DlgProc( HWND , UINT , WPARAM , LPARAM ); BOOL ConvertToMinutes( HWND , PULONG ); BOOL InsertSortedAndSetCurSel( HWND , DWORD ); BOOL RestorePreviousValue( HWND ); BOOL SaveChangedSelection( HWND ); void OnCBNSELCHANGE( HWND ); BOOL ConvertToDuration ( ULONG , LPTSTR ); LRESULT ParseDurationEntry( LPTSTR , PULONG ); int GetCBXSTATEindex( HWND ); void OnCBEditChange( HWND ); BOOL DoesContainDigits( LPTSTR ); BOOL OnCBDropDown( HWND ); BOOL IsToken( LPTSTR , TOKEN ); BOOL LoadAbbreviates( ); BOOL xxxLoadAbbreviate( PTOKTABLE ); BOOL xxxUnLoadAbbreviate( PTOKTABLE ); void InitTokTables( ); }; //--------------------------------------------------------------------- // Dialog for Shadowing settings page //--------------------------------------------------------------------- class CShadowDlg : public CDialogBase { WORD m_wOldRad; public: CShadowDlg( CTSUserSheet * ); BOOL OnInitDialog( HWND , WPARAM , LPARAM ); BOOL GetPropertySheetPage( PROPSHEETPAGE& ); BOOL OnDestroy( ); void OnCommand( WORD , WORD , HWND ); // BOOL OnNotify( int , LPNMHDR , HWND ); BOOL PersistSettings( HWND ); static INT_PTR CALLBACK DlgProc( HWND , UINT , WPARAM , LPARAM ); }; //--------------------------------------------------------------------- // Dialog for profile page //--------------------------------------------------------------------- class CProfileDlg : public CDialogBase { int m_ncbxOld; WORD m_wOldRadio; BOOL m_bTSHomeFolderChanged; public: CProfileDlg( CTSUserSheet * ); BOOL OnInitDialog( HWND , WPARAM , LPARAM ); BOOL GetPropertySheetPage( PROPSHEETPAGE& ); BOOL OnDestroy( ); void OnCommand( WORD , WORD , HWND ); BOOL EnableRemoteHomeDirectory( HWND , BOOL ); BOOL SetWTSProfilePath( HWND , USERCONFIG& ); BOOL SetWTSLocalPath( HWND , USERCONFIG& ); BOOL SetWTSRemotePath( HWND , USERCONFIG& ); BOOL IsPathValid( LPTSTR , BOOL ); BOOL PersistSettings( HWND ); BOOL IsValidSettings( HWND ); BOOL IsLocalPathValid( HWND ); BOOL IsRemotePathValid( HWND hDlg ); void ExpandUserName( LPTSTR ); BOOL createdir( LPTSTR , BOOL , PDWORD ); BOOL CreateSecureDir(LPTSTR szPath , PDWORD pdwErr); BOOL IsLocalComputer(WCHAR*); static INT_PTR CALLBACK DlgProc( HWND , UINT , WPARAM , LPARAM ); HRESULT CreateRemoteFolder(LPCTSTR path); BOOL CreateSystemPath(TCHAR* tchPath); }; #endif //_TSUSERSHEET_H