357 lines
9.4 KiB
C
357 lines
9.4 KiB
C
|
//+--------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
||
|
//
|
||
|
// File: admin.h
|
||
|
//
|
||
|
// Contents: Implementation of DCOM object for RPC services
|
||
|
//
|
||
|
// History: July-97 xtan created
|
||
|
//
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
// Admin Interface
|
||
|
class CCertAdminD : public ICertAdminD2
|
||
|
{
|
||
|
public:
|
||
|
// IUnknown
|
||
|
|
||
|
virtual STDMETHODIMP QueryInterface(const IID& iid, void**ppv);
|
||
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
||
|
virtual ULONG STDMETHODCALLTYPE Release();
|
||
|
|
||
|
// ICertAdminD
|
||
|
|
||
|
virtual STDMETHODIMP SetExtension(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwRequestId,
|
||
|
IN wchar_t const *pwszExtensionName,
|
||
|
IN DWORD dwType,
|
||
|
IN DWORD dwFlags,
|
||
|
IN CERTTRANSBLOB *ptbValue);
|
||
|
|
||
|
virtual STDMETHODIMP SetAttributes(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwRequestId,
|
||
|
IN wchar_t const *pwszAttributes);
|
||
|
|
||
|
virtual STDMETHODIMP ResubmitRequest(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwRequestId,
|
||
|
OUT DWORD *pdwDisposition);
|
||
|
|
||
|
virtual STDMETHODIMP DenyRequest(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwRequestId);
|
||
|
|
||
|
virtual STDMETHODIMP IsValidCertificate(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN wchar_t const *pwszSerialNumber,
|
||
|
OUT LONG *pRevocationReason,
|
||
|
OUT LONG *pDisposition);
|
||
|
|
||
|
virtual STDMETHODIMP PublishCRL(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN FILETIME FileTime);
|
||
|
|
||
|
virtual STDMETHODIMP GetCRL(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT CERTTRANSBLOB *ptbCRL);
|
||
|
|
||
|
virtual STDMETHODIMP RevokeCertificate(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN wchar_t const *pwszSerialNumber,
|
||
|
IN DWORD Reason,
|
||
|
IN FILETIME FileTime);
|
||
|
|
||
|
virtual STDMETHODIMP EnumViewColumn(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD iColumn,
|
||
|
IN DWORD cColumn,
|
||
|
OUT DWORD *pcColumn,
|
||
|
OUT CERTTRANSBLOB *ptbColumnInfo);
|
||
|
|
||
|
virtual STDMETHODIMP GetViewDefaultColumnSet(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD iColumnSetDefault,
|
||
|
OUT DWORD *pcColumn,
|
||
|
OUT CERTTRANSBLOB *ptbColumnInfo);
|
||
|
|
||
|
virtual STDMETHODIMP EnumAttributesOrExtensions(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD RowId,
|
||
|
IN DWORD Flags,
|
||
|
OPTIONAL IN wchar_t const *pwszLast,
|
||
|
IN DWORD celt,
|
||
|
OUT DWORD *pceltFetched,
|
||
|
OUT CERTTRANSBLOB *pctbOut);
|
||
|
|
||
|
virtual STDMETHODIMP OpenView(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD ccvr,
|
||
|
IN CERTVIEWRESTRICTION const *acvr,
|
||
|
IN DWORD ccolOut,
|
||
|
IN DWORD const *acolOut,
|
||
|
IN DWORD ielt,
|
||
|
IN DWORD celt,
|
||
|
OUT DWORD *pceltFetched,
|
||
|
OUT CERTTRANSBLOB *pctbResultRows);
|
||
|
|
||
|
virtual STDMETHODIMP EnumView(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD ielt,
|
||
|
IN DWORD celt,
|
||
|
OUT DWORD *pceltFetched,
|
||
|
OUT CERTTRANSBLOB *pctbResultRows);
|
||
|
|
||
|
virtual STDMETHODIMP CloseView(
|
||
|
IN wchar_t const *pwszAuthority);
|
||
|
|
||
|
virtual STDMETHODIMP ServerControl(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwControlFlags,
|
||
|
OUT CERTTRANSBLOB *pctbOut);
|
||
|
|
||
|
virtual STDMETHODIMP Ping( // test function
|
||
|
IN wchar_t const *pwszAuthority);
|
||
|
|
||
|
virtual STDMETHODIMP GetServerState(
|
||
|
IN WCHAR const *pwszAuthority,
|
||
|
OUT DWORD *pdwState);
|
||
|
|
||
|
virtual STDMETHODIMP BackupPrepare(
|
||
|
IN WCHAR const *pwszAuthority,
|
||
|
IN unsigned long grbit,
|
||
|
IN unsigned long btBackupType,
|
||
|
IN WCHAR const *pwszBackupAnnotation,
|
||
|
IN DWORD dwClientIdentifier);
|
||
|
|
||
|
virtual STDMETHODIMP BackupEnd();
|
||
|
|
||
|
virtual STDMETHODIMP BackupGetAttachmentInformation(
|
||
|
OUT WCHAR **ppwszzDBFiles,
|
||
|
OUT LONG *pcwcDBFiles);
|
||
|
|
||
|
virtual STDMETHODIMP BackupGetBackupLogs(
|
||
|
OUT WCHAR **ppwszzLogFiles,
|
||
|
OUT LONG *pcwcLogFiles);
|
||
|
|
||
|
virtual STDMETHODIMP BackupOpenFile(
|
||
|
IN WCHAR const *pwszPath,
|
||
|
OUT unsigned hyper *pliLength);
|
||
|
|
||
|
virtual STDMETHODIMP BackupReadFile(
|
||
|
OUT BYTE *pbBuffer,
|
||
|
IN LONG cbBuffer,
|
||
|
OUT LONG *pcbRead);
|
||
|
|
||
|
virtual STDMETHODIMP BackupCloseFile();
|
||
|
|
||
|
virtual STDMETHODIMP BackupTruncateLogs();
|
||
|
|
||
|
virtual STDMETHODIMP ImportCertificate(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN CERTTRANSBLOB *pctbCertificate,
|
||
|
IN LONG dwFlags,
|
||
|
OUT LONG *pdwRequestId);
|
||
|
|
||
|
virtual STDMETHODIMP BackupGetDynamicFiles(
|
||
|
OUT WCHAR **ppwszzFiles,
|
||
|
OUT LONG *pcwcFiles);
|
||
|
|
||
|
virtual STDMETHODIMP RestoreGetDatabaseLocations(
|
||
|
OUT WCHAR **ppwszDatabaseLocations,
|
||
|
OUT LONG *pcwcPaths);
|
||
|
|
||
|
// ICertAdminD2
|
||
|
|
||
|
virtual STDMETHODIMP PublishCRLs(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN FILETIME FileTime,
|
||
|
IN DWORD Flags); // CA_CRL_*
|
||
|
|
||
|
virtual STDMETHODIMP GetCAProperty(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN LONG PropId, // CR_PROP_*
|
||
|
IN LONG PropIndex,
|
||
|
IN LONG PropType, // PROPTYPE_*
|
||
|
OUT CERTTRANSBLOB *pctbPropertyValue);
|
||
|
|
||
|
virtual STDMETHODIMP SetCAProperty(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN LONG PropId, // CR_PROP_*
|
||
|
IN LONG PropIndex,
|
||
|
IN LONG PropType, // PROPTYPE_*
|
||
|
OUT CERTTRANSBLOB *pctbPropertyValue);
|
||
|
|
||
|
virtual STDMETHODIMP GetCAPropertyInfo(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT LONG *pcProperty,
|
||
|
OUT CERTTRANSBLOB *pctbPropInfo);
|
||
|
|
||
|
virtual STDMETHODIMP EnumViewColumnTable(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD iTable,
|
||
|
IN DWORD iColumn,
|
||
|
IN DWORD cColumn,
|
||
|
OUT DWORD *pcColumn,
|
||
|
OUT CERTTRANSBLOB *pctbColumnInfo);
|
||
|
|
||
|
virtual STDMETHODIMP GetCASecurity(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT CERTTRANSBLOB *pctbSD);
|
||
|
|
||
|
virtual STDMETHODIMP SetCASecurity(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN CERTTRANSBLOB *pctbSD);
|
||
|
|
||
|
// this is a test function
|
||
|
virtual STDMETHODIMP Ping2(
|
||
|
IN wchar_t const *pwszAuthority);
|
||
|
|
||
|
virtual STDMETHODIMP GetArchivedKey(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwRequestId,
|
||
|
OUT CERTTRANSBLOB *pctbArchivedKey);
|
||
|
|
||
|
virtual STDMETHODIMP GetAuditFilter(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT DWORD *pdwFilter);
|
||
|
|
||
|
virtual STDMETHODIMP SetAuditFilter(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwFilter);
|
||
|
|
||
|
virtual STDMETHODIMP GetOfficerRights(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT BOOL *pfEnabled,
|
||
|
OUT CERTTRANSBLOB *pctbSD);
|
||
|
|
||
|
virtual STDMETHODIMP SetOfficerRights(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN BOOL fEnable,
|
||
|
IN CERTTRANSBLOB *pctbSD);
|
||
|
|
||
|
virtual STDMETHODIMP GetConfigEntry(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN wchar_t const *pwszNodePath,
|
||
|
IN wchar_t const *pwszEntry,
|
||
|
OUT VARIANT *pVariant);
|
||
|
|
||
|
virtual STDMETHODIMP SetConfigEntry(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN wchar_t const *pwszNodePath,
|
||
|
IN wchar_t const *pwszEntry,
|
||
|
IN VARIANT *pVariant);
|
||
|
|
||
|
virtual STDMETHODIMP ImportKey(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD RequestId,
|
||
|
IN wchar_t const *pwszCertHash,
|
||
|
IN DWORD Flags,
|
||
|
IN CERTTRANSBLOB *pctbKey);
|
||
|
|
||
|
virtual STDMETHODIMP GetMyRoles(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
OUT LONG *pdwRoles);
|
||
|
|
||
|
virtual STDMETHODIMP DeleteRow(
|
||
|
IN wchar_t const *pwszAuthority,
|
||
|
IN DWORD dwFlags, // CDR_*
|
||
|
IN FILETIME FileTime,
|
||
|
IN DWORD dwTable, // CVRC_TABLE_*
|
||
|
IN DWORD dwRowId,
|
||
|
OUT LONG *pcDeleted);
|
||
|
|
||
|
|
||
|
// CCertAdminD
|
||
|
|
||
|
// Constructor
|
||
|
CCertAdminD();
|
||
|
|
||
|
// Destructor
|
||
|
~CCertAdminD();
|
||
|
|
||
|
private:
|
||
|
HRESULT _EnumAttributes(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN CERTDBNAME *adbn,
|
||
|
IN DWORD celt,
|
||
|
OUT CERTTRANSBLOB *pctbOut);
|
||
|
|
||
|
HRESULT _EnumExtensions(
|
||
|
IN ICertDBRow *prow,
|
||
|
IN CERTDBNAME *adbn,
|
||
|
IN DWORD celt,
|
||
|
OUT CERTTRANSBLOB *pctbOut);
|
||
|
|
||
|
HRESULT _EnumViewNext(
|
||
|
IN IEnumCERTDBRESULTROW *pview,
|
||
|
IN DWORD ielt,
|
||
|
IN DWORD celt,
|
||
|
OUT DWORD *pceltFetched,
|
||
|
OUT CERTTRANSBLOB *pctbResultRows);
|
||
|
|
||
|
HRESULT _BackupGetFileList(
|
||
|
IN DWORD dwFileType,
|
||
|
OUT WCHAR **ppwszzFiles,
|
||
|
OUT LONG *pcwcFiles);
|
||
|
|
||
|
HRESULT _GetDynamicFileList(
|
||
|
IN OUT DWORD *pcwcList,
|
||
|
OUT WCHAR *pwszzList);
|
||
|
|
||
|
HRESULT _GetDatabaseLocations(
|
||
|
IN OUT DWORD *pcwcList,
|
||
|
OUT WCHAR *pwszzList);
|
||
|
|
||
|
// this is a test function
|
||
|
HRESULT _Ping(
|
||
|
IN wchar_t const *pwszAuthority);
|
||
|
|
||
|
private:
|
||
|
IEnumCERTDBCOLUMN *m_pEnumCol;
|
||
|
DWORD m_iTableEnum;
|
||
|
|
||
|
IEnumCERTDBRESULTROW *m_pView;
|
||
|
ICertDBBackup *m_pBackup;
|
||
|
JET_GRBIT m_grbitBackup;
|
||
|
|
||
|
// Reference count
|
||
|
long m_cRef;
|
||
|
long m_cNext;
|
||
|
};
|
||
|
|
||
|
|
||
|
// Class of Admin factory
|
||
|
class CAdminFactory : public IClassFactory
|
||
|
{
|
||
|
public:
|
||
|
// IUnknown
|
||
|
virtual STDMETHODIMP QueryInterface(const IID& iid, void **ppv);
|
||
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
||
|
virtual ULONG STDMETHODCALLTYPE Release();
|
||
|
|
||
|
// Interface IClassFactory
|
||
|
virtual STDMETHODIMP CreateInstance(
|
||
|
IUnknown *pUnknownOuter,
|
||
|
const IID& iid,
|
||
|
void **ppv);
|
||
|
virtual STDMETHODIMP LockServer(BOOL bLock);
|
||
|
|
||
|
// Constructor
|
||
|
CAdminFactory() : m_cRef(1) { }
|
||
|
|
||
|
// Destructor
|
||
|
~CAdminFactory();
|
||
|
|
||
|
public:
|
||
|
static STDMETHODIMP CanUnloadNow();
|
||
|
static STDMETHODIMP StartFactory();
|
||
|
static void StopFactory();
|
||
|
|
||
|
private:
|
||
|
long m_cRef;
|
||
|
};
|