windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/pkitrust/trustui/iih.h
2020-09-26 16:20:57 +08:00

216 lines
5.6 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows NT Security
// Copyright (C) Microsoft Corporation, 1992 - 1999
//
// File: iih.h
//
// Contents: ACUI Invoke Info Helper class definition
//
// History: 10-May-97 kirtd Created
//
//----------------------------------------------------------------------------
#if !defined(__IIH_H__)
#define __IIH_H__
#include <acui.h>
#include <acuictl.h>
extern HINSTANCE g_hModule;
//
// CInvokeInfoHelper is used to pull various pieces of information out
// of the ACUI_INVOKE_INFO data structure
//
class CInvokeInfoHelper
{
public:
//
// Initialization
//
CInvokeInfoHelper (
PACUI_INVOKE_INFO pInvokeInfo,
HRESULT& rhr
);
~CInvokeInfoHelper ();
//
// Information Retrieval Methods
//
LPCWSTR Subject() { return(m_pszSubject); }
LPCWSTR Publisher() { return(m_pszPublisher); }
LPCWSTR PublisherCertIssuer() { return(m_pszPublisherCertIssuer); }
LPCWSTR ControlWebPage() { return(m_pszControlWebPage); }
LPCWSTR CAWebPage() { return(m_pszCAWebPage); }
LPCWSTR AdvancedLink() { return(m_pszAdvancedLink); }
LPCWSTR CertTimestamp() { return(m_pszCertTimestamp); }
LPCWSTR TestCertInChain() { return(m_pszTestCertInChain); }
LPCWSTR ErrorStatement() { return(m_pszErrorStatement); }
PCRYPT_PROVIDER_DATA ProviderData() { return(m_pInvokeInfo->pProvData); }
BOOL IsKnownPublisher() { return(m_fKnownPublisher); }
BOOL IsCertViewPropertiesAvailable() { return(m_pfnCVPA != NULL); }
//
// Personal Trust management
//
HRESULT AddPublisherToPersonalTrust ();
//
// UI control management
//
HRESULT GetUIControl (IACUIControl** ppUI);
VOID ReleaseUIControl (IACUIControl* pUI);
inline BOOL CallCertViewProperties (HWND hwndParent);
inline VOID CallAdvancedLink (HWND hwndParent);
inline VOID CallWebLink(HWND hwndParent, WCHAR *pszLink);
private:
//
// Invoke Info holder
//
PACUI_INVOKE_INFO m_pInvokeInfo;
//
// Subject, Publisher, Issuer and Error Statement strings
//
LPWSTR m_pszSubject;
LPWSTR m_pszPublisher;
LPWSTR m_pszPublisherCertIssuer;
LPWSTR m_pszErrorStatement;
LPWSTR m_pszCertTimestamp;
LPWSTR m_pszAdvancedLink;
LPWSTR m_pszTestCertInChain;
LPWSTR m_pszControlWebPage;
LPWSTR m_pszCAWebPage;
//
// Known publisher flag
//
BOOL m_fKnownPublisher;
//
// Cert view properties entry point
//
HINSTANCE m_hModCVPA;
pfnCertViewProperties m_pfnCVPA;
//
// Private methods
//
HRESULT InitSubject();
HRESULT InitPublisher();
HRESULT InitPublisherCertIssuer();
HRESULT InitErrorStatement();
HRESULT InitCertTimestamp();
VOID InitCertViewPropertiesEntryPoint();
LPWSTR GetFormattedCertTimestamp(LPSYSTEMTIME pst);
BOOL IsTestCertInPublisherChain();
VOID InitAdvancedLink();
VOID InitTestCertInChain();
VOID InitControlWebPage();
VOID InitCAWebPage();
};
//
// Error mapping helper
//
HRESULT ACUIMapErrorToString (HRESULT hr, LPWSTR* ppsz);
//
// Inline methods
//
//+---------------------------------------------------------------------------
//
// Member: CInvokeInfoHelper::CallCertViewProperties, public
//
// Synopsis: calls the cert view properties entry point
//
// Arguments: [hwndParent] -- parent window handle
//
// Returns: Result of CertViewPropertiesW call
//
// Notes:
//
//----------------------------------------------------------------------------
inline BOOL
CInvokeInfoHelper::CallCertViewProperties (HWND hwndParent)
{
CRYPT_PROVIDER_SGNR *pSgnr;
CRYPT_PROVIDER_CERT *pCert;
//
// Setup the common dialog call structure
//
CVP_STRUCTDEF cvsa;
memset(&cvsa, 0, sizeof(CVP_STRUCTDEF));
cvsa.dwSize = sizeof(CVP_STRUCTDEF);
cvsa.hwndParent = hwndParent;
# if (USE_IEv4CRYPT32)
cvsa.hInstance = g_hModule;
# else
cvsa.pCryptProviderData = ProviderData();
cvsa.fpCryptProviderDataTrustedUsage = (m_pInvokeInfo->hrInvokeReason == ERROR_SUCCESS) ? TRUE : FALSE;
# endif
if (pSgnr = WTHelperGetProvSignerFromChain(ProviderData(), 0, FALSE, 0))
{
if (pCert = WTHelperGetProvCertFromChain(pSgnr, 0))
{
cvsa.pCertContext = pCert->pCert;
}
}
//
// Bring up the dialog
//
# if (USE_IEv4CRYPT32)
(*m_pfnCVPA)(&cvsa);
# else
(*m_pfnCVPA)(&cvsa, NULL); // TBDTBD: &fRefresh: show dialog
# endif
return( TRUE );
}
inline VOID
CInvokeInfoHelper::CallAdvancedLink (HWND hwndParent)
{
if ((ProviderData()) &&
(ProviderData()->psPfns->psUIpfns) &&
(ProviderData()->psPfns->psUIpfns->pfnOnAdvancedClick))
{
(*ProviderData()->psPfns->psUIpfns->pfnOnAdvancedClick)(hwndParent, ProviderData());
}
}
inline VOID
CInvokeInfoHelper::CallWebLink(HWND hwndParent, WCHAR *pszLink)
{
TUIGoLink(hwndParent, pszLink);
}
#endif