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

283 lines
7.5 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-2001.
//
// File: cookie.h
//
// Contents:
//
//----------------------------------------------------------------------------
#ifndef __COOKIE_H_INCLUDED__
#define __COOKIE_H_INCLUDED__
extern HINSTANCE g_hInstanceSave; // Instance handle of the DLL (initialized during CCertMgrComponent::Initialize)
#include "nodetype.h"
#pragma warning(push,3)
#include <efsstruc.h>
#pragma warning(pop)
// Name of Encrypting File System store
#define ACRS_SYSTEM_STORE_NAME L"ACRS"
#define EFS_SYSTEM_STORE_NAME L"EFS"
#define TRUST_SYSTEM_STORE_NAME L"Trust"
#define ROOT_SYSTEM_STORE_NAME L"Root"
#define MY_SYSTEM_STORE_NAME L"MY"
#define CA_SYSTEM_STORE_NAME L"CA"
#define USERDS_SYSTEM_STORE_NAME L"UserDS"
#define REQUEST_SYSTEM_STORE_NAME L"REQUEST"
#define SAFER_TRUSTED_PUBLISHER_STORE_NAME L"TrustedPublisher"
#define SAFER_DISALLOWED_STORE_NAME L"Disallowed"
/////////////////////////////////////////////////////////////////////////////
// cookie
//REVIEW -- using pointers to ID's is necessary because some compilers don't like
//references as template arguments.
class CCertificate; // forward declaration
class CCertMgrCookie : public CCookie,
public CStoresMachineName,
public CBaseCookieBlock
{
public:
CCertMgrCookie (CertificateManagerObjectType objecttype,
LPCWSTR lpcszMachineName = 0,
LPCWSTR objectName = 0);
virtual ~CCertMgrCookie ();
// returns <0, 0 or >0
virtual HRESULT CompareSimilarCookies( CCookie* pOtherCookie, int* pnResult );
// CBaseCookieBlock
virtual CCookie* QueryBaseCookie(int i);
virtual int QueryNumCookies();
public:
LPRESULTDATA m_resultDataID;
virtual void Refresh ();
virtual HRESULT Commit ();
CString GetServiceName () const;
void SetServiceName (CString &szManagedService);
LPCWSTR GetObjectName ();
const CertificateManagerObjectType m_objecttype;
UINT IncrementOpenPageCount ();
UINT DecrementOpenPageCount ();
bool HasOpenPropertyPages () const;
private:
CString m_objectName;
UINT m_nOpenPageCount;
};
typedef enum {
NO_SPECIAL_TYPE = 0,
MY_STORE,
CA_STORE,
ROOT_STORE,
TRUST_STORE,
USERDS_STORE,
ACRS_STORE,
EFS_STORE,
REQUEST_STORE,
SAFER_TRUSTED_PUBLISHER_STORE,
SAFER_DISALLOWED_STORE
} SPECIAL_STORE_TYPE;
SPECIAL_STORE_TYPE GetSpecialStoreType(LPWSTR pwszStoreName);
SPECIAL_STORE_TYPE StoreNameToType (const CString& szStoreName);
class CCTL; // forward declaration
class CCertStore : public CCertMgrCookie
{
friend CCTL;
public:
virtual bool IsNullEFSPolicy()
{
return false;
}
void IncrementCertCount ();
void Unlock ();
void Lock ();
void InvalidateCertCount();
BOOL AddEncodedCTL (DWORD dwMsgAndCertEncodingType,
const BYTE* pbCtlEncoded,
DWORD cbCtlEncoded,
DWORD dwAddDisposition,
PCCTL_CONTEXT* ppCtlContext);
virtual void Close (bool bForceClose = false);
void SetDirty();
HRESULT AddStoreToCollection(CCertStore& siblingStore,
DWORD dwUpdateFlags = 0,
DWORD dwPriority = 0);
HRESULT AddStoreToCollection(HCERTSTORE hSiblingStore,
DWORD dwUpdateFlags = 0,
DWORD dwPriority = 0);
int GetCTLCount ();
inline DWORD GetLocation () { return m_dwLocation;}
HRESULT Resync ();
inline bool IsOpen()
{
// If m_hCertStore is 0, then this store hasn't been used for anything
if ( !m_hCertStore )
return false;
else
return true;
}
PCCRL_CONTEXT GetCRL (
PCCERT_CONTEXT pIssuerContext,
PCCRL_CONTEXT pPrevCrlContext,
DWORD* pdwFlags);
bool AddCTLContext (PCCTL_CONTEXT pCtlContext);
bool AddCRLContext (PCCRL_CONTEXT pCrlContext);
PCCERT_CONTEXT FindCertificate (
DWORD dwFindFlags,
DWORD dwFindType,
const void *pvFindPara,
PCCERT_CONTEXT pPrevCertContext);
PCCRL_CONTEXT EnumCRLs (PCCRL_CONTEXT pPrevCrlContext);
PCCTL_CONTEXT EnumCTLs (PCCTL_CONTEXT pPrevCtlContext);
virtual PCCERT_CONTEXT EnumCertificates (PCCERT_CONTEXT pPrevCertContext);
CCertificate* GetSubjectCertificate (PCERT_INFO pCertId);
BOOL operator==(CCertStore&);
int GetCertCount ();
virtual HRESULT AddCertificateContext (
PCCERT_CONTEXT pContext,
LPCONSOLE pConsole,
bool bDeletePrivateKey,
PCCERT_CONTEXT* ppNewCertContext = 0);
inline virtual void AddRef()
{
ASSERT (CERTMGR_LOG_STORE_GPE == m_objecttype ||
CERTMGR_LOG_STORE_RSOP == m_objecttype ||
CERTMGR_LOG_STORE == m_objecttype ||
CERTMGR_PHYS_STORE == m_objecttype);
CCertMgrCookie::AddRef ();
}
inline virtual void Release ()
{
ASSERT (CERTMGR_LOG_STORE_GPE == m_objecttype ||
CERTMGR_LOG_STORE_RSOP == m_objecttype ||
CERTMGR_LOG_STORE == m_objecttype ||
CERTMGR_PHYS_STORE == m_objecttype);
CCertMgrCookie::Release ();
}
CString GetStoreName () const;
LPCWSTR GetLocalizedName();
bool ContainsCTLs ();
bool ContainsCRLs ();
bool ContainsCertificates ();
virtual HRESULT Commit ();
virtual bool IsReadOnly ();
inline const SPECIAL_STORE_TYPE GetStoreType () const
{
ASSERT (CERTMGR_LOG_STORE_GPE == m_objecttype ||
CERTMGR_LOG_STORE_RSOP == m_objecttype ||
CERTMGR_LOG_STORE == m_objecttype ||
CERTMGR_PHYS_STORE == m_objecttype);
return m_storeType;
}
CCertStore (CertificateManagerObjectType objecttype,
LPCSTR pszStoreProv,
DWORD dwFlags,
LPCWSTR lpcszMachineName,
LPCWSTR objectName,
const CString & pcszLogStoreName,
const CString & pcszPhysStoreName,
const SPECIAL_STORE_TYPE storeType,
const DWORD dwLocation,
IConsole* pConsole);
virtual ~CCertStore ();
virtual HCERTSTORE GetStoreHandle (BOOL bSilent = FALSE, HRESULT* phr = 0);
virtual bool CanContain (CertificateManagerObjectType /*nodeType*/)
{
return false;
}
virtual bool IsMachineStore()
{
return false;
}
protected:
virtual void FinalCommit();
HRESULT RetrieveBLOBFromFile (LPCWSTR pwszFileName, DWORD *pcb, BYTE **ppb);
bool m_fCertCountValid;
bool m_bUnableToOpenMsgDisplayed;
LPCSTR m_storeProvider;
DWORD m_dwFlags;
CString m_pcszStoreName;
bool m_bReadOnly;
HCERTSTORE m_hCertStore;
IConsole* m_pConsole;
bool m_bDirty;
private:
int m_nCertCount;
bool m_fReadOnlyFlagChecked;
const DWORD m_dwLocation;
CString m_localizedName;
const SPECIAL_STORE_TYPE m_storeType;
int m_nLockCnt; // test
};
class CContainerCookie : public CCertMgrCookie
{
public:
virtual HRESULT Commit ();
inline const SPECIAL_STORE_TYPE GetStoreType () const
{
ASSERT (CERTMGR_CRL_CONTAINER == m_objecttype ||
CERTMGR_CTL_CONTAINER == m_objecttype ||
CERTMGR_CERT_CONTAINER == m_objecttype);
return m_rCertStore.GetStoreType ();
}
CContainerCookie (CCertStore& rStore,
CertificateManagerObjectType objecttype,
LPCWSTR lpcszMachineName,
LPCWSTR objectName);
virtual ~CContainerCookie ();
CCertStore& GetCertStore () const;
private:
CCertStore& m_rCertStore;
};
class CUsageCookie : public CCertMgrCookie
{
public:
int GetCertCount () const;
void SetCertCount (int nCertCount);
CUsageCookie (
CertificateManagerObjectType objecttype,
LPCWSTR lpcszMachineName,
LPCWSTR objectName);
void AddOID (LPCSTR pszOID);
virtual ~CUsageCookie ();
LPSTR GetFirstOID ();
LPSTR GetNextOID ();
int GetOIDCount () const;
private:
int m_nCertCount;
CTypedPtrList<CPtrList, LPSTR> m_OIDList;
POSITION m_OIDListPos;
};
#endif // ~__COOKIE_H_INCLUDED__