windows-nt/Source/XPSP1/NT/admin/snapin/certmgr/cmponent.h
2020-09-26 16:20:57 +08:00

355 lines
11 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-2001.
//
// File: cmponent.h
//
// Contents:
//
//----------------------------------------------------------------------------
// cmponent.h : Declaration of CCertMgrComponent
#ifndef __CMPONENT_H_INCLUDED__
#define __CMPONENT_H_INCLUDED__
#include <cryptui.h>
#include <winsafer.h>
#include "cookie.h" // CCertMgrCookie
#include "certifct.h"
#include "ctl.h"
#include "crl.h"
#include "SaferUtil.h"
#include "SaferEntry.h"
enum {
IDM_USAGE_VIEW = 100,
IDM_STORE_VIEW = 101,
IDM_TASK_RENEW_NEW_KEY,
IDM_TASK_RENEW_SAME_KEY,
IDM_TASK_IMPORT,
IDM_TASK_EXPORT,
IDM_TASK_CTL_EXPORT,
IDM_TASK_EXPORT_STORE,
IDM_OPEN,
IDM_TASK_OPEN,
IDM_TASK_FIND,
IDM_TOP_FIND,
IDM_ENROLL_NEW_CERT,
IDM_ENROLL_NEW_CERT_SAME_KEY,
IDM_ENROLL_NEW_CERT_NEW_KEY,
IDM_CTL_EDIT,
IDM_NEW_CTL,
IDM_ADD_DOMAIN_ENCRYPTED_RECOVERY_AGENT,
IDM_ADD_DOMAIN_ENCRYPTED_RECOVERY_AGENT1,
IDM_ADD_DOMAIN_ENCRYPTED_RECOVERY_AGENT2,
IDM_CREATE_DOMAIN_ENCRYPTED_RECOVERY_AGENT,
IDM_EDIT_ACRS,
IDM_TASK_CRL_EXPORT,
IDM_OPTIONS,
IDM_INIT_POLICY,
IDM_DEL_POLICY,
IDM_DEL_POLICY1,
IDM_TOP_CHANGE_COMPUTER,
IDM_TASK_CHANGE_COMPUTER,
IDM_NEW_ACRS,
IDM_SAFER_LEVEL_SET_DEFAULT,
IDM_SAFER_NEW_ENTRY_PATH,
IDM_SAFER_NEW_ENTRY_HASH,
IDM_SAFER_NEW_ENTRY_CERTIFICATE,
IDM_SAFER_NEW_ENTRY_INTERNET_ZONE,
IDM_TASK_PULSEAUTOENROLL,
IDM_TOP_CREATE_NEW_SAFER_POLICY,
IDM_TASK_CREATE_NEW_SAFER_POLICY
};
// forward declarations
class CCertMgrComponentData;
class CCertMgrComponent :
public CComponent,
public IExtendContextMenu,
public ICertificateManager,
public IExtendPropertySheet,
public IResultDataCompare,
public IExtendControlbar,
public PersistStream
{
public:
CCertMgrComponent();
virtual ~CCertMgrComponent();
BEGIN_COM_MAP(CCertMgrComponent)
COM_INTERFACE_ENTRY(ICertificateManager)
COM_INTERFACE_ENTRY(IExtendContextMenu)
COM_INTERFACE_ENTRY(IExtendPropertySheet)
COM_INTERFACE_ENTRY(IResultDataCompare)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IExtendControlbar)
COM_INTERFACE_ENTRY_CHAIN(CComponent)
END_COM_MAP()
#if DBG==1
ULONG InternalAddRef()
{
return CComObjectRoot::InternalAddRef();
}
ULONG InternalRelease()
{
return CComObjectRoot::InternalRelease();
}
int dbg_InstID;
#endif // DBG==1
// IExtendContextMenu
public:
STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject,
LPCONTEXTMENUCALLBACK pCallbackUnknown,
long *pInsertionAllowed);
STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject);
// IResultDataCompare
STDMETHOD(Compare)(LPARAM lUserParam, MMC_COOKIE cookieA, MMC_COOKIE cookieB, int* pnResult);
// IComponent implemented in CComponent
// support methods for IComponent
virtual HRESULT ReleaseAll();
virtual HRESULT OnPropertyChange( LPARAM param );
virtual HRESULT OnViewChange (LPDATAOBJECT pDataObject, LPARAM data, LPARAM hint);
virtual HRESULT Show(CCookie* pcookie, LPARAM arg, HSCOPEITEM hScopeItem, LPDATAOBJECT pDataObject);
virtual HRESULT Show(CCookie* pcookie, LPARAM arg, HSCOPEITEM hScopeItem);
virtual HRESULT OnNotifyAddImages( LPDATAOBJECT pDataObject,
LPIMAGELIST lpImageList,
HSCOPEITEM hSelectedItem );
HRESULT PopulateListbox(CCertMgrCookie* pcookie);
HRESULT RefreshResultPane();
static HRESULT LoadStrings();
HRESULT LoadColumns( CCertMgrCookie* pcookie );
CCertMgrComponentData& QueryComponentDataRef()
{
return (CCertMgrComponentData&)QueryBaseComponentDataRef();
}
public:
STDMETHOD(GetDisplayInfo)(RESULTDATAITEM* pResultDataItem);
CCertMgrCookie* m_pViewedCookie; // CODEWORK I hate to have to do this...
static const GUID m_ObjectTypeGUIDs[CERTMGR_NUMTYPES];
static const BSTR m_ObjectTypeStrings[CERTMGR_NUMTYPES];
inline CCertMgrCookie* ActiveCookie( CCookie* pBaseCookie )
{
return (CCertMgrCookie*)ActiveBaseCookie( pBaseCookie );
}
// IExtendPropertySheet
STDMETHOD(CreatePropertyPages)(LPPROPERTYSHEETCALLBACK pCall, LONG_PTR handle, LPDATAOBJECT pDataObject);
STDMETHOD(QueryPagesFor)(LPDATAOBJECT pDataObject);
CTypedPtrList<CPtrList, CCertStore*> m_usageStoreList;
// PersistStream
HRESULT STDMETHODCALLTYPE Load(IStream __RPC_FAR *pStg);
HRESULT STDMETHODCALLTYPE Save(IStream __RPC_FAR *pStgSave, BOOL fSameAsLoad);
// IExtendControlbar
HRESULT STDMETHODCALLTYPE SetControlbar (/* [in] */ LPCONTROLBAR pControlbar);
HRESULT STDMETHODCALLTYPE ControlbarNotify(
MMC_NOTIFY_TYPE event, // user action
LPARAM arg, // depends on the event parameter
LPARAM param); // depends on the event parameter
private:
HRESULT AddLevel (
const CString& szLevel,
DWORD dwLevel,
bool fIsMachine,
PCWSTR pszServerName);
HRESULT AddSaferLevels (
bool bIsComputer,
PCWSTR pszServerName,
HKEY hGroupPolicyKey);
bool m_bShowArchivedCertsStateWhenLogStoresEnumerated;
LPDATAOBJECT m_pPastedDO;
CertificateManagerObjectType m_currResultNodeType;
bool m_bUsageStoresEnumerated;
CString m_szDisplayInfoResult;
UINT* m_ColumnWidths[CERTMGR_NUMTYPES];
int m_nSelectedCertColumn;
int m_nSelectedCRLColumn;
int m_nSelectedCTLColumn;
int m_nSelectedSaferEntryColumn;
CUsageCookie* m_pLastUsageCookie;
LPCONTROLBAR m_pControlbar;
LPTOOLBAR m_pToolbar;
void SetTextNotAvailable ();
protected:
HRESULT SaferFinishEntryAndAdd (SAFER_ENTRY_TYPE previousType,
PSAFER_IDENTIFICATION_HEADER pCaiCommon,
bool bIsComputer,
long dwLevel,
CSaferEntries* pSaferEntries,
const CString& szPreviousKey);
HRESULT InsertNewSaferEntry (
SAFER_ENTRY_TYPE type,
bool bIsMachine,
PCWSTR pwcszObjectName,
PSAFER_IDENTIFICATION_HEADER pCaiCommon,
DWORD dwLevel,
CSaferEntries* pSaferEntries,
IGPEInformation* pGPEInformation,
CCertificate* pCert,
PCWSTR pszRSOPRegistryKey = 0);
HRESULT EnumSaferCertificates (
bool bIsMachine,
CCertStore& rCertStore,
CSaferEntries* pSaferEntries);
HRESULT SaferEnumerateNonCertEntries (HKEY hGroupPolicyKey, bool bIsComputer);
HRESULT SaferEnumerateRSOPNonCertEntries (
bool bIsComputer,
CSaferEntries* pSaferEntries);
HRESULT SaferEnumerateCertEntries (
bool bIsComputer,
CSaferEntries* pSaferEntries);
HRESULT SaferGetSingleEntry (
bool bIsMachine,
SAFER_LEVEL_HANDLE hLevel,
GUID& rEntryGuid,
DWORD dwLevelID);
HRESULT SaferEnumerateEntriesAtLevel (bool bIsMachine, HKEY hGroupPolicyKey, DWORD dwLevel);
HRESULT SaferEnumerateEntries (bool bIsComputer,
CSaferEntries* pSaferEntries);
HRESULT DisplayCertificateCountByUsage (const CString& usageName, int nCertCnt) const;
bool DeletePrivateKey (CCertStore& rCertStoreDest, CCertStore& rCertStoreSrc);
void CloseAndReleaseUsageStores ();
HRESULT PasteCookie (
CCertMgrCookie* pPastedCookie,
CCertMgrCookie* pTargetCookie,
CCertStore& rCertStore,
SPECIAL_STORE_TYPE storeType,
bool bContainsCerts,
bool bContainsCRLs,
bool bContainsCTLs,
HSCOPEITEM hScopeItem,
bool bRequestConfirmation,
bool bIsMultipleSelect);
HRESULT DeleteCookie (
CCertMgrCookie* pCookie,
LPDATAOBJECT pDataObject,
bool bRequestConfirmation,
bool bIsMultipleSelect,
bool bDoCommit);
HRESULT RefreshResultItem (CCertMgrCookie* pCookie);
HRESULT LaunchCommonCertDialog (CCertificate* pCert);
HRESULT LaunchCommonCTLDialog (CCTL* pCTL);
HRESULT LaunchCommonCRLDialog (CCRL* pCRL);
virtual HRESULT OnOpen (LPDATAOBJECT pDataObject);
CCertMgrCookie* ConvertCookie (LPDATAOBJECT pDataObject);
HRESULT OnNotifyCutOrMove (LPARAM arg);
HRESULT SaveWidths (CCertMgrCookie* pCookie);
HRESULT LoadColumnsFromArrays (INT objecttype);
STDMETHOD(Initialize)(LPCONSOLE lpConsole);
STDMETHOD(GetResultViewType)(MMC_COOKIE cookie, BSTR* ppViewType, long* pViewOptions);
HRESULT CopyPastedCRL (CCRL* pCRL, CCertStore& rCertStore);
HRESULT CopyPastedCTL (CCTL* pCTL, CCertStore& rCertStore);
HRESULT CopyPastedCert (
CCertificate* pCert,
CCertStore& rCertStore,
const SPECIAL_STORE_TYPE storeType,
bool bDeletePrivateKey,
CCertMgrCookie* pTargetCookie);
HRESULT OnNotifyQueryPaste (LPDATAOBJECT pDataObject, LPARAM arg, LPARAM param);
HRESULT OnNotifyPaste (LPDATAOBJECT pDataObject, LPARAM arg, LPARAM param);
void DisplayAccessDenied();
STDMETHOD(Notify)(LPDATAOBJECT pDataObject, MMC_NOTIFY_TYPE event, LPARAM arg, LPARAM param);
HRESULT EnumCTLs (CCertStore& rCertStore);
HRESULT EnumerateLogicalStores (CCertMgrCookie& parentCookie);
HRESULT EnumCertsByUsage (CUsageCookie* pUsageCookie);
HRESULT EnumCertificates (CCertStore& rCertStore);
HRESULT DeleteCRLFromResultPane (CCRL * pCRL, LPDATAOBJECT pDataObject);
HRESULT DeleteCertFromResultPane (
CCertificate* pCert,
LPDATAOBJECT pDataObject,
bool bDoCommit);
HRESULT DeleteSaferEntryFromResultPane (
CSaferEntry * pSaferEntry,
LPDATAOBJECT pDataObject,
bool bDoCommit);
virtual HRESULT OnNotifyDelete (LPDATAOBJECT pDataObject);
virtual HRESULT OnNotifyRefresh (LPDATAOBJECT pDataObject);
virtual HRESULT OnNotifySelect( LPDATAOBJECT pDataObject, BOOL fSelected);
virtual HRESULT OnNotifySnapinHelp (LPDATAOBJECT pDataObject);
virtual HRESULT OnNotifyDblClick( LPDATAOBJECT pDataObject );
virtual HRESULT OnNotifyCanPasteOutOfProc (LPBOOL pbCanHandle);
}; // class CCertMgrComponent
// Enumeration for the icons used
enum
{
iIconDefault = 0,
iIconCertificate,
iIconCTL,
iIconCRL,
iIconAutoCertRequest,
iIconAutoEnroll,
iIconSaferLevel,
iIconDefaultSaferLevel,
iIconSaferHashEntry,
iIconSaferURLEntry,
iIconSaferNameEntry,
iIconSettings,
iIconSaferCertEntry,
iIconLast // Must be last
};
typedef enum _COLNUM_CERTIFICATE {
COLNUM_CERT_SUBJECT = 0,
COLNUM_CERT_ISSUER,
COLNUM_CERT_EXPIRATION_DATE,
COLNUM_CERT_PURPOSE,
COLNUM_CERT_CERT_NAME,
COLNUM_CERT_STATUS,
COLNUM_CERT_TEMPLATE,
CERT_NUM_COLS
} COLNUM_ROOT;
typedef enum _COLNUM_CRL {
COLNUM_CRL_ISSUER = 0,
COLNUM_CRL_EFFECTIVE_DATE,
COLNUM_CRL_NEXT_UPDATE,
CRL_NUM_COLS
} COLNUM_CRL;
typedef enum _COLNUM_CTL {
COLNUM_CTL_ISSUER = 0,
COLNUM_CTL_EFFECTIVE_DATE,
COLNUM_CTL_PURPOSE,
COLNUM_CTL_FRIENDLY_NAME,
CTL_NUM_COLS
} COLNUM_CTL;
typedef enum _COLNUM_SAFER_LEVELS {
COLNUM_SAFER_LEVEL_NAME = 0,
COLNUM_SAFER_LEVEL_DESCRIPTION,
SAFER_LEVELS_NUM_COLS
} COLNUM_SAFER_LEVELS;
typedef enum _COLNUM_SAFER_ENTRIES {
COLNUM_SAFER_ENTRIES_NAME = 0,
COLNUM_SAFER_ENTRIES_TYPE,
COLNUM_SAFER_ENTRIES_LEVEL,
COLNUM_SAFER_ENTRIES_DESCRIPTION,
COLNUM_SAFER_ENTRIES_LAST_MODIFIED_DATE,
SAFER_ENTRIES_NUM_COLS
} COLNUM_SAFER_ENTRIES;
#endif // ~__CMPONENT_H_INCLUDED__