Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

121 lines
4.6 KiB

#ifndef __CERT_DS_MANAGER_H__
#define __CERT_DS_MANAGER_H__ 1
#include <winldap.h>
//--------------------------------------------------------------------------------
//
// CertDSManager interface.
//
// The CertDSManager provides a wrapper around the certcli API to allow
// any DS caching/optimization to be localized within a simple class.
//
//--------------------------------------------------------------------------------
class CertDSManager {
public:
virtual HRESULT CloseCA (IN HCAINFO hCAInfo) = 0;
virtual HRESULT CloseCertType (IN HCERTTYPE hCertType) = 0;
virtual HRESULT CountCAs (IN HCAINFO hCAInfo) = 0;
virtual HRESULT EnumCertTypesForCA (IN HCAINFO hCAInfo, IN DWORD dsFlags, OUT HCERTTYPE *phCertType) = 0;
virtual HRESULT EnumFirstCA (IN LPCWSTR wszScope, IN DWORD fFlags, OUT HCAINFO *phCAInfo) = 0;
virtual HRESULT EnumNextCA (IN HCAINFO hPrevCA, OUT HCAINFO *phCAInfo) = 0;
virtual HRESULT EnumNextCertType (IN HCERTTYPE hPrevCertType, OUT HCERTTYPE *phCertType) = 0;
virtual HRESULT FindCertTypeByName (IN LPCWSTR pwszCertType, IN HCAINFO hCAInfo, IN DWORD dwFlags, OUT HCERTTYPE *phCertType) = 0;
virtual HRESULT FindCAByName (IN LPCWSTR wszCAName,IN LPCWSTR wszScope,IN DWORD dwFlags,OUT HCAINFO *phCAInfo) = 0;
virtual HRESULT GetCACertificate (IN HCAINFO hCAInfo, OUT PCCERT_CONTEXT *ppCert) = 0;
HRESULT static MakeDSManager(OUT CertDSManager **ppDSManager);
protected:
virtual HRESULT Initialize() = 0;
};
//--------------------------------------------------------------------------------
//
// DefaultDSManager.
//
// Other DS manager classes should extend this class, and implement only those
// methods which they wish to modify.
//
//--------------------------------------------------------------------------------
class DefaultDSManager : public CertDSManager {
public:
virtual HRESULT CloseCA(IN HCAINFO hCAInfo) {
return ::CACloseCA(hCAInfo);
}
virtual HRESULT CloseCertType(IN HCERTTYPE hCertType) {
return ::CACloseCertType(hCertType);
}
virtual HRESULT CountCAs(IN HCAINFO hCAInfo) {
return ::CACountCAs(hCAInfo);
}
virtual HRESULT EnumCertTypesForCA(IN HCAINFO hCAInfo, IN DWORD dwFlags, OUT HCERTTYPE *phCertType) {
return ::CAEnumCertTypesForCA(hCAInfo, dwFlags, phCertType);
}
virtual HRESULT EnumFirstCA(IN LPCWSTR wszScope, IN DWORD dwFlags, OUT HCAINFO *phCAInfo) {
return ::CAEnumFirstCA(wszScope, dwFlags, phCAInfo);
}
virtual HRESULT EnumNextCA(IN HCAINFO hPrevCA, OUT HCAINFO *phCAInfo) {
return ::CAEnumNextCA(hPrevCA, phCAInfo);
}
virtual HRESULT EnumNextCertType(IN HCERTTYPE hPrevCertType, OUT HCERTTYPE *phCertType) {
return ::CAEnumNextCertType(hPrevCertType, phCertType);
}
virtual HRESULT FindCertTypeByName(IN LPCWSTR pwszCertType, IN HCAINFO hCAInfo, IN DWORD dwFlags, OUT HCERTTYPE *phCertType) {
return ::CAFindCertTypeByName(pwszCertType, hCAInfo, dwFlags, phCertType);
}
virtual HRESULT FindCAByName(IN LPCWSTR wszCAName, IN LPCWSTR wszScope, IN DWORD dwFlags, OUT HCAINFO *phCAInfo) {
return ::CAFindByName(wszCAName, wszScope, dwFlags, phCAInfo);
}
virtual HRESULT GetCACertificate(IN HCAINFO hCAInfo, OUT PCCERT_CONTEXT *ppCert) {
return ::CAGetCACertificate(hCAInfo, ppCert);
}
protected:
virtual HRESULT Initialize() { return S_OK; }
};
//--------------------------------------------------------------------------------
//
// CachingDSManager
//
// This DS manager caches the LDAP binding handle (where possible) to prevent
// unnecessary binds and unbinds. It uses an enhanced version of certcli which
// allows you to pass an LDAP binding handle.
//
//--------------------------------------------------------------------------------
class CachingDSManager : public DefaultDSManager {
friend class CertDSManager;
public:
virtual ~CachingDSManager();
// Extend those routines which allow you to use a cached binding handle
HRESULT EnumCertTypesForCA(IN HCAINFO hCAInfo, IN DWORD dwFlags, OUT HCERTTYPE * phCertType);
HRESULT EnumFirstCA(IN LPCWSTR wszScope, IN DWORD dwFlags, OUT HCAINFO *phCAInfo);
HRESULT FindCAByName(IN LPCWSTR wszCAName, IN LPCWSTR wszScope, IN DWORD dwFlags,OUT HCAINFO *phCAInfo);
HRESULT FindCertTypeByName(IN LPCWSTR pwszCertType, IN HCAINFO hCAInfo, IN DWORD dwFlags, OUT HCERTTYPE *phCertType);
protected:
HRESULT Initialize();
private:
CachingDSManager() : m_ldBindingHandle(NULL) { }
LDAP *m_ldBindingHandle;
};
#endif // #ifndef __CERT_DS_MANAGER_H__