/******************************************************************************* * * admindoc.h * * interface of the CWinAdminDoc class * * copyright notice: Copyright 1997, Citrix Systems Inc. * Copyright (c) 1998 - 1999 Microsoft Corporation * * $Author: donm $ Don Messerli * * $Log: N:\nt\private\utils\citrix\winutils\tsadmin\VCS\admindoc.h $ * * Rev 1.8 19 Feb 1998 17:39:36 donm * removed latest extension DLL support * * Rev 1.6 19 Jan 1998 16:45:32 donm * new ui behavior for domains and servers * * Rev 1.5 03 Nov 1997 15:17:26 donm * Added Domains * * Rev 1.4 22 Oct 1997 21:06:10 donm * update * * Rev 1.3 18 Oct 1997 18:49:30 donm * update * * Rev 1.2 13 Oct 1997 18:41:42 donm * update * * Rev 1.1 26 Aug 1997 19:13:28 donm * bug fixes/changes from WinFrame 1.7 * * Rev 1.0 30 Jul 1997 17:10:14 butchd * Initial revision. * *******************************************************************************/ #ifndef _ADMINDOC_H #define _ADMINDOC_H #include #define TV_THISCOMP 0x1 #define TV_FAVS 0x2 #define TV_ALLSERVERS 0x4 enum FOCUS_STATE { TREE_VIEW , TAB_CTRL , PAGED_ITEM }; class CWinAdminDoc : public CDocument { protected: // create from serialization only CWinAdminDoc(); DECLARE_DYNCREATE(CWinAdminDoc) // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CWinAdminDoc) public: virtual BOOL OnNewDocument(); virtual BOOL CanCloseFrame(CFrameWnd *pFW); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementation public: virtual ~CWinAdminDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif // return a pointer to the server linked list CObList *GetServerList() { return &m_ServerList; } // return a pointer to the Wd linked list CObList *GetWdList() { return &m_WdList; } // return a pointer to the domain linked list CObList *GetDomainList() { return &m_DomainList; } // remember currently selected node in tree void SetTreeCurrent(CObject* selected, NODETYPE type); // remember a temporary tree item (for some context menus) void SetTreeTemp(CObject* selected, NODETYPE type) { m_pTempSelectedNode = selected; m_TempSelectedType = type; } // Returns the current view VIEW GetCurrentView() { return m_CurrentView; } // sets the current view void SetCurrentView(VIEW view) { m_CurrentView = view; } // Returns the current page int GetCurrentPage() { return m_CurrentPage; } // sets the current page void SetCurrentPage(int page) { m_CurrentPage = page; } // Returns a pointer to the currently selected tree node CObject *GetCurrentSelectedNode() { return m_CurrentSelectedNode; } // Returns a pointer to the temp selected tree node CObject *GetTempSelectedNode() { return m_pTempSelectedNode; } // send a message to selected WinStations void SendWinStationMessage(BOOL bTemp, MessageParms* pParms); // connect to selected WinStation void ConnectWinStation(BOOL bTemp, BOOL bUser); // TRUE if User, FALSE if WinStation // disconnect selected WinStations void DisconnectWinStation(BOOL bTemp); // reset selected WinStations void ResetWinStation(BOOL bTemp, BOOL bReset); // TRUE if Reset, FALSE if Logoff // shadow selected WinStations void ShadowWinStation(BOOL bTemp); // show status dialog for selected WinStations void StatusWinStation(BOOL bTemp); // terminate selected processes void TerminateProcess(); // do a refresh void Refresh(); // Connect to selected Server(s) void ServerConnect(); // Disconnect from the selected Server(s) void ServerDisconnect(); // Connect to all the servers in temporarily selected Domain void TempDomainConnectAllServers(); // Disconnect from all servers in temporarily selected Domain void TempDomainDisconnectAllServers(); // Find all the servers in a Domain void DomainFindServers(); // Connect to all the servers in currently selected Domain void CurrentDomainConnectAllServers(); // Disconnect from all servers in currently selected Domain void CurrentDomainDisconnectAllServers(); // Connect to all servers void ConnectToAllServers(); // Disconnect from all servers void DisconnectFromAllServers(); // Find all servers in all domains void FindAllServers(); // lock the server linked list void LockServerList() { m_ServerListCriticalSection.Lock(); } // unlock the server linked list void UnlockServerList() { m_ServerListCriticalSection.Unlock(); } // lock the Wd linked list void LockWdList() { m_WdListCriticalSection.Lock(); } // unlock the Wd linked list void UnlockWdList() { m_WdListCriticalSection.Unlock(); } // returns a pointer to a given CServer object if it is in our list CServer *FindServerByName(TCHAR *pServerName); // returns a pointer to a given CWd object if it is in our list CWd *FindWdByName(TCHAR *pWdName); // sets the AllViewsReady variable void SetAllViewsReady() { if(m_pMainWnd && ::IsWindow(m_pMainWnd->GetSafeHwnd())) { m_pMainWnd->SendMessage(WM_ADMIN_VIEWS_READY, 0, 0); } m_AllViewsReady = TRUE; } // returns TRUE if all the views are ready BOOL AreAllViewsReady() { return m_AllViewsReady; } // sets the m_pMainWnd variable void SetMainWnd(CWnd *pWnd) { m_pMainWnd = pWnd; } // returns the m_pMainWnd variable CWnd *GetMainWnd() { return m_pMainWnd; } // returns TRUE as long as the process enum thread should keep running static BOOL ShouldProcessContinue() { return m_ProcessContinue; } // Add a Server to ServerList in sorted order void AddServer(CServer *pServer); // Inform the document that the Process List Refresh Time has changed void ProcessListRefreshChanged(UINT refresh) { m_ProcessWakeUpEvent.SetEvent(); } void FixUnknownString(TCHAR *string) { if(!wcscmp(string, m_UnknownString)) wcscpy(string,TEXT(" ")); } ULONG GetCurrentSubNet() { return m_CurrentSubNet; } void SetCurrentSubNet(ULONG sn) { m_CurrentSubNet = sn; } ExtServerInfo *GetDefaultExtServerInfo() { return m_pDefaultExtServerInfo; } ExtGlobalInfo *GetExtGlobalInfo() { return m_pExtGlobalInfo; } // Returns a pointer to the current domain object CDomain *GetCurrentDomain() { return m_pCurrentDomain; } // Returns a pointer to the current server object CServer *GetCurrentServer() { return m_pCurrentServer; } // Functions to check whether certain actions can be performed on the // currently selected items in the views BOOL CanConnect(); BOOL CanDisconnect(); BOOL CanRefresh() { return !m_InRefresh; } BOOL CanReset(); BOOL CanShadow(); BOOL CanSendMessage(); BOOL CanStatus(); BOOL CanLogoff(); BOOL CanTerminate(); BOOL CanServerConnect(); BOOL CanServerDisconnect(); BOOL CanTempConnect(); BOOL CanTempDisconnect(); BOOL CanTempReset(); BOOL CanTempShadow(); BOOL CanTempSendMessage(); BOOL CanTempStatus(); BOOL CanTempDomainConnect(); BOOL CanTempDomainFindServers(); BOOL CanDomainConnect(); BOOL IsAlreadyFavorite( ); void SetOnTabFlag( ){ m_fOnTab = TRUE; } void ResetOnTabFlag( ) { m_fOnTab = FALSE; } BOOL IsOnTabFlagged( ) { return m_fOnTab; } // Background thread to enumerate processes for the current server // Called with CreateThread static DWORD WINAPI ProcessThreadProc(LPVOID); HANDLE m_hProcessThread; static BOOL m_ProcessContinue; // Event to wakeup process thread so that // he can exit (WaitForSingleEvent instead of Sleep) // or enumerate processes CEvent m_ProcessWakeUpEvent; // Function to terminate a process // Called with AfxBeginThread static UINT TerminateProc(LPVOID); // Set the connections persistent preference void SetConnectionsPersistent(BOOL p) { m_ConnectionsPersistent = p; } // Should connections be persistent? BOOL AreConnectionsPersistent() { return(m_ConnectionsPersistent == TRUE); } // Should we connect to a particular server? BOOL ShouldConnect(LPWSTR pServerName); BOOL ShouldAddToFav( LPTSTR pServerName ); // Are we shutting down BOOL IsInShutdown() { return m_bInShutdown; } void ServerAddToFavorites( BOOL ); FOCUS_STATE GetLastRegisteredFocus( ){ return m_focusstate; } void RegisterLastFocus( FOCUS_STATE x ) { m_focusstate = x; } FOCUS_STATE GetPrevFocus( ) { return m_prevFocusState; } void SetPrevFocus( FOCUS_STATE x ) { m_prevFocusState = x; } void AddToFavoritesNow(); // Add a Domain to DomainList in sorted order void AddDomain(CDomain *pDomain); static NODETYPE gm_CurrentSelType; private: // Read the list of trusted domains and builds linked list of domains void BuildDomainList(); // builds the list of CWd objects void BuildWdList(); // Helper function for the above BOOL CheckActionAllowed(BOOL (*CheckFunction)(CWinStation *pWinStation), BOOL AllowMultileSelected); // Callbacks passed to CheckActionAllowed static BOOL CheckConnectAllowed(CWinStation *pWinStation); static BOOL CheckDisconnectAllowed(CWinStation *pWinStation); static BOOL CheckResetAllowed(CWinStation *pWinStation); static BOOL CheckSendMessageAllowed(CWinStation *pWinStation); static BOOL CheckShadowAllowed(CWinStation *pWinStation); static BOOL CheckStatusAllowed(CWinStation *pWinStation); // Called when the CMainFrame is about to close // Does what the destructor used to do void Shutdown(CDialog *pDlg); // Display message string in shutdown dialog void ShutdownMessage(UINT id, CDialog *dlg); // Read the user preferences void ReadPreferences(); // Write the user preferences void WritePreferences(); // Function to Enumerate the Hydra Servers on the Network. static LPWSTR EnumHydraServers(LPWSTR pDomain, DWORD VerMajor, DWORD VerMinor); CObList m_ServerList; // List of CServer objects CCriticalSection m_ServerListCriticalSection; CObList m_WdList; // List of CWd objects CCriticalSection m_WdListCriticalSection; // List of Domains // This list does not have a critical section (and lock/unlock functions) // because it is never used by two different threads at the same time CObList m_DomainList; CObject* m_CurrentSelectedNode; NODETYPE m_CurrentSelectedType; // TempSelected are for server context menus in the tree // so that tree item doesn't have to be selected to // make popup menu work CObject* m_pTempSelectedNode; NODETYPE m_TempSelectedType; void UpdateAllProcesses(); LPCTSTR m_UnknownString; // Pointer to the "(unknown)" string from UTILDLL.DLL ULONG m_CurrentSubNet; // Subnet of the current server VIEW m_CurrentView; int m_CurrentPage; BOOL m_AllViewsReady; BOOL m_InRefresh; BOOL m_bInShutdown; CWnd *m_pMainWnd; CDomain *m_pCurrentDomain; CServer *m_pCurrentServer; ExtServerInfo *m_pDefaultExtServerInfo; ExtGlobalInfo *m_pExtGlobalInfo; // user preferences UINT m_ConnectionsPersistent; LPWSTR m_pPersistentConnections; LPWSTR m_pszFavList; FOCUS_STATE m_focusstate; FOCUS_STATE m_prevFocusState; BOOL m_fOnTab; // Generated message map functions protected: //{{AFX_MSG(CWinAdminDoc) // NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// #endif // _ADMINDOC_H