Leaked source code of windows server 2003
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.
|
|
/*++
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_
|