windows-nt/Source/XPSP1/NT/inetsrv/iis/ui/admin/inc/svrinfo.h
2020-09-26 16:20:57 +08:00

765 lines
22 KiB
C

/*++
Copyright (c) 1994-1998 Microsoft Corporation
Module Name :
svrinfo.h
Abstract:
ISM API Header File
Author:
Ronald Meijer (ronaldm)
Project:
Internet Services Manager
Revision History:
Notes:
Anything tagged as K2 or greater (v4+) can be changed as required as it is
not a public interface. Anything designated as IIS 1, 2, or 3 is frozen
and must not be altered as it will break existing configuration Dlls.
--*/
#ifndef _SVRINFO_H_
#define _SVRINFO_H_
#ifdef __cplusplus
extern "C" {
#endif
//
// Version number (x1000) of the ISM API set
//
#define ISM_VERSION 104 // Version 0.104
//
// API Structures
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#ifndef _SVCLOC_
#pragma message("Assuming service does not use inetsloc for discovery.")
//
// Datatype definitions.
//
typedef unsigned __int64 ULONGLONG;
//
// Provided for non-inetsloc compliant services. Those
// services which DO use inetsloc should include
// svcloc.h before including this file.
//
enum
{
//
// the service has invoked de-registration or
// the service has never called registration.
//
INetServiceStopped,
//
// the service is running.
//
INetServiceRunning,
//
// the service is paused.
//
INetServicePaused,
};
#endif // _SVCLOC_
#define INetServiceUnknown INetServicePaused + 1
//
// Memory Allocation Macros
//
#define ISMAllocMem(cbSize)\
LocalAlloc(LPTR, cbSize)
#define ISMFreeMem(lp)\
if (lp) LocalFree(lp)
#define ISMAllocMemByType(citems, type)\
(type *)AllocMem(citems * sizeof(type))
//
// Maximum length of some members in characters
//
#define MAX_SERVERNAME_LEN (256) // We allow hostnames
#define MAX_COMMENT_LEN MAXCOMMENTSZ
//
// Dimensions of the toolbar bitmaps
//
#define TOOLBAR_BMP_CX (16)
#define TOOLBAR_BMP_CY (16)
//
// Standard Server information structure.
//
typedef struct tagISMSERVERINFO
{
DWORD dwSize; // Structure size
TCHAR atchServerName[MAX_SERVERNAME_LEN + 1]; // Server name
TCHAR atchComment[MAX_COMMENT_LEN + 1 ]; // Server Comment
int nState; // State (Running, paused, etc)
} ISMSERVERINFO, *PISMSERVERINFO;
//
// Expected size of structure
//
#define ISMSERVERINFO_SIZE sizeof(ISMSERVERINFO)
//
// Service information flags
//
#define ISMI_INETSLOCDISCOVER 0x00000001 // Use INETSLOC for discovery
#define ISMI_CANCONTROLSERVICE 0x00000002 // Service state can be changed
#define ISMI_CANPAUSESERVICE 0x00000004 // Service is pausable.
#define ISMI_NORMALTBMAPPING 0x00000100 // Use normal toolbar colour mapping
//
// New for K2:
//
#define ISMI_INSTANCES 0x00000200 // Service supports instance
#define ISMI_CHILDREN 0x00000400 // Service supports children
#define ISMI_UNDERSTANDINSTANCE 0x00000800 // Understand instance codes
#define ISMI_FILESYSTEM 0x00001000 // Support file system properties
//
// New for IIS5
//
#define ISMI_TASKPADS 0x00002000 // Supports MMC taskpads
#define ISMI_SECURITYWIZARD 0x00004000 // Supports security wizard
#define ISMI_HASWEBPROTOCOL 0x00008000 // Supports browsing by protocol
#define ISMI_SUPPORTSMETABASE 0x00010000 // Supports metabase
#define ISMI_SUPPORTSMASTER 0x00020000 // Supports master instance (instance 0)
#define MAX_SNLEN (20) // Maximum short name length
#define MAX_LNLEN (48) // Maximum long name length
//
// Standard service configuration information structure
//
// Note: This structure was used for IIS Version 1, 2 and 3
//
typedef struct tagISMSERVICEINFO1
{
DWORD dwSize; // Structure size
DWORD dwVersion; // Version information
DWORD flServiceInfoFlags; // ISMI_ flags
ULONGLONG ullDiscoveryMask; // InetSloc mask (if necessary)
COLORREF rgbButtonBkMask; // Toolbar button bitmap background mask
UINT nButtonBitmapID; // Toolbar button bitmap resource ID
COLORREF rgbServiceBkMask; // Service bitmap background mask
UINT nServiceBitmapID; // Service bitmap resource ID
TCHAR atchShortName[MAX_SNLEN+1]; // The name as it appears in the menu
TCHAR atchLongName[MAX_LNLEN+1]; // The name as it appears in tool tips
} ISMSERVICEINFO1, *PISMSERVICEINFO1;
//
// Expected size of structure
//
#define ISMSERVICEINFO1_SIZE sizeof(ISMSERVICEINFO1)
///////////////////////////////////////////////////////////////////////////////
// //
// /* K2 */ //
// //
///////////////////////////////////////////////////////////////////////////////
//
// Standard service configuration information structure.
//
typedef struct tagISMSERVICEINFO
{
//////////////////////////////////////
//
DWORD dwSize; // Structure size
DWORD dwVersion; // Version information
DWORD flServiceInfoFlags; // ISMI_ flags
ULONGLONG ullDiscoveryMask; // InetSloc mask (if necessary)
COLORREF rgbButtonBkMask; // Toolbar button bitmap background mask
UINT nButtonBitmapID; // Toolbar button bitmap resource ID
COLORREF rgbServiceBkMask; // Service bitmap background mask
UINT nServiceBitmapID; // Service bitmap resource ID
TCHAR atchShortName[MAX_SNLEN+1]; // The name as it appears in the menu
TCHAR atchLongName[MAX_LNLEN+1]; // The name as it appears in tool tips
//
//////////////////////////////////////
//
// New for K2
//
//////////////////////////////////////
//
COLORREF rgbLargeServiceBkMask; // Large Service bitmap background mask
COLORREF rgbChildBkMask; // Child node background mask
COLORREF rgbLargeChildBkMask; // Child node background mask
UINT nLargeServiceBitmapID; // Large Service bitmap resource ID or 0.
UINT nChildBitmapID; // Child node resource ID
UINT nLargeChildBitmapID; // Child node resource ID or 0
//
//////////////////////////////////////
//
// New for IIS5
//
//////////////////////////////////////
//
TCHAR atchMetaBaseName[MAX_SNLEN+1];// Service name
TCHAR atchProtocol[MAX_SNLEN+1]; // Protocol or NULL
//
//////////////////////////////////////
} ISMSERVICEINFO, *PISMSERVICEINFO;
//
// Expected size of structure
//
#define ISMSERVICEINFO_SIZE sizeof(ISMSERVICEINFO)
#define MAX_COMMENT (255)
//
// Instance info (IIS4)
//
typedef struct tagISMINSTANCEINFO
{
DWORD dwSize; // Structure size
DWORD dwID; // Instance ID
TCHAR szServerName[MAX_PATH + 1];// Domain name
TCHAR szComment[MAX_COMMENT + 1];// Comment
int nState; // State (Running, paused, etc)
DWORD dwIPAddress; // IP Address
SHORT sPort; // Port
TCHAR szPath[MAX_PATH + 1]; // Home directory path
TCHAR szRedirPath[MAX_PATH + 1]; // Redirected Path
BOOL fDeletable; // TRUE if not deletable
BOOL fClusterEnabled; // TRUE if cluster enabled
BOOL fChildOnlyRedir; // TRUE if redir is "child only"
DWORD dwError; // WIN32 error
} ISMINSTANCEINFO, *PISMINSTANCEINFO;
//
// Expected size of structure
//
#define ISMINSTANCEINFO_SIZE sizeof(ISMINSTANCEINFO)
//
// Child info (IIS4)
//
typedef struct tagISMCHILDINFO
{
DWORD dwSize; // Structure size
BOOL fEnabledApplication; // TRUE if enabled app
BOOL fInheritedPath; // Inherited path
TCHAR szAlias[MAX_PATH + 1]; // Alias
TCHAR szPath[MAX_PATH + 1]; // Physical Path
TCHAR szRedirPath[MAX_PATH + 1]; // Redirected Path
BOOL fChildOnlyRedir; // TRUE if redir is "child only"
DWORD dwError; // WIN32 error
} ISMCHILDINFO, *PCHILDINFO;
//
// Expected size of structure
//
#define ISMCHILDINFO_SIZE sizeof(ISMCHILDINFO)
//
// Function prototypes
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//
// Return service-specific information back to
// to the application. This function is called
// by the service manager immediately after
// LoadLibary();
//
// IIS1-3
//
DWORD APIENTRY
ISMQueryServiceInfo(
ISMSERVICEINFO * psi // Service information returned.
);
//
// Perform a discovery (if not using inetsloc discovery)
// The application will call this API the first time with
// a BufferSize of 0, which should return the required buffer
// size. Next it will attempt to allocate a buffer of that
// size, and then pass a pointer to that buffer to the api.
//
// IIS1-3
//
DWORD APIENTRY
ISMDiscoverServers(
ISMSERVERINFO * psi, // Server info buffer.
DWORD * pdwBufferSize, // Size required/available.
int * cServers // Number of servers in buffer.
);
//
// Get information on a single server with regards to
// this service.
//
// IIS1-3
//
DWORD APIENTRY
ISMQueryServerInfo(
LPCTSTR lpszServerName, // Name of server.
ISMSERVERINFO * psi // Server information returned.
);
//
// Change the state of the service (started, stopped, paused) for the
// listed servers.
//
// IIS1-3
//
DWORD APIENTRY
ISMChangeServiceState(
int nNewState, // INetService* definition.
int * pnCurrentState, // Pointer to the current state of the service.
DWORD dwInstance, // /* K2 */ Instance or 0
LPCTSTR lpszServers // Double NULL terminated list of servers.
);
//
// The big-one: Show the configuration dialog or
// property sheets, whatever, and allow the user
// to make changes as needed.
//
// IIS1-3
//
DWORD APIENTRY
ISMConfigureServers(
HWND hWnd, // Main app window handle
DWORD dwInstance, // /* K2 */ Instance or 0
LPCTSTR lpszServers // Double NULL terminated list of servers
);
///////////////////////////////////////////////////////////////////////////////
// //
// /* K2 */ //
// //
///////////////////////////////////////////////////////////////////////////////
//
// K2 Extended APIs use handles instead of server names. First obtain a
// handle with Bind(), use the handle with all APIs below, and then Unbind
// the handle
//
// IIS5
//
HRESULT APIENTRY
ISMBind(
LPCTSTR lpszServer, // A single server name.
HANDLE * phServer // Returns server name.
);
HRESULT APIENTRY
ISMUnbind(
HANDLE hServer // Server handle
);
//
// Enumerate instances. This API should first be called with a buffer
// size of 0, which will return the required number of bytes
//
// IIS5
//
HRESULT APIENTRY
ISMEnumerateInstances(
HANDLE hServer, // Server handle
ISMINSTANCEINFO * pii, // Instance info buffer
HANDLE * phEnum // Enumeration handle: init with NULL
);
//
// Get instance specific information.
//
// IIS5
//
HRESULT APIENTRY
ISMQueryInstanceInfo(
HANDLE hServer, // Server handle
BOOL fInherit, // TRUE to inherit, FALSE otherwise
ISMINSTANCEINFO * pii, // Instance info buffer
DWORD dwInstance // Instance number
);
//
// Add an instance
//
// IIS5
//
HRESULT APIENTRY
ISMAddInstance(
HANDLE hServer, // Server handle
DWORD dwSourceInstance, // Source instance
ISMINSTANCEINFO * pii, // Instance info buffer. May be NULL
DWORD dwBufferSize // Size of buffer
);
//
// Delete an instance
//
// IIS5
//
HRESULT APIENTRY
ISMDeleteInstance(
HANDLE hServer, // Server handle
DWORD dwInstance // Instance to be deleted
);
//
// Enumerate children This API should first be called with a buffer
// size of 0, which will return the required number of bytes.
//
// IIS5
//
HRESULT APIENTRY
ISMEnumerateChildren(
HANDLE hServer, // Server handle
ISMCHILDINFO * pii, // Child info buffer
HANDLE * phEnum, // Enumeration handle: init with NULL
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent // Parent Path ("" for root)
);
//
// Get child-specific info
//
// IIS5
//
HRESULT APIENTRY
ISMQueryChildInfo(
HANDLE hServer, // Server handle
BOOL fInherit, // TRUE to inherit, FALSE otherwise
ISMCHILDINFO * pii, // Child info buffer
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent, // Parent Path ("" for root)
LPCTSTR lpszAlias // Alias of child to be deleted
);
//
// Add a child
//
// IIS5
//
HRESULT APIENTRY
ISMAddChild(
HANDLE hServer, // Server handle
ISMCHILDINFO * pii, // Child info buffer. May be NULL
DWORD dwBufferSize, // Size of info buffer
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent // Parent Path ("" for root)
);
//
// Delete a child
//
// IIS5
//
HRESULT APIENTRY
ISMDeleteChild(
HANDLE hServer, // Server handle
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent, // Parent Path ("" for root)
LPCTSTR lpszAlias // Alias of child to be deleted
);
//
// Rename a child
//
// IIS5
//
HRESULT APIENTRY
ISMRenameChild(
HANDLE hServer, // Server handle
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent, // Parent Path ("" for root)
LPCTSTR lpszAlias, // Alias of child to be renamed
LPCTSTR lpszNewAlias // New alias name of the child
);
//
// Private FILE_ATTRIBUTE used to designate a virtual directory
//
#define FILE_ATTRIBUTE_VIRTUAL_DIRECTORY (0x10000000)
//
// Configure Child
//
// IIS5
//
HRESULT APIENTRY
ISMConfigureChild(
HANDLE hServer, // Server handle
HWND hWnd, // Main app window handle
DWORD dwAttributes, // File system attributes
DWORD dwInstance, // Parent instance
LPCTSTR lpszParent, // Parent path
LPCTSTR lpszAlias // Child alias name
);
//
// Configure servers with MMC property sheet
//
// IIS5
//
HRESULT APIENTRY
ISMMMCConfigureServers(
HANDLE hServer, // Server handle
PVOID lpfnProvider, // MMC parameter
LPARAM lParam, // MMC parameter
LONG_PTR handle, // MMC parameter
DWORD dwInstance // Instance number
);
//
// Configure Child with MMC property sheet
//
// IIS5
//
HRESULT APIENTRY
ISMMMCConfigureChild(
HANDLE hServer, // Server handle
PVOID lpfnProvider, // MMC parameter
LPARAM lParam, // MMC parameter
LONG_PTR handle, // MMC parameter
DWORD dwAttributes, // Child attributes
DWORD dwInstance, // Instance number
LPCTSTR lpszParent, // Parent path
LPCTSTR lpszAlias // Child alias name
);
//
// Launch security wizard
//
// IIS5
//
HRESULT APIENTRY
ISMSecurityWizard(
HANDLE hServer, // Server handle
DWORD dwInstance, // Instance number
LPCTSTR lpszParent, // Parent path
LPCTSTR lpszAlias // Child alias name
);
//
// GetProcAddress() Prototypes
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
///////////////////////////////////////////////////////////////////////////////
// //
// IIS1-3 //
// //
///////////////////////////////////////////////////////////////////////////////
typedef DWORD (APIENTRY * pfnQueryServiceInfo)(ISMSERVICEINFO * psi);
typedef DWORD (APIENTRY * pfnDiscoverServers)(
ISMSERVERINFO * psi,
DWORD * pdwBufferSize,
int * cServers
);
typedef DWORD (APIENTRY * pfnQueryServerInfo)(
LPCTSTR lpszServerName,
ISMSERVERINFO * psi
);
typedef DWORD (APIENTRY * pfnChangeServiceState)(
int nNewState,
int * pnCurrentState,
DWORD dwInstance,
LPCTSTR lpszServers
);
typedef DWORD (APIENTRY * pfnConfigure)(
HWND hWnd,
DWORD dwInstance,
LPCTSTR lpszServers
);
///////////////////////////////////////////////////////////////////////////////
// //
// /* K2 */ //
// //
///////////////////////////////////////////////////////////////////////////////
typedef HRESULT (APIENTRY * pfnBind)(
LPCTSTR lpszServer,
HANDLE * phServer
);
typedef HRESULT (APIENTRY * pfnUnbind)(
HANDLE hServer
);
typedef HRESULT (APIENTRY * pfnEnumerateInstances)(
HANDLE hServer,
ISMINSTANCEINFO * pii,
HANDLE * phEnum
);
typedef HRESULT (APIENTRY * pfnQueryInstanceInfo)(
HANDLE hServer,
BOOL fInherit,
ISMINSTANCEINFO * pii,
DWORD dwInstance
);
typedef HRESULT (APIENTRY * pfnEnumerateChildren)(
HANDLE hServer,
ISMCHILDINFO * pii,
HANDLE * phEnum,
DWORD dwInstance,
LPCTSTR lpszParent
);
typedef HRESULT (APIENTRY * pfnAddInstance)(
HANDLE hServer,
DWORD dwSourceInstance,
ISMINSTANCEINFO * pii,
DWORD dwBufferSize
);
typedef HRESULT (APIENTRY * pfnDeleteInstance)(
HANDLE hServer,
DWORD dwInstance
);
typedef HRESULT (APIENTRY * pfnAddChild)(
HANDLE hServer,
ISMCHILDINFO * pii,
DWORD dwBufferSize,
DWORD dwInstance,
LPCTSTR lpszParent
);
typedef HRESULT (APIENTRY * pfnDeleteChild)(
HANDLE hServer,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias
);
typedef HRESULT (APIENTRY * pfnRenameChild)(
HANDLE hServer,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias,
LPCTSTR lpszNewAlias
);
typedef HRESULT (APIENTRY * pfnQueryChildInfo)(
HANDLE hServer,
BOOL fInherit,
ISMCHILDINFO * pii,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias
);
typedef HRESULT (APIENTRY * pfnConfigureChild)(
HANDLE hServer,
HWND hWnd,
DWORD dwAttributes,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias
);
typedef HRESULT (APIENTRY * pfnISMMMCConfigureServers)(
HANDLE hServer,
PVOID lpfnProvider,
LPARAM lParam,
LONG_PTR handle,
DWORD dwInstance
);
typedef HRESULT (APIENTRY * pfnISMMMCConfigureChild)(
HANDLE hServer,
PVOID lpfnProvider,
LPARAM lParam,
LONG_PTR handle,
DWORD dwAttributes,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias
);
typedef HRESULT (APIENTRY * pfnISMSecurityWizard)(
HANDLE hServer,
DWORD dwInstance,
LPCTSTR lpszParent,
LPCTSTR lpszAlias
);
//
// GetProcAddress() Function Names
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//
// IIS1-3
//
#define SZ_SERVICEINFO_PROC ("ISMQueryServiceInfo")
#define SZ_DISCOVERY_PROC ("ISMDiscoverServers")
#define SZ_SERVERINFO_PROC ("ISMQueryServerInfo")
#define SZ_CHANGESTATE_PROC ("ISMChangeServiceState")
#define SZ_CONFIGURE_PROC ("ISMConfigureServers")
///////////////////////////////////////////////////////////////////////////////
// //
// /* K2 */ //
// //
///////////////////////////////////////////////////////////////////////////////
#define SZ_BIND_PROC ("ISMBind")
#define SZ_UNBIND_PROC ("ISMUnbind")
#define SZ_CONFIGURE_CHILD_PROC ("ISMConfigureChild")
#define SZ_ENUMERATE_INSTANCES_PROC ("ISMEnumerateInstances")
#define SZ_QUERY_INSTANCE_INFO_PROC ("ISMQueryInstanceInfo")
#define SZ_ENUMERATE_CHILDREN_PROC ("ISMEnumerateChildren")
#define SZ_ADD_INSTANCE_PROC ("ISMAddInstance")
#define SZ_DELETE_INSTANCE_PROC ("ISMDeleteInstance")
#define SZ_ADD_CHILD_PROC ("ISMAddChild")
#define SZ_DELETE_CHILD_PROC ("ISMDeleteChild")
#define SZ_RENAME_CHILD_PROC ("ISMRenameChild")
#define SZ_QUERY_CHILD_INFO_PROC ("ISMQueryChildInfo")
#define SZ_MMC_CONFIGURE_PROC ("ISMMMCConfigureServers")
#define SZ_MMC_CONFIGURE_CHILD_PROC ("ISMMMCConfigureChild")
#define SZ_SECURITY_WIZARD_PROC ("ISMSecurityWizard")
///////////////////////////////////////////////////////////////////////////////
// //
// Taskpad resource names //
// //
// * IIS5 * //
// //
///////////////////////////////////////////////////////////////////////////////
#define RES_TASKPAD_NEWVROOT _T("/img\\newvroot.gif")
#define RES_TASKPAD_NEWSITE _T("/img\\newsite.gif")
#define RES_TASKPAD_SECWIZ _T("/img\\secwiz.gif")
#ifdef __cplusplus
}
#endif
#endif // _SVRINFO_H_