windows-nt/Source/XPSP1/NT/net/published/idlole/iaspolcy.idl
2020-09-26 16:20:57 +08:00

397 lines
11 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Module: iaspolcy.idl
//
// Project: Everest
//
// Description: IAS Policy Subsystem Interface
//
// Author: TLP 12/1/97
//
///////////////////////////////////////////////////////////////////////////
// This file will be processed by the MIDL tool to
// produce the type library (iaspolcy.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
//////////
// IAS Reason-Codes
//////////
typedef enum {
IAS_SUCCESS = 0x00,
IAS_INTERNAL_ERROR = 0x01,
IAS_ACCESS_DENIED = 0x02,
IAS_MALFORMED_REQUEST = 0x03,
IAS_GLOBAL_CATALOG_UNAVAILABLE = 0x04,
IAS_DOMAIN_UNAVAILABLE = 0x05,
IAS_SERVER_UNAVAILABLE = 0x06,
IAS_NO_SUCH_DOMAIN = 0x07,
IAS_NO_SUCH_USER = 0x08,
IAS_AUTH_FAILURE = 0x10,
IAS_CHANGE_PASSWORD_FAILURE = 0x11,
IAS_UNSUPPORTED_AUTH_TYPE = 0x12,
IAS_NO_CLEARTEXT_PASSWORD = 0x13,
IAS_LM_NOT_ALLOWED = 0x14,
IAS_LOCAL_USERS_ONLY = 0x20,
IAS_PASSWORD_MUST_CHANGE = 0x21,
IAS_ACCOUNT_DISABLED = 0x22,
IAS_ACCOUNT_EXPIRED = 0x23,
IAS_ACCOUNT_LOCKED_OUT = 0x24,
IAS_INVALID_LOGON_HOURS = 0x25,
IAS_ACCOUNT_RESTRICTION = 0x26,
IAS_NO_POLICY_MATCH = 0x30,
IAS_NO_CONNECTION_REQUEST_POLICY_MATCH = 0x31,
IAS_DIALIN_LOCKED_OUT = 0x40,
IAS_DIALIN_DISABLED = 0x41,
IAS_INVALID_AUTH_TYPE = 0x42,
IAS_INVALID_CALLING_STATION = 0x43,
IAS_INVALID_DIALIN_HOURS = 0x44,
IAS_INVALID_CALLED_STATION = 0x45,
IAS_INVALID_PORT_TYPE = 0x46,
IAS_DIALIN_RESTRICTION = 0x47,
IAS_CPW_NOT_ALLOWED = 0x48,
IAS_INVALID_CERT_EKU = 0x49,
IAS_NO_RECORD = 0x50,
IAS_SESSION_TIMEOUT = 0x60,
IAS_UNEXPECTED_REQUEST = 0x61,
IAS_PROXY_REJECT = 0x70,
IAS_PROXY_UNKNOWN_GROUP = 0x71,
IAS_PROXY_UNKNOWN_SERVER = 0x72,
IAS_PROXY_PACKET_TOO_LONG = 0x73,
IAS_PROXY_SEND_ERROR = 0x74,
IAS_PROXY_TIMEOUT = 0x75,
IAS_PROXY_MALFORMED_RESPONSE = 0x76
} IASREASON;
/////////////////////////////////////////////
// IASATTRIBUTE structure (raw IAS attribute)
/////////////////////////////////////////////
// Allowed syntaxes
typedef enum IASTYPEENUM {
IASTYPE_INVALID = 0,
IASTYPE_BOOLEAN,
IASTYPE_INTEGER,
IASTYPE_ENUM,
IASTYPE_INET_ADDR,
IASTYPE_STRING,
IASTYPE_OCTET_STRING,
IASTYPE_UTC_TIME,
IASTYPE_PROV_SPECIFIC
} IASTYPE;
// C/C++ type for each allowed syntax.
typedef DWORD IAS_BOOLEAN, *PIAS_BOOLEAN;
typedef DWORD IAS_INTEGER, *PIAS_INTEGER;
typedef DWORD IAS_ENUM, *PIAS_ENUM;
typedef DWORD IAS_INET_ADDR, *PIAS_INET_ADDR;
typedef FILETIME IAS_UTC_TIME, *PIAS_UTC_TIME;
typedef struct _IAS_STRING {
LPSTR pszAnsi;
LPWSTR pszWide;
} IAS_STRING, *PIAS_STRING;
typedef struct _IAS_OCTET_STRING {
DWORD dwLength;
BYTE *lpValue;
} IAS_OCTET_STRING, *PIAS_OCTET_STRING;
typedef IAS_OCTET_STRING IAS_PROV_SPECIFIC, *PIAS_PROV_SPECIFIC;
// Attribute value structure.
typedef struct _IASVALUE
{
IASTYPE itType;
[ switch_is((DWORD)itType) ] union
{
[ case(IASTYPE_BOOLEAN) ]
IAS_BOOLEAN Boolean;
[ case(IASTYPE_INTEGER) ]
IAS_INTEGER Integer;
[ case(IASTYPE_ENUM) ]
IAS_ENUM Enumerator;
[ case(IASTYPE_INET_ADDR) ]
IAS_INET_ADDR InetAddr;
[ case(IASTYPE_STRING) ]
IAS_STRING String;
[ case(IASTYPE_OCTET_STRING) ]
IAS_OCTET_STRING OctetString;
[ case(IASTYPE_UTC_TIME) ]
IAS_UTC_TIME UTCTime;
[ case(IASTYPE_PROV_SPECIFIC) ]
IAS_PROV_SPECIFIC ProviderSpecific;
};
} IASVALUE, *PIASVALUE;
//
// these are the bit values
cpp_quote ("#define IAS_INCLUDE_IN_ACCEPT 0x00000001")
cpp_quote ("#define IAS_INCLUDE_IN_REJECT 0x00000002")
cpp_quote ("#define IAS_INCLUDE_IN_CHALLENGE 0x00000004")
cpp_quote ("#define IAS_INCLUDE_IN_RESPONSE (IAS_INCLUDE_IN_ACCEPT | IAS_INCLUDE_IN_REJECT | IAS_INCLUDE_IN_CHALLENGE)")
cpp_quote ("#define IAS_RECVD_FROM_CLIENT 0x00000008")
cpp_quote ("#define IAS_RECVD_FROM_PROTOCOL 0x00000010")
// Attribute structure.
typedef struct _IASATTRIBUTE {
/////////////////////////////////////////////////////////////////
// (1) dwReserved should be hidden from users
// (2) dwFlags is temporary... plan is to have an in attribute
// collection and an out attribute collection on the request.
//
// Make these changes after NT 5 beta.
/////////////////////////////////////////////////////////////////
DWORD dwReserved; // Reserved (reference count)
DWORD dwFlags; // Reserved (protocol state)
DWORD dwId; // Unique attribute ID - from IAS Dictionary
IASVALUE Value; // Attribute value
} IASATTRIBUTE, *PIASATTRIBUTE;
////////////////////////////////////////////////////////////
// IAS request object interface
////////////////////////////////////////////////////////////
// Request Identifiers
typedef enum _IASREQUEST
{
IAS_REQUEST_ACCESS_REQUEST,
IAS_REQUEST_ACCOUNTING,
IAS_REQUEST_CHALLENGE_RESPONSE,
IAS_REQUEST_NAS_STATE,
// Obsolete.
IAS_REQUEST_PROXY_PACKET = 999
} IASREQUEST;
// Response Identifiers
typedef enum _IASRESPONSE
{
IAS_RESPONSE_INVALID,
IAS_RESPONSE_ACCESS_ACCEPT,
IAS_RESPONSE_ACCESS_REJECT,
IAS_RESPONSE_ACCESS_CHALLENGE,
IAS_RESPONSE_ACCOUNTING,
IAS_RESPONSE_DISCARD_PACKET,
// Obsolete.
IAS_RESPONSE_FORWARD_PACKET = 999,
IAS_RESPONSE_RAS,
// New Response Identifiers Here...
IAS_RESPONSE_MAX = 2048
} IASRESPONSE;
// Protocol Identifiers
typedef enum _IASPROTOCOL
{
IAS_PROTOCOL_INVALID=0,
IAS_PROTOCOL_NONE,
IAS_PROTOCOL_RADIUS,
IAS_PROTOCOL_TACACSPLUS,
IAS_PROTOCOL_LDAP,
IAS_PROTOCOL_RAS
// New Protocol Identifiers Here...
} IASPROTOCOL;
// Providers
typedef enum _IASPROVIDER
{
IAS_PROVIDER_NONE,
IAS_PROVIDER_WINDOWS,
IAS_PROVIDER_RADIUS_PROXY
} IASPROVIDER;
interface IRequestSource; // Forward reference
// Request status
typedef [public] enum _IASREQUESTSTATUS
{
IAS_REQUEST_STATUS_ABORT, // Request cannot be handled
IAS_REQUEST_STATUS_CONTINUE, // Pass request to next handler
IAS_REQUEST_STATUS_HANDLED, // Request has been handled
// New Status Types Here...
IAS_REQUEST_STATUS_INVALID
} IASREQUESTSTATUS;
[
object,
uuid(6BC096A7-0CE6-11D1-BAAE-00C04FC2E20D),
pointer_default(unique)
]
interface IRequest : IUnknown
{
[propget, id(1)] HRESULT Request([out, retval] LONG *pVal);
[propput, id(1)] HRESULT Request([in] LONG newVal);
[propget, id(2)] HRESULT Response([out, retval] LONG *pVal);
[propget, id(3)] HRESULT Reason([out, retval] LONG *pVal);
[propget, id(4)] HRESULT Protocol([out, retval] IASPROTOCOL *pVal);
[propput, id(4)] HRESULT Protocol([in] IASPROTOCOL newVal);
[propget, id(5)] HRESULT Source([out, retval] IRequestSource** pVal);
[propput, id(5)] HRESULT Source([in] IRequestSource* newVal);
[id(7)] HRESULT SetResponse([in] IASRESPONSE eResponse,
[in] LONG lReason);
[id(8)] HRESULT ReturnToSource([in] IASREQUESTSTATUS eStatus);
};
////////////////////////////////////////////////////////////
// Raw interface to an IAS request object's attributes
////////////////////////////////////////////////////////////
typedef struct _ATTRIBUTEPOSITION
{
DWORD dwReserved; // For use by request object
PIASATTRIBUTE pAttribute;
} ATTRIBUTEPOSITION, *PATTRIBUTEPOSITION;
[
object,
hidden,
restricted,
uuid(6BC096A8-0CE6-11D1-BAAE-00C04FC2E20D),
pointer_default(unique)
]
interface IAttributesRaw : IUnknown
{
HRESULT AddAttributes([in] DWORD dwPosCount, [in, out] PATTRIBUTEPOSITION pPositions);
HRESULT RemoveAttributes([in] DWORD dwPosCount, [in] PATTRIBUTEPOSITION pPositions);
HRESULT RemoveAttributesByType([in] DWORD dwAttrIDCount, [in] LPDWORD lpdwAttrIDs);
HRESULT GetAttributeCount([in]LPDWORD lpdwCount);
HRESULT GetAttributes([in, out] LPDWORD lpdwPosCount, [out] PATTRIBUTEPOSITION pPositions, [in] DWORD dwAttrIDCount, [in] LPDWORD lpdwAttrIDs);
};
////////////////////////////////////////////////////////////
// Raw interface to an IAS request object's state
////////////////////////////////////////////////////////////
[
object,
hidden,
restricted,
uuid(6BC096BA-0CE6-11D1-BAAE-00C04FC2E20D),
pointer_default(unique)
]
interface IRequestState : IUnknown
{
HRESULT Push([in] unsigned hyper State);
HRESULT Pop([out] unsigned hyper* pState);
HRESULT Top([out] unsigned hyper* pState);
}
////////////////////////////////////////////////////////////
// Interface exported by request comsumer components
////////////////////////////////////////////////////////////
[
object,
uuid(6BC096AA-0CE6-11D1-BAAE-00C04FC2E20D),
dual,
pointer_default(unique)
]
interface IRequestHandler : IDispatch
{
[id(1)] HRESULT OnRequest(IRequest* pRequest);
};
////////////////////////////////////////////////////////////
// Interface exported by request producer components
////////////////////////////////////////////////////////////
[
object,
oleautomation,
uuid(6BC096A9-0CE6-11D1-BAAE-00C04FC2E20D),
pointer_default(unique)
]
interface IRequestSource : IUnknown
{
HRESULT OnRequestComplete(IRequest* pRequest, IASREQUESTSTATUS eStatus);
};
//////////////////////////////////////////////////////////////////////////
// Request Handler Quality Control Interface
//////////////////////////////////////////////////////////////////////////
// INOPERABLE - Request handler cannot process requests. Note that this
// is not necessarily a permanent condition.
//
// FLOODED - Request handler is too busy to accept any more requests.
//
// READY - Request handler is operational and can process requests.
//
// UNKNOWN - Initial state before the handle reports its state
typedef enum _QUALITYSTATUS
{
QUALITY_STATUS_INOPERABLE = 0x0001,
QUALITY_STATUS_FLOODED,
QUALITY_STATUS_READY,
QUALITY_STATUS_UNKNOWN
} QUALITYSTATUS;
[
object,
uuid(6BC096AB-0CE6-11D1-BAAE-00C04FC2E20D),
dual,
pointer_default(unique)
]
interface IQualityControl : IDispatch
{
HRESULT OnQualityNotify(QUALITYSTATUS eQualityStatus, LONG lObjectID);
HRESULT SetQualityNotify(IQualityControl* pQualityControl);
};
///////////////
// Type Library
///////////////
[
uuid(6BC096A5-0CE6-11D1-BAAE-00C04FC2E20D),
version(1.0),
helpstring("IAS Policy 1.0 Type Library")
]
library IASPolicyLib
{
importlib("stdole2.tlb");
//////////
// Classes
//////////
//////////////////////////////////////////////////////////////////////////
[
uuid(6BC096B1-0CE6-11D1-BAAE-00C04FC2E20D),
helpstring("Request Class")
]
coclass Request
{
[default] interface IRequest;
};
};