ReactOS 0.4.17-dev-243-g1369312
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 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR CALLBACK user_notice_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static void show_user_notice (HWND hwnd, struct IssuerStatement *issuerStatement)
 
static INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR CALLBACK import_file_dlg_proc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
 
static INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 INT_PTR 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 1330 of file main.c.

◆ MAX_DESCRIPTION

#define MAX_DESCRIPTION   255

Definition at line 3502 of file main.c.

◆ MAX_FRIENDLY_NAME

#define MAX_FRIENDLY_NAME   40

Definition at line 3501 of file main.c.

◆ MAX_PURPOSE

#define MAX_PURPOSE   255

Definition at line 3193 of file main.c.

◆ MAX_STRING_LEN

#define MAX_STRING_LEN   512

Definition at line 69 of file main.c.

◆ MY_INDENT

#define MY_INDENT   200

Definition at line 1870 of file main.c.

◆ WM_REFRESH_VIEW

#define WM_REFRESH_VIEW   WM_USER + 0

Definition at line 3492 of file main.c.

Typedef Documentation

◆ add_fields_func

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

Definition at line 2730 of file main.c.

◆ create_detailed_value_func

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

Definition at line 2732 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 2571 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 1326 of file main.c.

◆ prop_to_value_func

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

Definition at line 2973 of file main.c.

Enumeration Type Documentation

◆ CheckBitmapIndex

Enumerator
CheckBitmapIndexUnchecked 
CheckBitmapIndexChecked 
CheckBitmapIndexDisabledUnchecked 
CheckBitmapIndexDisabledChecked 

Definition at line 567 of file main.c.

567 {
CheckBitmapIndex
Definition: main.c:567
@ CheckBitmapIndexChecked
Definition: main.c:569
@ CheckBitmapIndexUnchecked
Definition: main.c:568
@ CheckBitmapIndexDisabledUnchecked
Definition: main.c:570
@ CheckBitmapIndexDisabledChecked
Definition: main.c:571

◆ PurposeFilter

Enumerator
PurposeFilterShowAll 
PurposeFilterShowAdvanced 
PurposeFilterShowOID 

Definition at line 210 of file main.c.

210 {
PurposeFilter
Definition: main.c:210
@ PurposeFilterShowAdvanced
Definition: main.c:212
@ PurposeFilterShowAll
Definition: main.c:211
@ PurposeFilterShowOID
Definition: main.c:213

◆ PurposeSelection

Enumerator
PurposeEnableAll 
PurposeDisableAll 
PurposeEnableSelected 

Definition at line 3346 of file main.c.

3346 {
3347 PurposeEnableAll = 0,
PurposeSelection
Definition: main.c:3346
@ PurposeEnableAll
Definition: main.c:3347
@ PurposeEnableSelected
Definition: main.c:3349
@ PurposeDisableAll
Definition: main.c:3348

Function Documentation

◆ add_all_extensions()

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

Definition at line 2953 of file main.c.

2954{
2955 DWORD i;
2956 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2957
2958 for (i = 0; i < cert->pCertInfo->cExtension; i++)
2959 add_cert_extension_detail(hwnd, data, &cert->pCertInfo->rgExtension[i]);
2960}
static void add_cert_extension_detail(HWND hwnd, struct detail_data *data, PCERT_EXTENSION ext)
Definition: main.c:2924
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:1374
_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 3046 of file main.c.

3047{
3051}
static void add_v1_fields(HWND hwnd, struct detail_data *data)
Definition: main.c:2815
static void add_properties(HWND hwnd, struct detail_data *data)
Definition: main.c:3005
static void add_all_extensions(HWND hwnd, struct detail_data *data)
Definition: main.c:2953

◆ add_cert_columns()

static void add_cert_columns ( HWND  hwnd)
static

Definition at line 71 of file main.c.

72{
74 RECT rc;
77
79 GetWindowRect(lv, &rc);
82 column.cx = (rc.right - rc.left) * 29 / 100 - 2;
83 column.pszText = buf;
87 column.cx = (rc.right - rc.left) * 16 / 100 - 2;
90 column.cx = (rc.right - rc.left) * 23 / 100 - 1;
93}
#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
LONG_PTR LPARAM
Definition: minwindef.h:175
short WCHAR
Definition: pedump.c:58
#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
#define LoadStringW
Definition: utils.h:64
LONG right
Definition: windef.h:108
LONG left
Definition: windef.h:106
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

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 2924 of file main.c.

2926{
2928 ext->pszObjId, 0);
2930
2931 if (oidInfo)
2934 else
2935 {
2936 DWORD len = strlen(ext->pszObjId);
2937 WCHAR *oidW = malloc((len + 1) * sizeof(WCHAR));
2938
2939 if (oidW)
2940 {
2941 DWORD i;
2942
2943 for (i = 0; i <= len; i++)
2944 oidW[i] = ext->pszObjId[i];
2947 free(oidW);
2948 }
2949 }
2950 free(val);
2951}
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
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:2754
static WCHAR * field_format_detailed_extension(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2913
static WCHAR * crypt_format_extension(const CERT_EXTENSION *ext, DWORD formatStrType)
Definition: main.c:2829
static const WCHAR *const ext[]
Definition: module.c:53
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
GLuint GLfloat * val
Definition: glext.h:7180
GLenum GLsizei len
Definition: glext.h:6722
uint16_t * LPWSTR
Definition: typedefs.h:56
#define CRYPT_OID_INFO_OID_KEY
Definition: wincrypt.h:1955

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 1773 of file main.c.

1775{
1776 LPWSTR name = get_cert_name_string(pCertContext, dwType, dwFlags);
1777
1778 if (name)
1779 {
1780 /* Don't include NULL-terminator in output */
1782
1784 free(name);
1785 }
1786}
static LPWSTR get_cert_name_string(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags)
Definition: main.c:1757
static void add_unformatted_text_to_control(HWND hwnd, LPCWSTR text, LONG len)
Definition: main.c:1714
#define lstrlenW
Definition: compat.h:750
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
Definition: name.c:39

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 7011 of file main.c.

7013{
7014 DWORD len;
7015 LVITEMW item;
7016 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
7017 WCHAR buf[80];
7018 SYSTEMTIME sysTime;
7020
7022 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
7023 item.iSubItem = 0;
7024 item.iImage = 0;
7026 if (!item.iItem)
7027 {
7028 item.mask |= LVIF_STATE;
7029 item.state = LVIS_SELECTED;
7030 item.stateMask = -1;
7031 }
7033 {
7035 if (len > *allocatedLen)
7036 {
7037 free(*str);
7038 *str = malloc(len * sizeof(WCHAR));
7039 if (*str)
7040 *allocatedLen = len;
7041 }
7042 if (*str)
7043 {
7045 item.pszText = *str;
7047 }
7048 item.mask = LVIF_TEXT;
7049 ++item.iSubItem;
7050 }
7052 {
7054 NULL, 0);
7055 if (len > *allocatedLen)
7056 {
7057 free(*str);
7058 *str = malloc(len * sizeof(WCHAR));
7059 if (*str)
7060 *allocatedLen = len;
7061 }
7062 if (*str)
7063 {
7065 *str, len);
7066 item.pszText = *str;
7067 if (!item.iSubItem)
7069 else
7071 }
7072 item.mask = LVIF_TEXT;
7073 ++item.iSubItem;
7074 }
7076 {
7078 if (usages)
7079 {
7080 item.pszText = usages;
7081 if (!item.iSubItem)
7083 else
7085 free(usages);
7086 }
7087 item.mask = LVIF_TEXT;
7088 ++item.iSubItem;
7089 }
7091 {
7094 if (len > *allocatedLen)
7095 {
7096 free(*str);
7097 *str = malloc(len * sizeof(WCHAR));
7098 if (*str)
7099 *allocatedLen = len;
7100 }
7101 if (*str)
7102 {
7104 item.pszText = none;
7105 else
7106 item.pszText = *str;
7107 if (!item.iSubItem)
7109 else
7111 }
7112 item.mask = LVIF_TEXT;
7113 ++item.iSubItem;
7114 }
7116 {
7118 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
7119 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf, ARRAY_SIZE(buf));
7120 item.pszText = buf;
7121 if (!item.iSubItem)
7123 else
7125 item.mask = LVIF_TEXT;
7126 ++item.iSubItem;
7127 }
7129 {
7130 static int show_fixme;
7131 if (!show_fixme++)
7132 FIXME("showing location is not implemented\n");
7134 if (!item.iSubItem)
7136 else
7138 }
7139}
#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:1220
static void get_cert_usages(PCCERT_CONTEXT cert, LPWSTR *str)
Definition: main.c:836
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:183
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1675
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:1001
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:3658
#define CERT_FRIENDLY_NAME_PROP_ID
Definition: wincrypt.h:2844
#define CERT_NAME_ISSUER_FLAG
Definition: wincrypt.h:3664
#define LOCALE_SSHORTDATE
Definition: winnls.h:67

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 95 of file main.c.

97{
98 DWORD len;
100 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
101 WCHAR date[80];
102 SYSTEMTIME sysTime;
103 LPWSTR none;
104
106 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
107 item.iSubItem = 0;
108 item.iImage = 0;
111 NULL, 0);
112 if (len > *allocatedLen)
113 {
114 free(*str);
115 *str = malloc(len * sizeof(WCHAR));
116 if (*str)
117 *allocatedLen = len;
118 }
119 if (*str)
120 {
122 *str, len);
123 item.pszText = *str;
125 }
126
127 item.mask = LVIF_TEXT;
130 if (len > *allocatedLen)
131 {
132 free(*str);
133 *str = malloc(len * sizeof(WCHAR));
134 if (*str)
135 *allocatedLen = len;
136 }
137 if (*str)
138 {
141 item.pszText = *str;
142 item.iSubItem = 1;
144 }
145
147 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
148 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
149 item.pszText = date;
150 item.iSubItem = 2;
152
154 NULL, &len))
156 if (len > *allocatedLen)
157 {
158 free(*str);
159 *str = malloc(len * sizeof(WCHAR));
160 if (*str)
161 *allocatedLen = len;
162 }
163 if (*str)
164 {
166 *str, &len))
167 item.pszText = none;
168 else
169 item.pszText = *str;
170 item.iSubItem = 3;
172 }
173}
__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 2962 of file main.c.

2963{
2964 DWORD i;
2965 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2966
2967 for (i = 0; i < cert->pCertInfo->cExtension; i++)
2968 if (cert->pCertInfo->rgExtension[i].fCritical)
2970 &cert->pCertInfo->rgExtension[i]);
2971}

◆ add_date_string_to_control()

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

Definition at line 2385 of file main.c.

2386{
2387 WCHAR dateFmt[80]; /* sufficient for all versions of LOCALE_SSHORTDATE */
2388 WCHAR date[80];
2389 SYSTEMTIME sysTime;
2390
2392 FileTimeToSystemTime(fileTime, &sysTime);
2393 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
2395}

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 2754 of file main.c.

2756{
2757 LVITEMW item;
2758 int iItem = SendMessageW(hwnd, LVM_GETITEMCOUNT, 0, 0);
2759
2760 item.mask = LVIF_TEXT | LVIF_PARAM;
2761 item.iItem = iItem;
2762 item.iSubItem = 0;
2763 item.pszText = field;
2764 item.lParam = (LPARAM)data;
2766 if (value)
2767 {
2768 item.pszText = value;
2769 item.iSubItem = 1;
2771 }
2773}
static void add_field_value_data(struct detail_data *data, create_detailed_value_func create, void *param)
Definition: main.c:2741
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 2741 of file main.c.

2743{
2744 data->fields = realloc(data->fields, (data->cFields + 1) * sizeof(struct field_value_data));
2745 if (data->fields)
2746 {
2747 data->fields[data->cFields].create = create;
2748 data->fields[data->cFields].detailed_value = NULL;
2749 data->fields[data->cFields].param = param;
2750 data->cFields++;
2751 }
2752}
#define realloc
Definition: debug_ros.c:6

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 1788 of file main.c.

1789{
1790 HRESULT hr;
1791 IRichEditOle *richEditOle = NULL;
1792 IOleObject *object = NULL;
1793 CLSID clsid;
1794 LPOLECACHE oleCache = NULL;
1795 FORMATETC formatEtc;
1796 DWORD conn;
1797 IDataObject *dataObject = NULL;
1799 STGMEDIUM stgm;
1800 IOleClientSite *clientSite = NULL;
1801 REOBJECT reObject;
1802
1803 TRACE("(%p, %d)\n", hwnd, id);
1804
1805 SendMessageW(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&richEditOle);
1806 if (!richEditOle)
1807 goto end;
1809 (void**)&object);
1810 if (FAILED(hr))
1811 goto end;
1812 hr = IOleObject_GetUserClassID(object, &clsid);
1813 if (FAILED(hr))
1814 goto end;
1815 hr = IOleObject_QueryInterface(object, &IID_IOleCache, (void**)&oleCache);
1816 if (FAILED(hr))
1817 goto end;
1818 formatEtc.cfFormat = CF_BITMAP;
1819 formatEtc.ptd = NULL;
1820 formatEtc.dwAspect = DVASPECT_CONTENT;
1821 formatEtc.lindex = -1;
1822 formatEtc.tymed = TYMED_GDI;
1823 hr = IOleCache_Cache(oleCache, &formatEtc, 0, &conn);
1824 if (FAILED(hr))
1825 goto end;
1826 hr = IOleObject_QueryInterface(object, &IID_IDataObject,
1827 (void**)&dataObject);
1828 if (FAILED(hr))
1829 goto end;
1830 hr = IRichEditOle_GetClientSite(richEditOle, &clientSite);
1831 if (FAILED(hr))
1832 goto end;
1835 if (!bitmap)
1836 goto end;
1837 stgm.tymed = TYMED_GDI;
1838 stgm.hBitmap = bitmap;
1839 stgm.pUnkForRelease = NULL;
1840 hr = IDataObject_SetData(dataObject, &formatEtc, &stgm, TRUE);
1841 if (FAILED(hr))
1842 goto end;
1843
1844 reObject.cbStruct = sizeof(reObject);
1845 reObject.cp = REO_CP_SELECTION;
1846 reObject.clsid = clsid;
1847 reObject.poleobj = object;
1848 reObject.pstg = NULL;
1849 reObject.polesite = clientSite;
1850 reObject.sizel.cx = reObject.sizel.cy = 0;
1851 reObject.dvaspect = DVASPECT_CONTENT;
1852 reObject.dwFlags = 0;
1853 reObject.dwUser = 0;
1854
1855 IRichEditOle_InsertObject(richEditOle, &reObject);
1856
1857end:
1858 if (clientSite)
1859 IOleClientSite_Release(clientSite);
1860 if (dataObject)
1861 IDataObject_Release(dataObject);
1862 if (oleCache)
1863 IOleCache_Release(oleCache);
1864 if (object)
1865 IOleObject_Release(object);
1866 if (richEditOle)
1867 IRichEditOle_Release(richEditOle);
1868}
#define CF_BITMAP
Definition: constants.h:397
HRESULT hr
Definition: delayimp.cpp:582
#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
const CLSID * clsid
Definition: msctf.cpp:50
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
#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:1104
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:2572
#define LR_DEFAULTSIZE
Definition: winuser.h:1105
#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 574 of file main.c.

576{
578
581 item.stateMask = LVIS_STATEIMAGEMASK;
582 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
583 item.iSubItem = 0;
584 item.lParam = (LPARAM)info;
585 item.pszText = (LPWSTR)info->pwszName;
587}
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 589 of file main.c.

590{
592
594 {
596
597 for (ptr = usages; *ptr; ptr++)
600 }
601}
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:574
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 1972 of file main.c.

1973{
1974 struct OIDToString *entry;
1975 WCHAR nl = '\n';
1976 PARAFORMAT2 parFmt;
1977
1978 parFmt.cbSize = sizeof(parFmt);
1979 parFmt.dwMask = PFM_STARTINDENT;
1980 parFmt.dxStartIndent = MY_INDENT * 3;
1981 if ((entry = findSupportedOID(oid)))
1982 {
1983 WCHAR *str, *linebreak, *ptr;
1984 BOOL multiline = FALSE;
1985 int len;
1986
1987 len = LoadStringW(hInstance, entry->id, (LPWSTR)&str, 0);
1988 ptr = str;
1989 do {
1990 if ((linebreak = wmemchr(ptr, '\n', len)))
1991 {
1993
1994 multiline = TRUE;
1995 /* The source string contains a newline, which the richedit
1996 * control won't find since it's interpreted as a paragraph
1997 * break. Therefore copy up to the newline. lstrcpynW always
1998 * NULL-terminates, so pass one more than the length of the
1999 * source line so the copy includes the entire line and the
2000 * NULL-terminator.
2001 */
2002 lstrcpynW(copy, ptr, linebreak - ptr + 1);
2004 linebreak - ptr, &parFmt);
2005 ptr = linebreak + 1;
2007 }
2008 else if (multiline && *ptr)
2009 {
2010 /* Add the last line */
2012 len - (ptr - str), &parFmt);
2014 }
2015 } while (linebreak);
2016 if (!multiline)
2017 {
2020 }
2021 }
2022 else
2023 {
2024 WCHAR *oidW = malloc((strlen(oid) + 1) * sizeof(WCHAR));
2025
2026 if (oidW)
2027 {
2028 LPCSTR src;
2029 WCHAR *dst;
2030
2031 for (src = oid, dst = oidW; *src; src++, dst++)
2032 *dst = *src;
2033 *dst = 0;
2035 &parFmt);
2037 free(oidW);
2038 }
2039 }
2040}
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:1740
#define MY_INDENT
Definition: main.c:1870
static struct OIDToString * findSupportedOID(LPCSTR oid)
Definition: main.c:1955
#define lstrcpynW
Definition: compat.h:738
const WCHAR * text
Definition: package.c:1794
static wchar_t * wmemchr(const wchar_t *s, wchar_t c, size_t n)
Definition: wchar.h:48
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
uint32_t entry
Definition: isohybrid.c:63
#define PFM_STARTINDENT
Definition: richedit.h:838
LPCSTR oid
Definition: main.c:1891
DWORD dwMask
Definition: richedit.h:667
UINT cbSize
Definition: richedit.h:666
LONG dxStartIndent
Definition: richedit.h:670
const char * LPCSTR
Definition: typedefs.h:52

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 1872 of file main.c.

1873{
1874 WCHAR nl = '\n';
1876 PARAFORMAT2 parFmt;
1877
1878 parFmt.cbSize = sizeof(parFmt);
1879 parFmt.dwMask = PFM_STARTINDENT;
1880 parFmt.dxStartIndent = MY_INDENT * 3;
1881 if (oidInfo)
1882 {
1884 lstrlenW(oidInfo->pwszName), &parFmt);
1886 }
1887}

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 256 of file main.c.

257{
258 usage->rgpszUsageIdentifier = realloc(usage->rgpszUsageIdentifier,
259 (usage->cUsageIdentifier + 1) * sizeof(char *));
260 if (usage->rgpszUsageIdentifier)
261 usage->rgpszUsageIdentifier[usage->cUsageIdentifier++] = oid;
262 else
263 {
264 free(usage);
265 usage = NULL;
266 }
267 return usage;
268}
GLsizeiptr const GLvoid GLenum usage
Definition: glext.h:5919

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 3005 of file main.c.

3006{
3007 DWORD i;
3008 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
3009
3010 for (i = 0; i < ARRAY_SIZE(prop_id_map); i++)
3011 {
3012 DWORD cb;
3013
3015 &cb))
3016 {
3017 BYTE *pb;
3018 WCHAR *val = NULL;
3019
3020 /* FIXME: MS adds a separate value for the signature hash
3021 * algorithm.
3022 */
3023 pb = malloc(cb);
3024 if (pb)
3025 {
3027 prop_id_map[i].prop, pb, &cb))
3028 {
3029 if (prop_id_map[i].prop_is_string)
3030 {
3031 val = (LPWSTR)pb;
3032 /* Don't double-free pb */
3033 pb = NULL;
3034 }
3035 else
3036 val = prop_id_map[i].prop_to_value(pb, cb);
3037 }
3038 free(pb);
3039 }
3041 NULL, NULL);
3042 }
3043 }
3044}
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:2775
static const struct prop_id_to_string_id prop_id_map[]
Definition: main.c:2997
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
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 3120 of file main.c.

3121{
3124
3125 if (info)
3126 {
3127 char *oidCopy = strdup(oid);
3128
3129 if (oidCopy)
3130 {
3131 LVITEMA item;
3132
3133 info->cbSize = sizeof(CRYPT_OID_INFO);
3134 info->pszOID = oidCopy;
3137 item.stateMask = LVIS_STATEIMAGEMASK;
3138 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
3139 item.iSubItem = 0;
3140 item.lParam = (LPARAM)info;
3141 item.pszText = oidCopy;
3143 }
3144 else
3145 free(info);
3146 }
3147}
#define IDC_CERTIFICATE_USAGES
Definition: cryptuires.h:238
static char * strdup(const char *buf)
Definition: string.h:83
#define LVM_INSERTITEMA
Definition: commctrl.h:2408
#define calloc
Definition: rosglue.h:14
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 INT_PTR CALLBACK add_purpose_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 3195 of file main.c.

3197{
3198 INT_PTR ret = 0;
3199 char buf[MAX_PURPOSE + 1];
3200
3201 switch (msg)
3202 {
3203 case WM_INITDIALOG:
3205 MAX_PURPOSE, 0);
3208 break;
3209 case WM_COMMAND:
3210 switch (HIWORD(wp))
3211 {
3212 case EN_CHANGE:
3213 if (LOWORD(wp) == IDC_NEW_PURPOSE)
3214 {
3215 /* Show/hide scroll bar on description depending on how much
3216 * text it has.
3217 */
3220
3222 }
3223 break;
3224 case BN_CLICKED:
3225 switch (LOWORD(wp))
3226 {
3227 case IDOK:
3229 (LPARAM)buf);
3230 if (!buf[0])
3231 {
3232 /* An empty purpose is the same as cancelling */
3234 ret = TRUE;
3235 }
3236 else if (!is_valid_oid(buf))
3237 {
3239
3243 }
3244 else if (is_oid_in_list(
3246 {
3248
3250 ARRAY_SIZE(error));
3253 }
3254 else
3255 {
3257
3259 EndDialog(hwnd, wp);
3260 ret = TRUE;
3261 }
3262 break;
3263 case IDCANCEL:
3264 EndDialog(hwnd, wp);
3265 ret = TRUE;
3266 break;
3267 }
3268 break;
3269 }
3270 break;
3271 }
3272 return ret;
3273}
#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:3120
static BOOL is_oid_in_list(HWND hwnd, LPCSTR oid)
Definition: main.c:3187
static BOOL is_valid_oid(LPCSTR oid)
Definition: main.c:3149
#define MAX_PURPOSE
Definition: main.c:3193
HANDLE HWND
Definition: compat.h:19
return ret
Definition: mutex.c:146
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
int32_t INT_PTR
Definition: typedefs.h:64
#define HIWORD(l)
Definition: typedefs.h:247
const char * description
Definition: directx.c:2497
#define DWLP_USER
Definition: winuser.h:883
#define GetWindowLongPtrW
Definition: winuser.h:4983
#define IDCANCEL
Definition: winuser.h:842
#define SB_VERT
Definition: winuser.h:553
#define WM_COMMAND
Definition: winuser.h:1768
#define WM_GETTEXT
Definition: winuser.h:1646
#define WM_INITDIALOG
Definition: winuser.h:1767
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define IDOK
Definition: winuser.h:841
#define MB_ICONERROR
Definition: winuser.h:798
#define EM_SETLIMITTEXT
Definition: winuser.h:2040
#define MB_ICONEXCLAMATION
Definition: winuser.h:796
#define MB_OK
Definition: winuser.h:801
#define BN_CLICKED
Definition: winuser.h:1954
BOOL WINAPI ShowScrollBar(_In_ HWND, _In_ int, _In_ BOOL)
#define EM_GETLINECOUNT
Definition: winuser.h:2021
#define SetWindowLongPtrW
Definition: winuser.h:5512
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define EN_CHANGE
Definition: winuser.h:2051

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 7141 of file main.c.

7143{
7145 BOOL select = FALSE;
7146 DWORD allocatedLen = 0;
7147 LPWSTR str = NULL;
7148
7149 do {
7151 if (cert && (!filter || filter(cert, &select, callback_data)))
7152 add_cert_to_list(lv, cert, flags, &allocatedLen, &str);
7153 } while (cert);
7154 free(str);
7155}
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:7011
LPCWSTR filter
Definition: main.c:4884
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 2775 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 1731 of file main.c.

1732{
1733 LPWSTR str;
1734 LONG len;
1735
1736 len = LoadStringW(hInstance, id, (LPWSTR)&str, 0);
1738}
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 1714 of file main.c.

1715{
1716 struct ReadStringStruct string;
1717 EDITSTREAM editstream;
1718
1719 TRACE("(%p, %s)\n", hwnd, debugstr_wn(text, len));
1720
1721 string.buf = text;
1722 string.pos = 0;
1723 string.len = len;
1724 editstream.dwCookie = (DWORD_PTR)&string;
1725 editstream.dwError = 0;
1726 editstream.pfnCallback = read_text_callback;
1728 (LPARAM)&editstream);
1729}
static DWORD CALLBACK read_text_callback(DWORD_PTR dwCookie, LPBYTE buf, LONG cb, LONG *pcb)
Definition: main.c:1700
#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 2791 of file main.c.

2793{
2794 WCHAR *val = field->format(data->pCertViewInfo->pCertContext);
2795
2796 if (val)
2797 {
2799 field->create_detailed_value, NULL);
2800 free(val);
2801 }
2802}

Referenced by add_v1_fields().

◆ add_v1_fields()

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

Definition at line 2815 of file main.c.

2816{
2817 unsigned int i;
2818 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
2819
2820 /* The last item in v1_fields is the public key, which is not in the loop
2821 * because it's a special case.
2822 */
2823 for (i = 0; i < ARRAY_SIZE(v1_fields) - 1; i++)
2825 if (cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData)
2827}
static const struct v1_field v1_fields[]
Definition: main.c:2804
static void add_v1_field(HWND hwnd, struct detail_data *data, const struct v1_field *field)
Definition: main.c:2791

Referenced by add_all_fields().

◆ apply_general_changes()

static void apply_general_changes ( HWND  hwnd)
static

Definition at line 3504 of file main.c.

3505{
3507 struct edit_cert_data *data =
3509
3515 {
3516 /* Setting a NULL usage removes the enhanced key usage property. */
3518 }
3520 {
3521 CERT_ENHKEY_USAGE usage = { 0, NULL };
3522
3524 }
3526 {
3528 CERT_ENHKEY_USAGE usage = { 0, NULL };
3529 int purposes = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
3530 LVITEMW item;
3531
3532 item.mask = LVIF_STATE | LVIF_PARAM;
3533 item.iSubItem = 0;
3534 item.stateMask = LVIS_STATEIMAGEMASK;
3535 for (i = 0; i < purposes; i++)
3536 {
3537 item.iItem = i;
3538 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
3539 {
3540 int state = item.state >> 12;
3541
3543 {
3545
3546 usage.rgpszUsageIdentifier = realloc(usage.rgpszUsageIdentifier,
3547 (usage.cUsageIdentifier + 1) * sizeof(char *));
3548 if (usage.rgpszUsageIdentifier)
3549 usage.rgpszUsageIdentifier[usage.cUsageIdentifier++] =
3550 (LPSTR)info->pszOID;
3551 }
3552 }
3553 }
3555 free(usage.rgpszUsageIdentifier);
3556 }
3558 if (data->pfPropertiesChanged)
3559 *data->pfPropertiesChanged = TRUE;
3560}
#define IDC_DESCRIPTION
Definition: resource.h:17
#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:3502
static void set_cert_string_property(PCCERT_CONTEXT cert, DWORD prop, LPWSTR str)
Definition: main.c:3477
static BOOL CALLBACK refresh_propsheet_pages(HWND hwnd, LPARAM lParam)
Definition: main.c:3494
#define LVM_GETITEMW
Definition: commctrl.h:2395
char * LPSTR
Definition: typedefs.h:51
#define CERT_DESCRIPTION_PROP_ID
Definition: wincrypt.h:2846
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 INT_PTR CALLBACK cert_mgr_advanced_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 708 of file main.c.

710{
711 switch (msg)
712 {
713 case WM_INITDIALOG:
714 {
715 RECT rc;
718 HIMAGELIST imageList;
719 LPSTR disabledUsages;
720
721 GetWindowRect(lv, &rc);
722 column.mask = LVCF_WIDTH;
723 column.cx = rc.right - rc.left;
725 imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 4, 0);
726 if (imageList)
727 {
728 HBITMAP bmp;
729 COLORREF backColor = RGB(255, 0, 255);
730
732 ImageList_AddMasked(imageList, bmp, backColor);
734 ImageList_SetBkColor(imageList, CLR_NONE);
737 }
739 if ((disabledUsages = get_cert_mgr_usages()))
740 {
741 LPSTR ptr, comma;
742
743 for (ptr = disabledUsages, comma = strchr(ptr, ','); ptr && *ptr;
744 ptr = comma ? comma + 1 : NULL,
745 comma = ptr ? strchr(ptr, ',') : NULL)
746 {
748
749 if (comma)
750 *comma = 0;
751 if ((index = find_oid_in_list(lv, ptr)) != -1)
753 }
754 free(disabledUsages);
755 }
756 break;
757 }
758 case WM_NOTIFY:
759 {
760 NMHDR *hdr = (NMHDR *)lp;
761 NMITEMACTIVATE *nm;
762
763 switch (hdr->code)
764 {
765 case NM_CLICK:
766 nm = (NMITEMACTIVATE *)lp;
767 toggle_usage(hwnd, nm->iItem);
769 break;
770 }
771 break;
772 }
773 case WM_COMMAND:
774 switch (wp)
775 {
776 case IDOK:
778#ifndef __REACTOS__
780#endif
782 break;
783 case IDCANCEL:
784#ifndef __REACTOS__
786#endif
788 break;
789 }
790 break;
791 }
792 return 0;
793}
#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:2949
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:603
static LPSTR get_cert_mgr_usages(void)
Definition: main.c:175
static void add_known_usages_to_list(HWND lv, CheckBitmapIndex state)
Definition: main.c:589
static void save_cert_mgr_usages(HWND hwnd)
Definition: main.c:650
static LONG_PTR find_oid_in_list(HWND lv, LPCSTR oid)
Definition: main.c:625
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3286
#define RGB(r, g, b)
Definition: precomp.h:67
pKey DeleteObject()
GLuint index
Definition: glext.h:6031
char hdr[14]
Definition: iptest.cpp:33
UINT_PTR WPARAM
Definition: minwindef.h:174
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
DWORD COLORREF
Definition: windef.h:100
HBITMAP WINAPI LoadBitmapW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2532

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_clear_cert_selection()

static void cert_mgr_clear_cert_selection ( HWND  hwnd)
static

Definition at line 795 of file main.c.

796{
801 (LPARAM)empty);
803}
#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:45
static void refresh_store_certs(HWND hwnd)
Definition: main.c:558
#define WM_SETTEXT
Definition: winuser.h:1645
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 543 of file main.c.

544{
546
548}
#define IDC_MGR_STORES
Definition: cryptuires.h:257
static HCERTSTORE cert_mgr_index_to_store(HWND tab, int index)
Definition: main.c:534
#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 INT_PTR CALLBACK cert_mgr_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 1105 of file main.c.

1107{
1108 struct CertMgrData *data;
1109
1110 switch (msg)
1111 {
1112 case WM_INITDIALOG:
1113 {
1114 PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr =
1117
1118 data = malloc(sizeof(struct CertMgrData));
1119 if (!data)
1120 return 0;
1121 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
1122 if (data->imageList)
1123 {
1124 HBITMAP bmp;
1125 COLORREF backColor = RGB(255, 0, 255);
1126
1128 ImageList_AddMasked(data->imageList, bmp, backColor);
1130 ImageList_SetBkColor(data->imageList, CLR_NONE);
1132 LVSIL_SMALL, (LPARAM)data->imageList);
1133 }
1135 data->title = pCryptUICertMgr->pwszTitle;
1136
1139 if (pCryptUICertMgr->pwszTitle)
1141 (LPARAM)pCryptUICertMgr->pwszTitle);
1142 show_cert_stores(hwnd, pCryptUICertMgr->dwFlags, data);
1144 break;
1145 }
1146#ifdef __REACTOS__
1147 case WM_DESTROY:
1152 break;
1153#endif
1154 case WM_NOTIFY:
1155 {
1156 NMHDR *hdr = (NMHDR *)lp;
1157
1158 switch (hdr->code)
1159 {
1160 case TCN_SELCHANGE:
1162 break;
1163 case LVN_ITEMCHANGED:
1164 {
1165 NMITEMACTIVATE *nm = (NMITEMACTIVATE*)lp;
1167 int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1168
1169 EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), numSelected > 0);
1170 EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), numSelected > 0);
1171 EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), numSelected == 1);
1172 if (numSelected == 1)
1174 else
1176 (LPARAM)empty);
1177 break;
1178 }
1179 case NM_DBLCLK:
1180 show_selected_cert(hwnd, ((NMITEMACTIVATE *)lp)->iItem);
1181 break;
1182 case LVN_KEYDOWN:
1183 {
1184 NMLVKEYDOWN *lvk = (NMLVKEYDOWN *)lp;
1185
1186 if (lvk->wVKey == VK_DELETE)
1188 break;
1189 }
1190 case LVN_COLUMNCLICK:
1191 {
1192 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
1194
1195 /* FIXME: doesn't support swapping sort order between ascending
1196 * and descending.
1197 */
1198 switch (nmlv->iSubItem)
1199 {
1200 case 0:
1203 break;
1204 case 1:
1207 break;
1208 case 2:
1211 break;
1212 case 3:
1215 break;
1216 }
1217 break;
1218 }
1219 }
1220 break;
1221 }
1222 case WM_COMMAND:
1223 switch (wp)
1224 {
1227 break;
1228 case IDC_MGR_IMPORT:
1229 if (CryptUIWizImport(0, hwnd, NULL, NULL,
1232 break;
1233 case IDC_MGR_ADVANCED:
1236 {
1238 int index, len;
1239 LPWSTR curString = NULL;
1240
1242 if (index >= 0)
1243 {
1245 curString = malloc((len + 1) * sizeof(WCHAR));
1246 SendMessageW(cb, CB_GETLBTEXT, index, (LPARAM)curString);
1247 }
1250 if (curString)
1251 {
1253 (LPARAM)curString);
1254 if (index >= 0)
1256 free(curString);
1257 }
1259 }
1260 break;
1261 case IDC_MGR_VIEW:
1262 {
1266
1267 if (selection >= 0)
1269 break;
1270 }
1271 case IDC_MGR_EXPORT:
1273 break;
1274 case IDC_MGR_REMOVE:
1276 break;
1277 case IDCANCEL:
1278#ifndef __REACTOS__
1282 ImageList_Destroy(data->imageList);
1283 free(data);
1284#endif
1286 break;
1287 }
1288 break;
1289 }
1290 return 0;
1291}
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:795
BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5511
static INT_PTR CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:708
static void initialize_purpose_selection(HWND hwnd)
Definition: main.c:216
static int CALLBACK cert_mgr_sort_by_issuer(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1086
static int CALLBACK cert_mgr_sort_by_friendly_name(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1099
static void show_store_certs(HWND hwnd, HCERTSTORE store)
Definition: main.c:341
static void close_stores(HWND tab)
Definition: main.c:550
static HCERTSTORE cert_mgr_current_store(HWND hwnd)
Definition: main.c:543
static void cert_mgr_do_export(HWND hwnd)
Definition: main.c:1002
static void cert_mgr_do_remove(HWND hwnd)
Definition: main.c:956
static void show_selected_cert(HWND hwnd, int index)
Definition: main.c:819
static void cert_mgr_show_cert_usages(HWND hwnd, int index)
Definition: main.c:942
static int CALLBACK cert_mgr_sort_by_date(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1091
static void show_cert_stores(HWND hwnd, DWORD dwFlags, struct CertMgrData *data)
Definition: main.c:482
static void add_cert_columns(HWND hwnd)
Definition: main.c:71
static int CALLBACK cert_mgr_sort_by_subject(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1081
static void free_certs(HWND lv)
Definition: main.c:519
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
#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:1982
#define CB_GETLBTEXT
Definition: winuser.h:1981
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4553
#define CB_SETCURSEL
Definition: winuser.h:1990
#define CB_RESETCONTENT
Definition: winuser.h:1988
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1969
#define CBN_SELCHANGE
Definition: winuser.h:2008
#define VK_DELETE
Definition: winuser.h:2269
#define WM_DESTROY
Definition: winuser.h:1637
#define CB_GETCURSEL
Definition: winuser.h:1972

Referenced by CryptUIDlgCertMgr().

◆ cert_mgr_do_export()

static void cert_mgr_do_export ( HWND  hwnd)
static

Definition at line 1002 of file main.c.

1003{
1005 int selectionCount = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1006
1007 if (selectionCount == 1)
1008 {
1011
1012 if (selection >= 0)
1013 {
1015
1016 if (cert)
1017 {
1019
1020 info.dwSize = sizeof(info);
1021 info.pwszExportFileName = NULL;
1022 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
1023 info.pCertContext = cert;
1024 info.cStores = 0;
1026 }
1027 }
1028 }
1029 else if (selectionCount > 1)
1030 {
1033
1034 if (store)
1035 {
1037 int selection = -1;
1038
1039 info.dwSize = sizeof(info);
1040 info.pwszExportFileName = NULL;
1041 info.dwSubjectChoice =
1043 info.hCertStore = store;
1044 info.cStores = 0;
1045 do {
1048 if (selection >= 0)
1049 {
1051 selection);
1052
1055 }
1056 } while (selection >= 0);
1058 CertCloseStore(store, 0);
1059 }
1060 }
1061}
#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:805
BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid)
Definition: main.c:6935
#define CERT_STORE_CREATE_NEW_FLAG
Definition: wincrypt.h:2633
#define CERT_STORE_PROV_MEMORY
Definition: wincrypt.h:2455
#define CERT_STORE_ADD_ALWAYS
Definition: wincrypt.h:2654

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_do_remove()

static void cert_mgr_do_remove ( HWND  hwnd)
static

Definition at line 956 of file main.c.

957{
959 TCM_GETCURSEL, 0, 0);
960 struct CertMgrData *data =
962
963 if (tabIndex < data->nStores)
964 {
967 LPCWSTR pTitle;
968 int warningID;
969
970 if (SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0) > 1)
971 warningID = data->stores[tabIndex].removePluralWarning;
972 else
973 warningID = data->stores[tabIndex].removeWarning;
974 if (data->title)
975 pTitle = data->title;
976 else
977 {
979 pTitle = title;
980 }
982 if (MessageBoxW(hwnd, warning, pTitle, MB_YESNO) == IDYES)
983 {
984 int selection = -1;
985
986 do {
989 if (selection >= 0)
990 {
992 selection);
993
995 }
996 } while (selection >= 0);
998 }
999 }
1000}
#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:478
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define MB_YESNO
Definition: winuser.h:828
#define IDYES
Definition: winuser.h:846

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 805 of file main.c.

806{
809
810 item.mask = LVIF_PARAM;
811 item.iItem = index;
812 item.iSubItem = 0;
814 (LPARAM)&item))
815 cert = (PCCERT_CONTEXT)item.lParam;
816 return cert;
817}
const CERT_CONTEXT * PCCERT_CONTEXT
Definition: wincrypt.h:494

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 534 of file main.c.

535{
537
538 item.mask = TCIF_PARAM;
540 return (HCERTSTORE)item.lParam;
541}
#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 942 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 1091 of file main.c.

1092{
1095 return CompareFileTime(&cert1->pCertInfo->NotAfter,
1096 &cert2->pCertInfo->NotAfter);
1097}
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
static const BYTE cert2[]
Definition: message.c:797
static const BYTE cert1[]
Definition: message.c:781

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 1099 of file main.c.

1101{
1102 return cert_mgr_sort_by_text((HWND)lp, 3, lp1, lp2);
1103}
static int cert_mgr_sort_by_text(HWND lv, int col, int index1, int index2)
Definition: main.c:1063

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 1086 of file main.c.

1087{
1088 return cert_mgr_sort_by_text((HWND)lp, 1, lp1, lp2);
1089}

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 1081 of file main.c.

1082{
1083 return cert_mgr_sort_by_text((HWND)lp, 0, lp1, lp2);
1084}

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 1063 of file main.c.

1064{
1065 LVITEMW item;
1066 WCHAR buf1[MAX_STRING_LEN];
1067 WCHAR buf2[MAX_STRING_LEN];
1068
1069 item.cchTextMax = ARRAY_SIZE(buf1);
1070 item.mask = LVIF_TEXT;
1071 item.pszText = buf1;
1072 item.iItem = index1;
1073 item.iSubItem = col;
1075 item.pszText = buf2;
1076 item.iItem = index2;
1078 return lstrcmpW(buf1, buf2);
1079}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4152

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 4245 of file main.c.

4246{
4247 RECT rc;
4248
4249 TRACE("(%p, %08x, %08Ix)\n", hwnd, msg, lp);
4250
4251 switch (msg)
4252 {
4253 case PSCB_INITIALIZED:
4254 /* Get cancel button's position.. */
4256 MapWindowPoints( 0, hwnd, (POINT *)&rc, 2 );
4257 /* hide the cancel button.. */
4259 /* and move the OK button to the cancel button's original position. */
4260 SetWindowPos(GetDlgItem(hwnd, IDOK), 0, rc.left, rc.top, 0, 0,
4262 break;
4263 }
4264 return 0;
4265}
#define PSCB_INITIALIZED
Definition: prsht.h:75
LONG top
Definition: windef.h:107
#define SWP_NOACTIVATE
Definition: winuser.h:1253
#define SWP_NOREDRAW
Definition: winuser.h:1257
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:1256
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:1258

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 3662 of file main.c.

3664{
3665 HWND lv;
3666 int cItem, i;
3667 struct edit_cert_data *data;
3668
3669 switch (msg)
3670 {
3671 case PSPCB_RELEASE:
3673 cItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
3674 for (i = 0; i < cItem; i++)
3675 {
3676 LVITEMW item;
3677
3678 item.mask = LVIF_PARAM;
3679 item.iItem = i;
3680 item.iSubItem = 0;
3681 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item) && item.lParam)
3682 {
3684
3685 if (info->cbSize == sizeof(CRYPT_OID_INFO) && !info->dwGroupId)
3686 {
3687 free((char *)info->pszOID);
3688 free(info);
3689 }
3690 }
3691 }
3693 if (data)
3694 {
3695#ifndef __REACTOS__
3696 ImageList_Destroy(data->imageList);
3697#endif
3698 free(data);
3699 }
3700 break;
3701 }
3702 return 1;
3703}
if(dx< 0)
Definition: linetemp.h:194
#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 INT_PTR CALLBACK cert_properties_general_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 3562 of file main.c.

3564{
3566
3567 TRACE("(%p, %08x, %08Ix, %08Ix)\n", hwnd, msg, wp, lp);
3568
3569 switch (msg)
3570 {
3571 case WM_INITDIALOG:
3572 {
3574 struct detail_data *detailData;
3575 struct edit_cert_data *editData;
3576
3577 page = (PROPSHEETPAGEW *)lp;
3578 detailData = (struct detail_data *)page->lParam;
3583 editData = malloc(sizeof(struct edit_cert_data));
3584 if (editData)
3585 {
3586 editData->imageList = ImageList_Create(16, 16,
3587 ILC_COLOR4 | ILC_MASK, 4, 0);
3588 if (editData->imageList)
3589 {
3590 HBITMAP bmp;
3591 COLORREF backColor = RGB(255, 0, 255);
3592
3594 ImageList_AddMasked(editData->imageList, bmp, backColor);
3597 }
3598 editData->cert = detailData->pCertViewInfo->pCertContext;
3599 editData->pfPropertiesChanged = detailData->pfPropertiesChanged;
3602 }
3603 break;
3604 }
3605 case WM_NOTIFY:
3606 {
3607 NMHDR *hdr = (NMHDR *)lp;
3608 NMITEMACTIVATE *nm;
3609
3610 switch (hdr->code)
3611 {
3612 case NM_CLICK:
3613 nm = (NMITEMACTIVATE *)lp;
3614 toggle_usage(hwnd, nm->iItem);
3616 break;
3617 case PSN_APPLY:
3619 break;
3620 }
3621 break;
3622 }
3623 case WM_COMMAND:
3624 switch (HIWORD(wp))
3625 {
3626 case EN_CHANGE:
3628 if (LOWORD(wp) == IDC_DESCRIPTION)
3629 {
3630 /* Show/hide scroll bar on description depending on how much
3631 * text it has.
3632 */
3635
3637 }
3638 break;
3639 case BN_CLICKED:
3640 switch (LOWORD(wp))
3641 {
3642 case IDC_ADD_PURPOSE:
3647 break;
3653 break;
3654 }
3655 break;
3656 }
3657 break;
3658 }
3659 return 0;
3660}
#define IDD_ADD_CERT_PURPOSE
Definition: cryptuires.h:188
#define IDC_ADD_PURPOSE
Definition: cryptuires.h:239
#define MAX_FRIENDLY_NAME
Definition: main.c:3501
static void select_purposes(HWND hwnd, PurposeSelection selection)
Definition: main.c:3352
static void set_general_cert_properties(HWND hwnd, struct edit_cert_data *data)
Definition: main.c:3457
static void apply_general_changes(HWND hwnd)
Definition: main.c:3504
static INT_PTR CALLBACK add_purpose_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3195
#define PSN_APPLY
Definition: prsht.h:117
BOOL * pfPropertiesChanged
Definition: main.c:2725
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
Definition: main.c:2724
HIMAGELIST imageList
Definition: main.c:3375
BOOL * pfPropertiesChanged
Definition: main.c:3374
PCCERT_CONTEXT cert
Definition: main.c:3373
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 4612 of file main.c.

4613{
4614 BOOL ret;
4615
4616 if (dwFlags &
4619 {
4620 switch (type)
4621 {
4625 break;
4629 break;
4633 break;
4634 default:
4635 /* The remaining types contain more than one type, so allow
4636 * any combination.
4637 */
4638 ret = TRUE;
4639 }
4640 }
4641 else
4642 {
4643 /* No allowed types specified, so any type is allowed */
4644 ret = TRUE;
4645 }
4646 if (!ret)
4648 return ret;
4649}
#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:3693
#define CERT_QUERY_CONTENT_CRL
Definition: wincrypt.h:3691
#define CERT_QUERY_CONTENT_CTL
Definition: wincrypt.h:3690
#define CERT_QUERY_CONTENT_SERIALIZED_CTL
Definition: wincrypt.h:3694
#define CERT_QUERY_CONTENT_SERIALIZED_CRL
Definition: wincrypt.h:3695
#define CERT_QUERY_CONTENT_CERT
Definition: wincrypt.h:3689

Referenced by do_import().

◆ check_store_context_type()

static BOOL check_store_context_type ( DWORD  dwFlags,
HCERTSTORE  store 
)
static

Definition at line 4677 of file main.c.

4678{
4679 BOOL ret;
4680
4681 if (dwFlags &
4684 {
4687 PCCTL_CONTEXT ctl;
4688
4689 ret = TRUE;
4690 if ((cert = CertEnumCertificatesInStore(store, NULL)))
4691 {
4694 ret = FALSE;
4695 }
4696 if (ret && (crl = CertEnumCRLsInStore(store, NULL)))
4697 {
4700 ret = FALSE;
4701 }
4702 if (ret && (ctl = CertEnumCTLsInStore(store, NULL)))
4703 {
4704 CertFreeCTLContext(ctl);
4706 ret = FALSE;
4707 }
4708 }
4709 else
4710 ret = TRUE;
4711 if (!ret)
4713 return ret;
4714}
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:817

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 4517 of file main.c.

4518{
4519 LPCWSTR storeName;
4520
4521 if (is_ca_cert(cert, TRUE))
4522 storeName = ca;
4523 else
4524 storeName = addressBook;
4527}
static const WCHAR ca[]
Definition: main.c:443
static const WCHAR addressBook[]
Definition: main.c:441
static BOOL is_ca_cert(PCCERT_CONTEXT cert, BOOL defaultIfNotSpecified)
Definition: main.c:4479
#define CERT_STORE_PROV_SYSTEM_W
Definition: wincrypt.h:2463
#define CERT_SYSTEM_STORE_CURRENT_USER
Definition: wincrypt.h:2528

Referenced by import_cert().

◆ close_stores()

static void close_stores ( HWND  tab)
static

Definition at line 550 of file main.c.

551{
552 int i, tabs = SendMessageW(tab, TCM_GETITEMCOUNT, 0, 0);
553
554 for (i = 0; i < tabs; i++)
556}
#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 270 of file main.c.

271{
273
274 if (usage)
275 {
276 LPSTR ptr, comma;
277
278 for (ptr = usageStr, comma = strchr(ptr, ','); usage && ptr && *ptr;
279 ptr = comma ? comma + 1 : NULL,
280 comma = ptr ? strchr(ptr, ',') : NULL)
281 {
282 if (comma)
283 *comma = 0;
285 }
286 }
287 return usage;
288}
static CERT_ENHKEY_USAGE * add_oid_to_usage(CERT_ENHKEY_USAGE *usage, LPSTR oid)
Definition: main.c:256

Referenced by create_advanced_filter().

◆ create_advanced_filter()

static CERT_ENHKEY_USAGE * create_advanced_filter ( void  )
static

Definition at line 290 of file main.c.

291{
292 CERT_ENHKEY_USAGE *advancedUsage = calloc(1, sizeof(CERT_ENHKEY_USAGE));
293
294 if (advancedUsage)
295 {
297
299 {
300 LPSTR disabledUsagesStr;
301
302 if ((disabledUsagesStr = get_cert_mgr_usages()))
303 {
304 CERT_ENHKEY_USAGE *disabledUsages =
305 convert_usages_str_to_usage(disabledUsagesStr);
306
307 if (disabledUsages)
308 {
310
311 for (ptr = usages; advancedUsage && *ptr; ptr++)
312 {
313 DWORD i;
314 BOOL disabled = FALSE;
315
316 for (i = 0; !disabled &&
317 i < disabledUsages->cUsageIdentifier; i++)
318 if (!strcmp(disabledUsages->rgpszUsageIdentifier[i],
319 (*ptr)->pszOID))
320 disabled = TRUE;
321 if (!disabled)
322 advancedUsage = add_oid_to_usage(advancedUsage,
323 (LPSTR)(*ptr)->pszOID);
324 }
325 /* The individual strings are pointers to disabledUsagesStr,
326 * so they're freed when it is.
327 */
328 free(disabledUsages->rgpszUsageIdentifier);
329 free(disabledUsages);
330 }
331 free(disabledUsagesStr);
332 }
334 }
335 }
336 return advancedUsage;
337}
static CERT_ENHKEY_USAGE * convert_usages_str_to_usage(LPSTR usageStr)
Definition: main.c:270
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3319
DWORD cUsageIdentifier
Definition: wincrypt.h:831
LPSTR * rgpszUsageIdentifier
Definition: wincrypt.h:832

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 3113 of file main.c.

3114{
3118}
static void create_show_list(HWND hwnd, struct detail_data *data)
Definition: main.c:3067
static void set_fields_selection(HWND hwnd, struct detail_data *data, int sel)
Definition: main.c:3102
static void create_listview_columns(HWND hwnd)
Definition: main.c:3084

Referenced by detail_dlg_proc().

◆ create_listview_columns()

static void create_listview_columns ( HWND  hwnd)
static

Definition at line 3084 of file main.c.

3085{
3087 RECT rc;
3090
3092 GetWindowRect(lv, &rc);
3094 column.mask = LVCF_WIDTH | LVCF_TEXT;
3095 column.cx = (rc.right - rc.left) / 2 - 2;
3096 column.pszText = buf;
3100}
#define IDS_FIELD
Definition: cryptuires.h:43
#define IDC_DETAIL_LIST
Definition: cryptuires.h:220
#define IDS_VALUE
Definition: resource.h:28

Referenced by create_cert_details_list().

◆ create_show_list()

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

Definition at line 3067 of file main.c.

3068{
3071 int i;
3072
3073 for (i = 0; i < ARRAY_SIZE(listItems); i++)
3074 {
3075 int index;
3076
3080 }
3082}
#define IDC_DETAIL_SELECT
Definition: cryptuires.h:219
static const struct selection_list_item listItems[]
Definition: main.c:3059
#define CB_SETITEMDATA
Definition: winuser.h:1995
#define CB_INSERTSTRING
Definition: winuser.h:1986

Referenced by create_cert_details_list().

◆ crypt_format_extension()

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

Definition at line 2829 of file main.c.

2830{
2831 WCHAR *str = NULL;
2832 DWORD size;
2833
2834 if (CryptFormatObject(X509_ASN_ENCODING, 0, formatStrType, NULL,
2835 ext->pszObjId, ext->Value.pbData, ext->Value.cbData, NULL, &size))
2836 {
2837 str = malloc(size);
2838 CryptFormatObject(X509_ASN_ENCODING, 0, formatStrType, NULL,
2839 ext->pszObjId, ext->Value.pbData, ext->Value.cbData, str, &size);
2840 }
2841 return str;
2842}
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:2501

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 1296 of file main.c.

1297{
1298 TRACE("(%p)\n", pCryptUICertMgr);
1299
1300 if (pCryptUICertMgr->dwSize != sizeof(CRYPTUI_CERT_MGR_STRUCT))
1301 {
1302 WARN("unexpected size %ld\n", pCryptUICertMgr->dwSize);
1304 return FALSE;
1305 }
1307 pCryptUICertMgr->hwndParent, cert_mgr_dlg_proc, (LPARAM)pCryptUICertMgr);
1308 return TRUE;
1309}
#define WARN(fmt,...)
Definition: precomp.h:61
#define IDD_CERT_MGR
Definition: cryptuires.h:194
static INT_PTR CALLBACK cert_mgr_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:1105

Referenced by display_cert_manager(), and OpenPersonalTrustDBDialog().

◆ CryptUIDlgSelectCertificateA()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTA  pcsc)

Definition at line 7484 of file main.c.

7485{
7488 LPWSTR title = NULL, display_str = NULL;
7489 PROPSHEETPAGEW *pages = NULL;
7490
7491 TRACE("%p\n", pcsc);
7492
7493 if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
7494 {
7495 WARN("unexpected size %ld\n", pcsc->dwSize);
7497 return NULL;
7498 }
7499 memcpy(&selCertInfo, pcsc, pcsc->dwSize);
7500 if (pcsc->szTitle)
7501 {
7502 if (!(title = strdupAtoW( pcsc->szTitle ))) goto error;
7503 selCertInfo.szTitle = title;
7504 }
7505 if (pcsc->szDisplayString)
7506 {
7507 if (!(display_str = strdupAtoW( pcsc->szDisplayString ))) goto error;
7508 selCertInfo.szDisplayString = display_str;
7509 }
7510 if (pcsc->cPropSheetPages)
7511 {
7513 if (!pages)
7514 goto error;
7515 selCertInfo.rgPropSheetPages = pages;
7516 }
7517 cert = CryptUIDlgSelectCertificateW(&selCertInfo);
7518error:
7519 free(title);
7520 free(display_str);
7521 if (pcsc->cPropSheetPages)
7523 return cert;
7524}
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc)
Definition: main.c:7385
static void free_prop_sheet_pages(PROPSHEETPAGEW *pages, DWORD num)
Definition: main.c:7406
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:61
static PROPSHEETPAGEW * prop_sheet_pages_AtoW(LPCPROPSHEETPAGEA pages, DWORD num)
Definition: main.c:7427
#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 7526 of file main.c.

7529{
7531
7532 TRACE("%p %p %s %s %lx %lx %p\n", hCertStore, hwnd, debugstr_w(pwszTitle), debugstr_w(pwszDisplayString), dwDontUseColumn, dwFlags, pvReserved);
7533
7534 memset(&sc, 0, sizeof(sc));
7535
7536 sc.dwSize = sizeof(sc);
7537 sc.hwndParent = hwnd;
7538 sc.dwFlags = dwFlags;
7539 sc.szTitle = pwszTitle;
7540 sc.szDisplayString = pwszDisplayString;
7541 sc.dwDontUseColumn = dwDontUseColumn;
7542 sc.cDisplayStores = 1;
7543 sc.rghDisplayStores = &hCertStore;
7544 return CryptUIDlgSelectCertificateW(&sc);
7545}
#define debugstr_w
Definition: kernel32.h:32
static LPCWSTR LPVOID pvReserved
Definition: asmcache.c:749
#define memset(x, y, z)
Definition: compat.h:39

◆ CryptUIDlgSelectCertificateW()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTW  pcsc)

Definition at line 7385 of file main.c.

7386{
7387 struct SelectCertParam param;
7388
7389 TRACE("%p\n", pcsc);
7390
7391 if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
7392 {
7393 WARN("unexpected size %ld\n", pcsc->dwSize);
7395 return NULL;
7396 }
7398 FIXME("ignoring CRYPTUI_SELECTCERT_MULTISELECT\n");
7399 param.pcsc = pcsc;
7400 param.cert = NULL;
7403 return param.cert;
7404}
#define CRYPTUI_SELECTCERT_MULTISELECT
Definition: cryptuiapi.h:345
#define IDD_SELECT_CERT
Definition: cryptuires.h:202
static INT_PTR CALLBACK select_cert_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:7233
PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc
Definition: main.c:7229

Referenced by CryptUIDlgSelectCertificateA(), and CryptUIDlgSelectCertificateFromStore().

◆ CryptUIDlgSelectStoreA()

HCERTSTORE WINAPI CryptUIDlgSelectStoreA ( PCRYPTUI_SELECTSTORE_INFO_A  info)

Definition at line 1617 of file main.c.

1618{
1621 int len;
1622
1623 TRACE("(%p)\n", info);
1624
1625 if (info->dwSize != sizeof(CRYPTUI_SELECTSTORE_INFO_A))
1626 {
1627 WARN("unexpected size %ld\n", info->dwSize);
1629 return NULL;
1630 }
1631 memcpy(&infoW, info, sizeof(*info));
1632 if (info->pszTitle)
1633 {
1634 len = MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, NULL, 0);
1635 infoW.pwszTitle = malloc(len * sizeof(WCHAR));
1636 MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, infoW.pwszTitle,
1637 len);
1638 }
1639 if (info->pszText)
1640 {
1641 len = MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, NULL, 0);
1642 infoW.pwszText = malloc(len * sizeof(WCHAR));
1643 MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, infoW.pwszText, len);
1644 }
1646 free(infoW.pwszText);
1647 free(infoW.pwszTitle);
1648 return ret;
1649}
HCERTSTORE WINAPI CryptUIDlgSelectStoreW(PCRYPTUI_SELECTSTORE_INFO_W info)
Definition: main.c:1597
#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 1597 of file main.c.

1598{
1599 struct SelectStoreInfo selectInfo = { info, NULL };
1600
1601 TRACE("(%p)\n", info);
1602
1603 if (info->dwSize != sizeof(CRYPTUI_SELECTSTORE_INFO_W))
1604 {
1605 WARN("unexpected size %ld\n", info->dwSize);
1607 return NULL;
1608 }
1610 select_store_dlg_proc, (LPARAM)&selectInfo);
1611 return selectInfo.store;
1612}
#define IDD_SELECT_STORE
Definition: cryptuires.h:189
static INT_PTR CALLBACK select_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:1517
PCRYPTUI_SELECTSTORE_INFO_W info
Definition: main.c:1513
HCERTSTORE store
Definition: main.c:1514

Referenced by CryptUIDlgSelectStoreA(), and import_store_dlg_proc().

◆ CryptUIDlgViewCertificateA()

BOOL WINAPI CryptUIDlgViewCertificateA ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTA  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 1654 of file main.c.

1656{
1658 LPWSTR title = NULL;
1659 BOOL ret;
1660
1661 TRACE("(%p, %p)\n", pCertViewInfo, pfPropertiesChanged);
1662
1663 memcpy(&viewInfo, pCertViewInfo, sizeof(viewInfo));
1664 if (pCertViewInfo->szTitle)
1665 {
1666 int len = MultiByteToWideChar(CP_ACP, 0, pCertViewInfo->szTitle, -1,
1667 NULL, 0);
1668
1669 title = malloc(len * sizeof(WCHAR));
1670 if (title)
1671 {
1672 MultiByteToWideChar(CP_ACP, 0, pCertViewInfo->szTitle, -1, title,
1673 len);
1674 viewInfo.szTitle = title;
1675 }
1676 else
1677 {
1678 ret = FALSE;
1679 goto error;
1680 }
1681 }
1682 if (pCertViewInfo->cPropSheetPages)
1683 {
1684 FIXME("ignoring additional prop sheet pages\n");
1685 viewInfo.cPropSheetPages = 0;
1686 }
1687 ret = CryptUIDlgViewCertificateW(&viewInfo, pfPropertiesChanged);
1688 free(title);
1689error:
1690 return ret;
1691}
BOOL WINAPI CryptUIDlgViewCertificateW(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged)
Definition: main.c:4370

◆ CryptUIDlgViewCertificateW()

BOOL WINAPI CryptUIDlgViewCertificateW ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 4370 of file main.c.

4372{
4373 static GUID generic_cert_verify = WINTRUST_ACTION_GENERIC_CERT_VERIFY;
4375 WINTRUST_DATA wvt;
4377 BOOL ret = FALSE;
4378 CRYPT_PROVIDER_SGNR *signer;
4379 CRYPT_PROVIDER_CERT *provCert = NULL;
4380
4381 TRACE("(%p, %p)\n", pCertViewInfo, pfPropertiesChanged);
4382
4383 if (pCertViewInfo->dwSize != sizeof(CRYPTUI_VIEWCERTIFICATE_STRUCTW))
4384 {
4386 return FALSE;
4387 }
4388 /* Make a local copy in case we have to call WinVerifyTrust ourselves */
4389 memcpy(&viewInfo, pCertViewInfo, sizeof(viewInfo));
4390 if (!pCertViewInfo->hWVTStateData)
4391 {
4392 memset(&wvt, 0, sizeof(wvt));
4393 wvt.cbStruct = sizeof(wvt);
4394 wvt.dwUIChoice = WTD_UI_NONE;
4395 if (viewInfo.dwFlags &
4403 memset(&cert, 0, sizeof(cert));
4404 cert.cbStruct = sizeof(cert);
4405 cert.psCertContext = (CERT_CONTEXT *)viewInfo.pCertContext;
4406 cert.chStores = viewInfo.cStores;
4407 cert.pahStores = viewInfo.rghStores;
4408 wvt.pCert = &cert;
4410 WinVerifyTrust(NULL, &generic_cert_verify, &wvt);
4411 viewInfo.pCryptProviderData =
4414 (CRYPT_PROVIDER_DATA *)viewInfo.pCryptProviderData, 0, FALSE, 0);
4415 provCert = WTHelperGetProvCertFromChain(signer, 0);
4416 ret = TRUE;
4417 }
4418 else
4419 {
4420 viewInfo.pCryptProviderData =
4424 viewInfo.idxSigner, viewInfo.fCounterSigner,
4425 viewInfo.idxCounterSigner);
4426 provCert = WTHelperGetProvCertFromChain(signer, viewInfo.idxCert);
4427 ret = TRUE;
4428 }
4429 if (ret)
4430 {
4431 ret = show_cert_dialog(&viewInfo, provCert, pfPropertiesChanged);
4432 if (!pCertViewInfo->hWVTStateData)
4433 {
4435 WinVerifyTrust(NULL, &generic_cert_verify, &wvt);
4436 }
4437 }
4438 return ret;
4439}
#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:4267
#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(), CCertMgrProperties::OnCertDoubleClicked(), 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 4444 of file main.c.

4446{
4447 BOOL ret;
4448
4449 TRACE("(%ld, %p, %p, %s, %08lx, %p)\n", dwContextType, pvContext, hwnd,
4450 debugstr_w(pwszTitle), dwFlags, pvReserved);
4451
4452 switch (dwContextType)
4453 {
4455 {
4457
4458 memset(&viewInfo, 0, sizeof(viewInfo));
4459 viewInfo.dwSize = sizeof(viewInfo);
4460 viewInfo.hwndParent = hwnd;
4461 viewInfo.szTitle = pwszTitle;
4462 viewInfo.pCertContext = pvContext;
4463 ret = CryptUIDlgViewCertificateW(&viewInfo, NULL);
4464 break;
4465 }
4466 default:
4467 FIXME("unimplemented for context type %ld\n", dwContextType);
4469 ret = FALSE;
4470 }
4471 return ret;
4472}
#define CERT_STORE_CERTIFICATE_CONTEXT
Definition: wincrypt.h:3121

◆ CryptUIDlgViewSignerInfoA()

BOOL WINAPI CryptUIDlgViewSignerInfoA ( CRYPTUI_VIEWSIGNERINFO_STRUCTA pcvsi)

Definition at line 6963 of file main.c.

6964{
6965 FIXME("%p: stub\n", pcvsi);
6966 return FALSE;
6967}

◆ 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 7547 of file main.c.

7549{
7550 FIXME("%ld %p %s %p %p: stub\n", flags, parent, debugstr_w(title), info, context);
7551 return FALSE;
7552}
Definition: http.c:7252

◆ CryptUIWizExport()

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

Definition at line 6935 of file main.c.

6937{
6938 BOOL ret;
6939
6940 TRACE("(%08lx, %p, %s, %p, %p)\n", dwFlags, hwndParent,
6941 debugstr_w(pwszWizardTitle), pExportInfo, pvoid);
6942
6943 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
6945 pvoid);
6946 else
6947 {
6950 CREATE_ALWAYS, 0, NULL);
6951
6953 {
6954 ret = do_export(file, pExportInfo, pvoid, NULL, FALSE);
6956 }
6957 else
6958 ret = FALSE;
6959 }
6960 return ret;
6961}
static HWND hwndParent
Definition: cryptui.c:299
static HWND LPCWSTR pwszWizardTitle
Definition: cryptui.c:300
#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:6779
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:6640
#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 5511 of file main.c.

5513{
5514 BOOL ret;
5515
5516 TRACE("(0x%08lx, %p, %s, %p, %p)\n", dwFlags, hwndParent, debugstr_w(pwszWizardTitle),
5518
5519 if (pImportSrc &&
5520 pImportSrc->dwSize != sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO))
5521 {
5523 return FALSE;
5524 }
5525
5526 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
5529 else if (pImportSrc)
5532 else
5533 {
5534 /* Can't have no UI without specifying source */
5536 ret = FALSE;
5537 }
5538
5539 return ret;
5540}
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO HCERTSTORE hDestCertStore
Definition: cryptui.c:301
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc
Definition: cryptui.c:300
static BOOL do_import(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5281
static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5398

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 3864 of file main.c.

3866{
3867 struct detail_data *data;
3868
3869 switch (msg)
3870 {
3871 case PSPCB_RELEASE:
3872 data = (struct detail_data *)page->lParam;
3874 free(data);
3875 break;
3876 }
3877 return 0;
3878}
static void free_detail_fields(struct detail_data *data)
Definition: main.c:3733

Referenced by init_detail_page().

◆ detail_dlg_proc()

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

Definition at line 3757 of file main.c.

3759{
3761 struct detail_data *data;
3762
3763 TRACE("(%p, %08x, %08Ix, %08Ix)\n", hwnd, msg, wp, lp);
3764
3765 switch (msg)
3766 {
3767 case WM_INITDIALOG:
3768 page = (PROPSHEETPAGEW *)lp;
3769 data = (struct detail_data *)page->lParam;
3771 if (!(data->pCertViewInfo->dwFlags & CRYPTUI_ENABLE_EDITPROPERTIES))
3773 if (data->pCertViewInfo->dwFlags & CRYPTUI_DISABLE_EXPORT)
3775 break;
3776 case WM_NOTIFY:
3777 {
3778 NMITEMACTIVATE *nm;
3780
3781 nm = (NMITEMACTIVATE*)lp;
3782 if (nm->hdr.hwndFrom == list && nm->uNewState & LVN_ITEMACTIVATE
3783 && nm->hdr.code == LVN_ITEMCHANGED)
3784 {
3785 data = (struct detail_data *)nm->lParam;
3786 if (nm->iItem >= 0 && data && nm->iItem < data->cFields)
3787 {
3789 HWND valueCtl = GetDlgItem(hwnd, IDC_DETAIL_VALUE);
3790
3791 if (data->fields[nm->iItem].create)
3792 val = data->fields[nm->iItem].create(
3793 data->pCertViewInfo->pCertContext,
3794 data->fields[nm->iItem].param);
3795 else
3796 {
3797 LVITEMW item;
3798 int res;
3799
3800 item.cchTextMax = ARRAY_SIZE(buf);
3801 item.mask = LVIF_TEXT;
3802 item.pszText = buf;
3803 item.iItem = nm->iItem;
3804 item.iSubItem = 1;
3806 if (res)
3807 val = buf;
3808 }
3809 /* Select all the text in the control, the next update will
3810 * replace it
3811 */
3812 SendMessageW(valueCtl, EM_SETSEL, 0, -1);
3814 val ? lstrlenW(val) : 0);
3815 if (val != buf)
3816 free(val);
3817 }
3818 }
3819 break;
3820 }
3821 case WM_COMMAND:
3822 switch (wp)
3823 {
3824 case IDC_EXPORT:
3825 {
3828
3829 data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, 0, 0);
3830 info.dwSize = sizeof(info);
3831 info.pwszExportFileName = NULL;
3832 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
3833 info.pCertContext = data->pCertViewInfo->pCertContext;
3834 info.cStores = 0;
3836 break;
3837 }
3838 case IDC_EDITPROPERTIES:
3839 {
3841 int curSel;
3842
3843 curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0);
3844 /* Actually, any index will do, since they all store the same
3845 * data value
3846 */
3848 curSel, 0);
3850 break;
3851 }
3852 case ((CBN_SELCHANGE << 16) | IDC_DETAIL_SELECT):
3854 break;
3855 }
3856 break;
3857 case WM_REFRESH_VIEW:
3859 break;
3860 }
3861 return 0;
3862}
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:3113
#define WM_REFRESH_VIEW
Definition: main.c:3492
static void show_edit_cert_properties_dialog(HWND parent, struct detail_data *data)
Definition: main.c:3705
static void refresh_details_view(HWND hwnd)
Definition: main.c:3744
GLuint res
Definition: glext.h:9613
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3152
UINT code
Definition: winuser.h:3267
HWND hwndFrom
Definition: winuser.h:3265
#define CB_GETITEMDATA
Definition: winuser.h:1979
#define EM_SETSEL
Definition: winuser.h:2047

Referenced by init_detail_page().

◆ display_app_usages()

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

Definition at line 2042 of file main.c.

2044{
2045 static char any_app_policy[] = szOID_ANY_APPLICATION_POLICY;
2046 WCHAR nl = '\n';
2047 CHARFORMATW charFmt;
2048 PCERT_EXTENSION policyExt;
2049 if (!*anyUsageAdded)
2050 {
2051 PARAFORMAT2 parFmt;
2052
2053 parFmt.cbSize = sizeof(parFmt);
2054 parFmt.dwMask = PFM_STARTINDENT;
2055 parFmt.dxStartIndent = MY_INDENT;
2057 IDS_CERT_INFO_PURPOSES, &parFmt);
2059 *anyUsageAdded = TRUE;
2060 }
2061 memset(&charFmt, 0, sizeof(charFmt));
2062 charFmt.cbSize = sizeof(charFmt);
2063 charFmt.dwMask = CFM_BOLD;
2064 charFmt.dwEffects = 0;
2067 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension)))
2068 {
2069 CERT_POLICIES_INFO *policies;
2070 DWORD size;
2071
2073 policyExt->Value.pbData, policyExt->Value.cbData,
2074 CRYPT_DECODE_ALLOC_FLAG, NULL, &policies, &size))
2075 {
2076 DWORD i;
2077
2078 for (i = 0; i < policies->cPolicyInfo; i++)
2079 {
2080 DWORD j;
2081
2082 for (j = 0; j < policies->rgPolicyInfo[i].cPolicyQualifier; j++)
2084 policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2085 pszPolicyQualifierId);
2086 }
2087 LocalFree(policies);
2088 }
2089 }
2090 else
2091 add_oid_text_to_control(text, any_app_policy);
2092}
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:1747
static void add_local_oid_text_to_control(HWND text, LPCSTR oid)
Definition: main.c:1972
static void add_oid_text_to_control(HWND hwnd, char *oid)
Definition: main.c:1872
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:241
CERT_POLICY_INFO * rgPolicyInfo
Definition: wincrypt.h:409
CERT_POLICY_QUALIFIER_INFO * rgPolicyQualifier
Definition: wincrypt.h:404
DWORD cPolicyQualifier
Definition: wincrypt.h:403
BYTE * pbData
Definition: wincrypt.h:112
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:3612
#define X509_CERT_POLICIES
Definition: wincrypt.h:3533
#define szOID_ANY_APPLICATION_POLICY
Definition: wincrypt.h:3403
#define szOID_APPLICATION_CERT_POLICIES
Definition: wincrypt.h:3431

Referenced by set_policy_text().

◆ display_cert_usages()

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

Definition at line 2094 of file main.c.

2096{
2097 WCHAR nl = '\n';
2098 DWORD size;
2099 BOOL badUsages = FALSE;
2100
2102 {
2103 CHARFORMATW charFmt;
2104 static char any_cert_policy[] = szOID_ANY_CERT_POLICY;
2106
2107 if (usage)
2108 {
2110 {
2111 DWORD i;
2112
2113 if (!*anyUsageAdded)
2114 {
2115 PARAFORMAT2 parFmt;
2116
2117 parFmt.cbSize = sizeof(parFmt);
2118 parFmt.dwMask = PFM_STARTINDENT;
2119 parFmt.dxStartIndent = MY_INDENT;
2121 IDS_CERT_INFO_PURPOSES, &parFmt);
2123 *anyUsageAdded = TRUE;
2124 }
2125 memset(&charFmt, 0, sizeof(charFmt));
2126 charFmt.cbSize = sizeof(charFmt);
2127 charFmt.dwMask = CFM_BOLD;
2128 charFmt.dwEffects = 0;
2130 (LPARAM)&charFmt);
2131 if (!usage->cUsageIdentifier)
2132 add_oid_text_to_control(text, any_cert_policy);
2133 else
2134 for (i = 0; i < usage->cUsageIdentifier; i++)
2136 usage->rgpszUsageIdentifier[i]);
2137 }
2138 else
2139 badUsages = TRUE;
2140 free(usage);
2141 }
2142 else
2143 badUsages = TRUE;
2144 }
2145 else
2146 badUsages = TRUE;
2147 return badUsages;
2148}
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:3354

Referenced by set_policy_text().

◆ DllMain()

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

Definition at line 47 of file main.c.

48{
49 TRACE("(0x%p, %ld, %p)\n", hinstDLL, fdwReason, lpvReserved);
50
51 switch (fdwReason)
52 {
54 hInstance = hinstDLL;
56 break;
57 }
58 return TRUE;
59}
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 6640 of file main.c.

6643{
6644 BOOL ret;
6645
6646 if (pContextInfo->dwSize != sizeof(CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO))
6647 {
6649 return FALSE;
6650 }
6651 switch (pExportInfo->dwSubjectChoice)
6652 {
6654 ret = save_der(file,
6655 pExportInfo->pCRLContext->pbCrlEncoded,
6656 pExportInfo->pCRLContext->cbCrlEncoded);
6657 break;
6659 ret = save_der(file,
6660 pExportInfo->pCTLContext->pbCtlEncoded,
6661 pExportInfo->pCTLContext->cbCtlEncoded);
6662 break;
6664 ret = save_serialized_store(file, pExportInfo->hCertStore);
6665 break;
6667 ret = save_store_as_cms(file, pExportInfo->hCertStore);
6668 break;
6669 default:
6670 switch (pContextInfo->dwExportFormat)
6671 {
6673 ret = save_der(file, pExportInfo->pCertContext->pbCertEncoded,
6674 pExportInfo->pCertContext->cbCertEncoded);
6675 break;
6678 pExportInfo->pCertContext->pbCertEncoded,
6679 pExportInfo->pCertContext->cbCertEncoded);
6680 break;
6682 ret = save_cert_as_cms(file, pExportInfo,
6683 pContextInfo->fExportChain);
6684 break;
6686 ret = save_pfx(file, pExportInfo, pContextInfo, keyProvInfo,
6687 deleteKeys);
6688 break;
6689 default:
6691 ret = FALSE;
6692 }
6693 }
6694 return ret;
6695}
#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:6435
static BOOL save_serialized_store(HANDLE file, HCERTSTORE store)
Definition: main.c:6503
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:6509
static BOOL save_der(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6397
static BOOL save_base64(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6404
static BOOL save_store_as_cms(HANDLE file, HCERTSTORE store)
Definition: main.c:6429
BYTE * pbCertEncoded
Definition: wincrypt.h:489
DWORD cbCertEncoded
Definition: wincrypt.h:490
DWORD cbCrlEncoded
Definition: wincrypt.h:733
BYTE * pbCrlEncoded
Definition: wincrypt.h:732
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:858
BYTE * pbCtlEncoded
Definition: wincrypt.h:857

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 5281 of file main.c.

5283{
5284 BOOL ret;
5285
5286 switch (pImportSrc->dwSubjectChoice)
5287 {
5290 pImportSrc->pwszFileName, hDestCertStore);
5291 break;
5294 ret = import_cert(pImportSrc->pCertContext, hDestCertStore);
5295 else
5297 break;
5300 ret = import_crl(pImportSrc->pCRLContext, hDestCertStore);
5301 else
5303 break;
5306 ret = import_ctl(pImportSrc->pCTLContext, hDestCertStore);
5307 else
5309 break;
5312 pImportSrc->hCertStore, hDestCertStore);
5313 break;
5314 default:
5315 WARN("unknown source type: %lu\n", pImportSrc->dwSubjectChoice);
5317 ret = FALSE;
5318 }
5319 return ret;
5320}
#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:4672
static BOOL import_crl(PCCRL_CONTEXT crl, HCERTSTORE hDestCertStore)
Definition: main.c:4554
static BOOL import_cert(PCCERT_CONTEXT cert, HCERTSTORE hDestCertStore)
Definition: main.c:4529
static BOOL import_ctl(PCCTL_CONTEXT ctl, HCERTSTORE hDestCertStore)
Definition: main.c:4580
static BOOL check_context_type(DWORD dwFlags, DWORD type)
Definition: main.c:4612
static BOOL import_store(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, HCERTSTORE source, HCERTSTORE dest)
Definition: main.c:4716
static BOOL import_file(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, LPCWSTR fileName, HCERTSTORE dest)
Definition: main.c:4795

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 1368 of file main.c.

1371{
1373 TVINSERTSTRUCTW tvis;
1374 LPCWSTR localizedName;
1375 BOOL ret = TRUE;
1376
1377 tvis.hParent = NULL;
1378 tvis.hInsertAfter = TVI_LAST;
1379 tvis.item.mask = TVIF_TEXT;
1380 if ((localizedName = CryptFindLocalizedName(pvSystemStore)))
1381 {
1382 struct StoreInfo *storeInfo = malloc(sizeof(struct StoreInfo));
1383
1384 if (storeInfo)
1385 {
1386 storeInfo->type = SystemStore;
1387 storeInfo->name = wcsdup(pvSystemStore);
1388 if (storeInfo->name)
1389 {
1390 tvis.item.mask |= TVIF_PARAM;
1391 tvis.item.lParam = (LPARAM)storeInfo;
1392 }
1393 else
1394 {
1395 free(storeInfo);
1396 ret = FALSE;
1397 }
1398 }
1399 else
1400 ret = FALSE;
1401 tvis.item.pszText = (LPWSTR)localizedName;
1402 }
1403 else
1404 tvis.item.pszText = (LPWSTR)pvSystemStore;
1405 /* FIXME: need a folder icon for the store too */
1406 if (ret)
1408 return ret;
1409}
#define IDC_STORE_LIST
Definition: cryptuires.h:244
LPCWSTR WINAPI CryptFindLocalizedName(LPCWSTR pwszCryptName)
Definition: oid.c:1182
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
#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
@ SystemStore
Definition: main.c:1360
enum StoreInfo::@345 type
LPWSTR name
Definition: main.c:1364
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 1411 of file main.c.

1412{
1413 DWORD i;
1415
1416 for (i = 0; i < pEnumData->cEnumArgs; i++)
1420 for (i = 0; i < pEnumData->cStores; i++)
1421 {
1422 DWORD size;
1423
1424 if (CertGetStoreProperty(pEnumData->rghStore[i],
1426 {
1427 WCHAR *name = malloc(size);
1428
1429 if (name)
1430 {
1431 if (CertGetStoreProperty(pEnumData->rghStore[i],
1433 {
1434 struct StoreInfo *storeInfo = malloc(sizeof(struct StoreInfo));
1435
1436 if (storeInfo)
1437 {
1438 TVINSERTSTRUCTW tvis;
1439
1440 storeInfo->type = StoreHandle;
1441 storeInfo->store = pEnumData->rghStore[i];
1442 tvis.hParent = NULL;
1443 tvis.hInsertAfter = TVI_LAST;
1444 tvis.item.mask = TVIF_TEXT | TVIF_PARAM;
1445 tvis.item.pszText = name;
1446 tvis.item.lParam = (LPARAM)storeInfo;
1448 }
1449 }
1450 free(name);
1451 }
1452 }
1453 }
1454}
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:1368
@ StoreHandle
Definition: main.c:1359
HCERTSTORE store
Definition: main.c:1363
PCRYPTUI_ENUM_SYSTEM_STORE_ARGS rgEnumArgs
Definition: main.c:1323
DWORD cEnumArgs
Definition: main.c:1322
HCERTSTORE * rghStore
Definition: main.c:1321
#define CERT_STORE_LOCALIZED_NAME_PROP_ID
Definition: wincrypt.h:2977

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 5622 of file main.c.

5624{
5625 BOOL ret;
5626
5627 ret = CryptAcquireContextW(phProv, info->pwszContainerName,
5628 info->pwszProvName, info->dwProvType, 0);
5629 if (ret)
5630 {
5631 DWORD i;
5632
5633 for (i = 0; i < info->cProvParam; i++)
5634 CryptSetProvParam(*phProv, info->rgProvParam[i].dwParam,
5635 info->rgProvParam[i].pbData, info->rgProvParam[i].dwFlags);
5636 }
5637 return ret;
5638}
BOOL WINAPI CryptSetProvParam(HCRYPTPROV hProv, DWORD dwParam, const BYTE *pbData, DWORD dwFlags)
Definition: crypt.c:2153
BOOL WINAPI CryptAcquireContextW(HCRYPTPROV *phProv, LPCWSTR pszContainer, LPCWSTR pszProvider, DWORD dwProvType, DWORD dwFlags)
Definition: crypt.c:362

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 5994 of file main.c.

5996{
5997 static const WCHAR cer[] = { '.','c','e','r',0 };
5998 static const WCHAR crl[] = { '.','c','r','l',0 };
5999 static const WCHAR ctl[] = { '.','c','t','l',0 };
6000 static const WCHAR p7b[] = { '.','p','7','b',0 };
6001 static const WCHAR pfx[] = { '.','p','f','x',0 };
6002 static const WCHAR sst[] = { '.','s','s','t',0 };
6003 LPCWSTR extension;
6004 LPWSTR dot;
6005 BOOL appendExtension;
6006
6007 switch (data->contextInfo.dwExportFormat)
6008 {
6010 extension = p7b;
6011 break;
6013 extension = pfx;
6014 break;
6015 default:
6016 switch (data->exportInfo.dwSubjectChoice)
6017 {
6019 extension = crl;
6020 break;
6022 extension = ctl;
6023 break;
6025 extension = sst;
6026 break;
6027 default:
6028 extension = cer;
6029 }
6030 }
6031 dot = wcsrchr(fileName, '.');
6032 if (dot)
6033 appendExtension = wcsicmp(dot, extension) != 0;
6034 else
6035 appendExtension = TRUE;
6036 if (appendExtension)
6037 {
6038 fileName = realloc(fileName, (wcslen(fileName) + wcslen(extension) + 1) * sizeof(WCHAR));
6039 if (fileName)
6040 lstrcatW(fileName, extension);
6041 }
6042 return fileName;
6043}
#define wcsrchr
Definition: compat.h:16
#define wcsicmp
Definition: compat.h:15
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by export_file_dlg_proc().

◆ export_file_dlg_proc()

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

Definition at line 6194 of file main.c.

6196{
6197 INT_PTR ret = 0;
6198 struct ExportWizData *data;
6199
6200 switch (msg)
6201 {
6202 case WM_INITDIALOG:
6203 {
6205
6206 data = (struct ExportWizData *)page->lParam;
6208 if (data->exportInfo.pwszExportFileName)
6210 (LPARAM)data->exportInfo.pwszExportFileName);
6211 break;
6212 }
6213 case WM_NOTIFY:
6214 {
6215 NMHDR *hdr = (NMHDR *)lp;
6216
6217 switch (hdr->code)
6218 {
6219 case PSN_WIZBACK:
6221 if (data->contextInfo.dwExportFormat !=
6223 {
6225 ret = 1;
6226 }
6227 break;
6228 case PSN_WIZNEXT:
6229 {
6230 HWND fileNameEdit = GetDlgItem(hwnd, IDC_EXPORT_FILENAME);
6231 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
6232
6234 if (!len)
6235 {
6237 LPCWSTR pTitle;
6238
6239 if (data->pwszWizardTitle)
6240 pTitle = data->pwszWizardTitle;
6241 else
6242 {
6244 pTitle = title;
6245 }
6249 ret = 1;
6250 }
6251 else
6252 {
6253 WCHAR *fileName = malloc((len + 1) * sizeof(WCHAR));
6254
6255 if (fileName)
6256 {
6257 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
6258 (LPARAM)fileName);
6261 {
6262 free(fileName);
6264 ret = 1;
6265 }
6266 else
6267 data->fileName = fileName;
6268 }
6269 }
6270 break;
6271 }
6272 case PSN_SETACTIVE:
6275 ret = TRUE;
6276 break;
6277 }
6278 break;
6279 }
6280 case WM_COMMAND:
6281 switch (wp)
6282 {
6284 {
6286 WCHAR fileBuf[MAX_PATH];
6287
6289 memset(&ofn, 0, sizeof(ofn));
6290 ofn.lStructSize = sizeof(ofn);
6291 ofn.hwndOwner = hwnd;
6293 data->contextInfo.dwExportFormat,
6294 data->exportInfo.dwSubjectChoice);
6295 ofn.lpstrFile = fileBuf;
6296 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
6297 fileBuf[0] = 0;
6298 if (GetSaveFileNameW(&ofn))
6300 0, (LPARAM)ofn.lpstrFile);
6302 break;
6303 }
6304 }
6305 break;
6306 }
6307 return ret;
6308}
#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:6045
static WCHAR * make_export_file_filter(DWORD exportFormat, DWORD subjectChoice)
Definition: main.c:6128
static LPWSTR export_append_extension(const struct ExportWizData *data, LPWSTR fileName)
Definition: main.c:5994
#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:5552
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:1647
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DWLP_MSGRESULT
Definition: winuser.h:881

Referenced by show_export_ui().

◆ export_finish_dlg_proc()

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

Definition at line 6697 of file main.c.

6699{
6700 INT_PTR ret = 0;
6701 struct ExportWizData *data;
6702
6703 switch (msg)
6704 {
6705 case WM_INITDIALOG:
6706 {
6709 RECT rc;
6711
6712 data = (struct ExportWizData *)page->lParam;
6715 (WPARAM)data->titleFont, TRUE);
6716 GetWindowRect(lv, &rc);
6717 column.mask = LVCF_WIDTH;
6718 column.cx = (rc.right - rc.left) / 2 - 2;
6722 break;
6723 }
6724 case WM_NOTIFY:
6725 {
6726 NMHDR *hdr = (NMHDR *)lp;
6727
6728 switch (hdr->code)
6729 {
6730 case PSN_SETACTIVE:
6731 {
6733
6739 ret = TRUE;
6740 break;
6741 }
6742 case PSN_WIZFINISH:
6743 {
6744 int messageID;
6746 LPCWSTR pTitle;
6747 DWORD mbFlags;
6748
6750 if ((data->success = do_export(data->file, &data->exportInfo,
6751 &data->contextInfo, data->keyProvInfo, data->deleteKeys)))
6752 {
6753 messageID = IDS_EXPORT_SUCCEEDED;
6754 mbFlags = MB_OK;
6755 }
6756 else
6757 {
6758 messageID = IDS_EXPORT_FAILED;
6759 mbFlags = MB_OK | MB_ICONERROR;
6760 }
6761 if (data->pwszWizardTitle)
6762 pTitle = data->pwszWizardTitle;
6763 else
6764 {
6766 pTitle = title;
6767 }
6769 MessageBoxW(hwnd, message, pTitle, mbFlags);
6770 break;
6771 }
6772 }
6773 break;
6774 }
6775 }
6776 return ret;
6777}
#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:6310
#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:1678

Referenced by show_export_ui().

◆ export_format_dlg_proc()

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

Definition at line 5787 of file main.c.

5789{
5790 INT_PTR ret = 0;
5791 struct ExportWizData *data;
5792
5793 switch (msg)
5794 {
5795 case WM_INITDIALOG:
5796 {
5798
5799 data = (struct ExportWizData *)page->lParam;
5802 break;
5803 }
5804 case WM_NOTIFY:
5805 {
5806 NMHDR *hdr = (NMHDR *)lp;
5807
5808 switch (hdr->code)
5809 {
5810 case PSN_SETACTIVE:
5815 ret = TRUE;
5816 break;
5817 case PSN_WIZNEXT:
5818 {
5819 BOOL skipPasswordPage = TRUE;
5820
5823 data->contextInfo.dwExportFormat =
5826 data->contextInfo.dwExportFormat =
5829 {
5830 data->contextInfo.dwExportFormat =
5833 data->contextInfo.fExportChain =
5835 }
5836 else
5837 {
5838 data->contextInfo.dwExportFormat =
5841 data->contextInfo.fExportChain = TRUE;
5843 data->contextInfo.fStrongEncryption = TRUE;
5845 data->deleteKeys = TRUE;
5846 skipPasswordPage = FALSE;
5847 }
5849 skipPasswordPage ? IDD_EXPORT_FILE : 0);
5850 ret = 1;
5851 break;
5852 }
5853 }
5854 break;
5855 }
5856 case WM_COMMAND:
5857 switch (HIWORD(wp))
5858 {
5859 case BN_CLICKED:
5860 switch (LOWORD(wp))
5861 {
5865 FALSE);
5867 FALSE);
5869 FALSE);
5872 break;
5875 TRUE);
5876 break;
5879 TRUE);
5881 TRUE);
5884 break;
5885 }
5886 break;
5887 }
5888 break;
5889 }
5890 return ret;
5891}
#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:5752

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 5752 of file main.c.

5753{
5754 int defaultFormatID;
5755
5756 switch (data->contextInfo.dwExportFormat)
5757 {
5759 defaultFormatID = IDC_EXPORT_FORMAT_BASE64;
5760 break;
5762 defaultFormatID = IDC_EXPORT_FORMAT_CMS;
5763 break;
5765 defaultFormatID = IDC_EXPORT_FORMAT_PFX;
5766 break;
5767 default:
5768 defaultFormatID = IDC_EXPORT_FORMAT_DER;
5769 }
5770 SendMessageW(GetDlgItem(hwnd, defaultFormatID), BM_CLICK, 0, 0);
5771 if (defaultFormatID == IDC_EXPORT_FORMAT_PFX)
5772 {
5777 }
5778 else
5779 {
5784 }
5785}
#define BM_CLICK
Definition: winuser.h:1946

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 5600 of file main.c.

5601{
5603 DWORD size;
5604
5606 NULL, &size))
5607 {
5608 info = malloc(size);
5609 if (info)
5610 {
5613 {
5614 free(info);
5615 info = NULL;
5616 }
5617 }
5618 }
5619 return info;
5620}
#define CERT_KEY_PROV_INFO_PROP_ID
Definition: wincrypt.h:2833

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 5734 of file main.c.

5735{
5736 BOOL ret = FALSE;
5737
5739 {
5740 DWORD size;
5741
5742 /* If there's a CRYPT_KEY_PROV_INFO set for this cert, assume the
5743 * cert has a private key.
5744 */
5747 ret = TRUE;
5748 }
5749 return ret;
5750}

Referenced by show_export_ui().

◆ export_is_key_exportable()

static BOOL export_is_key_exportable ( HCRYPTPROV  hProv,
DWORD  keySpec 
)
static

Definition at line 5640 of file main.c.

5641{
5642 BOOL ret;
5643 HCRYPTKEY key;
5644
5645 if ((ret = CryptGetUserKey(hProv, keySpec, &key)))
5646 {
5647 DWORD permissions, size = sizeof(permissions);
5648
5649 if ((ret = CryptGetKeyParam(key, KP_PERMISSIONS, (BYTE *)&permissions,
5650 &size, 0)) && !(permissions & CRYPT_EXPORT))
5651 ret = FALSE;
5653 }
5654 return ret;
5655}
BOOL WINAPI CryptDestroyKey(HCRYPTKEY hKey)
Definition: crypt.c:911
BOOL WINAPI CryptGetUserKey(HCRYPTPROV hProv, DWORD dwKeySpec, HCRYPTKEY *phUserKey)
Definition: crypt.c:1694
BOOL WINAPI CryptGetKeyParam(HCRYPTKEY hKey, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags)
Definition: crypt.c:1626
static HCRYPTPROV hProv
Definition: rsaenh.c:32
Definition: copy.c:22
#define CRYPT_EXPORT
Definition: wincrypt.h:2401
ULONG_PTR HCRYPTKEY
Definition: wincrypt.h:58
#define KP_PERMISSIONS
Definition: wincrypt.h:2337

Referenced by export_private_key_dlg_proc().

◆ export_password_dlg_proc()

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

Definition at line 5910 of file main.c.

5912{
5913 INT_PTR ret = 0;
5914 struct ExportWizData *data;
5915
5916 switch (msg)
5917 {
5918 case WM_INITDIALOG:
5919 {
5921
5922 data = (struct ExportWizData *)page->lParam;
5924 break;
5925 }
5926 case WM_NOTIFY:
5927 {
5928 NMHDR *hdr = (NMHDR *)lp;
5929
5930 switch (hdr->code)
5931 {
5932 case PSN_SETACTIVE:
5935 ret = TRUE;
5936 break;
5937 case PSN_WIZNEXT:
5938 {
5939 HWND passwordEdit = GetDlgItem(hwnd, IDC_EXPORT_PASSWORD);
5940 HWND passwordConfirmEdit = GetDlgItem(hwnd,
5942 DWORD passwordLen = SendMessageW(passwordEdit, WM_GETTEXTLENGTH,
5943 0, 0);
5944 DWORD passwordConfirmLen = SendMessageW(passwordConfirmEdit,
5945 WM_GETTEXTLENGTH, 0, 0);
5946
5948 if (!passwordLen && !passwordConfirmLen)
5949 data->contextInfo.pwszPassword = NULL;
5950 else if (passwordLen != passwordConfirmLen)
5951 {
5954 ret = 1;
5955 }
5956 else
5957 {
5958 WCHAR *password = malloc((passwordLen + 1) * sizeof(WCHAR));
5959 WCHAR *passwordConfirm = malloc((passwordConfirmLen + 1) * sizeof(WCHAR));
5961
5962 if (password && passwordConfirm)
5963 {
5964 SendMessageW(passwordEdit, WM_GETTEXT, passwordLen + 1,
5965 (LPARAM)password);
5966 SendMessageW(passwordConfirmEdit, WM_GETTEXT,
5967 passwordConfirmLen + 1, (LPARAM)passwordConfirm);
5968 if (lstrcmpW(password, passwordConfirm))
5969 {
5972 ret = 1;
5973 }
5974 else
5975 {
5976 data->contextInfo.pwszPassword = password;
5978 data->freePassword = TRUE;
5979 }
5980 }
5981 if (freePassword)
5982 free(password);
5983 free(passwordConfirm);
5984 }
5985 break;
5986 }
5987 }
5988 break;
5989 }
5990 }
5991 return ret;
5992}
#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:5893
static WCHAR password[]
Definition: url.c:33
BOOL freePassword
Definition: main.c:5549

Referenced by show_export_ui().

◆ export_password_mismatch()

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

Definition at line 5893 of file main.c.

5894{
5896 LPCWSTR pTitle;
5897
5898 if (data->pwszWizardTitle)
5899 pTitle = data->pwszWizardTitle;
5900 else
5901 {
5903 pTitle = title;
5904 }
5908}
#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 INT_PTR CALLBACK export_private_key_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 5657 of file main.c.

5659{
5660 INT_PTR ret = 0;
5661 struct ExportWizData *data;
5662
5663 switch (msg)
5664 {
5665 case WM_INITDIALOG:
5666 {
5669 HCRYPTPROV hProv = 0;
5670 int errorID = 0;
5671
5672 data = (struct ExportWizData *)page->lParam;
5674 /* Get enough information about a key to see whether it's exportable.
5675 */
5677 data->exportInfo.pCertContext)))
5681 else if (!export_is_key_exportable(hProv, info->dwKeySpec))
5683
5684 if (errorID)
5685 {
5687
5690 WM_SETTEXT, 0, (LPARAM)error);
5692 }
5693 else
5694 data->keyProvInfo = info;
5695 if (hProv)
5698 0, 0);
5699 break;
5700 }
5701 case WM_NOTIFY:
5702 {
5703 NMHDR *hdr = (NMHDR *)lp;
5704
5705 switch (hdr->code)
5706 {
5707 case PSN_SETACTIVE:
5710 ret = TRUE;
5711 break;
5712 case PSN_WIZNEXT:
5715 {
5716 data->contextInfo.dwExportFormat =
5718 data->contextInfo.fExportPrivateKeys = FALSE;
5719 }
5720 else
5721 {
5722 data->contextInfo.dwExportFormat =
5724 data->contextInfo.fExportPrivateKeys = TRUE;
5725 }
5726 break;
5727 }
5728 break;
5729 }
5730 }
5731 return ret;
5732}
#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:641
static BOOL export_is_key_exportable(HCRYPTPROV hProv, DWORD keySpec)
Definition: main.c:5640
static PCRYPT_KEY_PROV_INFO export_get_private_key_info(PCCERT_CONTEXT cert)
Definition: main.c:5600
static BOOL export_acquire_private_key(const CRYPT_KEY_PROV_INFO *info, HCRYPTPROV *phProv)
Definition: main.c:5622
ULONG_PTR HCRYPTPROV
Definition: wincrypt.h:55

Referenced by show_export_ui().

◆ export_validate_filename()

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

Definition at line 6045 of file main.c.

6047{
6048 HANDLE file;
6049 BOOL tryCreate = TRUE, forceCreate = FALSE, ret = FALSE;
6050
6051 file = CreateFileW(fileName, GENERIC_WRITE,
6054 {
6056 LPCWSTR pTitle;
6057
6058 if (data->pwszWizardTitle)
6059 pTitle = data->pwszWizardTitle;
6060 else
6061 {
6063 pTitle = title;
6064 }
6066 if (MessageBoxW(hwnd, warning, pTitle, MB_YESNO) == IDYES)
6067 forceCreate = TRUE;
6068 else
6069 tryCreate = FALSE;
6071 }
6072 if (tryCreate)
6073 {
6074 file = CreateFileW(fileName, GENERIC_WRITE,
6076 forceCreate ? CREATE_ALWAYS : CREATE_NEW,
6077 0, NULL);
6079 {
6080 data->file = file;
6081 ret = TRUE;
6082 }
6083 else
6084 {
6086 LPCWSTR pTitle;
6087 LPWSTR msgBuf, fullError;
6088
6089 if (data->pwszWizardTitle)
6090 pTitle = data->pwszWizardTitle;
6091 else
6092 {
6094 pTitle = title;
6095 }
6099 GetLastError(), 0, (LPWSTR) &msgBuf, 0, NULL);
6100 fullError = malloc((wcslen(error) + wcslen(fileName) + wcslen(msgBuf) + 3) * sizeof(WCHAR));
6101 if (fullError)
6102 {
6103 LPWSTR ptr = fullError;
6104
6105 lstrcpyW(ptr, error);
6106 ptr += lstrlenW(error);
6107 lstrcpyW(ptr, fileName);
6108 ptr += lstrlenW(fileName);
6109 *ptr++ = ':';
6110 *ptr++ = '\n';
6111 lstrcpyW(ptr, msgBuf);
6112 MessageBoxW(hwnd, fullError, pTitle, MB_ICONERROR | MB_OK);
6113 free(fullError);
6114 }
6115 LocalFree(msgBuf);
6116 }
6117 }
6118 return ret;
6119}
#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
#define lstrcpyW
Definition: compat.h:749
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:400
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:396

Referenced by export_file_dlg_proc().

◆ export_welcome_dlg_proc()

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

Definition at line 5557 of file main.c.

5559{
5560 INT_PTR ret = 0;
5561
5562 switch (msg)
5563 {
5564 case WM_INITDIALOG:
5565 {
5566 struct ExportWizData *data;
5568 WCHAR fontFace[MAX_STRING_LEN];
5569 HDC hDC = GetDC(hwnd);
5570 int height;
5571
5572 data = (struct ExportWizData *)page->lParam;
5575 data->titleFont = CreateFontW(height, 0, 0, 0, FW_BOLD, 0, 0, 0,
5579 (WPARAM)data->titleFont, TRUE);
5580 ReleaseDC(hwnd, hDC);
5581 break;
5582 }
5583 case WM_NOTIFY:
5584 {
5585 NMHDR *hdr = (NMHDR *)lp;
5586
5587 switch (hdr->code)
5588 {
5589 case PSN_SETACTIVE:
5591 ret = TRUE;
5592 break;
5593 }
5594 break;
5595 }
5596 }
5597 return ret;
5598}
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 2611 of file main.c.

2612{
2613 WCHAR *str = NULL;
2616
2617 if (len)
2618 {
2619 str = malloc(len * sizeof(WCHAR));
2620 if (str)
2623 }
2624 return str;
2625}
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
Definition: str.c:702
#define CERT_NAME_STR_NO_QUOTING_FLAG
Definition: wincrypt.h:3647
#define CERT_X500_NAME_STR
Definition: wincrypt.h:3644
#define CERT_NAME_STR_CRLF_FLAG
Definition: wincrypt.h:3648

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 2913 of file main.c.

2914{
2918
2919 if (!str)
2921 return str;
2922}
static WCHAR * field_format_extension_hex_with_ascii(const CERT_EXTENSION *ext)
Definition: main.c:2844
#define CRYPT_FORMAT_STR_MULTI_LINE
Definition: wincrypt.h:3670
#define CRYPT_FORMAT_STR_NO_HEX
Definition: wincrypt.h:3671

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 2627 of file main.c.

2628{
2629 return field_format_detailed_cert_name(&cert->pCertInfo->Issuer);
2630}
static WCHAR * field_format_detailed_cert_name(PCERT_NAME_BLOB name)
Definition: main.c:2611

◆ field_format_detailed_public_key()

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

Definition at line 2714 of file main.c.

2715{
2716 return format_hex_string(
2717 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.pbData,
2718 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData);
2719}
static WCHAR * format_hex_string(void *pb, DWORD cb)
Definition: main.c:2583

◆ field_format_detailed_subject()

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

Definition at line 2637 of file main.c.

2638{
2639 return field_format_detailed_cert_name(&cert->pCertInfo->Subject);
2640}

◆ field_format_extension_hex_with_ascii()

static WCHAR * field_format_extension_hex_with_ascii ( const CERT_EXTENSION ext)
static

Definition at line 2844 of file main.c.

2845{
2846 WCHAR *str = NULL;
2847
2848 if (ext->Value.cbData)
2849 {
2850 /* The output is formatted as:
2851 * <hex bytes> <ascii bytes>\n
2852 * where <hex bytes> is a string of up to 8 bytes, output as %02x,
2853 * and <ascii bytes> is the ASCII equivalent of each byte, or '.' if
2854 * the byte is not printable.
2855 * So, for example, the extension value consisting of the following
2856 * bytes:
2857 * 0x30,0x14,0x31,0x12,0x30,0x10,0x06,0x03,0x55,0x04,0x03,
2858 * 0x13,0x09,0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67
2859 * is output as:
2860 * 30 14 31 12 30 10 06 03 0.1.0...
2861 * 55 04 03 13 09 4a 75 61 U....Jua
2862 * 6e 20 4c 61 6e 67 n Lang
2863 * The allocation size therefore requires:
2864 * - 4 characters per character in an 8-byte line
2865 * (2 for the hex format, one for the space, one for the ASCII value)
2866 * - 3 more characters per 8-byte line (two spaces and a newline)
2867 * - 1 character for the terminating nul
2868 * FIXME: should use a fixed-width font for this
2869 */
2870 DWORD lines = (ext->Value.cbData + 7) / 8;
2871
2872 str = malloc((lines * 8 * 4 + lines * 3 + 1) * sizeof(WCHAR));
2873 if (str)
2874 {
2875 static const WCHAR fmt[] = { '%','0','2','x',' ',0 };
2876 DWORD i, j;
2877 WCHAR *ptr;
2878
2879 for (i = 0, ptr = str; i < ext->Value.cbData; i += 8)
2880 {
2881 /* Output as hex bytes first */
2882 for (j = i; j < min(i + 8, ext->Value.cbData); j++, ptr += 3)
2883 swprintf(ptr, 4, fmt, ext->Value.pbData[j]);
2884 /* Pad the hex output with spaces for alignment */
2885 if (j == ext->Value.cbData && j % 8)
2886 {
2887 static const WCHAR pad[] = { ' ',' ',' ' };
2888
2889 for (; j % 8; j++, ptr += ARRAY_SIZE(pad))
2890 memcpy(ptr, pad, sizeof(pad));
2891 }
2892 /* The last swprintf included a space, so just insert one
2893 * more space between the hex bytes and the ASCII output
2894 */
2895 *ptr++ = ' ';
2896 /* Output as ASCII bytes */
2897 for (j = i; j < min(i + 8, ext->Value.cbData); j++, ptr++)
2898 {
2899 if (iswprint(ext->Value.pbData[j]) &&
2900 !iswspace(ext->Value.pbData[j]))
2901 *ptr = ext->Value.pbData[j];
2902 else
2903 *ptr = '.';
2904 }
2905 *ptr++ = '\n';
2906 }
2907 *ptr++ = '\0';
2908 }
2909 }
2910 return str;
2911}
#define swprintf
Definition: precomp.h:40
#define min(a, b)
Definition: monoChain.cc:55
#define iswspace(_c)
Definition: ctype.h:669
#define iswprint(_c)
Definition: ctype.h:672

Referenced by field_format_detailed_extension().

◆ field_format_from_date()

static WCHAR * field_format_from_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2663 of file main.c.

2664{
2665 return format_long_date(&cert->pCertInfo->NotBefore);
2666}
static WCHAR * format_long_date(const FILETIME *fileTime)
Definition: main.c:2642

◆ field_format_issuer()

static WCHAR * field_format_issuer ( PCCERT_CONTEXT  cert)
static

Definition at line 2605 of file main.c.

◆ field_format_public_key()

static WCHAR * field_format_public_key ( PCCERT_CONTEXT  cert)
static

Definition at line 2673 of file main.c.

2674{
2676 WCHAR *buf = NULL;
2677
2679 cert->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId, 0);
2680 if (oidInfo)
2681 {
2683
2685 {
2686 DWORD len;
2687
2688 /* Allocate the output buffer. Use the number of bytes in the
2689 * public key as a conservative (high) estimate for the number of
2690 * digits in its output.
2691 * The output is of the form (in English)
2692 * "<public key algorithm> (<public key bit length> bits)".
2693 * Ordinarily having two positional parameters in a string is not a
2694 * good idea, but as this isn't a sentence fragment, it shouldn't
2695 * be word-order dependent.
2696 */
2697 len = lstrlenW(fmt) + lstrlenW(oidInfo->pwszName) +
2698 cert->pCertInfo->SubjectPublicKeyInfo.PublicKey.cbData * 8;
2699 buf = malloc(len * sizeof(*buf));
2700 if (buf)
2701 {
2702 DWORD_PTR args[2];
2703 args[0] = (DWORD_PTR)oidInfo->pwszName;
2705 &cert->pCertInfo->SubjectPublicKeyInfo);
2707 fmt, 0, 0, buf, len, (va_list *)args);
2708 }
2709 }
2710 }
2711 return buf;
2712}
#define IDS_FIELD_PUBLIC_KEY_FORMAT
Definition: cryptuires.h:57
DWORD WINAPI CertGetPublicKeyLength(DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pPublicKey)
Definition: cert.c:1305
char * va_list
Definition: vadefs.h:50
Definition: match.c:390
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:398
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:401

◆ field_format_serial_number()

static WCHAR * field_format_serial_number ( PCCERT_CONTEXT  cert)
static

Definition at line 2599 of file main.c.

2600{
2601 return format_hex_string(cert->pCertInfo->SerialNumber.pbData,
2602 cert->pCertInfo->SerialNumber.cbData);
2603}

◆ field_format_subject()

static WCHAR * field_format_subject ( PCCERT_CONTEXT  cert)
static

Definition at line 2632 of file main.c.

◆ field_format_to_date()

static WCHAR * field_format_to_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2668 of file main.c.

2669{
2670 return format_long_date(&cert->pCertInfo->NotAfter);
2671}

◆ field_format_version()

static WCHAR * field_format_version ( PCCERT_CONTEXT  cert)
static

Definition at line 2573 of file main.c.

2574{
2575 static const WCHAR fmt[] = { 'V','%','d',0 };
2576 WCHAR *buf = malloc(12 * sizeof(WCHAR));
2577
2578 if (buf)
2579 swprintf(buf, 12, fmt, cert->pCertInfo->dwVersion);
2580 return buf;
2581}

◆ find_oid_in_list()

static LONG_PTR find_oid_in_list ( HWND  lv,
LPCSTR  oid 
)
static

Definition at line 625 of file main.c.

626{
630
631 if (oidInfo)
632 {
633 LVFINDINFOW findInfo;
634
635 findInfo.flags = LVFI_PARAM;
636 findInfo.lParam = (LPARAM)oidInfo;
637 ret = SendMessageW(lv, LVM_FINDITEMW, -1, (LPARAM)&findInfo);
638 }
639 else
640 {
641 LVFINDINFOA findInfo;
642
643 findInfo.flags = LVFI_STRING;
644 findInfo.psz = oid;
645 ret = SendMessageW(lv, LVM_FINDITEMA, -1, (LPARAM)&findInfo);
646 }
647 return ret;
648}
#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:1943

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 2190 of file main.c.

2192{
2194 DWORD i;
2195
2196 for (i = 0; !ret && i < policies->cPolicyInfo; i++)
2197 {
2198 DWORD j;
2199
2200 for (j = 0; !ret && j < policies->rgPolicyInfo[i].cPolicyQualifier; j++)
2201 if (!strcmp(policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2202 pszPolicyQualifierId, policyOid))
2203 ret = &policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2204 Qualifier;
2205 }
2206 return ret;
2207}

Referenced by set_issuer_statement().

◆ findSupportedOID()

static struct OIDToString * findSupportedOID ( LPCSTR  oid)
static

Definition at line 1955 of file main.c.

1956{
1957 int indexHigh = ARRAY_SIZE(oidMap) - 1, indexLow = 0;
1958
1959 while (indexLow <= indexHigh)
1960 {
1961 int cmp, i = (indexLow + indexHigh) / 2;
1962 if (!(cmp = strcmp(oid, oidMap[i].oid)))
1963 return &oidMap[i];
1964 if (cmp > 0)
1965 indexLow = i + 1;
1966 else
1967 indexHigh = i - 1;
1968 }
1969 return NULL;
1970}
static struct OIDToString oidMap[]
Definition: main.c:1896
#define cmp(status, error)
Definition: error.c:118

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 2983 of file main.c.

2984{
2986
2987 ext.pszObjId = (LPSTR)X509_ENHANCED_KEY_USAGE;
2988 ext.fCritical = FALSE;
2989 ext.Value.pbData = pb;
2990 ext.Value.cbData = cb;
2991 return crypt_format_extension(&ext, 0);
2992}
#define X509_ENHANCED_KEY_USAGE
Definition: wincrypt.h:3555

◆ format_hex_string()

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

Definition at line 2583 of file main.c.

2584{
2585 WCHAR *buf = malloc((cb * 3 + 1) * sizeof(WCHAR));
2586
2587 if (buf)
2588 {
2589 static const WCHAR fmt[] = { '%','0','2','x',' ',0 };
2590 DWORD i;
2591 WCHAR *ptr;
2592
2593 for (i = 0, ptr = buf; i < cb; i++, ptr += 3)
2594 swprintf(ptr, 4, fmt, ((BYTE *)pb)[i]);
2595 }
2596 return buf;
2597}

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 2642 of file main.c.

2643{
2644 WCHAR dateFmt[80]; /* long enough for LOCALE_SLONGDATE */
2645 DWORD len;
2646 WCHAR *buf = NULL;
2647 SYSTEMTIME sysTime;
2648
2649 /* FIXME: format isn't quite right, want time too */
2651 FileTimeToSystemTime(fileTime, &sysTime);
2652 len = GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, NULL, 0);
2653 if (len)
2654 {
2655 buf = malloc(len * sizeof(WCHAR));
2656 if (buf)
2657 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf,
2658 len);
2659 }
2660 return buf;
2661}
#define LOCALE_SLONGDATE
Definition: winnls.h:68

Referenced by field_format_from_date(), and field_format_to_date().

◆ free_certs()

static void free_certs ( HWND  lv)
static

Definition at line 519 of file main.c.

520{
522 int items = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
523
524 for (i = 0; i < items; i++)
525 {
526 item.mask = LVIF_PARAM;
527 item.iItem = i;
528 item.iSubItem = 0;
531 }
532}
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 3733 of file main.c.

3734{
3735 int i;
3736
3737 for (i = 0; i < data->cFields; i++)
3738 free(data->fields[i].detailed_value);
3739 free(data->fields);
3740 data->fields = NULL;
3741 data->cFields = 0;
3742}

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 7406 of file main.c.

7407{
7408 DWORD i;
7409
7410 for (i = 0; i < num; i++)
7411 {
7412 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].pszTemplate))
7413 free((void *)pages[i].pszTemplate);
7414 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].pszIcon))
7415 free((void *)pages[i].pszIcon);
7416 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7417 free((void *)pages[i].pszTitle);
7418 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7419 free((void *)pages[i].pszHeaderTitle);
7420 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7421 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7422 free((void *)pages[i].pszHeaderSubTitle);
7423 }
7424 free(pages);
7425}
#define IS_INTRESOURCE(x)
Definition: loader.c:613
GLuint GLuint num
Definition: glext.h:9618
#define PSP_USEICONID
Definition: prsht.h:25
#define PSP_USETITLE
Definition: prsht.h:26
#define PSP_DLGINDIRECT
Definition: prsht.h:23

Referenced by CryptUIDlgSelectCertificateA(), and prop_sheet_pages_AtoW().

◆ free_store_info()

static void free_store_info ( HWND  tree)
static

Definition at line 1456 of file main.c.

1457{
1459 0);
1460
1461 while (next)
1462 {
1463 TVITEMW item;
1464
1465 memset(&item, 0, sizeof(item));
1466 item.mask = TVIF_HANDLE | TVIF_PARAM;
1467 item.hItem = next;
1469 if (item.lParam)
1470 {
1471 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1472
1473 if (storeInfo->type == SystemStore)
1474 free(storeInfo->name);
1475 free(storeInfo);
1476 }
1478 (LPARAM)next);
1479 }
1480}
#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 2537 of file main.c.

2539{
2540 struct IssuerStatement *issuerStatement;
2541
2542 switch (msg)
2543 {
2544 case PSPCB_RELEASE:
2545 issuerStatement =
2547 if (issuerStatement)
2548 {
2549 free(issuerStatement->cps);
2550 free(issuerStatement->userNotice);
2551 free(issuerStatement);
2552 }
2553 break;
2554 }
2555 return 1;
2556}
LPWSTR cps
Definition: main.c:2249
LPWSTR userNotice
Definition: main.c:2250

Referenced by init_general_page().

◆ general_dlg_proc()

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

Definition at line 2486 of file main.c.

2488{
2491
2492 TRACE("(%p, %08x, %08Ix, %08Ix)\n", hwnd, msg, wp, lp);
2493
2494 switch (msg)
2495 {
2496 case WM_INITDIALOG:
2497 page = (PROPSHEETPAGEW *)lp;
2498 pCertViewInfo = (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW)page->lParam;
2499 if (pCertViewInfo->dwFlags & CRYPTUI_DISABLE_ADDTOSTORE)
2502 set_general_info(hwnd, pCertViewInfo);
2503 break;
2504 case WM_COMMAND:
2505 switch (wp)
2506 {
2507 case IDC_ADDTOSTORE:
2509 break;
2511 {
2512 struct IssuerStatement *issuerStatement =
2514
2515 if (issuerStatement)
2516 {
2517 if (issuerStatement->userNotice)
2518 show_user_notice(hwnd, issuerStatement);
2519 else if (issuerStatement->cps)
2520 {
2521 IBindCtx *bctx = NULL;
2522
2523 CreateBindCtx(0, &bctx);
2524 HlinkSimpleNavigateToString(issuerStatement->cps, NULL,
2525 NULL, NULL, bctx, NULL, HLNF_OPENINNEWWINDOW, 0);
2526 IBindCtx_Release(bctx);
2527 }
2528 }
2529 break;
2530 }
2531 }
2532 break;
2533 }
2534 return 0;
2535}
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:2426
static void show_user_notice(HWND hwnd, struct IssuerStatement *issuerStatement)
Definition: main.c:2480
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491
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 3967 of file main.c.

3968{
3970
3971 if (!name)
3973 return name;
3974}
static WCHAR * get_cert_property_as_string(PCCERT_CONTEXT cert, DWORD prop)
Definition: main.c:3275

Referenced by show_cert_chain().

◆ get_cert_mgr_usages()

static LPSTR get_cert_mgr_usages ( void  )
static

Definition at line 175 of file main.c.

176{
177 static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
178 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
179 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
180 'r','p','o','s','e',0 };
181 LPSTR str = NULL;
182 HKEY key;
183
184 if (!RegCreateKeyExW(HKEY_CURRENT_USER, keyName, 0, NULL, 0, KEY_READ,
185 NULL, &key, NULL))
186 {
187 LONG rc;
188 DWORD type, size;
189
190 rc = RegQueryValueExA(key, "Purpose", NULL, &type, NULL, &size);
191 if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
192 {
193 str = malloc(size);
194 if (str)
195 {
196 rc = RegQueryValueExA(key, "Purpose", NULL, NULL, (LPBYTE)str,
197 &size);
198 if (rc)
199 {
200 free(str);
201 str = NULL;
202 }
203 }
204 }
206 }
207 return str;
208}
#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:1026
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 1757 of file main.c.

1759{
1760 LPWSTR buf = NULL;
1761 DWORD len;
1762
1763 len = CertGetNameStringW(pCertContext, dwType, dwFlags, NULL, NULL, 0);
1764 if (len)
1765 {
1766 buf = malloc(len * sizeof(WCHAR));
1767 if (buf)
1768 CertGetNameStringW(pCertContext, dwType, dwFlags, NULL, buf, len);
1769 }
1770 return buf;
1771}

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 3275 of file main.c.

3276{
3277 WCHAR *name = NULL;
3278 DWORD cb;
3279
3281 {
3282 name = malloc(cb);
3283 if (name)
3284 {
3286 {
3287 free(name);
3288 name = NULL;
3289 }
3290 }
3291 }
3292 return name;
3293}

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 836 of file main.c.

837{
839 DWORD size;
840
841 /* Get enhanced key usage. Have to check for a property and an extension
842 * separately, because CertGetEnhancedKeyUsage will succeed and return an
843 * empty usage if neither is set. Unfortunately an empty usage implies
844 * no usage is allowed, so we have to distinguish between the two cases.
845 */
847 NULL, &size))
848 {
849 usage = malloc(size);
852 {
853 free(usage);
854 usage = NULL;
855 }
856 }
858 NULL, &size))
859 {
860 usage = malloc(size);
863 {
864 free(usage);
865 usage = NULL;
866 }
867 }
868 else
869 usage = NULL;
870 if (usage)
871 {
872 if (usage->cUsageIdentifier)
873 {
874 static const WCHAR commaSpace[] = { ',',' ',0 };
875 DWORD i, len = 1;
876 LPWSTR ptr;
877
878 for (i = 0; i < usage->cUsageIdentifier; i++)
879 {
882 usage->rgpszUsageIdentifier[i],
884
885 if (info)
886 len += lstrlenW(info->pwszName);
887 else
888 len += strlen(usage->rgpszUsageIdentifier[i]);
889 if (i < usage->cUsageIdentifier - 1)
891 }
892 *str = malloc(len * sizeof(WCHAR));
893 if (*str)
894 {
895 for (i = 0, ptr = *str; i < usage->cUsageIdentifier; i++)
896 {
899 usage->rgpszUsageIdentifier[i],
901
902 if (info)
903 {
904 lstrcpyW(ptr, info->pwszName);
905 ptr += lstrlenW(info->pwszName);
906 }
907 else
908 {
909 LPCSTR src = usage->rgpszUsageIdentifier[i];
910
911 for (; *src; ptr++, src++)
912 *ptr = *src;
913 *ptr = 0;
914 }
915 if (i < usage->cUsageIdentifier - 1)
916 {
919 }
920 }
921 *ptr = 0;
922 }
923 free(usage);
924 }
925 else
926 {
927 size = MAX_STRING_LEN * sizeof(WCHAR);
928 *str = malloc(size);
929 if (*str)
931 }
932 }
933 else
934 {
935 size = MAX_STRING_LEN * sizeof(WCHAR);
936 *str = malloc(size);
937 if (*str)
939 }
940}
#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:3063
#define CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
Definition: wincrypt.h:3065

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 2209 of file main.c.

2210{
2211 LPWSTR qualifierStr = NULL;
2212 CERT_NAME_VALUE *qualifierValue;
2213 DWORD size;
2214
2217 &qualifierValue, &size))
2218 {
2219 size = CertRDNValueToStrW(qualifierValue->dwValueType,
2220 &qualifierValue->Value, NULL, 0);
2221 qualifierStr = malloc(size * sizeof(WCHAR));
2222 if (qualifierStr)
2223 CertRDNValueToStrW(qualifierValue->dwValueType,
2224 &qualifierValue->Value, qualifierStr, size);
2225 LocalFree(qualifierValue);
2226 }
2227 return qualifierStr;
2228}
DWORD WINAPI CertRDNValueToStrW(DWORD dwValueType, PCERT_RDN_VALUE_BLOB pValue, LPWSTR psz, DWORD csz)
Definition: str.c:100
static APTTYPEQUALIFIER * qualifier
Definition: compobj.c:77
DWORD dwValueType
Definition: wincrypt.h:281
CERT_RDN_VALUE_BLOB Value
Definition: wincrypt.h:282
#define X509_NAME_VALUE
Definition: wincrypt.h:3522

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 3941 of file main.c.

3943{
3944 struct hierarchy_data *data = NULL;
3946
3947 do {
3950
3951 if (!parent)
3952 root = hItem;
3953 hItem = parent;
3954 } while (hItem);
3955 if (root)
3956 {
3957 TVITEMW item;
3958
3959 item.mask = TVIF_PARAM;
3960 item.hItem = root;
3962 data = (struct hierarchy_data *)item.lParam;
3963 }
3964 return data;
3965}
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 2230 of file main.c.

2231{
2232 LPWSTR str = NULL;
2233 CERT_POLICY_QUALIFIER_USER_NOTICE *qualifierValue;
2234 DWORD size;
2235
2239 &qualifierValue, &size))
2240 {
2241 str = wcsdup(qualifierValue->pszDisplayText);
2242 LocalFree(qualifierValue);
2243 }
2244 return str;
2245}
#define X509_PKIX_POLICY_QUALIFIER_USERNOTICE
Definition: wincrypt.h:3566

Referenced by set_issuer_statement().

◆ hierarchy_callback()

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

Definition at line 4189 of file main.c.

4191{
4192 struct hierarchy_data *data;
4193
4194 switch (msg)
4195 {
4196 case PSPCB_RELEASE:
4197 data = (struct hierarchy_data *)page->lParam;
4198#ifndef __REACTOS__
4199 ImageList_Destroy(data->imageList);
4200#endif
4201 free(data);
4202 break;
4203 }
4204 return 0;
4205}

Referenced by init_hierarchy_page().

◆ hierarchy_dlg_proc()

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

Definition at line 4111 of file main.c.

4113{
4115 struct hierarchy_data *data;
4116 INT_PTR ret = 0;
4118
4119 TRACE("(%p, %08x, %08Ix, %08Ix)\n", hwnd, msg, wp, lp);
4120
4121 switch (msg)
4122 {
4123 case WM_INITDIALOG:
4124 page = (PROPSHEETPAGEW *)lp;
4125 data = (struct hierarchy_data *)page->lParam;
4127 break;
4128 case WM_NOTIFY:
4129 {
4130 NMHDR *hdr;
4131
4132 hdr = (NMHDR *)lp;
4133 switch (hdr->code)
4134 {
4135 case TVN_SELCHANGEDW:
4136 {
4137 NMTREEVIEWW *nm = (NMTREEVIEWW*)lp;
4139 CRYPT_PROVIDER_SGNR *provSigner;
4140
4143 provSigner = WTHelperGetProvSignerFromChain(
4144 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->pCryptProviderData,
4145 data->pCertViewInfo->idxSigner,
4146 data->pCertViewInfo->fCounterSigner,
4147 data->pCertViewInfo->idxCounterSigner);
4150 &provSigner->pasCertChain[selection]);
4151 break;
4152 }
4153 case NM_DBLCLK:
4156 ret = 1;
4157 break;
4158 }
4159 break;
4160 }
4161 case WM_COMMAND:
4162 switch (wp)
4163 {
4166 break;
4167 }
4168 break;
4169 case WM_REFRESH_VIEW:
4170 {
4171 TVITEMW item;
4172
4173 /* Get hierarchy data */
4174 memset(&item, 0, sizeof(item));
4175 item.mask = TVIF_HANDLE | TVIF_PARAM;
4177 0);
4179 /* Delete the contents of the tree */
4181 /* Reinitialize the tree */
4183 break;
4184 }
4185 }
4186 return ret;
4187}
#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:4066
static void set_certificate_status(HWND hwnd, const CRYPT_PROVIDER_CERT *cert)
Definition: main.c:4027
static void show_cert_hierarchy(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:4058
static DWORD lparam_to_index(struct hierarchy_data *data, LPARAM lp)
Definition: main.c:3929
static struct hierarchy_data * get_hierarchy_data_from_tree_item(HWND tree, HTREEITEM hItem)
Definition: main.c:3941
#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 4529 of file main.c.

4530{
4531 HCERTSTORE store;
4532 BOOL ret;
4533
4534 if (!cert)
4535 {
4537 return FALSE;
4538 }
4539 if (hDestCertStore) store = hDestCertStore;
4540 else
4541 {
4542 if (!(store = choose_store_for_cert(cert)))
4543 {
4544 WARN("unable to open certificate store\n");
4545 return FALSE;
4546 }
4547 }
4550 if (!hDestCertStore) CertCloseStore(store, 0);
4551 return ret;
4552}
static HCERTSTORE choose_store_for_cert(PCCERT_CONTEXT cert)
Definition: main.c:4517
#define CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
Definition: wincrypt.h:2655

Referenced by do_import(), and import_store().

◆ import_crl()

static BOOL import_crl ( PCCRL_CONTEXT  crl,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4554 of file main.c.

4555{
4556 HCERTSTORE store;
4557 BOOL ret;
4558
4559 if (!crl)
4560 {
4562 return FALSE;
4563 }
4564 if (hDestCertStore) store = hDestCertStore;
4565 else
4566 {
4567 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4569 {
4570 WARN("unable to open certificate store\n");
4571 return FALSE;
4572 }
4573 }
4576 if (!hDestCertStore) CertCloseStore(store, 0);
4577 return ret;
4578}
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 4580 of file main.c.

4581{
4582 HCERTSTORE store;
4583 BOOL ret;
4584
4585 if (!ctl)
4586 {
4588 return FALSE;
4589 }
4590 if (hDestCertStore) store = hDestCertStore;
4591 else
4592 {
4593 static const WCHAR trust[] = { 'T','r','u','s','t',0 };
4594
4595 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4597 {
4598 WARN("unable to open certificate store\n");
4599 return FALSE;
4600 }
4601 }
4602 ret = CertAddCTLContextToStore(store, ctl,
4604 if (!hDestCertStore) CertCloseStore(store, 0);
4605 return ret;
4606}
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 4795 of file main.c.

4797{
4799 BOOL ret;
4800
4801 if ((source = open_store_from_file(dwFlags, fileName, NULL)))
4802 {
4805 }
4806 else
4807 ret = FALSE;
4808 return ret;
4809}
WCHAR szTitle[MAX_LOADSTRING]
Definition: main.c:30
static HCERTSTORE open_store_from_file(DWORD dwFlags, LPCWSTR fileName, DWORD *pContentType)
Definition: main.c:4748
static char * dest
Definition: rtl.c:149

Referenced by do_import().

◆ import_file_dlg_proc()

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

Definition at line 5005 of file main.c.

5007{
5008 INT_PTR ret = 0;
5009 struct ImportWizData *data;
5010
5011 switch (msg)
5012 {
5013 case WM_INITDIALOG:
5014 {
5016
5017 data = (struct ImportWizData *)page->lParam;
5019 if (data->fileName)
5020 {
5021 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5022
5023 SendMessageW(fileNameEdit, WM_SETTEXT, 0, (LPARAM)data->fileName);
5024 }
5025 break;
5026 }
5027 case WM_NOTIFY:
5028 {
5029 NMHDR *hdr = (NMHDR *)lp;
5030
5031 switch (hdr->code)
5032 {
5033 case PSN_SETACTIVE:
5036 ret = TRUE;
5037 break;
5038 case PSN_WIZNEXT:
5039 {
5040 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5041 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
5042
5044 if (!len)
5045 {
5046 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5049 ret = 1;
5050 }
5051 else
5052 {
5053 WCHAR *fileName = malloc((len + 1) * sizeof(WCHAR));
5054
5055 if (fileName)
5056 {
5057 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
5058 (LPARAM)fileName);
5060 {
5061 free(fileName);
5063 ret = 1;
5064 }
5065 else
5066 data->fileName = fileName;
5067 }
5068 }
5069 break;
5070 }
5071 }
5072 break;
5073 }
5074 case WM_COMMAND:
5075 switch (wp)
5076 {
5078 {
5080 WCHAR fileBuf[MAX_PATH];
5081
5083 memset(&ofn, 0, sizeof(ofn));
5084 ofn.lStructSize = sizeof(ofn);
5085 ofn.hwndOwner = hwnd;
5087 ofn.lpstrFile = fileBuf;
5088 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
5089#ifdef __REACTOS__
5091#endif
5092 fileBuf[0] = 0;
5093 if (GetOpenFileNameW(&ofn))
5095 0, (LPARAM)ofn.lpstrFile);
5097 break;
5098 }
5099 }
5100 break;
5101 }
5102 return ret;
5103}
#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:4935
static void import_warning(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, int warningID)
Definition: main.c:4652
static WCHAR * make_import_file_filter(DWORD dwFlags)
Definition: main.c:4895
LPWSTR fileName
Definition: main.c:4817
DWORD Flags
Definition: commdlg.h:342

Referenced by show_import_ui().

◆ import_finish_dlg_proc()

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

Definition at line 5322 of file main.c.

5324{
5325 INT_PTR ret = 0;
5326 struct ImportWizData *data;
5327
5328 switch (msg)
5329 {
5330 case WM_INITDIALOG:
5331 {
5334 RECT rc;
5336
5337 data = (struct ImportWizData *)page->lParam;
5340 (WPARAM)data->titleFont, TRUE);
5341 GetWindowRect(lv, &rc);
5342 column.mask = LVCF_WIDTH;
5343 column.cx = (rc.right - rc.left) / 2 - 2;
5347 break;
5348 }
5349 case WM_NOTIFY:
5350 {
5351 NMHDR *hdr = (NMHDR *)lp;
5352
5353 switch (hdr->code)
5354 {
5355 case PSN_SETACTIVE:
5356 {
5358
5364 ret = TRUE;
5365 break;
5366 }
5367 case PSN_WIZFINISH:
5368 {
5370 if ((data->success = do_import(data->dwFlags, hwnd,
5371 data->pwszWizardTitle, &data->importSrc, data->hDestCertStore)))
5372 {
5374 LPCWSTR pTitle;
5375
5376 if (data->pwszWizardTitle)
5377 pTitle = data->pwszWizardTitle;
5378 else
5379 {
5381 pTitle = title;
5382 }
5384 MessageBoxW(hwnd, message, pTitle, MB_OK);
5385 }
5386 else
5387 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5389 break;
5390 }
5391 }
5392 break;
5393 }
5394 }
5395 return ret;
5396}
#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:5220

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 4716 of file main.c.

4718{
4719 BOOL ret;
4720
4722 {
4725 PCCTL_CONTEXT ctl = NULL;
4726
4727 do {
4729 if (cert)
4731 } while (ret && cert);
4732 do {
4734 if (crl)
4735 ret = import_crl(crl, dest);
4736 } while (ret && crl);
4737 do {
4738 ctl = CertEnumCTLsInStore(source, ctl);
4739 if (ctl)
4740 ret = import_ctl(ctl, dest);
4741 } while (ret && ctl);
4742 }
4743 else
4745 return ret;
4746}
static BOOL check_store_context_type(DWORD dwFlags, HCERTSTORE store)
Definition: main.c:4677

Referenced by do_import(), and import_file().

◆ import_store_dlg_proc()

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

Definition at line 5105 of file main.c.

5107{
5108 INT_PTR ret = 0;
5109 struct ImportWizData *data;
5110
5111 switch (msg)
5112 {
5113 case WM_INITDIALOG:
5114 {
5116
5117 data = (struct ImportWizData *)page->lParam;
5119 if (!data->hDestCertStore)
5120 {
5122 0, 0);
5126 }
5127 else
5128 {
5129 WCHAR storeTitle[MAX_STRING_LEN];
5130
5132 0, 0);
5139 0, (LPARAM)storeTitle);
5140 }
5141 break;
5142 }
5143 case WM_NOTIFY:
5144 {
5145 NMHDR *hdr = (NMHDR *)lp;
5146
5147 switch (hdr->code)
5148 {
5149 case PSN_SETACTIVE:
5152 ret = TRUE;
5153 break;
5154 case PSN_WIZNEXT:
5155 {
5158 !data->hDestCertStore)
5159 {
5160 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5163 ret = 1;
5164 }
5165 break;
5166 }
5167 }
5168 break;
5169 }
5170 case WM_COMMAND:
5171 switch (wp)
5172 {
5175 data->autoDest = TRUE;
5178 break;
5181 data->autoDest = FALSE;
5184 break;
5186 {
5189 CRYPTUI_ENUM_DATA enumData = { 0, NULL, 1, &enumArgs };
5190 CRYPTUI_SELECTSTORE_INFO_W selectInfo;
5191 HCERTSTORE store;
5192
5194 selectInfo.dwSize = sizeof(selectInfo);
5195 selectInfo.parent = hwnd;
5197 selectInfo.pwszTitle = NULL;
5198 selectInfo.pwszText = NULL;
5199 selectInfo.pEnumData = &enumData;
5200 selectInfo.pfnSelectedStoreCallback = NULL;
5201 if ((store = CryptUIDlgSelectStoreW(&selectInfo)))
5202 {
5203 WCHAR storeTitle[MAX_STRING_LEN];
5204
5206 ARRAY_SIZE(storeTitle));
5208 0, (LPARAM)storeTitle);
5209 data->hDestCertStore = store;
5210 data->freeDest = TRUE;
5211 }
5212 break;
5213 }
5214 }
5215 break;
5216 }
5217 return ret;
5218}
#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:1330
CRYPTUI_ENUM_DATA * pEnumData
Definition: main.c:1351
PFN_SELECTED_STORE_CB pfnSelectedStoreCallback
Definition: main.c:1352

Referenced by show_import_ui().

◆ import_validate_filename()

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

Definition at line 4935 of file main.c.

4937{
4938 HANDLE file;
4939 BOOL ret = FALSE;
4940
4942 OPEN_EXISTING, 0, NULL);
4944 {
4945 HCERTSTORE source = open_store_from_file(data->dwFlags, fileName,
4946 &data->contentType);
4947 int warningID = 0;
4948
4949 if (!source)
4950 warningID = IDS_IMPORT_BAD_FORMAT;
4951 else if (!check_store_context_type(data->dwFlags, source))
4952 warningID = IDS_IMPORT_TYPE_MISMATCH;
4953 else
4954 {
4955 data->importSrc.dwSubjectChoice =
4957 data->importSrc.hCertStore = source;
4958 data->freeSource = TRUE;
4959 ret = TRUE;
4960 }
4961 if (warningID)
4962 {
4963 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
4964 warningID);
4965 }
4967 }
4968 else
4969 {
4971 LPCWSTR pTitle;
4972 LPWSTR msgBuf, fullError;
4973
4974 if (data->pwszWizardTitle)
4975 pTitle = data->pwszWizardTitle;
4976 else
4977 {
4979 pTitle = title;
4980 }
4984 GetLastError(), 0, (LPWSTR) &msgBuf, 0, NULL);
4985 fullError = malloc((wcslen(error) + wcslen(fileName) + wcslen(msgBuf) + 3) * sizeof(WCHAR));
4986 if (fullError)
4987 {
4988 LPWSTR ptr = fullError;
4989
4990 lstrcpyW(ptr, error);
4991 ptr += lstrlenW(error);
4992 lstrcpyW(ptr, fileName);
4993 ptr += lstrlenW(fileName);
4994 *ptr++ = ':';
4995 *ptr++ = '\n';
4996 lstrcpyW(ptr, msgBuf);
4997 MessageBoxW(hwnd, fullError, pTitle, MB_ICONERROR | MB_OK);
4998 free(fullError);
4999 }
5000 LocalFree(msgBuf);
5001 }
5002 return ret;
5003}
#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 4672 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 4652 of file main.c.

4654{
4655 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
4656 {
4658 LPCWSTR pTitle;
4659
4660 if (szTitle)
4661 pTitle = szTitle;
4662 else
4663 {
4665 pTitle = title;
4666 }
4669 }
4670}

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 INT_PTR CALLBACK import_welcome_dlg_proc ( HWND  hwnd,
UINT  msg,
WPARAM  wp,
LPARAM  lp 
)
static

Definition at line 4826 of file main.c.

4828{
4829 INT_PTR ret = 0;
4830
4831 switch (msg)
4832 {
4833 case WM_INITDIALOG:
4834 {
4835 struct ImportWizData *data;
4837 WCHAR fontFace[MAX_STRING_LEN];
4838 HDC hDC = GetDC(hwnd);
4839 int height;
4840
4841 data = (struct ImportWizData *)page->lParam;
4844 data->titleFont = CreateFontW(height, 0, 0, 0, FW_BOLD, 0, 0, 0,
4848 (WPARAM)data->titleFont, TRUE);
4849 ReleaseDC(hwnd, hDC);
4850 break;
4851 }
4852 case WM_NOTIFY:
4853 {
4854 NMHDR *hdr = (NMHDR *)lp;
4855
4856 switch (hdr->code)
4857 {
4858 case PSN_SETACTIVE:
4860 ret = TRUE;
4861 break;
4862 }
4863 break;
4864 }
4865 }
4866 return ret;
4867}

Referenced by show_import_ui().

◆ index_to_lparam()

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

Definition at line 3914 of file main.c.

3915{
3917 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->pCryptProviderData,
3918 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
3919 data->pCertViewInfo->idxCounterSigner);
3920
3921 /* Takes advantage of the fact that a pointer is 32-bit aligned, and
3922 * therefore always even.
3923 */
3924 if (index == provSigner->csCertChain - 1)
3925 return (LPARAM)data;
3926 return index << 1 | 1;
3927}

Referenced by show_cert_chain().

◆ init_columns()

static void init_columns ( HWND  lv,
DWORD  flags 
)
static

Definition at line 6969 of file main.c.

6970{
6973 DWORD i = 0;
6974
6976 column.mask = LVCF_WIDTH | LVCF_TEXT;
6977 column.cx = 90;
6978 column.pszText = buf;
6980 {
6983 }
6985 {
6988 }
6990 {
6993 }
6995 {
6998 }
7000 {
7003 }
7005 {
7008 }
7009}
#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 3880 of file main.c.

3882{
3883 BOOL ret;
3884 struct detail_data *data = malloc(sizeof(struct detail_data));
3885
3886 if (data)
3887 {
3888 data->pCertViewInfo = pCertViewInfo;
3889 data->pfPropertiesChanged = pfPropertiesChanged;
3890 data->cFields = 0;
3891 data->fields = NULL;
3892 memset(page, 0, sizeof(PROPSHEETPAGEW));
3893 page->dwSize = sizeof(PROPSHEETPAGEW);
3894 page->dwFlags = PSP_USECALLBACK;
3895 page->pfnCallback = detail_callback;
3896 page->hInstance = hInstance;
3897 page->pszTemplate = MAKEINTRESOURCEW(IDD_DETAIL);
3898 page->pfnDlgProc = detail_dlg_proc;
3899 page->lParam = (LPARAM)data;
3900 ret = TRUE;
3901 }
3902 else
3903 ret = FALSE;
3904 return ret;
3905}
#define IDD_DETAIL
Definition: cryptuires.h:184
static UINT CALLBACK detail_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:3864
static INT_PTR CALLBACK detail_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3757
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 2558 of file main.c.

2560{
2561 memset(page, 0, sizeof(PROPSHEETPAGEW));
2562 page->dwSize = sizeof(PROPSHEETPAGEW);
2563 page->dwFlags = PSP_USECALLBACK;
2564 page->pfnCallback = general_callback_proc;
2565 page->hInstance = hInstance;
2566 page->pszTemplate = MAKEINTRESOURCEW(IDD_GENERAL);
2567 page->pfnDlgProc = general_dlg_proc;
2568 page->lParam = (LPARAM)pCertViewInfo;
2569}
#define IDD_GENERAL
Definition: resource.h:12
static INT_PTR CALLBACK general_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:2486
static UINT CALLBACK general_callback_proc(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:2537

Referenced by show_cert_dialog().

◆ init_hierarchy_page()

static BOOL init_hierarchy_page ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
PROPSHEETPAGEW page 
)
static

Definition at line 4207 of file main.c.

4209{
4210 struct hierarchy_data *data = malloc(sizeof(struct hierarchy_data));
4211 BOOL ret = FALSE;
4212
4213 if (data)
4214 {
4215 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
4216 if (data->imageList)
4217 {
4218 HBITMAP bmp;
4219 COLORREF backColor = RGB(255, 0, 255);
4220
4221 data->pCertViewInfo = pCertViewInfo;
4222 data->selectedCert = 0xffffffff;
4223
4225 ImageList_AddMasked(data->imageList, bmp, backColor);
4227 ImageList_SetBkColor(data->imageList, CLR_NONE);
4228
4229 memset(page, 0, sizeof(PROPSHEETPAGEW));
4230 page->dwSize = sizeof(PROPSHEETPAGEW);
4231 page->dwFlags = PSP_USECALLBACK;
4232 page->hInstance = hInstance;
4233 page->pszTemplate = MAKEINTRESOURCEW(IDD_HIERARCHY);
4234 page->pfnDlgProc = hierarchy_dlg_proc;
4235 page->lParam = (LPARAM)data;
4236 page->pfnCallback = hierarchy_callback;
4237 ret = TRUE;
4238 }
4239 else
4240 free(data);
4241 }
4242 return ret;
4243}
#define IDD_HIERARCHY
Definition: cryptuires.h:185
static INT_PTR CALLBACK hierarchy_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:4111
static UINT CALLBACK hierarchy_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:4189
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
Definition: main.c:3909

Referenced by show_cert_dialog().

◆ initialize_purpose_selection()

static void initialize_purpose_selection ( HWND  hwnd)
static

Definition at line 216 of file main.c.

217{
221 int index;
222
230 if ((usages = get_cert_mgr_usages()))
231 {
232 LPSTR ptr, comma;
233
234 for (ptr = usages, comma = strchr(ptr, ','); ptr && *ptr;
235 ptr = comma ? comma + 1 : NULL,
236 comma = ptr ? strchr(ptr, ',') : NULL)
237 {
239
240 if (comma)
241 *comma = 0;
243 {
245 (LPARAM)info->pwszName);
247 }
248 }
249 free(usages);
250 }
251}
#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 4479 of file main.c.

4480{
4481 BOOL isCA = defaultIfNotSpecified;
4483 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension);
4484
4485 if (ext)
4486 {
4488 DWORD size = 0;
4489
4491 ext->Value.pbData, ext->Value.cbData, CRYPT_DECODE_ALLOC_FLAG,
4492 NULL, &info, &size))
4493 {
4494 if (info->SubjectType.cbData == 1)
4495 isCA = info->SubjectType.pbData[0] & CERT_CA_SUBJECT_FLAG;
4496 LocalFree(info);
4497 }
4498 }
4499 else
4500 {
4502 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension);
4503 if (ext)
4504 {
4507
4509 szOID_BASIC_CONSTRAINTS2, ext->Value.pbData, ext->Value.cbData,
4510 0, NULL, &info, &size))
4511 isCA = info.fCA;
4512 }
4513 }
4514 return isCA;
4515}
#define szOID_BASIC_CONSTRAINTS2
Definition: wincrypt.h:3345
#define szOID_BASIC_CONSTRAINTS
Definition: wincrypt.h:3339
#define CERT_CA_SUBJECT_FLAG
Definition: wincrypt.h:387
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 3187 of file main.c.

3188{
3190 != -1;
3191}

Referenced by add_purpose_dlg_proc().

◆ is_valid_oid()

static BOOL is_valid_oid ( LPCSTR  oid)
static

Definition at line 3149 of file main.c.

3150{
3151 BOOL ret;
3152
3153 if (oid[0] != '0' && oid[0] != '1' && oid[0] != '2')
3154 ret = FALSE;
3155 else if (oid[1] != '.')
3156 ret = FALSE;
3157 else if (!oid[2])
3158 ret = FALSE;
3159 else
3160 {
3161 const char *ptr;
3162 BOOL expectNum = TRUE;
3163
3164 for (ptr = oid + 2, ret = TRUE; ret && *ptr; ptr++)
3165 {
3166 if (expectNum)
3167 {
3168 if (!isdigit(*ptr))
3169 ret = FALSE;
3170 else if (*(ptr + 1) == '.')
3171 expectNum = FALSE;
3172 }
3173 else
3174 {
3175 if (*ptr != '.')
3176 ret = FALSE;
3177 else if (!(*(ptr + 1)))
3178 ret = FALSE;
3179 else
3180 expectNum = TRUE;
3181 }
3182 }
3183 }
3184 return ret;
3185}
#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 3929 of file main.c.

3930{
3932 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->pCryptProviderData,
3933 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
3934 data->pCertViewInfo->idxCounterSigner);
3935
3936 if (!(lp & 1))
3937 return provSigner->csCertChain - 1;
3938 return lp >> 1;
3939}

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 6128 of file main.c.

6129{
6130 int baseLen, allLen, totalLen = 2, baseID;
6131 LPWSTR filter = NULL, baseFilter, all;
6132 LPCWSTR filterStr;
6133
6134 switch (exportFormat)
6135 {
6138 filterStr = export_filter_cert;
6139 break;
6141 baseID = IDS_EXPORT_FILTER_PFX;
6142 filterStr = export_filter_pfx;
6143 break;
6145 baseID = IDS_EXPORT_FILTER_CMS;
6146 filterStr = export_filter_cms;
6147 break;
6148 default:
6149 switch (subjectChoice)
6150 {
6152 baseID = IDS_EXPORT_FILTER_CRL;
6153 filterStr = export_filter_crl;
6154 break;
6156 baseID = IDS_EXPORT_FILTER_CTL;
6157 filterStr = export_filter_ctl;
6158 break;
6161 filterStr = export_filter_sst;
6162 break;
6163 default:
6164 baseID = IDS_EXPORT_FILTER_CERT;
6165 filterStr = export_filter_cert;
6166 break;
6167 }
6168 }
6169 baseLen = LoadStringW(hInstance, baseID, (LPWSTR)&baseFilter, 0);
6170 totalLen += baseLen + lstrlenW(filterStr) + 2;
6172 totalLen += allLen + lstrlenW(filter_all) + 2;
6173 filter = malloc(totalLen * sizeof(WCHAR));
6174 if (filter)
6175 {
6176 LPWSTR ptr;
6177
6178 ptr = filter;
6179 memcpy(ptr, baseFilter, baseLen * sizeof(WCHAR));
6180 ptr += baseLen;
6181 *ptr++ = 0;
6182 lstrcpyW(ptr, filterStr);
6183 ptr += lstrlenW(filterStr) + 1;
6184 memcpy(ptr, all, allLen * sizeof(WCHAR));
6185 ptr += allLen;
6186 *ptr++ = 0;
6188 ptr += lstrlenW(filter_all) + 1;
6189 *ptr++ = 0;
6190 }
6191 return filter;
6192}
#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:6125
static const WCHAR export_filter_ctl[]
Definition: main.c:6123
static const WCHAR export_filter_cert[]
Definition: main.c:6121
static const WCHAR export_filter_sst[]
Definition: main.c:6126
static const WCHAR filter_all[]
Definition: main.c:4878
static const WCHAR export_filter_cms[]
Definition: main.c:6124
static const WCHAR export_filter_crl[]
Definition: main.c:6122

Referenced by export_file_dlg_proc().

◆ make_import_file_filter()

static WCHAR * make_import_file_filter ( DWORD  dwFlags)
static

Definition at line 4895 of file main.c.

4896{
4897 DWORD i;
4898 int len, totalLen = 2;
4899 LPWSTR filter = NULL, str;
4900
4901 for (i = 0; i < ARRAY_SIZE(import_filters); i++)
4902 {
4903 if (!import_filters[i].allowFlags || !dwFlags ||
4905 {
4907 totalLen += len + lstrlenW(import_filters[i].filter) + 2;
4908 }
4909 }
4910 filter = malloc(totalLen * sizeof(WCHAR));
4911 if (filter)
4912 {
4913 LPWSTR ptr;
4914
4915 ptr = filter;
4916 for (i = 0; i < ARRAY_SIZE(import_filters); i++)
4917 {
4918 if (!import_filters[i].allowFlags || !dwFlags ||
4920 {
4922 (LPWSTR)&str, 0);
4923 memcpy(ptr, str, len * sizeof(WCHAR));
4924 ptr += len;
4925 *ptr++ = 0;
4928 }
4929 }
4930 *ptr++ = 0;
4931 }
4932 return filter;
4933}
static const struct @344 import_filters[]
DWORD allowFlags
Definition: main.c:4883

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 4748 of file main.c.

4750{
4751 HCERTSTORE store = NULL;
4752 DWORD contentType = 0, expectedContentTypeFlags;
4753
4754 if (dwFlags &
4757 {
4758 expectedContentTypeFlags =
4763 expectedContentTypeFlags |=
4767 expectedContentTypeFlags |=
4771 expectedContentTypeFlags |=
4774 }
4775 else
4776 expectedContentTypeFlags =
4786
4788 expectedContentTypeFlags, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL,
4789 &contentType, NULL, &store, NULL, NULL);
4790 if (pContentType)
4791 *pContentType = contentType;
4792 return store;
4793}
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:3704
#define CERT_QUERY_OBJECT_FILE
Definition: wincrypt.h:3686
#define CERT_QUERY_CONTENT_FLAG_CRL
Definition: wincrypt.h:3705
#define CERT_QUERY_CONTENT_FLAG_CERT
Definition: wincrypt.h:3703
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
Definition: wincrypt.h:3708
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
Definition: wincrypt.h:3714
#define CERT_QUERY_FORMAT_FLAG_ALL
Definition: wincrypt.h:3749
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
Definition: wincrypt.h:3706
#define CERT_QUERY_CONTENT_FLAG_PFX
Definition: wincrypt.h:3721
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
Definition: wincrypt.h:3712
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
Definition: wincrypt.h:3710

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 7427 of file main.c.

7428{
7429 PROPSHEETPAGEW *psp;
7430 DWORD i, size = sizeof(*psp) * num;
7431
7432 psp = malloc(size);
7433 if (!psp)
7434 return NULL;
7435 memcpy(psp, pages, size);
7436 for (i = 0; i < num; i++)
7437 {
7438 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].pszTemplate))
7439 psp[i].pszTemplate = NULL;
7440 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].pszIcon))
7441 psp[i].pszIcon = NULL;
7442 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7443 psp[i].pszTitle = NULL;
7444 if (pages[i].dwFlags & PSP_USECALLBACK)
7445 psp[i].pfnCallback = NULL;
7446 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7447 psp[i].pszHeaderTitle = NULL;
7448 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7449 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7450 psp[i].pszHeaderSubTitle = NULL;
7451 }
7452 for (i = 0; i < num; i++)
7453 {
7454 if (!(pages[i].dwFlags & PSP_DLGINDIRECT) && !IS_INTRESOURCE(pages[i].pszTemplate))
7455 {
7456 if (!(psp[i].pszTemplate = strdupAtoW( pages[i].pszTemplate ))) goto error;
7457 }
7458 if ((pages[i].dwFlags & PSP_USEICONID) && !IS_INTRESOURCE(pages[i].pszIcon))
7459 {
7460 if (!(psp[i].pszIcon = strdupAtoW( pages[i].pszIcon ))) goto error;
7461 }
7462 if ((pages[i].dwFlags & PSP_USETITLE) && !IS_INTRESOURCE(pages[i].pszTitle))
7463 {
7464 if (!(psp[i].pszTitle = strdupAtoW( pages[i].pszTitle ))) goto error;
7465 }
7466 if (pages[i].dwFlags & PSP_USECALLBACK)
7467 FIXME("ignoring pfnCallback\n");
7468 if ((pages[i].dwFlags & PSP_USEHEADERTITLE) && !IS_INTRESOURCE(pages[i].pszHeaderTitle))
7469 {
7470 if (!(psp[i].pszHeaderTitle = strdupAtoW( pages[i].pszHeaderTitle ))) goto error;
7471 }
7472 if ((pages[i].dwFlags & PSP_USEHEADERSUBTITLE) &&
7473 !IS_INTRESOURCE(pages[i].pszHeaderSubTitle))
7474 {
7475 if (!(psp[i].pszHeaderSubTitle = strdupAtoW( pages[i].pszHeaderSubTitle ))) goto error;
7476 }
7477 }
7478 return psp;
7479error:
7481 return NULL;
7482}
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 1700 of file main.c.

1702{
1703 struct ReadStringStruct *string = (struct ReadStringStruct *)dwCookie;
1704 LONG cch = min(cb / sizeof(WCHAR), string->len - string->pos);
1705
1706 TRACE("(%p, %p, %ld, %p)\n", string, buf, cb, pcb);
1707
1708 memmove(buf, string->buf + string->pos, cch * sizeof(WCHAR));
1709 string->pos += cch;
1710 *pcb = cch * sizeof(WCHAR);
1711 return 0;
1712}
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432

Referenced by add_unformatted_text_to_control().

◆ redraw_states()

static void redraw_states ( HWND  list,
BOOL  enabled 
)
static

Definition at line 3295 of file main.c.

3296{
3297 int items = SendMessageW(list, LVM_GETITEMCOUNT, 0, 0), i;
3298
3299 for (i = 0; i < items; i++)
3300 {
3301 BOOL change = FALSE;
3302 int state;
3303
3305 /* This reverses the INDEXTOSTATEIMAGEMASK shift. There doesn't appear
3306 * to be a handy macro for it.
3307 */
3308 state >>= 12;
3309 if (enabled)
3310 {
3312 {
3314 change = TRUE;
3315 }
3317 {
3319 change = TRUE;
3320 }
3321 }
3322 else
3323 {
3325 {
3327 change = TRUE;
3328 }
3330 {
3332 change = TRUE;
3333 }
3334 }
3335 if (change)
3336 {
3337 LVITEMW item;
3338
3340 item.stateMask = LVIS_STATEIMAGEMASK;
3342 }
3343 }
3344}
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 3744 of file main.c.

3745{
3747 int curSel;
3748 struct detail_data *data;
3749
3750 curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0);
3751 /* Actually, any index will do, since they all store the same data value */
3752 data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, curSel, 0);
3754 set_fields_selection(hwnd, data, curSel);
3755}

Referenced by detail_dlg_proc().

◆ refresh_propsheet_pages()

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

Definition at line 3494 of file main.c.

3495{
3498 return TRUE;
3499}
#define WC_DIALOG
Definition: undocuser.h:13
DWORD WINAPI GetClassLongW(_In_ HWND, _In_ int)
#define GCW_ATOM
Definition: winuser.h:669

Referenced by apply_general_changes().

◆ refresh_store_certs()

static void refresh_store_certs ( HWND  hwnd)
static

Definition at line 558 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 6404 of file main.c.

6405{
6406 BOOL ret;
6407 DWORD size = 0;
6408
6410 {
6411 char *buf = malloc(size);
6412
6413 if (buf)
6414 {
6416 &size)))
6417 ret = WriteFile(file, buf, size, &size, NULL);
6418 free(buf);
6419 }
6420 else
6421 {
6423 ret = FALSE;
6424 }
6425 }
6426 return ret;
6427}
#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_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
#define CRYPT_STRING_BASE64
Definition: wincrypt.h:3132

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 6435 of file main.c.

6437{
6438 BOOL ret;
6441
6442 if (store)
6443 {
6444 if (includeChain)
6445 {
6448
6449 if (addlStore)
6450 {
6451 DWORD i;
6452
6453 ret = TRUE;
6454 for (i = 0; ret && i < pExportInfo->cStores; i++)
6455 ret = CertAddStoreToCollection(addlStore,
6456 pExportInfo->rghStores, 0, 0);
6457 if (ret)
6458 {
6460
6462 pExportInfo->pCertContext, NULL, addlStore, NULL, 0,
6463 NULL, &chain);
6464 if (ret)
6465 {
6466 DWORD j;
6467
6468 for (i = 0; ret && i < chain->cChain; i++)
6469 for (j = 0; ret && j < chain->rgpChain[i]->cElement;
6470 j++)
6472 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6475 }
6476 else
6477 {
6478 /* No chain could be created, just add the individual
6479 * cert to the message.
6480 */
6482 pExportInfo->pCertContext, CERT_STORE_ADD_ALWAYS,
6483 NULL);
6484 }
6485 }
6486 CertCloseStore(addlStore, 0);
6487 }
6488 else
6489 ret = FALSE;
6490 }
6491 else
6493 pExportInfo->pCertContext, CERT_STORE_ADD_ALWAYS, NULL);
6494 if (ret)
6495 ret = save_store_as_cms(file, store);
6496 CertCloseStore(store, 0);
6497 }
6498 else
6499 ret = FALSE;
6500 return ret;
6501}
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:2465

Referenced by do_export().

◆ save_cert_mgr_usages()

static void save_cert_mgr_usages ( HWND  hwnd)
static

Definition at line 650 of file main.c.

651{
652 static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
653 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
654 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
655 'r','p','o','s','e',0 };
656 HKEY key;
658 int purposes = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
660 LPSTR str = NULL;
661
662 item.mask = LVIF_STATE | LVIF_PARAM;
663 item.iSubItem = 0;
664 item.stateMask = LVIS_STATEIMAGEMASK;
665 for (i = 0; i < purposes; i++)
666 {
667 item.iItem = i;
668 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
669 {
670 int state = item.state >> 12;
671
673 {
675 BOOL firstString = TRUE;
676
677 if (!str)
678 str = malloc(strlen(info->pszOID) + 1);
679 else
680 {
681 str = realloc(str, strlen(str) + 1 + strlen(info->pszOID) + 1);
682 firstString = FALSE;
683 }
684 if (str)
685 {
686 LPSTR ptr = firstString ? str : str + strlen(str);
687
688 if (!firstString)
689 *ptr++ = ',';
690 strcpy(ptr, info->pszOID);
691 }
692 }
693 }
694 }
696 NULL, &key, NULL))
697 {
698 if (str)
699 RegSetValueExA(key, "Purpose", 0, REG_SZ, (const BYTE *)str,
700 strlen(str) + 1);
701 else
702 RegDeleteValueA(key, "Purpose");
704 }
705 free(str);
706}
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:1044
strcpy
Definition: string.h:131

Referenced by cert_mgr_advanced_dlg_proc().

◆ save_der()

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

Definition at line 6397 of file main.c.

6398{
6400
6401 return WriteFile(file, pb, cb, &bytesWritten, NULL);
6402}
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 6509 of file main.c.

6512{
6515 BOOL ret = FALSE;
6516
6517 if (store)
6518 {
6519 CRYPT_DATA_BLOB pfxBlob = { 0, NULL };
6521 BOOL freeKeyProvInfo = FALSE;
6522
6523 if (pContextInfo->fExportChain)
6524 {
6525 HCERTCHAINENGINE engine = NULL;
6526
6527 if (pExportInfo->cStores)
6528 {
6530
6531 memset(&config, 0, sizeof(config));
6532 config.cbSize = sizeof(config);
6533 config.cAdditionalStore = pExportInfo->cStores;
6534 config.rghAdditionalStore = pExportInfo->rghStores;
6536 }
6537 else
6538 ret = TRUE;
6539 if (ret)
6540 {
6541 CERT_CHAIN_PARA chainPara;
6543
6544 memset(&chainPara, 0, sizeof(chainPara));
6545 chainPara.cbSize = sizeof(chainPara);
6547 pExportInfo->pCertContext, NULL, NULL, &chainPara, 0, NULL,
6548 &chain);
6549 if (ret)
6550 {
6551 DWORD i, j;
6552
6553 for (i = 0; ret && i < chain->cChain; i++)
6554 for (j = 0; ret && j < chain->rgpChain[i]->cElement;
6555 j++)
6556 {
6557 if (i == 0 && j == 0)
6559 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6561 else
6563 chain->rgpChain[i]->rgpElement[j]->pCertContext,
6565 }
6567 }
6568 }
6569 if (engine)
6571 }
6572 else
6574 pExportInfo->pCertContext, CERT_STORE_ADD_ALWAYS, &cert);
6575 /* Copy private key info to newly created cert, so it'll get exported
6576 * along with the cert.
6577 */
6578 if (ret && pContextInfo->fExportPrivateKeys)
6579 {
6580 if (keyProvInfo)
6582 CERT_KEY_PROV_INFO_PROP_ID, 0, keyProvInfo);
6583 else
6584 {
6585 if (!(keyProvInfo = export_get_private_key_info(cert)))
6586 ret = FALSE;
6587 else
6588 {
6590 CERT_KEY_PROV_INFO_PROP_ID, 0, keyProvInfo);
6591 freeKeyProvInfo = TRUE;
6592 }
6593 }
6594 }
6595 if (ret)
6596 {
6597 DWORD exportFlags =
6599
6600 ret = PFXExportCertStore(store, &pfxBlob,
6601 pContextInfo->pwszPassword, exportFlags);
6602 if (ret)
6603 {
6604 pfxBlob.pbData = malloc(pfxBlob.cbData);
6605 if (pfxBlob.pbData)
6606 {
6607 ret = PFXExportCertStore(store, &pfxBlob,
6608 pContextInfo->pwszPassword, exportFlags);
6609 if (ret)
6610 {
6612
6613 ret = WriteFile(file, pfxBlob.pbData, pfxBlob.cbData,
6614 &bytesWritten, NULL);
6615 }
6616 }
6617 else
6618 {
6620 ret = FALSE;
6621 }
6622 }
6623 }
6624 if (ret && deleteKeys)
6625 {
6626 HCRYPTPROV prov;
6627
6628 CryptAcquireContextW(&prov, keyProvInfo->pwszContainerName,
6629 keyProvInfo->pwszProvName, keyProvInfo->dwProvType,
6631 }
6632 if (freeKeyProvInfo)
6633 free(keyProvInfo);
6635 CertCloseStore(store, 0);
6636 }
6637 return ret;
6638}
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:218
#define CRYPT_DELETEKEYSET
Definition: wincrypt.h:2275
#define EXPORT_PRIVATE_KEYS
Definition: wincrypt.h:4333
#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY
Definition: wincrypt.h:4332

Referenced by do_export().

◆ save_serialized_store()

static BOOL save_serialized_store ( HANDLE  file,
HCERTSTORE  store 
)
static

Definition at line 6503 of file main.c.

6504{
6507}
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:2793
#define PKCS_7_ASN_ENCODING
Definition: wincrypt.h:2503
#define CERT_STORE_SAVE_TO_FILE
Definition: wincrypt.h:2796

Referenced by do_export().

◆ save_store_as_cms()

static BOOL save_store_as_cms ( HANDLE  file,
HCERTSTORE  store 
)
inlinestatic

Definition at line 6429 of file main.c.

6430{
6433}
#define CERT_STORE_SAVE_AS_PKCS7
Definition: wincrypt.h:2794

Referenced by do_export(), and save_cert_as_cms().

◆ select_cert_dlg_proc()

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

Definition at line 7233 of file main.c.

7234{
7235 struct SelectCertData *data;
7236
7237 switch (msg)
7238 {
7239 case WM_INITDIALOG:
7240 {
7241 struct SelectCertParam *param = (struct SelectCertParam *)lp;
7244 DWORD i = 0;
7245
7246 data = malloc(sizeof(*data));
7247 if (!data)
7248 return 0;
7249 data->cert = &param->cert;
7250 data->dateColumn = 4 -
7255 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
7256 if (data->imageList)
7257 {
7258 HBITMAP bmp;
7259 COLORREF backColor = RGB(255, 0, 255);
7260
7262 ImageList_AddMasked(data->imageList, bmp, backColor);
7264 ImageList_SetBkColor(data->imageList, CLR_NONE);
7266 (LPARAM)data->imageList);
7267 }
7268 data->title = pcsc->szTitle;
7269 data->cStores = pcsc->cStores;
7270 data->rghStores = pcsc->rghStores;
7271 data->cPropSheetPages = pcsc->cPropSheetPages;
7272 data->rgPropSheetPages = pcsc->rgPropSheetPages;
7273 data->displayProc = pcsc->pDisplayCallback;
7274 data->callbackData = pcsc->pvCallbackData;
7276
7277 if (pcsc->szTitle)
7279 if (pcsc->szDisplayString)
7283 while (i < pcsc->cDisplayStores)
7287 break;
7288 }
7289#ifdef __REACTOS__
7290 case WM_DESTROY:
7294 break;
7295#endif
7296 case WM_NOTIFY:
7297 {
7298 NMHDR *hdr = (NMHDR *)lp;
7299
7300 switch (hdr->code)
7301 {
7302 case NM_DBLCLK:
7303 {
7305
7307 if (cert)
7309 break;
7310 }
7311 case LVN_COLUMNCLICK:
7312 {
7313 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
7315
7316 /* FIXME: doesn't support swapping sort order between ascending and descending. */
7318 if (nmlv->iSubItem == data->dateColumn)
7320 else
7321 {
7322 struct SortData sortData;
7323
7324 sortData.hwnd = lv;
7325 sortData.column = nmlv->iSubItem;
7326 SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)&sortData,
7328 }
7329 break;
7330 }
7331 }
7332 break;
7333 }
7334 case WM_COMMAND:
7335 switch (wp)
7336 {
7337 case IDOK:
7338 {
7340
7342 if (!cert)
7343 {
7344 WCHAR buf[40], title[40];
7345
7347 if (!data->title)
7349 MessageBoxW(hwnd, buf, data->title ? data->title : title, MB_OK | MB_ICONWARNING);
7350 break;
7351 }
7353#ifndef __REACTOS__
7355 ImageList_Destroy(data->imageList);
7356 free(data);
7357#endif
7359 break;
7360 }
7361 case IDCANCEL:
7362#ifndef __REACTOS__
7365 ImageList_Destroy(data->imageList);
7366 free(data);
7367#endif
7369 break;
7371 {
7373
7375 if (cert)
7377 break;
7378 }
7379 }
7380 break;
7381 }
7382 return 0;
7383}
#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:7175
static PCCERT_CONTEXT select_cert_get_selected(HWND hwnd, int selection)
Definition: main.c:7157
static void init_columns(HWND lv, DWORD flags)
Definition: main.c:6969
static void add_store_certs(HWND lv, HCERTSTORE store, DWORD flags, PFNCFILTERPROC filter, void *callback_data)
Definition: main.c:7141
static int CALLBACK select_cert_sort_by_text(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:7221
static void select_cert_view(HWND hwnd, PCCERT_CONTEXT cert, struct SelectCertData *data)
Definition: main.c:7197
HWND hwnd
Definition: main.c:7217
PFNCCERTDISPLAYPROC pDisplayCallback
Definition: cryptuiapi.h:378
#define MB_ICONWARNING
Definition: winuser.h:797

Referenced by CryptUIDlgSelectCertificateW().

◆ select_cert_get_selected()

static PCCERT_CONTEXT select_cert_get_selected ( HWND  hwnd,
int  selection 
)
static

Definition at line 7157 of file main.c.

7158{
7161 LVITEMW item;
7162
7163 if (selection < 0)
7165 if (selection < 0)
7166 return NULL;
7167 item.mask = LVIF_PARAM;
7168 item.iItem = selection;
7169 item.iSubItem = 0;
7170 if (SendMessageW(lv, LVM_GETITEMW, 0, (LPARAM)&item))
7171 cert = (PCCERT_CONTEXT)item.lParam;
7172 return cert;
7173}

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 7221 of file main.c.

7222{
7223 struct SortData *data = (struct SortData *)lp;
7224 return cert_mgr_sort_by_text(data->hwnd, data->column, lp1, lp2);
7225}

Referenced by select_cert_dlg_proc().

◆ select_cert_update_view_button()

static void select_cert_update_view_button ( HWND  hwnd)
static

Definition at line 7175 of file main.c.

7176{
7178 int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
7179
7180 EnableWindow(GetDlgItem(hwnd, IDC_SELECT_VIEW_CERT), numSelected == 1);
7181}

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 7197 of file main.c.

7198{
7200
7201 if (data->displayProc && data->displayProc(cert, hwnd, data->callbackData))
7202 return;
7203 memset(&viewInfo, 0, sizeof(viewInfo));
7204 viewInfo.dwSize = sizeof(viewInfo);
7205 viewInfo.hwndParent = hwnd;
7206 viewInfo.pCertContext = cert;
7207 viewInfo.cStores = data->cStores;
7208 viewInfo.rghStores = data->rghStores;
7209 viewInfo.cPropSheetPages = data->cPropSheetPages;
7210 viewInfo.rgPropSheetPages = data->rgPropSheetPages;
7211 /* FIXME: this should be modal */
7212 CryptUIDlgViewCertificateW(&viewInfo, NULL);
7213}
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 3352 of file main.c.

3353{
3355
3356 switch (selection)
3357 {
3358 case PurposeEnableAll:
3359 case PurposeDisableAll:
3360 EnableWindow(lv, FALSE);
3361 redraw_states(lv, FALSE);
3363 break;
3365 EnableWindow(lv, TRUE);
3366 redraw_states(lv, TRUE);
3368 }
3369}
static void redraw_states(HWND list, BOOL enabled)
Definition: main.c:3295

Referenced by cert_properties_general_dlg_proc(), and show_cert_usages().

◆ select_store_dlg_proc()

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

Definition at line 1517 of file main.c.

1519{
1520 struct SelectStoreInfo *selectInfo;
1521 INT_PTR ret = 0;
1522
1523 switch (msg)
1524 {
1525 case WM_INITDIALOG:
1526 {
1527 selectInfo = (struct SelectStoreInfo *)lp;
1529 if (selectInfo->info->pwszTitle)
1531 (LPARAM)selectInfo->info->pwszTitle);
1532 if (selectInfo->info->pwszText)
1534 (LPARAM)selectInfo->info->pwszText);
1535 if (!(selectInfo->info->dwFlags & CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE))
1537 enumerate_stores(hwnd, selectInfo->info->pEnumData);
1538 break;
1539 }
1540 case WM_COMMAND:
1541 switch (wp)
1542 {
1543 case IDOK:
1544 {
1548
1549 selectInfo = (struct SelectStoreInfo *)GetWindowLongPtrW(hwnd,
1550 DWLP_USER);
1551 if (!selection)
1552 {
1554
1555 if (selectInfo->info->pwszTitle)
1556 pTitle = selectInfo->info->pwszTitle;
1557 else
1558 {
1560 pTitle = title;
1561 }
1564 }
1565 else
1566 {
1568
1569 if (!selectInfo->info->pfnSelectedStoreCallback ||
1571 selectInfo->info->pvArg))
1572 {
1573 selectInfo->store = store;
1576 }
1577 else
1579 }
1580 ret = TRUE;
1581 break;
1582 }
1583 case IDCANCEL:
1586 ret = TRUE;
1587 break;
1588 }
1589 break;
1590 }
1591 return ret;
1592}
#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:1482
static void enumerate_stores(HWND hwnd, CRYPTUI_ENUM_DATA *pEnumData)
Definition: main.c:1411
static void free_store_info(HWND tree)
Definition: main.c:1456
#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 1482 of file main.c.

1483{
1485 TVITEMW item;
1486 HCERTSTORE store;
1487
1488 memset(&item, 0, sizeof(item));
1490 item.hItem = hItem;
1491 item.cchTextMax = ARRAY_SIZE(buf);
1492 item.pszText = buf;
1494 if (item.lParam)
1495 {
1496 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1497
1498 if (storeInfo->type == StoreHandle)
1499 store = storeInfo->store;
1500 else
1501 store = CertOpenSystemStoreW(0, storeInfo->name);
1502 }
1503 else
1504 {
1505 /* It's implicitly a system store */
1507 }
1508 return store;
1509}
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 2297 of file main.c.

2299{
2300 CHARFORMATW charFmt;
2301 PARAFORMAT2 parFmt;
2305 (CRYPT_PROVIDER_DATA *)pCertViewInfo->pCryptProviderData,
2306 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
2307 pCertViewInfo->idxCounterSigner);
2309 &provSigner->pasCertChain[provSigner->csCertChain - 1];
2310
2311 if (!provSigner->pChainContext ||
2315 else if (!root->fTrustedRoot)
2317 else
2319
2320 memset(&charFmt, 0, sizeof(charFmt));
2321 charFmt.cbSize = sizeof(charFmt);
2322 charFmt.dwMask = CFM_BOLD;
2323 charFmt.dwEffects = CFE_BOLD;
2325 /* FIXME: vertically center text */
2326 parFmt.cbSize = sizeof(parFmt);
2327 parFmt.dwMask = PFM_STARTINDENT;
2328 parFmt.dxStartIndent = MY_INDENT;
2331
2334 if (provSigner->dwError == TRUST_E_CERT_SIGNATURE)
2336 IDS_CERT_INFO_BAD_SIG, &parFmt);
2337 else if (!provSigner->pChainContext ||
2342 else if (!root->fTrustedRoot)
2343 {
2344 if (provSigner->csCertChain == 1 && root->fSelfSigned)
2347 else
2350 }
2351 else
2352 {
2353 set_policy_text(text, pCertViewInfo);
2354 set_issuer_statement(hwnd, pCertViewInfo);
2355 }
2356}
#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:2253
static void add_icon_to_control(HWND hwnd, int id)
Definition: main.c:1788
static void set_policy_text(HWND text, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2150
#define CFE_BOLD
Definition: richedit.h:406
CERT_TRUST_STATUS TrustStatus
Definition: wincrypt.h:1051
PCCERT_CHAIN_CONTEXT pChainContext
Definition: wintrust.h:241
#define CERT_TRUST_IS_PARTIAL_CHAIN
Definition: wincrypt.h:1003
#define TRUST_E_CERT_SIGNATURE
Definition: winerror.h:4588

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 2358 of file main.c.

2360{
2361 WCHAR nl = '\n';
2363 CHARFORMATW charFmt;
2364 PARAFORMAT2 parFmt;
2365
2366 memset(&charFmt, 0, sizeof(charFmt));
2367 charFmt.cbSize = sizeof(charFmt);
2368 charFmt.dwMask = CFM_BOLD;
2369 charFmt.dwEffects = CFE_BOLD;
2371 parFmt.cbSize = sizeof(parFmt);
2372 parFmt.dwMask = PFM_STARTINDENT;
2373 parFmt.dxStartIndent = MY_INDENT * 3;
2375 charFmt.dwEffects = 0;
2378 nameFlags);
2382
2383}
#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:1773

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 3477 of file main.c.

3479{
3480 if (str && *str)
3481 {
3483
3484 blob.pbData = (BYTE *)str;
3485 blob.cbData = (lstrlenW(str) + 1) * sizeof(WCHAR);
3487 }
3488 else
3490}
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 2397 of file main.c.

2398{
2399 WCHAR nl = '\n';
2401 CHARFORMATW charFmt;
2402 PARAFORMAT2 parFmt;
2403
2404 memset(&charFmt, 0, sizeof(charFmt));
2405 charFmt.cbSize = sizeof(charFmt);
2406 charFmt.dwMask = CFM_BOLD;
2407 charFmt.dwEffects = CFE_BOLD;
2409 parFmt.cbSize = sizeof(parFmt);
2410 parFmt.dwMask = PFM_STARTINDENT;
2411 parFmt.dxStartIndent = MY_INDENT * 3;
2413 &parFmt);
2414 charFmt.dwEffects = 0;
2416 add_date_string_to_control(text, &cert->pCertInfo->NotBefore);
2417 charFmt.dwEffects = CFE_BOLD;
2420 charFmt.dwEffects = 0;
2422 add_date_string_to_control(text, &cert->pCertInfo->NotAfter);
2424}
#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:2385
static void add_string_resource_to_control(HWND hwnd, int id)
Definition: main.c:1731

Referenced by set_general_info().

◆ set_certificate_status()

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

Definition at line 4027 of file main.c.

4028{
4029 /* Select all the text in the control, the next update will replace it */
4030 SendMessageW(hwnd, EM_SETSEL, 0, -1);
4031 /* Set the highest priority error messages first. */
4032 if (!(cert->dwConfidence & CERT_CONFIDENCE_SIG))
4034 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIME))
4036 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIMENEST))
4038 else if (cert->dwRevokedReason)
4040 else
4042}
#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 4044 of file main.c.

4046{
4049 (CRYPT_PROVIDER_DATA *)pCertViewInfo->pCryptProviderData,
4050 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
4051 pCertViewInfo->idxCounterSigner);
4053 pCertViewInfo->idxCert);
4054
4055 set_certificate_status(status, provCert);
4056}
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 3102 of file main.c.

3103{
3105
3106 if (sel >= 0 && sel < ARRAY_SIZE(listItems))
3107 {
3109 listItems[sel].add(list, data);
3110 }
3111}

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 3457 of file main.c.

3458{
3459 PCCERT_CONTEXT cert = data->cert;
3460 WCHAR *str;
3461
3463 {
3465 (LPARAM)str);
3466 free(str);
3467 }
3469 {
3471 (LPARAM)str);
3472 free(str);
3473 }
3475}
static void show_cert_usages(HWND hwnd, struct edit_cert_data *data)
Definition: main.c:3378

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 2426 of file main.c.

2428{
2429 set_cert_info(hwnd, pCertViewInfo);
2430 set_cert_name_string(hwnd, pCertViewInfo->pCertContext, 0,
2432 set_cert_name_string(hwnd, pCertViewInfo->pCertContext,
2435}
#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:2397
static void set_cert_name_string(HWND hwnd, PCCERT_CONTEXT cert, DWORD nameFlags, int heading)
Definition: main.c:2358
static void set_cert_info(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2297

Referenced by general_dlg_proc().

◆ set_issuer_statement()

static void set_issuer_statement ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2253 of file main.c.

2255{
2256 PCERT_EXTENSION policyExt;
2257
2258 if (!(pCertViewInfo->dwFlags & CRYPTUI_DISABLE_ISSUERSTATEMENT) &&
2260 pCertViewInfo->pCertContext->pCertInfo->cExtension,
2261 pCertViewInfo->pCertContext->pCertInfo->rgExtension)))
2262 {
2263 CERT_POLICIES_INFO *policies;
2264 DWORD size;
2265
2267 policyExt->Value.pbData, policyExt->Value.cbData,
2268 CRYPT_DECODE_ALLOC_FLAG, NULL, &policies, &size))
2269 {
2271 LPWSTR cps = NULL, userNotice = NULL;
2272
2273 if ((qualifier = find_policy_qualifier(policies,
2276 if ((qualifier = find_policy_qualifier(policies,
2279 if (cps || userNotice)
2280 {
2281 struct IssuerStatement *issuerStatement = malloc(sizeof(struct IssuerStatement));
2282
2283 if (issuerStatement)
2284 {
2285 issuerStatement->cps = cps;
2286 issuerStatement->userNotice = userNotice;
2289 (ULONG_PTR)issuerStatement);
2290 }
2291 }
2292 LocalFree(policies);
2293 }
2294 }
2295}
#define CRYPTUI_DISABLE_ISSUERSTATEMENT
Definition: cryptuiapi.h:91
static CRYPT_OBJID_BLOB * find_policy_qualifier(CERT_POLICIES_INFO *policies, LPCSTR policyOid)
Definition: main.c:2190
static WCHAR * get_user_notice_from_qualifier(const CRYPT_OBJID_BLOB *qualifier)
Definition: main.c:2230
static WCHAR * get_cps_str_from_qualifier(const CRYPT_OBJID_BLOB *qualifier)
Definition: main.c:2209
PCERT_INFO pCertInfo
Definition: wincrypt.h:491
LPSTR pszObjId
Definition: wincrypt.h:239
PCERT_EXTENSION rgExtension
Definition: wincrypt.h:261
DWORD cExtension
Definition: wincrypt.h:260
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define szOID_PKIX_POLICY_QUALIFIER_CPS
Definition: wincrypt.h:3447
#define szOID_CERT_POLICIES
Definition: wincrypt.h:3353
#define szOID_PKIX_POLICY_QUALIFIER_USERNOTICE
Definition: wincrypt.h:3448

Referenced by set_cert_info().

◆ set_policy_text()

static void set_policy_text ( HWND  text,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2150 of file main.c.

2152{
2153 BOOL includeCertUsages = FALSE, includeAppUsages = FALSE;
2154 BOOL badUsages = FALSE, anyUsageAdded = FALSE;
2155
2156 if (pCertViewInfo->cPurposes)
2157 {
2158 DWORD i;
2159
2160 for (i = 0; i < pCertViewInfo->cPurposes; i++)
2161 {
2162 if (!strcmp(pCertViewInfo->rgszPurposes[i], szOID_ANY_CERT_POLICY))
2163 includeCertUsages = TRUE;
2164 else if (!strcmp(pCertViewInfo->rgszPurposes[i],
2166 includeAppUsages = TRUE;
2167 else
2168 badUsages = TRUE;
2169 }
2170 }
2171 else
2172 includeAppUsages = includeCertUsages = TRUE;
2173 if (includeAppUsages)
2174 display_app_usages(text, pCertViewInfo->pCertContext, &anyUsageAdded);
2175 if (includeCertUsages)
2176 badUsages = display_cert_usages(text, pCertViewInfo->pCertContext,
2177 &anyUsageAdded);
2178 if (badUsages)
2179 {
2180 PARAFORMAT2 parFmt;
2181
2182 parFmt.cbSize = sizeof(parFmt);
2183 parFmt.dwMask = PFM_STARTINDENT;
2184 parFmt.dxStartIndent = MY_INDENT;
2187 }
2188}
#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:2094
static void display_app_usages(HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
Definition: main.c:2042

Referenced by set_cert_info().

◆ show_cert_chain()

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

Definition at line 3976 of file main.c.

3977{
3980 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->pCryptProviderData,
3981 data->pCertViewInfo->idxSigner, data->pCertViewInfo->fCounterSigner,
3982 data->pCertViewInfo->idxCounterSigner);
3983 DWORD i;
3985
3987 for (i = provSigner->csCertChain; i; i--)
3988 {
3989 LPWSTR name;
3990
3991 name = get_cert_display_name(provSigner->pasCertChain[i - 1].pCert);
3992 if (name)
3993 {
3994 TVINSERTSTRUCTW tvis;
3995
3996 tvis.hParent = parent;
3997 tvis.hInsertAfter = TVI_LAST;
3998 tvis.item.mask = TVIF_TEXT | TVIF_STATE | TVIF_IMAGE |
4000 tvis.item.pszText = name;
4001 tvis.item.state = TVIS_EXPANDED;
4002 tvis.item.stateMask = TVIS_EXPANDED;
4003 if (i == 1 && (!provSigner->pChainContext ||
4006 {
4007 /* The root of the chain has a special case: if the chain is
4008 * a partial chain, the icon is a warning icon rather than an
4009 * error icon.
4010 */
4011 tvis.item.iImage = 2;
4012 }
4013 else if (provSigner->pasCertChain[i - 1].pChainElement->TrustStatus.
4014 dwErrorStatus == 0)
4015 tvis.item.iImage = 0;
4016 else
4017 tvis.item.iImage = 1;
4018 tvis.item.iSelectedImage = tvis.item.iImage;
4019 tvis.item.lParam = index_to_lparam(data, i - 1);
4021 (LPARAM)&tvis);
4022 free(name);
4023 }
4024 }
4025}
static WCHAR * get_cert_display_name(PCCERT_CONTEXT cert)
Definition: main.c:3967
static LPARAM index_to_lparam(struct hierarchy_data *data, DWORD index)
Definition: main.c:3914
#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:1029
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 4267 of file main.c.

4269{
4270 static const WCHAR riched[] = { 'r','i','c','h','e','d','2','0',0 };
4271 DWORD nPages;
4272 PROPSHEETPAGEW *pages;
4273 BOOL ret = FALSE;
4274 HMODULE lib = LoadLibraryW(riched);
4275
4276 nPages = pCertViewInfo->cPropSheetPages + 1; /* one for the General tab */
4277 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_DETAILPAGE))
4278 nPages++;
4279 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_HIERARCHYPAGE))
4280 nPages++;
4281 pages = malloc(nPages * sizeof(PROPSHEETPAGEW));
4282 if (pages)
4283 {
4286 DWORD i;
4287
4288 memset(&hdr, 0, sizeof(hdr));
4289 hdr.dwSize = sizeof(hdr);
4291 hdr.hInstance = hInstance;
4292 if (pCertViewInfo->szTitle)
4293 hdr.pszCaption = pCertViewInfo->szTitle;
4294 else
4295 hdr.pszCaption = MAKEINTRESOURCEW(IDS_CERTIFICATE);
4296 init_general_page(pCertViewInfo, &pages[hdr.nPages++]);
4297 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_DETAILPAGE))
4298 {
4299 if (init_detail_page(pCertViewInfo, pfPropertiesChanged,
4300 &pages[hdr.nPages]))
4301 hdr.nPages++;
4302 }
4303 if (!(pCertViewInfo->dwFlags & CRYPTUI_HIDE_HIERARCHYPAGE))
4304 {
4305 if (init_hierarchy_page(pCertViewInfo, &pages[hdr.nPages]))
4306 hdr.nPages++;
4307 }
4308 /* Copy each additional page, and create the init dialog struct for it
4309 */
4310 if (pCertViewInfo->cPropSheetPages)
4311 {
4312 init = malloc(pCertViewInfo->cPropSheetPages * sizeof(CRYPTUI_INITDIALOG_STRUCT));
4313 if (init)
4314 {
4315 for (i = 0; i < pCertViewInfo->cPropSheetPages; i++)
4316 {
4317 memcpy(&pages[hdr.nPages + i],
4318 &pCertViewInfo->rgPropSheetPages[i],
4319 sizeof(PROPSHEETPAGEW));
4320 init[i].lParam = pCertViewInfo->rgPropSheetPages[i].lParam;
4321 init[i].pCertContext = pCertViewInfo->pCertContext;
4322 pages[hdr.nPages + i].lParam = (LPARAM)&init[i];
4323 }
4324 if (pCertViewInfo->nStartPage & 0x8000)
4325 {
4326 /* Start page index is relative to the number of default
4327 * pages
4328 */
4329 hdr.nStartPage = pCertViewInfo->nStartPage + hdr.nPages;
4330 }
4331 else
4332 hdr.nStartPage = pCertViewInfo->nStartPage;
4333 hdr.nPages = nPages;
4334 ret = TRUE;
4335 }
4336 else
4338 }
4339 else
4340 {
4341 /* Ignore the relative flag if there aren't any additional pages */
4342 hdr.nStartPage = pCertViewInfo->nStartPage & 0x7fff;
4343 ret = TRUE;
4344 }
4345 if (ret)
4346 {
4347 INT_PTR l;
4348
4349 hdr.ppsp = pages;
4350 hdr.pfnCallback = cert_prop_sheet_proc;
4351 l = PropertySheetW(&hdr);
4352 if (l == 0)
4353 {
4355 ret = FALSE;
4356 }
4357 }
4358 free(init);
4359 free(pages);
4360 }
4361 else
4363 FreeLibrary(lib);
4364 return ret;
4365}
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:2558
static int CALLBACK cert_prop_sheet_proc(HWND hwnd, UINT msg, LPARAM lp)
Definition: main.c:4245
static BOOL init_detail_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, BOOL *pfPropertiesChanged, PROPSHEETPAGEW *page)
Definition: main.c:3880
static BOOL init_hierarchy_page(PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo, PROPSHEETPAGEW *page)
Definition: main.c:4207
#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
#define ERROR_CANCELLED
Definition: winerror.h:1055
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 4058 of file main.c.

4059{
4060 /* Disable view certificate button until a certificate is selected */
4064}
static void set_certificate_status_for_end_cert(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:4044
static void show_cert_chain(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:3976

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 482 of file main.c.

483{
484 const struct CertMgrStoreInfo *storeList;
485 int cStores, i;
487
489 {
490 storeList = publisherStoreList;
492 }
493 else
494 {
495 storeList = defaultStoreList;
496 cStores = ARRAY_SIZE(defaultStoreList);
497 }
499 cStores = 1;
500 data->nStores = cStores;
501 data->stores = storeList;
502 for (i = 0; i < cStores; i++)
503 {
506 HCERTSTORE store;
507
508 if (!(name = CryptFindLocalizedName(storeList[i].name)))
509 name = storeList[i].name;
512 item.mask = TCIF_TEXT | TCIF_PARAM;
513 item.pszText = (LPWSTR)name;
514 item.lParam = (LPARAM)store;
516 }
517}
#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:456
static const struct CertMgrStoreInfo publisherStoreList[]
Definition: main.c:467
#define TCM_INSERTITEMW
Definition: commctrl.h:4052
#define TCIF_TEXT
Definition: commctrl.h:3976
LPCWSTR name
Definition: main.c:451

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 3378 of file main.c.

3379{
3380 PCCERT_CONTEXT cert = data->cert;
3383 DWORD size;
3384 RECT rc;
3386 PurposeSelection purposeSelection = PurposeEnableAll;
3387
3388 GetWindowRect(lv, &rc);
3389 column.mask = LVCF_WIDTH;
3390 column.cx = rc.right - rc.left;
3393
3394 /* Get enhanced key usage. Have to check for a property and an extension
3395 * separately, because CertGetEnhancedKeyUsage will succeed and return an
3396 * empty usage if neither is set. Unfortunately an empty usage implies
3397 * no usage is allowed, so we have to distinguish between the two cases.
3398 */
3400 NULL, &size))
3401 {
3402 usage = malloc(size);
3405 {
3406 free(usage);
3407 usage = NULL;
3408 }
3409 else if (usage->cUsageIdentifier)
3410 purposeSelection = PurposeEnableSelected;
3411 else
3412 purposeSelection = PurposeDisableAll;
3413 }
3415 NULL, &size))
3416 {
3417 usage = malloc(size);
3420 {
3421 free(usage);
3422 usage = NULL;
3423 }
3424 else if (usage->cUsageIdentifier)
3425 purposeSelection = PurposeEnableAll;
3426 else
3427 purposeSelection = PurposeDisableAll;
3428 }
3429 else
3430 {
3431 purposeSelection = PurposeEnableAll;
3432 usage = NULL;
3433 }
3434 if (usage)
3435 {
3436 DWORD i;
3437
3438 for (i = 0; i < usage->cUsageIdentifier; i++)
3439 {
3441 usage->rgpszUsageIdentifier[i], CRYPT_ENHKEY_USAGE_OID_GROUP_ID);
3442
3443 if (info)
3445 else
3446 add_purpose(hwnd, usage->rgpszUsageIdentifier[i]);
3447 }
3448 free(usage);
3449 }
3450 else
3452 select_purposes(hwnd, purposeSelection);
3454 BM_CLICK, 0, 0);
3455}

Referenced by set_general_cert_properties().

◆ show_dialog_for_selected_cert()

static void show_dialog_for_selected_cert ( HWND  hwnd)
static

Definition at line 4066 of file main.c.

4067{
4069 TVITEMW item;
4070 struct hierarchy_data *data;
4072
4073 memset(&item, 0, sizeof(item));
4074 item.mask = TVIF_HANDLE | TVIF_PARAM;
4079 if (selection != 0)
4080 {
4081 CRYPT_PROVIDER_SGNR *provSigner;
4083 BOOL changed = FALSE;
4084
4085 provSigner = WTHelperGetProvSignerFromChain(
4086 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->pCryptProviderData,
4087 data->pCertViewInfo->idxSigner,
4088 data->pCertViewInfo->fCounterSigner,
4089 data->pCertViewInfo->idxCounterSigner);
4090 memset(&viewInfo, 0, sizeof(viewInfo));
4091 viewInfo.dwSize = sizeof(viewInfo);
4092 viewInfo.dwFlags = data->pCertViewInfo->dwFlags;
4093 viewInfo.szTitle = data->pCertViewInfo->szTitle;
4094 viewInfo.pCertContext = provSigner->pasCertChain[selection].pCert;
4095 viewInfo.cStores = data->pCertViewInfo->cStores;
4096 viewInfo.rghStores = data->pCertViewInfo->rghStores;
4097 viewInfo.cPropSheetPages = data->pCertViewInfo->cPropSheetPages;
4098 viewInfo.rgPropSheetPages = data->pCertViewInfo->rgPropSheetPages;
4099 viewInfo.nStartPage = data->pCertViewInfo->nStartPage;
4100 CryptUIDlgViewCertificateW(&viewInfo, &changed);
4101 if (changed)
4102 {
4103 /* Delete the contents of the tree */
4105 /* Reinitialize the tree */
4107 }
4108 }
4109}

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 3705 of file main.c.

3707{
3709 PROPSHEETPAGEW page; /* FIXME: need to add a cross-certificate page */
3710
3711 TRACE("(%p)\n", data);
3712
3713 memset(&page, 0, sizeof(PROPSHEETPAGEW));
3714 page.dwSize = sizeof(page);
3715 page.dwFlags = PSP_USECALLBACK;
3717 page.hInstance = hInstance;
3720 page.lParam = (LPARAM)data;
3721
3722 memset(&hdr, 0, sizeof(hdr));
3723 hdr.dwSize = sizeof(hdr);
3724 hdr.hwndParent = parent;
3725 hdr.dwFlags = PSH_PROPSHEETPAGE;
3726 hdr.hInstance = hInstance;
3728 hdr.ppsp = &page;
3729 hdr.nPages = 1;
3731}
#define IDD_CERT_PROPERTIES_GENERAL
Definition: cryptuires.h:187
static INT_PTR CALLBACK cert_properties_general_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3562
static UINT CALLBACK cert_properties_general_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:3662

Referenced by detail_dlg_proc().

◆ show_export_details()

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

Definition at line 6310 of file main.c.

6311{
6313 LVITEMW item;
6314 int contentID;
6315
6316 item.mask = LVIF_TEXT;
6317 if (data->fileName)
6318 {
6319 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6320 item.iSubItem = 0;
6322 item.pszText = text;
6324 item.iSubItem = 1;
6325 item.pszText = data->fileName;
6327 }
6328
6329 item.pszText = text;
6330 switch (data->exportInfo.dwSubjectChoice)
6331 {
6336 /* do nothing */
6337 break;
6338 default:
6339 {
6340 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6341 item.iSubItem = 0;
6344 item.iSubItem = 1;
6345 LoadStringW(hInstance, data->contextInfo.fExportChain ? IDS_YES : IDS_NO, text,
6346 ARRAY_SIZE(text));
6348
6349 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6350 item.iSubItem = 0;
6353 item.iSubItem = 1;
6354 LoadStringW(hInstance, data->contextInfo.fExportPrivateKeys ? IDS_YES : IDS_NO, text,
6355 ARRAY_SIZE(text));
6357 }
6358 }
6359
6360 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6361 item.iSubItem = 0;
6364
6365 item.iSubItem = 1;
6366 switch (data->exportInfo.dwSubjectChoice)
6367 {
6369 contentID = IDS_EXPORT_FILTER_CRL;
6370 break;
6372 contentID = IDS_EXPORT_FILTER_CTL;
6373 break;
6376 break;
6377 default:
6378 switch (data->contextInfo.dwExportFormat)
6379 {
6382 break;
6384 contentID = IDS_EXPORT_FILTER_CMS;
6385 break;
6387 contentID = IDS_EXPORT_FILTER_PFX;
6388 break;
6389 default:
6390 contentID = IDS_EXPORT_FILTER_CERT;
6391 }
6392 }
6393 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
6395}
#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 6779 of file main.c.

6781{
6783 PROPSHEETPAGEW pages[6];
6784 struct ExportWizData data;
6785 int nPages = 0;
6786 BOOL hasPrivateKey, showFormatPage = TRUE;
6787 INT_PTR l;
6788
6789 data.dwFlags = dwFlags;
6790 data.pwszWizardTitle = pwszWizardTitle;
6791 memset(&data.exportInfo, 0, sizeof(data.exportInfo));
6792 memcpy(&data.exportInfo, pExportInfo,
6793 min(sizeof(data.exportInfo), pExportInfo->dwSize));
6794 if (pExportInfo->dwSize > sizeof(data.exportInfo))
6795 data.exportInfo.dwSize = sizeof(data.exportInfo);
6796 data.contextInfo.dwSize = sizeof(data.contextInfo);
6797 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6798 data.contextInfo.fExportChain = FALSE;
6799 data.contextInfo.fStrongEncryption = FALSE;
6800 data.contextInfo.fExportPrivateKeys = FALSE;
6801 data.contextInfo.pwszPassword = NULL;
6802 data.freePassword = FALSE;
6804 pvoid)
6805 memcpy(&data.contextInfo, pvoid,
6807 sizeof(data.contextInfo)));
6808 data.keyProvInfo = NULL;
6809 data.deleteKeys = FALSE;
6810 data.fileName = NULL;
6812 data.success = FALSE;
6813
6814 memset(pages, 0, sizeof(pages));
6815
6816 pages[nPages].dwSize = sizeof(pages[0]);
6817 pages[nPages].hInstance = hInstance;
6819 pages[nPages].pfnDlgProc = export_welcome_dlg_proc;
6820 pages[nPages].dwFlags = PSP_HIDEHEADER;
6821 pages[nPages].lParam = (LPARAM)&data;
6822 nPages++;
6823
6824 hasPrivateKey = export_info_has_private_key(pExportInfo);
6825 switch (pExportInfo->dwSubjectChoice)
6826 {
6829 showFormatPage = FALSE;
6830 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6831 break;
6833 showFormatPage = FALSE;
6834 data.contextInfo.dwExportFormat =
6836 break;
6838 showFormatPage = FALSE;
6839 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7;
6840 break;
6841 }
6842
6843 if (hasPrivateKey && showFormatPage)
6844 {
6845 pages[nPages].dwSize = sizeof(pages[0]);
6846 pages[nPages].hInstance = hInstance;
6849 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6850 pages[nPages].pszHeaderTitle =
6852 pages[nPages].pszHeaderSubTitle =
6854 pages[nPages].lParam = (LPARAM)&data;
6855 nPages++;
6856 }
6857 if (showFormatPage)
6858 {
6859 pages[nPages].dwSize = sizeof(pages[0]);
6860 pages[nPages].hInstance = hInstance;
6862 pages[nPages].pfnDlgProc = export_format_dlg_proc;
6863 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6864 pages[nPages].pszHeaderTitle =
6866 pages[nPages].pszHeaderSubTitle =
6868 pages[nPages].lParam = (LPARAM)&data;
6869 nPages++;
6870 }
6871 if (hasPrivateKey && showFormatPage)
6872 {
6873 pages[nPages].dwSize = sizeof(pages[0]);
6874 pages[nPages].hInstance = hInstance;
6876 pages[nPages].pfnDlgProc = export_password_dlg_proc;
6877 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6878 pages[nPages].pszHeaderTitle =
6880 pages[nPages].pszHeaderSubTitle =
6882 pages[nPages].lParam = (LPARAM)&data;
6883 nPages++;
6884 }
6885
6886 pages[nPages].dwSize = sizeof(pages[0]);
6887 pages[nPages].hInstance = hInstance;
6889 pages[nPages].pfnDlgProc = export_file_dlg_proc;
6890 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6891 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_EXPORT_FILE_TITLE);
6892 pages[nPages].pszHeaderSubTitle =
6894 pages[nPages].lParam = (LPARAM)&data;
6895 nPages++;
6896
6897 pages[nPages].dwSize = sizeof(pages[0]);
6898 pages[nPages].hInstance = hInstance;
6900 pages[nPages].pfnDlgProc = export_finish_dlg_proc;
6901 pages[nPages].dwFlags = PSP_HIDEHEADER;
6902 pages[nPages].lParam = (LPARAM)&data;
6903 nPages++;
6904
6905 memset(&hdr, 0, sizeof(hdr));
6906 hdr.dwSize = sizeof(hdr);
6907 hdr.hwndParent = hwndParent;
6908 hdr.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD97_NEW | PSH_HEADER |
6909 PSH_WATERMARK;
6910 hdr.hInstance = hInstance;
6911 if (pwszWizardTitle)
6912 hdr.pszCaption = pwszWizardTitle;
6913 else
6915 hdr.ppsp = pages;
6916 hdr.nPages = nPages;
6917 hdr.pszbmWatermark = MAKEINTRESOURCEW(IDB_CERT_WATERMARK);
6918 hdr.pszbmHeader = MAKEINTRESOURCEW(IDB_CERT_HEADER);
6919 l = PropertySheetW(&hdr);
6920 DeleteObject(data.titleFont);
6921 if (data.freePassword)
6922 free((WCHAR *)data.contextInfo.pwszPassword);
6923 free(data.keyProvInfo);
6924 CloseHandle(data.file);
6925 free(data.fileName);
6926 if (l == 0)
6927 {
6929 return FALSE;
6930 }
6931 else
6932 return data.success;
6933}
#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:5734
static INT_PTR CALLBACK export_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6697
static INT_PTR CALLBACK export_private_key_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5657
static INT_PTR CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6194
static INT_PTR CALLBACK export_password_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5910
static INT_PTR CALLBACK export_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5557
static INT_PTR CALLBACK export_format_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5787
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 5220 of file main.c.

5221{
5223 LVITEMW item;
5224 int contentID;
5225
5226 item.mask = LVIF_TEXT;
5227 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5228 item.iSubItem = 0;
5230 item.pszText = text;
5232 item.iSubItem = 1;
5233 if (data->autoDest)
5235 else
5238 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5239 item.iSubItem = 0;
5242 switch (data->contentType)
5243 {
5246 contentID = IDS_IMPORT_CONTENT_CERT;
5247 break;
5250 contentID = IDS_IMPORT_CONTENT_CRL;
5251 break;
5254 contentID = IDS_IMPORT_CONTENT_CTL;
5255 break;
5257 contentID = IDS_IMPORT_CONTENT_CMS;
5258 break;
5260 contentID = IDS_IMPORT_CONTENT_PFX;
5261 break;
5262 default:
5263 contentID = IDS_IMPORT_CONTENT_STORE;
5264 break;
5265 }
5266 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
5267 item.iSubItem = 1;
5269 if (data->fileName)
5270 {
5271 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5272 item.iSubItem = 0;
5275 item.iSubItem = 1;
5276 item.pszText = data->fileName;
5278 }
5279}
#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:3696

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 5398 of file main.c.

5401{
5403 PROPSHEETPAGEW pages[4];
5404 struct ImportWizData data;
5405 int nPages = 0;
5406
5408 data.pwszWizardTitle = pwszWizardTitle;
5409 if (pImportSrc)
5410 {
5411 memcpy(&data.importSrc, pImportSrc, sizeof(data.importSrc));
5412 data.fileName = (LPWSTR)pImportSrc->pwszFileName;
5413 }
5414 else
5415 {
5416 memset(&data.importSrc, 0, sizeof(data.importSrc));
5417 data.fileName = NULL;
5418 }
5419 data.freeSource = FALSE;
5420 data.hDestCertStore = hDestCertStore;
5421 data.freeDest = FALSE;
5422 data.autoDest = TRUE;
5423 data.success = TRUE;
5424
5425 memset(pages, 0, sizeof(pages));
5426
5427 pages[nPages].dwSize = sizeof(pages[0]);
5428 pages[nPages].hInstance = hInstance;
5430 pages[nPages].pfnDlgProc = import_welcome_dlg_proc;
5431 pages[nPages].dwFlags = PSP_HIDEHEADER;
5432 pages[nPages].lParam = (LPARAM)&data;
5433 nPages++;
5434
5435 if (!pImportSrc ||
5436 pImportSrc->dwSubjectChoice == CRYPTUI_WIZ_IMPORT_SUBJECT_FILE)
5437 {
5438 pages[nPages].dwSize = sizeof(pages[0]);
5439 pages[nPages].hInstance = hInstance;
5441 pages[nPages].pfnDlgProc = import_file_dlg_proc;
5442 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
5443 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_IMPORT_FILE_TITLE);
5444 pages[nPages].pszHeaderSubTitle =
5446 pages[nPages].lParam = (LPARAM)&data;
5447 nPages++;
5448 }
5449 else
5450 {
5451 switch (pImportSrc->dwSubjectChoice)
5452 {
5454 data.contentType = CERT_QUERY_CONTENT_CERT;
5455 break;
5457 data.contentType = CERT_QUERY_CONTENT_CRL;
5458 break;
5460 data.contentType = CERT_QUERY_CONTENT_CTL;
5461 break;
5464 break;
5465 }
5466 }
5467
5468 pages[nPages].dwSize = sizeof(pages[0]);
5469 pages[nPages].hInstance = hInstance;
5471 pages[nPages].pfnDlgProc = import_store_dlg_proc;
5472 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
5473 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_IMPORT_STORE_TITLE);
5474 pages[nPages].pszHeaderSubTitle =
5476 pages[nPages].lParam = (LPARAM)&data;
5477 nPages++;
5478
5479 pages[nPages].dwSize = sizeof(pages[0]);
5480 pages[nPages].hInstance = hInstance;
5482 pages[nPages].pfnDlgProc = import_finish_dlg_proc;
5483 pages[nPages].dwFlags = PSP_HIDEHEADER;
5484 pages[nPages].lParam = (LPARAM)&data;
5485 nPages++;
5486
5487 memset(&hdr, 0, sizeof(hdr));
5488 hdr.dwSize = sizeof(hdr);
5489 hdr.hwndParent = hwndParent;
5490 hdr.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD97_NEW | PSH_HEADER |
5491 PSH_WATERMARK;
5492 hdr.hInstance = hInstance;
5493 if (pwszWizardTitle)
5494 hdr.pszCaption = pwszWizardTitle;
5495 else
5497 hdr.ppsp = pages;
5498 hdr.nPages = nPages;
5499 hdr.pszbmWatermark = MAKEINTRESOURCEW(IDB_CERT_WATERMARK);
5500 hdr.pszbmHeader = MAKEINTRESOURCEW(IDB_CERT_HEADER);
5502 if (data.fileName != data.importSrc.pwszFileName)
5503 free(data.fileName);
5504 if (data.freeSource &&
5505 data.importSrc.dwSubjectChoice == CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE)
5506 CertCloseStore(data.importSrc.hCertStore, 0);
5507 DeleteObject(data.titleFont);
5508 return data.success;
5509}
#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 INT_PTR CALLBACK import_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5005
static INT_PTR CALLBACK import_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:4826
static INT_PTR CALLBACK import_store_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5105
static INT_PTR CALLBACK import_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5322
DWORD dwFlags
Definition: main.c:4814
#define CERT_QUERY_CONTENT_SERIALIZED_STORE
Definition: wincrypt.h:3692

Referenced by CryptUIWizImport().

◆ show_selected_cert()

static void show_selected_cert ( HWND  hwnd,
int  index 
)
static

Definition at line 819 of file main.c.

820{
822
823 if (cert)
824 {
826
827 memset(&viewInfo, 0, sizeof(viewInfo));
828 viewInfo.dwSize = sizeof(viewInfo);
829 viewInfo.hwndParent = hwnd;
830 viewInfo.pCertContext = cert;
831 /* FIXME: this should be modal */
833 }
834}

Referenced by cert_mgr_dlg_proc().

◆ show_store_certs()

static void show_store_certs ( HWND  hwnd,
HCERTSTORE  store 
)
static

Definition at line 341 of file main.c.

342{
346 DWORD allocatedLen = 0;
347 LPWSTR str = NULL;
348 int index;
350 LPCSTR oid = NULL;
351 CERT_ENHKEY_USAGE *advanced = NULL;
352
354 if (index >= 0)
355 {
357
358 if (!HIWORD(data))
359 filter = data;
360 else
361 {
363
365 oid = info->pszOID;
366 }
367 }
369 advanced = create_advanced_filter();
370 do {
372 if (cert)
373 {
374 BOOL show = FALSE;
375
377 show = TRUE;
378 else
379 {
380 int numOIDs;
381 DWORD cbOIDs = 0;
382
383 if (CertGetValidUsages(1, &cert, &numOIDs, NULL, &cbOIDs))
384 {
385 if (numOIDs == -1)
386 {
387 /* -1 implies all usages are valid */
388 show = TRUE;
389 }
390 else
391 {
392 char **oids = malloc(cbOIDs);
393
394 if (oids)
395 {
396 if (CertGetValidUsages(1, &cert, &numOIDs, oids,
397 &cbOIDs))
398 {
399 int i;
400
402 {
403 for (i = 0; !show && i < numOIDs; i++)
404 if (!strcmp(oids[i], oid))
405 show = TRUE;
406 }
407 else
408 {
409 for (i = 0; !show && i < numOIDs; i++)
410 {
411 DWORD j;
412
413 for (j = 0; !show &&
414 j < advanced->cUsageIdentifier; j++)
415 if (!strcmp(oids[i],
416 advanced->rgpszUsageIdentifier[j]))
417 show = TRUE;
418 }
419 }
420 }
421 free(oids);
422 }
423 }
424 }
425 }
426 if (show)
427 add_cert_to_view(lv, cert, &allocatedLen, &str);
428 }
429 } while (cert);
430 free(str);
431 if (advanced)
432 {
433 free(advanced->rgpszUsageIdentifier);
434 free(advanced);
435 }
438}
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:95
static CERT_ENHKEY_USAGE * create_advanced_filter(void)
Definition: main.c:290
const CRYPT_OID_INFO * PCCRYPT_OID_INFO
Definition: wincrypt.h:1632

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 2480 of file main.c.

2481{
2483 user_notice_dlg_proc, (LPARAM)issuerStatement);
2484}
#define IDD_USERNOTICE
Definition: cryptuires.h:186
static INT_PTR CALLBACK user_notice_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:2437

Referenced by general_dlg_proc().

◆ strdupAtoW()

static WCHAR * strdupAtoW ( const char str)
static

Definition at line 61 of file main.c.

62{
63 DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
64 WCHAR *ret = malloc( len * sizeof(WCHAR) );
65 if (ret) MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
66 return ret;
67}

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 603 of file main.c.

604{
606 int res;
608
609 item.mask = LVIF_STATE;
610 item.iItem = iItem;
611 item.iSubItem = 0;
612 item.stateMask = LVIS_STATEIMAGEMASK;
614 if (res)
615 {
616 int state = item.state >> 12;
617
622 }
623}

Referenced by cert_mgr_advanced_dlg_proc(), and cert_properties_general_dlg_proc().

◆ user_notice_dlg_proc()

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

Definition at line 2437 of file main.c.

2439{
2440 INT_PTR ret = 0;
2441 HWND text;
2442 struct IssuerStatement *issuerStatement;
2443
2444 switch (msg)
2445 {
2446 case WM_INITDIALOG:
2448 issuerStatement = (struct IssuerStatement *)lp;
2450 lstrlenW(issuerStatement->userNotice));
2451 if (issuerStatement->cps)
2452 SetWindowLongPtrW(hwnd, DWLP_USER, (LPARAM)issuerStatement->cps);
2453 else
2455 break;
2456 case WM_COMMAND:
2457 switch (wp)
2458 {
2459 case IDOK:
2461 ret = TRUE;
2462 break;
2463 case IDC_CPS:
2464 {
2465 IBindCtx *bctx = NULL;
2466 LPWSTR cps;
2467
2468 CreateBindCtx(0, &bctx);
2471 HLNF_OPENINNEWWINDOW, 0);
2472 IBindCtx_Release(bctx);
2473 break;
2474 }
2475 }
2476 }
2477 return ret;
2478}
#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 879 of file wintrust_main.c.

880{
881 BOOL ret;
882
883 TRACE("(%ld, %p)\n", action, usages);
884
885 if (!usages)
886 {
888 return FALSE;
889 }
890
891 if (action == 1)
892 {
893 *usages = NULL;
896 }
897 else if (action == 2)
898 {
899 free(*usages);
900 *usages = NULL;
901 ret = TRUE;
902 }
903 else
904 {
905 WARN("unknown action %ld\n", action);
907 ret = FALSE;
908 }
909 return ret;
910}
BOOL WINAPI CryptEnumOIDInfo(DWORD dwGroupId, DWORD dwFlags, void *pvArg, PFN_CRYPT_ENUM_OID_INFO pfnEnumOIDInfo)
Definition: oid.c:1776
action
Definition: namespace.c:707
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 441 of file main.c.

Referenced by choose_store_for_cert(), and test_crypt_ui_wiz_import().

◆ allowFlags

DWORD allowFlags

Definition at line 4883 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:440
static const WCHAR disallowed[]
Definition: main.c:447
static const WCHAR trustedPublisher[]
Definition: main.c:445

Definition at line 456 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 447 of file main.c.

Referenced by CRYPTDLG_IsCertAllowed(), and SoftpubAuthenticode().

◆ empty

const WCHAR empty[] = {0}
static

Definition at line 45 of file main.c.

Referenced by cert_mgr_clear_cert_selection(), and cert_mgr_dlg_proc().

◆ export_filter_cert

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

Definition at line 6121 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 6124 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 6122 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 6123 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 6125 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 6126 of file main.c.

Referenced by make_export_file_filter().

◆ filter

◆ filter_all

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

Definition at line 4878 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 4869 of file main.c.

◆ filter_cms

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

Definition at line 4876 of file main.c.

◆ filter_crl

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

Definition at line 4873 of file main.c.

◆ filter_ctl

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

Definition at line 4874 of file main.c.

◆ filter_pfx

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

Definition at line 4871 of file main.c.

◆ filter_serialized_store

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

Definition at line 4875 of file main.c.

◆ hInstance

HINSTANCE hInstance
static

Definition at line 43 of file main.c.

◆ id

◆ 

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:4873
static const WCHAR filter_cms[]
Definition: main.c:4876
static const WCHAR filter_serialized_store[]
Definition: main.c:4875
static const WCHAR filter_cert[]
Definition: main.c:4869
static const WCHAR filter_pfx[]
Definition: main.c:4871
static const WCHAR filter_ctl[]
Definition: main.c:4874

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:2962
static void add_all_fields(HWND hwnd, struct detail_data *data)
Definition: main.c:3046

Definition at line 3059 of file main.c.

Referenced by create_show_list(), and set_fields_selection().

◆ my

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

Definition at line 440 of file main.c.

◆ oidMap

struct OIDToString oidMap[]
static

Definition at line 1896 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:2983
#define CERT_ENHKEY_USAGE_PROP_ID
Definition: wincrypt.h:2841
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2835

Definition at line 2997 of file main.c.

Referenced by add_properties().

◆ publisherStoreList

◆ root

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

Definition at line 444 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 445 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:2627
static WCHAR * field_format_subject(PCCERT_CONTEXT cert)
Definition: main.c:2632
static WCHAR * field_format_public_key(PCCERT_CONTEXT cert)
Definition: main.c:2673
static WCHAR * field_format_to_date(PCCERT_CONTEXT cert)
Definition: main.c:2668
static WCHAR * field_format_from_date(PCCERT_CONTEXT cert)
Definition: main.c:2663
static WCHAR * field_format_serial_number(PCCERT_CONTEXT cert)
Definition: main.c:2599
static WCHAR * field_format_detailed_public_key(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2714
static WCHAR * field_format_detailed_subject(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2637
static WCHAR * field_format_issuer(PCCERT_CONTEXT cert)
Definition: main.c:2605
static WCHAR * field_format_version(PCCERT_CONTEXT cert)
Definition: main.c:2573

Definition at line 2804 of file main.c.

Referenced by add_v1_fields().