// nntpadm.idl : IDL source for nntpadm.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (nntpadm.tlb) and marshalling code.

midl_pragma warning(disable:2362)   // too many methods in the interface

cpp_quote("")
cpp_quote("/*++")
cpp_quote("")
cpp_quote("Copyright (c) 1997 Microsoft Corporation")
cpp_quote("")
cpp_quote("Module Name: nntpadm.h")
cpp_quote("")
cpp_quote("    Nntp Admin Object Interfaces")
cpp_quote("")
cpp_quote("--*/")
cpp_quote("")
cpp_quote("#ifndef _NNTPADM_IDL_INCLUDED_")
cpp_quote("#define _NNTPADM_IDL_INCLUDED_")
cpp_quote("")
cpp_quote("#include <iads.h>")
cpp_quote("")

//
//	Define GUIDS:
//

// IIDs:
cpp_quote("")
cpp_quote("/* IIDs: */")
cpp_quote("")
cpp_quote("DEFINE_GUID(IID_INntpAdmin,0x3241F062,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpService,0x3241F07B,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpVirtualServer,0x3241F067,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpAdminFeeds,0x3241F06C,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpAdminExpiration,0x772bbad0,0x7a22,0x11d0,0x89,0x5d,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpAdminGroups,0x3241F071,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpAdminSessions,0x3241F076,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(IID_INntpAdminRebuild,0xdee3b230,0xa3c2,0x11d0,0x89,0x6e,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")

cpp_quote("DEFINE_GUID(IID_INntpServerBinding,0x9fc9efd0,0xa535,0x11d0,0x89,0x6f,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpServerBindings,0x9fc9efd1,0xa535,0x11d0,0x89,0x6f,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpVirtualRoot,0xaa068dc0,0xa635,0x11d0,0x89, 0x6f, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpVirtualRoots,0xaa068dc1,0xa635,0x11d0,0x89, 0x6f, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpFeed,0xcdde8050,0xae09,0x11d0, 0x89, 0x74, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_INntpOneWayFeed,0xcdde8051,0xae09,0x11d0, 0x89, 0x74, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_ITcpAccess,0xcbf09fa0,0xb9ac,0x11d0,0x89, 0x77, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_ITcpAccessExceptions,0xcbf09fa1,0xb9ac,0x11d0,0x89, 0x77, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_ITcpAccessException,0x326e38c0,0xc32a,0x11d0,0x89, 0x89, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")

// CLSIDs:
cpp_quote("")
cpp_quote("/* CLSIDs: */")
cpp_quote("")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdmin,0x3241F066,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpVirtualServer,0x3241F06B,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpService,0x3241F07F,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdminFeeds,0x3241F070,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdminExpiration,0x772bbad1,0x7a22,0x11d0,0x89,0x5d,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdminGroups,0x3241F075,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdminSessions,0x3241F07A,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpAdminRebuild,0xdee3b231,0xa3c2,0x11d0,0x89,0x6e,0x00,0xaa,0x00,0xa7,0x4b,0xf2);")

cpp_quote("DEFINE_GUID(CLSID_CNntpVirtualRoot,0x28e6a820,0xa6c4,0x11d0,0x89, 0x6f, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpFeed,0x5bddc640,0xae09,0x11d0, 0x89, 0x74, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(CLSID_CNntpOneWayFeed,0x5bddc641,0xae09,0x11d0, 0x89, 0x74, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")

// LibIDs:
cpp_quote("")
cpp_quote("/* LIBIDs: */")
cpp_quote("")
cpp_quote("DEFINE_GUID(LIBID_NNTPADMLib,0x3241F060,0x6D68,0x11D0,0x89,0x50,0x00,0xAA,0x00,0xA7,0x4B,0xF2);")
cpp_quote("")


cpp_quote("DEFINE_GUID(CLSID_CAdsNntpVirtualServer,0xcbf09fa2,0xb9ac,0x11d0,0x89, 0x77, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
cpp_quote("DEFINE_GUID(IID_IAdsNntpVirtualServer,0xcbf09fa3,0xb9ac,0x11d0,0x89, 0x77, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
/*
    Don't allow INntpService for now...

cpp_quote("DEFINE_GUID(CLSID_CTcpAccessException,0x326e38c2,0xc32a,0x11d0,0x89, 0x89, 0x00, 0xaa, 0x00, 0xa7, 0x4b, 0xf2);")
*/

#define DISPID_IADs_UPPER_BOUND 100

[
	uuid(3241F060-6D68-11D0-8950-00AA00A74BF2),
	version(1.0),
	helpstring("nntpadm 1.0 Type Library")
]
library NNTPADMLib
{
	importlib("stdole2.tlb");
    importlib("activeds.tlb");

	// Forward declarations:

	interface INntpServerBinding;
	interface INntpServerBindings;
	interface INntpVirtualRoots;
	interface INntpVirtualRoot;
	interface INntpFeed;
	interface INntpOneWayFeed;
	interface ITcpAccess;
	interface ITcpAccessExceptions;
	interface ITcpAccessException;

	//////////////////////////////////////////////////////////////////////
	//
	//	Type definitions:
	//
	//////////////////////////////////////////////////////////////////////

	//	Define our feed types:

	typedef enum {
		NNTP_FEED_TYPE_PEER		= 1,
		NNTP_FEED_TYPE_MASTER	= 2,
		NNTP_FEED_TYPE_SLAVE	= 3
	} NNTP_FEED_SERVER_TYPE;

	typedef enum {
		NNTP_FEED_ACTION_PULL	= 1,
		NNTP_FEED_ACTION_PUSH	= 2,
		NNTP_FEED_ACTION_ACCEPT	= 3
	} NNTP_FEED_ACTION;

	typedef enum {
		NNTP_SERVER_STATE_UNKNOWN	=	0,
		NNTP_SERVER_STATE_STARTING,
		NNTP_SERVER_STATE_STARTED,
		NNTP_SERVER_STATE_STOPPING,
		NNTP_SERVER_STATE_STOPPED,
		NNTP_SERVER_STATE_PAUSING,
		NNTP_SERVER_STATE_PAUSED,
		NNTP_SERVER_STATE_CONTINUING
	} NNTP_SERVER_STATE;

	//////////////////////////////////////////////////////////////////////
	//
	// Interface Definitions:
	//
	//////////////////////////////////////////////////////////////////////

	[
		object,
		uuid(3241F062-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpAdmin Interface"),
		pointer_default(unique)
	]
	interface INntpAdmin : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Pointers to other INntpAdmin interfaces:
/*		
		[propget, helpstring("INntpVirtualServer interface")]
			HRESULT	ServiceAdmin ( [out, retval] IDispatch ** ppIDispatch );
*/
		[propget, helpstring("INntpService")]
			HRESULT ServerAdmin ( [out, retval] IDispatch ** ppIDispatch );

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure")]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring("")]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		// Versioning:

		[propget, helpstring("Versioning Information")]
			HRESULT	HighVersion ( [out, retval] long * pdwHighVersion );
		
		[propget, helpstring("Versioning Information")]
			HRESULT LowVersion ( [out, retval] long * pdwLowVersion );

		[propget, helpstring("Build Number")]
			HRESULT BuildNum ( [out, retval] long * pdwBuildNumber );

		[propget, helpstring("Service version #")]
			HRESULT	ServiceVersion ( [out, retval] long * pdwServiceVersion );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Enumerate service instances")]
			HRESULT EnumerateInstances ( [out, retval] SAFEARRAY (long) * psaInstanceIds );

		[helpstring("VB script version")]
			HRESULT EnumerateInstancesVariant ( [out, retval] SAFEARRAY (VARIANT) * psaInstanceIds );

		[helpstring("Create a new service instance")]
			HRESULT CreateInstance (
				[in] BSTR strNntpFileDirectory,
				[in] BSTR strHomeDirectory,
                [in] BSTR strProgId,
                [in] BSTR strMdbGuid,
				[out, retval] long * pdwInstanceId
				);

		[helpstring("Delete a service instance")]
			HRESULT DestroyInstance ([in] long dwInstanceId );

		[helpstring("Translate an error code into a string")]
			HRESULT ErrorToString ( [in] long dwErrorCode, [out, retval] BSTR * pstrError );

		[helpstring("HTML tokenize the given string")]
			HRESULT Tokenize ( [in] BSTR strIn, [out, retval] BSTR * pstrOut );

		[helpstring("Truncate the given string")]
			HRESULT Truncate ( [in] BSTR strIn, [in] long dwMaxChars, [out, retval] BSTR * pstrOut );

	};


	[
		object,
		uuid(3241F07B-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpService Interface"),
		pointer_default(unique)
	]
	interface INntpService : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		[propget, helpstring("")]
			HRESULT SmtpServer ( [out, retval] BSTR * pstrSmtpServer );
		[propput]
			HRESULT SmtpServer ( [in] BSTR strSmtpServer );

		[propget, helpstring("")]
			HRESULT AllowClientPosts ( [out, retval] BOOL * pfAllowClientPosts );
		[propput]
			HRESULT AllowClientPosts ( [in] BOOL fAllowClientPosts );

		[propget, helpstring("")]
			HRESULT AllowFeedPosts ( [out, retval] BOOL * pfAllowFeedPosts );
		[propput]
			HRESULT AllowFeedPosts ( [in] BOOL fAllowFeedPosts );

		[propget, helpstring("")]
			HRESULT AllowControlMsgs ( [out, retval] BOOL * pfAllowControlMsgs );
		[propput]
			HRESULT AllowControlMsgs ( [in] BOOL fAllowControlMsgs );

		[propget, helpstring("")]
			HRESULT DefaultModeratorDomain ( [out, retval] BSTR * pstrDefaultModeratorDomain );
		[propput]
			HRESULT DefaultModeratorDomain ( [in] BSTR strDefaultModeratorDomain );

		[propget, helpstring("")]
			HRESULT DisableNewnews ( [out, retval] BOOL * pfDisableNewnews );
		[propput]
			HRESULT DisableNewnews ( [in] BOOL fDisableNewnews );

		[propput]
			HRESULT TestPass ( [in] BSTR strTestPass );

		[propget, helpstring("")]
			HRESULT TestStringArray ( [out, retval] SAFEARRAY(VARIANT) * psastr );
		[propput]
			HRESULT TestStringArray ( [in] SAFEARRAY(VARIANT) psastr );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Get server properties")]
			HRESULT Get ();

		[helpstring("Set server properties")]
			HRESULT Set ( [in, defaultvalue(FALSE)] BOOL fFailIfChanged );
	};

	[
		object,
		uuid(3241F067-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpVirtualServer Interface"),
		pointer_default(unique)
	]
	interface INntpVirtualServer : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure")]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring("")]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		// Other admin Interfaces on a virtual server:

		[propget, helpstring("INntpAdminFeeds interface")]
			HRESULT FeedsAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("INntpAdminGroups")]
			HRESULT GroupsAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("INntpAdminExpiration")]
			HRESULT ExpirationAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("INntpAdminSessions")]
			HRESULT SessionsAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("INntpAdminRebuild")]
			HRESULT RebuildAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("INntpVirtualRoots")]
			HRESULT VirtualRoots ( [out, retval] INntpVirtualRoots ** ppINntpVirtualRoots );

		[propget, helpstring("INntpVirtaulRoots")]
			HRESULT VirtualRootsDispatch ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ITcpAccess ")]
			HRESULT TcpAccess ( [out, retval] ITcpAccess ** ppTcpAccess );

/*
		[propget, helpstring("INntpVirtualRoot for home directory")]
			HRESULT	HomeDirectory ( [out, retval] INntpVirtualRoot ** ppINntpVirtualRoot );

		[propput]
			HRESULT	HomeDirectory ( [in] INntpVirtualRoot * pINntpVirtualRoot );
*/

		// Overridable server properties:

		[propget, helpstring("")]
			HRESULT ArticleTimeLimit ( [out, retval] long * pdwArticleTimeLimit );
		[propput]
			HRESULT ArticleTimeLimit ( [in] long dwArticleTimeLimit );

		[propget, helpstring("")]
			HRESULT HistoryExpiration ( [out, retval] long * pdwHistoryExpiration );
		[propput]
			HRESULT HistoryExpiration ( [in] long dwHistoryExpiration );

		[propget, helpstring("")]
			HRESULT HonorClientMsgIDs ( [out, retval] BOOL * pfHonorClientMsgIDs );
		[propput]
			HRESULT HonorClientMsgIDs ( [in] BOOL fHonorClientMsgIDs );

		[propget, helpstring("")]
			HRESULT SmtpServer ( [out, retval] BSTR * pstrSmtpServer );
		[propput]
			HRESULT SmtpServer ( [in] BSTR strSmtpServer );

		[propget, helpstring("")]
			HRESULT AdminEmail ( [out, retval] BSTR * pstrAdminEmail );
		[propput]
			HRESULT AdminEmail ( [in] BSTR strAdminEmail );

		[propget, helpstring("")]
			HRESULT AllowClientPosts ( [out, retval] BOOL * pfAllowClientPosts );
		[propput]
			HRESULT AllowClientPosts ( [in] BOOL fAllowClientPosts );

		[propget, helpstring("")]
			HRESULT AllowFeedPosts ( [out, retval] BOOL * pfAllowFeedPosts );
		[propput]
			HRESULT AllowFeedPosts ( [in] BOOL fAllowFeedPosts );

		[propget, helpstring("")]
			HRESULT AllowControlMsgs ( [out, retval] BOOL * pfAllowControlMsgs );
		[propput]
			HRESULT AllowControlMsgs ( [in] BOOL fAllowControlMsgs );

		[propget, helpstring("")]
			HRESULT DefaultModeratorDomain ( [out, retval] BSTR * pstrDefaultModeratorDomain );
		[propput]
			HRESULT DefaultModeratorDomain ( [in] BSTR strDefaultModeratorDomain );

		[propget, helpstring("")]
			HRESULT CommandLogMask ( [out, retval] long * pdwCommandLogMask );
		[propput]
			HRESULT CommandLogMask ( [in] long dwCommandLogMask );

		[propget, helpstring("")]
			HRESULT DisableNewnews ( [out, retval] BOOL * pfDisableNewnews );
		[propput]
			HRESULT DisableNewnews ( [in] BOOL fDisableNewnews );

		[propget, helpstring("")]
			HRESULT ExpireRunFrequency ( [out, retval] long * pdwExpireRunFrequency );
		[propput]
			HRESULT ExpireRunFrequency ( [in] long dwExpireRunFrequency );

		[propget, helpstring("")]
			HRESULT ShutdownLatency ( [out, retval] long * pdwShutdownLatency );
		[propput]
			HRESULT ShutdownLatency ( [in] long dwShutdownLatency );

		[propget, helpstring("")]
			HRESULT EnableLogging ( [out, retval] BOOL * pfEnableLogging );
		[propput]
			HRESULT EnableLogging ( [in] BOOL fEnableLogging );

		// Service-specific properties:
		[propget, helpstring("")]
			HRESULT GroupHelpFile ( [out, retval] BSTR * pstrGroupHelpFile );
		[propput]
			HRESULT GroupHelpFile ( [in] BSTR strGroupHelpFile );

		[propget, helpstring("")]
			HRESULT GroupListFile ( [out, retval] BSTR * pstrGroupListFile );
		[propput]
			HRESULT GroupListFile ( [in] BSTR strGroupListFile );

        [propget, helpstring("")]
            HRESULT GroupVarListFile( [out, retval] BSTR *pstrGroupVarListFile );
        [propput]
            HRESULT GroupVarListFile( [in] BSTR strGroupVarListFile );

		[propget, helpstring("")]
			HRESULT ArticleTableFile ( [out, retval] BSTR * pstrArticleTableFile );
		[propput]
			HRESULT ArticleTableFile ( [in] BSTR strArticleTableFile );

		[propget, helpstring("")]
			HRESULT HistoryTableFile ( [out, retval] BSTR * pstrHistoryTableFile );
		[propput]
			HRESULT HistoryTableFile ( [in] BSTR strHistoryTableFile );

		[propget, helpstring("")]
			HRESULT ModeratorFile ( [out, retval] BSTR * pstrModeratorFile );
		[propput]
			HRESULT ModeratorFile ( [in] BSTR strModeratorFile );

		[propget, helpstring("")]
			HRESULT XOverTableFile ( [out, retval] BSTR * pstrXOverTableFile );
		[propput]
			HRESULT XOverTableFile ( [in] BSTR strXOverTableFile );

		[propget, helpstring("Client post size before dropped connection")]
			HRESULT ClientPostHardLimit ( [out, retval] long * pdwClientPostHardLimit );
		[propput]
			HRESULT ClientPostHardLimit ( [in] long dwClientPostHardLimit );

		[propget, helpstring("Client post size before rejected post")]
			HRESULT ClientPostSoftLimit ( [out, retval] long * pdwClientPostSoftLimit );
		[propput]
			HRESULT ClientPostSoftLimit ( [in] long dwClientPostSoftLimit );

		[propget, helpstring("Feed post size before dropped connection")]
			HRESULT FeedPostHardLimit ( [out, retval] long * pdwFeedPostHardLimit );
		[propput]
			HRESULT FeedPostHardLimit ( [in] long dwFeedPostHardLimit );

		[propget, helpstring("Feed post size before rejected post")]
			HRESULT FeedPostSoftLimit ( [out, retval] long * pdwFeedPostSoftLimit );
		[propput]
			HRESULT FeedPostSoftLimit ( [in] long dwFeedPostSoftLimit );

		[propget, helpstring("UUCP Name")]
			HRESULT UucpName( [out, retval] BSTR * pstrUucpName );
		[propput]
			HRESULT UucpName( [in] BSTR strUucpName );

		[propget, helpstring("")]
			HRESULT Organization( [out, retval] BSTR * pstrOrganization );
		[propput]
			HRESULT Organization( [in] BSTR strOrganization );

		[propget, helpstring("")]
			HRESULT Comment ( [out, retval] BSTR * pstrComment );
		[propput]
			HRESULT Comment ( [in] BSTR strComment );

		[propget, helpstring("")]
			HRESULT Bindings ( [out, retval] INntpServerBindings ** ppBindings );

		[propget, helpstring("")]
			HRESULT BindingsDispatch ( [out, retval] IDispatch ** ppBindings );

		[propget, helpstring("")]
			HRESULT SecurePort ( [out, retval] long * pdwSecurePort );
		[propput]
			HRESULT SecurePort ( [in] long dwSecurePort );

		[propget, helpstring("")]
			HRESULT MaxConnections ( [out, retval] long * pdwMaxConnections );
		[propput]
			HRESULT MaxConnections ( [in] long dwMaxConnections );

		[propget, helpstring("")]
			HRESULT ConnectionTimeout ( [out, retval] long * pdwConnectionTimeout );
		[propput]
			HRESULT ConnectionTimeout ( [in] long dwConnectionTimeout );

		[propget, helpstring("")]
			HRESULT AnonymousUserName ( [out, retval] BSTR * pstrAnonymousUserName );
		[propput]
			HRESULT AnonymousUserName ( [in] BSTR strAnonymousUserName );

		[propget, helpstring("")]
			HRESULT AnonymousUserPass ( [out, retval] BSTR * pstrAnonymousUserPass );
		[propput]
			HRESULT AnonymousUserPass ( [in] BSTR strAnonymousUserPass );

		[propget, helpstring("")]
			HRESULT AutoSyncPassword ( [out, retval] BOOL * pfAutoSyncPassword );
		[propput]
			HRESULT AutoSyncPassword ( [in] BOOL fAutoSyncPassword );

		[propget, helpstring("")]
			HRESULT PickupDirectory ( [out, retval] BSTR * pstrPickupDirectory );
		[propput]
			HRESULT PickupDirectory ( [in] BSTR strPickupDirectory );

		[propget, helpstring("")]
			HRESULT FailedPickupDirectory ( [out, retval] BSTR * pstrFailedPickupDirectory );
		[propput]
			HRESULT FailedPickupDirectory ( [in] BSTR strFailedPickupDirectory );

		[propget, helpstring("")]
			HRESULT AutoStart ( [out, retval] BOOL * pfAutoStart );
		[propput]
			HRESULT AutoStart ( [in] BOOL fAutoStart );

		[propget, helpstring("")]
			HRESULT AuthAnonymous ( [out, retval] BOOL * pfAuthAnonymous );
		[propput]
			HRESULT AuthAnonymous ( [in] BOOL fAuthAnonymous );

		[propget, helpstring("")]
			HRESULT AuthBasic ( [out, retval] BOOL * pfAuthBasic );
		[propput]
			HRESULT AuthBasic ( [in] BOOL fAuthBasic );

		[propget, helpstring("")]
			HRESULT AuthMCISBasic ( [out, retval] BOOL * pfAuthMCISBasic );
		[propput]
			HRESULT AuthMCISBasic ( [in] BOOL fAuthMCISBasic );

		[propget, helpstring("")]
			HRESULT AuthNT ( [out, retval] BOOL * pfAuthNT );
		[propput]
			HRESULT AuthNT ( [in] BOOL fAuthNT );

		[propget, helpstring("")]
			HRESULT SSLNegotiateCert ( [out, retval] BOOL * pfSSLNegotiateCert );
		[propput]
			HRESULT SSLNegotiateCert ( [in] BOOL fSSLNegotiateCert );

		[propget, helpstring("")]
			HRESULT SSLRequireCert ( [out, retval] BOOL * pfSSLRequireCert );
		[propput]
			HRESULT SSLRequireCert ( [in] BOOL fSSLRequireCert );

		[propget, helpstring("")]
			HRESULT SSLMapCert ( [out, retval] BOOL * pfSSLMapCert );
		[propput]
			HRESULT SSLMapCert ( [in] BOOL fSSLMapCert );

/*
		[propget, helpstring("")]
			HRESULT AuthenticationProviders ( [out, retval] SAFEARRAY(BSTR) * psastrProviders );
		[propput]
			HRESULT AuthenticationProviders ( [in] SAFEARRAY(BSTR) psastrProviders );

		[propget, helpstring("")]
			HRESULT AuthenticationProvidersVariant ( [out, retval] SAFEARRAY(VARIANT) * psastrProviders );
		[propput]
			HRESULT AuthenticationProvidersVariant ( [in] SAFEARRAY(VARIANT) psastrProviders );
*/

		[propget, helpstring("")]
			HRESULT Win32ErrorCode ( [out, retval] long * plWin32ErrorCode );

/*
		[propget, helpstring("")]
			HRESULT DisplayName ( [out, retval] BSTR * pstrDisplayName );
		[propput]
			HRESULT DisplayName ( [in] BSTR strDisplayName );

		[propget, helpstring("")]
			HRESULT ErrorControl ( [out, retval] BOOL * pfErrorControl );
		[propput]
			HRESULT ErrorControl ( [in] BOOL fErrorControl );

		[propget, helpstring("")]
			HRESULT CleanBoot ( [out, retval] BOOL * pfCleanBoot );
		[propput]
			HRESULT CleanBoot ( [in] BOOL fCleanBoot );

		[propget, helpstring("Encryption capabilities mask")]
			HRESULT EncryptionCapabilitiesMask ( [out, retval] long * pdwEncryptionCapabilitiesMask );
		[propput]
			HRESULT EncryptionCapabilitiesMask ( [in] long dwEncryptionCapabilitiesMask );

*/

		//
		//	Service Status Properties:
		//

		[propget, helpstring("")]
			HRESULT	State ( [out, retval] NNTP_SERVER_STATE * pState );

		[propget, helpstring("")]
			HRESULT Administrators ( [out, retval] SAFEARRAY(BSTR) * psastrAdmins );
		[propput]
			HRESULT Administrators ( [in] SAFEARRAY(BSTR) psastrAdmins );

		[propget, helpstring("")]
			HRESULT AdministratorsVariant ( [out, retval] SAFEARRAY(VARIANT) * psastrAdmins );
		[propput]
			HRESULT AdministratorsVariant ( [in] SAFEARRAY(VARIANT) psastrAdmins );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Get service properties")]
			HRESULT Get ( );

		[helpstring("Set service properties")]
			HRESULT Set ( [in, defaultvalue(FALSE)] BOOL fFailIfChanged );

		[helpstring("")]
			HRESULT Start ( );

		[helpstring("")]
			HRESULT Pause ( );

		[helpstring("")]
			HRESULT Continue ( );

		[helpstring("")]
			HRESULT Stop ( );

		[propget, helpstring("")]
			HRESULT ClusterEnabled ( [out, retval] BOOL * bfClusterEnabled );
		[propput]
			HRESULT ClusterEnabled ( [in] BOOL fClusterEnabled );

	};


	[
		object,
		uuid(cdde8051-ae09-11d0-8974-00aa00a74bf2),
		dual,
		helpstring("INntpOneWayFeed Interface"),
		pointer_default(unique)
	]
	interface INntpOneWayFeed : IDispatch
	{
		import "oaidl.idl";
		
		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		[propget, helpstring("")]
			HRESULT RemoteServer ( [out, retval] BSTR * pstrRemoteServer );
		[propget, helpstring("Unique Feed ID")]
			HRESULT FeedId ( [out, retval] long * pdwFeedId );

		[propget, helpstring("")]
			HRESULT FeedAction ( [out, retval] NNTP_FEED_ACTION * pfeedaction );
		[propput]
			HRESULT FeedAction ( [in] NNTP_FEED_ACTION feedaction );

		[propget, helpstring("")]
			HRESULT UucpName ( [out, retval] BSTR * pstrUucpName );
		[propput]
			HRESULT UucpName ( [in] BSTR strUucpName );

		[propget, helpstring("Pull News From Date")]
			HRESULT PullNewsDate ( [out, retval] DATE * pdatePullNews );
		[propput]
			HRESULT PullNewsDate ( [in] DATE datePullNews );

		[propget, helpstring("Time between feeds")]
			HRESULT FeedInterval ( [out, retval] long * pdwFeedInterval );
		[propput]
			HRESULT FeedInterval ( [in] long dwFeedInterval );

		[propget, helpstring("Automatically create fed newsgroups?")]
			HRESULT AutoCreate ( [out, retval] BOOL * pfAutoCreate );
		[propput]
			HRESULT AutoCreate ( [in] BOOL fAutoCreate );

		[propget, helpstring("Is this feed enabled?")]
			HRESULT Enabled ( [out, retval] BOOL * pfEnabled );
		[propput]
			HRESULT Enabled ( [in] BOOL fEnabled );

		[propget, helpstring("Number of failed connections before disabling feed")]
			HRESULT MaxConnectionAttempts ( [out, retval] long * pdwMaxCnxAttempts );
		[propput]
			HRESULT MaxConnectionAttempts ( [in] long dwMaxCnxAttempts);

		// Concurrent sessions missing for now...
/*
		[propget, helpstring("")]
			HRESULT SecurityType ( [out, retval] long * pdwSecurityType );
		[propput]
			HRESULT SecurityType ( [in] long dwSecurityType );
*/
		[propget, helpstring("")]
			HRESULT AuthenticationType ( [out, retval] long * plAuthenticationType );
		[propput]
			HRESULT AuthenticationType ( [in] long lAuthenticationType );

		[propget, helpstring("")]
			HRESULT AccountName ( [out, retval] BSTR * pstrAccount );
		[propput]
			HRESULT AccountName ( [in] BSTR strAccount );

		[propget, helpstring("")]
			HRESULT Password ( [out, retval] BSTR * pstrPassword );
		[propput]
			HRESULT Password ( [in] BSTR strPassword );

		[propget, helpstring("")]
			HRESULT AllowControlMessages ( [out, retval] BOOL * pfAllowCtrlMsgs );
		[propput]
			HRESULT AllowControlMessages ( [in] BOOL fAllowCtrlMsgs );

		[propget, helpstring("")]
			HRESULT OutgoingPort ( [out, retval] long * plOutgoingPort );
		[propput]
			HRESULT OutgoingPort ( [in] long lOutgoingPort );

		[propget, helpstring("")]
			HRESULT Newsgroups ( [out, retval] SAFEARRAY (BSTR) * psastrNewsgroups );
		[propput]
			HRESULT Newsgroups ( [in] SAFEARRAY (BSTR) psastrNewsgroups );

		[propget, helpstring("")]
			HRESULT NewsgroupsVariant ( [out, retval] SAFEARRAY (VARIANT) * psastrNewsgroups );
		[propput]
			HRESULT NewsgroupsVariant ( [in] SAFEARRAY (VARIANT) psastrNewsgroups );

		[propget, helpstring("")]
			HRESULT Distributions ( [out, retval] SAFEARRAY (BSTR) * psastrDistributions );
		[propput]
			HRESULT Distributions ( [in] SAFEARRAY (BSTR) sastrDistributions );

/*
		[propget, helpstring("")]
			HRESULT StartTime ( [out, retval] DATE * pdateStartTime );
		[propput]
			HRESULT StartTime ( [in] DATE dateStartTime);
*/

		[propget, helpstring("")]
			HRESULT TempDirectory ( [out, retval] BSTR * pstrTempDirectory );
		[propput]
			HRESULT TempDirectory ( [in] BSTR strTempDirectory );

		[helpstring("Set properties to their default values")]
			HRESULT Default ( );
	};


	[
		object,
		uuid(cdde8050-ae09-11d0-8974-00aa00a74bf2),
		dual,
		helpstring("INntpFeed Interface"),
		pointer_default(unique)
	]
	interface INntpFeed : IDispatch
	{
		import "oaidl.idl";
		
		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		[propget, helpstring("Destination Server")]
			HRESULT RemoteServer ( [out, retval] BSTR * pstrRemoteServer );
		[propput]
			HRESULT RemoteServer ( [in] BSTR strRemoteServer );

		[propget, helpstring("")]
			HRESULT FeedType ( [out, retval] NNTP_FEED_SERVER_TYPE * pfeedtype );
		[propput]
			HRESULT FeedType ( [in] NNTP_FEED_SERVER_TYPE feedtype );

		[propget, helpstring("")]
			HRESULT	HasInbound ( [out, retval] BOOL * pfHasInbound );

		[propget, helpstring("")]
			HRESULT HasOutbound ( [out, retval] BOOL * pfHasOutbound );

		[propget, helpstring("")]
			HRESULT InboundFeed ( [out, retval] INntpOneWayFeed ** ppFeed );

		[propput]
			HRESULT InboundFeed ( [in] INntpOneWayFeed * pFeed );

		[propget, helpstring("")]
			HRESULT	InboundFeedDispatch ( [out, retval] IDispatch ** ppFeed );

		[propput, helpstring("")]
			HRESULT InboundFeedDispatch ( [in] IDispatch * pFeed );

		[propget, helpstring("")]
			HRESULT OutboundFeed ( [out, retval] INntpOneWayFeed ** ppFeed );

		[propput]
			HRESULT OutboundFeed ( [in] INntpOneWayFeed * pFeed );

		[propget, helpstring("")]
			HRESULT	OutboundFeedDispatch ( [out, retval] IDispatch ** ppFeed );

		[propput, helpstring("")]
			HRESULT OutboundFeedDispatch ( [in] IDispatch * pFeed );
	};


	[
		object,
		uuid(3241F06C-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpAdminFeeds Interface"),
		pointer_default(unique)
	]
	interface INntpAdminFeeds : IADs
	{
		import "oaidl.idl";
		
		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Count ( [out, retval] long * pdwCount );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Enumerate ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Item ( [in] long dwIndex, [out, retval] INntpFeed ** ppFeed );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT ItemDispatch ( [in] long dwIndex, [out, retval] IDispatch ** ppFeed );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT FindID ( [in] long dwID, [out, retval] long * pdwIndex );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT Set ( [in] long lIndex, [in] INntpFeed * pFeed );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT Add ( [in] INntpFeed * pFeed );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT AddDispatch ( [in] IDispatch * pFeed );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT Remove ( [in] long lIndex );

	};


	[
		object,
		uuid(772bbad0-7a22-11d0-895d-00aa00a74bf2),
		dual,
		helpstring("INntpAdminExpiration Interface"),
		pointer_default(unique)
	]
	interface INntpAdminExpiration : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Count ( [out, retval] long * pdwCount );

		// The current policy's properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT ExpireId ( [out, retval] long * pdwId );
		[propput]
			HRESULT ExpireId ( [in] long dwId );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT PolicyName ( [out, retval] BSTR * pstrPolicyName );
		[propput]
			HRESULT PolicyName ( [in] BSTR strPolicyName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT ExpireTime ( [out, retval] long * pdwExpireTime );
		[propput]
			HRESULT ExpireTime ( [in] long dwExpireTime );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT ExpireSize ( [out, retval] long * pdwExpireSize );
		[propput]
			HRESULT ExpireSize ( [in] long dwExpireSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT Newsgroups ( [out, retval] SAFEARRAY (BSTR) * psastrNewsgroups );
		[propput]
			HRESULT Newsgroups ( [in] SAFEARRAY (BSTR) psastrNewsgroups );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT NewsgroupsVariant ( [out, retval] SAFEARRAY (VARIANT) * psastrNewsgroups );
		[propput]
			HRESULT NewsgroupsVariant ( [in] SAFEARRAY (VARIANT) psastrNewsgroups );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Set properties to their default values"), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT Default ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT Enumerate ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT GetNth ( [in] long dwIndex );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT FindID ( [in] long dwID, [out, retval] long * pdwIndex );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT Set ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT Add ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT Remove ( [in] long dwID );

	}

	[
		object,
		uuid(3241F071-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpAdminGroups Interface"),
		pointer_default(unique)
	]
	interface INntpAdminGroups : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Count ( [out, retval] long * pdwCount );

		// The current group properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Newsgroup ( [out, retval] BSTR * pstrNewsgroup );
		[propput]
			HRESULT Newsgroup ( [in] BSTR strNewsgroup );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Description ( [out, retval] BSTR * pstrDescription );
		[propput]
			HRESULT Description ( [in] BSTR strDescription );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT PrettyName ( [out, retval] BSTR * pstrPrettyName );
		[propput]
			HRESULT PrettyName ( [in] BSTR strPrettyName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT IsModerated ( [out, retval] BOOL * pfIsModerated );
		[propput]
			HRESULT IsModerated ( [in] BOOL fIsModerated );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT Moderator ( [out, retval] BSTR * pstrModerator );
		[propput]
			HRESULT Moderator ( [in] BSTR strModerator );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ReadOnly ( [out, retval] BOOL * pfReadOnly );
		[propput]
			HRESULT ReadOnly ( [in] BOOL fReadOnly );

        [propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+12)]
            HRESULT CreationTime ( [out, retval] DATE * pdateCreate );
        [propput]
            HRESULT CreationTime ( [in] DATE dateCreate );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT	Default ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT Add ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT Remove ( [in] BSTR strNewsgroup );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT	Get ( [in] BSTR strNewsgroup );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT Set ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT MatchingGroup ( [in] long index, [out, retval] BSTR * pstrGroup );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT Find( [in] BSTR strWildmat, [in] long cMaxResults );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+20)]
			HRESULT CancelMessage( [in] BSTR strMessageID );
	};



	[
		object,
		uuid(3241F076-6D68-11D0-8950-00AA00A74BF2),
		dual,
		helpstring("INntpAdminSessions Interface"),
		pointer_default(unique)
	]
	interface INntpAdminSessions : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration Properties:

		[propget, helpstring("Number of current sessions"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT	Count ( [out, retval] long * pdwCount );

		// The Session Cursor Properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Username ( [out, retval] BSTR * pstrUsername );
		[propput]
			HRESULT Username ( [in] BSTR strUsername );

		[propget, helpstring("IP Address String"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT IpAddress ( [out, retval] BSTR * pstrIpAddress );
		[propput]
			HRESULT IpAddress ( [in] BSTR strIpAddress );

		[propget, helpstring("Integer IP Address Value"), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT IntegerIpAddress ( [out, retval] long * pdwIpAddress );
		[propput]
			HRESULT IntegerIpAddress ( [in] long dwIpAddress );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT Port ( [out, retval] long * pdwPort );

/*
		[propget, helpstring("")]
			HRESULT AuthenticationType ( [out, retval] long * pdwAuthenticationType );
*/

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT IsAnonymous ( [out, retval] BOOL * pfAnonymous );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT StartTime ( [out, retval] DATE * pdateStart );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Retrieves a list of current sessions"), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT Enumerate ( );

		[helpstring("Sets the cursor at the given session. Call Enumerate before calling GetNth"), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT GetNth ( [in] long dwIndex );

		[helpstring("Terminates the given session.  Set Username and/or IpAddress before calling."), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT Terminate ( );

		[helpstring("Terminates all sessions"), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT TerminateAll ( );

	};

	[
		object,
		uuid(dee3b230-a3c2-11d0-896e-00aa00a74bf2),
		dual,
		helpstring("INntpAdminRebuild Interface"),
		pointer_default(unique)
	]
	interface INntpAdminRebuild : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput]
			HRESULT KeyType ( [in] BSTR strKeyType );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Verbose ( [out, retval] BOOL * pfVerbose );
		[propput]
			HRESULT Verbose ( [in] BOOL fVerbose );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT CleanRebuild ( [out, retval] BOOL * pfCleanRebuild );
		[propput]
			HRESULT CleanRebuild ( [in] BOOL fCleanRebuild );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT DontDeleteHistory ( [out, retval] BOOL * pfDontDeleteHistory );
		[propput]
			HRESULT DontDeleteHistory ( [in] BOOL fDontDeleteHistory );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT ReuseIndexFiles ( [out, retval] BOOL * pfReuseIndexFiles );
		[propput]
			HRESULT ReuseIndexFiles ( [in] BOOL fReuseIndexFiles );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT OmitNonLeafDirs ( [out, retval] BOOL * pfOmitNonLeafDirs );
		[propput]
			HRESULT OmitNonLeafDirs ( [in] BOOL fOmitNonLeafDirs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT GroupFile ( [out, retval] BSTR * pstrGroupFile );
		[propput]
			HRESULT GroupFile ( [in] BSTR strGroupFile );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ReportFile ( [out, retval] BSTR * pstrReportFile );
		[propput]
			HRESULT ReportFile ( [in] BSTR strReportFile );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT NumThreads ( [out, retval] long * plNumThreads );
		[propput]
			HRESULT NumThreads ( [in] long lNumThreads );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

        [helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
            HRESULT Default ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT	StartRebuild ( );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT GetProgress ( [out, retval] long * pdwProgress );

		[helpstring(""), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT Cancel ( );
	};

	[
		object,
		uuid(9fc9efd0-a535-11d0-896f-00aa00a74bf2),
		dual,
		helpstring("INntpServerBinding Interface"),
		pointer_default(unique)
	]
	interface INntpServerBinding : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		[propget, helpstring("")]
			HRESULT IpAddress ( [out, retval] BSTR * pstrIpAddress );
		[propput]
			HRESULT IpAddress ( [in] BSTR strIpAddress );

		[propget, helpstring("")]
			HRESULT TcpPort ( [out, retval] long * pdwTcpPort );
		[propput]
			HRESULT TcpPort ( [in] long dwTcpPort );

		[propget, helpstring("")]
			HRESULT SslPort ( [out, retval] long * plSslPort );
		[propput]
			HRESULT SslPort ( [in] long lSslPort );
	};

	[
		object,
		uuid(9fc9efd1-a535-11d0-896f-00aa00a74bf2),
		dual,
		helpstring("INntpServerBindings Interface"),
		pointer_default(unique)
	]
	interface INntpServerBindings : IDispatch
	{
		import "oaidl.idl";

		//
		// Standard collection methods & properties:
		//

		[propget, helpstring("")]
			HRESULT Count ( [out, retval] long * pdwCount );

		[helpstring("")]
			HRESULT Item ( [in] long index, [out, retval] INntpServerBinding ** ppBinding );

		[helpstring("")]
			HRESULT	ItemDispatch ( [in] long index, [out, retval] IDispatch ** ppBinding );

		[helpstring("")]
			HRESULT Add ( [in] BSTR strIpAddress, [in] long dwTcpPort, [in] long dwSslPort );

		[helpstring("")]
			HRESULT ChangeBinding ( [in] long index, [in] INntpServerBinding * pBinding );

		[helpstring("")]
			HRESULT	ChangeBindingDispatch ( [in] long index, [in] IDispatch * pBinding );

		[helpstring("")]
			HRESULT Remove ( [in] long index );

		[helpstring("")]
			HRESULT	Clear ( );
	};

	[
		object,
		uuid(aa068dc0-a635-11d0-896f-00aa00a74bf2),
		dual,
		helpstring("INntpVirtualRoot Interface"),
		pointer_default(unique)
	]
	interface INntpVirtualRoot : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		[propget, helpstring("")]
			HRESULT NewsgroupSubtree ( [out, retval] BSTR * pstrNewsgroupSubtree );
		[propput]
			HRESULT NewsgroupSubtree ( [in] BSTR strNewsgroupSubtree );

		[propget, helpstring("")]
			HRESULT Directory ( [out, retval] BSTR * pstrDirectory );
		[propput]
			HRESULT Directory ( [in] BSTR strDirectory );

        [propget, helpstring("")]
            HRESULT Win32Error ( [out, retval] long * plWin32Error );

		[propget, helpstring("")]
			HRESULT AllowPosting ( [out, retval] BOOL * pfAllowPosting );
		[propput]
			HRESULT AllowPosting ( [in] BOOL fAllowPosting );

		[propget, helpstring("")]
			HRESULT RestrictGroupVisibility ( [out, retval] BOOL * pfRestrictGroupVisibility );
		[propput]
			HRESULT RestrictGroupVisibility ( [in] BOOL fRestrictGroupVisibility );

		[propget, helpstring("")]
			HRESULT IndexContent ( [out, retval] BOOL * pfIndexContent );
		[propput]
			HRESULT IndexContent ( [in] BOOL fIndexContent );

		[propget, helpstring("")]
			HRESULT LogAccess ( [out, retval] BOOL * pfLogAccess );
		[propput]
			HRESULT LogAccess ( [in] BOOL fLogAccess );

		[propget, helpstring("")]
			HRESULT RequireSsl ( [out, retval] BOOL * pfRequireSsl );
		[propput]
			HRESULT RequireSsl ( [in] BOOL fRequireSsl );

		[propget, helpstring("")]
			HRESULT Require128BitSsl ( [out, retval] BOOL * pfRequire128BitSsl );
		[propput]
			HRESULT Require128BitSsl ( [in] BOOL fRequire128BitSsl );

		[propget, helpstring("")]
			HRESULT UNCUsername ( [out, retval] BSTR * pstrUNCUsername );
		[propput]
			HRESULT UNCUsername ( [in] BSTR strUNCUsername );

		[propget, helpstring("")]
			HRESULT UNCPassword ( [out, retval] BSTR * pstrUNCPassword );
		[propput]
			HRESULT UNCPassword ( [in] BSTR strUNCPassword );

        [propget, helpstring("")]
            HRESULT DriverProgId( [out, retval] BSTR * pstrDriverProgId );
        [propput]
            HRESULT DriverProgId( [in] BSTR strDriverPropId );

        [propget, helpstring("")]
            HRESULT GroupPropFile( [out, retval] BSTR *pstrGroupPropFile );
        [propput]
            HRESULT GroupPropFile( [in] BSTR strGroupPropFile );

        [propget, helpstring("")]
            HRESULT UseAccount( [out, retval] DWORD *pfIsUNC );
        [propput]
            HRESULT UseAccount( [in] DWORD UseAccount );

        [propget, helpstring("")]
            HRESULT OwnExpire( [out, retval] BOOL *pfOwnExpire );
        [propput]
            HRESULT OwnExpire( [in] BOOL fOwnExpire );

        [propget, helpstring("")]
            HRESULT OwnModerator( [out, retval] BOOL *pfOwnModerator );
        [propput]
            HRESULT OwnModerator( [in] BOOL fOwnModerator );

        [propget, helpstring("")]
            HRESULT MdbGuid( [out, retval] BSTR *pstrMdbGuid );
        [propput]
            HRESULT MdbGuid( [in] BSTR strMdbGuid );

	};

	[
		object,
		uuid(aa068dc1-a635-11d0-896f-00aa00a74bf2),
		dual,
		helpstring("INntpVirtualRoots Interface"),
		pointer_default(unique)
	]
	interface INntpVirtualRoots : IDispatch
	{
		import "oaidl.idl";

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure")]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring("")]
			HRESULT ServiceInstance ( [out, retval] long * pdwServiceInstance );
		[propput]
			HRESULT ServiceInstance ( [in] long dwServiceInstance );

		//
		// Standard collection methods & properties:
		//

		[propget, helpstring("")]
			HRESULT Count ( [out, retval] long * pdwCount );

		[helpstring("")]
			HRESULT	Enumerate ( );

		[helpstring("")]
			HRESULT Item ( [in] long index, [out, retval] INntpVirtualRoot ** ppVRoot );

		[helpstring("")]
			HRESULT ItemDispatch ( [in] long index, [out, retval] IDispatch ** ppVRoot );

		[helpstring("")]
			HRESULT Add ( INntpVirtualRoot * pVRoot );

		[helpstring("")]
			HRESULT AddDispatch ( IDispatch * pVRoot );

		[helpstring("")]
			HRESULT Set ( [in] long index, [in] INntpVirtualRoot * pVRoot );

		[helpstring("")]
			HRESULT SetDispatch ( [in] long index, [in] IDispatch * pVRoot );

		[helpstring("")]
			HRESULT Remove ( [in] long index );

		[helpstring("")]
			HRESULT	Find	( [in] BSTR strNewsgroupSubtree, [out, retval] long * pIndex );
	};

	[
		object,
		uuid(cbf09fa0-b9ac-11d0-8977-00aa00a74bf2),
		dual,
		helpstring("ITcpAccess Interface"),
		pointer_default(unique)
	]
	interface ITcpAccess : IDispatch
	{
		import "oaidl.idl";

		[propget, helpstring("")]
			HRESULT GrantedList ( [out, retval] ITcpAccessExceptions ** ppGrantedList );

		[propget, helpstring("")]
			HRESULT DeniedList ( [out, retval] ITcpAccessExceptions ** ppDeniedList );
	};

	[
		object,
		uuid(cbf09fa1-b9ac-11d0-8977-00aa00a74bf2),
		dual,
		helpstring("ITcpAccessExceptions Interface"),
		pointer_default(unique)
	]
	interface ITcpAccessExceptions : IDispatch
	{
		import "oaidl.idl";

		[propget, helpstring("")]
			HRESULT Count ( [out, retval] long * pcCount );

		[helpstring("")]
			HRESULT AddDnsName ( [in] BSTR strDnsName );

		[helpstring("")]
			HRESULT AddIpAddress ( [in] long lIpAddress, [in] long lIpMask );

		[helpstring("")]
			HRESULT Item ( [in] long index, [out, retval] ITcpAccessException ** ppItem );

		[helpstring("")]
			HRESULT Remove ( [in] long index );

		[helpstring("")]
			HRESULT	Clear ( );

		[helpstring("")]
			HRESULT FindDnsIndex ( [in] BSTR strDnsName, [out, retval] long * pIndex );

		[helpstring("")]
			HRESULT FindIpIndex ( [in] long lIpAddress, [in] long lIpMask, [out, retval] long * pIndex );
	};

	[
		object,
		uuid(326e38c0-c32a-11d0-8989-00aa00a74bf2),
		dual,
		helpstring("ITcpAccessException Interface"),
		pointer_default(unique)
	]
	interface ITcpAccessException : IDispatch
	{
		import "oaidl.idl";

		[propget, helpstring("")]
			HRESULT IsDnsName ( [out, retval] BOOL * pfIsDnsName );

		[propget, helpstring("")]
			HRESULT IsIpAddress ( [out, retval] BOOL * pfIsIpAddress );

		[propget, helpstring("")]
			HRESULT DnsName ( [out, retval] BSTR * pstrDnsName );
		[propput]
			HRESULT DnsName ( [in] BSTR strDnsName );

		[propget, helpstring("")]
			HRESULT IpAddress ( [out, retval] long * plIpAddress );
		[propput]
			HRESULT IpAddress ( [in] long lIpAddress );

		[propget, helpstring("")]
			HRESULT IpMask ( [out, retval] long * plIpMask );
		[propput]
			HRESULT IpMask ( [in] long lIpMask );
	};

	//////////////////////////////////////////////////////////////////////
	//
	// Class Definitions:
	//
	//////////////////////////////////////////////////////////////////////

	[
		uuid(3241F066-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdmin Class")
	]
	coclass CNntpAdmin
	{
		[default] interface INntpAdmin;
	};

	[
		uuid(3241F07F-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdminServer Class")
	]
	coclass CNntpAdminService
	{
		[default] interface INntpService;
	};

	[
		uuid(3241F06B-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdminService Class")
	]
	coclass CNntpVirtualServer
	{
		[default] interface INntpVirtualServer;
	};

	[
		uuid(3241F070-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdminFeeds Class")
	]
	coclass CNntpAdminFeeds
	{
		[default] interface INntpAdminFeeds;
//        interface IADs;
	};

	[
		uuid(5bddc640-ae09-11d0-8974-00aa00a74bf2),
		helpstring("NntpFeed Class")
	]
	coclass CNntpFeed
	{
		[default] interface INntpFeed;
	};

	[
		uuid(5bddc641-ae09-11d0-8974-00aa00a74bf2),
		helpstring("NntpOneWayFeed Class")
	]
	coclass CNntpOneWayFeed
	{
		[default] interface INntpOneWayFeed;
	};

	[
		uuid(772bbad1-7a22-11d0-895d-00aa00a74bf2),
		helpstring("NntpAdminExpiration Class")
	]
	coclass CNntpAdminExpiration
	{
		[default] interface INntpAdminExpiration;
//        interface IADs;
	};
	
	[
		uuid(3241F075-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdminGroups Class")
	]
	coclass CNntpAdminGroups
	{
		[default] interface INntpAdminGroups;
        interface IADs;
	};

	[
		uuid(3241F07A-6D68-11D0-8950-00AA00A74BF2),
		helpstring("NntpAdminSessions Class")
	]
	coclass CNntpAdminSessions
	{
		[default] interface INntpAdminSessions;
  //      interface IADs;
	};

	[
		uuid(dee3b231-a3c2-11d0-896e-00aa00a74bf2),
		helpstring("NntpAdminRebuild Class")
	]
	coclass CNntpAdminRebuild
	{
		[default] interface INntpAdminRebuild;
//        interface IADs;
	};

	[
		uuid(28e6a820-a6c4-11d0-896f-00aa00a74bf2),
		helpstring("NntpVirtualRoot Class")
	]
	coclass CNntpVirtualRoot
	{
		[default] interface INntpVirtualRoot;
	}

/*
	[
		uuid(cbf09fa2-b9ac-11d0-8977-00aa00a74bf2),
		helpstring("TcpAccess Class")
	]
	coclass CTcpAccess
	{
		[default] interface ITcpAccess;
	}

	[
		uuid(cbf09fa3-b9ac-11d0-8977-00aa00a74bf2),
		helpstring("TcpAccessExceptions Class")
	]
	coclass CTcpAccessExceptions
	{
		[default] interface ITcpAccessExceptions;
	}

	[
		uuid(326e38c2-c32a-11d0-8989-00aa00a74bf2),
		helpstring("TcpAccessException Class")
	]
	coclass CTcpAccessException
	{
		[default] interface ITcpAccessException;
	}
*/

};

cpp_quote("#endif _NNTPADM_IDL_INCLUDED_")

