/*++ Copyright (c) 1994-1998 Microsoft Corporation Module Name : iisobj.h Abstract: IIS Objects Definitions Author: Ronald Meijer (ronaldm) Project: Internet Services Manager Revision History: --*/ #ifndef _IISOBJ_H #define _IISOBJ_H // // Forward Definitions // class CMenuEx; class CServerInfo; class CServiceInfo; class CIISChildNode; class CIISInstance; #define MAX_COLUMNS (10) // // Bitmap indices into the imagelist // enum { // // Indices into VIEW16 and VIEW32 // BMP_LOCAL_COMPUTER, BMP_STOPPED, BMP_PAUSED, BMP_STARTED, BMP_UNKNOWN, BMP_ERROR, BMP_DIRECTORY, BMP_FILE, BMP_ROOT, BMP_COMPUTER, BMP_APPLICATION, // // Added on singly from IMGR16 and IMGR32 // BMP_INETMGR, // // Don't move this one, this is where the service bitmaps start // BMP_SERVICE }; /* abstract */ class CIISObject : public CObjectPlus /*++ Class Description: Base IIS-configurable object. This is an abstract base class Public Interface: CIISObject : Constructor operator CServerInfo * : Cast to serverinfo (could be NULL) operator LPCTSTR : Cast to description string operator int : Cast to bitmap index BOOL IsStartable : TRUE if object can be started BOOL IsStoppable : TRUE if object can be stopped Virtual Public Interface (needs to be implemented in derived classes): BOOL IsControllable : TRUE if object can be started/stopped BOOL IsPausable : TRUE if object can be paused BOOL IsConfigurable : TRUE if the object is configurable BOOL IsMMCConfigurable : TRUE if the object is configurable with MMC BOOL IsAccessible : FALSE if access was denied to this object BOOL IsDeletable : TRUE if the object is deletable BOOL IsClusterEnabled : TRUE if the object is cluster enabled BOOL IsCloneable : TRUE if the item can be cloned. BOOL IsRenameable : TRUE if the object can be renamed BOOL IsRunning : TRUE if the object is in a running state BOOL IsStopped : TRUE if the object is in a stopped state BOOL IsPaused : TRUE if the object is in a paused state BOOL IsExplorable : TRUE if the object is explorable BOOL IsOpenable : TRUE if the object is openable BOOL IsBrowsable : TRUE if the object is browsable BOOL CanConfigureStopped : TRUE if the object can be configured while stopped BOOL ChildrenOutOfDate : TRUE if the object's children need to be fetched BOOL IsLocalMachine : TRUE if applicable machine name owner is local BOOL HandleUI : TRUE if we need to confirm before deletion DWORD QueryErrorCode : Return API error code (if applicable) DWORD ChangeState : Change the current state of the object DWORD Configure : Configure this object DWORD ConfigureMMC : Configure this object with MMC DWORD Rename : Rename the object int QueryState : Return the (running/stopped/paused) state int QueryBitmapIndex : Get the bitmap index for the object LPCTSTR GetStateText : Get text representation of current state LPCTSTR GetDisplayText : Generate display text for the object LPCTSTR GetMachineName : Get machine name (if applicable) LPCTSTR GetServiceName : Get service name (if applicable) LPCTSTR GetComment : Get comment (if applicable) CServerInfo * GetServerInfo : Get server info object (if applicable) --*/ { protected: // // Protected constructor // CIISObject( IN const GUID guid, IN LPCTSTR lpszNodeName = _T(""), IN LPCTSTR lpszPhysicalPath = _T("") ); public: void SetScopeHandle(IN HSCOPEITEM hScopeItem, BOOL fIsParentScope = FALSE); HSCOPEITEM GetScopeHandle() const { return m_hScopeItem; } BOOL ScopeHandleIsParent() const { return m_fIsParentScope; } BOOL IsScopeSelected(); // // Static Access // public: static void AttachScopeView(IN LPCONSOLENAMESPACE lpcnsScopeView); static LPCONSOLENAMESPACE GetScopeView(); static BOOL m_fIsExtension; // // Virtual Interface // public: // // Type Functions // virtual BOOL IsControllable() const { return FALSE; } virtual BOOL IsPausable() const { return FALSE; } virtual BOOL IsConfigurable() const { return FALSE; } virtual BOOL IsMMCConfigurable() const { return FALSE; } virtual BOOL IsAccessible() const { return TRUE; } virtual BOOL IsDeletable() const { return FALSE; } virtual BOOL IsClusterEnabled() const { return FALSE; } virtual BOOL HandleUI() const { return TRUE; } // // State Functions // virtual BOOL IsRunning() const { return FALSE; } virtual BOOL IsStopped() const { return FALSE; } virtual BOOL IsPaused() const { return FALSE; } virtual BOOL IsRenamable() const { return FALSE; } virtual BOOL IsConnectable() const { return FALSE; } virtual BOOL IsExtension() const {return m_fIsExtension;} virtual BOOL IsClonable() const { return FALSE; } virtual BOOL IsBrowsable() const { return FALSE; } virtual BOOL IsExplorable() const { return FALSE; } virtual BOOL IsOpenable() const { return FALSE; } virtual BOOL IsRefreshable() const { return TRUE; } virtual BOOL CanConfigureStopped() const { return FALSE; } virtual BOOL ChildrenOutOfDate() const { return FALSE; } // // Get the error return code // virtual HRESULT QueryErrorCode() const { return S_OK; } virtual int QueryState() const { return INetServiceUnknown; } // // Access Functions (must be implemented in the derived class) // virtual HRESULT ChangeState(IN int nNewState); virtual HRESULT Configure(IN CWnd * pParent); virtual HRESULT ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ); virtual HRESULT RefreshData(); virtual HRESULT Delete(); virtual HRESULT SecurityWizard(); virtual int Compare(int nCol, CIISObject * pObject); // // Bring up in "explore" view // virtual HRESULT Explore(); // // Bring up in "open" view // virtual HRESULT Open(); // // Bring up in the browser // virtual HRESULT Browse(); static void InitializeHeaders(IN LPHEADERCTRL pHeader); virtual void InitializeChildHeaders(IN LPHEADERCTRL pHeader); virtual BOOL IsLeafNode() const { return FALSE; } virtual HRESULT AddMenuItems( IN LPCONTEXTMENUCALLBACK pContextMenuCallback ); virtual HRESULT AddNextTaskpadItem( OUT MMC_TASK * pTask ); virtual HRESULT AddChildNode( IN OUT CIISChildNode *& pChild ); virtual BOOL ChildrenExpanded() const { return m_tmChildrenExpanded != 0L;} virtual void CleanChildren(); virtual void DirtyChildren(); virtual BOOL SupportsFileSystem() const { return FALSE; } virtual BOOL IsFileSystemNode() const { return FALSE; } virtual BOOL SupportsChildren() const { return FALSE; } virtual BOOL SupportsSecurityWizard() const { return FALSE; } virtual HRESULT ExpandChildren(HSCOPEITEM pParent); virtual HRESULT Rename(LPCTSTR NewName); virtual LPCTSTR GetStateText() const; // // Display Context Functions // /* PURE */ virtual int QueryBitmapIndex() const = 0; /* PURE */ virtual LPCTSTR GetDisplayText( OUT CString & strText ) const = 0; virtual void GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const; // // Get the machine name // virtual LPCTSTR GetMachineName() const { return NULL; } // // Determine if the local machine name is local // virtual BOOL IsLocalMachine() const { return FALSE; } // // Get the service name // virtual LPCTSTR GetServiceName() const { return NULL; } // // Get the comment // virtual LPCTSTR GetComment() const { return NULL; } // // Get the server info (service/server pair) // object that controls this object // virtual CServerInfo * GetServerInfo() { return NULL; } // // Get metabase node name // virtual LPCTSTR QueryNodeName(BOOL fMetabasePath = FALSE) const { return m_strNodeName; } // // Find the owner instance // virtual CIISInstance * FindOwnerInstance() { return NULL; } // // Check to see if the current node is a terminal point // in the metabasepath // virtual BOOL IsTerminalPoint(BOOL fFullMetaPath) const { return FALSE; } // // Get parent CIISObject // virtual CIISObject * GetParentObject() const; // // Get parent path for this node // LPCTSTR BuildParentPath( OUT CString & strParentPath, BOOL fMetabasePath ) const; // // Get complete path for this node // LPCTSTR BuildFullPath( OUT CString & strPath, BOOL fMetabasePath ) const; // // Get complete physical path for this node // LPCTSTR BuildPhysicalPath( OUT CString & strPhysicalPath ) const; // // Assumed Functions // public: BOOL IsValidObject() const; BOOL IsStartable() const { return IsControllable() && !IsRunning(); } BOOL IsStoppable() const { return IsControllable() && (IsRunning() || IsPaused() ); } BOOL OK() const { return QueryErrorCode() == S_OK; } const GUID QueryGUID() const { return m_guid; } const GUID * GetGUIDPtr() { return &m_guid; } CString & GetNodeName() { return m_strNodeName; } LPCTSTR QueryPhysicalPath() const { return m_strPhysicalPath; } CString& GetPhysicalPath() { return m_strPhysicalPath; } BOOL IsVirtualDirectory() const { return !m_strPhysicalPath.IsEmpty(); } // // Get the redirected path // BOOL IsRedirected() const { return !m_strRedirPath.IsEmpty(); } BOOL IsChildOnlyRedir() const { return m_fChildOnlyRedir; } LPCTSTR QueryRedirPath() { return m_strRedirPath; } // // Get the instance ID // DWORD QueryInstanceID(); // // Conversion Operators // public: operator CServerInfo *() { return GetServerInfo(); } // // Get display text // operator LPCTSTR(); // // Get bitmap index // operator int() { return QueryBitmapIndex(); } // // GUID // operator const GUID() { return QueryGUID(); } // // Refresh display // void RefreshDisplayInfo(); public: // // Add Menu Command // static HRESULT AddMenuItemByCommand( IN LPCONTEXTMENUCALLBACK lpContextMenuCallback, IN LONG lCmdID, IN LONG fFlags = 0 ); static HRESULT AddTaskpadItemByInfo( OUT MMC_TASK * pTask, IN LONG lCommandID, IN LPCTSTR lpszMouseOn, IN LPCTSTR lpszMouseOff, IN LPCTSTR lpszText, IN LPCTSTR lpszHelpString ); static HRESULT AddTaskpadItemByCommand( IN LONG lCmdID, OUT MMC_TASK * pTask, IN HINSTANCE hInstance = (HINSTANCE)-1 ); protected: static CMenuEx s_mnu; static CString s_strProperties; static CString s_strRunning; static CString s_strPaused; static CString s_strStopped; static CString s_strUnknown; static CString s_strYes; static CString s_strNo; static CString s_strTCPIP; static CString s_strNetBIOS; static CString s_strDefaultIP; static CString s_strRedirect; static time_t s_lExpirationTime; static LPCONSOLENAMESPACE s_lpcnsScopeView; protected: // // Result View Helpers // static void BuildResultView( IN LPHEADERCTRL pHeader, IN int cColumns, IN int * pnIDS, IN int * pnWidths ); // // Determine if instances can be added on this // machine // static BOOL CanAddInstance( IN LPCTSTR lpszMachineName ); protected: // // GUID for runtime type checking // const GUID m_guid; time_t m_tmChildrenExpanded; HSCOPEITEM m_hScopeItem; BOOL m_fChildOnlyRedir; BOOL m_fIsParentScope; CString m_strNodeName; CString m_strPhysicalPath; CString m_strRedirPath; }; class CIISMachine : public CIISObject { /*++ Class Description: IIS Machine object. This object contains only a machine name, and is the only object that does not have a CServerInfo pointer Public Interface: CIISMachine : Constructor BOOL IsConfigurable : TRUE if the object is configurable DWORD Configure : Configure this object int QueryBitmapIndex : Get the bitmap index for the object CMenu * PrepareContextMenu : Prepare context menu for object LPCTSTR GetDisplayText : Generate display text for the object LPCTSTR GetMachineName : Get machine name (if applicable) --*/ public: CIISMachine( IN LPCTSTR lpszMachineName ); // // Access Functions // public: BOOL m_fIsExtension; // // Virtual Interface // public: // // Yes, can connect from here // virtual BOOL IsConnectable() const { return TRUE; } virtual BOOL IsConfigurable() const; virtual BOOL IsMMCConfigurable() const { return m_fIsAdministrator; } virtual BOOL IsExtension() const {return m_fIsExtension;} virtual HRESULT RefreshData() { return ERROR_SUCCESS; } virtual HRESULT Configure( IN CWnd * pParent ); virtual HRESULT ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ); // // Display Context Functions // virtual int QueryBitmapIndex() const; virtual LPCTSTR GetDisplayText( OUT CString & strText ) const; virtual void GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const; virtual HRESULT AddMenuItems( IN LPCONTEXTMENUCALLBACK pContextMenuCallback ); virtual HRESULT AddNextTaskpadItem( OUT MMC_TASK * pTask ); virtual LPCTSTR GetMachineName() const { return m_strMachineName; } // // Check to see if the current node is a terminal point // in the metabasepath. Base class method doesn't work correctly // in case of extension // virtual BOOL IsTerminalPoint(BOOL fFullMetaPath) const { return TRUE; } virtual BOOL IsLocalMachine() const { return m_fLocal; } static void InitializeHeaders(LPHEADERCTRL pHeader); virtual int Compare(int nCol, CIISObject * pObject); virtual void InitializeChildHeaders(LPHEADERCTRL pHeader); public: inline static void AttachNewInstanceCmds( CObListPlus * poblNewInstanceCmds ) { s_poblNewInstanceCmds = poblNewInstanceCmds; } // BOOL IsLocal() const { return m_fLocal; } // Check to see if current user is administrator on the box BOOL IsAdministrator() const { return m_fIsAdministrator; } protected: static CObListPlus * s_poblNewInstanceCmds; static CString s_strLocalMachine; protected: // // Result View Layout // enum { COL_NAME, COL_LOCAL, COL_TYPE, COL_STATUS, /**/ COL_TOTAL }; static int rgnLabels[COL_TOTAL]; static int rgnWidths[COL_TOTAL]; private: CString m_strMachineName; CString m_strDisplayName; BOOL m_fLocal; BOOL m_fIsAdministrator; }; class CIISInstance : public CIISObject { /*++ Class Description: IIS Instance object. For down-level service types, this is a simple wrapper for the CServerInfo object. Public Interface: CIISInstance : Constructors for regular and down-level QueryID : Get instance ID or 0 for down-level QueryServiceID : Get the service ID operator == : Compare service ID and instance ID IsDownLevel : TRUE if this is a down-level server w/o instances SetViewType : Bitmap index and text change depending on if the object is in server, service view. or report view. BOOL IsControllable : TRUE if object can be started/stopped BOOL IsPausable : TRUE if object can be paused BOOL IsConfigurable : TRUE if the object is configurable BOOL IsAccessible : FALSE if access was denied to this object BOOL IsDeletable : TRUE if the object is deletable BOOL IsClusterEnabled : TRUE if the object is cluster enabled BOOL IsRunning : TRUE if the object is in a running state BOOL IsStopped : TRUE if the object is in a stopped state BOOL IsPaused : TRUE if the object is in a paused state BOOL CanConfigureStopped : TRUE if the object can be configured while stopped. DWORD ChangeState : Change the current state of the object DWORD Configure : Configure this object int QueryState : Return the (running/stopped/paused) state int QueryBitmapIndex : Get the bitmap index for the object LPCTSTR GetStateText : Get text representation of current state LPCTSTR GetDisplayText : Generate display text for the object LPCTSTR GetMachineName : Get machine name (if applicable) LPCTSTR GetServiceName : Get service name LPCTSTR GetComment : Get comment (if applicable) CServerInfo * GetServerInfo : Get server info object pointer --*/ public: // // Constructor for down-level (single-instance server) // CIISInstance( IN CServerInfo * pServerInfo ); CIISInstance( IN ISMINSTANCEINFO * pii, IN CServerInfo * pServerInfo ); void InitializeFromStruct( IN ISMINSTANCEINFO * pii ); // // Access Functions // public: DWORD QueryID() const { return m_dwID; } BOOL IsDownLevel() const { return m_fDownLevel; } DWORD QueryServiceID() const; BOOL operator ==(CIISInstance & target); // // Virtual Interface // public: // // Type Functions // virtual BOOL IsControllable() const; virtual BOOL IsPausable() const; virtual BOOL IsConfigurable() const; virtual BOOL IsMMCConfigurable() const; virtual BOOL IsAccessible() const; virtual BOOL IsDeletable() const; virtual BOOL IsClusterEnabled() const; virtual BOOL SupportsFileSystem() const; virtual BOOL SupportsChildren() const; virtual BOOL SupportsSecurityWizard() const; virtual BOOL IsLeafNode() const; // // State Functions // virtual BOOL IsRunning() const; virtual BOOL IsStopped() const; virtual BOOL IsPaused() const; // // Old single instances need to be running // virtual BOOL CanConfigureStopped() const { return !m_fDownLevel; } // // Get the error return code // virtual HRESULT QueryErrorCode() const { return m_hrError; } virtual HRESULT AddChildNode( CIISChildNode *& pChild ); virtual BOOL IsBrowsable() const { return !IsDownLevel() && HasWebProtocol() && IsRunning(); } virtual BOOL IsExplorable() const { return !IsDownLevel(); } virtual BOOL IsOpenable() const { return !IsDownLevel(); } virtual HRESULT AddMenuItems( IN LPCONTEXTMENUCALLBACK pContextMenuCallback ); virtual HRESULT AddNextTaskpadItem( OUT MMC_TASK * pTask ); // // Access Functions // virtual int QueryState() const; virtual HRESULT Delete(); virtual HRESULT SecurityWizard(); virtual HRESULT ChangeState(int nNewState); virtual HRESULT Configure( IN CWnd * pParent ); virtual HRESULT ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ); virtual HRESULT RefreshData(); // // Display Context Functions // virtual int QueryBitmapIndex() const; virtual LPCTSTR GetStateText() const; virtual LPCTSTR GetDisplayText( OUT CString & strText ) const; virtual void GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const; // // Get the machine name // virtual LPCTSTR GetMachineName() const { return m_strMachine; } virtual BOOL IsLocalMachine() const { return m_fLocalMachine; } // // Get the service name // virtual LPCTSTR GetServiceName() const; // // Get the comment // virtual LPCTSTR GetComment() const; // // Build result view // static void InitializeHeaders(LPHEADERCTRL pHeader); virtual void InitializeChildHeaders(LPHEADERCTRL pHeader); virtual int Compare(int nCol, CIISObject * pObject); virtual BOOL ChildrenExpanded() const; virtual HRESULT ExpandChildren(HSCOPEITEM pParent); // // Get the server info (service/server pair) // object that controls this instance // virtual CServerInfo * GetServerInfo() { return m_pServerInfo; } virtual CIISInstance * FindOwnerInstance() { return this; } virtual BOOL IsTerminalPoint(IN BOOL fFullMetaPath) const; // // Get metabase node name // virtual LPCTSTR QueryNodeName(BOOL fMetabasePath = FALSE) const; // // Access // public: USHORT GetPort() const { return m_sPort; } BOOL HasComment() const { return !m_strComment.IsEmpty(); } BOOL HasIPAddress() const { return m_dwIPAddress != 0L; } DWORD GetIPAddress() const { return m_dwIPAddress; } BOOL HasHostHeaderName() const { return !m_strHostHeaderName.IsEmpty(); } LPCTSTR GetHostHeaderName() const { return (LPCTSTR)m_strHostHeaderName; } BOOL SupportsInstances() const; BOOL HasWebProtocol() const; HRESULT ShellBrowsePath(LPCTSTR lpszPath); public: static void SetViewType( BOOL fServerView = TRUE, BOOL fAppendState = TRUE ); protected: static BOOL IsInitialized(); static void InitializeStrings(); protected: static CString s_strFormatState; static BOOL s_fServerView; static BOOL s_fAppendState; protected: // // Result View Layout // enum { COL_DESCRIPTION, COL_STATE, COL_DOMAIN_NAME, COL_IP_ADDRESS, COL_TCP_PORT, COL_STATUS, /**/ COL_TOTAL }; static int rgnLabels[COL_TOTAL]; static int rgnWidths[COL_TOTAL]; protected: int m_nState; BOOL m_fDownLevel; BOOL m_fDeletable; BOOL m_fClusterEnabled; BOOL m_fLocalMachine; USHORT m_sPort; DWORD m_dwID; DWORD m_dwIPAddress; HRESULT m_hrError; CString m_strHostHeaderName; CString m_strComment; CString m_strMachine; CServerInfo * m_pServerInfo; }; class CIISChildNode : public CIISObject /*++ Class Description: Public Interface: --*/ { public: CIISChildNode( IN ISMCHILDINFO * pii, IN CIISInstance * pOwner ); void InitializeFromStruct( IN ISMCHILDINFO * pii ); // // Access Functions // public: BOOL IsEnabledApplication() const { return m_fEnabledApplication; } virtual CIISInstance * FindOwnerInstance() { return m_pOwner; } // // Get the server info (service/server pair) // object that controls this object // virtual CServerInfo * GetServerInfo(); // // Get the machine name // virtual LPCTSTR GetMachineName() const; virtual BOOL IsLocalMachine() const; // // Get the service name // virtual LPCTSTR GetServiceName() const; // // Virtual Interface // public: // // Display Context Functions // virtual int QueryBitmapIndex() const; virtual LPCTSTR GetDisplayText( OUT CString & strText ) const; virtual void GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const; static void InitializeHeaders(LPHEADERCTRL pHeader); virtual void InitializeChildHeaders(LPHEADERCTRL pHeader); virtual HRESULT AddChildNode( IN OUT CIISChildNode *& pChild ); virtual int Compare( IN int nCol, IN CIISObject * pObject ); virtual BOOL SupportsFileSystem() const; virtual BOOL SupportsChildren() const { return TRUE; } virtual BOOL SupportsSecurityWizard() const; virtual BOOL IsBrowsable() const { return m_pOwner && m_pOwner->IsBrowsable(); } virtual BOOL IsExplorable() const { return TRUE; } virtual BOOL IsOpenable() const { return TRUE; } virtual BOOL IsConfigurable() const { return TRUE; } virtual BOOL IsMMCConfigurable() const; virtual BOOL IsDeletable() const { return TRUE; } virtual BOOL IsRenamable() const { return TRUE; } virtual HRESULT QueryErrorCode() const { return m_hrError; } virtual HRESULT AddMenuItems( IN LPCONTEXTMENUCALLBACK pContextMenuCallback ); virtual HRESULT AddNextTaskpadItem( OUT MMC_TASK * pTask ); virtual HRESULT Rename( IN LPCTSTR NewName ); virtual HRESULT Delete(); virtual HRESULT SecurityWizard(); virtual HRESULT Configure( IN CWnd * pParent ); virtual HRESULT ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ); virtual HRESULT RefreshData(); protected: // // Result View Layout // enum { COL_ALIAS, COL_PATH, COL_STATUS, /**/ COL_TOTAL }; static int rgnLabels[COL_TOTAL]; static int rgnWidths[COL_TOTAL]; protected: BOOL m_fEnabledApplication; HRESULT m_hrError; CIISInstance * m_pOwner; }; class CIISFileNode : public CIISObject /*++ Class Description: Public Interface: --*/ { public: CIISFileNode( IN LPCTSTR lpszAlias, // Name of current node IN DWORD dwAttributes, IN CIISInstance * pOwner, IN LPCTSTR lpszRedirect, // = NULL IN BOOL fDir = TRUE ); // // Access Functions // public: BOOL IsEnabledApplication() const { return m_fEnabledApplication; } // // Get the redirected path // DWORD QueryAttributes() const { return m_dwAttributes; } BOOL IsDirectory() const; BOOL IsFile() const { return !IsDirectory(); } virtual CIISInstance * FindOwnerInstance() { return m_pOwner; } // // Get the server info (service/server pair) // object that controls this object // virtual CServerInfo * GetServerInfo(); // // Get the machine name // virtual LPCTSTR GetMachineName() const; virtual BOOL IsLocalMachine() const; // // Get the service name // virtual LPCTSTR GetServiceName() const; // // Match up this file item to metabase properties // HRESULT FetchMetaInformation( IN CString & strParent, OUT BOOL * pfVirtualDirectory = NULL ); // // Virtual Interface // public: // // Display Context Functions // virtual int QueryBitmapIndex() const; virtual LPCTSTR GetDisplayText( OUT CString & strText ) const; virtual void GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const; static void InitializeHeaders(LPHEADERCTRL pHeader); virtual void InitializeChildHeaders(LPHEADERCTRL pHeader); virtual int Compare(int nCol, CIISObject * pObject); virtual BOOL SupportsFileSystem() const { return IsDirectory(); } virtual BOOL IsFileSystemNode() const { return TRUE; } virtual BOOL SupportsChildren() const { return IsDirectory(); } virtual BOOL SupportsSecurityWizard() const; virtual BOOL IsDeletable() const { return TRUE; } // // Let explorer handle the UI for deletion/renaming // virtual BOOL HandleUI() const { return FALSE; } virtual BOOL IsRenamable() const { return TRUE; } virtual BOOL IsConfigurable() const { return TRUE; } virtual BOOL IsMMCConfigurable() const { return m_pOwner->IsMMCConfigurable(); } virtual HRESULT Configure( IN CWnd * pParent ); virtual HRESULT ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ); virtual HRESULT AddChildNode( CIISChildNode *& pChild ); virtual HRESULT RefreshData(); virtual BOOL IsExplorable() const { return IsDirectory(); } virtual BOOL IsOpenable() const { return TRUE; } virtual BOOL IsBrowsable() const { return m_pOwner && m_pOwner->IsBrowsable(); } // // Get parent CIISObject // virtual CIISObject * GetParentObject() const; // // Add menu items // virtual HRESULT AddMenuItems( IN LPCONTEXTMENUCALLBACK pContextMenuCallback ); virtual HRESULT AddNextTaskpadItem( OUT MMC_TASK * pTask ); virtual HRESULT Rename( IN LPCTSTR NewName ); virtual HRESULT Delete(); virtual HRESULT SecurityWizard(); BOOL IsDir() const { return m_fDir; } virtual BOOL IsLeafNode() const { return !IsDir(); } protected: // // Result View Layout // enum { COL_ALIAS, COL_PATH, COL_STATUS, /**/ COL_TOTAL }; static int rgnLabels[COL_TOTAL]; static int rgnWidths[COL_TOTAL]; protected: BOOL m_fDir; BOOL m_fEnabledApplication; DWORD m_dwAttributes; CIISInstance * m_pOwner; }; // // Inline Expansion // // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< inline void CIISObject::SetScopeHandle( IN HSCOPEITEM hScopeItem, IN BOOL fIsParentScope ) { ASSERT(m_hScopeItem == NULL); m_hScopeItem = hScopeItem; m_fIsParentScope = fIsParentScope; } inline /* static */ void CIISObject::AttachScopeView( IN LPCONSOLENAMESPACE lpcnsScopeView ) { ASSERT(lpcnsScopeView != NULL); s_lpcnsScopeView = lpcnsScopeView; } inline /* static */ LPCONSOLENAMESPACE CIISObject::GetScopeView() { ASSERT(s_lpcnsScopeView != NULL); return s_lpcnsScopeView; } inline /* virtual */ HRESULT CIISObject::ChangeState(IN int nNewState) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::Configure(IN CWnd * pParent) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::ConfigureMMC( IN LPPROPERTYSHEETCALLBACK lpProvider, IN LPARAM param, IN LONG_PTR handle ) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::RefreshData() { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::Delete() { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::SecurityWizard() { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ int CIISObject::Compare(int nCol, CIISObject * pObject) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return 0; } inline /* static */ void CIISObject::InitializeHeaders(IN LPHEADERCTRL pHeader) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); } inline /* virtual */ void CIISObject::InitializeChildHeaders( IN LPHEADERCTRL pHeader ) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); } inline /* virtual */ HRESULT CIISObject::AddChildNode( IN OUT CIISChildNode *& pChild ) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ void CIISObject::CleanChildren() { time(&m_tmChildrenExpanded); } inline /* virtual */ void CIISObject::DirtyChildren() { m_tmChildrenExpanded = 0L; } inline /* virtual */ HRESULT CIISObject::ExpandChildren(HSCOPEITEM pParent) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ HRESULT CIISObject::Rename(IN LPCTSTR NewName) { TRACEEOLID("Must be implemented in the derived class"); ASSERT(FALSE); return CError::HResult(ERROR_INVALID_FUNCTION); } inline /* virtual */ LPCTSTR CIISObject::GetStateText() const { return CIISObject::s_strUnknown; } inline /* virtual */ void CIISObject::GetResultDisplayInfo( IN int nCol, OUT CString & str, OUT int & nImage ) const { ASSERT(nCol == 0); nImage = QueryBitmapIndex(); GetDisplayText(str); } inline DWORD CIISInstance::QueryServiceID() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->QueryServiceID(); } inline BOOL CIISInstance::operator ==(CIISInstance & target) { return QueryServiceID() == target.QueryServiceID() && QueryID() == target.QueryID() && GetServerInfo() == target.GetServerInfo(); } inline /* virtual */ BOOL CIISInstance::IsControllable() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->CanControlService(); } inline /* virtual */ BOOL CIISInstance::IsPausable() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->CanPauseService() && (IsRunning() || IsPaused()); } inline /* virtual */ BOOL CIISInstance::IsConfigurable() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->IsConfigurable(); } inline /*virtual */ BOOL CIISInstance::IsMMCConfigurable() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->SupportsMMC(); } inline /* virtual */ BOOL CIISInstance::IsAccessible() const { return IsDownLevel() || (QueryErrorCode() == ERROR_SUCCESS); } inline /* virtual */ BOOL CIISInstance::IsDeletable() const { return !IsDownLevel() && m_fDeletable; } inline /* virtual */ BOOL CIISInstance::IsClusterEnabled() const { return !IsDownLevel() && m_fClusterEnabled; } inline /* virtual */ BOOL CIISInstance::SupportsFileSystem() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->SupportsFileSystem(); } inline /* virtual */ BOOL CIISInstance::SupportsSecurityWizard() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->SupportsSecurityWizard(); } inline /* virtual */ BOOL CIISInstance::SupportsChildren() const { ASSERT(m_pServerInfo != NULL); return !IsDownLevel() && m_pServerInfo->SupportsChildren(); } inline /* virtual */ BOOL CIISInstance::IsLeafNode() const { return !SupportsFileSystem() && !SupportsChildren(); } inline /* virtual */ LPCTSTR CIISInstance::GetServiceName() const { ASSERT(m_pServerInfo != NULL); return m_pServerInfo->GetServiceName(); } inline /* virtual */ BOOL CIISInstance::IsTerminalPoint( IN BOOL fFullMetaPath ) const { // // Metabase paths terminate at an instance // return TRUE; } inline /* virtual */ LPCTSTR CIISInstance::QueryNodeName(BOOL fMetabasePath) const { return fMetabasePath ? (LPCTSTR)m_strNodeName : g_cszRoot; } inline BOOL CIISInstance::SupportsInstances() const { return !IsDownLevel() && m_pServerInfo && m_pServerInfo->SupportsInstances(); } inline BOOL CIISInstance::HasWebProtocol() const { return !IsDownLevel() && m_pServerInfo && m_pServerInfo->HasWebProtocol(); } inline /* static */ void CIISInstance::SetViewType( BOOL fServerView, BOOL fAppendState ) { CIISInstance::s_fServerView = fServerView; CIISInstance::s_fAppendState = fAppendState; } inline /* static */ BOOL CIISInstance::IsInitialized() { return !CIISInstance::s_strFormatState.IsEmpty(); } inline /* virtual */ CServerInfo * CIISChildNode::GetServerInfo() { ASSERT(m_pOwner != NULL); return m_pOwner->GetServerInfo(); } inline /* virtual */ LPCTSTR CIISChildNode::GetMachineName() const { ASSERT(m_pOwner != NULL); return m_pOwner->GetMachineName(); } inline /* virtual */ BOOL CIISChildNode::IsLocalMachine() const { ASSERT(m_pOwner != NULL); return m_pOwner->IsLocalMachine(); } inline /* virtual */ LPCTSTR CIISChildNode::GetServiceName() const { ASSERT(m_pOwner != NULL); return m_pOwner->GetServiceName(); } inline /* virtual */ BOOL CIISChildNode::SupportsFileSystem() const { ASSERT(m_pOwner != NULL); return !IsRedirected() && m_pOwner->SupportsFileSystem(); } inline /* virtual */ BOOL CIISChildNode::SupportsSecurityWizard() const { ASSERT(m_pOwner != NULL); return m_pOwner->SupportsSecurityWizard(); } inline /* virtual */ BOOL CIISChildNode::IsMMCConfigurable() const { return m_pOwner->IsMMCConfigurable(); } inline BOOL CIISFileNode::IsDirectory() const { return (m_dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; } inline /* virtual */ CServerInfo * CIISFileNode::GetServerInfo() { ASSERT(m_pOwner != NULL); return m_pOwner->GetServerInfo(); } inline /* virtual */ BOOL CIISFileNode::SupportsSecurityWizard() const { ASSERT(m_pOwner != NULL); return IsDirectory() && m_pOwner->SupportsSecurityWizard(); } inline /* virtual */ LPCTSTR CIISFileNode::GetMachineName() const { ASSERT(m_pOwner != NULL); return m_pOwner->GetMachineName(); } inline /* virtual */ BOOL CIISFileNode::IsLocalMachine() const { ASSERT(m_pOwner != NULL); return m_pOwner->IsLocalMachine(); } inline /* virtual */ LPCTSTR CIISFileNode::GetServiceName() const { ASSERT(m_pOwner != NULL); return m_pOwner->GetServiceName(); } #endif // _IIS_OBJ_H