ReactOS 0.4.16-dev-905-gc1b8c4f
main.c File Reference
#include <stdarg.h>
#include <wchar.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "winuser.h"
#include "softpub.h"
#include "wingdi.h"
#include "richedit.h"
#include "ole2.h"
#include "richole.h"
#include "commdlg.h"
#include "commctrl.h"
#include "cryptuiapi.h"
#include "cryptuires.h"
#include "urlmon.h"
#include "hlink.h"
#include "winreg.h"
#include "wine/debug.h"
Include dependency graph for main.c:

Go to the source code of this file.

Classes

struct  CertMgrStoreInfo
 
struct  CertMgrData
 
struct  _CRYPTUI_ENUM_SYSTEM_STORE_ARGS
 
struct  _CRYPTUI_ENUM_DATA
 
struct  _CRYPTUI_SELECTSTORE_INFO_A
 
struct  _CRYPTUI_SELECTSTORE_INFO_W
 
struct  StoreInfo
 
struct  SelectStoreInfo
 
struct  ReadStringStruct
 
struct  OIDToString
 
struct  IssuerStatement
 
struct  detail_data
 
struct  field_value_data
 
struct  v1_field
 
struct  prop_id_to_string_id
 
struct  selection_list_item
 
struct  edit_cert_data
 
struct  hierarchy_data
 
struct  ImportWizData
 
struct  ExportWizData
 
struct  SelectCertData
 
struct  SortData
 
struct  SelectCertParam
 

Macros

#define COBJMACROS
 
#define NONAMELESSUNION
 
#define MAX_STRING_LEN   512
 
#define CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE   0x00000001
 
#define MY_INDENT   200
 
#define MAX_PURPOSE   255
 
#define WM_REFRESH_VIEW   WM_USER + 0
 
#define MAX_FRIENDLY_NAME   40
 
#define MAX_DESCRIPTION   255
 

Typedefs

typedef struct _CRYPTUI_ENUM_SYSTEM_STORE_ARGS CRYPTUI_ENUM_SYSTEM_STORE_ARGS
 
typedef struct _CRYPTUI_ENUM_SYSTEM_STORE_ARGSPCRYPTUI_ENUM_SYSTEM_STORE_ARGS
 
typedef struct _CRYPTUI_ENUM_DATA CRYPTUI_ENUM_DATA
 
typedef struct _CRYPTUI_ENUM_DATAPCRYPTUI_ENUM_DATA
 
typedef BOOL(WINAPIPFN_SELECTED_STORE_CB) (HCERTSTORE store, HWND hwnd, void *pvArg)
 
typedef struct _CRYPTUI_SELECTSTORE_INFO_A CRYPTUI_SELECTSTORE_INFO_A
 
typedef struct _CRYPTUI_SELECTSTORE_INFO_APCRYPTUI_SELECTSTORE_INFO_A
 
typedef struct _CRYPTUI_SELECTSTORE_INFO_W CRYPTUI_SELECTSTORE_INFO_W
 
typedef struct _CRYPTUI_SELECTSTORE_INFO_WPCRYPTUI_SELECTSTORE_INFO_W
 
typedef WCHAR *(* field_format_func) (PCCERT_CONTEXT cert)
 
typedef void(* add_fields_func) (HWND hwnd, struct detail_data *data)
 
typedef WCHAR *(* create_detailed_value_func) (PCCERT_CONTEXT cert, void *param)
 
typedef WCHAR *(* prop_to_value_func) (void *pb, DWORD cb)
 

Enumerations

enum  PurposeFilter { PurposeFilterShowAll = 0 , PurposeFilterShowAdvanced = 1 , PurposeFilterShowOID = 2 }
 
enum  CheckBitmapIndex { CheckBitmapIndexUnchecked = 1 , CheckBitmapIndexChecked = 2 , CheckBitmapIndexDisabledUnchecked = 3 , CheckBitmapIndexDisabledChecked = 4 }
 
enum  PurposeSelection { PurposeEnableAll = 0 , PurposeDisableAll , PurposeEnableSelected }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (cryptui)
 
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 
static WCHARstrdupAtoW (const char *str)
 
static void add_cert_columns (HWND hwnd)
 
static void add_cert_to_view (HWND lv, PCCERT_CONTEXT cert, DWORD *allocatedLen, LPWSTR *str)
 
static LPSTR get_cert_mgr_usages (void)
 
static void initialize_purpose_selection (HWND hwnd)
 
BOOL WINAPI WTHelperGetKnownUsages (DWORD action, PCCRYPT_OID_INFO **usages)
 
static CERT_ENHKEY_USAGEadd_oid_to_usage (CERT_ENHKEY_USAGE *usage, LPSTR oid)
 
static CERT_ENHKEY_USAGEconvert_usages_str_to_usage (LPSTR usageStr)
 
static CERT_ENHKEY_USAGEcreate_advanced_filter (void)
 
static int CALLBACK cert_mgr_sort_by_subject (LPARAM lp1, LPARAM lp2, LPARAM lp)
 
static void show_store_certs (HWND hwnd, HCERTSTORE store)
 
static void show_cert_stores (HWND hwnd, DWORD dwFlags, struct CertMgrData *data)
 
static void free_certs (HWND lv)
 
static HCERTSTORE cert_mgr_index_to_store (HWND tab, int index)
 
static HCERTSTORE cert_mgr_current_store (HWND hwnd)
 
static void close_stores (HWND tab)
 
static void refresh_store_certs (HWND hwnd)
 
static void add_known_usage (HWND lv, PCCRYPT_OID_INFO info, CheckBitmapIndex state)
 
static void add_known_usages_to_list (HWND lv, CheckBitmapIndex state)
 
static void toggle_usage (HWND hwnd, int iItem)
 
static LONG_PTR find_oid_in_list (HWND lv, LPCSTR oid)
 
static void save_cert_mgr_usages (HWND hwnd)
 
static LRESULT CALLBACK cert_mgr_advanced_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void cert_mgr_clear_cert_selection (HWND hwnd)
 
static PCCERT_CONTEXT cert_mgr_index_to_cert (HWND hwnd, int index)
 
static void show_selected_cert (HWND hwnd, int index)
 
static void get_cert_usages (PCCERT_CONTEXT cert, LPWSTR *str)
 
static void cert_mgr_show_cert_usages (HWND hwnd, int index)
 
static void cert_mgr_do_remove (HWND hwnd)
 
static void cert_mgr_do_export (HWND hwnd)
 
static int cert_mgr_sort_by_text (HWND lv, int col, int index1, int index2)
 
static int CALLBACK cert_mgr_sort_by_issuer (LPARAM lp1, LPARAM lp2, LPARAM lp)
 
static int CALLBACK cert_mgr_sort_by_date (LPARAM lp1, LPARAM lp2, LPARAM lp)
 
static int CALLBACK cert_mgr_sort_by_friendly_name (LPARAM lp1, LPARAM lp2, LPARAM lp)
 
static LRESULT CALLBACK cert_mgr_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
BOOL WINAPI CryptUIDlgCertMgr (PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr)
 
static BOOL WINAPI enum_store_callback (const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg)
 
static void enumerate_stores (HWND hwnd, CRYPTUI_ENUM_DATA *pEnumData)
 
static void free_store_info (HWND tree)
 
static HCERTSTORE selected_item_to_store (HWND tree, HTREEITEM hItem)
 
static LRESULT CALLBACK select_store_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
HCERTSTORE WINAPI CryptUIDlgSelectStoreW (PCRYPTUI_SELECTSTORE_INFO_W info)
 
HCERTSTORE WINAPI CryptUIDlgSelectStoreA (PCRYPTUI_SELECTSTORE_INFO_A info)
 
BOOL WINAPI CryptUIDlgViewCertificateA (PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo, BOOL *pfPropertiesChanged)
 
static DWORD CALLBACK read_text_callback (DWORD_PTR dwCookie, LPBYTE buf, LONG cb, LONG *pcb)
 
static void add_unformatted_text_to_control (HWND hwnd, LPCWSTR text, LONG len)
 
static void add_string_resource_to_control (HWND hwnd, int id)
 
static void add_text_with_paraformat_to_control (HWND hwnd, LPCWSTR text, LONG len, const PARAFORMAT2 *fmt)
 
static void add_string_resource_with_paraformat_to_control (HWND hwnd, int id, const PARAFORMAT2 *fmt)
 
static LPWSTR get_cert_name_string (PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags)
 
static void add_cert_string_to_control (HWND hwnd, PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags)
 
static void add_icon_to_control (HWND hwnd, int id)
 
static void add_oid_text_to_control (HWND hwnd, char *oid)
 
static struct OIDToStringfindSupportedOID (LPCSTR oid)
 
static void add_local_oid_text_to_control (HWND text, LPCSTR oid)
 
static void display_app_usages (HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
 
static BOOL display_cert_usages (HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
 
static void set_policy_text (HWND text, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
 
static CRYPT_OBJID_BLOBfind_policy_qualifier (CERT_POLICIES_INFO *policies, LPCSTR policyOid)
 
static WCHARget_cps_str_from_qualifier (const CRYPT_OBJID_BLOB *qualifier)
 
static WCHARget_user_notice_from_qualifier (const CRYPT_OBJID_BLOB *qualifier)
 
static void set_issuer_statement (HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
 
static void set_cert_info (HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
 
static void set_cert_name_string (HWND hwnd, PCCERT_CONTEXT cert, DWORD nameFlags, int heading)
 
static void add_date_string_to_control (HWND hwnd, const FILETIME *fileTime)
 
static void set_cert_validity_period (HWND hwnd, PCCERT_CONTEXT cert)
 
static void set_general_info (HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
 
static LRESULT CALLBACK user_notice_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void show_user_notice (HWND hwnd, struct IssuerStatement *issuerStatement)
 
static LRESULT CALLBACK general_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static UINT CALLBACK general_callback_proc (HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
 
static void init_general_page (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, PROPSHEETPAGEW *page)
 
static WCHARfield_format_version (PCCERT_CONTEXT cert)
 
static WCHARformat_hex_string (void *pb, DWORD cb)
 
static WCHARfield_format_serial_number (PCCERT_CONTEXT cert)
 
static WCHARfield_format_issuer (PCCERT_CONTEXT cert)
 
static WCHARfield_format_detailed_cert_name (PCERT_NAME_BLOB name)
 
static WCHARfield_format_detailed_issuer (PCCERT_CONTEXT cert, void *param)
 
static WCHARfield_format_subject (PCCERT_CONTEXT cert)
 
static WCHARfield_format_detailed_subject (PCCERT_CONTEXT cert, void *param)
 
static WCHARformat_long_date (const FILETIME *fileTime)
 
static WCHARfield_format_from_date (PCCERT_CONTEXT cert)
 
static WCHARfield_format_to_date (PCCERT_CONTEXT cert)
 
static WCHARfield_format_public_key (PCCERT_CONTEXT cert)
 
static WCHARfield_format_detailed_public_key (PCCERT_CONTEXT cert, void *param)
 
static void add_field_value_data (struct detail_data *data, create_detailed_value_func create, void *param)
 
static void add_field_and_value_to_list (HWND hwnd, struct detail_data *data, LPWSTR field, LPWSTR value, create_detailed_value_func create, void *param)
 
static void add_string_id_and_value_to_list (HWND hwnd, struct detail_data *data, int id, LPWSTR value, create_detailed_value_func create, void *param)
 
static void add_v1_field (HWND hwnd, struct detail_data *data, const struct v1_field *field)
 
static void add_v1_fields (HWND hwnd, struct detail_data *data)
 
static WCHARcrypt_format_extension (const CERT_EXTENSION *ext, DWORD formatStrType)
 
static WCHARfield_format_extension_hex_with_ascii (const CERT_EXTENSION *ext)
 
static WCHARfield_format_detailed_extension (PCCERT_CONTEXT cert, void *param)
 
static void add_cert_extension_detail (HWND hwnd, struct detail_data *data, PCERT_EXTENSION ext)
 
static void add_all_extensions (HWND hwnd, struct detail_data *data)
 
static void add_critical_extensions (HWND hwnd, struct detail_data *data)
 
static WCHARformat_enhanced_key_usage_value (void *pb, DWORD cb)
 
static void add_properties (HWND hwnd, struct detail_data *data)
 
static void add_all_fields (HWND hwnd, struct detail_data *data)
 
static void create_show_list (HWND hwnd, struct detail_data *data)
 
static void create_listview_columns (HWND hwnd)
 
static void set_fields_selection (HWND hwnd, struct detail_data *data, int sel)
 
static void create_cert_details_list (HWND hwnd, struct detail_data *data)
 
static void add_purpose (HWND hwnd, LPCSTR oid)
 
static BOOL is_valid_oid (LPCSTR oid)
 
static BOOL is_oid_in_list (HWND hwnd, LPCSTR oid)
 
static LRESULT CALLBACK add_purpose_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static WCHARget_cert_property_as_string (PCCERT_CONTEXT cert, DWORD prop)
 
static void redraw_states (HWND list, BOOL enabled)
 
static void select_purposes (HWND hwnd, PurposeSelection selection)
 
static void show_cert_usages (HWND hwnd, struct edit_cert_data *data)
 
static void set_general_cert_properties (HWND hwnd, struct edit_cert_data *data)
 
static void set_cert_string_property (PCCERT_CONTEXT cert, DWORD prop, LPWSTR str)
 
static BOOL CALLBACK refresh_propsheet_pages (HWND hwnd, LPARAM lParam)
 
static void apply_general_changes (HWND hwnd)
 
static LRESULT CALLBACK cert_properties_general_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static UINT CALLBACK cert_properties_general_callback (HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
 
static void show_edit_cert_properties_dialog (HWND parent, struct detail_data *data)
 
static void free_detail_fields (struct detail_data *data)
 
static void refresh_details_view (HWND hwnd)
 
static LRESULT CALLBACK detail_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static UINT CALLBACK detail_callback (HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
 
static BOOL init_detail_page (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged, PROPSHEETPAGEW *page)
 
static LPARAM index_to_lparam (struct hierarchy_data *data, DWORD index)
 
static DWORD lparam_to_index (struct hierarchy_data *data, LPARAM lp)
 
static struct hierarchy_dataget_hierarchy_data_from_tree_item (HWND tree, HTREEITEM hItem)
 
static WCHARget_cert_display_name (PCCERT_CONTEXT cert)
 
static void show_cert_chain (HWND hwnd, struct hierarchy_data *data)
 
static void set_certificate_status (HWND hwnd, const CRYPT_PROVIDER_CERT *cert)
 
static void set_certificate_status_for_end_cert (HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
 
static void show_cert_hierarchy (HWND hwnd, struct hierarchy_data *data)
 
static void show_dialog_for_selected_cert (HWND hwnd)
 
static LRESULT CALLBACK hierarchy_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static UINT CALLBACK hierarchy_callback (HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
 
static BOOL init_hierarchy_page (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, PROPSHEETPAGEW *page)
 
static int CALLBACK cert_prop_sheet_proc (HWND hwnd, UINT msg, LPARAM lp)
 
static BOOL show_cert_dialog (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, CRYPT_PROVIDER_CERT *provCert, BOOL *pfPropertiesChanged)
 
BOOL WINAPI CryptUIDlgViewCertificateW (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged)
 
BOOL WINAPI CryptUIDlgViewContext (DWORD dwContextType, LPVOID pvContext, HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved)
 
static BOOL is_ca_cert (PCCERT_CONTEXT cert, BOOL defaultIfNotSpecified)
 
static HCERTSTORE choose_store_for_cert (PCCERT_CONTEXT cert)
 
static BOOL import_cert (PCCERT_CONTEXT cert, HCERTSTORE hDestCertStore)
 
static BOOL import_crl (PCCRL_CONTEXT crl, HCERTSTORE hDestCertStore)
 
static BOOL import_ctl (PCCTL_CONTEXT ctl, HCERTSTORE hDestCertStore)
 
static BOOL check_context_type (DWORD dwFlags, DWORD type)
 
static void import_warning (DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, int warningID)
 
static void import_warn_type_mismatch (DWORD dwFlags, HWND hwnd, LPCWSTR szTitle)
 
static BOOL check_store_context_type (DWORD dwFlags, HCERTSTORE store)
 
static BOOL import_store (DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, HCERTSTORE source, HCERTSTORE dest)
 
static HCERTSTORE open_store_from_file (DWORD dwFlags, LPCWSTR fileName, DWORD *pContentType)
 
static BOOL import_file (DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, LPCWSTR fileName, HCERTSTORE dest)
 
static LRESULT CALLBACK import_welcome_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static WCHARmake_import_file_filter (DWORD dwFlags)
 
static BOOL import_validate_filename (HWND hwnd, struct ImportWizData *data, LPCWSTR fileName)
 
static LRESULT CALLBACK import_file_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static LRESULT CALLBACK import_store_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void show_import_details (HWND lv, struct ImportWizData *data)
 
static BOOL do_import (DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
 
static LRESULT CALLBACK import_finish_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static BOOL show_import_ui (DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
 
BOOL WINAPI CryptUIWizImport (DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
 
static LRESULT CALLBACK export_welcome_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static PCRYPT_KEY_PROV_INFO export_get_private_key_info (PCCERT_CONTEXT cert)
 
static BOOL export_acquire_private_key (const CRYPT_KEY_PROV_INFO *info, HCRYPTPROV *phProv)
 
static BOOL export_is_key_exportable (HCRYPTPROV hProv, DWORD keySpec)
 
static LRESULT CALLBACK export_private_key_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static BOOL export_info_has_private_key (PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo)
 
static void export_format_enable_controls (HWND hwnd, const struct ExportWizData *data)
 
static LRESULT CALLBACK export_format_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void export_password_mismatch (HWND hwnd, const struct ExportWizData *data)
 
static LRESULT CALLBACK export_password_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static LPWSTR export_append_extension (const struct ExportWizData *data, LPWSTR fileName)
 
static BOOL export_validate_filename (HWND hwnd, struct ExportWizData *data, LPCWSTR fileName)
 
static WCHARmake_export_file_filter (DWORD exportFormat, DWORD subjectChoice)
 
static LRESULT CALLBACK export_file_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void show_export_details (HWND lv, const struct ExportWizData *data)
 
static BOOL save_der (HANDLE file, const BYTE *pb, DWORD cb)
 
static BOOL save_base64 (HANDLE file, const BYTE *pb, DWORD cb)
 
static BOOL save_store_as_cms (HANDLE file, HCERTSTORE store)
 
static BOOL save_cert_as_cms (HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, BOOL includeChain)
 
static BOOL save_serialized_store (HANDLE file, HCERTSTORE store)
 
static BOOL save_pfx (HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO pContextInfo, PCRYPT_KEY_PROV_INFO keyProvInfo, BOOL deleteKeys)
 
static BOOL do_export (HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO pContextInfo, PCRYPT_KEY_PROV_INFO keyProvInfo, BOOL deleteKeys)
 
static LRESULT CALLBACK export_finish_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static BOOL show_export_ui (DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, const void *pvoid)
 
BOOL WINAPI CryptUIWizExport (DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid)
 
BOOL WINAPI CryptUIDlgViewSignerInfoA (CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi)
 
static void init_columns (HWND lv, DWORD flags)
 
static void add_cert_to_list (HWND lv, PCCERT_CONTEXT cert, DWORD flags, DWORD *allocatedLen, LPWSTR *str)
 
static void add_store_certs (HWND lv, HCERTSTORE store, DWORD flags, PFNCFILTERPROC filter, void *callback_data)
 
static PCCERT_CONTEXT select_cert_get_selected (HWND hwnd, int selection)
 
static void select_cert_update_view_button (HWND hwnd)
 
static void select_cert_view (HWND hwnd, PCCERT_CONTEXT cert, struct SelectCertData *data)
 
static int CALLBACK select_cert_sort_by_text (LPARAM lp1, LPARAM lp2, LPARAM lp)
 
static LRESULT CALLBACK select_cert_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW (PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc)
 
static void free_prop_sheet_pages (PROPSHEETPAGEW *pages, DWORD num)
 
static PROPSHEETPAGEWprop_sheet_pages_AtoW (LPCPROPSHEETPAGEA pages, DWORD num)
 
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA (PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc)
 
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore (HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString, DWORD dwDontUseColumn, DWORD dwFlags, void *pvReserved)
 
BOOL WINAPI CryptUIWizDigitalSign (DWORD flags, HWND parent, LPCWSTR title, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO info, PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *context)
 

Variables

static HINSTANCE hInstance
 
static const WCHAR empty [] = {0}
 
static const WCHAR my [] = { 'M','y',0 }
 
static const WCHAR addressBook []
 
static const WCHAR ca [] = { 'C','A',0 }
 
static const WCHAR root [] = { 'R','o','o','t',0 }
 
static const WCHAR trustedPublisher []
 
static const WCHAR disallowed [] = { 'D','i','s','a','l','l','o','w','e','d',0 }
 
static const struct CertMgrStoreInfo defaultStoreList []
 
static const struct CertMgrStoreInfo publisherStoreList []
 
static struct OIDToString oidMap []
 
static const struct v1_field v1_fields []
 
static const struct prop_id_to_string_id prop_id_map []
 
static const struct selection_list_item listItems []
 
static const WCHAR filter_cert []
 
static const WCHAR filter_pfx []
 
static const WCHAR filter_crl [] = { '*','.','c','r','l',0 }
 
static const WCHAR filter_ctl [] = { '*','.','s','t','l',0 }
 
static const WCHAR filter_serialized_store [] = { '*','.','s','s','t',0 }
 
static const WCHAR filter_cms []
 
static const WCHAR filter_all [] = { '*','.','*',0 }
 
struct {
   int   id
 
   DWORD   allowFlags
 
   LPCWSTR   filter
 
import_filters []
 
static const WCHAR export_filter_cert [] = { '*','.','c','e','r',0 }
 
static const WCHAR export_filter_crl [] = { '*','.','c','r','l',0 }
 
static const WCHAR export_filter_ctl [] = { '*','.','s','t','l',0 }
 
static const WCHAR export_filter_cms [] = { '*','.','p','7','b',0 }
 
static const WCHAR export_filter_pfx [] = { '*','.','p','f','x',0 }
 
static const WCHAR export_filter_sst [] = { '*','.','s','s','t',0 }
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file main.c.

◆ CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE

#define CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE   0x00000001

Definition at line 1347 of file main.c.

◆ MAX_DESCRIPTION

#define MAX_DESCRIPTION   255

Definition at line 3536 of file main.c.

◆ MAX_FRIENDLY_NAME

#define MAX_FRIENDLY_NAME   40

Definition at line 3535 of file main.c.

◆ MAX_PURPOSE

#define MAX_PURPOSE   255

Definition at line 3227 of file main.c.

◆ MAX_STRING_LEN

#define MAX_STRING_LEN   512

Definition at line 75 of file main.c.

◆ MY_INDENT

#define MY_INDENT   200

Definition at line 1891 of file main.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 23 of file main.c.

◆ WM_REFRESH_VIEW

#define WM_REFRESH_VIEW   WM_USER + 0

Definition at line 3526 of file main.c.

Typedef Documentation

◆ add_fields_func

typedef void(* add_fields_func) (HWND hwnd, struct detail_data *data)

Definition at line 2756 of file main.c.

◆ create_detailed_value_func

typedef WCHAR *(* create_detailed_value_func) (PCCERT_CONTEXT cert, void *param)

Definition at line 2758 of file main.c.

◆ CRYPTUI_ENUM_DATA

◆ CRYPTUI_ENUM_SYSTEM_STORE_ARGS

◆ CRYPTUI_SELECTSTORE_INFO_A

◆ CRYPTUI_SELECTSTORE_INFO_W

◆ field_format_func

typedef WCHAR *(* field_format_func) (PCCERT_CONTEXT cert)

Definition at line 2597 of file main.c.

◆ PCRYPTUI_ENUM_DATA

◆ PCRYPTUI_ENUM_SYSTEM_STORE_ARGS

◆ PCRYPTUI_SELECTSTORE_INFO_A

◆ PCRYPTUI_SELECTSTORE_INFO_W

◆ PFN_SELECTED_STORE_CB

typedef BOOL(WINAPI * PFN_SELECTED_STORE_CB) (HCERTSTORE store, HWND hwnd, void *pvArg)

Definition at line 1343 of file main.c.

◆ prop_to_value_func

typedef WCHAR *(* prop_to_value_func) (void *pb, DWORD cb)

Definition at line 3005 of file main.c.

Enumeration Type Documentation

◆ CheckBitmapIndex

Enumerator
CheckBitmapIndexUnchecked 
CheckBitmapIndexChecked 
CheckBitmapIndexDisabledUnchecked 
CheckBitmapIndexDisabledChecked 

Definition at line 581 of file main.c.

581 {
CheckBitmapIndex
Definition: main.c:581
@ CheckBitmapIndexChecked
Definition: main.c:583
@ CheckBitmapIndexUnchecked
Definition: main.c:582
@ CheckBitmapIndexDisabledUnchecked
Definition: main.c:584
@ CheckBitmapIndexDisabledChecked
Definition: main.c:585

◆ PurposeFilter

Enumerator
PurposeFilterShowAll 
PurposeFilterShowAdvanced 
PurposeFilterShowOID 

Definition at line 216 of file main.c.

216 {
PurposeFilter
Definition: main.c:216
@ PurposeFilterShowAdvanced
Definition: main.c:218
@ PurposeFilterShowAll
Definition: main.c:217
@ PurposeFilterShowOID
Definition: main.c:219

◆ PurposeSelection

Enumerator
PurposeEnableAll 
PurposeDisableAll 
PurposeEnableSelected 

Definition at line 3380 of file main.c.

3380 {
3381 PurposeEnableAll = 0,
PurposeSelection
Definition: main.c:3380
@ PurposeEnableAll
Definition: main.c:3381
@ PurposeEnableSelected
Definition: main.c:3383
@ PurposeDisableAll
Definition: main.c:3382

Function Documentation

◆ add_all_extensions()

static void add_all_extensions ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 2985 of file main.c.

2986{
2987 DWORD i;
2988 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2989
2990 for (i = 0; i < cert->pCertInfo->cExtension; i++)
2991 add_cert_extension_detail(hwnd, data, &cert->pCertInfo->rgExtension[i]);
2992}
static void add_cert_extension_detail(HWND hwnd, struct detail_data *data, PCERT_EXTENSION ext)
Definition: main.c:2956
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static BYTE cert[]
Definition: msg.c:1437
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023

Referenced by add_all_fields().

◆ add_all_fields()

static void add_all_fields ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 3078 of file main.c.

3079{
3083}
static void add_v1_fields(HWND hwnd, struct detail_data *data)
Definition: main.c:2846
static void add_properties(HWND hwnd, struct detail_data *data)
Definition: main.c:3037
static void add_all_extensions(HWND hwnd, struct detail_data *data)
Definition: main.c:2985

◆ add_cert_columns()

static void add_cert_columns ( HWND  hwnd)
static

Definition at line 77 of file main.c.

78{
80 RECT rc;
83
85 GetWindowRect(lv, &rc);
88 column.cx = (rc.right - rc.left) * 29 / 100 - 2;
89 column.pszText = buf;
93 column.cx = (rc.right - rc.left) * 16 / 100 - 2;
96 column.cx = (rc.right - rc.left) * 23 / 100 - 1;
99}
#define MAX_STRING_LEN
Definition: precomp.h:36
#define ARRAY_SIZE(A)
Definition: main.h:20
HINSTANCE hInstance
Definition: charmap.c:19
#define IDS_EXPIRATION_COLUMN
Definition: cryptuires.h:102
#define IDS_FRIENDLY_NAME_COLUMN
Definition: cryptuires.h:103
#define IDS_SUBJECT_COLUMN
Definition: cryptuires.h:100
#define IDC_MGR_CERTS
Definition: cryptuires.h:258
#define IDS_ISSUER_COLUMN
Definition: cryptuires.h:101
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2739
#define LVM_INSERTCOLUMNW
Definition: commctrl.h:2637
#define LVCF_TEXT
Definition: commctrl.h:2593
#define LVM_SETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2729
LONG right
Definition: windef.h:308
LONG left
Definition: windef.h:306
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by cert_mgr_dlg_proc().

◆ add_cert_extension_detail()

static void add_cert_extension_detail ( HWND  hwnd,
struct detail_data data,
PCERT_EXTENSION  ext 
)
static

Definition at line 2956 of file main.c.

2958{
2960 ext->pszObjId, 0);
2962
2963 if (oidInfo)
2966 else
2967 {
2968 DWORD len = strlen(ext->pszObjId);
2969 LPWSTR oidW = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR));
2970
2971 if (oidW)
2972 {
2973 DWORD i;
2974
2975 for (i = 0; i <= len; i++)
2976 oidW[i] = ext->pszObjId[i];
2979 HeapFree(GetProcessHeap(), 0, oidW);
2980 }
2981 }
2983}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static struct list oidInfo
Definition: oid.c:1206
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
Definition: oid.c:1799
static void add_field_and_value_to_list(HWND hwnd, struct detail_data *data, LPWSTR field, LPWSTR value, create_detailed_value_func create, void *param)
Definition: main.c:2785
static WCHAR * field_format_detailed_extension(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2945
static WCHAR * crypt_format_extension(const CERT_EXTENSION *ext, DWORD formatStrType)
Definition: main.c:2860
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
static const WCHAR *const ext[]
Definition: module.c:53
GLuint GLfloat * val
Definition: glext.h:7180
GLenum GLsizei len
Definition: glext.h:6722
#define CRYPT_OID_INFO_OID_KEY
Definition: wincrypt.h:1702
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by add_all_extensions(), and add_critical_extensions().

◆ add_cert_string_to_control()

static void add_cert_string_to_control ( HWND  hwnd,
PCCERT_CONTEXT  pCertContext,
DWORD  dwType,
DWORD  dwFlags 
)
static

Definition at line 1794 of file main.c.

1796{
1798
1799 if (name)
1800 {
1801 /* Don't include NULL-terminator in output */
1803
1806 }
1807}
static LPWSTR get_cert_name_string(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags)
Definition: main.c:1778
static void add_unformatted_text_to_control(HWND hwnd, LPCWSTR text, LONG len)
Definition: main.c:1735
#define lstrlenW
Definition: compat.h:750
Definition: name.c:39
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ PCCERT_CONTEXT pCertContext
Definition: wincrypt.h:4836

Referenced by set_cert_name_string().

◆ add_cert_to_list()

static void add_cert_to_list ( HWND  lv,
PCCERT_CONTEXT  cert,
DWORD  flags,
DWORD allocatedLen,
LPWSTR str 
)
static

Definition at line 7066 of file main.c.

7068{
7069 DWORD len;
7070 LVITEMW item;
7071 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
7072 WCHAR buf[80];
7073 SYSTEMTIME sysTime;
7075
7077 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
7078 item.iSubItem = 0;
7079 item.iImage = 0;
7081 if (!item.iItem)
7082 {
7083 item.mask |= LVIF_STATE;
7084 item.state = LVIS_SELECTED;
7085 item.stateMask = -1;
7086 }
7088 {
7090 if (len > *allocatedLen)
7091 {
7092 HeapFree(GetProcessHeap(), 0, *str);
7093 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7094 if (*str)
7095 *allocatedLen = len;
7096 }
7097 if (*str)
7098 {
7100 item.pszText = *str;
7102 }
7103 item.mask = LVIF_TEXT;
7104 ++item.iSubItem;
7105 }
7107 {
7109 NULL, 0);
7110 if (len > *allocatedLen)
7111 {
7112 HeapFree(GetProcessHeap(), 0, *str);
7113 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7114 if (*str)
7115 *allocatedLen = len;
7116 }
7117 if (*str)
7118 {
7120 *str, len);
7121 item.pszText = *str;
7122 if (!item.iSubItem)
7124 else
7126 }
7127 item.mask = LVIF_TEXT;
7128 ++item.iSubItem;
7129 }
7131 {
7133 if (usages)
7134 {
7135 item.pszText = usages;
7136 if (!item.iSubItem)
7138 else
7141 }
7142 item.mask = LVIF_TEXT;
7143 ++item.iSubItem;
7144 }
7146 {
7149 if (len > *allocatedLen)
7150 {
7151 HeapFree(GetProcessHeap(), 0, *str);
7152 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7153 if (*str)
7154 *allocatedLen = len;
7155 }
7156 if (*str)
7157 {
7159 item.pszText = none;
7160 else
7161 item.pszText = *str;
7162 if (!item.iSubItem)
7164 else
7166 }
7167 item.mask = LVIF_TEXT;
7168 ++item.iSubItem;
7169 }
7171 {
7173 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
7174 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf, ARRAY_SIZE(buf));
7175 item.pszText = buf;
7176 if (!item.iSubItem)
7178 else
7180 item.mask = LVIF_TEXT;
7181 ++item.iSubItem;
7182 }
7184 {
7185 static int show_fixme;
7186 if (!show_fixme++)
7187 FIXME("showing location is not implemented\n");
7189 if (!item.iSubItem)
7191 else
7193 }
7194}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define CRYPTUI_SELECT_ISSUEDTO_COLUMN
Definition: cryptuiapi.h:35
#define CRYPTUI_SELECT_ISSUEDBY_COLUMN
Definition: cryptuiapi.h:36
#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN
Definition: cryptuiapi.h:38
#define CRYPTUI_SELECT_EXPIRATION_COLUMN
Definition: cryptuiapi.h:40
#define CRYPTUI_SELECT_LOCATION_COLUMN
Definition: cryptuiapi.h:39
#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN
Definition: cryptuiapi.h:37
#define IDS_FRIENDLY_NAME_NONE
Definition: cryptuires.h:119
#define IDS_NO_IMPL
Definition: cryptuires.h:181
#define NULL
Definition: types.h:112
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: cert.c:551
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:360
DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString)
Definition: str.c:1228
static void get_cert_usages(PCCERT_CONTEXT cert, LPWSTR *str)
Definition: main.c:852
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1666
GLbitfield flags
Definition: glext.h:7161
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
static ATOM item
Definition: dde.c:856
static PCCRYPT_OID_INFO ** usages
Definition: softpub.c:81
#define LOCALE_SYSTEM_DEFAULT
#define LVM_SETITEMTEXTW
Definition: commctrl.h:2692
#define LVM_GETITEMCOUNT
Definition: commctrl.h:2311
#define LVIF_STATE
Definition: commctrl.h:2317
#define LVIS_SELECTED
Definition: commctrl.h:2324
#define LVIF_PARAM
Definition: commctrl.h:2316
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVIF_IMAGE
Definition: commctrl.h:2315
#define LVM_INSERTITEMW
Definition: commctrl.h:2409
const WCHAR * str
#define CERT_NAME_SIMPLE_DISPLAY_TYPE
Definition: wincrypt.h:3500
#define CERT_FRIENDLY_NAME_PROP_ID
Definition: wincrypt.h:2697
#define CERT_NAME_ISSUER_FLAG
Definition: wincrypt.h:3506
#define LOCALE_SSHORTDATE
Definition: winnls.h:62

Referenced by add_store_certs().

◆ add_cert_to_view()

static void add_cert_to_view ( HWND  lv,
PCCERT_CONTEXT  cert,
DWORD allocatedLen,
LPWSTR str 
)
static

Definition at line 101 of file main.c.

103{
104 DWORD len;
106 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
107 WCHAR date[80];
108 SYSTEMTIME sysTime;
109 LPWSTR none;
110
112 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
113 item.iSubItem = 0;
114 item.iImage = 0;
117 NULL, 0);
118 if (len > *allocatedLen)
119 {
121 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
122 if (*str)
123 *allocatedLen = len;
124 }
125 if (*str)
126 {
128 *str, len);
129 item.pszText = *str;
131 }
132
133 item.mask = LVIF_TEXT;
136 if (len > *allocatedLen)
137 {
139 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
140 if (*str)
141 *allocatedLen = len;
142 }
143 if (*str)
144 {
147 item.pszText = *str;
148 item.iSubItem = 1;
150 }
151
153 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
154 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
155 item.pszText = date;
156 item.iSubItem = 2;
158
160 NULL, &len))
162 if (len > *allocatedLen)
163 {
165 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
166 if (*str)
167 *allocatedLen = len;
168 }
169 if (*str)
170 {
172 *str, &len))
173 item.pszText = none;
174 else
175 item.pszText = *str;
176 item.iSubItem = 3;
178 }
179}
__u16 date
Definition: mkdosfs.c:8

Referenced by show_store_certs().

◆ add_critical_extensions()

static void add_critical_extensions ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 2994 of file main.c.

2995{
2996 DWORD i;
2997 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2998
2999 for (i = 0; i < cert->pCertInfo->cExtension; i++)
3000 if (cert->pCertInfo->rgExtension[i].fCritical)
3002 &cert->pCertInfo->rgExtension[i]);
3003}

◆ add_date_string_to_control()

static void add_date_string_to_control ( HWND  hwnd,
const FILETIME fileTime 
)
static

Definition at line 2411 of file main.c.

2412{
2413 WCHAR dateFmt[80]; /* sufficient for all versions of LOCALE_SSHORTDATE */
2414 WCHAR date[80];
2415 SYSTEMTIME sysTime;
2416
2418 FileTimeToSystemTime(fileTime, &sysTime);
2419 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
2421}

Referenced by set_cert_validity_period().

◆ add_field_and_value_to_list()

static void add_field_and_value_to_list ( HWND  hwnd,
struct detail_data data,
LPWSTR  field,
LPWSTR  value,
create_detailed_value_func  create,
void param 
)
static

Definition at line 2785 of file main.c.

2787{
2788 LVITEMW item;
2789 int iItem = SendMessageW(hwnd, LVM_GETITEMCOUNT, 0, 0);
2790
2791 item.mask = LVIF_TEXT | LVIF_PARAM;
2792 item.iItem = iItem;
2793 item.iSubItem = 0;
2794 item.pszText = field;
2795 item.lParam = (LPARAM)data;
2797 if (value)
2798 {
2799 item.pszText = value;
2800 item.iSubItem = 1;
2802 }
2804}
static void add_field_value_data(struct detail_data *data, create_detailed_value_func create, void *param)
Definition: main.c:2767
GLfloat param
Definition: glext.h:5796
static const struct access_res create[16]
Definition: package.c:7505
Definition: parser.c:44
Definition: pdh_main.c:96

Referenced by add_cert_extension_detail(), and add_string_id_and_value_to_list().

◆ add_field_value_data()

static void add_field_value_data ( struct detail_data data,
create_detailed_value_func  create,
void param 
)
static

Definition at line 2767 of file main.c.

2769{
2770 if (data->cFields)
2771 data->fields = HeapReAlloc(GetProcessHeap(), 0, data->fields,
2772 (data->cFields + 1) * sizeof(struct field_value_data));
2773 else
2774 data->fields = HeapAlloc(GetProcessHeap(), 0,
2775 sizeof(struct field_value_data));
2776 if (data->fields)
2777 {
2778 data->fields[data->cFields].create = create;
2779 data->fields[data->cFields].detailed_value = NULL;
2780 data->fields[data->cFields].param = param;
2781 data->cFields++;
2782 }
2783}
#define HeapReAlloc
Definition: compat.h:734

Referenced by add_field_and_value_to_list().

◆ add_icon_to_control()

static void add_icon_to_control ( HWND  hwnd,
int  id 
)
static

Definition at line 1809 of file main.c.

1810{
1811 HRESULT hr;
1812 IRichEditOle *richEditOle = NULL;
1813 IOleObject *object = NULL;
1814 CLSID clsid;
1815 LPOLECACHE oleCache = NULL;
1816 FORMATETC formatEtc;
1817 DWORD conn;
1818 IDataObject *dataObject = NULL;
1820 STGMEDIUM stgm;
1821 IOleClientSite *clientSite = NULL;
1822 REOBJECT reObject;
1823
1824 TRACE("(%p, %d)\n", hwnd, id);
1825
1826 SendMessageW(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&richEditOle);
1827 if (!richEditOle)
1828 goto end;
1830 (void**)&object);
1831 if (FAILED(hr))
1832 goto end;
1833 hr = IOleObject_GetUserClassID(object, &clsid);
1834 if (FAILED(hr))
1835 goto end;
1836 hr = IOleObject_QueryInterface(object, &IID_IOleCache, (void**)&oleCache);
1837 if (FAILED(hr))
1838 goto end;
1839 formatEtc.cfFormat = CF_BITMAP;
1840 formatEtc.ptd = NULL;
1841 formatEtc.dwAspect = DVASPECT_CONTENT;
1842 formatEtc.lindex = -1;
1843 formatEtc.tymed = TYMED_GDI;
1844 hr = IOleCache_Cache(oleCache, &formatEtc, 0, &conn);
1845 if (FAILED(hr))
1846 goto end;
1847 hr = IOleObject_QueryInterface(object, &IID_IDataObject,
1848 (void**)&dataObject);
1849 if (FAILED(hr))
1850 goto end;
1851 hr = IRichEditOle_GetClientSite(richEditOle, &clientSite);
1852 if (FAILED(hr))
1853 goto end;
1856 if (!bitmap)
1857 goto end;
1858 stgm.tymed = TYMED_GDI;
1859 stgm.u.hBitmap = bitmap;
1860 stgm.pUnkForRelease = NULL;
1861 hr = IDataObject_SetData(dataObject, &formatEtc, &stgm, TRUE);
1862 if (FAILED(hr))
1863 goto end;
1864
1865 reObject.cbStruct = sizeof(reObject);
1866 reObject.cp = REO_CP_SELECTION;
1867 reObject.clsid = clsid;
1868 reObject.poleobj = object;
1869 reObject.pstg = NULL;
1870 reObject.polesite = clientSite;
1871 reObject.sizel.cx = reObject.sizel.cy = 0;
1872 reObject.dvaspect = DVASPECT_CONTENT;
1873 reObject.dwFlags = 0;
1874 reObject.dwUser = 0;
1875
1876 IRichEditOle_InsertObject(richEditOle, &reObject);
1877
1878end:
1879 if (clientSite)
1880 IOleClientSite_Release(clientSite);
1881 if (dataObject)
1882 IDataObject_Release(dataObject);
1883 if (oleCache)
1884 IOleCache_Release(oleCache);
1885 if (object)
1886 IOleObject_Release(object);
1887 if (richEditOle)
1888 IRichEditOle_Release(richEditOle);
1889}
#define CF_BITMAP
Definition: constants.h:397
#define TRUE
Definition: types.h:120
HRESULT WINAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObj)
GLuint GLuint end
Definition: gl.h:1545
#define FAILED(hr)
Definition: intsafe.h:51
static HBITMAP
Definition: button.c:44
REFCLSID clsid
Definition: msctf.c:82
const GUID IID_IOleCache
const GUID IID_IDataObject
const GUID IID_IOleObject
#define CLSID_NULL
Definition: guiddef.h:99
#define EM_GETOLEINTERFACE
Definition: richedit.h:93
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
DWORD dwUser
Definition: richole.idl:67
CLSID clsid
Definition: richole.idl:60
DWORD dwFlags
Definition: richole.idl:66
LPSTORAGE pstg
Definition: richole.idl:62
LPOLEOBJECT poleobj
Definition: richole.idl:61
DWORD dvaspect
Definition: richole.idl:65
LPOLECLIENTSITE polesite
Definition: richole.idl:63
DWORD cbStruct
Definition: richole.idl:58
LONG cp
Definition: richole.idl:59
SIZEL sizel
Definition: richole.idl:64
Definition: uimain.c:89
#define IMAGE_BITMAP
Definition: winuser.h:211
#define LR_LOADTRANSPARENT
Definition: winuser.h:1096
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2289
#define LR_DEFAULTSIZE
Definition: winuser.h:1097
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by set_cert_info().

◆ add_known_usage()

static void add_known_usage ( HWND  lv,
PCCRYPT_OID_INFO  info,
CheckBitmapIndex  state 
)
static

Definition at line 588 of file main.c.

590{
592
595 item.stateMask = LVIS_STATEIMAGEMASK;
596 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
597 item.iSubItem = 0;
598 item.lParam = (LPARAM)info;
599 item.pszText = (LPWSTR)info->pwszName;
601}
static int state
Definition: maze.c:121
#define INDEXTOSTATEIMAGEMASK(i)
Definition: commctrl.h:2333
#define LVIS_STATEIMAGEMASK
Definition: commctrl.h:2331

Referenced by add_known_usages_to_list(), and show_cert_usages().

◆ add_known_usages_to_list()

static void add_known_usages_to_list ( HWND  lv,
CheckBitmapIndex  state 
)
static

Definition at line 603 of file main.c.

604{
606
608 {
610
611 for (ptr = usages; *ptr; ptr++)
614 }
615}
BOOL WINAPI WTHelperGetKnownUsages(DWORD action, PCCRYPT_OID_INFO **usages)
static void add_known_usage(HWND lv, PCCRYPT_OID_INFO info, CheckBitmapIndex state)
Definition: main.c:588
static PVOID ptr
Definition: dispmode.c:27

Referenced by cert_mgr_advanced_dlg_proc(), and show_cert_usages().

◆ add_local_oid_text_to_control()

static void add_local_oid_text_to_control ( HWND  text,
LPCSTR  oid 
)
static

Definition at line 1993 of file main.c.

1994{
1995 struct OIDToString *entry;
1996 WCHAR nl = '\n';
1997 PARAFORMAT2 parFmt;
1998
1999 parFmt.cbSize = sizeof(parFmt);
2000 parFmt.dwMask = PFM_STARTINDENT;
2001 parFmt.dxStartIndent = MY_INDENT * 3;
2002 if ((entry = findSupportedOID(oid)))
2003 {
2004 WCHAR *str, *linebreak, *ptr;
2005 BOOL multiline = FALSE;
2006 int len;
2007
2008 len = LoadStringW(hInstance, entry->id, (LPWSTR)&str, 0);
2009 ptr = str;
2010 do {
2011 if ((linebreak = wmemchr(ptr, '\n', len)))
2012 {
2014
2015 multiline = TRUE;
2016 /* The source string contains a newline, which the richedit
2017 * control won't find since it's interpreted as a paragraph
2018 * break. Therefore copy up to the newline. lstrcpynW always
2019 * NULL-terminates, so pass one more than the length of the
2020 * source line so the copy includes the entire line and the
2021 * NULL-terminator.
2022 */
2023 lstrcpynW(copy, ptr, linebreak - ptr + 1);
2025 linebreak - ptr, &parFmt);
2026 ptr = linebreak + 1;
2028 }
2029 else if (multiline && *ptr)
2030 {
2031 /* Add the last line */
2033 len - (ptr - str), &parFmt);
2035 }
2036 } while (linebreak);
2037 if (!multiline)
2038 {
2041 }
2042 }
2043 else
2044 {
2045 WCHAR *oidW = HeapAlloc(GetProcessHeap(), 0,
2046 (strlen(oid) + 1) * sizeof(WCHAR));
2047
2048 if (oidW)
2049 {
2050 LPCSTR src;
2051 WCHAR *dst;
2052
2053 for (src = oid, dst = oidW; *src; src++, dst++)
2054 *dst = *src;
2055 *dst = 0;
2057 &parFmt);
2059 HeapFree(GetProcessHeap(), 0, oidW);
2060 }
2061 }
2062}
INT copy(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], INT append, DWORD lpdwFlags, BOOL bTouch)
Definition: copy.c:51
#define FALSE
Definition: types.h:117
static void add_text_with_paraformat_to_control(HWND hwnd, LPCWSTR text, LONG len, const PARAFORMAT2 *fmt)
Definition: main.c:1761
#define MY_INDENT
Definition: main.c:1891
static struct OIDToString * findSupportedOID(LPCSTR oid)
Definition: main.c:1976
#define lstrcpynW
Definition: compat.h:738
const WCHAR * text
Definition: package.c:1794
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
_CONST_RETURN wchar_t *__cdecl wmemchr(_In_reads_(_N) const wchar_t *_S, _In_ wchar_t _C, _In_ size_t _N)
Definition: wchar.h:2606
uint32_t entry
Definition: isohybrid.c:63
#define PFM_STARTINDENT
Definition: richedit.h:838
LPCSTR oid
Definition: main.c:1912
DWORD dwMask
Definition: richedit.h:667
UINT cbSize
Definition: richedit.h:666
LONG dxStartIndent
Definition: richedit.h:670
const char * LPCSTR
Definition: xmlstorage.h:183

Referenced by display_app_usages(), and display_cert_usages().

◆ add_oid_text_to_control()

static void add_oid_text_to_control ( HWND  hwnd,
char oid 
)
static

Definition at line 1893 of file main.c.

1894{
1895 WCHAR nl = '\n';
1897 PARAFORMAT2 parFmt;
1898
1899 parFmt.cbSize = sizeof(parFmt);
1900 parFmt.dwMask = PFM_STARTINDENT;
1901 parFmt.dxStartIndent = MY_INDENT * 3;
1902 if (oidInfo)
1903 {
1905 lstrlenW(oidInfo->pwszName), &parFmt);
1907 }
1908}

Referenced by display_app_usages(), and display_cert_usages().

◆ add_oid_to_usage()

static CERT_ENHKEY_USAGE * add_oid_to_usage ( CERT_ENHKEY_USAGE usage,
LPSTR  oid 
)
static

Definition at line 262 of file main.c.

263{
264 if (!usage->cUsageIdentifier)
265 usage->rgpszUsageIdentifier = HeapAlloc(GetProcessHeap(), 0,
266 sizeof(LPSTR));
267 else
268 usage->rgpszUsageIdentifier = HeapReAlloc(GetProcessHeap(), 0,
269 usage->rgpszUsageIdentifier,
270 (usage->cUsageIdentifier + 1) * sizeof(LPSTR));
271 if (usage->rgpszUsageIdentifier)
272 usage->rgpszUsageIdentifier[usage->cUsageIdentifier++] = oid;
273 else
274 {
276 usage = NULL;
277 }
278 return usage;
279}
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919
char * LPSTR
Definition: xmlstorage.h:182

Referenced by convert_usages_str_to_usage(), and create_advanced_filter().

◆ add_properties()

static void add_properties ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 3037 of file main.c.

3038{
3039 DWORD i;
3040 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
3041
3042 for (i = 0; i < ARRAY_SIZE(prop_id_map); i++)
3043 {
3044 DWORD cb;
3045
3047 &cb))
3048 {
3049 BYTE *pb;
3050 WCHAR *val = NULL;
3051
3052 /* FIXME: MS adds a separate value for the signature hash
3053 * algorithm.
3054 */
3055 pb = HeapAlloc(GetProcessHeap(), 0, cb);
3056 if (pb)
3057 {
3059 prop_id_map[i].prop, pb, &cb))
3060 {
3061 if (prop_id_map[i].prop_is_string)
3062 {
3063 val = (LPWSTR)pb;
3064 /* Don't double-free pb */
3065 pb = NULL;
3066 }
3067 else
3068 val = prop_id_map[i].prop_to_value(pb, cb);
3069 }
3070 HeapFree(GetProcessHeap(), 0, pb);
3071 }
3073 NULL, NULL);
3074 }
3075 }
3076}
static void add_string_id_and_value_to_list(HWND hwnd, struct detail_data *data, int id, LPWSTR value, create_detailed_value_func create, void *param)
Definition: main.c:2806
static const struct prop_id_to_string_id prop_id_map[]
Definition: main.c:3029
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
unsigned char BYTE
Definition: xxhash.c:193

Referenced by add_all_fields().

◆ add_purpose()

static void add_purpose ( HWND  hwnd,
LPCSTR  oid 
)
static

Definition at line 3152 of file main.c.

3153{
3156 sizeof(CRYPT_OID_INFO));
3157
3158 if (info)
3159 {
3160 char *oidCopy = HeapAlloc(GetProcessHeap(), 0, strlen(oid) + 1);
3161
3162 if (oidCopy)
3163 {
3164 LVITEMA item;
3165
3166 strcpy(oidCopy, oid);
3167 info->cbSize = sizeof(CRYPT_OID_INFO);
3168 info->pszOID = oidCopy;
3171 item.stateMask = LVIS_STATEIMAGEMASK;
3172 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
3173 item.iSubItem = 0;
3174 item.lParam = (LPARAM)info;
3175 item.pszText = oidCopy;
3177 }
3178 else
3180 }
3181}
#define IDC_CERTIFICATE_USAGES
Definition: cryptuires.h:238
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define LVM_INSERTITEMA
Definition: commctrl.h:2408
strcpy
Definition: string.h:131
struct _CRYPT_OID_INFO CRYPT_OID_INFO
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by add_purpose_dlg_proc(), and show_cert_usages().

◆ add_purpose_dlg_proc()

static LRESULT CALLBACK add_purpose_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 3229 of file main.c.

3231{
3232 LRESULT ret = 0;
3233 char buf[MAX_PURPOSE + 1];
3234
3235 switch (msg)
3236 {
3237 case WM_INITDIALOG:
3239 MAX_PURPOSE, 0);
3242 break;
3243 case WM_COMMAND:
3244 switch (HIWORD(wp))
3245 {
3246 case EN_CHANGE:
3247 if (LOWORD(wp) == IDC_NEW_PURPOSE)
3248 {
3249 /* Show/hide scroll bar on description depending on how much
3250 * text it has.
3251 */
3254
3256 }
3257 break;
3258 case BN_CLICKED:
3259 switch (LOWORD(wp))
3260 {
3261 case IDOK:
3263 (LPARAM)buf);
3264 if (!buf[0])
3265 {
3266 /* An empty purpose is the same as cancelling */
3268 ret = TRUE;
3269 }
3270 else if (!is_valid_oid(buf))
3271 {
3273
3277 }
3278 else if (is_oid_in_list(
3280 {
3282
3284 ARRAY_SIZE(error));
3287 }
3288 else
3289 {
3291
3293 EndDialog(hwnd, wp);
3294 ret = TRUE;
3295 }
3296 break;
3297 case IDCANCEL:
3298 EndDialog(hwnd, wp);
3299 ret = TRUE;
3300 break;
3301 }
3302 break;
3303 }
3304 break;
3305 }
3306 return ret;
3307}
#define msg(x)
Definition: auth_time.c:54
#define IDS_CERTIFICATE_PURPOSE_EXISTS
Definition: cryptuires.h:64
#define IDS_CERTIFICATE_PURPOSE_ERROR
Definition: cryptuires.h:63
#define IDS_CERTIFICATE_PROPERTIES
Definition: cryptuires.h:62
#define IDC_NEW_PURPOSE
Definition: cryptuires.h:241
static void add_purpose(HWND hwnd, LPCSTR oid)
Definition: main.c:3152
static BOOL is_oid_in_list(HWND hwnd, LPCSTR oid)
Definition: main.c:3221
static BOOL is_valid_oid(LPCSTR oid)
Definition: main.c:3183
#define MAX_PURPOSE
Definition: main.c:3227
HANDLE HWND
Definition: compat.h:19
r parent
Definition: btrfs.c:3010
#define error(str)
Definition: mkdosfs.c:1605
#define LOWORD(l)
Definition: pedump.c:82
static char title[]
Definition: ps.c:92
eMaj lines
Definition: tritemp.h:206
#define HIWORD(l)
Definition: typedefs.h:247
int ret
LONG_PTR LRESULT
Definition: windef.h:209
const char * description
Definition: directx.c:2497
#define DWLP_USER
Definition: winuser.h:875
#define GetWindowLongPtrW
Definition: winuser.h:4832
#define IDCANCEL
Definition: winuser.h:834
#define SB_VERT
Definition: winuser.h:553
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_GETTEXT
Definition: winuser.h:1621
#define WM_INITDIALOG
Definition: winuser.h:1742
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define IDOK
Definition: winuser.h:833
#define MB_ICONERROR
Definition: winuser.h:790
#define EM_SETLIMITTEXT
Definition: winuser.h:2014
#define MB_ICONEXCLAMATION
Definition: winuser.h:788
#define MB_OK
Definition: winuser.h:793
#define BN_CLICKED
Definition: winuser.h:1928
BOOL WINAPI ShowScrollBar(_In_ HWND, _In_ int, _In_ BOOL)
#define EM_GETLINECOUNT
Definition: winuser.h:1995
#define SetWindowLongPtrW
Definition: winuser.h:5358
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define EN_CHANGE
Definition: winuser.h:2025

Referenced by cert_properties_general_dlg_proc().

◆ add_store_certs()

static void add_store_certs ( HWND  lv,
HCERTSTORE  store,
DWORD  flags,
PFNCFILTERPROC  filter,
void callback_data 
)
static

Definition at line 7196 of file main.c.

7198{
7200 BOOL select = FALSE;
7201 DWORD allocatedLen = 0;
7202 LPWSTR str = NULL;
7203
7204 do {
7206 if (cert && (!filter || filter(cert, &select, callback_data)))
7207 add_cert_to_list(lv, cert, flags, &allocatedLen, &str);
7208 } while (cert);
7210}
PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev)
Definition: store.c:928
static void add_cert_to_list(HWND lv, PCCERT_CONTEXT cert, DWORD flags, DWORD *allocatedLen, LPWSTR *str)
Definition: main.c:7066
LPCWSTR filter
Definition: main.c:4929
INT WSAAPI select(IN INT s, IN OUT LPFD_SET readfds, IN OUT LPFD_SET writefds, IN OUT LPFD_SET exceptfds, IN CONST struct timeval *timeout)
Definition: select.c:41
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005

Referenced by select_cert_dlg_proc().

◆ add_string_id_and_value_to_list()

static void add_string_id_and_value_to_list ( HWND  hwnd,
struct detail_data data,
int  id,
LPWSTR  value,
create_detailed_value_func  create,
void param 
)
static

Definition at line 2806 of file main.c.

Referenced by add_properties(), and add_v1_field().

◆ add_string_resource_to_control()

static void add_string_resource_to_control ( HWND  hwnd,
int  id 
)
static

Definition at line 1752 of file main.c.

1753{
1754 LPWSTR str;
1755 LONG len;
1756
1757 len = LoadStringW(hInstance, id, (LPWSTR)&str, 0);
1759}
long LONG
Definition: pedump.c:60

Referenced by set_cert_validity_period(), and set_certificate_status().

◆ add_string_resource_with_paraformat_to_control()

static void add_string_resource_with_paraformat_to_control ( HWND  hwnd,
int  id,
const PARAFORMAT2 fmt 
)
static

◆ add_text_with_paraformat_to_control()

static void add_text_with_paraformat_to_control ( HWND  hwnd,
LPCWSTR  text,
LONG  len,
const PARAFORMAT2 fmt 
)
static

◆ add_unformatted_text_to_control()

static void add_unformatted_text_to_control ( HWND  hwnd,
LPCWSTR  text,
LONG  len 
)
static

Definition at line 1735 of file main.c.

1736{
1737 struct ReadStringStruct string;
1738 EDITSTREAM editstream;
1739
1740 TRACE("(%p, %s)\n", hwnd, debugstr_wn(text, len));
1741
1742 string.buf = text;
1743 string.pos = 0;
1744 string.len = len;
1745 editstream.dwCookie = (DWORD_PTR)&string;
1746 editstream.dwError = 0;
1747 editstream.pfnCallback = read_text_callback;
1749 (LPARAM)&editstream);
1750}
static DWORD CALLBACK read_text_callback(DWORD_PTR dwCookie, LPBYTE buf, LONG cb, LONG *pcb)
Definition: main.c:1721
#define debugstr_wn
Definition: kernel32.h:33
#define SFF_SELECTION
Definition: richedit.h:979
#define EM_STREAMIN
Definition: richedit.h:106
#define SF_TEXT
Definition: richedit.h:720
#define SF_UNICODE
Definition: richedit.h:724
#define DWORD_PTR
Definition: treelist.c:76

Referenced by add_cert_string_to_control(), add_date_string_to_control(), add_local_oid_text_to_control(), add_oid_text_to_control(), add_string_resource_to_control(), add_text_with_paraformat_to_control(), detail_dlg_proc(), display_app_usages(), display_cert_usages(), set_cert_name_string(), set_cert_validity_period(), and user_notice_dlg_proc().

◆ add_v1_field()

static void add_v1_field ( HWND  hwnd,
struct detail_data data,
const struct v1_field field 
)
static

Definition at line 2822 of file main.c.

2824{
2825 WCHAR *val = field->format(data->pCertViewInfo->pCertContext);
2826
2827 if (val)
2828 {
2830 field->create_detailed_value, NULL);
2832 }
2833}

Referenced by add_v1_fields().

◆ add_v1_fields()

static void add_v1_fields ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 2846 of file main.c.

2847{
2848 unsigned int i;
2849 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2850
2851 /* The last item in v1_fields is the public key, which is not in the loop
2852 * because it's a special case.
2853 */
2854 for (i = 0; i < ARRAY_SIZE(v1_fields) - 1; i++)
2856 if (cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData)
2858}
static const struct v1_field v1_fields[]
Definition: main.c:2835
static void add_v1_field(HWND hwnd, struct detail_data *data, const struct v1_field *field)
Definition: main.c:2822

Referenced by add_all_fields().

◆ apply_general_changes()

static void apply_general_changes ( HWND  hwnd)
static

Definition at line 3538 of file main.c.

3539{
3541 struct edit_cert_data *data =
3543
3549 {
3550 /* Setting a NULL usage removes the enhanced key usage property. */
3552 }
3554 {
3555 CERT_ENHKEY_USAGE usage = { 0, NULL };
3556
3558 }
3560 {
3562 CERT_ENHKEY_USAGE usage = { 0, NULL };
3563 int purposes = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
3564 LVITEMW item;
3565
3566 item.mask = LVIF_STATE | LVIF_PARAM;
3567 item.iSubItem = 0;
3568 item.stateMask = LVIS_STATEIMAGEMASK;
3569 for (i = 0; i < purposes; i++)
3570 {
3571 item.iItem = i;
3572 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
3573 {
3574 int state = item.state >> 12;
3575
3577 {
3579
3580 if (usage.cUsageIdentifier)
3581 usage.rgpszUsageIdentifier =
3583 usage.rgpszUsageIdentifier,
3584 (usage.cUsageIdentifier + 1) * sizeof(LPSTR));
3585 else
3586 usage.rgpszUsageIdentifier =
3587 HeapAlloc(GetProcessHeap(), 0, sizeof(LPSTR));
3588 if (usage.rgpszUsageIdentifier)
3589 usage.rgpszUsageIdentifier[usage.cUsageIdentifier++] =
3590 (LPSTR)info->pszOID;
3591 }
3592 }
3593 }
3595 HeapFree(GetProcessHeap(), 0, usage.rgpszUsageIdentifier);
3596 }
3598 if (data->pfPropertiesChanged)
3599 *data->pfPropertiesChanged = TRUE;
3600}
#define IDC_DESCRIPTION
Definition: resource.h:129
#define IDC_ENABLE_SELECTED_PURPOSES
Definition: cryptuires.h:237
#define IDC_ENABLE_ALL_PURPOSES
Definition: cryptuires.h:235
#define IDC_FRIENDLY_NAME
Definition: cryptuires.h:233
#define IDC_DISABLE_ALL_PURPOSES
Definition: cryptuires.h:236
BOOL WINAPI CertSetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, PCERT_ENHKEY_USAGE pUsage)
Definition: cert.c:2952
#define MAX_DESCRIPTION
Definition: main.c:3536
static void set_cert_string_property(PCCERT_CONTEXT cert, DWORD prop, LPWSTR str)
Definition: main.c:3511
static BOOL CALLBACK refresh_propsheet_pages(HWND hwnd, LPARAM lParam)
Definition: main.c:3528
if(dx< 0)
Definition: linetemp.h:194
#define LVM_GETITEMW
Definition: commctrl.h:2395
#define CERT_DESCRIPTION_PROP_ID
Definition: wincrypt.h:2699
BOOL WINAPI EnumChildWindows(_In_opt_ HWND, _In_ WNDENUMPROC, _In_ LPARAM)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
HWND WINAPI GetParent(_In_ HWND)

Referenced by cert_properties_general_dlg_proc().

◆ cert_mgr_advanced_dlg_proc()

static LRESULT CALLBACK cert_mgr_advanced_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 724 of file main.c.

726{
727 switch (msg)
728 {
729 case WM_INITDIALOG:
730 {
731 RECT rc;
734 HIMAGELIST imageList;
735 LPSTR disabledUsages;
736
737 GetWindowRect(lv, &rc);
738 column.mask = LVCF_WIDTH;
739 column.cx = rc.right - rc.left;
741 imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 4, 0);
742 if (imageList)
743 {
744 HBITMAP bmp;
745 COLORREF backColor = RGB(255, 0, 255);
746
748 ImageList_AddMasked(imageList, bmp, backColor);
750 ImageList_SetBkColor(imageList, CLR_NONE);
753 }
755 if ((disabledUsages = get_cert_mgr_usages()))
756 {
757 LPSTR ptr, comma;
758
759 for (ptr = disabledUsages, comma = strchr(ptr, ','); ptr && *ptr;
760 ptr = comma ? comma + 1 : NULL,
761 comma = ptr ? strchr(ptr, ',') : NULL)
762 {
764
765 if (comma)
766 *comma = 0;
767 if ((index = find_oid_in_list(lv, ptr)) != -1)
769 }
770 HeapFree(GetProcessHeap(), 0, disabledUsages);
771 }
772 break;
773 }
774 case WM_NOTIFY:
775 {
776 NMHDR *hdr = (NMHDR *)lp;
777 NMITEMACTIVATE *nm;
778
779 switch (hdr->code)
780 {
781 case NM_CLICK:
782 nm = (NMITEMACTIVATE *)lp;
783 toggle_usage(hwnd, nm->iItem);
785 break;
786 }
787 break;
788 }
789 case WM_COMMAND:
790 switch (wp)
791 {
792 case IDOK:
794#ifndef __REACTOS__
796#endif
798 break;
799 case IDCANCEL:
800#ifndef __REACTOS__
802#endif
804 break;
805 }
806 break;
807 }
808 return 0;
809}
char * strchr(const char *String, int ch)
Definition: utclib.c:501
#define index(s, c)
Definition: various.h:29
#define IDB_CHECKS
Definition: cryptuires.h:208
COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST himl, COLORREF clrBk)
Definition: imagelist.c:2936
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:941
INT WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hBitmap, COLORREF clrMask)
Definition: imagelist.c:573
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:814
static void toggle_usage(HWND hwnd, int iItem)
Definition: main.c:617
static LPSTR get_cert_mgr_usages(void)
Definition: main.c:181
static void add_known_usages_to_list(HWND lv, CheckBitmapIndex state)
Definition: main.c:603
static void save_cert_mgr_usages(HWND hwnd)
Definition: main.c:664
static LONG_PTR find_oid_in_list(HWND lv, LPCSTR oid)
Definition: main.c:639
#define RGB(r, g, b)
Definition: precomp.h:71
pKey DeleteObject()
GLuint index
Definition: glext.h:6031
char hdr[14]
Definition: iptest.cpp:33
BITMAP bmp
Definition: alphablend.c:62
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define PSM_CHANGED
Definition: prsht.h:164
#define ILC_COLOR4
Definition: commctrl.h:354
#define CLR_NONE
Definition: commctrl.h:319
#define LVM_SETIMAGELIST
Definition: commctrl.h:2308
#define NM_CLICK
Definition: commctrl.h:130
#define ILC_MASK
Definition: commctrl.h:351
#define LVSIL_STATE
Definition: commctrl.h:2305
#define WM_NOTIFY
Definition: richedit.h:61
UINT_PTR WPARAM
Definition: windef.h:207
DWORD COLORREF
Definition: windef.h:300
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2249

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_clear_cert_selection()

static void cert_mgr_clear_cert_selection ( HWND  hwnd)
static

Definition at line 811 of file main.c.

812{
817 (LPARAM)empty);
819}
#define IDC_MGR_EXPORT
Definition: cryptuires.h:260
#define IDC_MGR_VIEW
Definition: cryptuires.h:264
#define IDC_MGR_REMOVE
Definition: cryptuires.h:261
#define IDC_MGR_PURPOSES
Definition: cryptuires.h:263
static const WCHAR empty[]
Definition: main.c:47
static void refresh_store_certs(HWND hwnd)
Definition: main.c:572
#define WM_SETTEXT
Definition: winuser.h:1620
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)

Referenced by cert_mgr_dlg_proc(), and cert_mgr_do_remove().

◆ cert_mgr_current_store()

static HCERTSTORE cert_mgr_current_store ( HWND  hwnd)
static

Definition at line 557 of file main.c.

558{
560
562}
#define IDC_MGR_STORES
Definition: cryptuires.h:257
static HCERTSTORE cert_mgr_index_to_store(HWND tab, int index)
Definition: main.c:548
#define TCM_GETCURSEL
Definition: commctrl.h:4067
static struct wctab tab[]

Referenced by cert_mgr_dlg_proc(), and refresh_store_certs().

◆ cert_mgr_dlg_proc()

static LRESULT CALLBACK cert_mgr_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1121 of file main.c.

1123{
1124 struct CertMgrData *data;
1125
1126 switch (msg)
1127 {
1128 case WM_INITDIALOG:
1129 {
1130 PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr =
1133
1134 data = HeapAlloc(GetProcessHeap(), 0, sizeof(struct CertMgrData));
1135 if (!data)
1136 return 0;
1137 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
1138 if (data->imageList)
1139 {
1140 HBITMAP bmp;
1141 COLORREF backColor = RGB(255, 0, 255);
1142
1144 ImageList_AddMasked(data->imageList, bmp, backColor);
1146 ImageList_SetBkColor(data->imageList, CLR_NONE);
1148 LVSIL_SMALL, (LPARAM)data->imageList);
1149 }
1151 data->title = pCryptUICertMgr->pwszTitle;
1152
1155 if (pCryptUICertMgr->pwszTitle)
1157 (LPARAM)pCryptUICertMgr->pwszTitle);
1158 show_cert_stores(hwnd, pCryptUICertMgr->dwFlags, data);
1160 break;
1161 }
1162#ifdef __REACTOS__
1163 case WM_DESTROY:
1168 break;
1169#endif
1170 case WM_NOTIFY:
1171 {
1172 NMHDR *hdr = (NMHDR *)lp;
1173
1174 switch (hdr->code)
1175 {
1176 case TCN_SELCHANGE:
1178 break;
1179 case LVN_ITEMCHANGED:
1180 {
1181 NMITEMACTIVATE *nm = (NMITEMACTIVATE*)lp;
1183 int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1184
1185 EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), numSelected > 0);
1186 EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), numSelected > 0);
1187 EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), numSelected == 1);
1188 if (numSelected == 1)
1190 else
1192 (LPARAM)empty);
1193 break;
1194 }
1195 case NM_DBLCLK:
1196 show_selected_cert(hwnd, ((NMITEMACTIVATE *)lp)->iItem);
1197 break;
1198 case LVN_KEYDOWN:
1199 {
1200 NMLVKEYDOWN *lvk = (NMLVKEYDOWN *)lp;
1201
1202 if (lvk->wVKey == VK_DELETE)
1204 break;
1205 }
1206 case LVN_COLUMNCLICK:
1207 {
1208 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
1210
1211 /* FIXME: doesn't support swapping sort order between ascending
1212 * and descending.
1213 */
1214 switch (nmlv->iSubItem)
1215 {
1216 case 0:
1219 break;
1220 case 1:
1223 break;
1224 case 2:
1227 break;
1228 case 3:
1231 break;
1232 }
1233 break;
1234 }
1235 }
1236 break;
1237 }
1238 case WM_COMMAND:
1239 switch (wp)
1240 {
1243 break;
1244 case IDC_MGR_IMPORT:
1245 if (CryptUIWizImport(0, hwnd, NULL, NULL,
1248 break;
1249 case IDC_MGR_ADVANCED:
1252 {
1254 int index, len;
1255 LPWSTR curString = NULL;
1256
1258 if (index >= 0)
1259 {
1261 curString = HeapAlloc(GetProcessHeap(), 0,
1262 (len + 1) * sizeof(WCHAR));
1263 SendMessageW(cb, CB_GETLBTEXT, index, (LPARAM)curString);
1264 }
1267 if (curString)
1268 {
1270 (LPARAM)curString);
1271 if (index >= 0)
1273 HeapFree(GetProcessHeap(), 0, curString);
1274 }
1276 }
1277 break;
1278 case IDC_MGR_VIEW:
1279 {
1283
1284 if (selection >= 0)
1286 break;
1287 }
1288 case IDC_MGR_EXPORT:
1290 break;
1291 case IDC_MGR_REMOVE:
1293 break;
1294 case IDCANCEL:
1295#ifndef __REACTOS__
1299 ImageList_Destroy(data->imageList);
1301#endif
1303 break;
1304 }
1305 break;
1306 }
1307 return 0;
1308}
const struct _CRYPTUI_CERT_MGR_STRUCT * PCCRYPTUI_CERT_MGR_STRUCT
Definition: cryptuiapi.h:59
#define IDC_MGR_ADVANCED
Definition: cryptuires.h:262
#define IDD_CERT_MGR_ADVANCED
Definition: cryptuires.h:195
#define IDC_MGR_PURPOSE_SELECTION
Definition: cryptuires.h:256
#define IDB_SMALL_ICONS
Definition: cryptuires.h:204
#define IDC_MGR_IMPORT
Definition: cryptuires.h:259
int selection
Definition: ctm.c:92
static void cert_mgr_clear_cert_selection(HWND hwnd)
Definition: main.c:811
BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5559
static void initialize_purpose_selection(HWND hwnd)
Definition: main.c:222
static int CALLBACK cert_mgr_sort_by_issuer(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1102
static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:724
static int CALLBACK cert_mgr_sort_by_friendly_name(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1115
static void show_store_certs(HWND hwnd, HCERTSTORE store)
Definition: main.c:355
static void close_stores(HWND tab)
Definition: main.c:564
static HCERTSTORE cert_mgr_current_store(HWND hwnd)
Definition: main.c:557
static void cert_mgr_do_export(HWND hwnd)
Definition: main.c:1018
static void cert_mgr_do_remove(HWND hwnd)
Definition: main.c:972
static void show_selected_cert(HWND hwnd, int index)
Definition: main.c:835
static void cert_mgr_show_cert_usages(HWND hwnd, int index)
Definition: main.c:958
static int CALLBACK cert_mgr_sort_by_date(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1107
static void show_cert_stores(HWND hwnd, DWORD dwFlags, struct CertMgrData *data)
Definition: main.c:496
static void add_cert_columns(HWND hwnd)
Definition: main.c:77
static int CALLBACK cert_mgr_sort_by_subject(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1097
static void free_certs(HWND lv)
Definition: main.c:533
#define LVSIL_SMALL
Definition: commctrl.h:2304
#define LVN_COLUMNCLICK
Definition: commctrl.h:3144
#define NM_DBLCLK
Definition: commctrl.h:131
#define LVNI_SELECTED
Definition: commctrl.h:2429
#define LVM_GETNEXTITEM
Definition: commctrl.h:2438
#define TCN_SELCHANGE
Definition: commctrl.h:4137
#define LVN_KEYDOWN
Definition: commctrl.h:3189
#define LVM_GETSELECTEDCOUNT
Definition: commctrl.h:2713
#define LVM_SORTITEMSEX
Definition: commctrl.h:2805
#define LVN_ITEMCHANGED
Definition: commctrl.h:3136
#define LVM_SORTITEMS
Definition: commctrl.h:2707
#define CB_GETLBTEXTLEN
Definition: winuser.h:1956
#define CB_GETLBTEXT
Definition: winuser.h:1955
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4402
#define CB_SETCURSEL
Definition: winuser.h:1964
#define CB_RESETCONTENT
Definition: winuser.h:1962
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1943
#define CBN_SELCHANGE
Definition: winuser.h:1982
#define VK_DELETE
Definition: winuser.h:2236
#define WM_DESTROY
Definition: winuser.h:1612
#define CB_GETCURSEL
Definition: winuser.h:1946

Referenced by CryptUIDlgCertMgr().

◆ cert_mgr_do_export()

static void cert_mgr_do_export ( HWND  hwnd)
static

Definition at line 1018 of file main.c.

1019{
1021 int selectionCount = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1022
1023 if (selectionCount == 1)
1024 {
1027
1028 if (selection >= 0)
1029 {
1031
1032 if (cert)
1033 {
1035
1036 info.dwSize = sizeof(info);
1037 info.pwszExportFileName = NULL;
1038 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
1039 info.u.pCertContext = cert;
1040 info.cStores = 0;
1042 }
1043 }
1044 }
1045 else if (selectionCount > 1)
1046 {
1049
1050 if (store)
1051 {
1053 int selection = -1;
1054
1055 info.dwSize = sizeof(info);
1056 info.pwszExportFileName = NULL;
1057 info.dwSubjectChoice =
1059 info.u.hCertStore = store;
1060 info.cStores = 0;
1061 do {
1064 if (selection >= 0)
1065 {
1067 selection);
1068
1071 }
1072 } while (selection >= 0);
1074 CertCloseStore(store, 0);
1075 }
1076 }
1077}
#define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT
Definition: cryptuiapi.h:258
#define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY
Definition: cryptuiapi.h:262
BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext)
Definition: cert.c:286
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwMsgAndCertEncodingType, HCRYPTPROV_LEGACY hCryptProv, DWORD dwFlags, const void *pvPara)
Definition: store.c:815
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
Definition: store.c:1127
static PCCERT_CONTEXT cert_mgr_index_to_cert(HWND hwnd, int index)
Definition: main.c:821
BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid)
Definition: main.c:6990
#define CERT_STORE_CREATE_NEW_FLAG
Definition: wincrypt.h:2464
#define CERT_STORE_PROV_MEMORY
Definition: wincrypt.h:2251
#define CERT_STORE_ADD_ALWAYS
Definition: wincrypt.h:2485

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_do_remove()

static void cert_mgr_do_remove ( HWND  hwnd)
static

Definition at line 972 of file main.c.

973{
975 TCM_GETCURSEL, 0, 0);
976 struct CertMgrData *data =
978
979 if (tabIndex < data->nStores)
980 {
983 LPCWSTR pTitle;
984 int warningID;
985
986 if (SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0) > 1)
987 warningID = data->stores[tabIndex].removePluralWarning;
988 else
989 warningID = data->stores[tabIndex].removeWarning;
990 if (data->title)
991 pTitle = data->title;
992 else
993 {
995 pTitle = title;
996 }
998 if (MessageBoxW(hwnd, warning, pTitle, MB_YESNO) == IDYES)
999 {
1000 int selection = -1;
1001
1002 do {
1005 if (selection >= 0)
1006 {
1008 selection);
1009
1011 }
1012 } while (selection >= 0);
1014 }
1015 }
1016}
#define IDS_CERT_MGR
Definition: cryptuires.h:118
BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext)
Definition: store.c:943
#define warning(s)
Definition: debug.h:83
DWORD nStores
Definition: main.c:492
#define MB_YESNO
Definition: winuser.h:820
#define IDYES
Definition: winuser.h:838
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_index_to_cert()

static PCCERT_CONTEXT cert_mgr_index_to_cert ( HWND  hwnd,
int  index 
)
static

Definition at line 821 of file main.c.

822{
825
826 item.mask = LVIF_PARAM;
827 item.iItem = index;
828 item.iSubItem = 0;
830 (LPARAM)&item))
831 cert = (PCCERT_CONTEXT)item.lParam;
832 return cert;
833}
const CERT_CONTEXT * PCCERT_CONTEXT
Definition: wincrypt.h:485

Referenced by cert_mgr_do_export(), cert_mgr_do_remove(), cert_mgr_show_cert_usages(), and show_selected_cert().

◆ cert_mgr_index_to_store()

static HCERTSTORE cert_mgr_index_to_store ( HWND  tab,
int  index 
)
static

Definition at line 548 of file main.c.

549{
551
552 item.mask = TCIF_PARAM;
554 return (HCERTSTORE)item.lParam;
555}
#define TCIF_PARAM
Definition: commctrl.h:3979
#define TCM_GETITEMW
Definition: commctrl.h:4038

Referenced by cert_mgr_current_store(), cert_mgr_dlg_proc(), and close_stores().

◆ cert_mgr_show_cert_usages()

static void cert_mgr_show_cert_usages ( HWND  hwnd,
int  index 
)
static

Definition at line 958 of file main.c.

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_sort_by_date()

static int CALLBACK cert_mgr_sort_by_date ( LPARAM  lp1,
LPARAM  lp2,
LPARAM  lp 
)
static

Definition at line 1107 of file main.c.

1108{
1111 return CompareFileTime(&cert1->pCertInfo->NotAfter,
1112 &cert2->pCertInfo->NotAfter);
1113}
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
static const BYTE cert2[]
Definition: message.c:844
static const BYTE cert1[]
Definition: message.c:828

Referenced by cert_mgr_dlg_proc(), and select_cert_dlg_proc().

◆ cert_mgr_sort_by_friendly_name()

static int CALLBACK cert_mgr_sort_by_friendly_name ( LPARAM  lp1,
LPARAM  lp2,
LPARAM  lp 
)
static

Definition at line 1115 of file main.c.

1117{
1118 return cert_mgr_sort_by_text((HWND)lp, 3, lp1, lp2);
1119}
static int cert_mgr_sort_by_text(HWND lv, int col, int index1, int index2)
Definition: main.c:1079

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_sort_by_issuer()

static int CALLBACK cert_mgr_sort_by_issuer ( LPARAM  lp1,
LPARAM  lp2,
LPARAM  lp 
)
static

Definition at line 1102 of file main.c.

1103{
1104 return cert_mgr_sort_by_text((HWND)lp, 1, lp1, lp2);
1105}

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_sort_by_subject()

static int CALLBACK cert_mgr_sort_by_subject ( LPARAM  lp1,
LPARAM  lp2,
LPARAM  lp 
)
static

Definition at line 1097 of file main.c.

1098{
1099 return cert_mgr_sort_by_text((HWND)lp, 0, lp1, lp2);
1100}

Referenced by cert_mgr_dlg_proc(), and show_store_certs().

◆ cert_mgr_sort_by_text()

static int cert_mgr_sort_by_text ( HWND  lv,
int  col,
int  index1,
int  index2 
)
static

Definition at line 1079 of file main.c.

1080{
1081 LVITEMW item;
1082 WCHAR buf1[MAX_STRING_LEN];
1083 WCHAR buf2[MAX_STRING_LEN];
1084
1085 item.cchTextMax = ARRAY_SIZE(buf1);
1086 item.mask = LVIF_TEXT;
1087 item.pszText = buf1;
1088 item.iItem = index1;
1089 item.iSubItem = col;
1091 item.pszText = buf2;
1092 item.iItem = index2;
1094 return lstrcmpW(buf1, buf2);
1095}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4243

Referenced by cert_mgr_sort_by_friendly_name(), cert_mgr_sort_by_issuer(), cert_mgr_sort_by_subject(), and select_cert_sort_by_text().

◆ cert_prop_sheet_proc()

static int CALLBACK cert_prop_sheet_proc ( HWND  hwnd,
UINT  msg,
LPARAM  lp 
)
static

Definition at line 4288 of file main.c.

4289{
4290 RECT rc;
4291
4292 TRACE("(%p, %08x, %08lx)\n", hwnd, msg, lp);
4293
4294 switch (msg)
4295 {
4296 case PSCB_INITIALIZED:
4297 /* Get cancel button's position.. */
4299 MapWindowPoints( 0, hwnd, (POINT *)&rc, 2 );
4300 /* hide the cancel button.. */
4302 /* and move the OK button to the cancel button's original position. */
4303 SetWindowPos(GetDlgItem(hwnd, IDOK), 0, rc.left, rc.top, 0, 0,
4305 break;
4306 }
4307 return 0;
4308}
#define PSCB_INITIALIZED
Definition: prsht.h:75
LONG top
Definition: windef.h:307
#define SWP_NOACTIVATE
Definition: winuser.h:1245
#define SWP_NOREDRAW
Definition: winuser.h:1249
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOSIZE
Definition: winuser.h:1248
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define SWP_NOZORDER
Definition: winuser.h:1250

Referenced by show_cert_dialog().

◆ cert_properties_general_callback()

static UINT CALLBACK cert_properties_general_callback ( HWND  hwnd,
UINT  msg,
PROPSHEETPAGEW page 
)
static

Definition at line 3703 of file main.c.

3705{
3706 HWND lv;
3707 int cItem, i;
3708 struct edit_cert_data *data;
3709
3710 switch (msg)
3711 {
3712 case PSPCB_RELEASE:
3714 cItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
3715 for (i = 0; i < cItem; i++)
3716 {
3717 LVITEMW item;
3718
3719 item.mask = LVIF_PARAM;
3720 item.iItem = i;
3721 item.iSubItem = 0;
3722 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item) && item.lParam)
3723 {
3725
3726 if (info->cbSize == sizeof(CRYPT_OID_INFO) && !info->dwGroupId)
3727 {
3728 HeapFree(GetProcessHeap(), 0, (LPSTR)info->pszOID);
3730 }
3731 }
3732 }
3734 if (data)
3735 {
3736#ifndef __REACTOS__
3737 ImageList_Destroy(data->imageList);
3738#endif
3740 }
3741 break;
3742 }
3743 return 1;
3744}
#define PSPCB_RELEASE
Definition: prsht.h:37
struct _CRYPT_OID_INFO * PCRYPT_OID_INFO

Referenced by show_edit_cert_properties_dialog().

◆ cert_properties_general_dlg_proc()

static LRESULT CALLBACK cert_properties_general_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 3602 of file main.c.

3604{
3606
3607 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
3608
3609 switch (msg)
3610 {
3611 case WM_INITDIALOG:
3612 {
3614 struct detail_data *detailData;
3615 struct edit_cert_data *editData;
3616
3617 page = (PROPSHEETPAGEW *)lp;
3618 detailData = (struct detail_data *)page->lParam;
3623 editData = HeapAlloc(GetProcessHeap(), 0,
3624 sizeof(struct edit_cert_data));
3625 if (editData)
3626 {
3627 editData->imageList = ImageList_Create(16, 16,
3628 ILC_COLOR4 | ILC_MASK, 4, 0);
3629 if (editData->imageList)
3630 {
3631 HBITMAP bmp;
3632 COLORREF backColor = RGB(255, 0, 255);
3633
3635 ImageList_AddMasked(editData->imageList, bmp, backColor);
3638 }
3639 editData->cert = detailData->pCertViewInfo->pCertContext;
3640 editData->pfPropertiesChanged = detailData->pfPropertiesChanged;
3643 }
3644 break;
3645 }
3646 case WM_NOTIFY:
3647 {
3648 NMHDR *hdr = (NMHDR *)lp;
3649 NMITEMACTIVATE *nm;
3650
3651 switch (hdr->code)
3652 {
3653 case NM_CLICK:
3654 nm = (NMITEMACTIVATE *)lp;
3655 toggle_usage(hwnd, nm->iItem);
3657 break;
3658 case PSN_APPLY:
3660 break;
3661 }
3662 break;
3663 }
3664 case WM_COMMAND:
3665 switch (HIWORD(wp))
3666 {
3667 case EN_CHANGE:
3669 if (LOWORD(wp) == IDC_DESCRIPTION)
3670 {
3671 /* Show/hide scroll bar on description depending on how much
3672 * text it has.
3673 */
3676
3678 }
3679 break;
3680 case BN_CLICKED:
3681 switch (LOWORD(wp))
3682 {
3683 case IDC_ADD_PURPOSE:
3688 break;
3694 break;
3695 }
3696 break;
3697 }
3698 break;
3699 }
3700 return 0;
3701}
#define IDD_ADD_CERT_PURPOSE
Definition: cryptuires.h:188
#define IDC_ADD_PURPOSE
Definition: cryptuires.h:239
#define MAX_FRIENDLY_NAME
Definition: main.c:3535
static LRESULT CALLBACK add_purpose_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3229
static void select_purposes(HWND hwnd, PurposeSelection selection)
Definition: main.c:3386
static void set_general_cert_properties(HWND hwnd, struct edit_cert_data *data)
Definition: main.c:3491
static void apply_general_changes(HWND hwnd)
Definition: main.c:3538
#define PSN_APPLY
Definition: prsht.h:117
BOOL * pfPropertiesChanged
Definition: main.c:2751
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
Definition: main.c:2750
HIMAGELIST imageList
Definition: main.c:3409
BOOL * pfPropertiesChanged
Definition: main.c:3408
PCCERT_CONTEXT cert
Definition: main.c:3407
Definition: module.h:576
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)

Referenced by show_edit_cert_properties_dialog().

◆ check_context_type()

static BOOL check_context_type ( DWORD  dwFlags,
DWORD  type 
)
static

Definition at line 4657 of file main.c.

4658{
4659 BOOL ret;
4660
4661 if (dwFlags &
4664 {
4665 switch (type)
4666 {
4670 break;
4674 break;
4678 break;
4679 default:
4680 /* The remaining types contain more than one type, so allow
4681 * any combination.
4682 */
4683 ret = TRUE;
4684 }
4685 }
4686 else
4687 {
4688 /* No allowed types specified, so any type is allowed */
4689 ret = TRUE;
4690 }
4691 if (!ret)
4693 return ret;
4694}
#define CRYPTUI_WIZ_IMPORT_ALLOW_CRL
Definition: cryptuiapi.h:330
#define CRYPTUI_WIZ_IMPORT_ALLOW_CTL
Definition: cryptuiapi.h:331
#define CRYPTUI_WIZ_IMPORT_ALLOW_CERT
Definition: cryptuiapi.h:329
#define E_INVALIDARG
Definition: ddrawi.h:101
#define SetLastError(x)
Definition: compat.h:752
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define CERT_QUERY_CONTENT_SERIALIZED_CERT
Definition: wincrypt.h:3533
#define CERT_QUERY_CONTENT_CRL
Definition: wincrypt.h:3531
#define CERT_QUERY_CONTENT_CTL
Definition: wincrypt.h:3530
#define CERT_QUERY_CONTENT_SERIALIZED_CTL
Definition: wincrypt.h:3534
#define CERT_QUERY_CONTENT_SERIALIZED_CRL
Definition: wincrypt.h:3535
#define CERT_QUERY_CONTENT_CERT
Definition: wincrypt.h:3529

Referenced by do_import().

◆ check_store_context_type()

static BOOL check_store_context_type ( DWORD  dwFlags,
HCERTSTORE  store 
)
static

Definition at line 4722 of file main.c.

4723{
4724 BOOL ret;
4725
4726 if (dwFlags &
4729 {
4732 PCCTL_CONTEXT ctl;
4733
4734 ret = TRUE;
4735 if ((cert = CertEnumCertificatesInStore(store, NULL)))
4736 {
4739 ret = FALSE;
4740 }
4741 if (ret && (crl = CertEnumCRLsInStore(store, NULL)))
4742 {
4745 ret = FALSE;
4746 }
4747 if (ret && (ctl = CertEnumCTLsInStore(store, NULL)))
4748 {
4749 CertFreeCTLContext(ctl);
4751 ret = FALSE;
4752 }
4753 }
4754 else
4755 ret = TRUE;
4756 if (!ret)
4758 return ret;
4759}
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:371
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:386
BOOL WINAPI CertFreeCTLContext(PCCTL_CONTEXT pCTLContext)
Definition: ctl.c:499
PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pPrev)
Definition: ctl.c:200
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev)
Definition: store.c:1101
static const BYTE crl[]
Definition: message.c:864

Referenced by import_store(), and import_validate_filename().

◆ choose_store_for_cert()

static HCERTSTORE choose_store_for_cert ( PCCERT_CONTEXT  cert)
static

Definition at line 4562 of file main.c.

4563{
4564 LPCWSTR storeName;
4565
4566 if (is_ca_cert(cert, TRUE))
4567 storeName = ca;
4568 else
4569 storeName = addressBook;
4572}
static const WCHAR ca[]
Definition: main.c:457
static const WCHAR addressBook[]
Definition: main.c:455
static BOOL is_ca_cert(PCCERT_CONTEXT cert, BOOL defaultIfNotSpecified)
Definition: main.c:4524
#define CERT_STORE_PROV_SYSTEM_W
Definition: wincrypt.h:2259
#define CERT_SYSTEM_STORE_CURRENT_USER
Definition: wincrypt.h:2324

Referenced by import_cert().

◆ close_stores()

static void close_stores ( HWND  tab)
static

Definition at line 564 of file main.c.

565{
566 int i, tabs = SendMessageW(tab, TCM_GETITEMCOUNT, 0, 0);
567
568 for (i = 0; i < tabs; i++)
570}
#define TCM_GETITEMCOUNT
Definition: commctrl.h:3973

Referenced by cert_mgr_dlg_proc().

◆ convert_usages_str_to_usage()

static CERT_ENHKEY_USAGE * convert_usages_str_to_usage ( LPSTR  usageStr)
static

Definition at line 281 of file main.c.

282{
284 sizeof(CERT_ENHKEY_USAGE));
285
286 if (usage)
287 {
288 LPSTR ptr, comma;
289
290 for (ptr = usageStr, comma = strchr(ptr, ','); usage && ptr && *ptr;
291 ptr = comma ? comma + 1 : NULL,
292 comma = ptr ? strchr(ptr, ',') : NULL)
293 {
294 if (comma)
295 *comma = 0;
297 }
298 }
299 return usage;
300}
static CERT_ENHKEY_USAGE * add_oid_to_usage(CERT_ENHKEY_USAGE *usage, LPSTR oid)
Definition: main.c:262

Referenced by create_advanced_filter().

◆ create_advanced_filter()

static CERT_ENHKEY_USAGE * create_advanced_filter ( void  )
static

Definition at line 302 of file main.c.

303{
304 CERT_ENHKEY_USAGE *advancedUsage = HeapAlloc(GetProcessHeap(),
306
307 if (advancedUsage)
308 {
310
312 {
313 LPSTR disabledUsagesStr;
314
315 if ((disabledUsagesStr = get_cert_mgr_usages()))
316 {
317 CERT_ENHKEY_USAGE *disabledUsages =
318 convert_usages_str_to_usage(disabledUsagesStr);
319
320 if (disabledUsages)
321 {
323
324 for (ptr = usages; advancedUsage && *ptr; ptr++)
325 {
326 DWORD i;
327 BOOL disabled = FALSE;
328
329 for (i = 0; !disabled &&
330 i < disabledUsages->cUsageIdentifier; i++)
331 if (!strcmp(disabledUsages->rgpszUsageIdentifier[i],
332 (*ptr)->pszOID))
333 disabled = TRUE;
334 if (!disabled)
335 advancedUsage = add_oid_to_usage(advancedUsage,
336 (LPSTR)(*ptr)->pszOID);
337 }
338 /* The individual strings are pointers to disabledUsagesStr,
339 * so they're freed when it is.
340 */
342 disabledUsages->rgpszUsageIdentifier);
343 HeapFree(GetProcessHeap(), 0, disabledUsages);
344 }
345 HeapFree(GetProcessHeap(), 0, disabledUsagesStr);
346 }
348 }
349 }
350 return advancedUsage;
351}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
static CERT_ENHKEY_USAGE * convert_usages_str_to_usage(LPSTR usageStr)
Definition: main.c:281
DWORD cUsageIdentifier
Definition: wincrypt.h:719
LPSTR * rgpszUsageIdentifier
Definition: wincrypt.h:720

Referenced by show_store_certs().

◆ create_cert_details_list()

static void create_cert_details_list ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 3145 of file main.c.

3146{
3150}
static void create_show_list(HWND hwnd, struct detail_data *data)
Definition: main.c:3099
static void set_fields_selection(HWND hwnd, struct detail_data *data, int sel)
Definition: main.c:3134
static void create_listview_columns(HWND hwnd)
Definition: main.c:3116

Referenced by detail_dlg_proc().

◆ create_listview_columns()

static void create_listview_columns ( HWND  hwnd)
static

Definition at line 3116 of file main.c.

3117{
3119 RECT rc;
3122
3124 GetWindowRect(lv, &rc);
3126 column.mask = LVCF_WIDTH | LVCF_TEXT;
3127 column.cx = (rc.right - rc.left) / 2 - 2;
3128 column.pszText = buf;
3132}
#define IDS_FIELD
Definition: cryptuires.h:43
#define IDC_DETAIL_LIST
Definition: cryptuires.h:220
#define IDS_VALUE
Definition: resource.h:26

Referenced by create_cert_details_list().

◆ create_show_list()

static void create_show_list ( HWND  hwnd,
struct detail_data data 
)
static

Definition at line 3099 of file main.c.

3100{
3103 int i;
3104
3105 for (i = 0; i < ARRAY_SIZE(listItems); i++)
3106 {
3107 int index;
3108
3112 }
3114}
#define IDC_DETAIL_SELECT
Definition: cryptuires.h:219
static const struct selection_list_item listItems[]
Definition: main.c:3091
#define CB_SETITEMDATA
Definition: winuser.h:1969
#define CB_INSERTSTRING
Definition: winuser.h:1960

Referenced by create_cert_details_list().

◆ crypt_format_extension()

static WCHAR * crypt_format_extension ( const CERT_EXTENSION ext,
DWORD  formatStrType 
)
static

Definition at line 2860 of file main.c.

2861{
2862 WCHAR *str = NULL;
2863 DWORD size;
2864
2865 if (CryptFormatObject(X509_ASN_ENCODING, 0, formatStrType, NULL,
2866 ext->pszObjId, ext->Value.pbData, ext->Value.cbData, NULL, &size))
2867 {
2869 CryptFormatObject(X509_ASN_ENCODING, 0, formatStrType, NULL,
2870 ext->pszObjId, ext->Value.pbData, ext->Value.cbData, str, &size);
2871 }
2872 return str;
2873}
BOOL WINAPI CryptFormatObject(DWORD dwCertEncodingType, DWORD dwFormatType, DWORD dwFormatStrType, void *pFormatStruct, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, void *pbFormat, DWORD *pcbFormat)
Definition: object.c:2549
GLsizeiptr size
Definition: glext.h:5919
#define X509_ASN_ENCODING
Definition: wincrypt.h:2297

Referenced by add_cert_extension_detail(), field_format_detailed_extension(), and format_enhanced_key_usage_value().

◆ CryptUIDlgCertMgr()

BOOL WINAPI CryptUIDlgCertMgr ( PCCRYPTUI_CERT_MGR_STRUCT  pCryptUICertMgr)

Definition at line 1313 of file main.c.

1314{
1315 TRACE("(%p)\n", pCryptUICertMgr);
1316
1317 if (pCryptUICertMgr->dwSize != sizeof(CRYPTUI_CERT_MGR_STRUCT))
1318 {
1319 WARN("unexpected size %d\n", pCryptUICertMgr->dwSize);
1321 return FALSE;
1322 }
1324 pCryptUICertMgr->hwndParent, cert_mgr_dlg_proc, (LPARAM)pCryptUICertMgr);
1325 return TRUE;
1326}
#define WARN(fmt,...)
Definition: precomp.h:61
#define IDD_CERT_MGR
Definition: cryptuires.h:194
static LRESULT CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:1121

Referenced by display_cert_manager(), and OpenPersonalTrustDBDialog().

◆ CryptUIDlgSelectCertificateA()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTA  pcsc)

Definition at line 7539 of file main.c.

7540{
7543 LPWSTR title = NULL, display_str = NULL;
7544 PROPSHEETPAGEW *pages = NULL;
7545
7546 TRACE("%p\n", pcsc);
7547
7548 if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
7549 {
7550 WARN("unexpected size %d\n", pcsc->dwSize);
7552 return NULL;
7553 }
7554 memcpy(&selCertInfo, pcsc, pcsc->dwSize);
7555 if (pcsc->szTitle)
7556 {
7557 if (!(title = strdupAtoW( pcsc->szTitle ))) goto error;
7558 selCertInfo.szTitle = title;
7559 }
7560 if (pcsc->szDisplayString)
7561 {
7562 if (!(display_str = strdupAtoW( pcsc->szDisplayString ))) goto error;
7563 selCertInfo.szDisplayString = display_str;
7564 }
7565 if (pcsc->cPropSheetPages)
7566 {
7568 if (!pages)
7569 goto error;
7570 selCertInfo.rgPropSheetPages = pages;
7571 }
7572 cert = CryptUIDlgSelectCertificateW(&selCertInfo);
7573error:
7575 HeapFree(GetProcessHeap(), 0, display_str);
7576 if (pcsc->cPropSheetPages)
7578 return cert;
7579}
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc)
Definition: main.c:7440
static void free_prop_sheet_pages(PROPSHEETPAGEW *pages, DWORD num)
Definition: main.c:7461
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:67
static PROPSHEETPAGEW * prop_sheet_pages_AtoW(LPCPROPSHEETPAGEA pages, DWORD num)
Definition: main.c:7482
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
LPCPROPSHEETPAGEA rgPropSheetPages
Definition: cryptuiapi.h:363
LPCPROPSHEETPAGEW rgPropSheetPages
Definition: cryptuiapi.h:385

◆ CryptUIDlgSelectCertificateFromStore()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore ( HCERTSTORE  hCertStore,
HWND  hwnd,
LPCWSTR  pwszTitle,
LPCWSTR  pwszDisplayString,
DWORD  dwDontUseColumn,
DWORD  dwFlags,
void pvReserved 
)

Definition at line 7581 of file main.c.

7584{
7586
7587 TRACE("%p %p %s %s %x %x %p\n", hCertStore, hwnd, debugstr_w(pwszTitle), debugstr_w(pwszDisplayString), dwDontUseColumn, dwFlags, pvReserved);
7588
7589 memset(&sc, 0, sizeof(sc));
7590
7591 sc.dwSize = sizeof(sc);
7592 sc.hwndParent = hwnd;
7593 sc.dwFlags = dwFlags;
7594 sc.szTitle = pwszTitle;
7595 sc.szDisplayString = pwszDisplayString;
7596 sc.dwDontUseColumn = dwDontUseColumn;
7597 sc.cDisplayStores = 1;
7598 sc.rghDisplayStores = &hCertStore;
7599 return CryptUIDlgSelectCertificateW(&sc);
7600}
#define debugstr_w
Definition: kernel32.h:32
static LPCSTR DWORD void * pvReserved
Definition: str.c:196
#define memset(x, y, z)
Definition: compat.h:39

◆ CryptUIDlgSelectCertificateW()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTW  pcsc)

Definition at line 7440 of file main.c.

7441{
7442 struct SelectCertParam param;
7443
7444 TRACE("%p\n", pcsc);
7445
7446 if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
7447 {
7448 WARN("unexpected size %d\n", pcsc->dwSize);
7450 return NULL;
7451 }
7453 FIXME("ignoring CRYPTUI_SELECTCERT_MULTISELECT\n");
7454 param.pcsc = pcsc;
7455 param.cert = NULL;
7458 return param.cert;
7459}
#define CRYPTUI_SELECTCERT_MULTISELECT
Definition: cryptuiapi.h:345
#define IDD_SELECT_CERT
Definition: cryptuires.h:202
static LRESULT CALLBACK select_cert_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:7288
PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc
Definition: main.c:7284

Referenced by CryptUIDlgSelectCertificateA(), and CryptUIDlgSelectCertificateFromStore().

◆ CryptUIDlgSelectStoreA()

HCERTSTORE WINAPI CryptUIDlgSelectStoreA ( PCRYPTUI_SELECTSTORE_INFO_A  info)

Definition at line 1638 of file main.c.

1639{
1642 int len;
1643
1644 TRACE("(%p)\n", info);
1645
1646 if (info->dwSize != sizeof(CRYPTUI_SELECTSTORE_INFO_A))
1647 {
1648 WARN("unexpected size %d\n", info->dwSize);
1650 return NULL;
1651 }
1652 memcpy(&infoW, info, sizeof(*info));
1653 if (info->pszTitle)
1654 {
1655 len = MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, NULL, 0);
1656 infoW.pwszTitle = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1657 MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, infoW.pwszTitle,
1658 len);
1659 }
1660 if (info->pszText)
1661 {
1662 len = MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, NULL, 0);
1663 infoW.pwszText = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1664 MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, infoW.pwszText, len);
1665 }
1667 HeapFree(GetProcessHeap(), 0, infoW.pwszText);
1668 HeapFree(GetProcessHeap(), 0, infoW.pwszTitle);
1669 return ret;
1670}
HCERTSTORE WINAPI CryptUIDlgSelectStoreW(PCRYPTUI_SELECTSTORE_INFO_W info)
Definition: main.c:1618
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
static const SecPkgInfoW infoW
Definition: kerberos.c:293

◆ CryptUIDlgSelectStoreW()

HCERTSTORE WINAPI CryptUIDlgSelectStoreW ( PCRYPTUI_SELECTSTORE_INFO_W  info)

Definition at line 1618 of file main.c.

1619{
1620 struct SelectStoreInfo selectInfo = { info, NULL };
1621
1622 TRACE("(%p)\n", info);
1623
1624 if (info->dwSize != sizeof(CRYPTUI_SELECTSTORE_INFO_W))
1625 {
1626 WARN("unexpected size %d\n", info->dwSize);
1628 return NULL;
1629 }
1631 select_store_dlg_proc, (LPARAM)&selectInfo);
1632 return selectInfo.store;
1633}
#define IDD_SELECT_STORE
Definition: cryptuires.h:189
static LRESULT CALLBACK select_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:1538
PCRYPTUI_SELECTSTORE_INFO_W info
Definition: main.c:1534
HCERTSTORE store
Definition: main.c:1535

Referenced by CryptUIDlgSelectStoreA(), and import_store_dlg_proc().

◆ CryptUIDlgViewCertificateA()

BOOL WINAPI CryptUIDlgViewCertificateA ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTA  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 1675 of file main.c.

1677{
1679 LPWSTR title = NULL;
1680 BOOL ret;
1681
1682 TRACE("(%p, %p)\n", pCertViewInfo, pfPropertiesChanged);
1683
1684 memcpy(&viewInfo, pCertViewInfo, sizeof(viewInfo));
1685 if (pCertViewInfo->szTitle)
1686 {
1687 int len = MultiByteToWideChar(CP_ACP, 0, pCertViewInfo->szTitle, -1,
1688 NULL, 0);
1689
1690 title = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1691 if (title)
1692 {
1693 MultiByteToWideChar(CP_ACP, 0, pCertViewInfo->szTitle, -1, title,
1694 len);
1695 viewInfo.szTitle = title;
1696 }
1697 else
1698 {
1699 ret = FALSE;
1700 goto error;
1701 }
1702 }
1703 if (pCertViewInfo->cPropSheetPages)
1704 {
1705 FIXME("ignoring additional prop sheet pages\n");
1706 viewInfo.cPropSheetPages = 0;
1707 }
1708 ret = CryptUIDlgViewCertificateW(&viewInfo, pfPropertiesChanged);
1710error:
1711 return ret;
1712}
BOOL WINAPI CryptUIDlgViewCertificateW(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged)
Definition: main.c:4415

◆ CryptUIDlgViewCertificateW()

BOOL WINAPI CryptUIDlgViewCertificateW ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 4415 of file main.c.

4417{
4418 static GUID generic_cert_verify = WINTRUST_ACTION_GENERIC_CERT_VERIFY;
4420 WINTRUST_DATA wvt;
4422 BOOL ret = FALSE;
4423 CRYPT_PROVIDER_SGNR *signer;
4424 CRYPT_PROVIDER_CERT *provCert = NULL;
4425
4426 TRACE("(%p, %p)\n", pCertViewInfo, pfPropertiesChanged);
4427
4428 if (pCertViewInfo->dwSize != sizeof(CRYPTUI_VIEWCERTIFICATE_STRUCTW))
4429 {
4431 return FALSE;
4432 }
4433 /* Make a local copy in case we have to call WinVerifyTrust ourselves */
4434 memcpy(&viewInfo, pCertViewInfo, sizeof(viewInfo));
4435 if (!pCertViewInfo->u.hWVTStateData)
4436 {
4437 memset(&wvt, 0, sizeof(wvt));
4438 wvt.cbStruct = sizeof(wvt);
4439 wvt.dwUIChoice = WTD_UI_NONE;
4440 if (viewInfo.dwFlags &
4448 memset(&cert, 0, sizeof(cert));
4449 cert.cbStruct = sizeof(cert);
4450 cert.psCertContext = (CERT_CONTEXT *)viewInfo.pCertContext;
4451 cert.chStores = viewInfo.cStores;
4452 cert.pahStores = viewInfo.rghStores;
4453 wvt.u.pCert = &cert;
4455 WinVerifyTrust(NULL, &generic_cert_verify, &wvt);
4456 viewInfo.u.pCryptProviderData =
4459 (CRYPT_PROVIDER_DATA *)viewInfo.u.pCryptProviderData, 0, FALSE, 0);
4460 provCert = WTHelperGetProvCertFromChain(signer, 0);
4461 ret = TRUE;
4462 }
4463 else
4464 {
4465 viewInfo.u.pCryptProviderData =
4469 viewInfo.idxSigner, viewInfo.fCounterSigner,
4470 viewInfo.idxCounterSigner);
4471 provCert = WTHelperGetProvCertFromChain(signer, viewInfo.idxCert);
4472 ret = TRUE;
4473 }
4474 if (ret)
4475 {
4476 ret = show_cert_dialog(&viewInfo, provCert, pfPropertiesChanged);
4477 if (!pCertViewInfo->u.hWVTStateData)
4478 {
4480 WinVerifyTrust(NULL, &generic_cert_verify, &wvt);
4481 }
4482 }
4483 return ret;
4484}
#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
Definition: cryptuiapi.h:89
#define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT
Definition: cryptuiapi.h:87
#define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN
Definition: cryptuiapi.h:88
static BOOL show_cert_dialog(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, CRYPT_PROVIDER_CERT *provCert, BOOL *pfPropertiesChanged)
Definition: main.c:4310
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define WINTRUST_ACTION_GENERIC_CERT_VERIFY
Definition: softpub.h:24
struct WINTRUST_CERT_INFO_ * pCert
Definition: wintrust.h:111
DWORD dwUnionChoice
Definition: wintrust.h:104
DWORD dwStateAction
Definition: wintrust.h:114
HANDLE hWVTStateData
Definition: wintrust.h:115
DWORD fdwRevocationChecks
Definition: wintrust.h:103
DWORD cbStruct
Definition: wintrust.h:99
DWORD dwUIChoice
Definition: wintrust.h:102
CRYPT_PROVIDER_DATA const * pCryptProviderData
Definition: cryptuiapi.h:129
#define WTD_REVOCATION_CHECK_CHAIN
Definition: wintrust.h:134
#define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
Definition: wintrust.h:135
#define WTD_STATEACTION_CLOSE
Definition: wintrust.h:124
#define WTD_STATEACTION_VERIFY
Definition: wintrust.h:123
#define WTD_UI_NONE
Definition: wintrust.h:84
#define WTD_CHOICE_CERT
Definition: wintrust.h:95
#define WTD_REVOCATION_CHECK_END_CERT
Definition: wintrust.h:133
CRYPT_PROVIDER_CERT *WINAPI WTHelperGetProvCertFromChain(CRYPT_PROVIDER_SGNR *pSgnr, DWORD idxCert)
CRYPT_PROVIDER_SGNR *WINAPI WTHelperGetProvSignerFromChain(CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner)
CRYPT_PROVIDER_DATA *WINAPI WTHelperProvDataFromStateData(HANDLE hStateData)
LONG WINAPI WinVerifyTrust(HWND hwnd, GUID *ActionID, LPVOID ActionData)

Referenced by CertViewPropertiesW(), CryptExtOpenCERW(), CryptUIDlgViewCertificateA(), CryptUIDlgViewContext(), select_cert_view(), show_dialog_for_selected_cert(), show_selected_cert(), and ShowX509EncodedCertificate().

◆ CryptUIDlgViewContext()

BOOL WINAPI CryptUIDlgViewContext ( DWORD  dwContextType,
LPVOID  pvContext,
HWND  hwnd,
LPCWSTR  pwszTitle,
DWORD  dwFlags,
LPVOID  pvReserved 
)

Definition at line 4489 of file main.c.

4491{
4492 BOOL ret;
4493
4494 TRACE("(%d, %p, %p, %s, %08x, %p)\n", dwContextType, pvContext, hwnd,
4495 debugstr_w(pwszTitle), dwFlags, pvReserved);
4496
4497 switch (dwContextType)
4498 {
4500 {
4502
4503 memset(&viewInfo, 0, sizeof(viewInfo));
4504 viewInfo.dwSize = sizeof(viewInfo);
4505 viewInfo.hwndParent = hwnd;
4506 viewInfo.szTitle = pwszTitle;
4507 viewInfo.pCertContext = pvContext;
4508 ret = CryptUIDlgViewCertificateW(&viewInfo, NULL);
4509 break;
4510 }
4511 default:
4512 FIXME("unimplemented for context type %d\n", dwContextType);
4514 ret = FALSE;
4515 }
4516 return ret;
4517}
#define CERT_STORE_CERTIFICATE_CONTEXT
Definition: wincrypt.h:2974

◆ CryptUIDlgViewSignerInfoA()

BOOL WINAPI CryptUIDlgViewSignerInfoA ( CRYPTUI_VIEWSIGNERINFO_STRUCTA pcvsi)

Definition at line 7018 of file main.c.

7019{
7020 FIXME("%p: stub\n", pcvsi);
7021 return FALSE;
7022}

◆ CryptUIWizDigitalSign()

BOOL WINAPI CryptUIWizDigitalSign ( DWORD  flags,
HWND  parent,
LPCWSTR  title,
PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO  info,
PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT context 
)

Definition at line 7602 of file main.c.

7604{
7605 FIXME("%d %p %s %p %p: stub\n", flags, parent, debugstr_w(title), info, context);
7606 return FALSE;
7607}
Definition: http.c:7252

◆ CryptUIWizExport()

BOOL WINAPI CryptUIWizExport ( DWORD  dwFlags,
HWND  hwndParent,
LPCWSTR  pwszWizardTitle,
PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo,
void pvoid 
)

Definition at line 6990 of file main.c.

6992{
6993 BOOL ret;
6994
6995 TRACE("(%08x, %p, %s, %p, %p)\n", dwFlags, hwndParent,
6996 debugstr_w(pwszWizardTitle), pExportInfo, pvoid);
6997
6998 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
7000 pvoid);
7001 else
7002 {
7005 CREATE_ALWAYS, 0, NULL);
7006
7008 {
7009 ret = do_export(file, pExportInfo, pvoid, NULL, FALSE);
7011 }
7012 else
7013 ret = FALSE;
7014 }
7015 return ret;
7016}
static HWND hwndParent
Definition: cryptui.c:300
static HWND LPCWSTR pwszWizardTitle
Definition: cryptui.c:301
#define CRYPTUI_WIZ_NO_UI
Definition: cryptuiapi.h:246
static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, const void *pvoid)
Definition: main.c:6833
static BOOL do_export(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO pContextInfo, PCRYPT_KEY_PROV_INFO keyProvInfo, BOOL deleteKeys)
Definition: main.c:6694
#define CloseHandle
Definition: compat.h:739
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileW
Definition: compat.h:741
#define FILE_SHARE_READ
Definition: compat.h:136
#define CREATE_ALWAYS
Definition: disk.h:72
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define GENERIC_WRITE
Definition: nt_native.h:90
Definition: fci.c:127

Referenced by cert_mgr_do_export(), and detail_dlg_proc().

◆ CryptUIWizImport()

BOOL WINAPI CryptUIWizImport ( DWORD  dwFlags,
HWND  hwndParent,
LPCWSTR  pwszWizardTitle,
PCCRYPTUI_WIZ_IMPORT_SRC_INFO  pImportSrc,
HCERTSTORE  hDestCertStore 
)

Definition at line 5559 of file main.c.

5561{
5562 BOOL ret;
5563
5564 TRACE("(0x%08x, %p, %s, %p, %p)\n", dwFlags, hwndParent, debugstr_w(pwszWizardTitle),
5566
5567 if (pImportSrc &&
5568 pImportSrc->dwSize != sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO))
5569 {
5571 return FALSE;
5572 }
5573
5574 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
5577 else if (pImportSrc)
5580 else
5581 {
5582 /* Can't have no UI without specifying source */
5584 ret = FALSE;
5585 }
5586
5587 return ret;
5588}
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO HCERTSTORE hDestCertStore
Definition: cryptui.c:302
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc
Definition: cryptui.c:301
static BOOL do_import(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5329
static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5446

Referenced by cert_mgr_dlg_proc(), and general_dlg_proc().

◆ detail_callback()

static UINT CALLBACK detail_callback ( HWND  hwnd,
UINT  msg,
PROPSHEETPAGEW page 
)
static

Definition at line 3905 of file main.c.

3907{
3908 struct detail_data *data;
3909
3910 switch (msg)
3911 {
3912 case PSPCB_RELEASE:
3913 data = (struct detail_data *)page->lParam;
3916 break;
3917 }
3918 return 0;
3919}
static void free_detail_fields(struct detail_data *data)
Definition: main.c:3774

Referenced by init_detail_page().

◆ detail_dlg_proc()

static LRESULT CALLBACK detail_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 3798 of file main.c.

3800{
3802 struct detail_data *data;
3803
3804 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
3805
3806 switch (msg)
3807 {
3808 case WM_INITDIALOG:
3809 page = (PROPSHEETPAGEW *)lp;
3810 data = (struct detail_data *)page->lParam;
3812 if (!(data->pCertViewInfo->dwFlags & CRYPTUI_ENABLE_EDITPROPERTIES))
3814 if (data->pCertViewInfo->dwFlags & CRYPTUI_DISABLE_EXPORT)
3816 break;
3817 case WM_NOTIFY:
3818 {
3819 NMITEMACTIVATE *nm;
3821
3822 nm = (NMITEMACTIVATE*)lp;
3823 if (nm->hdr.hwndFrom == list && nm->uNewState & LVN_ITEMACTIVATE
3824 && nm->hdr.code == LVN_ITEMCHANGED)
3825 {
3826 data = (struct detail_data *)nm->lParam;
3827 if (nm->iItem >= 0 && data && nm->iItem < data->cFields)
3828 {
3830 HWND valueCtl = GetDlgItem(hwnd, IDC_DETAIL_VALUE);
3831
3832 if (data->fields[nm->iItem].create)
3833 val = data->fields[nm->iItem].create(
3834 data->pCertViewInfo->pCertContext,
3835 data->fields[nm->iItem].param);
3836 else
3837 {
3838 LVITEMW item;
3839 int res;
3840
3841 item.cchTextMax = ARRAY_SIZE(buf);
3842 item.mask = LVIF_TEXT;
3843 item.pszText = buf;
3844 item.iItem = nm->iItem;
3845 item.iSubItem = 1;
3847 if (res)
3848 val = buf;
3849 }
3850 /* Select all the text in the control, the next update will
3851 * replace it
3852 */
3853 SendMessageW(valueCtl, EM_SETSEL, 0, -1);
3855 val ? lstrlenW(val) : 0);
3856 if (val != buf)
3858 }
3859 }
3860 break;
3861 }
3862 case WM_COMMAND:
3863 switch (wp)
3864 {
3865 case IDC_EXPORT:
3866 {
3869
3870 data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, 0, 0);
3871 info.dwSize = sizeof(info);
3872 info.pwszExportFileName = NULL;
3873 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
3874 info.u.pCertContext = data->pCertViewInfo->pCertContext;
3875 info.cStores = 0;
3877 break;
3878 }
3879 case IDC_EDITPROPERTIES:
3880 {
3882 int curSel;
3883
3884 curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0);
3885 /* Actually, any index will do, since they all store the same
3886 * data value
3887 */
3889 curSel, 0);
3891 break;
3892 }
3893 case ((CBN_SELCHANGE << 16) | IDC_DETAIL_SELECT):
3895 break;
3896 }
3897 break;
3898 case WM_REFRESH_VIEW:
3900 break;
3901 }
3902 return 0;
3903}
Definition: list.h:37
#define CRYPTUI_DISABLE_EXPORT
Definition: cryptuiapi.h:86
#define CRYPTUI_ENABLE_EDITPROPERTIES
Definition: cryptuiapi.h:76
#define IDC_EXPORT
Definition: cryptuires.h:223
#define IDC_EDITPROPERTIES
Definition: cryptuires.h:222
#define IDC_DETAIL_VALUE
Definition: cryptuires.h:221
static void create_cert_details_list(HWND hwnd, struct detail_data *data)
Definition: main.c:3145
#define WM_REFRESH_VIEW
Definition: main.c:3526
static void show_edit_cert_properties_dialog(HWND parent, struct detail_data *data)
Definition: main.c:3746
static void refresh_details_view(HWND hwnd)
Definition: main.c:3785
GLuint res
Definition: glext.h:9613
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3152
UINT code
Definition: winuser.h:3162
HWND hwndFrom
Definition: winuser.h:3160
#define CB_GETITEMDATA
Definition: winuser.h:1953
#define EM_SETSEL
Definition: winuser.h:2021

Referenced by init_detail_page().

◆ display_app_usages()

static void display_app_usages ( HWND  text,
PCCERT_CONTEXT  cert,
BOOL anyUsageAdded 
)
static

Definition at line 2064 of file main.c.

2066{
2067 static char any_app_policy[] = szOID_ANY_APPLICATION_POLICY;
2068 WCHAR nl = '\n';
2069 CHARFORMATW charFmt;
2070 PCERT_EXTENSION policyExt;
2071 if (!*anyUsageAdded)
2072 {
2073 PARAFORMAT2 parFmt;
2074
2075 parFmt.cbSize = sizeof(parFmt);
2076 parFmt.dwMask = PFM_STARTINDENT;
2077 parFmt.dxStartIndent = MY_INDENT;
2079 IDS_CERT_INFO_PURPOSES, &parFmt);
2081 *anyUsageAdded = TRUE;
2082 }
2083 memset(&charFmt, 0, sizeof(charFmt));
2084 charFmt.cbSize = sizeof(charFmt);
2085 charFmt.dwMask = CFM_BOLD;
2086 charFmt.dwEffects = 0;
2089 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension)))
2090 {
2091 CERT_POLICIES_INFO *policies;
2092 DWORD size;
2093
2095 policyExt->Value.pbData, policyExt->Value.cbData,
2096 CRYPT_DECODE_ALLOC_FLAG, NULL, &policies, &size))
2097 {
2098 DWORD i;
2099
2100 for (i = 0; i < policies->cPolicyInfo; i++)
2101 {
2102 DWORD j;
2103
2104 for (j = 0; j < policies->rgPolicyInfo[i].cPolicyQualifier; j++)
2106 policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2107 pszPolicyQualifierId);
2108 }
2109 LocalFree(policies);
2110 }
2111 }
2112 else
2113 add_oid_text_to_control(text, any_app_policy);
2114}
BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
Definition: decode.c:6286
#define IDS_CERT_INFO_PURPOSES
Definition: cryptuires.h:32
PCERT_EXTENSION WINAPI CertFindExtension(LPCSTR pszObjId, DWORD cExtensions, CERT_EXTENSION rgExtensions[])
Definition: cert.c:2028
static void add_string_resource_with_paraformat_to_control(HWND hwnd, int id, const PARAFORMAT2 *fmt)
Definition: main.c:1768
static void add_local_oid_text_to_control(HWND text, LPCSTR oid)
Definition: main.c:1993
static void add_oid_text_to_control(HWND hwnd, char *oid)
Definition: main.c:1893
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define SCF_SELECTION
Definition: richedit.h:235
#define EM_SETCHARFORMAT
Definition: richedit.h:101
#define CFM_BOLD
Definition: richedit.h:332
CRYPT_OBJID_BLOB Value
Definition: wincrypt.h:232
CERT_POLICY_INFO * rgPolicyInfo
Definition: wincrypt.h:400
CERT_POLICY_QUALIFIER_INFO * rgPolicyQualifier
Definition: wincrypt.h:395
DWORD cPolicyQualifier
Definition: wincrypt.h:394
BYTE * pbData
Definition: wincrypt.h:103
UINT cbSize
Definition: richedit.h:268
DWORD dwMask
Definition: richedit.h:269
DWORD dwEffects
Definition: richedit.h:270
#define CRYPT_DECODE_ALLOC_FLAG
Definition: wincrypt.h:3454
#define X509_CERT_POLICIES
Definition: wincrypt.h:3381
#define szOID_ANY_APPLICATION_POLICY
Definition: wincrypt.h:3247
#define szOID_APPLICATION_CERT_POLICIES
Definition: wincrypt.h:3275

Referenced by set_policy_text().

◆ display_cert_usages()

static BOOL display_cert_usages ( HWND  text,
PCCERT_CONTEXT  cert,
BOOL anyUsageAdded 
)
static

Definition at line 2116 of file main.c.

2118{
2119 WCHAR nl = '\n';
2120 DWORD size;
2121 BOOL badUsages = FALSE;
2122
2124 {
2125 CHARFORMATW charFmt;
2126 static char any_cert_policy[] = szOID_ANY_CERT_POLICY;
2128
2129 if (usage)
2130 {
2132 {
2133 DWORD i;
2134
2135 if (!*anyUsageAdded)
2136 {
2137 PARAFORMAT2 parFmt;
2138
2139 parFmt.cbSize = sizeof(parFmt);
2140 parFmt.dwMask = PFM_STARTINDENT;
2141 parFmt.dxStartIndent = MY_INDENT;
2143 IDS_CERT_INFO_PURPOSES, &parFmt);
2145 *anyUsageAdded = TRUE;
2146 }
2147 memset(&charFmt, 0, sizeof(charFmt));
2148 charFmt.cbSize = sizeof(charFmt);
2149 charFmt.dwMask = CFM_BOLD;
2150 charFmt.dwEffects = 0;
2152 (LPARAM)&charFmt);
2153 if (!usage->cUsageIdentifier)
2154 add_oid_text_to_control(text, any_cert_policy);
2155 else
2156 for (i = 0; i < usage->cUsageIdentifier; i++)
2158 usage->rgpszUsageIdentifier[i]);
2159 }
2160 else
2161 badUsages = TRUE;
2163 }
2164 else
2165 badUsages = TRUE;
2166 }
2167 else
2168 badUsages = TRUE;
2169 return badUsages;
2170}
BOOL WINAPI CertGetEnhancedKeyUsage(PCCERT_CONTEXT pCertContext, DWORD dwFlags, PCERT_ENHKEY_USAGE pUsage, DWORD *pcbUsage)
Definition: cert.c:2847
#define szOID_ANY_CERT_POLICY
Definition: wincrypt.h:3198

Referenced by set_policy_text().

◆ DllMain()

BOOL WINAPI DllMain ( HINSTANCE  hinstDLL,
DWORD  fdwReason,
LPVOID  lpvReserved 
)

Definition at line 49 of file main.c.

50{
51 TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
52
53 switch (fdwReason)
54 {
55#ifndef __REACTOS__
56 case DLL_WINE_PREATTACH:
57 return FALSE; /* prefer native version */
58#endif
60 hInstance = hinstDLL;
62 break;
63 }
64 return TRUE;
65}
static DWORD const fdwReason
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
static IN DWORD IN LPVOID lpvReserved

◆ do_export()

static BOOL do_export ( HANDLE  file,
PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo,
PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO  pContextInfo,
PCRYPT_KEY_PROV_INFO  keyProvInfo,
BOOL  deleteKeys 
)
static

Definition at line 6694 of file main.c.

6697{
6698 BOOL ret;
6699
6700 if (pContextInfo->dwSize != sizeof(CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO))
6701 {
6703 return FALSE;
6704 }
6705 switch (pExportInfo->dwSubjectChoice)
6706 {
6708 ret = save_der(file,
6709 pExportInfo->u.pCRLContext->pbCrlEncoded,
6710 pExportInfo->u.pCRLContext->cbCrlEncoded);
6711 break;
6713 ret = save_der(file,
6714 pExportInfo->u.pCTLContext->pbCtlEncoded,
6715 pExportInfo->u.pCTLContext->cbCtlEncoded);
6716 break;
6718 ret = save_serialized_store(file, pExportInfo->u.hCertStore);
6719 break;
6721 ret = save_store_as_cms(file, pExportInfo->u.hCertStore);
6722 break;
6723 default:
6724 switch (pContextInfo->dwExportFormat)
6725 {
6727 ret = save_der(file, pExportInfo->u.pCertContext->pbCertEncoded,
6728 pExportInfo->u.pCertContext->cbCertEncoded);
6729 break;
6732 pExportInfo->u.pCertContext->pbCertEncoded,
6733 pExportInfo->u.pCertContext->cbCertEncoded);
6734 break;
6736 ret = save_cert_as_cms(file, pExportInfo,
6737 pContextInfo->fExportChain);
6738 break;
6740 ret = save_pfx(file, pExportInfo, pContextInfo, keyProvInfo,
6741 deleteKeys);
6742 break;
6743 default:
6745 ret = FALSE;
6746 }
6747 }
6748 return ret;
6749}
#define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT
Definition: cryptuiapi.h:260
#define CRYPTUI_WIZ_EXPORT_CERT_STORE
Definition: cryptuiapi.h:261
#define CRYPTUI_WIZ_EXPORT_FORMAT_PFX
Definition: cryptuiapi.h:284
#define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64
Definition: cryptuiapi.h:286
#define CRYPTUI_WIZ_EXPORT_FORMAT_DER
Definition: cryptuiapi.h:283
#define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT
Definition: cryptuiapi.h:259
#define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7
Definition: cryptuiapi.h:285
#define E_FAIL
Definition: ddrawi.h:102
static BOOL save_cert_as_cms(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, BOOL includeChain)
Definition: main.c:6489
static BOOL save_serialized_store(HANDLE file, HCERTSTORE store)
Definition: main.c:6557
static BOOL save_pfx(HANDLE file, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO pContextInfo, PCRYPT_KEY_PROV_INFO keyProvInfo, BOOL deleteKeys)
Definition: main.c:6563
static BOOL save_der(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6451
static BOOL save_base64(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6458
static BOOL save_store_as_cms(HANDLE file, HCERTSTORE store)
Definition: main.c:6483
BYTE * pbCertEncoded
Definition: wincrypt.h:480
DWORD cbCertEncoded
Definition: wincrypt.h:481
DWORD cbCrlEncoded
Definition: wincrypt.h:621
BYTE * pbCrlEncoded
Definition: wincrypt.h:620
PCCTL_CONTEXT pCTLContext
Definition: cryptuiapi.h:273
PCCERT_CONTEXT pCertContext
Definition: cryptuiapi.h:272
PCCRL_CONTEXT pCRLContext
Definition: cryptuiapi.h:274
DWORD cbCtlEncoded
Definition: wincrypt.h:746
BYTE * pbCtlEncoded
Definition: wincrypt.h:745

Referenced by CryptUIWizExport(), and export_finish_dlg_proc().

◆ do_import()

static BOOL do_import ( DWORD  dwFlags,
HWND  hwndParent,
LPCWSTR  pwszWizardTitle,
PCCRYPTUI_WIZ_IMPORT_SRC_INFO  pImportSrc,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 5329 of file main.c.

5331{
5332 BOOL ret;
5333
5334 switch (pImportSrc->dwSubjectChoice)
5335 {
5338 pImportSrc->u.pwszFileName, hDestCertStore);
5339 break;
5342 ret = import_cert(pImportSrc->u.pCertContext, hDestCertStore);
5343 else
5345 break;
5348 ret = import_crl(pImportSrc->u.pCRLContext, hDestCertStore);
5349 else
5351 break;
5354 ret = import_ctl(pImportSrc->u.pCTLContext, hDestCertStore);
5355 else
5357 break;
5360 pImportSrc->u.hCertStore, hDestCertStore);
5361 break;
5362 default:
5363 WARN("unknown source type: %u\n", pImportSrc->dwSubjectChoice);
5365 ret = FALSE;
5366 }
5367 return ret;
5368}
#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT
Definition: cryptuiapi.h:306
#define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT
Definition: cryptuiapi.h:307
#define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE
Definition: cryptuiapi.h:309
#define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT
Definition: cryptuiapi.h:308
#define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE
Definition: cryptuiapi.h:305
static void import_warn_type_mismatch(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle)
Definition: main.c:4717
static BOOL import_crl(PCCRL_CONTEXT crl, HCERTSTORE hDestCertStore)
Definition: main.c:4599
static BOOL import_cert(PCCERT_CONTEXT cert, HCERTSTORE hDestCertStore)
Definition: main.c:4574
static BOOL import_ctl(PCCTL_CONTEXT ctl, HCERTSTORE hDestCertStore)
Definition: main.c:4625
static BOOL check_context_type(DWORD dwFlags, DWORD type)
Definition: main.c:4657
static BOOL import_store(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, HCERTSTORE source, HCERTSTORE dest)
Definition: main.c:4761
static BOOL import_file(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, LPCWSTR fileName, HCERTSTORE dest)
Definition: main.c:4840

Referenced by CryptUIWizImport(), and import_finish_dlg_proc().

◆ enum_store_callback()

static BOOL WINAPI enum_store_callback ( const void pvSystemStore,
DWORD  dwFlags,
PCERT_SYSTEM_STORE_INFO  pStoreInfo,
void pvReserved,
void pvArg 
)
static

Definition at line 1385 of file main.c.

1388{
1390 TVINSERTSTRUCTW tvis;
1391 LPCWSTR localizedName;
1392 BOOL ret = TRUE;
1393
1394 tvis.hParent = NULL;
1395 tvis.hInsertAfter = TVI_LAST;
1396 tvis.u.item.mask = TVIF_TEXT;
1397 if ((localizedName = CryptFindLocalizedName(pvSystemStore)))
1398 {
1399 struct StoreInfo *storeInfo = HeapAlloc(GetProcessHeap(), 0,
1400 sizeof(struct StoreInfo));
1401
1402 if (storeInfo)
1403 {
1404 storeInfo->type = SystemStore;
1405 storeInfo->u.name = HeapAlloc(GetProcessHeap(), 0,
1406 (lstrlenW(pvSystemStore) + 1) * sizeof(WCHAR));
1407 if (storeInfo->u.name)
1408 {
1409 tvis.u.item.mask |= TVIF_PARAM;
1410 tvis.u.item.lParam = (LPARAM)storeInfo;
1411 lstrcpyW(storeInfo->u.name, pvSystemStore);
1412 }
1413 else
1414 {
1415 HeapFree(GetProcessHeap(), 0, storeInfo);
1416 ret = FALSE;
1417 }
1418 }
1419 else
1420 ret = FALSE;
1421 tvis.u.item.pszText = (LPWSTR)localizedName;
1422 }
1423 else
1424 tvis.u.item.pszText = (LPWSTR)pvSystemStore;
1425 /* FIXME: need a folder icon for the store too */
1426 if (ret)
1428 return ret;
1429}
#define IDC_STORE_LIST
Definition: cryptuires.h:244
LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName)
Definition: oid.c:1182
#define lstrcpyW
Definition: compat.h:749
#define TVI_LAST
Definition: commctrl.h:3375
#define TVIF_TEXT
Definition: commctrl.h:3271
#define TVM_INSERTITEMW
Definition: commctrl.h:3413
#define TVIF_PARAM
Definition: commctrl.h:3273
enum StoreInfo::@372 type
@ SystemStore
Definition: main.c:1377
LPWSTR name
Definition: main.c:1381
HTREEITEM hParent
Definition: commctrl.h:3398
HTREEITEM hInsertAfter
Definition: commctrl.h:3399

Referenced by enumerate_stores().

◆ enumerate_stores()

static void enumerate_stores ( HWND  hwnd,
CRYPTUI_ENUM_DATA pEnumData 
)
static

Definition at line 1431 of file main.c.

1432{
1433 DWORD i;
1435
1436 for (i = 0; i < pEnumData->cEnumArgs; i++)
1440 for (i = 0; i < pEnumData->cStores; i++)
1441 {
1442 DWORD size;
1443
1444 if (CertGetStoreProperty(pEnumData->rghStore[i],
1446 {
1448
1449 if (name)
1450 {
1451 if (CertGetStoreProperty(pEnumData->rghStore[i],
1453 {
1454 struct StoreInfo *storeInfo = HeapAlloc(GetProcessHeap(),
1455 0, sizeof(struct StoreInfo));
1456
1457 if (storeInfo)
1458 {
1459 TVINSERTSTRUCTW tvis;
1460
1461 storeInfo->type = StoreHandle;
1462 storeInfo->u.store = pEnumData->rghStore[i];
1463 tvis.hParent = NULL;
1464 tvis.hInsertAfter = TVI_LAST;
1465 tvis.u.item.mask = TVIF_TEXT | TVIF_PARAM;
1466 tvis.u.item.pszText = name;
1467 tvis.u.item.lParam = (LPARAM)storeInfo;
1469 }
1470 }
1472 }
1473 }
1474 }
1475}
BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara, void *pvArg, PFN_CERT_ENUM_SYSTEM_STORE pfnEnum)
Definition: store.c:1321
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: store.c:1172
static BOOL WINAPI enum_store_callback(const void *pvSystemStore, DWORD dwFlags, PCERT_SYSTEM_STORE_INFO pStoreInfo, void *pvReserved, void *pvArg)
Definition: main.c:1385
@ StoreHandle
Definition: main.c:1376
HCERTSTORE store
Definition: main.c:1380
PCRYPTUI_ENUM_SYSTEM_STORE_ARGS rgEnumArgs
Definition: main.c:1340
DWORD cEnumArgs
Definition: main.c:1339
HCERTSTORE * rghStore
Definition: main.c:1338
#define CERT_STORE_LOCALIZED_NAME_PROP_ID
Definition: wincrypt.h:2830

Referenced by select_store_dlg_proc().

◆ export_acquire_private_key()

static BOOL export_acquire_private_key ( const CRYPT_KEY_PROV_INFO info,
HCRYPTPROV phProv 
)
static

Definition at line 5670 of file main.c.

5672{
5673 BOOL ret;
5674
5675 ret = CryptAcquireContextW(phProv, info->pwszContainerName,
5676 info->pwszProvName, info->dwProvType, 0);
5677 if (ret)
5678 {
5679 DWORD i;
5680
5681 for (i = 0; i < info->cProvParam; i++)
5682 CryptSetProvParam(*phProv, info->rgProvParam[i].dwParam,
5683 info->rgProvParam[i].pbData, info->rgProvParam[i].dwFlags);
5684 }
5685 return ret;
5686}
BOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
Definition: crypt.c:2179
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
Definition: crypt.c:358

Referenced by export_private_key_dlg_proc().

◆ export_append_extension()

static LPWSTR export_append_extension ( const struct ExportWizData data,
LPWSTR  fileName 
)
static

Definition at line 6044 of file main.c.

6046{
6047 static const WCHAR cer[] = { '.','c','e','r',0 };
6048 static const WCHAR crl[] = { '.','c','r','l',0 };
6049 static const WCHAR ctl[] = { '.','c','t','l',0 };
6050 static const WCHAR p7b[] = { '.','p','7','b',0 };
6051 static const WCHAR pfx[] = { '.','p','f','x',0 };
6052 static const WCHAR sst[] = { '.','s','s','t',0 };
6053 LPCWSTR extension;
6054 LPWSTR dot;
6055 BOOL appendExtension;
6056
6057 switch (data->contextInfo.dwExportFormat)
6058 {
6060 extension = p7b;
6061 break;
6063 extension = pfx;
6064 break;
6065 default:
6066 switch (data->exportInfo.dwSubjectChoice)
6067 {
6069 extension = crl;
6070 break;
6072 extension = ctl;
6073 break;
6075 extension = sst;
6076 break;
6077 default:
6078 extension = cer;
6079 }
6080 }
6081 dot = wcsrchr(fileName, '.');
6082 if (dot)
6083 appendExtension = wcsicmp(dot, extension) != 0;
6084 else
6085 appendExtension = TRUE;
6086 if (appendExtension)
6087 {
6088 fileName = HeapReAlloc(GetProcessHeap(), 0, fileName,
6089 (lstrlenW(fileName) + lstrlenW(extension) + 1) * sizeof(WCHAR));
6090 if (fileName)
6091 lstrcatW(fileName, extension);
6092 }
6093 return fileName;
6094}
#define wcsrchr
Definition: compat.h:16
#define wcsicmp
Definition: compat.h:15
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by export_file_dlg_proc().

◆ export_file_dlg_proc()

static LRESULT CALLBACK export_file_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 6247 of file main.c.

6249{
6250 LRESULT ret = 0;
6251 struct ExportWizData *data;
6252
6253 switch (msg)
6254 {
6255 case WM_INITDIALOG:
6256 {
6258
6259 data = (struct ExportWizData *)page->lParam;
6261 if (data->exportInfo.pwszExportFileName)
6263 (LPARAM)data->exportInfo.pwszExportFileName);
6264 break;
6265 }
6266 case WM_NOTIFY:
6267 {
6268 NMHDR *hdr = (NMHDR *)lp;
6269
6270 switch (hdr->code)
6271 {
6272 case PSN_WIZBACK:
6274 if (data->contextInfo.dwExportFormat !=
6276 {
6278 ret = 1;
6279 }
6280 break;
6281 case PSN_WIZNEXT:
6282 {
6283 HWND fileNameEdit = GetDlgItem(hwnd, IDC_EXPORT_FILENAME);
6284 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
6285
6287 if (!len)
6288 {
6290 LPCWSTR pTitle;
6291
6292 if (data->pwszWizardTitle)
6293 pTitle = data->pwszWizardTitle;
6294 else
6295 {
6297 pTitle = title;
6298 }
6302 ret = 1;
6303 }
6304 else
6305 {
6307 (len + 1) * sizeof(WCHAR));
6308
6309 if (fileName)
6310 {
6311 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
6312 (LPARAM)fileName);
6315 {
6318 ret = 1;
6319 }
6320 else
6321 data->fileName = fileName;
6322 }
6323 }
6324 break;
6325 }
6326 case PSN_SETACTIVE:
6329 ret = TRUE;
6330 break;
6331 }
6332 break;
6333 }
6334 case WM_COMMAND:
6335 switch (wp)
6336 {
6338 {
6340 WCHAR fileBuf[MAX_PATH];
6341
6343 memset(&ofn, 0, sizeof(ofn));
6344 ofn.lStructSize = sizeof(ofn);
6345 ofn.hwndOwner = hwnd;
6347 data->contextInfo.dwExportFormat,
6348 data->exportInfo.dwSubjectChoice);
6349 ofn.lpstrFile = fileBuf;
6350 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
6351 fileBuf[0] = 0;
6352 if (GetSaveFileNameW(&ofn))
6354 0, (LPARAM)ofn.lpstrFile);
6356 break;
6357 }
6358 }
6359 break;
6360 }
6361 return ret;
6362}
#define IDC_EXPORT_BROWSE_FILE
Definition: cryptuires.h:276
#define IDC_EXPORT_FILENAME
Definition: cryptuires.h:275
#define IDS_IMPORT_EMPTY_FILE
Definition: cryptuires.h:80
#define IDS_EXPORT_WIZARD
Definition: cryptuires.h:148
#define IDD_EXPORT_FORMAT
Definition: cryptuires.h:199
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4801
static BOOL export_validate_filename(HWND hwnd, struct ExportWizData *data, LPCWSTR fileName)
Definition: main.c:6096
static WCHAR * make_export_file_filter(DWORD exportFormat, DWORD subjectChoice)
Definition: main.c:6181
static LPWSTR export_append_extension(const struct ExportWizData *data, LPWSTR fileName)
Definition: main.c:6044
#define MAX_PATH
Definition: compat.h:34
#define PSM_SETWIZBUTTONS
Definition: prsht.h:157
#define PSN_WIZNEXT
Definition: prsht.h:121
#define PSWIZB_NEXT
Definition: prsht.h:154
#define PSWIZB_BACK
Definition: prsht.h:153
#define PSN_WIZBACK
Definition: prsht.h:120
#define PSN_SETACTIVE
Definition: prsht.h:115
OPENFILENAME ofn
Definition: sndrec32.cpp:56
LPWSTR fileName
Definition: main.c:5600
HWND hwndOwner
Definition: commdlg.h:330
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD lStructSize
Definition: commdlg.h:329
LPCSTR lpstrFilter
Definition: commdlg.h:332
DWORD nMaxFile
Definition: commdlg.h:337
#define WM_GETTEXTLENGTH
Definition: winuser.h:1622
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DWLP_MSGRESULT
Definition: winuser.h:873

Referenced by show_export_ui().

◆ export_finish_dlg_proc()

static LRESULT CALLBACK export_finish_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 6751 of file main.c.

6753{
6754 LRESULT ret = 0;
6755 struct ExportWizData *data;
6756
6757 switch (msg)
6758 {
6759 case WM_INITDIALOG:
6760 {
6763 RECT rc;
6765
6766 data = (struct ExportWizData *)page->lParam;
6769 (WPARAM)data->titleFont, TRUE);
6770 GetWindowRect(lv, &rc);
6771 column.mask = LVCF_WIDTH;
6772 column.cx = (rc.right - rc.left) / 2 - 2;
6776 break;
6777 }
6778 case WM_NOTIFY:
6779 {
6780 NMHDR *hdr = (NMHDR *)lp;
6781
6782 switch (hdr->code)
6783 {
6784 case PSN_SETACTIVE:
6785 {
6787
6793 ret = TRUE;
6794 break;
6795 }
6796 case PSN_WIZFINISH:
6797 {
6798 int messageID;
6800 LPCWSTR pTitle;
6801 DWORD mbFlags;
6802
6804 if ((data->success = do_export(data->file, &data->exportInfo,
6805 &data->contextInfo, data->keyProvInfo, data->deleteKeys)))
6806 {
6807 messageID = IDS_EXPORT_SUCCEEDED;
6808 mbFlags = MB_OK;
6809 }
6810 else
6811 {
6812 messageID = IDS_EXPORT_FAILED;
6813 mbFlags = MB_OK | MB_ICONERROR;
6814 }
6815 if (data->pwszWizardTitle)
6816 pTitle = data->pwszWizardTitle;
6817 else
6818 {
6820 pTitle = title;
6821 }
6823 MessageBoxW(hwnd, message, pTitle, mbFlags);
6824 break;
6825 }
6826 }
6827 break;
6828 }
6829 }
6830 return ret;
6831}
#define IDC_EXPORT_SETTINGS
Definition: cryptuires.h:277
#define IDS_EXPORT_FAILED
Definition: cryptuires.h:167
#define IDC_EXPORT_TITLE
Definition: cryptuires.h:266
#define IDS_EXPORT_SUCCEEDED
Definition: cryptuires.h:166
static void show_export_details(HWND lv, const struct ExportWizData *data)
Definition: main.c:6364
#define PSWIZB_FINISH
Definition: prsht.h:155
#define PSN_WIZFINISH
Definition: prsht.h:122
#define LVM_DELETEALLITEMS
Definition: commctrl.h:2418
Definition: tftpd.h:60
#define WM_SETFONT
Definition: winuser.h:1653

Referenced by show_export_ui().

◆ export_format_dlg_proc()

static LRESULT CALLBACK export_format_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5835 of file main.c.

5837{
5838 LRESULT ret = 0;
5839 struct ExportWizData *data;
5840
5841 switch (msg)
5842 {
5843 case WM_INITDIALOG:
5844 {
5846
5847 data = (struct ExportWizData *)page->lParam;
5850 break;
5851 }
5852 case WM_NOTIFY:
5853 {
5854 NMHDR *hdr = (NMHDR *)lp;
5855
5856 switch (hdr->code)
5857 {
5858 case PSN_SETACTIVE:
5863 ret = TRUE;
5864 break;
5865 case PSN_WIZNEXT:
5866 {
5867 BOOL skipPasswordPage = TRUE;
5868
5871 data->contextInfo.dwExportFormat =
5874 data->contextInfo.dwExportFormat =
5877 {
5878 data->contextInfo.dwExportFormat =
5881 data->contextInfo.fExportChain =
5883 }
5884 else
5885 {
5886 data->contextInfo.dwExportFormat =
5889 data->contextInfo.fExportChain = TRUE;
5891 data->contextInfo.fStrongEncryption = TRUE;
5893 data->deleteKeys = TRUE;
5894 skipPasswordPage = FALSE;
5895 }
5897 skipPasswordPage ? IDD_EXPORT_FILE : 0);
5898 ret = 1;
5899 break;
5900 }
5901 }
5902 break;
5903 }
5904 case WM_COMMAND:
5905 switch (HIWORD(wp))
5906 {
5907 case BN_CLICKED:
5908 switch (LOWORD(wp))
5909 {
5913 FALSE);
5915 FALSE);
5917 FALSE);
5920 break;
5923 TRUE);
5924 break;
5927 TRUE);
5929 TRUE);
5932 break;
5933 }
5934 break;
5935 }
5936 break;
5937 }
5938 return ret;
5939}
#define IDD_EXPORT_FILE
Definition: cryptuires.h:200
#define IDC_EXPORT_FORMAT_CMS
Definition: cryptuires.h:269
#define IDC_EXPORT_PFX_DELETE_PRIVATE_KEY
Definition: cryptuires.h:274
#define IDC_EXPORT_PFX_INCLUDE_CHAIN
Definition: cryptuires.h:272
#define IDC_EXPORT_FORMAT_DER
Definition: cryptuires.h:267
#define IDC_EXPORT_PFX_STRONG_ENCRYPTION
Definition: cryptuires.h:273
#define IDC_EXPORT_FORMAT_BASE64
Definition: cryptuires.h:268
#define IDC_EXPORT_CMS_INCLUDE_CHAIN
Definition: cryptuires.h:271
#define IDC_EXPORT_FORMAT_PFX
Definition: cryptuires.h:270
static void export_format_enable_controls(HWND hwnd, const struct ExportWizData *data)
Definition: main.c:5800

Referenced by show_export_ui().

◆ export_format_enable_controls()

static void export_format_enable_controls ( HWND  hwnd,
const struct ExportWizData data 
)
static

Definition at line 5800 of file main.c.

5801{
5802 int defaultFormatID;
5803
5804 switch (data->contextInfo.dwExportFormat)
5805 {
5807 defaultFormatID = IDC_EXPORT_FORMAT_BASE64;
5808 break;
5810 defaultFormatID = IDC_EXPORT_FORMAT_CMS;
5811 break;
5813 defaultFormatID = IDC_EXPORT_FORMAT_PFX;
5814 break;
5815 default:
5816 defaultFormatID = IDC_EXPORT_FORMAT_DER;
5817 }
5818 SendMessageW(GetDlgItem(hwnd, defaultFormatID), BM_CLICK, 0, 0);
5819 if (defaultFormatID == IDC_EXPORT_FORMAT_PFX)
5820 {
5825 }
5826 else
5827 {
5832 }
5833}
#define BM_CLICK
Definition: winuser.h:1920

Referenced by export_format_dlg_proc().

◆ export_get_private_key_info()

static PCRYPT_KEY_PROV_INFO export_get_private_key_info ( PCCERT_CONTEXT  cert)
static

Definition at line 5648 of file main.c.

5649{
5651 DWORD size;
5652
5654 NULL, &size))
5655 {
5657 if (info)
5658 {
5661 {
5663 info = NULL;
5664 }
5665 }
5666 }
5667 return info;
5668}
#define CERT_KEY_PROV_INFO_PROP_ID
Definition: wincrypt.h:2686

Referenced by export_private_key_dlg_proc(), and save_pfx().

◆ export_info_has_private_key()

static BOOL export_info_has_private_key ( PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo)
static

Definition at line 5782 of file main.c.

5783{
5784 BOOL ret = FALSE;
5785
5787 {
5788 DWORD size;
5789
5790 /* If there's a CRYPT_KEY_PROV_INFO set for this cert, assume the
5791 * cert has a private key.
5792 */
5795 ret = TRUE;
5796 }
5797 return ret;
5798}

Referenced by show_export_ui().

◆ export_is_key_exportable()

static BOOL export_is_key_exportable ( HCRYPTPROV  hProv,
DWORD  keySpec 
)
static

Definition at line 5688 of file main.c.

5689{
5690 BOOL ret;
5691 HCRYPTKEY key;
5692
5693 if ((ret = CryptGetUserKey(hProv, keySpec, &key)))
5694 {
5695 DWORD permissions, size = sizeof(permissions);
5696
5697 if ((ret = CryptGetKeyParam(key, KP_PERMISSIONS, (BYTE *)&permissions,
5698 &size, 0)) && !(permissions & CRYPT_EXPORT))
5699 ret = FALSE;
5701 }
5702 return ret;
5703}
BOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey)
Definition: crypt.c:930
BOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
Definition: crypt.c:1718
BOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
Definition: crypt.c:1649
static HCRYPTPROV hProv
Definition: rsaenh.c:32
Definition: copy.c:22
#define CRYPT_EXPORT
Definition: wincrypt.h:2197
#define KP_PERMISSIONS
Definition: wincrypt.h:2133
ULONG_PTR HCRYPTKEY
Definition: wincrypt.h:49

Referenced by export_private_key_dlg_proc().

◆ export_password_dlg_proc()

static LRESULT CALLBACK export_password_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5958 of file main.c.

5960{
5961 LRESULT ret = 0;
5962 struct ExportWizData *data;
5963
5964 switch (msg)
5965 {
5966 case WM_INITDIALOG:
5967 {
5969
5970 data = (struct ExportWizData *)page->lParam;
5972 break;
5973 }
5974 case WM_NOTIFY:
5975 {
5976 NMHDR *hdr = (NMHDR *)lp;
5977
5978 switch (hdr->code)
5979 {
5980 case PSN_SETACTIVE:
5983 ret = TRUE;
5984 break;
5985 case PSN_WIZNEXT:
5986 {
5987 HWND passwordEdit = GetDlgItem(hwnd, IDC_EXPORT_PASSWORD);
5988 HWND passwordConfirmEdit = GetDlgItem(hwnd,
5990 DWORD passwordLen = SendMessageW(passwordEdit, WM_GETTEXTLENGTH,
5991 0, 0);
5992 DWORD passwordConfirmLen = SendMessageW(passwordConfirmEdit,
5993 WM_GETTEXTLENGTH, 0, 0);
5994
5996 if (!passwordLen && !passwordConfirmLen)
5997 data->contextInfo.pwszPassword = NULL;
5998 else if (passwordLen != passwordConfirmLen)
5999 {
6002 ret = 1;
6003 }
6004 else
6005 {
6007 (passwordLen + 1) * sizeof(WCHAR));
6008 LPWSTR passwordConfirm = HeapAlloc(GetProcessHeap(), 0,
6009 (passwordConfirmLen + 1) * sizeof(WCHAR));
6011
6012 if (password && passwordConfirm)
6013 {
6014 SendMessageW(passwordEdit, WM_GETTEXT, passwordLen + 1,
6015 (LPARAM)password);
6016 SendMessageW(passwordConfirmEdit, WM_GETTEXT,
6017 passwordConfirmLen + 1, (LPARAM)passwordConfirm);
6018 if (lstrcmpW(password, passwordConfirm))
6019 {
6022 ret = 1;
6023 }
6024 else
6025 {
6026 data->contextInfo.pwszPassword = password;
6028 data->freePassword = TRUE;
6029 }
6030 }
6031 if (freePassword)
6033 HeapFree(GetProcessHeap(), 0, passwordConfirm);
6034 }
6035 break;
6036 }
6037 }
6038 break;
6039 }
6040 }
6041 return ret;
6042}
#define IDC_EXPORT_PASSWORD_CONFIRM
Definition: cryptuires.h:282
#define IDC_EXPORT_PASSWORD
Definition: cryptuires.h:281
static void export_password_mismatch(HWND hwnd, const struct ExportWizData *data)
Definition: main.c:5941
static WCHAR password[]
Definition: url.c:33
BOOL freePassword
Definition: main.c:5597

Referenced by show_export_ui().

◆ export_password_mismatch()

static void export_password_mismatch ( HWND  hwnd,
const struct ExportWizData data 
)
static

Definition at line 5941 of file main.c.

5942{
5944 LPCWSTR pTitle;
5945
5946 if (data->pwszWizardTitle)
5947 pTitle = data->pwszWizardTitle;
5948 else
5949 {
5951 pTitle = title;
5952 }
5956}
#define IDS_EXPORT_PASSWORD_MISMATCH
Definition: cryptuires.h:172
HWND WINAPI SetFocus(_In_opt_ HWND)

Referenced by export_password_dlg_proc().

◆ export_private_key_dlg_proc()

static LRESULT CALLBACK export_private_key_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5705 of file main.c.

5707{
5708 LRESULT ret = 0;
5709 struct ExportWizData *data;
5710
5711 switch (msg)
5712 {
5713 case WM_INITDIALOG:
5714 {
5717 HCRYPTPROV hProv = 0;
5718 int errorID = 0;
5719
5720 data = (struct ExportWizData *)page->lParam;
5722 /* Get enough information about a key to see whether it's exportable.
5723 */
5725 data->exportInfo.u.pCertContext)))
5729 else if (!export_is_key_exportable(hProv, info->dwKeySpec))
5731
5732 if (errorID)
5733 {
5735
5738 WM_SETTEXT, 0, (LPARAM)error);
5740 }
5741 else
5742 data->keyProvInfo = info;
5743 if (hProv)
5746 0, 0);
5747 break;
5748 }
5749 case WM_NOTIFY:
5750 {
5751 NMHDR *hdr = (NMHDR *)lp;
5752
5753 switch (hdr->code)
5754 {
5755 case PSN_SETACTIVE:
5758 ret = TRUE;
5759 break;
5760 case PSN_WIZNEXT:
5763 {
5764 data->contextInfo.dwExportFormat =
5766 data->contextInfo.fExportPrivateKeys = FALSE;
5767 }
5768 else
5769 {
5770 data->contextInfo.dwExportFormat =
5772 data->contextInfo.fExportPrivateKeys = TRUE;
5773 }
5774 break;
5775 }
5776 break;
5777 }
5778 }
5779 return ret;
5780}
#define IDC_EXPORT_PRIVATE_KEY_YES
Definition: cryptuires.h:278
#define IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE
Definition: cryptuires.h:174
#define IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE
Definition: cryptuires.h:173
#define IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE
Definition: cryptuires.h:280
#define IDC_EXPORT_PRIVATE_KEY_NO
Definition: cryptuires.h:279
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
Definition: crypt.c:648
static BOOL export_is_key_exportable(HCRYPTPROV hProv, DWORD keySpec)
Definition: main.c:5688
static PCRYPT_KEY_PROV_INFO export_get_private_key_info(PCCERT_CONTEXT cert)
Definition: main.c:5648
static BOOL export_acquire_private_key(const CRYPT_KEY_PROV_INFO *info, HCRYPTPROV *phProv)
Definition: main.c:5670
ULONG_PTR HCRYPTPROV
Definition: wincrypt.h:46

Referenced by show_export_ui().

◆ export_validate_filename()

static BOOL export_validate_filename ( HWND  hwnd,
struct ExportWizData data,
LPCWSTR  fileName 
)
static

Definition at line 6096 of file main.c.

6098{
6099 HANDLE file;
6100 BOOL tryCreate = TRUE, forceCreate = FALSE, ret = FALSE;
6101
6102 file = CreateFileW(fileName, GENERIC_WRITE,
6105 {
6107 LPCWSTR pTitle;
6108
6109 if (data->pwszWizardTitle)
6110 pTitle = data->pwszWizardTitle;
6111 else
6112 {
6114 pTitle = title;
6115 }
6117 if (MessageBoxW(hwnd, warning, pTitle, MB_YESNO) == IDYES)
6118 forceCreate = TRUE;
6119 else
6120 tryCreate = FALSE;
6122 }
6123 if (tryCreate)
6124 {
6125 file = CreateFileW(fileName, GENERIC_WRITE,
6127 forceCreate ? CREATE_ALWAYS : CREATE_NEW,
6128 0, NULL);
6130 {
6131 data->file = file;
6132 ret = TRUE;
6133 }
6134 else
6135 {
6137 LPCWSTR pTitle;
6138 LPWSTR msgBuf, fullError;
6139
6140 if (data->pwszWizardTitle)
6141 pTitle = data->pwszWizardTitle;
6142 else
6143 {
6145 pTitle = title;
6146 }
6150 GetLastError(), 0, (LPWSTR) &msgBuf, 0, NULL);
6151 fullError = HeapAlloc(GetProcessHeap(), 0,
6152 (lstrlenW(error) + lstrlenW(fileName) + lstrlenW(msgBuf) + 3)
6153 * sizeof(WCHAR));
6154 if (fullError)
6155 {
6156 LPWSTR ptr = fullError;
6157
6158 lstrcpyW(ptr, error);
6159 ptr += lstrlenW(error);
6160 lstrcpyW(ptr, fileName);
6161 ptr += lstrlenW(fileName);
6162 *ptr++ = ':';
6163 *ptr++ = '\n';
6164 lstrcpyW(ptr, msgBuf);
6165 MessageBoxW(hwnd, fullError, pTitle, MB_ICONERROR | MB_OK);
6166 HeapFree(GetProcessHeap(), 0, fullError);
6167 }
6168 LocalFree(msgBuf);
6169 }
6170 }
6171 return ret;
6172}
#define IDS_EXPORT_FILE_EXISTS
Definition: cryptuires.h:153
#define IDS_IMPORT_OPEN_FAILED
Definition: cryptuires.h:82
#define OPEN_EXISTING
Definition: compat.h:775
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
#define CREATE_NEW
Definition: disk.h:69
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:449
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:445

Referenced by export_file_dlg_proc().

◆ export_welcome_dlg_proc()

static LRESULT CALLBACK export_welcome_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5605 of file main.c.

5607{
5608 LRESULT ret = 0;
5609
5610 switch (msg)
5611 {
5612 case WM_INITDIALOG:
5613 {
5614 struct ExportWizData *data;
5616 WCHAR fontFace[MAX_STRING_LEN];
5617 HDC hDC = GetDC(hwnd);
5618 int height;
5619
5620 data = (struct ExportWizData *)page->lParam;
5623 data->titleFont = CreateFontW(height, 0, 0, 0, FW_BOLD, 0, 0, 0,
5627 (WPARAM)data->titleFont, TRUE);
5628 ReleaseDC(hwnd, hDC);
5629 break;
5630 }
5631 case WM_NOTIFY:
5632 {
5633 NMHDR *hdr = (NMHDR *)lp;
5634
5635 switch (hdr->code)
5636 {
5637 case PSN_SETACTIVE:
5639 ret = TRUE;
5640 break;
5641 }
5642 break;
5643 }
5644 }
5645 return ret;
5646}
static HDC hDC
Definition: 3dtext.c:33
#define IDS_WIZARD_TITLE_FONT
Definition: cryptuires.h:97
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
static HDC
Definition: imagelist.c:88
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
#define DEFAULT_PITCH
Definition: wingdi.h:443
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define DEFAULT_QUALITY
Definition: wingdi.h:436
#define FW_BOLD
Definition: wingdi.h:378
#define FF_DONTCARE
Definition: wingdi.h:448
#define LOGPIXELSY
Definition: wingdi.h:719
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:415
HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR)
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:426
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)

Referenced by show_export_ui().

◆ field_format_detailed_cert_name()

static WCHAR * field_format_detailed_cert_name ( PCERT_NAME_BLOB  name)
static

Definition at line 2637 of file main.c.

2638{
2639 WCHAR *str = NULL;
2642
2643 if (len)
2644 {
2645 str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
2646 if (str)
2649 }
2650 return str;
2651}
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
Definition: str.c:702
#define CERT_X500_NAME_STR
Definition: wincrypt.h:3486
#define CERT_NAME_STR_CRLF_FLAG
Definition: wincrypt.h:3490

Referenced by field_format_detailed_issuer(), and field_format_detailed_subject().

◆ field_format_detailed_extension()

static WCHAR * field_format_detailed_extension ( PCCERT_CONTEXT  cert,
void param 
)
static

Definition at line 2945 of file main.c.

2946{
2950
2951 if (!str)
2953 return str;
2954}
static WCHAR * field_format_extension_hex_with_ascii(const CERT_EXTENSION *ext)
Definition: main.c:2875
#define CRYPT_FORMAT_STR_MULTI_LINE
Definition: wincrypt.h:3510
#define CRYPT_FORMAT_STR_NO_HEX
Definition: wincrypt.h:3511

Referenced by add_cert_extension_detail().

◆ field_format_detailed_issuer()

static WCHAR * field_format_detailed_issuer ( PCCERT_CONTEXT  cert,
void param 
)
static

Definition at line 2653 of file main.c.

2654{
2655 return field_format_detailed_cert_name(&cert->pCertInfo->Issuer);
2656}
static WCHAR * field_format_detailed_cert_name(PCERT_NAME_BLOB name)
Definition: main.c:2637

◆ field_format_detailed_public_key()

static WCHAR * field_format_detailed_public_key ( PCCERT_CONTEXT  cert,
void param 
)
static

Definition at line 2740 of file main.c.

2741{
2742 return format_hex_string(
2743 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData,
2744 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData);
2745}
static WCHAR * format_hex_string(void *pb, DWORD cb)
Definition: main.c:2609

◆ field_format_detailed_subject()

static WCHAR * field_format_detailed_subject ( PCCERT_CONTEXT  cert,
void param 
)
static

Definition at line 2663 of file main.c.

2664{
2665 return field_format_detailed_cert_name(&cert->pCertInfo->Subject);
2666}

◆ field_format_extension_hex_with_ascii()

static WCHAR * field_format_extension_hex_with_ascii ( const CERT_EXTENSION ext)
static

Definition at line 2875 of file main.c.

2876{
2877 WCHAR *str = NULL;
2878
2879 if (ext->Value.cbData)
2880 {
2881 /* The output is formatted as:
2882 * <hex bytes> <ascii bytes>\n
2883 * where <hex bytes> is a string of up to 8 bytes, output as %02x,
2884 * and <ascii bytes> is the ASCII equivalent of each byte, or '.' if
2885 * the byte is not printable.
2886 * So, for example, the extension value consisting of the following
2887 * bytes:
2888 * 0x30,0x14,0x31,0x12,0x30,0x10,0x06,0x03,0x55,0x04,0x03,
2889 * 0x13,0x09,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67
2890 * is output as:
2891 * 30 14 31 12 30 10 06 03 0.1.0...
2892 * 55 04 03 13 09 4a 75 61 U....Jua
2893 * 6e 20 4c 61 6e 67 n Lang
2894 * The allocation size therefore requires:
2895 * - 4 characters per character in an 8-byte line
2896 * (2 for the hex format, one for the space, one for the ASCII value)
2897 * - 3 more characters per 8-byte line (two spaces and a newline)
2898 * - 1 character for the terminating nul
2899 * FIXME: should use a fixed-width font for this
2900 */
2901 DWORD lines = (ext->Value.cbData + 7) / 8;
2902
2904 (lines * 8 * 4 + lines * 3 + 1) * sizeof(WCHAR));
2905 if (str)
2906 {
2907 static const WCHAR fmt[] = { '%','0','2','x',' ',0 };
2908 DWORD i, j;
2909 WCHAR *ptr;
2910
2911 for (i = 0, ptr = str; i < ext->Value.cbData; i += 8)
2912 {
2913 /* Output as hex bytes first */
2914 for (j = i; j < min(i + 8, ext->Value.cbData); j++, ptr += 3)
2915 swprintf(ptr, fmt, ext->Value.pbData[j]);
2916 /* Pad the hex output with spaces for alignment */
2917 if (j == ext->Value.cbData && j % 8)
2918 {
2919 static const WCHAR pad[] = { ' ',' ',' ' };
2920
2921 for (; j % 8; j++, ptr += ARRAY_SIZE(pad))
2922 memcpy(ptr, pad, sizeof(pad));
2923 }
2924 /* The last swprintf included a space, so just insert one
2925 * more space between the hex bytes and the ASCII output
2926 */
2927 *ptr++ = ' ';
2928 /* Output as ASCII bytes */
2929 for (j = i; j < min(i + 8, ext->Value.cbData); j++, ptr++)
2930 {
2931 if (iswprint(ext->Value.pbData[j]) &&
2932 !iswspace(ext->Value.pbData[j]))
2933 *ptr = ext->Value.pbData[j];
2934 else
2935 *ptr = '.';
2936 }
2937 *ptr++ = '\n';
2938 }
2939 *ptr++ = '\0';
2940 }
2941 }
2942 return str;
2943}
#define swprintf
Definition: precomp.h:40
#define iswspace(_c)
Definition: ctype.h:669
#define iswprint(_c)
Definition: ctype.h:672
#define min(a, b)
Definition: monoChain.cc:55

Referenced by field_format_detailed_extension().

◆ field_format_from_date()

static WCHAR * field_format_from_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2689 of file main.c.

2690{
2691 return format_long_date(&cert->pCertInfo->NotBefore);
2692}
static WCHAR * format_long_date(const FILETIME *fileTime)
Definition: main.c:2668

◆ field_format_issuer()

static WCHAR * field_format_issuer ( PCCERT_CONTEXT  cert)
static

Definition at line 2631 of file main.c.

◆ field_format_public_key()

static WCHAR * field_format_public_key ( PCCERT_CONTEXT  cert)
static

Definition at line 2699 of file main.c.

2700{
2702 WCHAR *buf = NULL;
2703
2705 cert->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId, 0);
2706 if (oidInfo)
2707 {
2709
2711 {
2712 DWORD len;
2713
2714 /* Allocate the output buffer. Use the number of bytes in the
2715 * public key as a conservative (high) estimate for the number of
2716 * digits in its output.
2717 * The output is of the form (in English)
2718 * "<public key algorithm> (<public key bit length> bits)".
2719 * Ordinarily having two positional parameters in a string is not a
2720 * good idea, but as this isn't a sentence fragment, it shouldn't
2721 * be word-order dependent.
2722 */
2723 len = lstrlenW(fmt) + lstrlenW(oidInfo->pwszName) +
2724 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData * 8;
2725 buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(*buf));
2726 if (buf)
2727 {
2728 DWORD_PTR args[2];
2729 args[0] = (DWORD_PTR)oidInfo->pwszName;
2731 &cert->pCertInfo->SubjectPublicKeyInfo);
2733 fmt, 0, 0, buf, len, (__ms_va_list*)args);
2734 }
2735 }
2736 }
2737 return buf;
2738}
#define IDS_FIELD_PUBLIC_KEY_FORMAT
Definition: cryptuires.h:57
DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey)
Definition: cert.c:1305
Definition: match.c:390
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:447
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:450
#define __ms_va_list
Definition: windef.h:456

◆ field_format_serial_number()

static WCHAR * field_format_serial_number ( PCCERT_CONTEXT  cert)
static

Definition at line 2625 of file main.c.

2626{
2627 return format_hex_string(cert->pCertInfo->SerialNumber.pbData,
2628 cert->pCertInfo->SerialNumber.cbData);
2629}

◆ field_format_subject()

static WCHAR * field_format_subject ( PCCERT_CONTEXT  cert)
static

Definition at line 2658 of file main.c.

◆ field_format_to_date()

static WCHAR * field_format_to_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2694 of file main.c.

2695{
2696 return format_long_date(&cert->pCertInfo->NotAfter);
2697}

◆ field_format_version()

static WCHAR * field_format_version ( PCCERT_CONTEXT  cert)
static

Definition at line 2599 of file main.c.

2600{
2601 static const WCHAR fmt[] = { 'V','%','d',0 };
2602 WCHAR *buf = HeapAlloc(GetProcessHeap(), 0, 12 * sizeof(WCHAR));
2603
2604 if (buf)
2605 swprintf(buf, fmt, cert->pCertInfo->dwVersion);
2606 return buf;
2607}

◆ find_oid_in_list()

static LONG_PTR find_oid_in_list ( HWND  lv,
LPCSTR  oid 
)
static

Definition at line 639 of file main.c.

640{
644
645 if (oidInfo)
646 {
647 LVFINDINFOW findInfo;
648
649 findInfo.flags = LVFI_PARAM;
650 findInfo.lParam = (LPARAM)oidInfo;
651 ret = SendMessageW(lv, LVM_FINDITEMW, -1, (LPARAM)&findInfo);
652 }
653 else
654 {
655 LVFINDINFOA findInfo;
656
657 findInfo.flags = LVFI_STRING;
658 findInfo.psz = oid;
659 ret = SendMessageW(lv, LVM_FINDITEMA, -1, (LPARAM)&findInfo);
660 }
661 return ret;
662}
#define LVFI_STRING
Definition: commctrl.h:2442
#define LVFI_PARAM
Definition: commctrl.h:2441
#define LVM_FINDITEMW
Definition: commctrl.h:2471
#define LVM_FINDITEMA
Definition: commctrl.h:2470
LPARAM lParam
Definition: commctrl.h:2463
#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID
Definition: wincrypt.h:1690

Referenced by cert_mgr_advanced_dlg_proc(), and is_oid_in_list().

◆ find_policy_qualifier()

static CRYPT_OBJID_BLOB * find_policy_qualifier ( CERT_POLICIES_INFO policies,
LPCSTR  policyOid 
)
static

Definition at line 2212 of file main.c.

2214{
2216 DWORD i;
2217
2218 for (i = 0; !ret && i < policies->cPolicyInfo; i++)
2219 {
2220 DWORD j;
2221
2222 for (j = 0; !ret && j < policies->rgPolicyInfo[i].cPolicyQualifier; j++)
2223 if (!strcmp(policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2224 pszPolicyQualifierId, policyOid))
2225 ret = &policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2226 Qualifier;
2227 }
2228 return ret;
2229}

Referenced by set_issuer_statement().

◆ findSupportedOID()

static struct OIDToString * findSupportedOID ( LPCSTR  oid)
static

Definition at line 1976 of file main.c.

1977{
1978 int indexHigh = ARRAY_SIZE(oidMap) - 1, indexLow = 0;
1979
1980 while (indexLow <= indexHigh)
1981 {
1982 int cmp, i = (indexLow + indexHigh) / 2;
1983 if (!(cmp = strcmp(oid, oidMap[i].oid)))
1984 return &oidMap[i];
1985 if (cmp > 0)
1986 indexLow = i + 1;
1987 else
1988 indexHigh = i - 1;
1989 }
1990 return NULL;
1991}
static struct OIDToString oidMap[]
Definition: main.c:1917
#define cmp(status, error)
Definition: error.c:114

Referenced by add_local_oid_text_to_control().

◆ format_enhanced_key_usage_value()

static WCHAR * format_enhanced_key_usage_value ( void pb,
DWORD  cb 
)
static

Definition at line 3015 of file main.c.

3016{
3018
3019 ext.pszObjId = (LPSTR)X509_ENHANCED_KEY_USAGE;
3020 ext.fCritical = FALSE;
3021 ext.Value.pbData = pb;
3022 ext.Value.cbData = cb;
3023 return crypt_format_extension(&ext, 0);
3024}
#define X509_ENHANCED_KEY_USAGE
Definition: wincrypt.h:3403

◆ format_hex_string()

static WCHAR * format_hex_string ( void pb,
DWORD  cb 
)
static

Definition at line 2609 of file main.c.

2610{
2611 WCHAR *buf = HeapAlloc(GetProcessHeap(), 0, (cb * 3 + 1) * sizeof(WCHAR));
2612
2613 if (buf)
2614 {
2615 static const WCHAR fmt[] = { '%','0','2','x',' ',0 };
2616 DWORD i;
2617 WCHAR *ptr;
2618
2619 for (i = 0, ptr = buf; i < cb; i++, ptr += 3)
2620 swprintf(ptr, fmt, ((BYTE *)pb)[i]);
2621 }
2622 return buf;
2623}

Referenced by field_format_detailed_public_key(), and field_format_serial_number().

◆ format_long_date()

static WCHAR * format_long_date ( const FILETIME fileTime)
static

Definition at line 2668 of file main.c.

2669{
2670 WCHAR dateFmt[80]; /* long enough for LOCALE_SLONGDATE */
2671 DWORD len;
2672 WCHAR *buf = NULL;
2673 SYSTEMTIME sysTime;
2674
2675 /* FIXME: format isn't quite right, want time too */
2677 FileTimeToSystemTime(fileTime, &sysTime);
2678 len = GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, NULL, 0);
2679 if (len)
2680 {
2681 buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
2682 if (buf)
2683 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf,
2684 len);
2685 }
2686 return buf;
2687}
#define LOCALE_SLONGDATE
Definition: winnls.h:63

Referenced by field_format_from_date(), and field_format_to_date().

◆ free_certs()

static void free_certs ( HWND  lv)
static

Definition at line 533 of file main.c.

534{
536 int items = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
537
538 for (i = 0; i < items; i++)
539 {
540 item.mask = LVIF_PARAM;
541 item.iItem = i;
542 item.iSubItem = 0;
545 }
546}
static TCHAR * items[]
Definition: page1.c:45

Referenced by cert_mgr_dlg_proc(), refresh_store_certs(), and select_cert_dlg_proc().

◆ free_detail_fields()

static void free_detail_fields ( struct detail_data data)
static

Definition at line 3774 of file main.c.

3775{
3776 int i;
3777
3778 for (i = 0; i < data->cFields; i++)
3779 HeapFree(GetProcessHeap(), 0, data->fields[i].detailed_value);
3780 HeapFree(GetProcessHeap(), 0, data->fields);
3781 data->fields = NULL;
3782 data->cFields = 0;
3783}

Referenced by detail_callback(), and refresh_details_view().

◆ free_prop_sheet_pages()

static void free_prop_sheet_pages ( PROPSHEETPAGEW pages,
DWORD  num 
)
static

Definition at line 7461 of file main.c.

7462{
7463 DWORD i;
7464
7465 for (i = 0; i < num; i++)
7466 {
7467 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
7468 HeapFree(GetProcessHeap(), 0, (void *)pages[i].u.pszTemplate);
7469 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
7470 HeapFree(GetProcessHeap(), 0, (void *)pages[i].u2.pszIcon);
7471 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7472 HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszTitle);
7473 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7474 HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszHeaderTitle);
7475 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7476 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7477 HeapFree(GetProcessHeap(), 0, (void *)pages[i].pszHeaderSubTitle);
7478 }
7479 HeapFree(GetProcessHeap(), 0, pages);
7480}
GLdouble GLdouble u2
Definition: glext.h:8308
GLuint GLuint num
Definition: glext.h:9618
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
Definition: glfuncs.h:240
#define PSP_USEICONID
Definition: prsht.h:25
#define PSP_USETITLE
Definition: prsht.h:26
#define PSP_DLGINDIRECT
Definition: prsht.h:23
#define IS_INTRESOURCE(i)
Definition: winuser.h:580

Referenced by CryptUIDlgSelectCertificateA(), and prop_sheet_pages_AtoW().

◆ free_store_info()

static void free_store_info ( HWND  tree)
static

Definition at line 1477 of file main.c.

1478{
1480 0);
1481
1482 while (next)
1483 {
1484 TVITEMW item;
1485
1486 memset(&item, 0, sizeof(item));
1487 item.mask = TVIF_HANDLE | TVIF_PARAM;
1488 item.hItem = next;
1490 if (item.lParam)
1491 {
1492 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1493
1494 if (storeInfo->type == SystemStore)
1495 HeapFree(GetProcessHeap(), 0, storeInfo->u.name);
1496 HeapFree(GetProcessHeap(), 0, storeInfo);
1497 }
1499 (LPARAM)next);
1500 }
1501}
#define TVM_GETITEMW
Definition: commctrl.h:3491
struct _TREEITEM * HTREEITEM
Definition: commctrl.h:3269
#define TVIF_HANDLE
Definition: commctrl.h:3275
#define TVGN_CHILD
Definition: commctrl.h:3461
#define TVGN_NEXT
Definition: commctrl.h:3458
#define TVM_GETNEXTITEM
Definition: commctrl.h:3454
static unsigned __int64 next
Definition: rand_nt.c:6

Referenced by select_store_dlg_proc().

◆ general_callback_proc()

static UINT CALLBACK general_callback_proc ( HWND  hwnd,
UINT  msg,
PROPSHEETPAGEW page 
)
static

Definition at line 2563 of file main.c.

2565{
2566 struct IssuerStatement *issuerStatement;
2567
2568 switch (msg)
2569 {
2570 case PSPCB_RELEASE:
2571 issuerStatement =
2573 if (issuerStatement)
2574 {
2575 HeapFree(GetProcessHeap(), 0, issuerStatement->cps);
2576 HeapFree(GetProcessHeap(), 0, issuerStatement->userNotice);
2577 HeapFree(GetProcessHeap(), 0, issuerStatement);
2578 }
2579 break;
2580 }
2581 return 1;
2582}
LPWSTR cps
Definition: main.c:2274
LPWSTR userNotice
Definition: main.c:2275

Referenced by init_general_page().

◆ general_dlg_proc()

static LRESULT CALLBACK general_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 2512 of file main.c.

2514{
2517
2518 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
2519
2520 switch (msg)
2521 {
2522 case WM_INITDIALOG:
2523 page = (PROPSHEETPAGEW *)lp;
2524 pCertViewInfo = (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW)page->lParam;
2525 if (pCertViewInfo->dwFlags & CRYPTUI_DISABLE_ADDTOSTORE)
2528 set_general_info(hwnd, pCertViewInfo);
2529 break;
2530 case WM_COMMAND:
2531 switch (wp)
2532 {
2533 case IDC_ADDTOSTORE:
2535 break;
2537 {
2538 struct IssuerStatement *issuerStatement =
2540
2541 if (issuerStatement)
2542 {
2543 if (issuerStatement->userNotice)
2544 show_user_notice(hwnd, issuerStatement);
2545 else if (issuerStatement->cps)
2546 {
2547 IBindCtx *bctx = NULL;
2548
2549 CreateBindCtx(0, &bctx);
2550 HlinkSimpleNavigateToString(issuerStatement->cps, NULL,
2551 NULL, NULL, bctx, NULL, HLNF_OPENINNEWWINDOW, 0);
2552 IBindCtx_Release(bctx);
2553 }
2554 }
2555 break;
2556 }
2557 }
2558 break;
2559 }
2560 return 0;
2561}
const CRYPTUI_VIEWCERTIFICATE_STRUCTW * PCCRYPTUI_VIEWCERTIFICATE_STRUCTW
Definition: cryptuiapi.h:143
#define CRYPTUI_DISABLE_ADDTOSTORE
Definition: cryptuiapi.h:77
#define IDC_ADDTOSTORE
Definition: cryptuires.h:216
#define IDC_ISSUERSTATEMENT
Definition: cryptuires.h:217
static void set_general_info(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2452
static void show_user_notice(HWND hwnd, struct IssuerStatement *issuerStatement)
Definition: main.c:2506
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
Definition: umon.c:922

Referenced by init_general_page().

◆ get_cert_display_name()

static WCHAR * get_cert_display_name ( PCCERT_CONTEXT  cert)
static

Definition at line 4009 of file main.c.

4010{
4012
4013 if (!name)
4015 return name;
4016}
static WCHAR * get_cert_property_as_string(PCCERT_CONTEXT cert, DWORD prop)
Definition: main.c:3309

Referenced by show_cert_chain().

◆ get_cert_mgr_usages()

static LPSTR get_cert_mgr_usages ( void  )
static

Definition at line 181 of file main.c.

182{
183 static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
184 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
185 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
186 'r','p','o','s','e',0 };
187 LPSTR str = NULL;
188 HKEY key;
189
190 if (!RegCreateKeyExW(HKEY_CURRENT_USER, keyName, 0, NULL, 0, KEY_READ,
191 NULL, &key, NULL))
192 {
193 LONG rc;
194 DWORD type, size;
195
196 rc = RegQueryValueExA(key, "Purpose", NULL, &type, NULL, &size);
197 if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
198 {
200 if (str)
201 {
202 rc = RegQueryValueExA(key, "Purpose", NULL, NULL, (LPBYTE)str,
203 &size);
204 if (rc)
205 {
207 str = NULL;
208 }
209 }
210 }
212 }
213 return str;
214}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_MORE_DATA
Definition: dderror.h:13
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
#define REG_SZ
Definition: layer.c:22
#define KEY_READ
Definition: nt_native.h:1023
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by cert_mgr_advanced_dlg_proc(), create_advanced_filter(), and initialize_purpose_selection().

◆ get_cert_name_string()

static LPWSTR get_cert_name_string ( PCCERT_CONTEXT  pCertContext,
DWORD  dwType,
DWORD  dwFlags 
)
static

Definition at line 1778 of file main.c.

1780{
1781 LPWSTR buf = NULL;
1782 DWORD len;
1783
1785 if (len)
1786 {
1787 buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1788 if (buf)
1790 }
1791 return buf;
1792}

Referenced by add_cert_string_to_control(), field_format_issuer(), field_format_subject(), and get_cert_display_name().

◆ get_cert_property_as_string()

static WCHAR * get_cert_property_as_string ( PCCERT_CONTEXT  cert,
DWORD  prop 
)
static

Definition at line 3309 of file main.c.

3310{
3311 WCHAR *name = NULL;
3312 DWORD cb;
3313
3315 {
3317 if (name)
3318 {
3320 {
3322 name = NULL;
3323 }
3324 }
3325 }
3326 return name;
3327}

Referenced by get_cert_display_name(), and set_general_cert_properties().

◆ get_cert_usages()

static void get_cert_usages ( PCCERT_CONTEXT  cert,
LPWSTR str 
)
static

Definition at line 852 of file main.c.

853{
855 DWORD size;
856
857 /* Get enhanced key usage. Have to check for a property and an extension
858 * separately, because CertGetEnhancedKeyUsage will succeed and return an
859 * empty usage if neither is set. Unfortunately an empty usage implies
860 * no usage is allowed, so we have to distinguish between the two cases.
861 */
863 NULL, &size))
864 {
868 {
870 usage = NULL;
871 }
872 }
874 NULL, &size))
875 {
879 {
881 usage = NULL;
882 }
883 }
884 else
885 usage = NULL;
886 if (usage)
887 {
888 if (usage->cUsageIdentifier)
889 {
890 static const WCHAR commaSpace[] = { ',',' ',0 };
891 DWORD i, len = 1;
892 LPWSTR ptr;
893
894 for (i = 0; i < usage->cUsageIdentifier; i++)
895 {
898 usage->rgpszUsageIdentifier[i],
900
901 if (info)
902 len += lstrlenW(info->pwszName);
903 else
904 len += strlen(usage->rgpszUsageIdentifier[i]);
905 if (i < usage->cUsageIdentifier - 1)
907 }
908 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
909 if (*str)
910 {
911 for (i = 0, ptr = *str; i < usage->cUsageIdentifier; i++)
912 {
915 usage->rgpszUsageIdentifier[i],
917
918 if (info)
919 {
920 lstrcpyW(ptr, info->pwszName);
921 ptr += lstrlenW(info->pwszName);
922 }
923 else
924 {
925 LPCSTR src = usage->rgpszUsageIdentifier[i];
926
927 for (; *src; ptr++, src++)
928 *ptr = *src;
929 *ptr = 0;
930 }
931 if (i < usage->cUsageIdentifier - 1)
932 {
935 }
936 }
937 *ptr = 0;
938 }
940 }
941 else
942 {
943 size = MAX_STRING_LEN * sizeof(WCHAR);
945 if (*str)
947 }
948 }
949 else
950 {
951 size = MAX_STRING_LEN * sizeof(WCHAR);
953 if (*str)
955 }
956}
#define IDS_ALLOWED_PURPOSE_ALL
Definition: cryptuires.h:104
#define IDS_ALLOWED_PURPOSE_NONE
Definition: cryptuires.h:105
static const WCHAR commaSpace[]
Definition: object.c:838
#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
Definition: wincrypt.h:2916
#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
Definition: wincrypt.h:2918

Referenced by add_cert_to_list(), and cert_mgr_show_cert_usages().

◆ get_cps_str_from_qualifier()

static WCHAR * get_cps_str_from_qualifier ( const CRYPT_OBJID_BLOB qualifier)
static

Definition at line 2231 of file main.c.

2232{
2233 LPWSTR qualifierStr = NULL;
2234 CERT_NAME_VALUE *qualifierValue;
2235 DWORD size;
2236
2239 &qualifierValue, &size))
2240 {
2241 size = CertRDNValueToStrW(qualifierValue->dwValueType,
2242 &qualifierValue->Value, NULL, 0);
2243 qualifierStr = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR));
2244 if (qualifierStr)
2245 CertRDNValueToStrW(qualifierValue->dwValueType,
2246 &qualifierValue->Value, qualifierStr, size);
2247 LocalFree(qualifierValue);
2248 }
2249 return qualifierStr;
2250}
DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz)
Definition: str.c:100
static APTTYPEQUALIFIER * qualifier
Definition: compobj.c:79
DWORD dwValueType
Definition: wincrypt.h:272
CERT_RDN_VALUE_BLOB Value
Definition: wincrypt.h:273
#define X509_NAME_VALUE
Definition: wincrypt.h:3370

Referenced by set_issuer_statement().

◆ get_hierarchy_data_from_tree_item()

static struct hierarchy_data * get_hierarchy_data_from_tree_item ( HWND  tree,
HTREEITEM  hItem 
)
static

Definition at line 3983 of file main.c.

3985{
3986 struct hierarchy_data *data = NULL;
3988
3989 do {
3992
3993 if (!parent)
3994 root = hItem;
3995 hItem = parent;
3996 } while (hItem);
3997 if (root)
3998 {
3999 TVITEMW item;
4000
4001 item.mask = TVIF_PARAM;
4002 item.hItem = root;
4004 data = (struct hierarchy_data *)item.lParam;
4005 }
4006 return data;
4007}
struct _root root
#define TVGN_PARENT
Definition: commctrl.h:3460
HTREEITEM hItem
Definition: treelist.h:37

Referenced by hierarchy_dlg_proc(), and show_dialog_for_selected_cert().

◆ get_user_notice_from_qualifier()

static WCHAR * get_user_notice_from_qualifier ( const CRYPT_OBJID_BLOB qualifier)
static

Definition at line 2252 of file main.c.

2253{
2254 LPWSTR str = NULL;
2255 CERT_POLICY_QUALIFIER_USER_NOTICE *qualifierValue;
2256 DWORD size;
2257
2261 &qualifierValue, &size))
2262 {
2264 (lstrlenW(qualifierValue->pszDisplayText) + 1) * sizeof(WCHAR));
2265 if (str)
2266 lstrcpyW(str, qualifierValue->pszDisplayText);
2267 LocalFree(qualifierValue);
2268 }
2269 return str;
2270}
#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE
Definition: wincrypt.h:3414

Referenced by set_issuer_statement().

◆ hierarchy_callback()

static UINT CALLBACK hierarchy_callback ( HWND  hwnd,
UINT  msg,
PROPSHEETPAGEW page 
)
static

Definition at line 4231 of file main.c.

4233{
4234 struct hierarchy_data *data;
4235
4236 switch (msg)
4237 {
4238 case PSPCB_RELEASE:
4239 data = (struct hierarchy_data *)page->lParam;
4240#ifndef __REACTOS__
4241 ImageList_Destroy(data->imageList);
4242#endif
4244 break;
4245 }
4246 return 0;
4247}

Referenced by init_hierarchy_page().

◆ hierarchy_dlg_proc()

static LRESULT CALLBACK hierarchy_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 4153 of file main.c.

4155{
4157 struct hierarchy_data *data;
4158 LRESULT ret = 0;
4160
4161 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
4162
4163 switch (msg)
4164 {
4165 case WM_INITDIALOG:
4166 page = (PROPSHEETPAGEW *)lp;
4167 data = (struct hierarchy_data *)page->lParam;
4169 break;
4170 case WM_NOTIFY:
4171 {
4172 NMHDR *hdr;
4173
4174 hdr = (NMHDR *)lp;
4175 switch (hdr->code)
4176 {
4177 case TVN_SELCHANGEDW:
4178 {
4179 NMTREEVIEWW *nm = (NMTREEVIEWW*)lp;
4181 CRYPT_PROVIDER_SGNR *provSigner;
4182
4185 provSigner = WTHelperGetProvSignerFromChain(
4186 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
4187 data->pCertViewInfo->idxSigner,
4188 data->pCertViewInfo->fCounterSigner,
4189 data->pCertViewInfo->idxCounterSigner);
4192 &provSigner->pasCertChain[selection]);
4193 break;
4194 }
4195 case NM_DBLCLK:
4198 ret = 1;
4199 break;
4200 }
4201 break;
4202 }
4203 case WM_COMMAND:
4204 switch (wp)
4205 {
4208 break;
4209 }
4210 break;
4211 case WM_REFRESH_VIEW:
4212 {
4213 TVITEMW item;
4214
4215 /* Get hierarchy data */
4216 memset(&item, 0, sizeof(item));
4217 item.mask = TVIF_HANDLE | TVIF_PARAM;
4219 0);
4221 /* Delete the contents of the tree */
4223 /* Reinitialize the tree */
4225 break;
4226 }
4227 }
4228 return ret;
4229}
#define IDC_CERTIFICATESTATUSTEXT
Definition: cryptuires.h:228
#define IDC_CERTPATH
Definition: cryptuires.h:226
#define IDC_VIEWCERTIFICATE
Definition: cryptuires.h:225
static void show_dialog_for_selected_cert(HWND hwnd)
Definition: main.c:4108
static void set_certificate_status(HWND hwnd, const CRYPT_PROVIDER_CERT *cert)
Definition: main.c:4069
static void show_cert_hierarchy(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:4100
static DWORD lparam_to_index(struct hierarchy_data *data, LPARAM lp)
Definition: main.c:3971
static struct hierarchy_data * get_hierarchy_data_from_tree_item(HWND tree, HTREEITEM hItem)
Definition: main.c:3983
#define TVN_SELCHANGEDW
Definition: commctrl.h:3653
#define TVI_ROOT
Definition: commctrl.h:3373
#define TVM_DELETEITEM
Definition: commctrl.h:3419
#define TVGN_ROOT
Definition: commctrl.h:3457
CRYPT_PROVIDER_CERT * pasCertChain
Definition: wintrust.h:235
TVITEMW itemNew
Definition: commctrl.h:3643
HTREEITEM hItem
Definition: commctrl.h:3322
LPARAM lParam
Definition: commctrl.h:3330

Referenced by init_hierarchy_page().

◆ import_cert()

static BOOL import_cert ( PCCERT_CONTEXT  cert,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4574 of file main.c.

4575{
4576 HCERTSTORE store;
4577 BOOL ret;
4578
4579 if (!cert)
4580 {
4582 return FALSE;
4583 }
4584 if (hDestCertStore) store = hDestCertStore;
4585 else
4586 {
4587 if (!(store = choose_store_for_cert(cert)))
4588 {
4589 WARN("unable to open certificate store\n");
4590 return FALSE;
4591 }
4592 }
4595 if (!hDestCertStore) CertCloseStore(store, 0);
4596 return ret;
4597}
static HCERTSTORE choose_store_for_cert(PCCERT_CONTEXT cert)
Definition: main.c:4562
#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Definition: wincrypt.h:2486

Referenced by do_import(), and import_store().

◆ import_crl()

static BOOL import_crl ( PCCRL_CONTEXT  crl,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4599 of file main.c.

4600{
4601 HCERTSTORE store;
4602 BOOL ret;
4603
4604 if (!crl)
4605 {
4607 return FALSE;
4608 }
4609 if (hDestCertStore) store = hDestCertStore;
4610 else
4611 {
4612 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4614 {
4615 WARN("unable to open certificate store\n");
4616 return FALSE;
4617 }
4618 }
4621 if (!hDestCertStore) CertCloseStore(store, 0);
4622 return ret;
4623}
BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext)
Definition: store.c:960

Referenced by do_import(), and import_store().

◆ import_ctl()

static BOOL import_ctl ( PCCTL_CONTEXT  ctl,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4625 of file main.c.

4626{
4627 HCERTSTORE store;
4628 BOOL ret;
4629
4630 if (!ctl)
4631 {
4633 return FALSE;
4634 }
4635 if (hDestCertStore) store = hDestCertStore;
4636 else
4637 {
4638 static const WCHAR trust[] = { 'T','r','u','s','t',0 };
4639
4640 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4642 {
4643 WARN("unable to open certificate store\n");
4644 return FALSE;
4645 }
4646 }
4647 ret = CertAddCTLContextToStore(store, ctl,
4649 if (!hDestCertStore) CertCloseStore(store, 0);
4650 return ret;
4651}
BOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext)
Definition: ctl.c:63

Referenced by do_import(), and import_store().

◆ import_file()

static BOOL import_file ( DWORD  dwFlags,
HWND  hwnd,
LPCWSTR  szTitle,
LPCWSTR  fileName,
HCERTSTORE  dest 
)
static

Definition at line 4840 of file main.c.

4842{
4844 BOOL ret;
4845
4846 if ((source = open_store_from_file(dwFlags, fileName, NULL)))
4847 {
4850 }
4851 else
4852 ret = FALSE;
4853 return ret;
4854}
WCHAR szTitle[MAX_LOADSTRING]
Definition: main.c:30
static HCERTSTORE open_store_from_file(DWORD dwFlags, LPCWSTR fileName, DWORD *pContentType)
Definition: main.c:4793
static char * dest
Definition: rtl.c:135

Referenced by do_import().

◆ import_file_dlg_proc()

static LRESULT CALLBACK import_file_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5052 of file main.c.

5054{
5055 LRESULT ret = 0;
5056 struct ImportWizData *data;
5057
5058 switch (msg)
5059 {
5060 case WM_INITDIALOG:
5061 {
5063
5064 data = (struct ImportWizData *)page->lParam;
5066 if (data->fileName)
5067 {
5068 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5069
5070 SendMessageW(fileNameEdit, WM_SETTEXT, 0, (LPARAM)data->fileName);
5071 }
5072 break;
5073 }
5074 case WM_NOTIFY:
5075 {
5076 NMHDR *hdr = (NMHDR *)lp;
5077
5078 switch (hdr->code)
5079 {
5080 case PSN_SETACTIVE:
5083 ret = TRUE;
5084 break;
5085 case PSN_WIZNEXT:
5086 {
5087 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5088 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
5089
5091 if (!len)
5092 {
5093 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5096 ret = 1;
5097 }
5098 else
5099 {
5101 (len + 1) * sizeof(WCHAR));
5102
5103 if (fileName)
5104 {
5105 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
5106 (LPARAM)fileName);
5108 {
5111 ret = 1;
5112 }
5113 else
5114 data->fileName = fileName;
5115 }
5116 }
5117 break;
5118 }
5119 }
5120 break;
5121 }
5122 case WM_COMMAND:
5123 switch (wp)
5124 {
5126 {
5128 WCHAR fileBuf[MAX_PATH];
5129
5131 memset(&ofn, 0, sizeof(ofn));
5132 ofn.lStructSize = sizeof(ofn);
5133 ofn.hwndOwner = hwnd;
5135 ofn.lpstrFile = fileBuf;
5136 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
5137#ifdef __REACTOS__
5139#endif
5140 fileBuf[0] = 0;
5141 if (GetOpenFileNameW(&ofn))
5143 0, (LPARAM)ofn.lpstrFile);
5145 break;
5146 }
5147 }
5148 break;
5149 }
5150 return ret;
5151}
#define OFN_EXPLORER
Definition: commdlg.h:104
#define IDC_IMPORT_FILENAME
Definition: cryptuires.h:248
#define IDC_IMPORT_BROWSE_FILE
Definition: cryptuires.h:249
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4736
static BOOL import_validate_filename(HWND hwnd, struct ImportWizData *data, LPCWSTR fileName)
Definition: main.c:4980
static void import_warning(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, int warningID)
Definition: main.c:4697
static WCHAR * make_import_file_filter(DWORD dwFlags)
Definition: main.c:4940
LPWSTR fileName
Definition: main.c:4862
DWORD Flags
Definition: commdlg.h:342

Referenced by show_import_ui().

◆ import_finish_dlg_proc()

static LRESULT CALLBACK import_finish_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5370 of file main.c.

5372{
5373 LRESULT ret = 0;
5374 struct ImportWizData *data;
5375
5376 switch (msg)
5377 {
5378 case WM_INITDIALOG:
5379 {
5382 RECT rc;
5384
5385 data = (struct ImportWizData *)page->lParam;
5388 (WPARAM)data->titleFont, TRUE);
5389 GetWindowRect(lv, &rc);
5390 column.mask = LVCF_WIDTH;
5391 column.cx = (rc.right - rc.left) / 2 - 2;
5395 break;
5396 }
5397 case WM_NOTIFY:
5398 {
5399 NMHDR *hdr = (NMHDR *)lp;
5400
5401 switch (hdr->code)
5402 {
5403 case PSN_SETACTIVE:
5404 {
5406
5412 ret = TRUE;
5413 break;
5414 }
5415 case PSN_WIZFINISH:
5416 {
5418 if ((data->success = do_import(data->dwFlags, hwnd,
5419 data->pwszWizardTitle, &data->importSrc, data->hDestCertStore)))
5420 {
5422 LPCWSTR pTitle;
5423
5424 if (data->pwszWizardTitle)
5425 pTitle = data->pwszWizardTitle;
5426 else
5427 {
5429 pTitle = title;
5430 }
5432 MessageBoxW(hwnd, message, pTitle, MB_OK);
5433 }
5434 else
5435 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5437 break;
5438 }
5439 }
5440 break;
5441 }
5442 }
5443 return ret;
5444}
#define IDS_IMPORT_WIZARD
Definition: cryptuires.h:67
#define IDC_IMPORT_SETTINGS
Definition: cryptuires.h:254
#define IDC_IMPORT_TITLE
Definition: cryptuires.h:247
#define IDS_IMPORT_FAILED
Definition: cryptuires.h:96
#define IDS_IMPORT_SUCCEEDED
Definition: cryptuires.h:95
static void show_import_details(HWND lv, struct ImportWizData *data)
Definition: main.c:5268

Referenced by show_import_ui().

◆ import_store()

static BOOL import_store ( DWORD  dwFlags,
HWND  hwnd,
LPCWSTR  szTitle,
HCERTSTORE  source,
HCERTSTORE  dest 
)
static

Definition at line 4761 of file main.c.

4763{
4764 BOOL ret;
4765
4767 {
4770 PCCTL_CONTEXT ctl = NULL;
4771
4772 do {
4774 if (cert)
4776 } while (ret && cert);
4777 do {
4779 if (crl)
4780 ret = import_crl(crl, dest);
4781 } while (ret && crl);
4782 do {
4783 ctl = CertEnumCTLsInStore(source, ctl);
4784 if (ctl)
4785 ret = import_ctl(ctl, dest);
4786 } while (ret && ctl);
4787 }
4788 else
4790 return ret;
4791}
static BOOL check_store_context_type(DWORD dwFlags, HCERTSTORE store)
Definition: main.c:4722

Referenced by do_import(), and import_file().

◆ import_store_dlg_proc()

static LRESULT CALLBACK import_store_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5153 of file main.c.

5155{
5156 LRESULT ret = 0;
5157 struct ImportWizData *data;
5158
5159 switch (msg)
5160 {
5161 case WM_INITDIALOG:
5162 {
5164
5165 data = (struct ImportWizData *)page->lParam;
5167 if (!data->hDestCertStore)
5168 {
5170 0, 0);
5174 }
5175 else
5176 {
5177 WCHAR storeTitle[MAX_STRING_LEN];
5178
5180 0, 0);
5187 0, (LPARAM)storeTitle);
5188 }
5189 break;
5190 }
5191 case WM_NOTIFY:
5192 {
5193 NMHDR *hdr = (NMHDR *)lp;
5194
5195 switch (hdr->code)
5196 {
5197 case PSN_SETACTIVE:
5200 ret = TRUE;
5201 break;
5202 case PSN_WIZNEXT:
5203 {
5206 !data->hDestCertStore)
5207 {
5208 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5211 ret = 1;
5212 }
5213 break;
5214 }
5215 }
5216 break;
5217 }
5218 case WM_COMMAND:
5219 switch (wp)
5220 {
5223 data->autoDest = TRUE;
5226 break;
5229 data->autoDest = FALSE;
5232 break;
5234 {
5237 CRYPTUI_ENUM_DATA enumData = { 0, NULL, 1, &enumArgs };
5238 CRYPTUI_SELECTSTORE_INFO_W selectInfo;
5239 HCERTSTORE store;
5240
5242 selectInfo.dwSize = sizeof(selectInfo);
5243 selectInfo.parent = hwnd;
5245 selectInfo.pwszTitle = NULL;
5246 selectInfo.pwszText = NULL;
5247 selectInfo.pEnumData = &enumData;
5248 selectInfo.pfnSelectedStoreCallback = NULL;
5249 if ((store = CryptUIDlgSelectStoreW(&selectInfo)))
5250 {
5251 WCHAR storeTitle[MAX_STRING_LEN];
5252
5254 ARRAY_SIZE(storeTitle));
5256 0, (LPARAM)storeTitle);
5257 data->hDestCertStore = store;
5258 data->freeDest = TRUE;
5259 }
5260 break;
5261 }
5262 }
5263 break;
5264 }
5265 return ret;
5266}
#define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE
Definition: cryptuiapi.h:328
#define IDS_IMPORT_DEST_DETERMINED
Definition: cryptuires.h:83
#define IDC_IMPORT_AUTO_STORE
Definition: cryptuires.h:250
#define IDC_IMPORT_SPECIFY_STORE
Definition: cryptuires.h:251
#define IDS_IMPORT_SELECT_STORE
Definition: cryptuires.h:84
#define IDC_IMPORT_STORE
Definition: cryptuires.h:252
#define IDC_IMPORT_BROWSE_STORE
Definition: cryptuires.h:253
#define CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE
Definition: main.c:1347
CRYPTUI_ENUM_DATA * pEnumData
Definition: main.c:1368
PFN_SELECTED_STORE_CB pfnSelectedStoreCallback
Definition: main.c:1369

Referenced by show_import_ui().

◆ import_validate_filename()

static BOOL import_validate_filename ( HWND  hwnd,
struct ImportWizData data,
LPCWSTR  fileName 
)
static

Definition at line 4980 of file main.c.

4982{
4983 HANDLE file;
4984 BOOL ret = FALSE;
4985
4987 OPEN_EXISTING, 0, NULL);
4989 {
4990 HCERTSTORE source = open_store_from_file(data->dwFlags, fileName,
4991 &data->contentType);
4992 int warningID = 0;
4993
4994 if (!source)
4995 warningID = IDS_IMPORT_BAD_FORMAT;
4996 else if (!check_store_context_type(data->dwFlags, source))
4997 warningID = IDS_IMPORT_TYPE_MISMATCH;
4998 else
4999 {
5000 data->importSrc.dwSubjectChoice =
5002 data->importSrc.u.hCertStore = source;
5003 data->freeSource = TRUE;
5004 ret = TRUE;
5005 }
5006 if (warningID)
5007 {
5008 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5009 warningID);
5010 }
5012 }
5013 else
5014 {
5016 LPCWSTR pTitle;
5017 LPWSTR msgBuf, fullError;
5018
5019 if (data->pwszWizardTitle)
5020 pTitle = data->pwszWizardTitle;
5021 else
5022 {
5024 pTitle = title;
5025 }
5029 GetLastError(), 0, (LPWSTR) &msgBuf, 0, NULL);
5030 fullError = HeapAlloc(GetProcessHeap(), 0,
5031 (lstrlenW(error) + lstrlenW(fileName) + lstrlenW(msgBuf) + 3)
5032 * sizeof(WCHAR));
5033 if (fullError)
5034 {
5035 LPWSTR ptr = fullError;
5036
5037 lstrcpyW(ptr, error);
5038 ptr += lstrlenW(error);
5039 lstrcpyW(ptr, fileName);
5040 ptr += lstrlenW(fileName);
5041 *ptr++ = ':';
5042 *ptr++ = '\n';
5043 lstrcpyW(ptr, msgBuf);
5044 MessageBoxW(hwnd, fullError, pTitle, MB_ICONERROR | MB_OK);
5045 HeapFree(GetProcessHeap(), 0, fullError);
5046 }
5047 LocalFree(msgBuf);
5048 }
5049 return ret;
5050}
#define IDS_IMPORT_BAD_FORMAT
Definition: cryptuires.h:81
#define IDS_IMPORT_TYPE_MISMATCH
Definition: cryptuires.h:68
#define GENERIC_READ
Definition: compat.h:135

Referenced by import_file_dlg_proc().

◆ import_warn_type_mismatch()

static void import_warn_type_mismatch ( DWORD  dwFlags,
HWND  hwnd,
LPCWSTR  szTitle 
)
static

Definition at line 4717 of file main.c.

Referenced by do_import(), and import_store().

◆ import_warning()

static void import_warning ( DWORD  dwFlags,
HWND  hwnd,
LPCWSTR  szTitle,
int  warningID 
)
static

Definition at line 4697 of file main.c.

4699{
4700 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
4701 {
4703 LPCWSTR pTitle;
4704
4705 if (szTitle)
4706 pTitle = szTitle;
4707 else
4708 {
4710 pTitle = title;
4711 }
4714 }
4715}

Referenced by import_file_dlg_proc(), import_finish_dlg_proc(), import_store_dlg_proc(), import_validate_filename(), and import_warn_type_mismatch().

◆ import_welcome_dlg_proc()

static LRESULT CALLBACK import_welcome_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 4871 of file main.c.

4873{
4874 LRESULT ret = 0;
4875
4876 switch (msg)
4877 {
4878 case WM_INITDIALOG:
4879 {
4880 struct ImportWizData *data;
4882 WCHAR fontFace[MAX_STRING_LEN];
4883 HDC hDC = GetDC(hwnd);
4884 int height;
4885
4886 data = (struct ImportWizData *)page->lParam;
4889 data->titleFont = CreateFontW(height, 0, 0, 0, FW_BOLD, 0, 0, 0,
4893 (WPARAM)data->titleFont, TRUE);
4894 ReleaseDC(hwnd, hDC);
4895 break;
4896 }
4897 case WM_NOTIFY:
4898 {
4899 NMHDR *hdr = (NMHDR *)lp;
4900
4901 switch (hdr->code)
4902 {
4903 case PSN_SETACTIVE:
4905 ret = TRUE;
4906 break;
4907 }
4908 break;
4909 }
4910 }
4911 return ret;
4912}

Referenced by show_import_ui().

◆ index_to_lparam()

static LPARAM index_to_lparam ( struct hierarchy_data data,
DWORD  index 
)
static

Definition at line 3956 of file main.c.

3957{
3959 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
3960 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
3961 data->pCertViewInfo->idxCounterSigner);
3962
3963 /* Takes advantage of the fact that a pointer is 32-bit aligned, and
3964 * therefore always even.
3965 */
3966 if (index == provSigner->csCertChain - 1)
3967 return (LPARAM)data;
3968 return index << 1 | 1;
3969}

Referenced by show_cert_chain().

◆ init_columns()

static void init_columns ( HWND  lv,
DWORD  flags 
)
static

Definition at line 7024 of file main.c.

7025{
7028 DWORD i = 0;
7029
7031 column.mask = LVCF_WIDTH | LVCF_TEXT;
7032 column.cx = 90;
7033 column.pszText = buf;
7035 {
7038 }
7040 {
7043 }
7045 {
7048 }
7050 {
7053 }
7055 {
7058 }
7060 {
7063 }
7064}
#define IDS_INTENDED_USE_COLUMN
Definition: cryptuires.h:176
#define IDS_LOCATION_COLUMN
Definition: cryptuires.h:177

Referenced by select_cert_dlg_proc().

◆ init_detail_page()

static BOOL init_detail_page ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
BOOL pfPropertiesChanged,
PROPSHEETPAGEW page 
)
static

Definition at line 3921 of file main.c.

3923{
3924 BOOL ret;
3926 sizeof(struct detail_data));
3927
3928 if (data)
3929 {
3930 data->pCertViewInfo = pCertViewInfo;
3931 data->pfPropertiesChanged = pfPropertiesChanged;
3932 data->cFields = 0;
3933 data->fields = NULL;
3934 memset(page, 0, sizeof(PROPSHEETPAGEW));
3935 page->dwSize = sizeof(PROPSHEETPAGEW);
3936 page->dwFlags = PSP_USECALLBACK;
3937 page->pfnCallback = detail_callback;
3938 page->hInstance = hInstance;
3939 page->u.pszTemplate = MAKEINTRESOURCEW(IDD_DETAIL);
3940 page->pfnDlgProc = detail_dlg_proc;
3941 page->lParam = (LPARAM)data;
3942 ret = TRUE;
3943 }
3944 else
3945 ret = FALSE;
3946 return ret;
3947}
#define IDD_DETAIL
Definition: cryptuires.h:184
static UINT CALLBACK detail_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:3905
static LRESULT CALLBACK detail_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3798
struct _PROPSHEETPAGEW PROPSHEETPAGEW
#define PSP_USECALLBACK
Definition: prsht.h:30

Referenced by show_cert_dialog().

◆ init_general_page()

static void init_general_page ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
PROPSHEETPAGEW page 
)
static

Definition at line 2584 of file main.c.

2586{
2587 memset(page, 0, sizeof(PROPSHEETPAGEW));
2588 page->dwSize = sizeof(PROPSHEETPAGEW);
2589 page->dwFlags = PSP_USECALLBACK;
2590 page->pfnCallback = general_callback_proc;
2591 page->hInstance = hInstance;
2592 page->u.pszTemplate = MAKEINTRESOURCEW(IDD_GENERAL);
2593 page->pfnDlgProc = general_dlg_proc;
2594 page->lParam = (LPARAM)pCertViewInfo;
2595}
#define IDD_GENERAL
Definition: resource.h:12
static LRESULT CALLBACK general_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:2512
static UINT CALLBACK general_callback_proc(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:2563

Referenced by show_cert_dialog().

◆ init_hierarchy_page()

static BOOL init_hierarchy_page ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
PROPSHEETPAGEW page 
)
static

Definition at line 4249 of file main.c.

4251{
4253 sizeof(struct hierarchy_data));
4254 BOOL ret = FALSE;
4255
4256 if (data)
4257 {
4258 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
4259 if (data->imageList)
4260 {
4261 HBITMAP bmp;
4262 COLORREF backColor = RGB(255, 0, 255);
4263
4264 data->pCertViewInfo = pCertViewInfo;
4265 data->selectedCert = 0xffffffff;
4266
4268 ImageList_AddMasked(data->imageList, bmp, backColor);
4270 ImageList_SetBkColor(data->imageList, CLR_NONE);
4271
4272 memset(page, 0, sizeof(PROPSHEETPAGEW));
4273 page->dwSize = sizeof(PROPSHEETPAGEW);
4274 page->dwFlags = PSP_USECALLBACK;
4275 page->hInstance = hInstance;
4276 page->u.pszTemplate = MAKEINTRESOURCEW(IDD_HIERARCHY);
4277 page->pfnDlgProc = hierarchy_dlg_proc;
4278 page->lParam = (LPARAM)data;
4279 page->pfnCallback = hierarchy_callback;
4280 ret = TRUE;
4281 }
4282 else
4284 }
4285 return ret;
4286}
#define IDD_HIERARCHY
Definition: cryptuires.h:185
static UINT CALLBACK hierarchy_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:4231
static LRESULT CALLBACK hierarchy_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:4153
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
Definition: main.c:3951

Referenced by show_cert_dialog().

◆ initialize_purpose_selection()

static void initialize_purpose_selection ( HWND  hwnd)
static

Definition at line 222 of file main.c.

223{
227 int index;
228
236 if ((usages = get_cert_mgr_usages()))
237 {
238 LPSTR ptr, comma;
239
240 for (ptr = usages, comma = strchr(ptr, ','); ptr && *ptr;
241 ptr = comma ? comma + 1 : NULL,
242 comma = ptr ? strchr(ptr, ',') : NULL)
243 {
245
246 if (comma)
247 *comma = 0;
249 {
251 (LPARAM)info->pwszName);
253 }
254 }
256 }
257}
#define IDS_PURPOSE_ALL
Definition: cryptuires.h:98
#define IDS_PURPOSE_ADVANCED
Definition: cryptuires.h:99

Referenced by cert_mgr_dlg_proc().

◆ is_ca_cert()

static BOOL is_ca_cert ( PCCERT_CONTEXT  cert,
BOOL  defaultIfNotSpecified 
)
static

Definition at line 4524 of file main.c.

4525{
4526 BOOL isCA = defaultIfNotSpecified;
4528 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension);
4529
4530 if (ext)
4531 {
4533 DWORD size = 0;
4534
4536 ext->Value.pbData, ext->Value.cbData, CRYPT_DECODE_ALLOC_FLAG,
4537 NULL, &info, &size))
4538 {
4539 if (info->SubjectType.cbData == 1)
4540 isCA = info->SubjectType.pbData[0] & CERT_CA_SUBJECT_FLAG;
4541 LocalFree(info);
4542 }
4543 }
4544 else
4545 {
4547 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension);
4548 if (ext)
4549 {
4552
4554 szOID_BASIC_CONSTRAINTS2, ext->Value.pbData, ext->Value.cbData,
4555 0, NULL, &info, &size))
4556 isCA = info.fCA;
4557 }
4558 }
4559 return isCA;
4560}
#define szOID_BASIC_CONSTRAINTS2
Definition: wincrypt.h:3189
#define szOID_BASIC_CONSTRAINTS
Definition: wincrypt.h:3183
#define CERT_CA_SUBJECT_FLAG
Definition: wincrypt.h:378
struct _CERT_BASIC_CONSTRAINTS2_INFO CERT_BASIC_CONSTRAINTS2_INFO

Referenced by choose_store_for_cert().

◆ is_oid_in_list()

static BOOL is_oid_in_list ( HWND  hwnd,
LPCSTR  oid 
)
static

Definition at line 3221 of file main.c.

3222{
3224 != -1;
3225}

Referenced by add_purpose_dlg_proc().

◆ is_valid_oid()

static BOOL is_valid_oid ( LPCSTR  oid)
static

Definition at line 3183 of file main.c.

3184{
3185 BOOL ret;
3186
3187 if (oid[0] != '0' && oid[0] != '1' && oid[0] != '2')
3188 ret = FALSE;
3189 else if (oid[1] != '.')
3190 ret = FALSE;
3191 else if (!oid[2])
3192 ret = FALSE;
3193 else
3194 {
3195 const char *ptr;
3196 BOOL expectNum = TRUE;
3197
3198 for (ptr = oid + 2, ret = TRUE; ret && *ptr; ptr++)
3199 {
3200 if (expectNum)
3201 {
3202 if (!isdigit(*ptr))
3203 ret = FALSE;
3204 else if (*(ptr + 1) == '.')
3205 expectNum = FALSE;
3206 }
3207 else
3208 {
3209 if (*ptr != '.')
3210 ret = FALSE;
3211 else if (!(*(ptr + 1)))
3212 ret = FALSE;
3213 else
3214 expectNum = TRUE;
3215 }
3216 }
3217 }
3218 return ret;
3219}
#define isdigit(c)
Definition: acclib.h:68

Referenced by add_purpose_dlg_proc().

◆ lparam_to_index()

static DWORD lparam_to_index ( struct hierarchy_data data,
LPARAM  lp 
)
inlinestatic

Definition at line 3971 of file main.c.

3972{
3974 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
3975 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
3976 data->pCertViewInfo->idxCounterSigner);
3977
3978 if (!(lp & 1))
3979 return provSigner->csCertChain - 1;
3980 return lp >> 1;
3981}

Referenced by hierarchy_dlg_proc(), and show_dialog_for_selected_cert().

◆ make_export_file_filter()

static WCHAR * make_export_file_filter ( DWORD  exportFormat,
DWORD  subjectChoice 
)
static

Definition at line 6181 of file main.c.

6182{
6183 int baseLen, allLen, totalLen = 2, baseID;
6184 LPWSTR filter = NULL, baseFilter, all;
6185 LPCWSTR filterStr;
6186
6187 switch (exportFormat)
6188 {
6191 filterStr = export_filter_cert;
6192 break;
6194 baseID = IDS_EXPORT_FILTER_PFX;
6195 filterStr = export_filter_pfx;
6196 break;
6198 baseID = IDS_EXPORT_FILTER_CMS;
6199 filterStr = export_filter_cms;
6200 break;
6201 default:
6202 switch (subjectChoice)
6203 {
6205 baseID = IDS_EXPORT_FILTER_CRL;
6206 filterStr = export_filter_crl;
6207 break;
6209 baseID = IDS_EXPORT_FILTER_CTL;
6210 filterStr = export_filter_ctl;
6211 break;
6214 filterStr = export_filter_sst;
6215 break;
6216 default:
6217 baseID = IDS_EXPORT_FILTER_CERT;
6218 filterStr = export_filter_cert;
6219 break;
6220 }
6221 }
6222 baseLen = LoadStringW(hInstance, baseID, (LPWSTR)&baseFilter, 0);
6223 totalLen += baseLen + lstrlenW(filterStr) + 2;
6225 totalLen += allLen + lstrlenW(filter_all) + 2;
6226 filter = HeapAlloc(GetProcessHeap(), 0, totalLen * sizeof(WCHAR));
6227 if (filter)
6228 {
6229 LPWSTR ptr;
6230
6231 ptr = filter;
6232 memcpy(ptr, baseFilter, baseLen * sizeof(WCHAR));
6233 ptr += baseLen;
6234 *ptr++ = 0;
6235 lstrcpyW(ptr, filterStr);
6236 ptr += lstrlenW(filterStr) + 1;
6237 memcpy(ptr, all, allLen * sizeof(WCHAR));
6238 ptr += allLen;
6239 *ptr++ = 0;
6241 ptr += lstrlenW(filter_all) + 1;
6242 *ptr++ = 0;
6243 }
6244 return filter;
6245}
#define IDS_EXPORT_FILTER_CMS
Definition: cryptuires.h:158
#define IDS_IMPORT_FILTER_ALL
Definition: cryptuires.h:79
#define IDS_EXPORT_FILTER_BASE64_CERT
Definition: cryptuires.h:155
#define IDS_EXPORT_FILTER_CTL
Definition: cryptuires.h:157
#define IDS_EXPORT_FILTER_SERIALIZED_CERT_STORE
Definition: cryptuires.h:160
#define IDS_EXPORT_FILTER_PFX
Definition: cryptuires.h:159
#define IDS_EXPORT_FILTER_CERT
Definition: cryptuires.h:154
#define IDS_EXPORT_FILTER_CRL
Definition: cryptuires.h:156
static const WCHAR export_filter_pfx[]
Definition: main.c:6178
static const WCHAR export_filter_ctl[]
Definition: main.c:6176
static const WCHAR export_filter_cert[]
Definition: main.c:6174
static const WCHAR export_filter_sst[]
Definition: main.c:6179
static const WCHAR filter_all[]
Definition: main.c:4923
static const WCHAR export_filter_cms[]
Definition: main.c:6177
static const WCHAR export_filter_crl[]
Definition: main.c:6175

Referenced by export_file_dlg_proc().

◆ make_import_file_filter()

static WCHAR * make_import_file_filter ( DWORD  dwFlags)
static

Definition at line 4940 of file main.c.

4941{
4942 DWORD i;
4943 int len, totalLen = 2;
4944 LPWSTR filter = NULL, str;
4945
4946 for (i = 0; i < ARRAY_SIZE(import_filters); i++)
4947 {
4948 if (!import_filters[i].allowFlags || !dwFlags ||
4950 {
4952 totalLen += len + lstrlenW(import_filters[i].filter) + 2;
4953 }
4954 }
4955 filter = HeapAlloc(GetProcessHeap(), 0, totalLen * sizeof(WCHAR));
4956 if (filter)
4957 {
4958 LPWSTR ptr;
4959
4960 ptr = filter;
4961 for (i = 0; i < ARRAY_SIZE(import_filters); i++)
4962 {
4963 if (!import_filters[i].allowFlags || !dwFlags ||
4965 {
4967 (LPWSTR)&str, 0);
4968 memcpy(ptr, str, len * sizeof(WCHAR));
4969 ptr += len;
4970 *ptr++ = 0;
4973 }
4974 }
4975 *ptr++ = 0;
4976 }
4977 return filter;
4978}
DWORD allowFlags
Definition: main.c:4928
static const struct @371 import_filters[]

Referenced by import_file_dlg_proc().

◆ open_store_from_file()

static HCERTSTORE open_store_from_file ( DWORD  dwFlags,
LPCWSTR  fileName,
DWORD pContentType 
)
static

Definition at line 4793 of file main.c.

4795{
4796 HCERTSTORE store = NULL;
4797 DWORD contentType = 0, expectedContentTypeFlags;
4798
4799 if (dwFlags &
4802 {
4803 expectedContentTypeFlags =
4808 expectedContentTypeFlags |=
4812 expectedContentTypeFlags |=
4816 expectedContentTypeFlags |=
4819 }
4820 else
4821 expectedContentTypeFlags =
4831
4833 expectedContentTypeFlags, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL,
4834 &contentType, NULL, &store, NULL, NULL);
4835 if (pContentType)
4836 *pContentType = contentType;
4837 return store;
4838}
BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext)
Definition: object.c:699
#define CERT_QUERY_CONTENT_FLAG_CTL
Definition: wincrypt.h:3544
#define CERT_QUERY_OBJECT_FILE
Definition: wincrypt.h:3526
#define CERT_QUERY_CONTENT_FLAG_CRL
Definition: wincrypt.h:3545
#define CERT_QUERY_CONTENT_FLAG_CERT
Definition: wincrypt.h:3543
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
Definition: wincrypt.h:3548
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
Definition: wincrypt.h:3554
#define CERT_QUERY_FORMAT_FLAG_ALL
Definition: wincrypt.h:3589
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
Definition: wincrypt.h:3546
#define CERT_QUERY_CONTENT_FLAG_PFX
Definition: wincrypt.h:3561
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
Definition: wincrypt.h:3552
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
Definition: wincrypt.h:3550

Referenced by import_file(), and import_validate_filename().

◆ prop_sheet_pages_AtoW()

static PROPSHEETPAGEW * prop_sheet_pages_AtoW ( LPCPROPSHEETPAGEA  pages,
DWORD  num 
)
static

Definition at line 7482 of file main.c.

7483{
7484 PROPSHEETPAGEW *psp;
7485 DWORD i, size = sizeof(*psp) * num;
7486
7487 psp = HeapAlloc(GetProcessHeap(), 0, size);
7488 if (!psp)
7489 return NULL;
7490 memcpy(psp, pages, size);
7491 for (i = 0; i < num; i++)
7492 {
7493 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
7494 psp[i].u.pszTemplate = NULL;
7495 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
7496 psp[i].u2.pszIcon = NULL;
7497 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7498 psp[i].pszTitle = NULL;
7499 if (pages[i].dwFlags & PSP_USECALLBACK)
7500 psp[i].pfnCallback = NULL;
7501 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7502 psp[i].pszHeaderTitle = NULL;
7503 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7504 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7505 psp[i].pszHeaderSubTitle = NULL;
7506 }
7507 for (i = 0; i < num; i++)
7508 {
7509 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].u.pszTemplate))
7510 {
7511 if (!(psp[i].u.pszTemplate = strdupAtoW( pages[i].u.pszTemplate ))) goto error;
7512 }
7513 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].u2.pszIcon))
7514 {
7515 if (!(psp[i].u2.pszIcon = strdupAtoW( pages[i].u2.pszIcon ))) goto error;
7516 }
7517 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7518 {
7519 if (!(psp[i].pszTitle = strdupAtoW( pages[i].pszTitle ))) goto error;
7520 }
7521 if (pages[i].dwFlags & PSP_USECALLBACK)
7522 FIXME("ignoring pfnCallback\n");
7523 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7524 {
7525 if (!(psp[i].pszHeaderTitle = strdupAtoW( pages[i].pszHeaderTitle ))) goto error;
7526 }
7527 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7528 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7529 {
7530 if (!(psp[i].pszHeaderSubTitle = strdupAtoW( pages[i].pszHeaderSubTitle ))) goto error;
7531 }
7532 }
7533 return psp;
7534error:
7536 return NULL;
7537}
LPCWSTR pszIcon
Definition: prsht.h:223
LPCWSTR pszTemplate
Definition: prsht.h:218
LPCWSTR pszTitle
Definition: prsht.h:225

Referenced by CryptUIDlgSelectCertificateA().

◆ read_text_callback()

static DWORD CALLBACK read_text_callback ( DWORD_PTR  dwCookie,
LPBYTE  buf,
LONG  cb,
LONG pcb 
)
static

Definition at line 1721 of file main.c.

1723{
1724 struct ReadStringStruct *string = (struct ReadStringStruct *)dwCookie;
1725 LONG cch = min(cb / sizeof(WCHAR), string->len - string->pos);
1726
1727 TRACE("(%p, %p, %d, %p)\n", string, buf, cb, pcb);
1728
1729 memmove(buf, string->buf + string->pos, cch * sizeof(WCHAR));
1730 string->pos += cch;
1731 *pcb = cch * sizeof(WCHAR);
1732 return 0;
1733}
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202

Referenced by add_unformatted_text_to_control().

◆ redraw_states()

static void redraw_states ( HWND  list,
BOOL  enabled 
)
static

Definition at line 3329 of file main.c.

3330{
3331 int items = SendMessageW(list, LVM_GETITEMCOUNT, 0, 0), i;
3332
3333 for (i = 0; i < items; i++)
3334 {
3335 BOOL change = FALSE;
3336 int state;
3337
3339 /* This reverses the INDEXTOSTATEIMAGEMASK shift. There doesn't appear
3340 * to be a handy macro for it.
3341 */
3342 state >>= 12;
3343 if (enabled)
3344 {
3346 {
3348 change = TRUE;
3349 }
3351 {
3353 change = TRUE;
3354 }
3355 }
3356 else
3357 {
3359 {
3361 change = TRUE;
3362 }
3364 {
3366 change = TRUE;
3367 }
3368 }
3369 if (change)
3370 {
3371 LVITEMW item;
3372
3374 item.stateMask = LVIS_STATEIMAGEMASK;
3376 }
3377 }
3378}
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
#define LVM_GETITEMSTATE
Definition: commctrl.h:2680
#define LVM_SETITEMSTATE
Definition: commctrl.h:2677

Referenced by select_purposes().

◆ refresh_details_view()

static void refresh_details_view ( HWND  hwnd)
static

Definition at line 3785 of file main.c.

3786{
3788 int curSel;
3789 struct detail_data *data;
3790
3791 curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0);
3792 /* Actually, any index will do, since they all store the same data value */
3793 data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, curSel, 0);
3795 set_fields_selection(hwnd, data, curSel);
3796}

Referenced by detail_dlg_proc().

◆ refresh_propsheet_pages()

static BOOL CALLBACK refresh_propsheet_pages ( HWND  hwnd,
LPARAM  lParam 
)
static

Definition at line 3528 of file main.c.

3529{
3532 return TRUE;
3533}
#define WC_DIALOG
Definition: undocuser.h:11
DWORD WINAPI GetClassLongW(_In_ HWND, _In_ int)
#define GCW_ATOM
Definition: winuser.h:661

Referenced by apply_general_changes().

◆ refresh_store_certs()

static void refresh_store_certs ( HWND  hwnd)
static

Definition at line 572 of file main.c.

Referenced by cert_mgr_clear_cert_selection(), and cert_mgr_dlg_proc().

◆ save_base64()

static BOOL save_base64 ( HANDLE  file,
const BYTE pb,
DWORD  cb 
)
static

Definition at line 6458 of file main.c.

6459{
6460 BOOL ret;
6461 DWORD size = 0;
6462
6464 {
6466
6467 if (buf)
6468 {
6470 &size)))
6471 ret = WriteFile(file, buf, size, &size, NULL);
6473 }
6474 else
6475 {
6477 ret = FALSE;
6478 }
6479 }
6480 return ret;
6481}
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
BOOL WINAPI CryptBinaryToStringA(const BYTE *pbBinary, DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString)
Definition: base64.c:253
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define CRYPT_STRING_BASE64
Definition: wincrypt.h:2985

Referenced by do_export().

◆ save_cert_as_cms()

static BOOL save_cert_as_cms ( HANDLE  file,
PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo,
BOOL  includeChain 
)
static

Definition at line 6489 of file main.c.

6491{
6492 BOOL ret;
6495
6496 if (store)
6497 {
6498 if (includeChain)
6499 {
6502
6503 if (addlStore)
6504 {
6505 DWORD i;
6506
6507 ret = TRUE;
6508 for (i = 0; ret && i < pExportInfo->cStores; i++)
6509 ret = CertAddStoreToCollection(addlStore,
6510 pExportInfo->rghStores, 0, 0);
6511 if (ret)
6512 {
6514
6516 pExportInfo->u.pCertContext, NULL, addlStore, NULL, 0,
6517 NULL, &chain);
6518 if (ret)
6519 {
6520 DWORD j;
6521
6522 for (i = 0; ret && i < chain->cChain; i++)
6523 for (j = 0; ret && j < chain->rgpChain[i]->cElement;
6524 j++)
6526 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6529 }
6530 else
6531 {
6532 /* No chain could be created, just add the individual
6533 * cert to the message.
6534 */
6536 pExportInfo->u.pCertContext, CERT_STORE_ADD_ALWAYS,
6537 NULL);
6538 }
6539 }
6540 CertCloseStore(addlStore, 0);
6541 }
6542 else
6543 ret = FALSE;
6544 }
6545 else
6547 pExportInfo->u.pCertContext, CERT_STORE_ADD_ALWAYS, NULL);
6548 if (ret)
6549 ret = save_store_as_cms(file, store);
6550 CertCloseStore(store, 0);
6551 }
6552 else
6553 ret = FALSE;
6554 return ret;
6555}
BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore, HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority)
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, PCCERT_CONTEXT pCertContext, LPFILETIME pTime, HCERTSTORE hAdditionalStore, PCERT_CHAIN_PARA pChainPara, DWORD dwFlags, LPVOID pvReserved, PCCERT_CHAIN_CONTEXT *ppChainContext)
Definition: chain.c:2879
VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
Definition: chain.c:2960
HCERTSTORE * rghStores
Definition: cryptuiapi.h:278
struct sock * chain
Definition: tcpcore.h:1
#define CERT_STORE_PROV_COLLECTION
Definition: wincrypt.h:2261

Referenced by do_export().

◆ save_cert_mgr_usages()

static void save_cert_mgr_usages ( HWND  hwnd)
static

Definition at line 664 of file main.c.

665{
666 static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
667 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
668 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
669 'r','p','o','s','e',0 };
670 HKEY key;
672 int purposes = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
674 LPSTR str = NULL;
675
676 item.mask = LVIF_STATE | LVIF_PARAM;
677 item.iSubItem = 0;
678 item.stateMask = LVIS_STATEIMAGEMASK;
679 for (i = 0; i < purposes; i++)
680 {
681 item.iItem = i;
682 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
683 {
684 int state = item.state >> 12;
685
687 {
689 BOOL firstString = TRUE;
690
691 if (!str)
693 strlen(info->pszOID) + 1);
694 else
695 {
697 strlen(str) + 1 + strlen(info->pszOID) + 1);
698 firstString = FALSE;
699 }
700 if (str)
701 {
702 LPSTR ptr = firstString ? str : str + strlen(str);
703
704 if (!firstString)
705 *ptr++ = ',';
706 strcpy(ptr, info->pszOID);
707 }
708 }
709 }
710 }
712 NULL, &key, NULL))
713 {
714 if (str)
715 RegSetValueExA(key, "Purpose", 0, REG_SZ, (const BYTE *)str,
716 strlen(str) + 1);
717 else
718 RegDeleteValueA(key, "Purpose");
720 }
722}
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4799
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
Definition: reg.c:2287
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041

Referenced by cert_mgr_advanced_dlg_proc().

◆ save_der()

static BOOL save_der ( HANDLE  file,
const BYTE pb,
DWORD  cb 
)
inlinestatic

Definition at line 6451 of file main.c.

6452{
6454
6455 return WriteFile(file, pb, cb, &bytesWritten, NULL);
6456}
GLenum GLsizei GLuint GLint * bytesWritten
Definition: glext.h:11123

Referenced by do_export().

◆ save_pfx()

static BOOL save_pfx ( HANDLE  file,
PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo,
PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO  pContextInfo,
PCRYPT_KEY_PROV_INFO  keyProvInfo,
BOOL  deleteKeys 
)
static

Definition at line 6563 of file main.c.

6566{
6569 BOOL ret = FALSE;
6570
6571 if (store)
6572 {
6573 CRYPT_DATA_BLOB pfxBlob = { 0, NULL };
6575 BOOL freeKeyProvInfo = FALSE;
6576
6577 if (pContextInfo->fExportChain)
6578 {
6579 HCERTCHAINENGINE engine = NULL;
6580
6581 if (pExportInfo->cStores)
6582 {
6584
6585 memset(&config, 0, sizeof(config));
6586 config.cbSize = sizeof(config);
6587 config.cAdditionalStore = pExportInfo->cStores;
6588 config.rghAdditionalStore = pExportInfo->rghStores;
6590 }
6591 else
6592 ret = TRUE;
6593 if (ret)
6594 {
6595 CERT_CHAIN_PARA chainPara;
6597
6598 memset(&chainPara, 0, sizeof(chainPara));
6599 chainPara.cbSize = sizeof(chainPara);
6601 pExportInfo->u.pCertContext, NULL, NULL, &chainPara, 0, NULL,
6602 &chain);
6603 if (ret)
6604 {
6605 DWORD i, j;
6606
6607 for (i = 0; ret && i < chain->cChain; i++)
6608 for (j = 0; ret && j < chain->rgpChain[i]->cElement;
6609 j++)
6610 {
6611 if (i == 0 && j == 0)
6613 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6615 else
6617 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6619 }
6621 }
6622 }
6623 if (engine)
6625 }
6626 else
6628 pExportInfo->u.pCertContext, CERT_STORE_ADD_ALWAYS, &cert);
6629 /* Copy private key info to newly created cert, so it'll get exported
6630 * along with the cert.
6631 */
6632 if (ret && pContextInfo->fExportPrivateKeys)
6633 {
6634 if (keyProvInfo)
6636 CERT_KEY_PROV_INFO_PROP_ID, 0, keyProvInfo);
6637 else
6638 {
6639 if (!(keyProvInfo = export_get_private_key_info(cert)))
6640 ret = FALSE;
6641 else
6642 {
6644 CERT_KEY_PROV_INFO_PROP_ID, 0, keyProvInfo);
6645 freeKeyProvInfo = TRUE;
6646 }
6647 }
6648 }
6649 if (ret)
6650 {
6651 DWORD exportFlags =
6653
6654 ret = PFXExportCertStore(store, &pfxBlob,
6655 pContextInfo->pwszPassword, exportFlags);
6656 if (ret)
6657 {
6658 pfxBlob.pbData = HeapAlloc(GetProcessHeap(), 0, pfxBlob.cbData);
6659 if (pfxBlob.pbData)
6660 {
6661 ret = PFXExportCertStore(store, &pfxBlob,
6662 pContextInfo->pwszPassword, exportFlags);
6663 if (ret)
6664 {
6666
6667 ret = WriteFile(file, pfxBlob.pbData, pfxBlob.cbData,
6668 &bytesWritten, NULL);
6669 }
6670 }
6671 else
6672 {
6674 ret = FALSE;
6675 }
6676 }
6677 }
6678 if (ret && deleteKeys)
6679 {
6680 HCRYPTPROV prov;
6681
6682 CryptAcquireContextW(&prov, keyProvInfo->pwszContainerName,
6683 keyProvInfo->pwszProvName, keyProvInfo->dwProvType,
6685 }
6686 if (freeKeyProvInfo)
6687 HeapFree(GetProcessHeap(), 0, keyProvInfo);
6689 CertCloseStore(store, 0);
6690 }
6691 return ret;
6692}
struct config_s config
BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData)
Definition: cert.c:799
void WINAPI CertFreeCertificateChainEngine(HCERTCHAINENGINE hChainEngine)
Definition: chain.c:249
BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig, HCERTCHAINENGINE *phChainEngine)
Definition: chain.c:225
BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword, DWORD dwFlags)
Definition: encode.c:4761
LPWSTR pwszContainerName
Definition: wincrypt.h:209
#define CRYPT_DELETEKEYSET
Definition: wincrypt.h:2071
#define EXPORT_PRIVATE_KEYS
Definition: wincrypt.h:4137
#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY
Definition: wincrypt.h:4136

Referenced by do_export().

◆ save_serialized_store()

static BOOL save_serialized_store ( HANDLE  file,
HCERTSTORE  store 
)
static

Definition at line 6557 of file main.c.

6558{
6561}
BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, DWORD dwSaveAs, DWORD dwSaveTo, void *pvSaveToPara, DWORD dwFlags)
Definition: serialize.c:895
#define CERT_STORE_SAVE_AS_STORE
Definition: wincrypt.h:2646
#define PKCS_7_ASN_ENCODING
Definition: wincrypt.h:2299
#define CERT_STORE_SAVE_TO_FILE
Definition: wincrypt.h:2649

Referenced by do_export().

◆ save_store_as_cms()

static BOOL save_store_as_cms ( HANDLE  file,
HCERTSTORE  store 
)
inlinestatic

Definition at line 6483 of file main.c.

6484{
6487}
#define CERT_STORE_SAVE_AS_PKCS7
Definition: wincrypt.h:2647

Referenced by do_export(), and save_cert_as_cms().

◆ select_cert_dlg_proc()

static LRESULT CALLBACK select_cert_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 7288 of file main.c.

7289{
7290 struct SelectCertData *data;
7291
7292 switch (msg)
7293 {
7294 case WM_INITDIALOG:
7295 {
7296 struct SelectCertParam *param = (struct SelectCertParam *)lp;
7299 DWORD i = 0;
7300
7301 data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data));
7302 if (!data)
7303 return 0;
7304 data->cert = &param->cert;
7305 data->dateColumn = 4 -
7310 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
7311 if (data->imageList)
7312 {
7313 HBITMAP bmp;
7314 COLORREF backColor = RGB(255, 0, 255);
7315
7317 ImageList_AddMasked(data->imageList, bmp, backColor);
7319 ImageList_SetBkColor(data->imageList, CLR_NONE);
7321 (LPARAM)data->imageList);
7322 }
7323 data->title = pcsc->szTitle;
7324 data->cStores = pcsc->cStores;
7325 data->rghStores = pcsc->rghStores;
7326 data->cPropSheetPages = pcsc->cPropSheetPages;
7327 data->rgPropSheetPages = pcsc->rgPropSheetPages;
7328 data->displayProc = pcsc->pDisplayCallback;
7329 data->callbackData = pcsc->pvCallbackData;
7331
7332 if (pcsc->szTitle)
7334 if (pcsc->szDisplayString)
7338 while (i < pcsc->cDisplayStores)
7342 break;
7343 }
7344#ifdef __REACTOS__
7345 case WM_DESTROY:
7349 break;
7350#endif
7351 case WM_NOTIFY:
7352 {
7353 NMHDR *hdr = (NMHDR *)lp;
7354
7355 switch (hdr->code)
7356 {
7357 case NM_DBLCLK:
7358 {
7360
7362 if (cert)
7364 break;
7365 }
7366 case LVN_COLUMNCLICK:
7367 {
7368 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
7370
7371 /* FIXME: doesn't support swapping sort order between ascending and descending. */
7373 if (nmlv->iSubItem == data->dateColumn)
7375 else
7376 {
7377 struct SortData sortData;
7378
7379 sortData.hwnd = lv;
7380 sortData.column = nmlv->iSubItem;
7381 SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)&sortData,
7383 }
7384 break;
7385 }
7386 }
7387 break;
7388 }
7389 case WM_COMMAND:
7390 switch (wp)
7391 {
7392 case IDOK:
7393 {
7395
7397 if (!cert)
7398 {
7399 WCHAR buf[40], title[40];
7400
7402 if (!data->title)
7404 MessageBoxW(hwnd, buf, data->title ? data->title : title, MB_OK | MB_ICONWARNING);
7405 break;
7406 }
7408#ifndef __REACTOS__
7410 ImageList_Destroy(data->imageList);
7412#endif
7414 break;
7415 }
7416 case IDCANCEL:
7417#ifndef __REACTOS__
7420 ImageList_Destroy(data->imageList);
7422#endif
7424 break;
7426 {
7428
7430 if (cert)
7432 break;
7433 }
7434 }
7435 break;
7436 }
7437 return 0;
7438}
#define IDS_SELECT_CERT
Definition: cryptuires.h:179
#define IDC_SELECT_VIEW_CERT
Definition: cryptuires.h:286
#define IDC_SELECT_CERTS
Definition: cryptuires.h:285
#define IDS_SELECT_CERT_TITLE
Definition: cryptuires.h:178
#define IDC_SELECT_DISPLAY_STRING
Definition: cryptuires.h:284
static void select_cert_update_view_button(HWND hwnd)
Definition: main.c:7230
static PCCERT_CONTEXT select_cert_get_selected(HWND hwnd, int selection)
Definition: main.c:7212
static void init_columns(HWND lv, DWORD flags)
Definition: main.c:7024
static void add_store_certs(HWND lv, HCERTSTORE store, DWORD flags, PFNCFILTERPROC filter, void *callback_data)
Definition: main.c:7196
static int CALLBACK select_cert_sort_by_text(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:7276
static void select_cert_view(HWND hwnd, PCCERT_CONTEXT cert, struct SelectCertData *data)
Definition: main.c:7252
HWND hwnd
Definition: main.c:7272
PFNCCERTDISPLAYPROC pDisplayCallback
Definition: cryptuiapi.h:378
#define MB_ICONWARNING
Definition: winuser.h:789

Referenced by CryptUIDlgSelectCertificateW().

◆ select_cert_get_selected()

static PCCERT_CONTEXT select_cert_get_selected ( HWND  hwnd,
int  selection 
)
static

Definition at line 7212 of file main.c.

7213{
7216 LVITEMW item;
7217
7218 if (selection < 0)
7220 if (selection < 0)
7221 return NULL;
7222 item.mask = LVIF_PARAM;
7223 item.iItem = selection;
7224 item.iSubItem = 0;
7225 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
7226 cert = (PCCERT_CONTEXT)item.lParam;
7227 return cert;
7228}

Referenced by select_cert_dlg_proc().

◆ select_cert_sort_by_text()

static int CALLBACK select_cert_sort_by_text ( LPARAM  lp1,
LPARAM  lp2,
LPARAM  lp 
)
static

Definition at line 7276 of file main.c.

7277{
7278 struct SortData *data = (struct SortData *)lp;
7279 return cert_mgr_sort_by_text(data->hwnd, data->column, lp1, lp2);
7280}

Referenced by select_cert_dlg_proc().

◆ select_cert_update_view_button()

static void select_cert_update_view_button ( HWND  hwnd)
static

Definition at line 7230 of file main.c.

7231{
7233 int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
7234
7235 EnableWindow(GetDlgItem(hwnd, IDC_SELECT_VIEW_CERT), numSelected == 1);
7236}

Referenced by select_cert_dlg_proc().

◆ select_cert_view()

static void select_cert_view ( HWND  hwnd,
PCCERT_CONTEXT  cert,
struct SelectCertData data 
)
static

Definition at line 7252 of file main.c.

7253{
7255
7256 if (data->displayProc && data->displayProc(cert, hwnd, data->callbackData))
7257 return;
7258 memset(&viewInfo, 0, sizeof(viewInfo));
7259 viewInfo.dwSize = sizeof(viewInfo);
7260 viewInfo.hwndParent = hwnd;
7261 viewInfo.pCertContext = cert;
7262 viewInfo.cStores = data->cStores;
7263 viewInfo.rghStores = data->rghStores;
7264 viewInfo.cPropSheetPages = data->cPropSheetPages;
7265 viewInfo.rgPropSheetPages = data->rgPropSheetPages;
7266 /* FIXME: this should be modal */
7267 CryptUIDlgViewCertificateW(&viewInfo, NULL);
7268}
LPCPROPSHEETPAGEW rgPropSheetPages
Definition: cryptuiapi.h:140

Referenced by select_cert_dlg_proc().

◆ select_purposes()

static void select_purposes ( HWND  hwnd,
PurposeSelection  selection 
)
static

Definition at line 3386 of file main.c.

3387{
3389
3390 switch (selection)
3391 {
3392 case PurposeEnableAll:
3393 case PurposeDisableAll:
3394 EnableWindow(lv, FALSE);
3395 redraw_states(lv, FALSE);
3397 break;
3399 EnableWindow(lv, TRUE);
3400 redraw_states(lv, TRUE);
3402 }
3403}
static void redraw_states(HWND list, BOOL enabled)
Definition: main.c:3329

Referenced by cert_properties_general_dlg_proc(), and show_cert_usages().

◆ select_store_dlg_proc()

static LRESULT CALLBACK select_store_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1538 of file main.c.

1540{
1541 struct SelectStoreInfo *selectInfo;
1542 LRESULT ret = 0;
1543
1544 switch (msg)
1545 {
1546 case WM_INITDIALOG:
1547 {
1548 selectInfo = (struct SelectStoreInfo *)lp;
1550 if (selectInfo->info->pwszTitle)
1552 (LPARAM)selectInfo->info->pwszTitle);
1553 if (selectInfo->info->pwszText)
1555 (LPARAM)selectInfo->info->pwszText);
1556 if (!(selectInfo->info->dwFlags & CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE))
1558 enumerate_stores(hwnd, selectInfo->info->pEnumData);
1559 break;
1560 }
1561 case WM_COMMAND:
1562 switch (wp)
1563 {
1564 case IDOK:
1565 {
1569
1570 selectInfo = (struct SelectStoreInfo *)GetWindowLongPtrW(hwnd,
1571 DWLP_USER);
1572 if (!selection)
1573 {
1575
1576 if (selectInfo->info->pwszTitle)
1577 pTitle = selectInfo->info->pwszTitle;
1578 else
1579 {
1581 pTitle = title;
1582 }
1585 }
1586 else
1587 {
1589
1590 if (!selectInfo->info->pfnSelectedStoreCallback ||
1592 selectInfo->info->pvArg))
1593 {
1594 selectInfo->store = store;
1597 }
1598 else
1600 }
1601 ret = TRUE;
1602 break;
1603 }
1604 case IDCANCEL:
1607 ret = TRUE;
1608 break;
1609 }
1610 break;
1611 }
1612 return ret;
1613}
#define IDC_SHOW_PHYSICAL_STORES
Definition: cryptuires.h:245
#define IDS_SELECT_STORE
Definition: cryptuires.h:66
#define IDS_SELECT_STORE_TITLE
Definition: cryptuires.h:65
#define IDC_STORE_TEXT
Definition: cryptuires.h:243
static HCERTSTORE selected_item_to_store(HWND tree, HTREEITEM hItem)
Definition: main.c:1503
static void enumerate_stores(HWND hwnd, CRYPTUI_ENUM_DATA *pEnumData)
Definition: main.c:1431
static void free_store_info(HWND tree)
Definition: main.c:1477
#define TVGN_CARET
Definition: commctrl.h:3466

Referenced by CryptUIDlgSelectStoreW().

◆ selected_item_to_store()

static HCERTSTORE selected_item_to_store ( HWND  tree,
HTREEITEM  hItem 
)
static

Definition at line 1503 of file main.c.

1504{
1506 TVITEMW item;
1507 HCERTSTORE store;
1508
1509 memset(&item, 0, sizeof(item));
1511 item.hItem = hItem;
1512 item.cchTextMax = ARRAY_SIZE(buf);
1513 item.pszText = buf;
1515 if (item.lParam)
1516 {
1517 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1518
1519 if (storeInfo->type == StoreHandle)
1520 store = storeInfo->u.store;
1521 else
1522 store = CertOpenSystemStoreW(0, storeInfo->u.name);
1523 }
1524 else
1525 {
1526 /* It's implicitly a system store */
1528 }
1529 return store;
1530}
HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV_LEGACY hProv, LPCWSTR szSubSystemProtocol)
Definition: store.c:916

Referenced by select_store_dlg_proc().

◆ set_cert_info()

static void set_cert_info ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2323 of file main.c.

2325{
2326 CHARFORMATW charFmt;
2327 PARAFORMAT2 parFmt;
2331 (CRYPT_PROVIDER_DATA *)pCertViewInfo->u.pCryptProviderData,
2332 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
2333 pCertViewInfo->idxCounterSigner);
2335 &provSigner->pasCertChain[provSigner->csCertChain - 1];
2336
2337 if (!provSigner->pChainContext ||
2341 else if (!root->fTrustedRoot)
2343 else
2345
2346 memset(&charFmt, 0, sizeof(charFmt));
2347 charFmt.cbSize = sizeof(charFmt);
2348 charFmt.dwMask = CFM_BOLD;
2349 charFmt.dwEffects = CFE_BOLD;
2351 /* FIXME: vertically center text */
2352 parFmt.cbSize = sizeof(parFmt);
2353 parFmt.dwMask = PFM_STARTINDENT;
2354 parFmt.dxStartIndent = MY_INDENT;
2357
2360 if (provSigner->dwError == TRUST_E_CERT_SIGNATURE)
2362 IDS_CERT_INFO_BAD_SIG, &parFmt);
2363 else if (!provSigner->pChainContext ||
2368 else if (!root->fTrustedRoot)
2369 {
2370 if (provSigner->csCertChain == 1 && root->fSelfSigned)
2373 else
2376 }
2377 else
2378 {
2379 set_policy_text(text, pCertViewInfo);
2380 set_issuer_statement(hwnd, pCertViewInfo);
2381 }
2382}
#define IDS_CERT_INFO_PARTIAL_CHAIN
Definition: cryptuires.h:30
#define IDS_CERT_INFO_BAD_SIG
Definition: cryptuires.h:27
#define IDC_CERTIFICATE_ICON
Definition: cryptuires.h:212
#define IDS_CERT_INFO_UNTRUSTED_ROOT
Definition: cryptuires.h:29
#define IDC_CERTIFICATE_STATUS
Definition: cryptuires.h:214
#define IDS_CERTIFICATEINFORMATION
Definition: cryptuires.h:26
#define IDC_CERTIFICATE_INFO
Definition: cryptuires.h:213
#define IDB_CERT
Definition: cryptuires.h:205
#define IDS_CERT_INFO_UNTRUSTED_CA
Definition: cryptuires.h:28
#define IDB_CERT_WARNING
Definition: cryptuires.h:207
#define IDB_CERT_ERROR
Definition: cryptuires.h:206
static void set_issuer_statement(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2278
static void add_icon_to_control(HWND hwnd, int id)
Definition: main.c:1809
static void set_policy_text(HWND text, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2172
#define CFE_BOLD
Definition: richedit.h:406
CERT_TRUST_STATUS TrustStatus
Definition: wincrypt.h:939
PCCERT_CHAIN_CONTEXT pChainContext
Definition: wintrust.h:241
#define CERT_TRUST_IS_PARTIAL_CHAIN
Definition: wincrypt.h:891
#define TRUST_E_CERT_SIGNATURE
Definition: winerror.h:3107

Referenced by set_general_info().

◆ set_cert_name_string()

static void set_cert_name_string ( HWND  hwnd,
PCCERT_CONTEXT  cert,
DWORD  nameFlags,
int  heading 
)
static

Definition at line 2384 of file main.c.

2386{
2387 WCHAR nl = '\n';
2389 CHARFORMATW charFmt;
2390 PARAFORMAT2 parFmt;
2391
2392 memset(&charFmt, 0, sizeof(charFmt));
2393 charFmt.cbSize = sizeof(charFmt);
2394 charFmt.dwMask = CFM_BOLD;
2395 charFmt.dwEffects = CFE_BOLD;
2397 parFmt.cbSize = sizeof(parFmt);
2398 parFmt.dwMask = PFM_STARTINDENT;
2399 parFmt.dxStartIndent = MY_INDENT * 3;
2401 charFmt.dwEffects = 0;
2404 nameFlags);
2408
2409}
#define IDC_CERTIFICATE_NAMES
Definition: cryptuires.h:215
static void add_cert_string_to_control(HWND hwnd, PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags)
Definition: main.c:1794

Referenced by set_general_info().

◆ set_cert_string_property()

static void set_cert_string_property ( PCCERT_CONTEXT  cert,
DWORD  prop,
LPWSTR  str 
)
static

Definition at line 3511 of file main.c.

3513{
3514 if (str && *str)
3515 {
3517
3518 blob.pbData = (BYTE *)str;
3519 blob.cbData = (lstrlenW(str) + 1) * sizeof(WCHAR);
3521 }
3522 else
3524}
Definition: image.c:134

Referenced by apply_general_changes().

◆ set_cert_validity_period()

static void set_cert_validity_period ( HWND  hwnd,
PCCERT_CONTEXT  cert 
)
static

Definition at line 2423 of file main.c.

2424{
2425 WCHAR nl = '\n';
2427 CHARFORMATW charFmt;
2428 PARAFORMAT2 parFmt;
2429
2430 memset(&charFmt, 0, sizeof(charFmt));
2431 charFmt.cbSize = sizeof(charFmt);
2432 charFmt.dwMask = CFM_BOLD;
2433 charFmt.dwEffects = CFE_BOLD;
2435 parFmt.cbSize = sizeof(parFmt);
2436 parFmt.dwMask = PFM_STARTINDENT;
2437 parFmt.dxStartIndent = MY_INDENT * 3;
2439 &parFmt);
2440 charFmt.dwEffects = 0;
2442 add_date_string_to_control(text, &cert->pCertInfo->NotBefore);
2443 charFmt.dwEffects = CFE_BOLD;
2446 charFmt.dwEffects = 0;
2448 add_date_string_to_control(text, &cert->pCertInfo->NotAfter);
2450}
#define IDS_VALID_TO
Definition: cryptuires.h:37
#define IDS_VALID_FROM
Definition: cryptuires.h:36
static void add_date_string_to_control(HWND hwnd, const FILETIME *fileTime)
Definition: main.c:2411
static void add_string_resource_to_control(HWND hwnd, int id)
Definition: main.c:1752

Referenced by set_general_info().

◆ set_certificate_status()

static void set_certificate_status ( HWND  hwnd,
const CRYPT_PROVIDER_CERT cert 
)
static

Definition at line 4069 of file main.c.

4070{
4071 /* Select all the text in the control, the next update will replace it */
4072 SendMessageW(hwnd, EM_SETSEL, 0, -1);
4073 /* Set the highest priority error messages first. */
4074 if (!(cert->dwConfidence & CERT_CONFIDENCE_SIG))
4076 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIME))
4078 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIMENEST))
4080 else if (cert->dwRevokedReason)
4082 else
4084}
#define IDS_CERTIFICATE_BAD_TIMENEST
Definition: cryptuires.h:40
#define IDS_CERTIFICATE_REVOKED
Definition: cryptuires.h:41
#define IDS_CERTIFICATE_BAD_TIME
Definition: cryptuires.h:39
#define IDS_CERTIFICATE_VALID
Definition: cryptuires.h:42
#define IDS_CERTIFICATE_BAD_SIGNATURE
Definition: cryptuires.h:38
#define CERT_CONFIDENCE_TIME
Definition: wintrust.h:225
#define CERT_CONFIDENCE_TIMENEST
Definition: wintrust.h:226
#define CERT_CONFIDENCE_SIG
Definition: wintrust.h:224

Referenced by hierarchy_dlg_proc(), and set_certificate_status_for_end_cert().

◆ set_certificate_status_for_end_cert()

static void set_certificate_status_for_end_cert ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 4086 of file main.c.

4088{
4091 (CRYPT_PROVIDER_DATA *)pCertViewInfo->u.pCryptProviderData,
4092 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
4093 pCertViewInfo->idxCounterSigner);
4095 pCertViewInfo->idxCert);
4096
4097 set_certificate_status(status, provCert);
4098}
Definition: ps.c:97

Referenced by show_cert_hierarchy().

◆ set_fields_selection()

static void set_fields_selection ( HWND  hwnd,
struct detail_data data,
int  sel 
)
static

Definition at line 3134 of file main.c.

3135{
3137
3138 if (sel >= 0 && sel < ARRAY_SIZE(listItems))
3139 {
3141 listItems[sel].add(list, data);
3142 }
3143}

Referenced by create_cert_details_list(), and refresh_details_view().

◆ set_general_cert_properties()

static void set_general_cert_properties ( HWND  hwnd,
struct edit_cert_data data 
)
static

Definition at line 3491 of file main.c.

3492{
3493 PCCERT_CONTEXT cert = data->cert;
3494 WCHAR *str;
3495
3497 {
3499 (LPARAM)str);
3501 }
3503 {
3505 (LPARAM)str);
3507 }
3509}
static void show_cert_usages(HWND hwnd, struct edit_cert_data *data)
Definition: main.c:3412

Referenced by cert_properties_general_dlg_proc().

◆ set_general_info()

static void set_general_info ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2452 of file main.c.

2454{
2455 set_cert_info(hwnd, pCertViewInfo);
2456 set_cert_name_string(hwnd, pCertViewInfo->pCertContext, 0,
2458 set_cert_name_string(hwnd, pCertViewInfo->pCertContext,
2461}
#define IDS_ISSUER_HEADING
Definition: cryptuires.h:35
#define IDS_SUBJECT_HEADING
Definition: cryptuires.h:34
static void set_cert_validity_period(HWND hwnd, PCCERT_CONTEXT cert)
Definition: main.c:2423
static void set_cert_name_string(HWND hwnd, PCCERT_CONTEXT cert, DWORD nameFlags, int heading)
Definition: main.c:2384
static void set_cert_info(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2323

Referenced by general_dlg_proc().

◆ set_issuer_statement()

static void set_issuer_statement ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2278 of file main.c.

2280{
2281 PCERT_EXTENSION policyExt;
2282
2283 if (!(pCertViewInfo->dwFlags & CRYPTUI_DISABLE_ISSUERSTATEMENT) &&
2285 pCertViewInfo->pCertContext->pCertInfo->cExtension,
2286 pCertViewInfo->pCertContext->pCertInfo->rgExtension)))
2287 {
2288 CERT_POLICIES_INFO *policies;
2289 DWORD size;
2290
2292 policyExt->Value.pbData, policyExt->Value.cbData,
2293 CRYPT_DECODE_ALLOC_FLAG, NULL, &policies, &size))
2294 {
2296 LPWSTR cps = NULL, userNotice = NULL;
2297
2298 if ((qualifier = find_policy_qualifier(policies,
2301 if ((qualifier = find_policy_qualifier(policies,
2304 if (cps || userNotice)
2305 {
2306 struct IssuerStatement *issuerStatement =
2307 HeapAlloc(GetProcessHeap(), 0, sizeof(struct IssuerStatement));
2308
2309 if (issuerStatement)
2310 {
2311 issuerStatement->cps = cps;
2312 issuerStatement->userNotice = userNotice;
2315 (ULONG_PTR)issuerStatement);
2316 }
2317 }
2318 LocalFree(policies);
2319 }
2320 }
2321}
#define CRYPTUI_DISABLE_ISSUERSTATEMENT
Definition: cryptuiapi.h:91
static CRYPT_OBJID_BLOB * find_policy_qualifier(CERT_POLICIES_INFO *policies, LPCSTR policyOid)
Definition: main.c:2212
static WCHAR * get_user_notice_from_qualifier(const CRYPT_OBJID_BLOB *qualifier)
Definition: main.c:2252
static WCHAR * get_cps_str_from_qualifier(const CRYPT_OBJID_BLOB *qualifier)
Definition: main.c:2231
PCERT_INFO pCertInfo
Definition: wincrypt.h:482
LPSTR pszObjId
Definition: wincrypt.h:230
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:252
DWORD cExtension
Definition: wincrypt.h:251
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define szOID_PKIX_POLICY_QUALIFIER_CPS
Definition: wincrypt.h:3291
#define szOID_CERT_POLICIES
Definition: wincrypt.h:3197
#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE
Definition: wincrypt.h:3292

Referenced by set_cert_info().

◆ set_policy_text()

static void set_policy_text ( HWND  text,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2172 of file main.c.

2174{
2175 BOOL includeCertUsages = FALSE, includeAppUsages = FALSE;
2176 BOOL badUsages = FALSE, anyUsageAdded = FALSE;
2177
2178 if (pCertViewInfo->cPurposes)
2179 {
2180 DWORD i;
2181
2182 for (i = 0; i < pCertViewInfo->cPurposes; i++)
2183 {
2184 if (!strcmp(pCertViewInfo->rgszPurposes[i], szOID_ANY_CERT_POLICY))
2185 includeCertUsages = TRUE;
2186 else if (!strcmp(pCertViewInfo->rgszPurposes[i],
2188 includeAppUsages = TRUE;
2189 else
2190 badUsages = TRUE;
2191 }
2192 }
2193 else
2194 includeAppUsages = includeCertUsages = TRUE;
2195 if (includeAppUsages)
2196 display_app_usages(text, pCertViewInfo->pCertContext, &anyUsageAdded);
2197 if (includeCertUsages)
2198 badUsages = display_cert_usages(text, pCertViewInfo->pCertContext,
2199 &anyUsageAdded);
2200 if (badUsages)
2201 {
2202 PARAFORMAT2 parFmt;
2203
2204 parFmt.cbSize = sizeof(parFmt);
2205 parFmt.dwMask = PFM_STARTINDENT;
2206 parFmt.dxStartIndent = MY_INDENT;
2209 }
2210}
#define IDS_CERT_INFO_BAD_PURPOSES
Definition: cryptuires.h:31
static BOOL display_cert_usages(HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
Definition: main.c:2116
static void display_app_usages(HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
Definition: main.c:2064

Referenced by set_cert_info().

◆ show_cert_chain()

static void show_cert_chain ( HWND  hwnd,
struct hierarchy_data data 
)
static

Definition at line 4018 of file main.c.

4019{
4022 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
4023 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
4024 data->pCertViewInfo->idxCounterSigner);
4025 DWORD i;
4027
4029 for (i = provSigner->csCertChain; i; i--)
4030 {
4031 LPWSTR name;
4032
4033 name = get_cert_display_name(provSigner->pasCertChain[i - 1].pCert);
4034 if (name)
4035 {
4036 TVINSERTSTRUCTW tvis;
4037
4038 tvis.hParent = parent;
4039 tvis.hInsertAfter = TVI_LAST;
4040 tvis.u.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_IMAGE |
4042 tvis.u.item.pszText = name;
4043 tvis.u.item.state = TVIS_EXPANDED;
4044 tvis.u.item.stateMask = TVIS_EXPANDED;
4045 if (i == 1 && (!provSigner->pChainContext ||
4048 {
4049 /* The root of the chain has a special case: if the chain is
4050 * a partial chain, the icon is a warning icon rather than an
4051 * error icon.
4052 */
4053 tvis.u.item.iImage = 2;
4054 }
4055 else if (provSigner->pasCertChain[i - 1].pChainElement->TrustStatus.
4056 dwErrorStatus == 0)
4057 tvis.u.item.iImage = 0;
4058 else
4059 tvis.u.item.iImage = 1;
4060 tvis.u.item.iSelectedImage = tvis.u.item.iImage;
4061 tvis.u.item.lParam = index_to_lparam(data, i - 1);
4063 (LPARAM)&tvis);
4065 }
4066 }
4067}
static WCHAR * get_cert_display_name(PCCERT_CONTEXT cert)
Definition: main.c:4009
static LPARAM index_to_lparam(struct hierarchy_data *data, DWORD index)
Definition: main.c:3956
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TVSIL_NORMAL
Definition: commctrl.h:3448
#define TVIS_EXPANDED
Definition: commctrl.h:3289
#define TVM_SETIMAGELIST
Definition: commctrl.h:3451
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define TVIF_STATE
Definition: commctrl.h:3274
CERT_TRUST_STATUS TrustStatus
Definition: wincrypt.h:917
PCERT_CHAIN_ELEMENT pChainElement
Definition: wintrust.h:221
PCCERT_CONTEXT pCert
Definition: wintrust.h:208

Referenced by show_cert_hierarchy().

◆ show_cert_dialog()

static BOOL show_cert_dialog ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
CRYPT_PROVIDER_CERT provCert,
BOOL pfPropertiesChanged 
)
static

Definition at line 4310 of file main.c.

4312{
4313 static const WCHAR riched[] = { 'r','i','c','h','e','d','2','0',0 };
4314 DWORD nPages;
4315 PROPSHEETPAGEW *pages;
4316 BOOL ret = FALSE;
4317 HMODULE lib = LoadLibraryW(riched);
4318
4319 nPages = pCertViewInfo->cPropSheetPages + 1; /* one for the General tab */
4320 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_DETAILPAGE))
4321 nPages++;
4322 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_HIERARCHYPAGE))
4323 nPages++;
4324 pages = HeapAlloc(GetProcessHeap(), 0, nPages * sizeof(PROPSHEETPAGEW));
4325 if (pages)
4326 {
4329 DWORD i;
4330
4331 memset(&hdr, 0, sizeof(hdr));
4332 hdr.dwSize = sizeof(hdr);
4334 hdr.hInstance = hInstance;
4335 if (pCertViewInfo->szTitle)
4336 hdr.pszCaption = pCertViewInfo->szTitle;
4337 else
4338 hdr.pszCaption = MAKEINTRESOURCEW(IDS_CERTIFICATE);
4339 init_general_page(pCertViewInfo, &pages[hdr.nPages++]);
4340 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_DETAILPAGE))
4341 {
4342 if (init_detail_page(pCertViewInfo, pfPropertiesChanged,
4343 &pages[hdr.nPages]))
4344 hdr.nPages++;
4345 }
4346 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_HIERARCHYPAGE))
4347 {
4348 if (init_hierarchy_page(pCertViewInfo, &pages[hdr.nPages]))
4349 hdr.nPages++;
4350 }
4351 /* Copy each additional page, and create the init dialog struct for it
4352 */
4353 if (pCertViewInfo->cPropSheetPages)
4354 {
4356 pCertViewInfo->cPropSheetPages *
4358 if (init)
4359 {
4360 for (i = 0; i < pCertViewInfo->cPropSheetPages; i++)
4361 {
4362 memcpy(&pages[hdr.nPages + i],
4363 &pCertViewInfo->rgPropSheetPages[i],
4364 sizeof(PROPSHEETPAGEW));
4365 init[i].lParam = pCertViewInfo->rgPropSheetPages[i].lParam;
4366 init[i].pCertContext = pCertViewInfo->pCertContext;
4367 pages[hdr.nPages + i].lParam = (LPARAM)&init[i];
4368 }
4369 if (pCertViewInfo->nStartPage & 0x8000)
4370 {
4371 /* Start page index is relative to the number of default
4372 * pages
4373 */
4374 hdr.u2.nStartPage = pCertViewInfo->nStartPage + hdr.nPages;
4375 }
4376 else
4377 hdr.u2.nStartPage = pCertViewInfo->nStartPage;
4378 hdr.nPages = nPages;
4379 ret = TRUE;
4380 }
4381 else
4383 }
4384 else
4385 {
4386 /* Ignore the relative flag if there aren't any additional pages */
4387 hdr.u2.nStartPage = pCertViewInfo->nStartPage & 0x7fff;
4388 ret = TRUE;
4389 }
4390 if (ret)
4391 {
4392 INT_PTR l;
4393
4394 hdr.u3.ppsp = pages;
4395 hdr.pfnCallback = cert_prop_sheet_proc;
4396 l = PropertySheetW(&hdr);
4397 if (l == 0)
4398 {
4400 ret = FALSE;
4401 }
4402 }
4404 HeapFree(GetProcessHeap(), 0, pages);
4405 }
4406 else
4408 FreeLibrary(lib);
4409 return ret;
4410}
r l[0]
Definition: byte_order.h:168
#define CRYPTUI_HIDE_DETAILPAGE
Definition: cryptuiapi.h:74
#define CRYPTUI_HIDE_HIERARCHYPAGE
Definition: cryptuiapi.h:73
#define IDS_CERTIFICATE
Definition: cryptuires.h:25
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2916
static void init_general_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, PROPSHEETPAGEW *page)
Definition: main.c:2584
static int CALLBACK cert_prop_sheet_proc(HWND hwnd, UINT msg, LPARAM lp)
Definition: main.c:4288
static BOOL init_detail_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged, PROPSHEETPAGEW *page)
Definition: main.c:3921
static BOOL init_hierarchy_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, PROPSHEETPAGEW *page)
Definition: main.c:4249
#define FreeLibrary(x)
Definition: compat.h:748
#define LoadLibraryW(x)
Definition: compat.h:747
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSH_PROPSHEETPAGE
Definition: prsht.h:43
#define PSH_NOAPPLYNOW
Definition: prsht.h:47
LPARAM lParam
Definition: prsht.h:227
int32_t INT_PTR
Definition: typedefs.h:64
#define ERROR_CANCELLED
Definition: winerror.h:726
static int init
Definition: wintirpc.c:33

Referenced by CryptUIDlgViewCertificateW().

◆ show_cert_hierarchy()

static void show_cert_hierarchy ( HWND  hwnd,
struct hierarchy_data data 
)
static

Definition at line 4100 of file main.c.

4101{
4102 /* Disable view certificate button until a certificate is selected */
4106}
static void set_certificate_status_for_end_cert(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:4086
static void show_cert_chain(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:4018

Referenced by hierarchy_dlg_proc(), and show_dialog_for_selected_cert().

◆ show_cert_stores()

static void show_cert_stores ( HWND  hwnd,
DWORD  dwFlags,
struct CertMgrData data 
)
static

Definition at line 496 of file main.c.

497{
498 const struct CertMgrStoreInfo *storeList;
499 int cStores, i;
501
503 {
504 storeList = publisherStoreList;
506 }
507 else
508 {
509 storeList = defaultStoreList;
510 cStores = ARRAY_SIZE(defaultStoreList);
511 }
513 cStores = 1;
514 data->nStores = cStores;
515 data->stores = storeList;
516 for (i = 0; i < cStores; i++)
517 {
520 HCERTSTORE store;
521
522 if (!(name = CryptFindLocalizedName(storeList[i].name)))
523 name = storeList[i].name;
526 item.mask = TCIF_TEXT | TCIF_PARAM;
527 item.pszText = (LPWSTR)name;
528 item.lParam = (LPARAM)store;
530 }
531}
#define CRYPTUI_CERT_MGR_PUBLISHER_TAB
Definition: cryptuiapi.h:47
#define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG
Definition: cryptuiapi.h:49
static const struct CertMgrStoreInfo defaultStoreList[]
Definition: main.c:470
static const struct CertMgrStoreInfo publisherStoreList[]
Definition: main.c:481
#define TCM_INSERTITEMW
Definition: commctrl.h:4052
#define TCIF_TEXT
Definition: commctrl.h:3976
LPCWSTR name
Definition: main.c:465

Referenced by cert_mgr_dlg_proc().

◆ show_cert_usages()

static void show_cert_usages ( HWND  hwnd,
struct edit_cert_data data 
)
static

Definition at line 3412 of file main.c.

3413{
3414 PCCERT_CONTEXT cert = data->cert;
3417 DWORD size;
3418 RECT rc;
3420 PurposeSelection purposeSelection = PurposeEnableAll;
3421
3422 GetWindowRect(lv, &rc);
3423 column.mask = LVCF_WIDTH;
3424 column.cx = rc.right - rc.left;
3427
3428 /* Get enhanced key usage. Have to check for a property and an extension
3429 * separately, because CertGetEnhancedKeyUsage will succeed and return an
3430 * empty usage if neither is set. Unfortunately an empty usage implies
3431 * no usage is allowed, so we have to distinguish between the two cases.
3432 */
3434 NULL, &size))
3435 {
3439 {
3441 usage = NULL;
3442 }
3443 else if (usage->cUsageIdentifier)
3444 purposeSelection = PurposeEnableSelected;
3445 else
3446 purposeSelection = PurposeDisableAll;
3447 }
3449 NULL, &size))
3450 {
3454 {
3456 usage = NULL;
3457 }
3458 else if (usage->cUsageIdentifier)
3459 purposeSelection = PurposeEnableAll;
3460 else
3461 purposeSelection = PurposeDisableAll;
3462 }
3463 else
3464 {
3465 purposeSelection = PurposeEnableAll;
3466 usage = NULL;
3467 }
3468 if (usage)
3469 {
3470 DWORD i;
3471
3472 for (i = 0; i < usage->cUsageIdentifier; i++)
3473 {
3475 usage->rgpszUsageIdentifier[i], CRYPT_ENHKEY_USAGE_OID_GROUP_ID);
3476
3477 if (info)
3479 else
3480 add_purpose(hwnd, usage->rgpszUsageIdentifier[i]);
3481 }
3483 }
3484 else
3486 select_purposes(hwnd, purposeSelection);
3488 BM_CLICK, 0, 0);
3489}

Referenced by set_general_cert_properties().

◆ show_dialog_for_selected_cert()

static void show_dialog_for_selected_cert ( HWND  hwnd)
static

Definition at line 4108 of file main.c.

4109{
4111 TVITEMW item;
4112 struct hierarchy_data *data;
4114
4115 memset(&item, 0, sizeof(item));
4116 item.mask = TVIF_HANDLE | TVIF_PARAM;
4121 if (selection != 0)
4122 {
4123 CRYPT_PROVIDER_SGNR *provSigner;
4125 BOOL changed = FALSE;
4126
4127 provSigner = WTHelperGetProvSignerFromChain(
4128 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
4129 data->pCertViewInfo->idxSigner,
4130 data->pCertViewInfo->fCounterSigner,
4131 data->pCertViewInfo->idxCounterSigner);
4132 memset(&viewInfo, 0, sizeof(viewInfo));
4133 viewInfo.dwSize = sizeof(viewInfo);
4134 viewInfo.dwFlags = data->pCertViewInfo->dwFlags;
4135 viewInfo.szTitle = data->pCertViewInfo->szTitle;
4136 viewInfo.pCertContext = provSigner->pasCertChain[selection].pCert;
4137 viewInfo.cStores = data->pCertViewInfo->cStores;
4138 viewInfo.rghStores = data->pCertViewInfo->rghStores;
4139 viewInfo.cPropSheetPages = data->pCertViewInfo->cPropSheetPages;
4140 viewInfo.rgPropSheetPages = data->pCertViewInfo->rgPropSheetPages;
4141 viewInfo.nStartPage = data->pCertViewInfo->nStartPage;
4142 CryptUIDlgViewCertificateW(&viewInfo, &changed);
4143 if (changed)
4144 {
4145 /* Delete the contents of the tree */
4147 /* Reinitialize the tree */
4149 }
4150 }
4151}

Referenced by hierarchy_dlg_proc().

◆ show_edit_cert_properties_dialog()

static void show_edit_cert_properties_dialog ( HWND  parent,
struct detail_data data 
)
static

Definition at line 3746 of file main.c.

3748{
3750 PROPSHEETPAGEW page; /* FIXME: need to add a cross-certificate page */
3751
3752 TRACE("(%p)\n", data);
3753
3754 memset(&page, 0, sizeof(PROPSHEETPAGEW));
3755 page.dwSize = sizeof(page);
3756 page.dwFlags = PSP_USECALLBACK;
3758 page.hInstance = hInstance;
3761 page.lParam = (LPARAM)data;
3762
3763 memset(&hdr, 0, sizeof(hdr));
3764 hdr.dwSize = sizeof(hdr);
3765 hdr.hwndParent = parent;
3766 hdr.dwFlags = PSH_PROPSHEETPAGE;
3767 hdr.hInstance = hInstance;
3769 hdr.u3.ppsp = &page;
3770 hdr.nPages = 1;
3772}
#define IDD_CERT_PROPERTIES_GENERAL
Definition: cryptuires.h:187
static UINT CALLBACK cert_properties_general_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:3703
static LRESULT CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3602

Referenced by detail_dlg_proc().

◆ show_export_details()

static void show_export_details ( HWND  lv,
const struct ExportWizData data 
)
static

Definition at line 6364 of file main.c.

6365{
6367 LVITEMW item;
6368 int contentID;
6369
6370 item.mask = LVIF_TEXT;
6371 if (data->fileName)
6372 {
6373 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6374 item.iSubItem = 0;
6376 item.pszText = text;
6378 item.iSubItem = 1;
6379 item.pszText = data->fileName;
6381 }
6382
6383 item.pszText = text;
6384 switch (data->exportInfo.dwSubjectChoice)
6385 {
6390 /* do nothing */
6391 break;
6392 default:
6393 {
6394 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6395 item.iSubItem = 0;
6398 item.iSubItem = 1;
6399 LoadStringW(hInstance, data->contextInfo.fExportChain ? IDS_YES : IDS_NO, text,
6400 ARRAY_SIZE(text));
6402
6403 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6404 item.iSubItem = 0;
6407 item.iSubItem = 1;
6408 LoadStringW(hInstance, data->contextInfo.fExportPrivateKeys ? IDS_YES : IDS_NO, text,
6409 ARRAY_SIZE(text));
6411 }
6412 }
6413
6414 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6415 item.iSubItem = 0;
6418
6419 item.iSubItem = 1;
6420 switch (data->exportInfo.dwSubjectChoice)
6421 {
6423 contentID = IDS_EXPORT_FILTER_CRL;
6424 break;
6426 contentID = IDS_EXPORT_FILTER_CTL;
6427 break;
6430 break;
6431 default:
6432 switch (data->contextInfo.dwExportFormat)
6433 {
6436 break;
6438 contentID = IDS_EXPORT_FILTER_CMS;
6439 break;
6441 contentID = IDS_EXPORT_FILTER_PFX;
6442 break;
6443 default:
6444 contentID = IDS_EXPORT_FILTER_CERT;
6445 }
6446 }
6447 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
6449}
#define IDS_YES
Definition: resource.h:16
#define IDS_NO
Definition: resource.h:17
#define IDS_EXPORT_INCLUDE_CHAIN
Definition: cryptuires.h:162
#define IDS_EXPORT_FORMAT
Definition: cryptuires.h:161
#define IDS_IMPORT_FILE
Definition: cryptuires.h:87
#define IDS_EXPORT_KEYS
Definition: cryptuires.h:163

Referenced by export_finish_dlg_proc().

◆ show_export_ui()

static BOOL show_export_ui ( DWORD  dwFlags,
HWND  hwndParent,
LPCWSTR  pwszWizardTitle,
PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo,
const void pvoid 
)
static

Definition at line 6833 of file main.c.

6835{
6837 PROPSHEETPAGEW pages[6];
6838 struct ExportWizData data;
6839 int nPages = 0;
6840 BOOL hasPrivateKey, showFormatPage = TRUE;
6841 INT_PTR l;
6842
6843 data.dwFlags = dwFlags;
6844 data.pwszWizardTitle = pwszWizardTitle;
6845 memset(&data.exportInfo, 0, sizeof(data.exportInfo));
6846 memcpy(&data.exportInfo, pExportInfo,
6847 min(sizeof(data.exportInfo), pExportInfo->dwSize));
6848 if (pExportInfo->dwSize > sizeof(data.exportInfo))
6849 data.exportInfo.dwSize = sizeof(data.exportInfo);
6850 data.contextInfo.dwSize = sizeof(data.contextInfo);
6851 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6852 data.contextInfo.fExportChain = FALSE;
6853 data.contextInfo.fStrongEncryption = FALSE;
6854 data.contextInfo.fExportPrivateKeys = FALSE;
6855 data.contextInfo.pwszPassword = NULL;
6856 data.freePassword = FALSE;
6858 pvoid)
6859 memcpy(&data.contextInfo, pvoid,
6861 sizeof(data.contextInfo)));
6862 data.keyProvInfo = NULL;
6863 data.deleteKeys = FALSE;
6864 data.fileName = NULL;
6866 data.success = FALSE;
6867
6868 memset(pages, 0, sizeof(pages));
6869
6870 pages[nPages].dwSize = sizeof(pages[0]);
6871 pages[nPages].hInstance = hInstance;
6873 pages[nPages].pfnDlgProc = export_welcome_dlg_proc;
6874 pages[nPages].dwFlags = PSP_HIDEHEADER;
6875 pages[nPages].lParam = (LPARAM)&data;
6876 nPages++;
6877
6878 hasPrivateKey = export_info_has_private_key(pExportInfo);
6879 switch (pExportInfo->dwSubjectChoice)
6880 {
6883 showFormatPage = FALSE;
6884 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6885 break;
6887 showFormatPage = FALSE;
6888 data.contextInfo.dwExportFormat =
6890 break;
6892 showFormatPage = FALSE;
6893 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7;
6894 break;
6895 }
6896
6897 if (hasPrivateKey && showFormatPage)
6898 {
6899 pages[nPages].dwSize = sizeof(pages[0]);
6900 pages[nPages].hInstance = hInstance;
6903 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6904 pages[nPages].pszHeaderTitle =
6906 pages[nPages].pszHeaderSubTitle =
6908 pages[nPages].lParam = (LPARAM)&data;
6909 nPages++;
6910 }
6911 if (showFormatPage)
6912 {
6913 pages[nPages].dwSize = sizeof(pages[0]);
6914 pages[nPages].hInstance = hInstance;
6916 pages[nPages].pfnDlgProc = export_format_dlg_proc;
6917 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6918 pages[nPages].pszHeaderTitle =
6920 pages[nPages].pszHeaderSubTitle =
6922 pages[nPages].lParam = (LPARAM)&data;
6923 nPages++;
6924 }
6925 if (hasPrivateKey && showFormatPage)
6926 {
6927 pages[nPages].dwSize = sizeof(pages[0]);
6928 pages[nPages].hInstance = hInstance;
6930 pages[nPages].pfnDlgProc = export_password_dlg_proc;
6931 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6932 pages[nPages].pszHeaderTitle =
6934 pages[nPages].pszHeaderSubTitle =
6936 pages[nPages].lParam = (LPARAM)&data;
6937 nPages++;
6938 }
6939
6940 pages[nPages].dwSize = sizeof(pages[0]);
6941 pages[nPages].hInstance = hInstance;
6942 pages[nPages].u.pszTemplate = MAKEINTRESOURCEW(IDD_EXPORT_FILE);
6943 pages[nPages].pfnDlgProc = export_file_dlg_proc;
6944 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6945 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_EXPORT_FILE_TITLE);
6946 pages[nPages].pszHeaderSubTitle =
6948 pages[nPages].lParam = (LPARAM)&data;
6949 nPages++;
6950
6951 pages[nPages].dwSize = sizeof(pages[0]);
6952 pages[nPages].hInstance = hInstance;
6954 pages[nPages].pfnDlgProc = export_finish_dlg_proc;
6955 pages[nPages].dwFlags = PSP_HIDEHEADER;
6956 pages[nPages].lParam = (LPARAM)&data;
6957 nPages++;
6958
6959 memset(&hdr, 0, sizeof(hdr));
6960 hdr.dwSize = sizeof(hdr);
6961 hdr.hwndParent = hwndParent;
6962 hdr.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD97_NEW | PSH_HEADER |
6963 PSH_WATERMARK;
6964 hdr.hInstance = hInstance;
6965 if (pwszWizardTitle)
6966 hdr.pszCaption = pwszWizardTitle;
6967 else
6969 hdr.u3.ppsp = pages;
6970 hdr.nPages = nPages;
6971 hdr.u4.pszbmWatermark = MAKEINTRESOURCEW(IDB_CERT_WATERMARK);
6972 hdr.u5.pszbmHeader = MAKEINTRESOURCEW(IDB_CERT_HEADER);
6973 l = PropertySheetW(&hdr);
6974 DeleteObject(data.titleFont);
6975 if (data.freePassword)
6977 (LPWSTR)data.contextInfo.pwszPassword);
6978 HeapFree(GetProcessHeap(), 0, data.keyProvInfo);
6979 CloseHandle(data.file);
6980 HeapFree(GetProcessHeap(), 0, data.fileName);
6981 if (l == 0)
6982 {
6984 return FALSE;
6985 }
6986 else
6987 return data.success;
6988}
#define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE
Definition: cryptuiapi.h:287
#define IDD_EXPORT_PRIVATE_KEY
Definition: cryptuires.h:197
#define IDS_EXPORT_FORMAT_TITLE
Definition: cryptuires.h:149
#define IDS_EXPORT_FORMAT_SUBTITLE
Definition: cryptuires.h:150
#define IDD_EXPORT_PASSWORD
Definition: cryptuires.h:198
#define IDD_EXPORT_FINISH
Definition: cryptuires.h:201
#define IDD_EXPORT_WELCOME
Definition: cryptuires.h:196
#define IDS_EXPORT_PASSWORD_SUBTITLE
Definition: cryptuires.h:171
#define IDB_CERT_HEADER
Definition: cryptuires.h:210
#define IDS_EXPORT_FILE_SUBTITLE
Definition: cryptuires.h:152
#define IDB_CERT_WATERMARK
Definition: cryptuires.h:209
#define IDS_EXPORT_PRIVATE_KEY_SUBTITLE
Definition: cryptuires.h:169
#define IDS_EXPORT_PASSWORD_TITLE
Definition: cryptuires.h:170
#define IDS_EXPORT_PRIVATE_KEY_TITLE
Definition: cryptuires.h:168
#define IDS_EXPORT_FILE_TITLE
Definition: cryptuires.h:151
static BOOL export_info_has_private_key(PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo)
Definition: main.c:5782
static LRESULT CALLBACK export_private_key_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5705
static LRESULT CALLBACK export_format_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5835
static LRESULT CALLBACK export_password_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5958
static LRESULT CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6247
static LRESULT CALLBACK export_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5605
static LRESULT CALLBACK export_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6751
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
DLGPROC pfnDlgProc
Definition: prsht.h:226
DWORD dwSize
Definition: prsht.h:214
DWORD dwFlags
Definition: prsht.h:215
HINSTANCE hInstance
Definition: prsht.h:216

Referenced by CryptUIWizExport().

◆ show_import_details()

static void show_import_details ( HWND  lv,
struct ImportWizData data 
)
static

Definition at line 5268 of file main.c.

5269{
5271 LVITEMW item;
5272 int contentID;
5273
5274 item.mask = LVIF_TEXT;
5275 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5276 item.iSubItem = 0;
5278 item.pszText = text;
5280 item.iSubItem = 1;
5281 if (data->autoDest)
5283 else
5286 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5287 item.iSubItem = 0;
5290 switch (data->contentType)
5291 {
5294 contentID = IDS_IMPORT_CONTENT_CERT;
5295 break;
5298 contentID = IDS_IMPORT_CONTENT_CRL;
5299 break;
5302 contentID = IDS_IMPORT_CONTENT_CTL;
5303 break;
5305 contentID = IDS_IMPORT_CONTENT_CMS;
5306 break;
5308 contentID = IDS_IMPORT_CONTENT_PFX;
5309 break;
5310 default:
5311 contentID = IDS_IMPORT_CONTENT_STORE;
5312 break;
5313 }
5314 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
5315 item.iSubItem = 1;
5317 if (data->fileName)
5318 {
5319 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5320 item.iSubItem = 0;
5323 item.iSubItem = 1;
5324 item.pszText = data->fileName;
5326 }
5327}
#define IDS_IMPORT_CONTENT_CERT
Definition: cryptuires.h:89
#define IDS_IMPORT_CONTENT_CMS
Definition: cryptuires.h:92
#define IDS_IMPORT_CONTENT
Definition: cryptuires.h:88
#define IDS_IMPORT_CONTENT_STORE
Definition: cryptuires.h:94
#define IDS_IMPORT_CONTENT_PFX
Definition: cryptuires.h:93
#define IDS_IMPORT_CONTENT_CRL
Definition: cryptuires.h:90
#define IDS_IMPORT_STORE_SELECTION
Definition: cryptuires.h:85
#define IDS_IMPORT_CONTENT_CTL
Definition: cryptuires.h:91
#define IDS_IMPORT_DEST_AUTOMATIC
Definition: cryptuires.h:86
#define CERT_QUERY_CONTENT_PKCS7_SIGNED
Definition: wincrypt.h:3536

Referenced by import_finish_dlg_proc().

◆ show_import_ui()

static BOOL show_import_ui ( DWORD  dwFlags,
HWND  hwndParent,
LPCWSTR  pwszWizardTitle,
PCCRYPTUI_WIZ_IMPORT_SRC_INFO  pImportSrc,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 5446 of file main.c.

5449{
5451 PROPSHEETPAGEW pages[4];
5452 struct ImportWizData data;
5453 int nPages = 0;
5454
5456 data.pwszWizardTitle = pwszWizardTitle;
5457 if (pImportSrc)
5458 {
5459 memcpy(&data.importSrc, pImportSrc, sizeof(data.importSrc));
5460 data.fileName = (LPWSTR)pImportSrc->u.pwszFileName;
5461 }
5462 else
5463 {
5464 memset(&data.importSrc, 0, sizeof(data.importSrc));
5465 data.fileName = NULL;
5466 }
5467 data.freeSource = FALSE;
5468 data.hDestCertStore = hDestCertStore;
5469 data.freeDest = FALSE;
5470 data.autoDest = TRUE;
5471 data.success = TRUE;
5472
5473 memset(pages, 0, sizeof(pages));
5474
5475 pages[nPages].dwSize = sizeof(pages[0]);
5476 pages[nPages].hInstance = hInstance;
5478 pages[nPages].pfnDlgProc = import_welcome_dlg_proc;
5479 pages[nPages].dwFlags = PSP_HIDEHEADER;
5480 pages[nPages].lParam = (LPARAM)&data;
5481 nPages++;
5482
5483 if (!pImportSrc ||
5484 pImportSrc->dwSubjectChoice == CRYPTUI_WIZ_IMPORT_SUBJECT_FILE)
5485 {
5486 pages[nPages].dwSize = sizeof(pages[0]);
5487 pages[nPages].hInstance = hInstance;
5488 pages[nPages].u.pszTemplate = MAKEINTRESOURCEW(IDD_IMPORT_FILE);
5489 pages[nPages].pfnDlgProc = import_file_dlg_proc;
5490 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
5491 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_IMPORT_FILE_TITLE);
5492 pages[nPages].pszHeaderSubTitle =
5494 pages[nPages].lParam = (LPARAM)&data;
5495 nPages++;
5496 }
5497 else
5498 {
5499 switch (pImportSrc->dwSubjectChoice)
5500 {
5502 data.contentType = CERT_QUERY_CONTENT_CERT;
5503 break;
5505 data.contentType = CERT_QUERY_CONTENT_CRL;
5506 break;
5508 data.contentType = CERT_QUERY_CONTENT_CTL;
5509 break;
5512 break;
5513 }
5514 }
5515
5516 pages[nPages].dwSize = sizeof(pages[0]);
5517 pages[nPages].hInstance = hInstance;
5519 pages[nPages].pfnDlgProc = import_store_dlg_proc;
5520 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
5521 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_IMPORT_STORE_TITLE);
5522 pages[nPages].pszHeaderSubTitle =
5524 pages[nPages].lParam = (LPARAM)&data;
5525 nPages++;
5526
5527 pages[nPages].dwSize = sizeof(pages[0]);
5528 pages[nPages].hInstance = hInstance;
5530 pages[nPages].pfnDlgProc = import_finish_dlg_proc;
5531 pages[nPages].dwFlags = PSP_HIDEHEADER;
5532 pages[nPages].lParam = (LPARAM)&data;
5533 nPages++;
5534
5535 memset(&hdr, 0, sizeof(hdr));
5536 hdr.dwSize = sizeof(hdr);
5537 hdr.hwndParent = hwndParent;
5538 hdr.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD97_NEW | PSH_HEADER |
5539 PSH_WATERMARK;
5540 hdr.hInstance = hInstance;
5541 if (pwszWizardTitle)
5542 hdr.pszCaption = pwszWizardTitle;
5543 else
5545 hdr.u3.ppsp = pages;
5546 hdr.nPages = nPages;
5547 hdr.u4.pszbmWatermark = MAKEINTRESOURCEW(IDB_CERT_WATERMARK);
5548 hdr.u5.pszbmHeader = MAKEINTRESOURCEW(IDB_CERT_HEADER);
5550 if (data.fileName != data.importSrc.u.pwszFileName)
5551 HeapFree(GetProcessHeap(), 0, data.fileName);
5552 if (data.freeSource &&
5553 data.importSrc.dwSubjectChoice == CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE)
5554 CertCloseStore(data.importSrc.u.hCertStore, 0);
5555 DeleteObject(data.titleFont);
5556 return data.success;
5557}
#define IDD_IMPORT_STORE
Definition: cryptuires.h:192
#define IDS_IMPORT_FILE_TITLE
Definition: cryptuires.h:69
#define IDS_IMPORT_FILE_SUBTITLE
Definition: cryptuires.h:70
#define IDD_IMPORT_WELCOME
Definition: cryptuires.h:190
#define IDD_IMPORT_FILE
Definition: cryptuires.h:191
#define IDS_IMPORT_STORE_SUBTITLE
Definition: cryptuires.h:72
#define IDS_IMPORT_STORE_TITLE
Definition: cryptuires.h:71
#define IDD_IMPORT_FINISH
Definition: cryptuires.h:193
static LRESULT CALLBACK import_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5052
static LRESULT CALLBACK import_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:4871
static LRESULT CALLBACK import_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5370
static LRESULT CALLBACK import_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5153
DWORD dwFlags
Definition: main.c:4859
#define CERT_QUERY_CONTENT_SERIALIZED_STORE
Definition: wincrypt.h:3532

Referenced by CryptUIWizImport().

◆ show_selected_cert()

static void show_selected_cert ( HWND  hwnd,
int  index 
)
static

Definition at line 835 of file main.c.

836{
838
839 if (cert)
840 {
842
843 memset(&viewInfo, 0, sizeof(viewInfo));
844 viewInfo.dwSize = sizeof(viewInfo);
845 viewInfo.hwndParent = hwnd;
846 viewInfo.pCertContext = cert;
847 /* FIXME: this should be modal */
849 }
850}

Referenced by cert_mgr_dlg_proc().

◆ show_store_certs()

static void show_store_certs ( HWND  hwnd,
HCERTSTORE  store 
)
static

Definition at line 355 of file main.c.

356{
360 DWORD allocatedLen = 0;
361 LPWSTR str = NULL;
362 int index;
364 LPCSTR oid = NULL;
365 CERT_ENHKEY_USAGE *advanced = NULL;
366
368 if (index >= 0)
369 {
371
372 if (!HIWORD(data))
373 filter = data;
374 else
375 {
377
379 oid = info->pszOID;
380 }
381 }
383 advanced = create_advanced_filter();
384 do {
386 if (cert)
387 {
388 BOOL show = FALSE;
389
391 show = TRUE;
392 else
393 {
394 int numOIDs;
395 DWORD cbOIDs = 0;
396
397 if (CertGetValidUsages(1, &cert, &numOIDs, NULL, &cbOIDs))
398 {
399 if (numOIDs == -1)
400 {
401 /* -1 implies all usages are valid */
402 show = TRUE;
403 }
404 else
405 {
406 LPSTR *oids = HeapAlloc(GetProcessHeap(), 0, cbOIDs);
407
408 if (oids)
409 {
410 if (CertGetValidUsages(1, &cert, &numOIDs, oids,
411 &cbOIDs))
412 {
413 int i;
414
416 {
417 for (i = 0; !show && i < numOIDs; i++)
418 if (!strcmp(oids[i], oid))
419 show = TRUE;
420 }
421 else
422 {
423 for (i = 0; !show && i < numOIDs; i++)
424 {
425 DWORD j;
426
427 for (j = 0; !show &&
428 j < advanced->cUsageIdentifier; j++)
429 if (!strcmp(oids[i],
430 advanced->rgpszUsageIdentifier[j]))
431 show = TRUE;
432 }
433 }
434 }
435 HeapFree(GetProcessHeap(), 0, oids);
436 }
437 }
438 }
439 }
440 if (show)
441 add_cert_to_view(lv, cert, &allocatedLen, &str);
442 }
443 } while (cert);
445 if (advanced)
446 {
448 HeapFree(GetProcessHeap(), 0, advanced);
449 }
452}
BOOL WINAPI CertGetValidUsages(DWORD cCerts, PCCERT_CONTEXT *rghCerts, int *cNumOIDs, LPSTR *rghOIDs, DWORD *pcbOIDs)
Definition: cert.c:3159
static void add_cert_to_view(HWND lv, PCCERT_CONTEXT cert, DWORD *allocatedLen, LPWSTR *str)
Definition: main.c:101
static CERT_ENHKEY_USAGE * create_advanced_filter(void)
Definition: main.c:302
const CRYPT_OID_INFO * PCCRYPT_OID_INFO
Definition: wincrypt.h:1418

Referenced by cert_mgr_dlg_proc(), and refresh_store_certs().

◆ show_user_notice()

static void show_user_notice ( HWND  hwnd,
struct IssuerStatement issuerStatement 
)
static

Definition at line 2506 of file main.c.

2507{
2509 user_notice_dlg_proc, (LPARAM)issuerStatement);
2510}
#define IDD_USERNOTICE
Definition: cryptuires.h:186
static LRESULT CALLBACK user_notice_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:2463

Referenced by general_dlg_proc().

◆ strdupAtoW()

static WCHAR * strdupAtoW ( const char str)
static

Definition at line 67 of file main.c.

68{
69 DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
70 WCHAR *ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) );
71 if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
72 return ret;
73}

Referenced by cabinet_copy_file(), cabinet_next_cabinet(), ConvertChmString(), CryptUIDlgSelectCertificateA(), FindContextAlias(), FindHTMLHelpSetting(), HANDLE_CustomType21_22(), HANDLE_CustomType5_6(), HtmlHelpA(), msi_suminfo_dup_string(), MsiApplyMultiplePatchesA(), MsiApplyPatchA(), MsiBeginTransactionA(), MsiConfigureFeatureA(), MsiConfigureProductA(), MsiConfigureProductExA(), MsiCreateTransformSummaryInfoA(), MsiDatabaseApplyTransformA(), MsiDatabaseExportA(), MsiDatabaseGetPrimaryKeysA(), MsiDatabaseImportA(), MsiDatabaseIsTablePersistentA(), MsiDatabaseMergeA(), MsiDatabaseOpenViewA(), MsiDecomposeDescriptorA(), MsiDetermineApplicablePatchesA(), MsiDeterminePatchSequenceA(), MsiDoActionA(), MsiEnableLogA(), MsiEnumClientsA(), MsiEnumComponentCostsA(), MsiEnumComponentQualifiersA(), MsiEnumComponentsExA(), MsiEnumFeaturesA(), MsiEnumPatchesA(), MsiEnumPatchesExA(), MsiEnumProductsExA(), MsiEnumRelatedProductsA(), MsiGetComponentPathExA(), MsiGetComponentStateA(), MsiGetFeatureCostA(), MsiGetFeatureInfoA(), MsiGetFeatureStateA(), MsiGetFeatureUsageA(), MsiGetFeatureValidStatesA(), MsiGetFileHashA(), MsiGetFileSignatureInformationA(), MsiGetFileVersionA(), MsiGetPatchInfoA(), MsiGetPatchInfoExA(), MsiGetProductCodeA(), MsiGetProductInfoA(), MsiGetProductInfoExA(), MsiGetProductPropertyA(), MsiGetPropertyA(), MsiGetShortcutTargetA(), MsiGetSourcePathA(), MsiGetSummaryInformationA(), MsiGetTargetPathA(), MsiGetUserInfoA(), MsiInstallMissingComponentA(), MsiInstallProductA(), MsiOpenDatabaseA(), MsiOpenPackageExA(), MsiOpenProductA(), MsiPreviewDialogA(), MsiProvideComponentA(), MsiProvideQualifiedComponentExA(), MsiQueryComponentStateA(), MsiQueryFeatureStateA(), MsiQueryFeatureStateExA(), MsiQueryProductStateA(), MsiRecordSetStreamA(), MsiRecordSetStringA(), MsiReinstallFeatureA(), MsiReinstallProductA(), MsiSequenceA(), MsiSetComponentStateA(), MsiSetFeatureAttributesA(), MsiSetFeatureStateA(), MsiSetPropertyA(), MsiSetTargetPathA(), MsiSourceListAddMediaDiskA(), MsiSourceListAddSourceA(), MsiSourceListAddSourceExA(), MsiSourceListEnumMediaDisksA(), MsiSourceListEnumSourcesA(), MsiSourceListGetInfoA(), MsiSourceListSetInfoA(), MsiUseFeatureExA(), MsiVerifyPackageA(), patchinfoAtoW(), prop_sheet_pages_AtoW(), SetupGetSourceFileLocationA(), SetupGetTargetPathA(), SetupInitializeFileLogA(), SetupPromptForDiskA(), SetupQueueCopyIndirectA(), SetupQueueDeleteA(), SetupQueueRenameA(), SetupUninstallOEMInfA(), and wintypeAtoW().

◆ toggle_usage()

static void toggle_usage ( HWND  hwnd,
int  iItem 
)
static

Definition at line 617 of file main.c.

618{
620 int res;
622
623 item.mask = LVIF_STATE;
624 item.iItem = iItem;
625 item.iSubItem = 0;
626 item.stateMask = LVIS_STATEIMAGEMASK;
628 if (res)
629 {
630 int state = item.state >> 12;
631
636 }
637}

Referenced by cert_mgr_advanced_dlg_proc(), and cert_properties_general_dlg_proc().

◆ user_notice_dlg_proc()

static LRESULT CALLBACK user_notice_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 2463 of file main.c.

2465{
2466 LRESULT ret = 0;
2467 HWND text;
2468 struct IssuerStatement *issuerStatement;
2469
2470 switch (msg)
2471 {
2472 case WM_INITDIALOG:
2474 issuerStatement = (struct IssuerStatement *)lp;
2476 lstrlenW(issuerStatement->userNotice));
2477 if (issuerStatement->cps)
2478 SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)issuerStatement->cps);
2479 else
2481 break;
2482 case WM_COMMAND:
2483 switch (wp)
2484 {
2485 case IDOK:
2487 ret = TRUE;
2488 break;
2489 case IDC_CPS:
2490 {
2491 IBindCtx *bctx = NULL;
2492 LPWSTR cps;
2493
2494 CreateBindCtx(0, &bctx);
2497 HLNF_OPENINNEWWINDOW, 0);
2498 IBindCtx_Release(bctx);
2499 break;
2500 }
2501 }
2502 }
2503 return ret;
2504}
#define IDC_CPS
Definition: cryptuires.h:231
#define IDC_USERNOTICE
Definition: cryptuires.h:230

Referenced by show_user_notice().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( cryptui  )

◆ WTHelperGetKnownUsages()

BOOL WINAPI WTHelperGetKnownUsages ( DWORD  action,
PCCRYPT_OID_INFO **  usages 
)

Definition at line 896 of file wintrust_main.c.

897{
898 BOOL ret;
899
900 TRACE("(%d, %p)\n", action, usages);
901
902 if (!usages)
903 {
905 return FALSE;
906 }
907
908 if (action == 1)
909 {
910 *usages = NULL;
913 }
914 else if (action == 2)
915 {
917 *usages = NULL;
918 ret = TRUE;
919 }
920 else
921 {
922 WARN("unknown action %d\n", action);
924 ret = FALSE;
925 }
926 return ret;
927}
BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
Definition: oid.c:1776
const WCHAR * action
Definition: action.c:7509
void WINAPI WINTRUST_Free(void *p)
Definition: wintrust_main.c:54
static BOOL WINAPI WINTRUST_enumUsages(PCCRYPT_OID_INFO pInfo, void *pvArg)

Referenced by add_known_usages_to_list(), create_advanced_filter(), and InitFunctionPtrs().

Variable Documentation

◆ addressBook

const WCHAR addressBook[]
static
Initial value:
= {
'A','d','d','r','e','s','s','B','o','o','k',0 }

Definition at line 455 of file main.c.

Referenced by choose_store_for_cert(), and test_crypt_ui_wiz_import().

◆ allowFlags

DWORD allowFlags

Definition at line 4928 of file main.c.

Referenced by make_import_file_filter().

◆ ca

◆ defaultStoreList

const struct CertMgrStoreInfo defaultStoreList[]
static
Initial value:
= {
}
#define IDS_WARN_REMOVE_PLURAL_CA
Definition: cryptuires.h:111
#define IDS_WARN_REMOVE_ROOT
Definition: cryptuires.h:112
#define IDS_WARN_REMOVE_PLURAL_ADDRESSBOOK
Definition: cryptuires.h:109
#define IDS_WARN_REMOVE_PLURAL_TRUSTEDPUBLISHER
Definition: cryptuires.h:115
#define IDS_WARN_REMOVE_TRUSTEDPUBLISHER
Definition: cryptuires.h:114
#define IDS_WARN_REMOVE_CA
Definition: cryptuires.h:110
#define IDS_WARN_REMOVE_ADDRESSBOOK
Definition: cryptuires.h:108
#define IDS_WARN_REMOVE_PLURAL_ROOT
Definition: cryptuires.h:113
#define IDS_WARN_REMOVE_MY
Definition: cryptuires.h:106
#define IDS_WARN_REMOVE_DEFAULT
Definition: cryptuires.h:116
#define IDS_WARN_REMOVE_PLURAL_MY
Definition: cryptuires.h:107
static const WCHAR my[]
Definition: main.c:454
static const WCHAR disallowed[]
Definition: main.c:461
static const WCHAR trustedPublisher[]
Definition: main.c:459

Definition at line 470 of file main.c.

Referenced by show_cert_stores().

◆ disallowed

const WCHAR disallowed[] = { 'D','i','s','a','l','l','o','w','e','d',0 }
static

Definition at line 461 of file main.c.

Referenced by CRYPTDLG_IsCertAllowed(), and SoftpubAuthenticode().

◆ empty

const WCHAR empty[] = {0}
static

Definition at line 47 of file main.c.

Referenced by _create_option_elem(), _Slist_sort(), _test_open(), _test_server_open(), AppendFullPathURL(), list< _Tp, >::back(), BinaryToBase64W(), cert_mgr_clear_cert_selection(), cert_mgr_dlg_proc(), XMLStorage::XMLNode::Children::clear(), clear_lfn_slots(), create_command(), CRYPT_IsEmptyName(), delete_tree(), delete_tree_(), dictionary_put_Key(), do_reg_operation(), do_splits(), StringTest::find(), list< _Tp, >::front(), get_patch_product_codes(), get_regdata(), get_tasks_root_folder(), HTMLImageElementFactory_value(), _Rb_tree< _Key, _Compare, _Value, _KeyOfValue, _Traits, >::insert_unique(), InternetOpenRequest_test(), JSGlobal_parseInt(), lfn_remove(), TMapLoader::Load(), LoadWinTypeFromCHM(), MSI_GetProductInfo(), nfs41_client_state_revoked(), parse_culture(), parse_startup(), parse_supported_runtime(), list< _Tp, >::pop_back(), list< _Tp, >::pop_front(), proxtrans(), pSetupStringTableStringFromId(), recvrequest(), REGION_CropRegion(), reset(), run_service(), s_remote_FormatRecord(), s_remote_GetProperty(), s_remote_GetSourcePath(), s_remote_GetTargetPath(), s_remote_SummaryInfoGetProperty(), s_remote_ViewGetError(), select_style(), set_default_templates(), SHLWAPI_InvokeByIID(), SQLWritePrivateProfileStringW(), list< _Tp, >::swap(), StringTest::template_expression(), StringTest::template_wexpression(), test_assign(), test_construction(), test_copyassignment(), test_copyconstructor(), test_CopyFolder(), test_CopyStgMedium(), test_CPoint(), test_create_delete_svc(), test_create_device_list_ex(), test_CreateAssemblyNameObject(), test_CRect(), test_CryptCATOpen(), test_CSize(), test_DnsNameCompare_A(), test_DxDiag_SoundDevices(), test_DxDiag_SystemInfo(), test_empty_headers_param(), test_find_file(), test_fromguid(), test_GetAddrInfoW(), test_GetLongPathNameW(), test_GetVolumePathNamesForVolumeNameW(), test_HlinkGetSetStringReference(), test_InstallAssembly(), test_IsDomainLegalCookieDomainW(), test_IWinHttpRequest(), test_mbsspn(), test_mbsspnp(), test_menu_iteminfo(), test_message_allocate_buffer_wide(), test_message_from_string_wide(), test_message_ignore_inserts_wide(), test_misc(), test_NetFwAuthorizedApplication(), test_PdhValidatePathExW(), test_PdhValidatePathW(), test_PropVariantCompareEx(), test_QueryAssemblyInfo(), test_request_parameter_defaults(), test_sequence(), test_SQLGetPrivateProfileStringW(), test_Startup(), test_string_pointers(), test_stringtable(), test_Win32_Service(), test_WinHttpAddHeaders(), CProgressDialog::update_dialog(), update_title(), VARIANT_BstrReplaceDecimal(), Widget_array(), Widget_mystruct(), Widget_rect(), wnet_use_connection(), and xmlParse3986Segment().

◆ export_filter_cert

const WCHAR export_filter_cert[] = { '*','.','c','e','r',0 }
static

Definition at line 6174 of file main.c.

Referenced by make_export_file_filter().

◆ export_filter_cms

const WCHAR export_filter_cms[] = { '*','.','p','7','b',0 }
static

Definition at line 6177 of file main.c.

Referenced by make_export_file_filter().

◆ export_filter_crl

const WCHAR export_filter_crl[] = { '*','.','c','r','l',0 }
static

Definition at line 6175 of file main.c.

Referenced by make_export_file_filter().

◆ export_filter_ctl

const WCHAR export_filter_ctl[] = { '*','.','s','t','l',0 }
static

Definition at line 6176 of file main.c.

Referenced by make_export_file_filter().

◆ export_filter_pfx

const WCHAR export_filter_pfx[] = { '*','.','p','f','x',0 }
static

Definition at line 6178 of file main.c.

Referenced by make_export_file_filter().

◆ export_filter_sst

const WCHAR export_filter_sst[] = { '*','.','s','s','t',0 }
static

Definition at line 6179 of file main.c.

Referenced by make_export_file_filter().

◆ filter

◆ filter_all

const WCHAR filter_all[] = { '*','.','*',0 }
static

Definition at line 4923 of file main.c.

Referenced by make_export_file_filter().

◆ filter_cert

const WCHAR filter_cert[]
static
Initial value:
= { '*','.','c','e','r',';','*','.',
'c','r','t',0 }

Definition at line 4914 of file main.c.

◆ filter_cms

const WCHAR filter_cms[]
static
Initial value:
= { '*','.','s','p','c',';','*','.',
'p','7','b',0 }

Definition at line 4921 of file main.c.

◆ filter_crl

const WCHAR filter_crl[] = { '*','.','c','r','l',0 }
static

Definition at line 4918 of file main.c.

◆ filter_ctl

const WCHAR filter_ctl[] = { '*','.','s','t','l',0 }
static

Definition at line 4919 of file main.c.

◆ filter_pfx

const WCHAR filter_pfx[]
static
Initial value:
= { '*','.','p','f','x',';','*','.',
'p','1','2',0 }

Definition at line 4916 of file main.c.

◆ filter_serialized_store

const WCHAR filter_serialized_store[] = { '*','.','s','s','t',0 }
static

Definition at line 4920 of file main.c.

◆ hInstance

HINSTANCE hInstance
static

Definition at line 45 of file main.c.

◆ id

Definition at line 4927 of file main.c.

Referenced by mapStructEntryToValue(), setOidWithItem(), and setOidWithItemAndIpAddr().

◆ 

const struct { ... } import_filters[]
Initial value:
= {
}
#define IDS_IMPORT_FILTER_CERT
Definition: cryptuires.h:73
#define IDS_IMPORT_FILTER_CMS
Definition: cryptuires.h:78
#define IDS_IMPORT_FILTER_PFX
Definition: cryptuires.h:74
#define IDS_IMPORT_FILTER_CTL
Definition: cryptuires.h:76
#define IDS_IMPORT_FILTER_SERIALIZED_STORE
Definition: cryptuires.h:77
#define IDS_IMPORT_FILTER_CRL
Definition: cryptuires.h:75
static const WCHAR filter_crl[]
Definition: main.c:4918
static const WCHAR filter_cms[]
Definition: main.c:4921
static const WCHAR filter_serialized_store[]
Definition: main.c:4920
static const WCHAR filter_cert[]
Definition: main.c:4914
static const WCHAR filter_pfx[]
Definition: main.c:4916
static const WCHAR filter_ctl[]
Definition: main.c:4919

Referenced by make_import_file_filter().

◆ listItems

const struct selection_list_item listItems[]
static
Initial value:
= {
}
#define IDS_FIELDS_V1
Definition: cryptuires.h:46
#define IDS_FIELDS_PROPERTIES
Definition: cryptuires.h:49
#define IDS_FIELDS_ALL
Definition: cryptuires.h:45
#define IDS_FIELDS_EXTENSIONS
Definition: cryptuires.h:47
#define IDS_FIELDS_CRITICAL_EXTENSIONS
Definition: cryptuires.h:48
static void add_critical_extensions(HWND hwnd, struct detail_data *data)
Definition: main.c:2994
static void add_all_fields(HWND hwnd, struct detail_data *data)
Definition: main.c:3078

Definition at line 3091 of file main.c.

Referenced by create_show_list(), and set_fields_selection().

◆ my

const WCHAR my[] = { 'M','y',0 }
static

Definition at line 454 of file main.c.

◆ oidMap

struct OIDToString oidMap[]
static

Definition at line 1917 of file main.c.

Referenced by findSupportedOID().

◆ prop_id_map

const struct prop_id_to_string_id prop_id_map[]
static
Initial value:
= {
}
#define IDS_PROP_HASH
Definition: cryptuires.h:58
#define IDS_PROP_DESCRIPTION
Definition: cryptuires.h:61
#define IDS_PROP_FRIENDLY_NAME
Definition: cryptuires.h:60
#define IDS_PROP_ENHKEY_USAGE
Definition: cryptuires.h:59
static WCHAR * format_enhanced_key_usage_value(void *pb, DWORD cb)
Definition: main.c:3015
#define CERT_ENHKEY_USAGE_PROP_ID
Definition: wincrypt.h:2694
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2688

Definition at line 3029 of file main.c.

Referenced by add_properties().

◆ publisherStoreList

◆ root

const WCHAR root[] = { 'R','o','o','t',0 }
static

Definition at line 458 of file main.c.

◆ trustedPublisher

const WCHAR trustedPublisher[]
static
Initial value:
= {
'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r',0 }

Definition at line 459 of file main.c.

◆ v1_fields

const struct v1_field v1_fields[]
static
Initial value:
= {
}
#define IDS_FIELD_SERIAL_NUMBER
Definition: cryptuires.h:51
#define IDS_FIELD_SUBJECT
Definition: cryptuires.h:55
#define IDS_FIELD_VALID_FROM
Definition: cryptuires.h:53
#define IDS_FIELD_PUBLIC_KEY
Definition: cryptuires.h:56
#define IDS_FIELD_VERSION
Definition: cryptuires.h:50
#define IDS_FIELD_ISSUER
Definition: cryptuires.h:52
#define IDS_FIELD_VALID_TO
Definition: cryptuires.h:54
static WCHAR * field_format_detailed_issuer(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2653
static WCHAR * field_format_subject(PCCERT_CONTEXT cert)
Definition: main.c:2658
static WCHAR * field_format_public_key(PCCERT_CONTEXT cert)
Definition: main.c:2699
static WCHAR * field_format_to_date(PCCERT_CONTEXT cert)
Definition: main.c:2694
static WCHAR * field_format_from_date(PCCERT_CONTEXT cert)
Definition: main.c:2689
static WCHAR * field_format_serial_number(PCCERT_CONTEXT cert)
Definition: main.c:2625
static WCHAR * field_format_detailed_public_key(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2740
static WCHAR * field_format_detailed_subject(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2663
static WCHAR * field_format_issuer(PCCERT_CONTEXT cert)
Definition: main.c:2631
static WCHAR * field_format_version(PCCERT_CONTEXT cert)
Definition: main.c:2599

Definition at line 2835 of file main.c.

Referenced by add_v1_fields().