Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1541 lines
38 KiB

/*++
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