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 ); };