|
|
/*******************************************************************************
* * mainfrm.cpp * * implementation of the CMainFrame class * * copyright notice: Copyright 1997, Citrix Systems Inc. * Copyright (c) 1998 - 1999 Microsoft Corporation * * $Author: donm $ Don Messerli * *******************************************************************************/
#include "stdafx.h"
#include "afxpriv.h"
#include "afxcview.h"
#include "winadmin.h"
#include "admindoc.h"
#include "treeview.h"
#include "rtpane.h"
#include "dialogs.h"
#include "htmlhelp.h"
#include "mainfrm.h"
#include <winsock2.h>
#include <dsrole.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
#ifdef _STRESS_BUILD
DWORD RunStress( PVOID pv ); DWORD RunStressLite( PVOID pv ); BOOL g_fWaitForAllServersToDisconnect = 1; #endif
INT_PTR CALLBACK FWarnDlg( HWND hwnd , UINT msg , WPARAM wp , LPARAM lp ); /////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE() ON_MESSAGE(WM_ADMIN_CHANGEVIEW, OnAdminChangeView) ON_MESSAGE(WM_ADMIN_ADD_SERVER, OnAdminAddServer) ON_MESSAGE(WM_ADMIN_REMOVE_SERVER, OnAdminRemoveServer) ON_MESSAGE(WM_ADMIN_UPDATE_SERVER, OnAdminUpdateServer) ON_MESSAGE(WM_ADMIN_UPDATE_PROCESSES, OnAdminUpdateProcesses) ON_MESSAGE(WM_ADMIN_REMOVE_PROCESS, OnAdminRemoveProcess) ON_MESSAGE(WM_ADMIN_ADD_WINSTATION, OnAdminAddWinStation) ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATION, OnAdminUpdateWinStation) ON_MESSAGE(WM_ADMIN_REMOVE_WINSTATION, OnAdminRemoveWinStation) ON_MESSAGE(WM_ADMIN_UPDATE_SERVER_INFO, OnAdminUpdateServerInfo) ON_MESSAGE(WM_ADMIN_REDISPLAY_LICENSES, OnAdminRedisplayLicenses) ON_MESSAGE(WM_ADMIN_UPDATE_WINSTATIONS, OnAdminUpdateWinStations) ON_MESSAGE(WM_ADMIN_UPDATE_DOMAIN, OnAdminUpdateDomain) ON_MESSAGE(WM_ADMIN_ADD_DOMAIN, OnAdminAddDomain) ON_MESSAGE(WM_ADMIN_VIEWS_READY, OnAdminViewsReady) ON_MESSAGE(WM_FORCE_TREEVIEW_FOCUS , OnForceTreeViewFocus )
ON_MESSAGE( WM_ADMIN_ADDSERVERTOFAV , OnAdminAddServerToFavorites ) ON_MESSAGE( WM_ADMIN_REMOVESERVERFROMFAV , OnAdminRemoveServerFromFavs ) ON_MESSAGE( WM_ADMIN_GET_TV_STATES , OnAdminGetTVStates ) ON_MESSAGE( WM_ADMIN_UPDATE_TVSTATE , OnAdminUpdateTVStates )
ON_COMMAND(IDM_EXPAND_ALL, OnExpandAll) ON_COMMAND(IDM_REFRESH, OnRefresh) ON_COMMAND(IDM_CONNECT, OnConnect) ON_COMMAND(IDM_DISCONNECT, OnDisconnect) ON_COMMAND(IDM_MESSAGE, OnSendMessage) ON_COMMAND(IDM_SHADOW, OnShadow) ON_COMMAND(IDM_RESET, OnReset) ON_COMMAND(IDM_STATUS, OnStatus) ON_COMMAND(IDTM_CONNECT, OnTreeConnect) ON_COMMAND(IDTM_DISCONNECT, OnTreeDisconnect) ON_COMMAND(IDTM_MESSAGE, OnTreeSendMessage) ON_COMMAND(IDTM_SHADOW, OnTreeShadow) ON_COMMAND(IDTM_RESET, OnTreeReset) ON_COMMAND(IDTM_STATUS, OnTreeStatus) ON_COMMAND(IDM_LOGOFF, OnLogoff) ON_COMMAND(IDM_TERMINATE, OnTerminate) ON_COMMAND(IDM_PREFERENCES, OnPreferences) ON_COMMAND(IDM_COLLAPSE_ALL, OnCollapseAll) ON_COMMAND(IDM_COLLAPSE_TOSERVERS, OnCollapseToServers) ON_COMMAND(IDM_COLLAPSE_TODOMAINS, OnCollapseToDomains) ON_COMMAND(IDM_SHOW_SYSTEM_PROCESSES, OnShowSystemProcesses) ON_COMMAND(IDM_SERVER_CONNECT, OnServerConnect) ON_COMMAND(IDM_SERVER_DISCONNECT, OnServerDisconnect)
ON_COMMAND( IDTM_DOMAIN_FIND_SERVER , OnFindServer )
ON_COMMAND(IDM_SERVER_ADDTOFAV , OnAddToFavorites ) ON_COMMAND(IDM_SERVER_REMOVEFAV , OnRemoveFromFavs ) ON_COMMAND( IDM_ALLSERVERS_EMPTYFAVORITES , OnEmptyFavorites )
ON_COMMAND(IDTM_DOMAIN_CONNECT_ALL, OnTreeDomainConnectAllServers) ON_COMMAND(IDTM_DOMAIN_DISCONNECT_ALL, OnTreeDomainDisconnectAllServers) ON_COMMAND(IDTM_DOMAIN_FIND_SERVERS, OnTreeDomainFindServers) ON_COMMAND(IDM_DOMAIN_CONNECT_ALL, OnDomainConnectAllServers) ON_COMMAND(IDM_DOMAIN_DISCONNECT_ALL, OnDomainDisconnectAllServers) ON_COMMAND(IDM_ALLSERVERS_CONNECT, OnAllServersConnect) ON_COMMAND(IDM_ALLSERVERS_DISCONNECT, OnAllServersDisconnect) ON_COMMAND(IDM_ALLSERVERS_FIND, OnAllServersFind) ON_UPDATE_COMMAND_UI(IDM_CONNECT, OnUpdateConnect) ON_UPDATE_COMMAND_UI(IDM_DISCONNECT, OnUpdateDisconnect) ON_UPDATE_COMMAND_UI(IDM_LOGOFF, OnUpdateLogoff) ON_UPDATE_COMMAND_UI(IDM_MESSAGE, OnUpdateMessage) ON_UPDATE_COMMAND_UI(IDM_RESET, OnUpdateReset) ON_UPDATE_COMMAND_UI(IDM_SHADOW, OnUpdateShadow) ON_UPDATE_COMMAND_UI(IDM_STATUS, OnUpdateStatus) ON_UPDATE_COMMAND_UI(IDM_TERMINATE, OnUpdateTerminate) ON_UPDATE_COMMAND_UI(IDM_SERVER_CONNECT, OnUpdateServerConnect) ON_UPDATE_COMMAND_UI(IDM_SERVER_DISCONNECT, OnUpdateServerDisconnect)
ON_UPDATE_COMMAND_UI( IDM_SERVER_ADDTOFAV , OnUpdateServerAddToFavorite ) ON_UPDATE_COMMAND_UI( IDM_SERVER_REMOVEFAV , OnUpdateServerRemoveFromFavorite )
ON_UPDATE_COMMAND_UI(IDTM_CONNECT, OnUpdateTreeConnect) ON_UPDATE_COMMAND_UI(IDTM_DISCONNECT, OnUpdateTreeDisconnect) ON_UPDATE_COMMAND_UI(IDTM_MESSAGE, OnUpdateTreeMessage) ON_UPDATE_COMMAND_UI(IDTM_RESET, OnUpdateTreeReset) ON_UPDATE_COMMAND_UI(IDTM_SHADOW, OnUpdateTreeShadow) ON_UPDATE_COMMAND_UI(IDTM_STATUS, OnUpdateTreeStatus) ON_UPDATE_COMMAND_UI(IDM_SHOW_SYSTEM_PROCESSES, OnUpdateShowSystemProcesses) ON_UPDATE_COMMAND_UI_RANGE(IDM_DOMAIN_CONNECT_ALL, IDM_DOMAIN_DISCONNECT_ALL, OnUpdateDomainMenu) ON_UPDATE_COMMAND_UI_RANGE(IDTM_DOMAIN_CONNECT_ALL, IDTM_DOMAIN_DISCONNECT_ALL, OnUpdateDomainPopupMenu) ON_UPDATE_COMMAND_UI(IDTM_DOMAIN_FIND_SERVERS, OnUpdateDomainPopupFind) ON_UPDATE_COMMAND_UI(IDM_REFRESH, OnUpdateRefresh)
ON_UPDATE_COMMAND_UI( IDM_ALLSERVERS_EMPTYFAVORITES , OnUpdateEmptyFavs )
ON_COMMAND( ID_TAB , OnTab ) ON_COMMAND( ID_SHIFTTAB , OnShiftTab ) ON_COMMAND( ID_CTRLTAB , OnCtrlTab ) ON_COMMAND( ID_CTRLSHIFTTAB , OnCtrlShiftTab ) ON_COMMAND( ID_NEXTPANE , OnNextPane ) ON_COMMAND( ID_PREVPANE , OnNextPane ) ON_COMMAND( ID_DELKEY , OnDelFavNode ) #ifdef _STRESS_BUILD
ON_COMMAND( IDM_ALLSERVERS_FAVALLADD , OnAddAllServersToFavorites ) ON_COMMAND( IDM_ALLSERVERS_RUNSTRESS , OnRunStress ) ON_COMMAND( IDM_ALLSERVERS_RUNSTRESSLITE, OnRunStressLite ) #endif
ON_WM_CLOSE() //}}AFX_MSG_MAP
// Global help commands
ON_COMMAND(ID_HELP_FINDER, OnHtmlHelp) ON_COMMAND(ID_HELP, OnHtmlHelp) // ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
// ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
END_MESSAGE_MAP()
static UINT indicators[] = { ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame() { m_pLeftPane = NULL; m_pRightPane = NULL; }
CMainFrame::~CMainFrame() {
}
void CMainFrame::OnHtmlHelp() { TCHAR * pTsAdminHelp = L"ts_adm_topnode.htm"; HtmlHelp(AfxGetMainWnd()->m_hWnd,L"TermSrv.Chm",HH_DISPLAY_TOPIC,(DWORD_PTR)pTsAdminHelp); }
/*LRESULT CMainFrame::OnHelp(WPARAM wParam, LPARAM lParam)
{ CFrameWnd::WinHelp(0L, HELP_FINDER); return TRUE; } */
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { // TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { // TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar);
// If there is an extension DLL, call it's startup function
LPFNEXSTARTUPPROC StartupProc = ((CWinAdminApp*)AfxGetApp())->GetExtStartupProc(); if(StartupProc) { (*StartupProc)(this->GetSafeHwnd()); }
DWORD dwTid;
HANDLE hThread = CreateThread( NULL , 0 , ( LPTHREAD_START_ROUTINE )CMainFrame::InitWarningThread, GetSafeHwnd() , 0 , &dwTid );
CloseHandle( hThread );
return 0; } // end CMainFrame::OnCreate
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { BOOL rtn;
rtn = m_wndSplitter.CreateStatic(this, 1, 2); #ifdef PUBLISHED_APPS
if(((CWinAdminApp*)AfxGetApp())->IsPicasso()) { rtn |= m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftPane), CSize(((CWinAdminApp *)AfxGetApp())->GetTreeWidth(), 300), pContext); } else { #else
{ #endif
rtn |= m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CAdminTreeView), CSize(((CWinAdminApp *)AfxGetApp())->GetTreeWidth(), 300), pContext); }
rtn |= m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightPane), CSize(0, 0), pContext);
m_pLeftPane = m_wndSplitter.GetPane(0, 0); m_pRightPane = m_wndSplitter.GetPane(0, 1);
return rtn; } // end CMainFrame::OnCreateClient
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.x = 3; cs.y = 3; cs.cx = 635; cs.cy = 444; return CFrameWnd::PreCreateWindow(cs); } // end CMainFrame::PreCreateWindow
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); }
void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); }
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
/////////////////////////////////////
// F'N: CMainFrame::OnAdminChangeView
//
// - handles the custom message WM_ADMIN_CHANGEVIEW
// - this message is sent to the mainframe by CAdminTreeView when a new tree
// item is selected
// - lParam holds the info structure for the newly selected tree node
// and is handed along to CRightPane as the lParam of another
// WM_WA_CHANGEVIEW message, which CRightPane then handles as it
// sees fit
//
LRESULT CMainFrame::OnAdminChangeView(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to change his view
m_pRightPane->SendMessage(WM_ADMIN_CHANGEVIEW, wParam, lParam); return 0; } // end CMainFrame::OnAdminChangeView
/////////////////////////////////////
// F'N: CMainFrame::OnAdminAddServer
//
LRESULT CMainFrame::OnAdminAddServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to add server
m_pLeftPane->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam); // tell the right pane to add server
m_pRightPane->SendMessage(WM_ADMIN_ADD_SERVER, wParam, lParam); return 0; } // end CMainFrame::OnAdminAddServer
/////////////////////////////////////
// F'N: CMainFrame::OnAdminRemoveServer
//
// wParam - TRUE if server disappeared, FALSE if via Server Filtering
// lParam - CServer to remove
LRESULT CMainFrame::OnAdminRemoveServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
ODS( L"CMainFrame!OnAdminRemoveServer\n" );
#if 0
if(wParam) { // Is this the currently selected server?
CWinAdminDoc *doc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument(); if((CObject*)lParam == doc->GetCurrentSelectedNode()) { CString TitleString; CString MessageString;
TitleString.LoadString(AFX_IDS_APP_TITLE); MessageString.Format(IDS_SERVER_DISAPPEARED, ((CServer*)lParam)->GetName()); MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OK); } } #endif
// tell the tree view to remove server
m_pLeftPane->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam);
// tell the right pane to remove server
m_pRightPane->SendMessage(WM_ADMIN_REMOVE_SERVER, wParam, lParam); return 0; } // end CMainFrame::OnAdminRemoveServer
//----------------------------------------------------------------------------
LRESULT CMainFrame::OnAdminAddServerToFavorites( WPARAM wp , LPARAM lp ) { ODS( L"CMainFrame::OnAdminAddServerToFavorites\n" );
m_pLeftPane->SendMessage( WM_ADMIN_ADDSERVERTOFAV , wp , lp );
return 0; }
LRESULT CMainFrame::OnAdminRemoveServerFromFavs( WPARAM wp , LPARAM lp ) { ODS( L"CMainFrame::OnAdminRemoveServerFromFavs\n" );
return m_pLeftPane->SendMessage( WM_ADMIN_REMOVESERVERFROMFAV , wp , lp ); }
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateServer
//
LRESULT CMainFrame::OnAdminUpdateServer(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to update server
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam);
// tell the right pane to update server
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_SERVER, wParam, lParam); return 0; } // end CMainFrame::OnAdminUpdateServer
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateProcesses
//
LRESULT CMainFrame::OnAdminUpdateProcesses(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to update processes
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_PROCESSES, wParam, lParam); return 0;
} // end CMainFrame::OnAdminUpdateProcesses
/////////////////////////////////////
// F'N: CMainFrame::OnAdminRemoveProcess
//
LRESULT CMainFrame::OnAdminRemoveProcess(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to remove a process
m_pRightPane->SendMessage(WM_ADMIN_REMOVE_PROCESS, wParam, lParam); return 0;
} // end CMainFrame::OnAdminUpdateProcesses
/////////////////////////////////////
// F'N: CMainFrame::OnAdminAddWinStation
//
LRESULT CMainFrame::OnAdminAddWinStation(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to add a WinStation
m_pLeftPane->SendMessage(WM_ADMIN_ADD_WINSTATION, wParam, lParam); return 0; } // end CMainFrame::OnAdminAddWinStation
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateWinStation
//
LRESULT CMainFrame::OnAdminUpdateWinStation(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to update WinStation
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_WINSTATION, wParam, lParam); return 0; } // end CMainFrame::OnAdminUpdateWinStation
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateWinStations
//
LRESULT CMainFrame::OnAdminUpdateWinStations(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to update WinStations
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_WINSTATIONS, wParam, lParam);
return 0; } // end CMainFrame::OnAdminUpdateWinStations
/////////////////////////////////////
// F'N: CMainFrame::OnAdminRemoveWinStation
//
LRESULT CMainFrame::OnAdminRemoveWinStation(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to remove a WinStation
m_pLeftPane->SendMessage(WM_ADMIN_REMOVE_WINSTATION, wParam, lParam);
return 0; } // end CMainFrame::OnAdminRemoveWinStation
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateDomain
//
LRESULT CMainFrame::OnAdminUpdateDomain(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the tree view to update the domain
m_pLeftPane->SendMessage(WM_ADMIN_UPDATE_DOMAIN, wParam, lParam);
return 0; } // end CMainFrame::OnAdminUpdateDomain
/////////////////////////////////////
// F'N: CMainFrame::OnAdminAddDomain
//
LRESULT CMainFrame::OnAdminAddDomain(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
return m_pLeftPane->SendMessage(WM_ADMIN_ADD_DOMAIN, wParam, lParam);
} // end CMainFrame::OnAdminAddDomain
/////////////////////////////////////
// F'N: CMainFrame::OnAdminUpdateServerInfo
//
LRESULT CMainFrame::OnAdminUpdateServerInfo(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to update server info
m_pRightPane->SendMessage(WM_ADMIN_UPDATE_SERVER_INFO, wParam, lParam); return 0; } // end CMainFrame::OnAdminUpdateServerInfo
/////////////////////////////////////
// F'N: CMainFrame::OnAdminRedisplayLicenses
//
LRESULT CMainFrame::OnAdminRedisplayLicenses(WPARAM wParam, LPARAM lParam) { ASSERT(lParam);
// tell the right pane to redisplay licenses
m_pRightPane->SendMessage(WM_ADMIN_REDISPLAY_LICENSES, wParam, lParam); return 0; } // end CMainFrame::OnAdminRedisplayLicenses
/////////////////////////////////////
// F'N: CMainFrame::OnAdminViewsReady
//
LRESULT CMainFrame::OnAdminViewsReady(WPARAM wParam, LPARAM lParam) { // tell the left pane that all views are ready
m_pLeftPane->SendMessage(WM_ADMIN_VIEWS_READY, wParam, lParam); return 0; } // end CMainFrame::OnAdminViewsReady
/////////////////////////////////////
// F'N: CMainFrame::OnExpandAll
//
void CMainFrame::OnExpandAll() { // tell the tree view to expand all
m_pLeftPane->SendMessage(WM_ADMIN_EXPANDALL, 0, 0); } // end CMainFrame::OnExpandAll
/////////////////////////////////////
// F'N: CMainFrame::OnCollapseAll
//
void CMainFrame::OnCollapseAll() { // tell the tree view to collapse all
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSEALL, 0, 0); } // end CMainFrame::OnCollapseAll
/////////////////////////////////////
// F'N: CMainFrame::OnCollapseToServers
//
void CMainFrame::OnCollapseToServers() { // tell the tree view to collapse to servers
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSETOSERVERS, 0, 0); } // end CMainFrame::OnCollapseToServers
/////////////////////////////////////
// F'N: CMainFrame::OnCollapseToDomains
//
void CMainFrame::OnCollapseToDomains() { // tell the tree view to collapse to domains
m_pLeftPane->SendMessage(WM_ADMIN_COLLAPSETODOMAINS, 0, 0); } // end CMainFrame::OnCollapseToDomains
/////////////////////////////////////
// F'N: CMainFrame::OnRefresh
//
void CMainFrame::OnRefresh() { // tell the document to do a refresh
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->Refresh();
} // end CMainFrame::OnRefresh
/////////////////////////////////////
// F'N: CMainFrame::OnConnect
//
void CMainFrame::OnConnect() { // We don't ask for confirmation, should we?
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument(); int view = pDoc->GetCurrentView(); int page = pDoc->GetCurrentPage();
// tell the document
BOOL user = FALSE; if((view == VIEW_SERVER && page == PAGE_USERS) || (view == VIEW_ALL_SERVERS && page == PAGE_AS_USERS) || (view == VIEW_DOMAIN && page == PAGE_DOMAIN_USERS)) user = TRUE;
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectWinStation(FALSE, user); } // end CMainFrame::OnConnect
/////////////////////////////////////
// F'N: CMainFrame::OnTreeConnect
//
void CMainFrame::OnTreeConnect() { ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectWinStation(TRUE, FALSE); } // end CMainFrame::OnTreeConnect
/////////////////////////////////////
// F'N: CMainFrame::OnDisconnect
//
void CMainFrame::OnDisconnect() { DisconnectHelper(FALSE);
} // end CMainFrame::OnDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnTreeDisconnect
//
void CMainFrame::OnTreeDisconnect() { DisconnectHelper(TRUE);
} // end CMainFrame::OnTreeDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnTreeDisconnect
//
void CMainFrame::DisconnectHelper(BOOL bTree) { CString TitleString; CString MessageString;
// Only bother the user if Confirmation is set
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
TitleString.LoadString(AFX_IDS_APP_TITLE); MessageString.LoadString(IDS_WARN_DISCONNECT);
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) { return; } }
// tell the document
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DisconnectWinStation(bTree);
} // end CMainFrame::DisconnectHelper
/////////////////////////////////////
// F'N: CMainFrame::OnSendMessage
//
void CMainFrame::OnSendMessage() { SendMessageHelper(FALSE);
} // end CMainFrame::OnSendMessage
/////////////////////////////////////
// F'N: CMainFrame::OnTreeSendMessage
//
void CMainFrame::OnTreeSendMessage() { SendMessageHelper(TRUE);
} // end CMainFrame::OnTreeSendMessage
/////////////////////////////////////
// F'N: CMainFrame::SendMessageHelper
//
void CMainFrame::SendMessageHelper(BOOL bTree) { CSendMessageDlg dlg; //AfxGetMainWnd());
if(dlg.DoModal() != IDOK || !(*dlg.m_szMessage)) return;
MessageParms *pParms = new MessageParms; wcscpy(pParms->MessageTitle, dlg.m_szTitle); wcscpy(pParms->MessageBody, dlg.m_szMessage);
// tell the document
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->SendWinStationMessage(bTree, pParms); } // end CMainFrame::SendMessageHelper
/////////////////////////////////////
// F'N: CMainFrame::OnShadow
//
void CMainFrame::OnShadow() { // tell the document to Shadow the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ShadowWinStation(FALSE);
} // end CMainFrame::OnShadow
/////////////////////////////////////
// F'N: CMainFrame::OnTreeShadow
//
void CMainFrame::OnTreeShadow() { // tell the document to Shadow the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ShadowWinStation(TRUE);
} // end CMainFrame::OnTreeShadow
/////////////////////////////////////
// F'N: CMainFrame::OnReset
//
void CMainFrame::OnReset() { ResetHelper(FALSE);
} // end CMainFrame::OnReset
/////////////////////////////////////
// F'N: CMainFrame::OnTreeReset
//
void CMainFrame::OnTreeReset() { ResetHelper(TRUE);
} // end CMainFrame::OnTreeReset
/////////////////////////////////////
// F'N: CMainFrame::ResetHelper
//
void CMainFrame::ResetHelper(BOOL bTree) { CString TitleString; CString MessageString;
// Only bother the user if Confirmation is set
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
TitleString.LoadString(AFX_IDS_APP_TITLE); MessageString.LoadString(IDS_WARN_RESET);
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) { return; } } // tell the document to reset the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ResetWinStation(bTree, TRUE);
} // end CMainFrame::ResetHelper
/////////////////////////////////////
// F'N: CMainFrame::OnStatus
//
void CMainFrame::OnStatus() { // tell the document to reset the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->StatusWinStation(FALSE);
} // end CMainFrame::OnStatus
/////////////////////////////////////
// F'N: CMainFrame::OnTreeStatus
//
void CMainFrame::OnTreeStatus() { // tell the document to reset the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->StatusWinStation(TRUE);
} // end CMainFrame::OnTreeStatus
/////////////////////////////////////
// F'N: CMainFrame::OnLogoff
//
void CMainFrame::OnLogoff() { CString TitleString; CString MessageString;
// Only bother the user if Confirmation is set
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
TitleString.LoadString(AFX_IDS_APP_TITLE); MessageString.LoadString(IDS_WARN_LOGOFF);
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) { return; } }
// tell the document to reset the WinStation(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ResetWinStation(FALSE, TRUE);
} // end CMainFrame::OnLogoff
/////////////////////////////////////
// F'N: CMainFrame::OnTerminate
//
void CMainFrame::OnTerminate() { CString TitleString; CString MessageString;
// Only bother the user if Confirmation is set
if(((CWinAdminApp*)AfxGetApp())->AskConfirmation()) {
TitleString.LoadString(AFX_IDS_APP_TITLE); MessageString.LoadString(IDS_WARN_TERMINATE);
if(IDOK != MessageBox(MessageString, TitleString, MB_ICONEXCLAMATION | MB_OKCANCEL)) { return; } }
// tell the document to terminate the processes
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TerminateProcess();
} // end CMainFrame::OnTerminate
/////////////////////////////////////
// F'N: CMainFrame::OnServerConnect
//
void CMainFrame::OnServerConnect() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerConnect();
} // end CMainFrame::OnServerConnect
//------------------------------------------------------------
void CMainFrame::OnAddToFavorites( ) { // ok try following me
// I'm going to call a method in CWinAdminDoc to determine the current server
// and view. This will then be forwarded back here via sendmsg and then
// towards the treeview.
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerAddToFavorites( TRUE ); }
//=-----------------------------------------------------------
void CMainFrame::OnRemoveFromFavs( ) { ODS( L"CMainFrame::OnRemoveFromFavs\n" ); ((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerAddToFavorites( FALSE ); }
/////////////////////////////////////
// F'N: CMainFrame::OnServerDisconnect
//
void CMainFrame::OnServerDisconnect() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ServerDisconnect();
} // end CMainFrame::OnServerDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnTreeDomainConnectAllServers
//
void CMainFrame::OnTreeDomainConnectAllServers() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TempDomainConnectAllServers();
} // end CMainFrame::OnTreeDomainConnectAllServers
/////////////////////////////////////
// F'N: CMainFrame::OnTreeDomainDisconnectAllServers
//
void CMainFrame::OnTreeDomainDisconnectAllServers() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->TempDomainDisconnectAllServers();
} // end CMainFrame::OnTreeDomainDisconnectAllServers
/////////////////////////////////////
// F'N: CMainFrame::OnTreeDomainFindServers
//
void CMainFrame::OnTreeDomainFindServers() { // tell the document to find servers in the domain
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DomainFindServers();
} // end CMainFrame::OnTreeDomainFindServers
/////////////////////////////////////
// F'N: CMainFrame::OnDomainConnectAllServers
//
void CMainFrame::OnDomainConnectAllServers() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CurrentDomainConnectAllServers();
} // end CMainFrame::OnDomainConnectAllServers
/////////////////////////////////////
// F'N: CMainFrame::OnDomainDisconnectAllServers
//
void CMainFrame::OnDomainDisconnectAllServers() { // tell the document to connect to the server(s)
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CurrentDomainDisconnectAllServers();
} // end CMainFrame::OnDomainDisconnectAllServers
/////////////////////////////////////
// F'N: CMainFrame::OnAllServersConnect
//
void CMainFrame::OnAllServersConnect() { // tell the document to connect to all servers
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->ConnectToAllServers();
} // end CMainFrame::OnAllServersConnect
/////////////////////////////////////
// F'N: CMainFrame::OnAllServersDisconnect
//
void CMainFrame::OnAllServersDisconnect() { // tell the document to disconnect from all servers
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->DisconnectFromAllServers();
} // end CMainFrame::OnAllServersDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnAllServersFind
//
void CMainFrame::OnAllServersFind() { // tell the document to find all servers in all domains
((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->FindAllServers();
} // end CMainFrame::OnAllServersFind
/////////////////////////////////////
// F'N: CMainFrame::OnPreferences
//
void CMainFrame::OnPreferences() { CPreferencesDlg dlg;
dlg.DoModal();
} // end CMainFrame::OnPreferences
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateConnect
//
void CMainFrame::OnUpdateConnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanConnect());
} // end CMainFrame::OnUpdateConnect
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateDisconnect
//
void CMainFrame::OnUpdateDisconnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanDisconnect());
} // end CMainFrame::OnUpdateDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateLogoff
//
void CMainFrame::OnUpdateLogoff(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanLogoff());
} // end CMainFrame::OnUpdateLogoff
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateMessage
//
void CMainFrame::OnUpdateMessage(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanSendMessage());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateRefresh
//
void CMainFrame::OnUpdateRefresh(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanRefresh());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateReset
//
void CMainFrame::OnUpdateReset(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanReset());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateShadow
//
void CMainFrame::OnUpdateShadow(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanShadow());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateStatus
//
void CMainFrame::OnUpdateStatus(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanStatus());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTerminate
//
void CMainFrame::OnUpdateTerminate(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTerminate());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateServerConnect
//
void CMainFrame::OnUpdateServerConnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanServerConnect());
}
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateServerDisconnect
//
void CMainFrame::OnUpdateServerDisconnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanServerDisconnect());
}
void CMainFrame::OnUpdateServerAddToFavorite( CCmdUI *pCmdUI ) { pCmdUI->Enable( !( ( CWinAdminDoc* )( ( CWinAdminApp* )AfxGetApp() )->GetDocument() )->IsAlreadyFavorite() ); }
void CMainFrame::OnUpdateServerRemoveFromFavorite( CCmdUI *pCmdUI ) { pCmdUI->Enable( ( ( CWinAdminDoc* )( ( CWinAdminApp* )AfxGetApp() )->GetDocument() )->IsAlreadyFavorite() ); } /////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeConnect
//
void CMainFrame::OnUpdateTreeConnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempConnect());
} // end CMainFrame::OnUpdateTreeConnect
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeDisconnect
//
void CMainFrame::OnUpdateTreeDisconnect(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDisconnect());
} // end CMainFrame::OnUpdateTreeDisconnect
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeMessage
//
void CMainFrame::OnUpdateTreeMessage(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempSendMessage());
} // end CMainFrame::OnUpdateTreeMessage
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeReset
//
void CMainFrame::OnUpdateTreeReset(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempReset());
} // end CMainFrame::OnUpdateTreeReset
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeShadow
//
void CMainFrame::OnUpdateTreeShadow(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempShadow());
} // end CMainFrame::OnUpdateTreeShadow
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateTreeStatus
//
void CMainFrame::OnUpdateTreeStatus(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempStatus());
} // end CMainFrame::OnUpdateTreeStatus
/////////////////////////////////////
// F'N: CMainFrame::OnShowSystemProcesses
//
void CMainFrame::OnShowSystemProcesses() { int state = ((CWinAdminApp*)AfxGetApp())->ShowSystemProcesses(); ((CWinAdminApp*)AfxGetApp())->SetShowSystemProcesses(state^1);
// tell the right pane to redisplay processes
m_pRightPane->SendMessage(WM_ADMIN_REDISPLAY_PROCESSES, 0, 0);
} // end CMainFrame::OnShowSystemProcesses()
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateShowSystemProcesses
//
void CMainFrame::OnUpdateShowSystemProcesses(CCmdUI* pCmdUI) { pCmdUI->SetCheck(((CWinAdminApp*)AfxGetApp())->ShowSystemProcesses());
} // end CMainFrame::OnUpdateShowSystemProcesses
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateDomainPopupMenu
//
void CMainFrame::OnUpdateDomainPopupMenu(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDomainConnect());
} // end CMainFrame::OnUpdateDomainPopupMenu
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateDomainPopupFind
//
void CMainFrame::OnUpdateDomainPopupFind(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanTempDomainFindServers());
} // end CMainFrame::OnUpdateDomainPopupFind
/////////////////////////////////////
// F'N: CMainFrame::OnUpdateDomainMenu
//
void CMainFrame::OnUpdateDomainMenu(CCmdUI* pCmdUI) { pCmdUI->Enable(((CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument())->CanDomainConnect());
} // end CMainFrame::OnUpdateDomainMenu
/////////////////////////////////////
// F'N: CMainFrame::OnClose
//
void CMainFrame::OnClose() { GetWindowPlacement(&((CWinAdminApp*)AfxGetApp())->m_Placement);
RECT rect; m_pLeftPane->GetWindowRect(&rect); ((CWinAdminApp*)AfxGetApp())->SetTreeWidth(rect.right-rect.left);
CFrameWnd::OnClose();
} // end CMainFrame::OnClose
/////////////////////////////////////
// F'N: CMainFrame::ActivateFrame
//
void CMainFrame::ActivateFrame(int nCmdShow) { // TODO: Add your specialized code here and/or call the base class
WINDOWPLACEMENT *pPlacement = ((CWinAdminApp *)AfxGetApp())->GetPlacement();
if ( pPlacement->length == -1 ) {
/*
* This is the first time that this is called, set the window * placement and show state to the previously saved state. */ pPlacement->length = sizeof(WINDOWPLACEMENT);
/*
* If we have a previously saved placement state: set it. */ if ( pPlacement->rcNormalPosition.right != -1 ) {
if ( nCmdShow != SW_SHOWNORMAL ) pPlacement->showCmd = nCmdShow; else nCmdShow = pPlacement->showCmd;
SetWindowPlacement(pPlacement); } }
/*
* Perform the parent classes' ActivateFrame(). */ CFrameWnd::ActivateFrame(nCmdShow);
} // end CMainFrame::ActivateFrame
//---------------------------------------------------------------------------
// bugid352062
// Splash message for people who hate to RTFM
//---------------------------------------------------------------------------
void CMainFrame::InitWarningThread( PVOID *pvParam ) { // display messagebox
HWND hwnd = ( HWND )pvParam; DWORD dwSessionId;
if( ProcessIdToSessionId( GetCurrentProcessId( ) , &dwSessionId ) ) { if( dwSessionId == WTSGetActiveConsoleSessionId() ) { // check if we are to show the dialog box
// a) if the key does not exist show the dialog
// b) if the key exist and the value is zero show the dialog
HKEY hKey;
DWORD dwStatus = RegOpenKeyEx( HKEY_CURRENT_USER , TEXT( "Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\TSADMIN" ) , 0 , KEY_READ , &hKey );
if( dwStatus == ERROR_SUCCESS ) { DWORD dwData = 0;
DWORD dwSizeofData;
dwSizeofData = sizeof( DWORD );
RegQueryValueEx( hKey , TEXT( "DisableConsoleWarning" ) , 0 , NULL , ( LPBYTE )&dwData , &dwSizeofData );
RegCloseKey( hKey );
if( dwData != 0 ) { return; } }
::DialogBox( NULL , MAKEINTRESOURCE( IDD_DIALOG_FEATUREWARN ) , hwnd , ( DLGPROC )FWarnDlg ); } } }
//---------------------------------------------------------------------------
// Sets regkey DisableConsoleWarning
//---------------------------------------------------------------------------
INT_PTR CALLBACK FWarnDlg( HWND hwnd , UINT msg , WPARAM wp , LPARAM lp ) { switch( msg ) { case WM_INITDIALOG: { HICON hIcon = LoadIcon( NULL , IDI_INFORMATION ); SendMessage( GetDlgItem( hwnd , IDC_FWICON ) , STM_SETIMAGE, IMAGE_ICON, (LPARAM) hIcon );
// center dialog
RECT rParent; RECT rMe;
GetWindowRect( GetParent( hwnd ) , &rParent ); GetWindowRect( hwnd , &rMe );
int xDelta , yDelta;
xDelta = ( ( rParent.right - rParent.left ) - ( rMe.right - rMe.left ) ) / 2;
if( xDelta < 0 ) { xDelta = 0; }
yDelta = ( ( rParent.bottom - rParent.top ) - ( rMe.bottom - rMe.top ) ) / 2;
if( yDelta < 0 ) { yDelta = 0; }
SetWindowPos( hwnd , NULL , rParent.left + xDelta , rParent.top + yDelta , 0 , 0 , SWP_NOSIZE ); }
case WM_COMMAND:
if( LOWORD( wp ) == IDOK ) { // check the button and save the settings
HKEY hKey;
DWORD dwDisp;
DWORD dwStatus = RegCreateKeyEx( HKEY_CURRENT_USER , TEXT( "Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\TSADMIN" ) , 0 , NULL , 0 , KEY_ALL_ACCESS , NULL , &hKey , &dwDisp );
if( dwStatus == ERROR_SUCCESS ) { DWORD dwBool = 0;
if( IsDlgButtonChecked( hwnd , IDC_CHECK_NOMORE ) == BST_CHECKED ) { dwBool = ( DWORD )-1; }
RegSetValueEx( hKey , TEXT( "DisableConsoleWarning" ), 0 , REG_DWORD , ( LPBYTE )&dwBool , sizeof( dwBool ) );
RegCloseKey( hKey ); }
// HKCU\Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSADMIN\DisableConsoleWarning (REG_DWORD)
EndDialog( hwnd , 0 ); } }
return 0; }
//=----------------------------------------------------------------------------------------------
void CMainFrame::OnTab( ) { ODS( L"CMainFrame::OnTab received\n");
// pre tabbing
// set this state so that we can distinguish how the tabs received focus
// we can rule out the tab key
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
pDoc->SetOnTabFlag( );
m_pRightPane->SendMessage( WM_ADMIN_TABBED_VIEW , 0 , 0 );
pDoc->ResetOnTabFlag( );
// end tabbing
}
//=----------------------------------------------------------------------------------------------
void CMainFrame::OnShiftTab( ) { ODS( L"CMainFrame::OnShiftTab received\n" );
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
pDoc->SetOnTabFlag( );
m_pRightPane->SendMessage( WM_ADMIN_SHIFTTABBED_VIEW , 0 , 0 );
pDoc->ResetOnTabFlag( ); }
//=----------------------------------------------------------------------------------------------
//= this message is sent from the right pane item in the view
//
LRESULT CMainFrame::OnForceTreeViewFocus( WPARAM wp , LPARAM lp ) { m_pLeftPane->SetFocus( );
return 0; }
//=----------------------------------------------------------------------------------------------
// this is to rotate around the tabs and treeview
//
void CMainFrame::OnCtrlTab( ) { ODS( L"CMainFrame::OnCtrlTab received\n" ); m_pRightPane->SendMessage( WM_ADMIN_CTRLTABBED_VIEW , 0 , 0 ); }
//=----------------------------------------------------------------------------------------------
// this is to rotate around the tabs and treeview in the "other" direction
//
void CMainFrame::OnCtrlShiftTab( ) { ODS( L"CMainFrame::OnCtrlShiftTab\n" );
m_pRightPane->SendMessage( WM_ADMIN_CTRLSHIFTTABBED_VIEW , 0 , 0 ); }
//=-----------------------------------------------------------------------------------------
void CMainFrame::OnNextPane( ) { ODS( L"CMainFrame::OnNextPane\n" ); m_pRightPane->SendMessage( WM_ADMIN_NEXTPANE_VIEW , 0 , 0 ); }
//=-----------------------------------------------------------------------------------------
void CMainFrame::OnDelFavNode( ) { ODS( L"CMainFrame::OnDelFavNode\n" );
m_pLeftPane->SendMessage( WM_ADMIN_DELTREE_NODE , 0 , 0 ); }
//This will find the server with the given name
//and place the cursor on it. The server may be
//added to the list if it's not already there
bool CMainFrame::LocateServer(LPCTSTR sServerName) { TCHAR szServerName[ 256 ]; CString cstrTitle; CString cstrMsg;
CWaitCursor wait;
DBGMSG( L"Server to connect to is %s\n" , sServerName );
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
// resolve name
// check to see if its an ipv4 address
lstrcpy( szServerName , sServerName );
WSADATA wsaData; if( WSAStartup( 0x202 , &wsaData ) == 0 ) { char szAnsiServerName[ 256 ]; WideCharToMultiByte( CP_OEMCP , 0 , szServerName, -1, szAnsiServerName , sizeof( szAnsiServerName ), NULL , NULL );
int nAddr = 0; nAddr = inet_addr( szAnsiServerName );
// if this is a valid ipv4 address then lets get the host name
// otherwise lets fall through and see if its a valid server name
if( nAddr != 0 && nAddr != INADDR_NONE ) { ODS( L"Server name is IPV4\n" );
struct hostent *pHostEnt; pHostEnt = gethostbyaddr( ( char * )&nAddr , 4 , AF_INET );
if( pHostEnt != NULL ) { DWORD dwSize; TCHAR szDnsServerName[ 256 ]; MultiByteToWideChar( CP_OEMCP , 0 , pHostEnt->h_name , -1, szDnsServerName, sizeof( szDnsServerName ) / sizeof( TCHAR ) );
dwSize = sizeof( szServerName ) / sizeof( TCHAR );
DnsHostnameToComputerName( szDnsServerName , szServerName , &dwSize );
} else { // there was an error ( ip addr was probably not valid )
// display error
cstrTitle.LoadString( AFX_IDS_APP_TITLE ); cstrMsg.LoadString( IDS_NO_SERVER );
MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION );
WSACleanup();
return FALSE; }
}
WSACleanup(); }
CServer *pServer = pDoc->FindServerByName( szServerName );
if( pServer == NULL ) { TCHAR szDomainName[ 256 ];
// this means that the server is not in the list
// let's find out what domain this server belongs to
DBGMSG( L"%s could not be found in the server list\n" , szServerName );
// Verify it's a terminal server we can connect to.
HANDLE hTerminalServer = NULL;
hTerminalServer = WinStationOpenServer( szServerName );
if( hTerminalServer == NULL ) { DBGMSG( L"WinstationOpenServer failed with %d\n" , GetLastError( ) ); cstrTitle.LoadString( AFX_IDS_APP_TITLE ); cstrMsg.LoadString( IDS_NO_SERVER ); MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION ); return false; }
WinStationCloseServer( hTerminalServer );
DSROLE_PRIMARY_DOMAIN_INFO_BASIC *pDsRPDIB = NULL;
DWORD dwStatus = DsRoleGetPrimaryDomainInformation( szServerName , DsRolePrimaryDomainInfoBasic, ( PBYTE * )&pDsRPDIB );
DBGMSG( L"DsRoleGetPrimaryDomainInformation returned 0x%x\n" , dwStatus );
if( dwStatus == ERROR_SUCCESS && pDsRPDIB != NULL ) { lstrcpy( szDomainName , pDsRPDIB->DomainNameFlat );
DsRoleFreeMemory( pDsRPDIB ); }
if( dwStatus != ERROR_SUCCESS ) { // otherwise the server probably does not exist or its on
// a non-trusted domain
LPTSTR pBuffer = NULL; cstrTitle.LoadString( AFX_IDS_APP_TITLE ); // cstrMsg.LoadString( IDS_NO_SERVER );
::FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, //ignored
dwStatus , //message ID
MAKELANGID( LANG_NEUTRAL, SUBLANG_NEUTRAL ), //message language
(LPTSTR)&pBuffer, //address of buffer pointer
0, //minimum buffer size
NULL );
if( pBuffer != NULL ) { cstrMsg.Format( IDS_NOSERVER_REASON , pBuffer );
LocalFree( pBuffer ); } else { cstrMsg.Format( IDS_NOSERVER_REASON , TEXT("" ) ); } MessageBox( cstrMsg , cstrTitle , MB_OK | MB_ICONINFORMATION ); return false; } else { // find the domain
BOOL bFound = FALSE;
CObList *pDomainList = pDoc->GetDomainList();
POSITION pos = pDomainList->GetHeadPosition(); while( pos ) { CDomain *pDomain = ( CDomain* )pDomainList->GetNext( pos );
if( lstrcmpi( pDomain->GetName( ) , szDomainName ) == 0 ) { bFound = TRUE;
CServer *pServer = new CServer( pDomain , szServerName , FALSE , FALSE );
if( pServer == NULL ) { break; }
pServer->SetManualFind(); // add server to list
pDoc->AddServer( pServer );
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer );
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer ); break; } } if( !bFound ) { CDomain *pDomain = new CDomain( szDomainName ); if( pDomain == NULL ) return false;
pDoc->AddDomain( pDomain ); m_pLeftPane->SendMessage( WM_ADMIN_ADD_DOMAIN , (WPARAM)NULL , ( LPARAM )pDomain );
CServer *pServer = new CServer( pDomain , szServerName , FALSE , FALSE );
if( pServer == NULL ) return false;
pServer->SetManualFind(); // add server to list
pDoc->AddServer( pServer );
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer );
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer ); } } } else { // scroll to server
DBGMSG( L"Server %s is in the list\n",szServerName );
if( pServer->IsState(SS_DISCONNECTING) ) { TCHAR buf[ 256 ]; ODS( L"but it's gone away so we're not jumping to server\n" ); cstrTitle.LoadString( AFX_IDS_APP_TITLE ); cstrMsg.LoadString( IDS_CURRENT_DISCON );
wsprintf( buf , cstrMsg , szServerName ); MessageBox( buf , cstrTitle , MB_OK | MB_ICONINFORMATION );
return false; }
if( pServer->GetTreeItem( ) == NULL ) { ODS( L"this server has no association to the tree add it now\n" );
SendMessage( WM_ADMIN_ADD_SERVER , ( WPARAM )TVI_SORT , ( LPARAM )pServer ); }
m_pLeftPane->SendMessage( WM_ADMIN_GOTO_SERVER , 0 , ( LPARAM )pServer ); }
return true; }
//=-----------------------------------------------------------------------------------------
void CMainFrame::OnFindServer( ) { CMyDialog dlg;
if( dlg.DoModal( ) == IDOK ) { if (LocateServer(dlg.m_cstrServerName)); m_pLeftPane->SendMessage(WM_ADMIN_CONNECT_TO_SERVER, 0, 0); } }
//=-----------------------------------------------------------------
LRESULT CMainFrame::OnAdminGetTVStates( WPARAM wp , LPARAM lp ) { ODS( L"CMainFrame::OnAdminGetTVStates\n" ); return m_pLeftPane->SendMessage( WM_ADMIN_GET_TV_STATES , 0 , 0 ); }
//=-----------------------------------------------------------------
LRESULT CMainFrame::OnAdminUpdateTVStates( WPARAM , LPARAM ) { ODS( L"CMainFrame::OnAdminUpdateTVStates\n" ); return m_pLeftPane->SendMessage( WM_ADMIN_UPDATE_TVSTATE , 0 , 0 ); }
//=-----------------------------------------------------------------
void CMainFrame::OnEmptyFavorites( ) { ODS( L"CMainFrame!OnEmptyFavorites\n" );
m_pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 0 , 0 );
}
void CMainFrame::OnUpdateEmptyFavs( CCmdUI* pCmdUI ) { BOOL b = ( BOOL )m_pLeftPane->SendMessage( WM_ISFAVLISTEMPTY , 0 , 0 );
pCmdUI->Enable( !b ); } //=-----------------------------------------------------------------
#ifdef _STRESS_BUILD
void CMainFrame::OnAddAllServersToFavorites( ) { ODS( L"!OnAddAllServersToFavorites -- if you're seeing this you're running a special stress build\n" ); // loop through every server and add to fav's
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument();
CObList *pServerList = pDoc->GetServerList(); POSITION pos = pServerList->GetHeadPosition();
while( pos ) { CServer *pServer = ( CServer* )pServerList->GetNext( pos );
if( pServer != NULL && !pServer->IsState( SS_DISCONNECTING ) && pServer->GetTreeItemFromFav() == NULL ) { m_pLeftPane->SendMessage( WM_ADMIN_ADDSERVERTOFAV , 0 , ( LPARAM )pServer ); } } }
//=-----------------------------------------------------------------
void CMainFrame::OnRunStress( ) { ODS( L"OnRunStress! Stress starting...\n" );
AfxBeginThread((AFX_THREADPROC)RunStress , ( PVOID )m_pLeftPane );
}
//=-----------------------------------------------------------------
void CMainFrame::OnRunStressLite( ) { ODS( L"OnRunStressLite! Stress lite starting...\n" );
AfxBeginThread((AFX_THREADPROC)RunStressLite , ( PVOID )m_pLeftPane );
}
//=-----------------------------------------------------------------
DWORD RunStressLite( PVOID pv ) { CWnd *pLeftPane = ( CWnd * )pv;
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument(); CObList *pDomainList = pDoc->GetDomainList();
CFrameWnd *p = (CFrameWnd*)pDoc->GetMainWnd();
// get all domains to start enumerating
pDoc->FindAllServers( ); int nStress = 0; while( 1 ) { DBGMSG( L"Stress lite run #%d\n" , nStress );
Sleep( 2 * 1000 * 60 );
// add all servers to favorites
ODS( L"STRES RUN! Adding all servers to favorites\n" );
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_FAVALLADD , ( LPARAM )p->GetSafeHwnd( ) );
pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
// wait 1 minutes
Sleep( 1 * 1000 * 60 );
// remove all servers from favorites
ODS( L"STRESS RUN! emptying favorites\n" );
pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 1 , 0 );
nStress++;
// start over ( no end );
}
}
//=-----------------------------------------------------------------
DWORD RunStress( PVOID pv ) { CWnd *pLeftPane = ( CWnd * )pv;
CWinAdminDoc* pDoc = (CWinAdminDoc*)((CWinAdminApp*)AfxGetApp())->GetDocument(); CObList *pDomainList = pDoc->GetDomainList();
CFrameWnd *p = (CFrameWnd*)pDoc->GetMainWnd();
// select each domain connect to each domain
POSITION pos = pDomainList->GetHeadPosition();
while( pos ) { // Get a pointer to the domain
CDomain *pDomain = (CDomain*)pDomainList->GetNext(pos);
// If this domain isn't currently enumerating servers, tell it to
if( !pDomain->GetThreadPointer( ) ) { // refresh server
if( lstrcmpi( pDomain->GetName( ) , L"ASIA" ) == 0 || lstrcmpi( pDomain->GetName( ) , L"HAIFA" ) == 0 ) { DBGMSG( L"STRESS RUN! Enumerating %s\n", pDomain->GetName( ) ); pDomain->StartEnumerating(); } }
} while( 1 ) { // wait a half a second.
Sleep( 1 * 10 * 1000 );
// pLeftPane->SendMessage( WM_ADMIN_COLLAPSEALL , 0 , 0 );
// connect to them all
ODS( L"\nSTRESS RUN! Connecting to all servers\n\n" ); p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_CONNECT,( LPARAM )p->GetSafeHwnd( ) ); // pDoc->ConnectToAllServers();
Sleep( 1 * 30 * 1000 );
// pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
// disconnect them all
ODS( L"\nSTRESS RUN! Disconnecting from all servers\n\n" );
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_DISCONNECT,( LPARAM )p->GetSafeHwnd( ) );
// pDoc->DisconnectFromAllServers( );
ODS( L"\nSTRESS RUN! waiting for completion\n\n" );
while( g_fWaitForAllServersToDisconnect );
ODS( L"\nSTRESS RUN! done completing\n\n" );
// pLeftPane->SendMessage( WM_ADMIN_COLLAPSEALL , 0 , 0 );
// add all to favorites
ODS( L"\nSTRESS RUN! Adding all servers to favorites\n\n" );
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_FAVALLADD , ( LPARAM )p->GetSafeHwnd( ) );
// pLeftPane->SendMessage( WM_ADMIN_EXPANDALL , 0 , 0 );
// connect to them all
Sleep( 1 * 60 * 1000 );
ODS( L"\nSTRESS RUN! Connecting phase 2 to all servers\n\n" ); // pDoc->ConnectToAllServers();
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_CONNECT,( LPARAM )p->GetSafeHwnd( ) );
Sleep( 1 * 30 * 1000 );
ODS( L"\nSTRESS RUN! Disconnecting phase 2 from all servers\n\n" );
// pDoc->DisconnectFromAllServers( );
p->SendMessage( WM_COMMAND , ( WPARAM )IDM_ALLSERVERS_DISCONNECT,( LPARAM )p->GetSafeHwnd( ) );
while( g_fWaitForAllServersToDisconnect );
// remove from favs
ODS( L"STRESS RUN! emptying favorites\n" );
pLeftPane->SendMessage( IDM_ALLSERVERS_EMPTYFAVORITES , 1 , 0 ); } return 0; }
#endif
|