//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File:        certdb.idl
//
// Contents:    IDL source for certdb.dll
//
//---------------------------------------------------------------------------

import "wtypes.idl";
import "certbase.idl";
import "certbcli.idl";


interface ICertDB;
interface ICertDBRow;


typedef struct _CERTTRANSDBATTRIBUTE	// Marshalled form
{
    ULONG obwszName;
    ULONG obwszValue;
} CERTTRANSDBATTRIBUTE;

typedef struct _CERTDBATTRIBUTE		// Native form
{
    WCHAR *pwszName;
    WCHAR *pwszValue;
} CERTDBATTRIBUTE;


typedef struct _CERTTRANSDBEXTENSION	// Marshalled form
{
    ULONG obwszName;
    LONG  ExtFlags;
    DWORD cbValue;
    ULONG obValue;
} CERTTRANSDBEXTENSION;

typedef struct _CERTDBEXTENSION		// Native form
{
    WCHAR *pwszName;
    LONG  ExtFlags;
    DWORD cbValue;
    BYTE  *pbValue;
} CERTDBEXTENSION;

const LONG CDBENUM_ATTRIBUTES = 0x00000000;
const LONG CDBENUM_EXTENSIONS =	0x00000001;


//+--------------------------------------------------------------------------
// IEnumCERTDBCOLUMN class -- local COM interface
//+--------------------------------------------------------------------------


// IEnumCERTDBCOLUMN:Next return type

typedef struct _CERTTRANSDBCOLUMN	// Marshalled form
{
    DWORD Type;
    DWORD Index;
    DWORD cbMax;
    ULONG obwszName;
    ULONG obwszDisplayName;
} CERTTRANSDBCOLUMN;

typedef struct _CERTDBCOLUMN		// Native form
{
    DWORD  Type;
    DWORD  Index;
    DWORD  cbMax;
    WCHAR *pwszName;
    WCHAR *pwszDisplayName;
} CERTDBCOLUMN;


[
    object,
    uuid(90a27030-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("IEnumCERTDBCOLUMN Interface"),
    pointer_default(unique)
]

interface IEnumCERTDBCOLUMN: IUnknown
{
    import "oaidl.idl";

    HRESULT Next(
	[in]  ULONG         celt,
	[out] CERTDBCOLUMN *rgelt,
	[out] ULONG        *pceltFetched);
    
    HRESULT Skip(
	[in]  LONG  celt,
	[out] LONG *pielt);
    
    HRESULT Reset(void);
    
    HRESULT Clone(
	[out] IEnumCERTDBCOLUMN **ppenum);
};


//+--------------------------------------------------------------------------
// ICertDBComputedColumn class -- local COM interface
//+--------------------------------------------------------------------------

[
    object,
    uuid(5ed15981-4055-43a5-b853-58c2cd3ec101),
    local,
    helpstring("ICertDBComputedColumn Interface"),
    pointer_default(unique)
]

interface ICertDBComputedColumn: IUnknown
{
    import "oaidl.idl";

    HRESULT GetAlternateColumnId(
	[in] DWORD ComputedColumnId,
	[out] DWORD *pAlternateColumnId,
	[out] DWORD *pPropType);

    HRESULT ComputeColumnValue(
	[in] DWORD ComputedColumnId,
	[in] DWORD AlternateColumnId,
	[in] DWORD PropType,
	[in] DWORD cbProp,
	[in] BYTE const *pbProp,
	[out] DWORD *pdwValue);
};


//+--------------------------------------------------------------------------
// IEnumCERTDBRESULTROW class -- local COM interface
//+--------------------------------------------------------------------------

// IEnumCERTDBRESULTROW:Next return type

typedef struct _CERTTRANSDBRESULTCOLUMN	// Marshalled form
{
    DWORD  Type;
    DWORD  Index;
    ULONG  obValue;
    DWORD  cbValue;
} CERTTRANSDBRESULTCOLUMN;

typedef struct _CERTDBRESULTCOLUMN	// Native form
{
    DWORD  Type;
    DWORD  Index;
    BYTE  *pbValue;
    DWORD  cbValue;
} CERTDBRESULTCOLUMN;


typedef struct _CERTTRANSDBRESULTROW	// Marshalled form
{
    DWORD rowid;
    DWORD ccol;
    ULONG cbrow;
} CERTTRANSDBRESULTROW;

typedef struct _CERTDBRESULTROW		// Native form
{
    DWORD               rowid;
    DWORD               ccol;
    CERTDBRESULTCOLUMN *acol;
} CERTDBRESULTROW;

[
    object,
    uuid(915feb70-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("IEnumCERTDBRESULTROW Interface"),
    pointer_default(unique)
]

interface IEnumCERTDBRESULTROW: IUnknown
{
    import "oaidl.idl";

    HRESULT Next(
	[in]  ICertDBComputedColumn *pIComputedColumn,
	[in]  ULONG                  celt,
	[out] CERTDBRESULTROW       *rgelt,
	[out] ULONG                 *pceltFetched);

    HRESULT ReleaseResultRow(
	[in]      ULONG            celt,
	[in, out] CERTDBRESULTROW *rgelt);
    
    HRESULT Skip(
	[in]  LONG  celt,
	[out] LONG *pielt);
    
    HRESULT Reset(void);
    
    HRESULT Clone(
	[out] IEnumCERTDBRESULTROW **ppenum);
};


//+--------------------------------------------------------------------------
// IEnumCERTDBNAME class -- local COM interface
//+--------------------------------------------------------------------------


// IEnumCERTDBName:Next return type

typedef struct _CERTDBNAME
{
    WCHAR *pwszName;
} CERTDBNAME;


[
    object,
    uuid(91dbb1a0-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("IEnumCERTDBNAME Interface"),
    pointer_default(unique)
]

interface IEnumCERTDBNAME: IUnknown
{
    import "oaidl.idl";

    HRESULT Next(
	[in]  ULONG       celt,
	[out] CERTDBNAME *rgelt,
	[out] ULONG      *pceltFetched);
    
    HRESULT Skip(
	[in]  LONG  celt,
	[out] LONG *pielt);
    
    HRESULT Reset(void);
    
    HRESULT Clone(
	[out] IEnumCERTDBNAME **ppenum);
};


//+--------------------------------------------------------------------------
// ICertDBRow class -- local COM interface
//+--------------------------------------------------------------------------


const LONG CDBROW_COMMIT_ROLLBACK  = 0x00000000;
const LONG CDBROW_COMMIT_COMMIT    = 0x00000001;
const LONG CDBROW_COMMIT_SOFTCOMMIT= 0x00000002;

[
    object,
    uuid(924b3e50-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("ICertDBRow Interface"),
    pointer_default(unique)
]

interface ICertDBRow: IUnknown
{
    import "oaidl.idl";

    HRESULT BeginTransaction();

    HRESULT CommitTransaction(
	[in] DWORD dwCommitFlags);

    HRESULT GetRowId(
	[out] DWORD *pRowId);

    HRESULT Delete();

    HRESULT SetProperty(
	[in] WCHAR const *pwszPropName,
	[in] DWORD dwFlags,
	[in] DWORD cbProp,
	[in] BYTE const *pbProp);	// OPTIONAL

    HRESULT GetProperty(
	[in] WCHAR const *pwszPropName,
	[in] DWORD dwFlags,
	[in] ICertDBComputedColumn *pIComputedColumn,
	[in, out] DWORD *pcbProp,
	[out] BYTE *pbProp);		// OPTIONAL

    HRESULT SetExtension(
	[in] WCHAR const *pwszExtensionName,
	[in] DWORD dwExtFlags,
	[in] DWORD cbValue,
	[in] BYTE const *pbValue);	// OPTIONAL

    HRESULT GetExtension(
	[in] WCHAR const *pwszExtensionName,
	[out] DWORD *pdwExtFlags,
	[in, out] DWORD *pcbValue,
	[out] BYTE *pbValue);		// OPTIONAL

    HRESULT CopyRequestNames();

    HRESULT EnumCertDBName(
	[in]  DWORD dwFlags,
	[out] IEnumCERTDBNAME **ppenum);
};


//+--------------------------------------------------------------------------
// ICertDBBackup class -- local COM interface
//+--------------------------------------------------------------------------


[
    object,
    uuid(92a56660-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("ICertDBBackup Interface"),
    pointer_default(unique)
]

interface ICertDBBackup: IUnknown
{
    import "oaidl.idl";

    HRESULT GetDBFileList(
	[in, out] DWORD *pcwcList,
	[out] WCHAR *pwszzList);		// OPTIONAL

    HRESULT GetLogFileList(
	[in, out] DWORD *pcwcList,
	[out] WCHAR *pwszzList);		// OPTIONAL

    HRESULT OpenFile(
	[in] WCHAR const *pwszFile,
	[out] ULARGE_INTEGER *pliSize);		// OPTIONAL

    HRESULT ReadFile(
	[in, out] DWORD *pcb,
	[out] BYTE *pb);

    HRESULT CloseFile();

    HRESULT TruncateLog();
}


//+--------------------------------------------------------------------------
// ICertDBRestore class -- local COM interface
//+--------------------------------------------------------------------------


[
    object,
    uuid(93042400-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("ICertDBRestore Interface"),
    pointer_default(unique)
]

interface ICertDBRestore: IUnknown
{
    import "oaidl.idl";

    HRESULT RecoverAfterRestore(
	[in] DWORD cSession,
	[in] DWORD DBFlags,
	[in] WCHAR const *pwszEventSource,
	[in] WCHAR const *pwszLogDir,
	[in] WCHAR const *pwszSystemDir,
	[in] WCHAR const *pwszTempDir,
	[in] WCHAR const *pwszCheckPointFile,
	[in] WCHAR const *pwszLogPath,
	[in] CSEDB_RSTMAPW rgrstmap[],
	[in] LONG crstmap,
	[in] WCHAR const *pwszBackupLogPath,
	[in] DWORD genLow,
	[in] DWORD genHigh);
}


//+--------------------------------------------------------------------------
// ICertDB class -- local COM interface
//+--------------------------------------------------------------------------

// ICertDB::OpenView dwFlags:
const LONG CDBOPENVIEW_WORKERTHREAD =	1;

// ICertDB::ShutDown dwFlags:
const LONG CDBSHUTDOWN_PENDING =	1;

[
    object,
    uuid(93582f50-8bd5-11d3-b32e-00c04f79dc72),
    local,
    helpstring("ICertDB Interface"),
    pointer_default(unique)
]

interface ICertDB: IUnknown
{
    import "oaidl.idl";

    HRESULT Open(
	[in] DWORD dwFlags,	// DBFLAGS_*
	[in] DWORD cSession,
	[in] WCHAR const *pwszEventSource,
	[in] WCHAR const *pwszDBFile,
	[in] WCHAR const *pwszLogDir,
	[in] WCHAR const *pwszSystemDir,
	[in] WCHAR const *pwszTempDir);

    HRESULT ShutDown(
	[in] DWORD dwFlags);

    HRESULT OpenRow(
	[in]  DWORD dwFlags,
	[in]  DWORD RowId,
	[in]  WCHAR const *pwszSerialNumberOrCertHash,	// OPTIONAL
	[out] ICertDBRow **pprow);

    HRESULT OpenView(
	[in]  DWORD ccvr,
	[in]  CERTVIEWRESTRICTION const *acvr,
	[in]  DWORD ccolOut,
	[in]  DWORD const *acolOut,
	[in]  DWORD const dwFlags,
	[out] IEnumCERTDBRESULTROW **ppenum);

    HRESULT EnumCertDBColumn(
	[in]  DWORD dwTable,
	[out] IEnumCERTDBCOLUMN **ppenum);

    HRESULT OpenBackup(
	[in]  LONG grbitJet,
	[out] ICertDBBackup **ppBackup);

    HRESULT GetDefaultColumnSet(
        [in]       DWORD  iColumnSetDefault,
        [in]       DWORD  cColumnIds,
        [out]      DWORD *pcColumnIds,
	[out, ref] DWORD *pColumnIds);
};


//+--------------------------------------------------------------------------
// certdb Type library
//+--------------------------------------------------------------------------

[
    uuid(93adc1d0-8bd5-11d3-b32e-00c04f79dc72),
    version(2.0),
    helpstring("CertDB 2.0 Type Library")
]

library CERTDBLib
{
    importlib("stdole2.tlb");

    [
	uuid(94142360-8bd5-11d3-b32e-00c04f79dc72),
	helpstring("CertDBRestore Class")
    ]
    coclass CCertDBRestore
    {
	[default] interface ICertDBRestore;
    };

    [
	uuid(946e4b70-8bd5-11d3-b32e-00c04f79dc72),
	helpstring("CertDB Class")
    ]
    coclass CCertDB
    {
	[default] interface ICertDB;
    };
};