windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/ui/cryptui/internal.h

439 lines
19 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// 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