7 Appendix B: Full IDL

For ease of implementation, the full IDL is provided below.

This IDL imports the IDL from the OLE Automation Protocol [MS-OAUT], Appendix A, to provide support for the type definitions VARIANT and SAFEARRAY.

 import "ms-oaut.idl";
 #define SAFEARRAY(type) SAFEARRAY
 #define DISPID_PCH_BASE                           0x08010000
 #define DISPID_PCH_BASE_COL                       (DISPID_PCH_BASE + 0x0000) 
 #define DISPID_PCH_HELPSVC_BASE                   0x08000000
 #define DISPID_PCH_HELPSVC_BASE_SVC               (DISPID_PCH_HELPSVC_BASE + 0x0000) 
 #define DISPID_PCH_SVC__REMOTECONNECTIONPARMS     (DISPID_PCH_HELPSVC_BASE_SVC  + 0x0040)
 #define DISPID_PCH_SVC__REMOTEUSERSESSIONINFO     (DISPID_PCH_HELPSVC_BASE_SVC  + 0x0041)
 #define DISPID_PCH_COL__COUNT                     (DISPID_PCH_BASE_COL  + 0x0000)
  
 #define DISPID_SAF_BASE                           0x08020000
 #define DISPID_SAF_BASE_RCD                       (DISPID_SAF_BASE + 0x0B00) 
 #define DISPID_SAF_BASE_USER                      (DISPID_SAF_BASE + 0x0C00) 
 #define DISPID_SAF_BASE_SESS                      (DISPID_SAF_BASE + 0x0D00) 
 #define DISPID_SAF_USER__DOMAINNAME               (DISPID_SAF_BASE_USER + 0x0010)
 #define DISPID_SAF_USER__USERNAME                 (DISPID_SAF_BASE_USER + 0x0011)
 #define DISPID_SAF_SESS__SESSIONID                (DISPID_SAF_BASE_SESS + 0x0010)
 #define DISPID_SAF_SESS__SESSIONSTATE             (DISPID_SAF_BASE_SESS + 0x0011)
 #define DISPID_SAF_SESS__DOMAINNAME               (DISPID_SAF_BASE_SESS + 0x0012)
 #define DISPID_SAF_SESS__USERNAME                 (DISPID_SAF_BASE_SESS + 0x0013)
  
 typedef enum
 {
     pchActive                  = 0,
     pchConnected               = 1,
     pchConnectQuery            = 2,
     pchShadow                  = 3,
     pchDisconnected            = 4,
     pchIdle                    = 5,
     pchListen                  = 6,
     pchReset                   = 7,
     pchDown                    = 8,
     pchInit                    = 9,
     pchStateInvalid            = 10
 } SessionStateEnum;
  
  
  
 [
     object,
     uuid(833E4100-AFF7-4AC3-AAC2-9F24C1457BCE),
     dual,
     oleautomation,
     helpstring("IPCHCollection Interface"),
     pointer_default(unique)
 ]
  
 interface IPCHCollection : IDispatch
 {
     [propget, id(DISPID_NEWENUM)       ] HRESULT _NewEnum(                   
      [out, retval] IUnknown* *pVal    );
     [propget, id(DISPID_VALUE)         ] HRESULT Item    ( 
      [in] long vIndex,
        [out, retval] VARIANT   *ppEntry );
     [propget, id(DISPID_PCH_COL__COUNT)] HRESULT Count   (                   
      [out, retval] long      *pVal    );
 };
  
  
 [
     object,
     uuid(833E4200-AFF7-4AC3-AAC2-9F24C1457BCE),
     dual,
     oleautomation,
     helpstring("IPCHService Interface"),
     pointer_default(unique)
 ]
 interface IPCHService : IDispatch
 {
 HRESULT Opnum7NotUsedByProtocol(void);
 HRESULT Opnum8NotUsedByProtocol(void);
 HRESULT Opnum9NotUsedByProtocol(void);
 HRESULT Opnum10NotUsedByProtocol(void);
 HRESULT Opnum11NotUsedByProtocol(void);
 HRESULT Opnum12NotUsedByProtocol(void);
 HRESULT Opnum13NotUsedByProtocol(void);
 HRESULT Opnum14NotUsedByProtocol(void);
 HRESULT Opnum15NotUsedByProtocol(void);
 HRESULT Opnum16NotUsedByProtocol(void);
 HRESULT Opnum17NotUsedByProtocol(void);
 HRESULT Opnum18NotUsedByProtocol(void);
 [id(DISPID_PCH_SVC__REMOTECONNECTIONPARMS)] HRESULT RemoteConnectionParms( 
      [in] BSTR bstrUserName,
      [in] BSTR bstrDomainName,
      [in] long lSessionID,
      [in] BSTR bstrUserHelpBlob,
      [out, retval] BSTR *pbstrConnectionString );
 [id(DISPID_PCH_SVC__REMOTEUSERSESSIONINFO)] HRESULT RemoteUserSessionInfo( 
      [out, retval] IPCHCollection* *pVal );
 HRESULT Opnum21NotUsedByProtocol(void);
 };
  
 [
     object,
     uuid(833E41AA-AFF7-4AC3-AAC2-9F24C1457BCE),
     dual,
     oleautomation,
     helpstring("ISAFSession Interface"),
     pointer_default(unique)
 ]
  
 interface ISAFSession : IDispatch
 {
     [propget, id(DISPID_SAF_SESS__SESSIONID   )] HRESULT SessionID   ( 
      [out, retval] DWORD                   *pVal   );
     [propput, id(DISPID_SAF_SESS__SESSIONID   )] HRESULT SessionID   ( 
      [in         ] DWORD                    pVal   );
     [propget, id(DISPID_SAF_SESS__SESSIONSTATE)] HRESULT SessionState( 
       [out, retval] SessionStateEnum       *pVal   );
     [propput, id(DISPID_SAF_SESS__SESSIONSTATE)] HRESULT SessionState( 
      [in         ] SessionStateEnum         pVal   );
     [propget, id(DISPID_SAF_SESS__DOMAINNAME  )] HRESULT DomainName  ( 
      [out, retval] BSTR                    *pVal   );
     [propput, id(DISPID_SAF_SESS__DOMAINNAME  )] HRESULT DomainName  ( 
      [in         ] BSTR                     pVal   );
     [propget, id(DISPID_SAF_SESS__USERNAME    )] HRESULT UserName    ( 
      [out, retval] BSTR                    *pVal   );
     [propput, id(DISPID_SAF_SESS__USERNAME    )] HRESULT UserName    ( 
      [in         ] BSTR                     pVal   );
 };
  
 [
     object,
     uuid(F120A684-B926-447F-9DF4-C966CB785648),
     dual,
     nonextensible,
     helpstring("IRASrv Interface"),
     pointer_default(unique)
 ]
 interface IRASrv : IDispatch{
     [id(1), helpstring("method GetNoviceUserInfo")] HRESULT GetNoviceUserInfo(
      [in,out] LPWSTR * szName);
     [id(2), helpstring("method GetSessionInfo")] HRESULT GetSessionInfo(
      [in,out] SAFEARRAY(BSTR) * UserNames, [in,out] INT * Count);
 };
     
 [
     uuid(833E4010-AFF7-4AC3-AAC2-9F24C1457BCE),
     helpstring("PCHService Class")
 ]
 coclass PCHService
 {
     [default] interface IPCHService;
 }
  
 [
     uuid(3C3A70A7-A468-49B9-8ADA-28E11FCCAD5D),
     helpstring("RASrv Class")
 ]
 coclass RASrv
 {
     [default] interface IRASrv;
 };