//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: internal.h // //-------------------------------------------------------------------------- #ifndef _INTERNAL_H #define _INTERNAL_H #include "richedit.h" #include "ccertbmp.h" #define CRYPTUI_MAX_STRING_SIZE 768 /////////////////////////////////////////////////////////////////////////////// // macro for getting the number of bytes in an array /////////////////////////////////////////////////////////////////////////////// #define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0])) #define ICON_X_POS 21 #define ICON_Y_POS 10 #define IMAGE_PROPERTY 0 #define IMAGE_EXTENSION 1 #define IMAGE_CRITICAL_EXTENSION 2 #define IMAGE_V1 3 /////////////////////////////////////////////////////////////////////////////// // this structure is used to subclass an edit control and give it a link look // and feel /////////////////////////////////////////////////////////////////////////////// typedef struct _LIST_DISPLAY_HELPER { BOOL fHexText; LPWSTR pwszDisplayText; BYTE *pbData; DWORD cbData; } LIST_DISPLAY_HELPER, *PLIST_DISPLAY_HELPER; /////////////////////////////////////////////////////////////////////////////// // this structure is used to subclass an edit control and give it a link look // and feel /////////////////////////////////////////////////////////////////////////////// typedef struct _LINK_SUBCLASS_DATA { HWND hwndParent; WNDPROC wpPrev; DWORD uId; HWND hwndTip; LPSTR pszURL; BOOL fMouseCaptured; BOOL fNoCOM; BOOL fUseArrowInsteadOfHand; } LINK_SUBCLASS_DATA, *PLINK_SUBCLASS_DATA; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewCert api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// #define MAX_CERT_CHAIN_LENGTH 40 typedef struct { PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pcvp; DWORD cpCryptProviderCerts; PCRYPT_PROVIDER_CERT rgpCryptProviderCerts[MAX_CERT_CHAIN_LENGTH]; DWORD dwChainError; DWORD cUsages; LPSTR *rgUsages; HTREEITEM hItem; // Leaf item in trust view BOOL fDblClk; CCertificateBmp *pCCertBmp; HWND hwndGeneralPage; HWND hwndDetailPage; HWND hwndHierarchyPage; RECT goodForOriginalRect; WINTRUST_DATA sWTD; WINTRUST_CERT_INFO sWTCI; BOOL fFreeWTD; BOOL fAddingToChain; BOOL fDeletingChain; LPWSTR pwszErrorString; BOOL fAccept; BOOL fNoCOM; BOOL *pfPropertiesChanged; BOOL fCPSDisplayed; BOOL fIgnoreUntrustedRoot; BOOL fWarnUntrustedRoot; BOOL fRootInRemoteStore; HICON hIcon; BOOL fCancelled; BOOL fIssuerDisplayedAsLink; BOOL fSubjectDisplayedAsLink; BOOL fWarnRemoteTrust; } CERT_VIEW_HELPER, *PCERT_VIEW_HELPER; #define WM_MY_REINITIALIZE (WM_USER+20) /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewCTL api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// typedef struct { PCCRYPTUI_VIEWCTL_STRUCTW pcvctl; DWORD chStores; HCERTSTORE *phStores; HCERTSTORE hExtraStore; PCCERT_CONTEXT pSignerCert; PCMSG_SIGNER_INFO pbSignerInfo; DWORD cbSignerInfo; HICON hIcon; HCRYPTMSG hMsg; int previousSelection; int currentSelection; BOOL fNoSignature; BOOL fCancelled; DWORD dwInheritableError; BOOL fCatFile; } CTL_VIEW_HELPER, *PCTL_VIEW_HELPER; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewCRL api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// typedef struct { PCCRYPTUI_VIEWCRL_STRUCTW pcvcrl; int currentSelection; HICON hIcon; BOOL fCancelled; } CRL_VIEW_HELPER, *PCRL_VIEW_HELPER; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertSetProperties api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// typedef struct { PCCRYPTUI_VIEWCERTIFICATEPROPERTIES_STRUCTW pcsp; LPWSTR pwszInitialCertName; LPWSTR pwszInitialDescription; BOOL fSelfCleanup; BOOL fInserting; BOOL *pfPropertiesChanged; BOOL fPropertiesChanged; BOOL fGetPagesCalled; LPSTR *rgszValidChainUsages; int cszValidUsages; DWORD EKUPropertyState; BOOL fAddPurposeCanBeEnabled; BOOL fCancelled; DWORD dwRadioButtonState; BOOL fMMCCallbackMade; BOOL InWMInit; } CERT_SETPROPERTIES_HELPER, *PCERT_SETPROPERTIES_HELPER; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewSignerInfo api /////////////////////////////////////////////////////////////////////////////// #define CRYPTUI_VIEWSIGNERINFO_RESERVED_FIELD_IS_SIGNERINFO_PRIVATE 0x80000000 #define CRYPTUI_VIEWSIGNERINFO_RESERVED_FIELD_IS_ERROR_CODE 0x40000000 typedef struct { PCRYPT_PROVIDER_DATA pCryptProviderData; BOOL fpCryptProviderDataTrustedUsage; DWORD idxSigner; BOOL fCounterSigner; DWORD idxCounterSigner; DWORD dwInheritedError; } CERT_VIEWSIGNERINFO_PRIVATE, *PCERT_VIEWSIGNERINFO_PRIVATE; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewSignerInfo api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// typedef struct { PCCRYPTUI_VIEWSIGNERINFO_STRUCTW pcvsi; PCCERT_CONTEXT pSignersCert; int previousSelection; int currentSelection; HICON hIcon; HCERTSTORE hExtraStore; PCERT_VIEWSIGNERINFO_PRIVATE pPrivate; BOOL fPrivateAllocated; CRYPT_PROVIDER_DEFUSAGE CryptProviderDefUsage; WINTRUST_DATA WTD; BOOL fUseDefaultProvider; BOOL fCancelled; DWORD dwInheritedError; } SIGNER_VIEW_HELPER, *PSIGNER_VIEW_HELPER; /////////////////////////////////////////////////////////////////////////////// // this structure is used to for the CertViewSignatures api and it's supporting // property sheet dialog procs /////////////////////////////////////////////////////////////////////////////// typedef struct { PCRYPTUI_VIEWSIGNATURES_STRUCTW pcvs; BOOL fSelfCleanup; HCERTSTORE hExtraStore; } CERT_VIEWSIGNATURES_HELPER, *PCERT_VIEWSIGNATURES_HELPER; /////////////////////////////////////////////////////////////////////////////// // these functions are the property pages procs for the CertViewCert API /////////////////////////////////////////////////////////////////////////////// INT_PTR APIENTRY ViewPageDetails(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageGeneral(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageHierarchy(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /////////////////////////////////////////////////////////////////////////////// // these functions are the property pages procs for the CertViewCTL API /////////////////////////////////////////////////////////////////////////////// INT_PTR APIENTRY ViewPageCTLGeneral(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageCTLTrustList(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageCatalogEntries(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /////////////////////////////////////////////////////////////////////////////// // these functions are the property pages procs for the CertViewCRL API /////////////////////////////////////////////////////////////////////////////// INT_PTR APIENTRY ViewPageCRLGeneral(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageCRLRevocationList(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /////////////////////////////////////////////////////////////////////////////// // these functions are the property pages procs for the CertViewSignerInfo API /////////////////////////////////////////////////////////////////////////////// INT_PTR APIENTRY ViewPageSignerGeneral(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR APIENTRY ViewPageSignerAdvanced(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); /////////////////////////////////////////////////////////////////////////////// // used for obvious purposes /////////////////////////////////////////////////////////////////////////////// BOOL IsWin95(void); extern BOOL FIsWin95; BOOL CheckRichedit20Exists(void); extern BOOL fRichedit20Exists; BOOL fRichedit20Usable(HWND hwndEdit); #undef SetWindowLong #define SetWindowLong SetWindowLongA #undef GetWindowLong #define GetWindowLong GetWindowLongA #undef SendMessage #define SendMessage SendMessageA // // frmtutil.cpp // BOOL FormatAlgorithmString(LPWSTR *ppString, CRYPT_ALGORITHM_IDENTIFIER const *pAlgorithm); BOOL FormatSerialNoString(LPWSTR *ppString, CRYPT_INTEGER_BLOB const *pblob); BOOL FormatMemBufToString(LPWSTR *ppString, LPBYTE pbData, DWORD cbData); BOOL FormatDateString(LPWSTR *ppString, FILETIME ft, BOOL fIncludeTime, BOOL fLongFormat, HWND hwnd = NULL); BOOL FormatValidityString(LPWSTR *ppString, PCCERT_CONTEXT pCertContext, HWND hwnd = NULL); BOOL FormatDNNameString(LPWSTR *ppString, LPBYTE pbData, DWORD cbData, BOOL fMultiline); BOOL FormatEnhancedKeyUsageString(LPWSTR *ppString, PCCERT_CONTEXT pCertContext, BOOL fPropertiesOnly, BOOL fMultiline); BOOL FormatMemBufToWindow(HWND hWnd, LPBYTE pbData, DWORD cbData); LPWSTR AllocAndReturnSignTime(CMSG_SIGNER_INFO const *pSignerInfo, FILETIME **ppSignTime, HWND hwnd = NULL); LPWSTR AllocAndReturnTimeStampersTimes(CMSG_SIGNER_INFO const *pSignerInfo, FILETIME **ppSignTime, HWND hwnd = NULL); LPWSTR FormatCTLSubjectUsage(CTL_USAGE *pSubjectUsage, BOOL fMultiline); // // usagutil.cpp // BOOL OIDinArray(LPCSTR pszOID, LPSTR *rgszOIDArray, DWORD cOIDs); BOOL AllocAndReturnKeyUsageList(PCRYPT_PROVIDER_CERT pCryptProviderCert, LPSTR **pKeyUsageOIDs, DWORD *numOIDs); BOOL AllocAndReturnEKUList(PCCERT_CONTEXT pCert, LPSTR **pKeyUsageOIDs, DWORD *numOIDs); void FreeEKUList(LPSTR *pKeyUsageOIDs, DWORD numOIDs); BOOL MyGetOIDInfo(LPWSTR string, DWORD stringSize, LPSTR pszObjId); BOOL OIDInUsages(PCERT_ENHKEY_USAGE pUsage, LPCSTR pszOID); BOOL fPropertiesDisabled(PCERT_ENHKEY_USAGE pPropertyUsage); BOOL CertHasEmptyEKUProp(PCCERT_CONTEXT pCertContext); BOOL ValidateCertForUsage( PCCERT_CONTEXT pCertContext, FILETIME *psftVerifyAsOf, DWORD cStores, HCERTSTORE * rghStores, HCERTSTORE hExtraStore, LPCSTR pszOID); // // linkutil.cpp // void CryptuiGoLink(HWND hwndParent, char *pszWhere, BOOL fNoCOM); BOOL AllocAndGetIssuerURL(LPSTR *ppURLString, PCCERT_CONTEXT pCertContext); BOOL AllocAndGetSubjectURL(LPSTR *ppURLString, PCCERT_CONTEXT pCertContext); // // cps.cpp // DWORD GetCPSInfo(PCCERT_CONTEXT pCertContext, LPWSTR * ppwszUrlString, LPWSTR * ppwszDisplayText); BOOL IsOKToDisplayCPS(PCCERT_CONTEXT pCertContext, DWORD dwChainError); BOOL DisplayCPS(HWND hwnd, PCCERT_CONTEXT pCertContext, DWORD dwChainError, BOOL fNoCOM); // // disputil.cpp // void DisplayExtensions(HWND hWndListView, DWORD cExtension, PCERT_EXTENSION rgExtension, BOOL fCritical, DWORD *index); PLIST_DISPLAY_HELPER MakeListDisplayHelper(BOOL fHexText, LPWSTR pwszDisplayText, BYTE *pbData, DWORD cbData); PLIST_DISPLAY_HELPER MakeListDisplayHelperForExtension(LPSTR pszObjId, BYTE *pbData, DWORD cbData); void FreeListDisplayHelper(PLIST_DISPLAY_HELPER pDisplayHelper); void DisplayHelperTextInEdit(HWND hWndListView, HWND hwndDlg, int nIDEdit, int index); void SetTextFormatInitial(HWND hWnd); void SetTextFormatHex(HWND hWnd); BOOL GetUnknownErrorString(LPWSTR *ppwszErrorString, DWORD dwError); BOOL GetCertErrorString(LPWSTR *ppwszErrorString, PCRYPT_PROVIDER_CERT pCryptProviderCert); void CertSubclassEditControlForArrowCursor (HWND hwndEdit); void CertSubclassEditControlForLink (HWND hwndDlg, HWND hwndEdit, PLINK_SUBCLASS_DATA plsd); void * GetStoreName(HCERTSTORE hCertStore, BOOL fWideChar); void ModifyOrInsertRow( HWND hWndListView, LV_ITEMW *plvI, LPWSTR pwszValueText, LPWSTR pwszText, BOOL fAddRows, BOOL fHex); int CALLBACK HidePropSheetCancelButtonCallback( HWND hwndDlg, UINT uMsg, LPARAM lParam); INT_PTR WINAPI CryptUIPropertySheetA(LPCPROPSHEETHEADERA pHdr); INT_PTR WINAPI CryptUIPropertySheetW(LPCPROPSHEETHEADERW pHdr); BOOL IsTrueErrorString(CERT_VIEW_HELPER *pviewhelp); // // convutil.cpp // LPSTR CertUIMkMBStr(LPCWSTR pwsz); LPWSTR CertUIMkWStr(LPCSTR psz); LPSTR AllocAndCopyMBStr(LPCSTR psz); LPWSTR AllocAndCopyWStr(LPCWSTR pwsz); LPPROPSHEETPAGEA ConvertToPropPageA(LPCPROPSHEETPAGEW ppage, DWORD cPages); void FreePropSheetPagesA(LPPROPSHEETPAGEA ppage, DWORD cPages); BOOL ConvertToPropPageW(LPCPROPSHEETPAGEA ppage, DWORD cPages, LPCPROPSHEETPAGEW *pppageW); void FreePropSheetPagesW(LPPROPSHEETPAGEW ppage, DWORD cPages); // // gettrst.cpp // BOOL CalculateUsages(PCERT_VIEW_HELPER pviewhelp); BOOL BuildChain(PCERT_VIEW_HELPER pviewhelp, LPSTR pszUsage); BOOL BuildWinVTrustState( LPCWSTR szFileName, CMSG_SIGNER_INFO const *pSignerInfo, DWORD cStores, HCERTSTORE *rghStores, LPCSTR pszOID, PCERT_VIEWSIGNERINFO_PRIVATE pcvsiPrivate, CRYPT_PROVIDER_DEFUSAGE *pCryptProviderDefUsage, WINTRUST_DATA *pWTD); BOOL FreeWinVTrustState( LPCWSTR szFileName, CMSG_SIGNER_INFO const *pSignerInfo, DWORD cStores, HCERTSTORE *rghStores, LPCSTR pszOID, CRYPT_PROVIDER_DEFUSAGE *pCryptProviderDefUsage, WINTRUST_DATA *pWTD); // // other stuff (util.cpp) // BOOL CommonInit(); BOOL FreeAndCloseKnownStores(DWORD chStores, HCERTSTORE *phStores); BOOL AllocAndOpenKnownStores(DWORD *chStores, HCERTSTORE **pphStores); HBITMAP LoadResourceBitmap(HINSTANCE hInstance, LPSTR lpString, HPALETTE* lphPalette); void MaskBlt ( HBITMAP& hbmImage, HPALETTE hpal, HDC& hdc, int xDst, int yDst, int dx, int dy ); PCCERT_CONTEXT GetSignersCert(CMSG_SIGNER_INFO const *pSignerInfo, HCERTSTORE hExtraStore, DWORD cStores, HCERTSTORE *rghStores); BOOL fIsCatalogFile(CTL_USAGE *pSubjectUsage); DWORD CryptUISetRicheditTextW(HWND hwndDlg, UINT id, LPCWSTR pwsz); void SetRicheditIMFOption(HWND hWndRichEdit); /*BOOL CryptUISetupFonts(HFONT *pBoldFont); void CryptUIDestroyFonts(HFONT hBoldFont); void CryptUISetControlFont(HFONT hFont, HWND hwnd, INT nId); */ // // These routines extract and pretty print fields in the certs. The // routines use crt to allocate and return a buffer // LPWSTR PrettySubject(PCCERT_CONTEXT pccert); typedef struct { DWORD dw1; DWORD dw2; } HELPMAP; BOOL OnContextHelp(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, HELPMAP const * rgCtxMap); //-------------------------------------------------------------------------- // // IsValidURL // //-------------------------------------------------------------------------- BOOL IsValidURL (LPWSTR pwszURL); //-------------------------------------------------------------------------- // // FormatMessageUnicodeIds // //-------------------------------------------------------------------------- LPWSTR FormatMessageUnicodeIds (UINT ids, ...); //-------------------------------------------------------------------------- // // FormatMessageUnicodeString // //-------------------------------------------------------------------------- LPWSTR FormatMessageUnicodeString (LPWSTR pwszFormat, ...); //-------------------------------------------------------------------------- // // FormatMessageUnicode // //-------------------------------------------------------------------------- LPWSTR FormatMessageUnicode (LPWSTR pwszFormat, va_list * pArgList); #endif //_INTERNAL_H