6 Appendix A: Full IDL

For ease of implementation, the full interface definition language (IDL) is provided here, where "ms-dcom.idl" is the IDL as specified in [MS-DCOM] section 6.

  
 import "ms-dcom.idl";
 typedef byte BYTE;
  
 typedef struct _CERTTRANSBLOB {
     ULONG                       cb;
     [size_is(cb), unique] BYTE *pb;
 } CERTTRANSBLOB;
  
 typedef struct _CATRANSPROP {
     LONG   lPropID;
     BYTE   propType;
     BYTE   Reserved;
     USHORT propFlags;
     ULONG  obwszDisplayName;
 } CATRANSPROP;
  
 typedef struct _CAINFO {
     DWORD               cbSize;
     long                CAType;
     DWORD               cCASignatureCerts;
     DWORD               cCAExchangeCerts;
     DWORD               cExitAlgorithms;
     long                lPropIDMax;
     long                lRoleSeparationEnabled;
     DWORD               cKRACertUsedCount;
     DWORD               cKRACertCount;
     DWORD               fAdvancedServer;
 } CAINFO;
  
  
 [
     object,
     uuid(d99e6e70-fc88-11d0-b498-00a0c90312f3),
     helpstring("ICertRequest DCOM Interface"),
     pointer_default(unique)
 ]
 interface ICertRequestD: IUnknown
 {
     HRESULT Request(
         [in]                 DWORD                dwFlags,       
         [in, string, unique, range(1, 1536)] wchar_t const       *pwszAuthority,
         [in, out, ref]       DWORD               *pdwRequestId,
         [out]                DWORD               *pdwDisposition,   
         [in, string, unique, range(1, 1536)] wchar_t const       *pwszAttributes,
         [in, ref]            CERTTRANSBLOB const *pctbRequest,       
         [out, ref]           CERTTRANSBLOB       *pctbCertChain,    
         [out, ref]           CERTTRANSBLOB       *pctbEncodedCert,
         [out, ref]           CERTTRANSBLOB       *pctbDispositionMessage
     );
                                 
     HRESULT GetCACert(
         [in]                 DWORD          fchain,        
         [in, string, unique, range(1, 1536)] wchar_t const *pwszAuthority,
         [out, ref]           CERTTRANSBLOB *pctbOut
     );        
  
     HRESULT Ping(
         [in, string, unique, range(1, 1536)] wchar_t const *pwszAuthority
     );
 };
  
  
 [
     object,
     uuid(5422fd3a-d4b8-4cef-a12e-e87d4ca22e90),
     helpstring("ICertRequest2 DCOM Interface"),
     pointer_default(unique)
 ]
 interface ICertRequestD2: ICertRequestD
 {
     HRESULT Request2(
         [in, string, unique, range(1, 1536)] wchar_t const       *pwszAuthority,
         [in]                 DWORD                dwFlags,        
         [in, string, unique, range(1, 64)] wchar_t const       *pwszSerialNumber, 
         [in, out, ref]       DWORD               *pdwRequestId,
         [out]                DWORD               *pdwDisposition,  
         [in, string, unique, range(1, 1536)] wchar_t const       *pwszAttributes,
         [in, ref]            CERTTRANSBLOB const *pctbRequest,     
         [out, ref]           CERTTRANSBLOB       *pctbFullResponse, 
         [out, ref]           CERTTRANSBLOB       *pctbEncodedCert,  
         [out, ref]           CERTTRANSBLOB       *pctbDispositionMessage
     );
  
     HRESULT GetCAProperty(
         [in, string, unique, range(1, 1536)] wchar_t const *pwszAuthority,
         [in]                 long           PropID,    
         [in]                 long           PropIndex,
         [in]                 long           PropType,    
         [out, ref]           CERTTRANSBLOB *pctbPropertyValue
     );    
  
     HRESULT GetCAPropertyInfo(
         [in, string, unique, range(1, 1536)] wchar_t const *pwszAuthority,
         [out]                long          *pcProperty,
         [out, ref]           CERTTRANSBLOB *pctbPropInfo
     );    
  
     HRESULT Ping2(
         [in, string, unique, range(1, 1536)] wchar_t const *pwszAuthority
     );
 };