windows-nt/Source/XPSP1/NT/inetsrv/iis/inc/iiscert.hxx
2020-09-26 16:20:57 +08:00

151 lines
3.4 KiB
C++

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
iiscert.hxx
Abstract:
Definitions and data structures needed to deal with server certificates
Author:
Alex Mallet (amallet) 02-Dec-1997
--*/
#ifndef _IISCERT_HXX_
#define _IISCERT_HXX_
//
// Enums and hash defines
//
//
// Data structure definitions
//
//
// Structure used to hold information to open a cert store - basically, all the parameters
// you need to call CertOpenSystemStore()
//
typedef struct OpenCertStoreInfo
{
//
// Parameters used in call to CryptAcquireContext() to get handle to crypt provider
//
LPTSTR pszContainer;
LPTSTR pszProvider;
DWORD dwProvType;
DWORD dwFlags;
LPTSTR pszStoreName;
HCERTSTORE hCertStore;
} OPEN_CERT_STORE_INFO, *POPEN_CERT_STORE_INFO;
//
// Function prototypes
//
OPEN_CERT_STORE_INFO* AllocateCertStoreInfo();
VOID DeallocateCertStoreInfo( IN OPEN_CERT_STORE_INFO *pInfo );
BOOL DuplicateCertStoreInfo( OUT OPEN_CERT_STORE_INFO **ppDestInfo,
IN OPEN_CERT_STORE_INFO *pSrcInfo );
//
// Class used to encapsulate a server certificate
//
class dllexp IIS_SERVER_CERT {
public:
//
// Constructor used when all info is already in metabase
//
IIS_SERVER_CERT( IN IMDCOM *pMDObject,
IN LPTSTR pszMBPath );
//
// Destructor
//
~IIS_SERVER_CERT ();
//
// Functions used to query state of object
//
DWORD Status() { return m_dwStatus ; }
BOOL IsValid();
BOOL IsFortezzaCert() { return m_fIsFortezzaCert; }
PCCERT_CONTEXT QueryCertContext() { return m_pCertContext;}
PCCERT_CONTEXT *QueryCertContextAddr() { return (&m_pCertContext); }
LPTSTR QueryMBPath() { return m_strMBPath.QueryStr(); }
LPTSTR QueryContainer()
{ return (m_pStoreInfo ? m_pStoreInfo->pszContainer : NULL); }
LPTSTR QueryProviderName()
{ return (m_pStoreInfo ? m_pStoreInfo->pszProvider : NULL ); }
DWORD QueryProviderType()
{ return (m_pStoreInfo ? m_pStoreInfo->dwProvType : 0); }
DWORD QueryOpenFlags()
{ return (m_pStoreInfo ? m_pStoreInfo->dwFlags : 0 ); }
LPTSTR QueryStoreName()
{ return (m_pStoreInfo ? m_pStoreInfo->pszStoreName : NULL) ; }
HCERTSTORE QueryStoreHandle()
{ return (m_pStoreInfo ? m_pStoreInfo->hCertStore : NULL); }
//
// Handle to Fortezza CSP used to verify signatures on Fortezza certs when
// building a chain.
//
static HCRYPTPROV m_hFortezzaCSP;
static HCRYPTDEFAULTCONTEXT m_hFortezzaCtxt;
private:
//
// Private functions
//
BOOL UseProgrammaticPINEntry( IN MB *pMB ) { return m_fIsFortezzaCert; }
BOOL RetrievePINInfo( IN MB *pMB,
OUT LPTSTR *ppszPIN,
OUT LPTSTR *ppszSerialNumber,
OUT LPTSTR *ppszPersonality );
//
// Member variables
//
STR m_strMBPath; //path in metabase, relative to /, where cert info is stored
OPEN_CERT_STORE_INFO *m_pStoreInfo; //information about cert store of this cert
HCRYPTPROV m_hCryptProv; //handle to CSP for this cert
BOOL m_fIsFortezzaCert; //bool indicating whether it's a Fortezza cert
PCCERT_CONTEXT m_pCertContext;
DWORD m_dwStatus;
};
typedef IIS_SERVER_CERT *PIIS_SERVER_CERT;
#endif //_IISCERT_HXX_