6 Appendix A: Full IDL

For ease of implementation, the full IDL is provided, where "ms-dtyp.idl" refers to the IDL found in [MS-DTYP] Appendix A, and "ms-oaut.idl" is the IDL found in [MS-OAUT] Appendix A.

 import "ms-dtyp.idl";
 import "ms-oaut.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 _CERTTRANSDBATTRIBUTE
 {
     ULONG obwszName;
     ULONG obwszValue;
 } CERTTRANSDBATTRIBUTE;
  
 typedef struct _CERTTRANSDBEXTENSION
 {
     ULONG obwszName;
     LONG  ExtFlags;
     DWORD cbValue;
     ULONG obValue;
 } CERTTRANSDBEXTENSION;
  
  
 typedef struct _CERTTRANSDBCOLUMN
 {
     DWORD Type;
     DWORD Index;
     DWORD cbMax;
     ULONG obwszName;
     ULONG obwszDisplayName;
 } CERTTRANSDBCOLUMN;
  
 typedef struct _CERTTRANSDBRESULTCOLUMN
 {
     DWORD  Type;
     DWORD  Index;
     ULONG  obValue;
     DWORD  cbValue;
 } CERTTRANSDBRESULTCOLUMN;
  
 typedef struct _CERTTRANSDBRESULTROW  // Marshaled form
 {
     DWORD rowid;
     DWORD ccol;
     ULONG cbrow;
 } CERTTRANSDBRESULTROW;
  
  
 typedef struct _CERTVIEWRESTRICTION
 {
     DWORD                            ColumnIndex;
     LONG                             SeekOperator;
     LONG                             SortOrder;
     [size_is(cbValue), unique] BYTE *pbValue;
     DWORD                            cbValue;
 } CERTVIEWRESTRICTION;
  
 /* Interface ICertAdminD */
 [
     object,
     uuid(d99e6e71-fc88-11d0-b498-00a0c90312f3),
     helpstring("ICertAdmin DCOM Interface"),
     pointer_default(unique)
 ]
 interface ICertAdminD: IUnknown
 {
     HRESULT SetExtension(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwRequestId,
         [in, string, unique] wchar_t const *pwszExtensionName,
         [in]                 DWORD          dwType,
         [in]                 DWORD          dwFlags,
         [in, ref]            CERTTRANSBLOB *pctbValue
     );
  
     HRESULT SetAttributes(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwRequestId,
         [in, string, unique] wchar_t const *pwszAttributes
     );
  
     HRESULT ResubmitRequest(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwRequestId,
         [out]                DWORD         *pdwDisposition
     );
  
     HRESULT DenyRequest(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwRequestId
     );
  
     HRESULT IsValidCertificate(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in, string, unique] wchar_t const *pSerialNumber,
         [out]                LONG          *pRevocationReason,
         [out]                LONG          *pDisposition
     );
  
     HRESULT PublishCRL(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 FILETIME       FileTime
     );
  
     HRESULT GetCRL(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out, ref]           CERTTRANSBLOB *pctbCRL
     );
  
     HRESULT RevokeCertificate(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in, string, unique] wchar_t const *pwszSerialNumber,
         [in]                 DWORD          Reason,
         [in]                 FILETIME       FileTime
     );
  
     HRESULT EnumViewColumn(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          iColumn,
         [in]                 DWORD          cColumn,
         [out]                DWORD         *pcColumn,
         [out, ref]           CERTTRANSBLOB *pctbColumnInfo
     );
  
     HRESULT GetViewDefaultColumnSet(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          iColumnSetDefault,
         [out]                DWORD         *pcColumn,
         [out, ref]           CERTTRANSBLOB *pctbColumnInfo
     );
  
     HRESULT EnumAttributesOrExtensions(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          RowId,
         [in]                 DWORD          Flags,
         [in, string, unique] wchar_t const *pwszLast,
         [in]                 DWORD          celt,
         [out]                DWORD         *pceltFetched,
         [out, ref]           CERTTRANSBLOB *pctbOut
     );
  
  
     HRESULT OpenView(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                   DWORD                     ccvr,
         [in, size_is(ccvr)]    CERTVIEWRESTRICTION const *acvr,
         [in]                   DWORD                      ccolOut,
         [in, size_is(ccolOut)] DWORD const               *acolOut,
         [in]                   DWORD                         ielt,
         [in]                   DWORD                         celt,
         [out]                  DWORD                *pceltFetched,
         [out, ref]             CERTTRANSBLOB      *pctbResultRows
     
     );
  
  
     HRESULT EnumView(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          ielt,
         [in]                 DWORD          celt,
         [out]                DWORD         *pceltFetched,
         [out, ref]           CERTTRANSBLOB *pctbResultRows
     );
  
  
     HRESULT CloseView(
         [in, string, unique] wchar_t const *pwszAuthority
     );
  
     HRESULT ServerControl(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwControlFlags,
         [out, ref]           CERTTRANSBLOB *pctbOut
     );
  
     /* this is a test function */
     HRESULT Ping(
         [in, string, unique] wchar_t const *pwszAuthority
     );
  
     HRESULT GetServerState(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out]                DWORD         *pdwState
     );
  
     HRESULT BackupPrepare(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 unsigned long  grbitJet,
         [in]                 unsigned long  dwBackupFlags,
         [in]                 WCHAR const   *pwszBackupAnnotation,
         [in]                 DWORD          dwClientIdentifier
     );
  
     HRESULT BackupEnd(
     );
  
     HRESULT BackupGetAttachmentInformation(
         [out, size_is( , *pcwcDBFiles)] WCHAR **ppwszzDBFiles,
         [out]                           LONG   *pcwcDBFiles
     );
  
     HRESULT BackupGetBackupLogs(
         [out, size_is( , *pcwcLogFiles)] WCHAR **ppwszzLogFiles,
         [out]                            LONG   *pcwcLogFiles
     );
  
     HRESULT BackupOpenFile(
         [in, string, unique] wchar_t const  *pwszPath,
         [out]                unsigned hyper *pliLength
     );
  
     HRESULT BackupReadFile(
         [ref, out, size_is(cbBuffer)] BYTE *pbBuffer,
         [in]                          LONG  cbBuffer,
         [out]                         LONG *pcbRead
     );
  
     HRESULT BackupCloseFile(
     );
  
     HRESULT BackupTruncateLogs(
     );
  
     HRESULT ImportCertificate(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in, ref]               CERTTRANSBLOB *pctbCertificate,
         [in]                    LONG           dwFlags,
         [out]                   LONG          *pdwRequestId
     );
  
     HRESULT BackupGetDynamicFiles(
         [out, size_is( , *pcwcFiles)] WCHAR **ppwszzFiles,
         [out]                         LONG   *pcwcFiles
     );
  
     HRESULT RestoreGetDatabaseLocations(
         [out, size_is( , *pcwcPaths)] WCHAR 
                       **ppwszzDatabaseLocations,
         [out]                         LONG   *pcwcPaths
     );
 };
  
  
 /* Interface ICertAdminD2 */
 [
     object,
     uuid(7fe0d935-dda6-443f-85d0-1cfb58fe41dd),
     helpstring("ICertAdmin2 DCOM Interface"),
     pointer_default(unique)
 ]
 interface ICertAdminD2: ICertAdminD
 {
     HRESULT PublishCRLs(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 FILETIME       FileTime,
         [in]                 DWORD            Flags
     );
  
     HRESULT GetCAProperty(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 LONG           PropId,
         [in]                 LONG           PropIndex,
         [in]                 LONG           PropType,
         [out, ref]           CERTTRANSBLOB *pctbPropertyValue
     );
  
     HRESULT SetCAProperty(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 LONG           PropId,
         [in]                 LONG           PropIndex,
         [in]                 LONG           PropType,
         [in]                 CERTTRANSBLOB *pctbPropertyValue
     );
  
     HRESULT GetCAPropertyInfo(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out]                LONG          *pcProperty,
         [out, ref]           CERTTRANSBLOB *pctbPropInfo
     );
  
     HRESULT EnumViewColumnTable(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          iTable,
         [in]                 DWORD          iColumn,
         [in]                 DWORD          cColumn,
         [out]                DWORD         *pcColumn,
         [out, ref]           CERTTRANSBLOB *pctbColumnInfo
     );
  
     HRESULT GetCASecurity(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out, ref]             CERTTRANSBLOB *pctbSD
     );
  
     HRESULT SetCASecurity(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in, ref]             CERTTRANSBLOB *pctbSD
     );
  
     /* this is a test function */
     HRESULT Ping2(
         [in, string, unique] wchar_t const *pwszAuthority
     );
  
     HRESULT GetArchivedKey(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                     DWORD            dwRequestId,
         [out, ref]             CERTTRANSBLOB *pctbArchivedKey
     );
  
  
     HRESULT GetAuditFilter(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out]                DWORD         *pdwFilter
     );
  
     HRESULT SetAuditFilter(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                 DWORD          dwFilter
     );
  
     HRESULT GetOfficerRights(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out]                     BOOL           *pfEnabled,
         [out, ref]             CERTTRANSBLOB *pctbSD
     );
  
     HRESULT SetOfficerRights(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                     BOOL            fEnable,
         [in, ref]             CERTTRANSBLOB *pctbSD
     );
  
     HRESULT GetConfigEntry(
         [in, string, unique] wchar_t const *pwszAuthority,        
         [in, string, unique] wchar_t const *pwszNodePath,
         [in, string, ref]    wchar_t const *pwszEntry,
         [out, ref]             VARIANT           *pVariant
     );
  
     HRESULT SetConfigEntry(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in, string, unique] wchar_t const *pwszNodePath,
         [in, string, ref]    wchar_t const *pwszEntry,
         [in, ref]             VARIANT           *pVariant
     );
  
     HRESULT ImportKey(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                     DWORD            dwRequestId,
         [in, string, unique] wchar_t const *pwszCertHash,
         [in]                     DWORD            dwFlags,
         [in, ref]             CERTTRANSBLOB *pctbKey
     );
  
     HRESULT GetMyRoles(
         [in, string, unique] wchar_t const *pwszAuthority,
         [out]                LONG          *pdwRoles
     );
  
     HRESULT DeleteRow(
         [in, string, unique] wchar_t const *pwszAuthority,
         [in]                     DWORD            dwFlags,
         [in]                 FILETIME       FileTime,
         [in]                 DWORD          dwTable,
         [in]                 DWORD          dwRowId,
         [out, retval]        LONG          *pcDeleted
     );
 }