439 lines
19 KiB
C
439 lines
19 KiB
C
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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
|