//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 2001
//
// File:        certreqd.idl
//
// Contents:    Definition of DCOM Interface for Certificate Services
//
//---------------------------------------------------------------------------

import "certbase.idl";
import "esent.idl";
import "oaidl.idl";

// 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,	// PROPTYPE_*
	[in]                 DWORD          dwFlags,	// EXTENSION_*
	[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);	// CA_DISP_*

    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,	// CRL_REASON_*
        [out]                LONG          *pDisposition);	// CA_DISP_*

    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);		// CRL

    HRESULT RevokeCertificate(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in, string, unique] wchar_t const *pwszSerialNumber,
	[in]                 DWORD          Reason,		// CRL_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);	// CERTTRANSDBCOLUMN

    HRESULT GetViewDefaultColumnSet(
	[in, string, unique] wchar_t const *pwszAuthority,
        [in]                 DWORD          iColumnSetDefault,
        [out]                DWORD         *pcColumn,
	[out, ref]           CERTTRANSBLOB *pctbColumnInfo);	// DWORD ColIds

    HRESULT EnumAttributesOrExtensions(
	[in, string, unique] wchar_t const *pwszAuthority,
        [in]                 DWORD          RowId,
        [in]                 DWORD          Flags,		// CDBENUM_*
	[in, string, unique] wchar_t const *pwszLast,
        [in]                 DWORD          celt,
        [out]                DWORD         *pceltFetched,
	[out, ref]           CERTTRANSBLOB *pctbOut);
				// CERTTRANSDBATTRIBUTE or CERTTRANSDBEXTENSION

    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);
		// CERTTRANSDBRESULTROW, containing CERTTRANSDBRESULTCOLUMN

    HRESULT EnumView(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 DWORD          ielt,
	[in]                 DWORD          celt,
	[out]                DWORD         *pceltFetched,
	[out, ref]           CERTTRANSBLOB *pctbResultRows);
		// CERTTRANSDBRESULTROW, containing CERTTRANSDBRESULTCOLUMN

    HRESULT CloseView(
	[in, string, unique] wchar_t const *pwszAuthority);

    HRESULT ServerControl(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 DWORD          dwControlFlags,	// CSCONTROL_*
	[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);	// 0 or 1

    HRESULT BackupPrepare(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 unsigned long  grbitJet,		// JET_bitBackup
	[in]                 unsigned long  dwBackupFlags,	// must be zero
	[in]                 WCHAR const   *pwszBackupAnnotation, // not used
	[in]                 DWORD          dwClientIdentifier);  // not used

    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,	// Cert
	[in]                    LONG           dwFlags,		// ICF_*
	[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);		// CA_CRL_*

    HRESULT GetCAProperty(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 LONG           PropId,		// CR_PROP_*
	[in]                 LONG           PropIndex,
	[in]                 LONG           PropType,		// PROPTYPE_*
	[out, ref]           CERTTRANSBLOB *pctbPropertyValue);	// varies

    HRESULT SetCAProperty(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 LONG           PropId,		// CR_PROP_*
	[in]                 LONG           PropIndex,
	[in]                 LONG           PropType,		// PROPTYPE_*
	[in]                 CERTTRANSBLOB *pctbPropertyValue);	// varies

    HRESULT GetCAPropertyInfo(
	[in, string, unique] wchar_t const *pwszAuthority,
	[out]                LONG          *pcProperty,
	[out, ref]           CERTTRANSBLOB *pctbPropInfo);	// CATRANSPROP

    HRESULT EnumViewColumnTable(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 DWORD          iTable,		// CVRC_TABLE_*
        [in]                 DWORD          iColumn,
        [in]                 DWORD          cColumn,
        [out]                DWORD         *pcColumn,
	[out, ref]           CERTTRANSBLOB *pctbColumnInfo);	// CERTTRANSDBCOLUMN

    HRESULT GetCASecurity(
	[in, string, unique] wchar_t const *pwszAuthority,
	[out, ref]	     CERTTRANSBLOB *pctbSD);		// SD

    HRESULT SetCASecurity(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in, ref]	     CERTTRANSBLOB *pctbSD);		// SD

    // 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);
				// encrypted PKCS7 inside a signed PKCS7

    HRESULT GetAuditFilter(
	[in, string, unique] wchar_t const *pwszAuthority,
	[out]                DWORD         *pdwFilter);	// SE_AUDITID_CERTSRV_*

    HRESULT SetAuditFilter(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]                 DWORD          dwFilter);	// SE_AUDITID_CERTSRV_*

    HRESULT GetOfficerRights(
	[in, string, unique] wchar_t const *pwszAuthority,
        [out]		     BOOL	   *pfEnabled,
	[out, ref]	     CERTTRANSBLOB *pctbSD);		// custom SD

    HRESULT SetOfficerRights(
	[in, string, unique] wchar_t const *pwszAuthority,
        [in]		     BOOL	    fEnable,
	[in, ref]	     CERTTRANSBLOB *pctbSD);		// custom SD

    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);		// IKF_*

    HRESULT GetMyRoles(
	[in, string, unique] wchar_t const *pwszAuthority,
	[out]                LONG          *pdwRoles);		// CA_ACCESS_*

    HRESULT DeleteRow(
	[in, string, unique] wchar_t const *pwszAuthority,
	[in]		     DWORD	    dwFlags,		// CDR_*
	[in]                 FILETIME       FileTime,
	[in]                 DWORD          dwTable,		// CVRC_TABLE_*
	[in]                 DWORD          dwRowId,
	[out, retval]        LONG          *pcDeleted);
}