//+--------------------------------------------------------------------------- // // 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 #include 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