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

Go to the source code of this file.

Classes

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

Macros

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

Typedefs

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

Enumerations

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

Functions

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

Variables

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

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file main.c.

◆ CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE

#define CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE   0x00000001

Definition at line 1345 of file main.c.

◆ MAX_DESCRIPTION

#define MAX_DESCRIPTION   255

Definition at line 3534 of file main.c.

◆ MAX_FRIENDLY_NAME

#define MAX_FRIENDLY_NAME   40

Definition at line 3533 of file main.c.

◆ MAX_PURPOSE

#define MAX_PURPOSE   255

Definition at line 3225 of file main.c.

◆ MAX_STRING_LEN

#define MAX_STRING_LEN   512

Definition at line 73 of file main.c.

◆ MY_INDENT

#define MY_INDENT   200

Definition at line 1889 of file main.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 23 of file main.c.

◆ WM_REFRESH_VIEW

#define WM_REFRESH_VIEW   WM_USER + 0

Definition at line 3524 of file main.c.

Typedef Documentation

◆ add_fields_func

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

Definition at line 2754 of file main.c.

◆ create_detailed_value_func

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

Definition at line 2756 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 2595 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 1341 of file main.c.

◆ prop_to_value_func

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

Definition at line 3003 of file main.c.

Enumeration Type Documentation

◆ CheckBitmapIndex

Enumerator
CheckBitmapIndexUnchecked 
CheckBitmapIndexChecked 
CheckBitmapIndexDisabledUnchecked 
CheckBitmapIndexDisabledChecked 

Definition at line 579 of file main.c.

579 {
CheckBitmapIndex
Definition: main.c:579
@ CheckBitmapIndexChecked
Definition: main.c:581
@ CheckBitmapIndexUnchecked
Definition: main.c:580
@ CheckBitmapIndexDisabledUnchecked
Definition: main.c:582
@ CheckBitmapIndexDisabledChecked
Definition: main.c:583

◆ PurposeFilter

Enumerator
PurposeFilterShowAll 
PurposeFilterShowAdvanced 
PurposeFilterShowOID 

Definition at line 214 of file main.c.

214 {
PurposeFilter
Definition: main.c:214
@ PurposeFilterShowAdvanced
Definition: main.c:216
@ PurposeFilterShowAll
Definition: main.c:215
@ PurposeFilterShowOID
Definition: main.c:217

◆ PurposeSelection

Enumerator
PurposeEnableAll 
PurposeDisableAll 
PurposeEnableSelected 

Definition at line 3378 of file main.c.

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

Function Documentation

◆ add_all_extensions()

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

Definition at line 2983 of file main.c.

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

Referenced by add_all_fields().

◆ add_all_fields()

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

Definition at line 3076 of file main.c.

3077{
3081}
static void add_v1_fields(HWND hwnd, struct detail_data *data)
Definition: main.c:2844
static void add_properties(HWND hwnd, struct detail_data *data)
Definition: main.c:3035
static void add_all_extensions(HWND hwnd, struct detail_data *data)
Definition: main.c:2983

◆ add_cert_columns()

static void add_cert_columns ( HWND  hwnd)
static

Definition at line 75 of file main.c.

76{
78 RECT rc;
81
83 GetWindowRect(lv, &rc);
86 column.cx = (rc.right - rc.left) * 29 / 100 - 2;
87 column.pszText = buf;
91 column.cx = (rc.right - rc.left) * 16 / 100 - 2;
94 column.cx = (rc.right - rc.left) * 23 / 100 - 1;
97}
#define MAX_STRING_LEN
Definition: precomp.h:36
#define ARRAY_SIZE(A)
Definition: main.h:33
HINSTANCE hInstance
Definition: charmap.c:19
#define IDS_EXPIRATION_COLUMN
Definition: cryptuires.h:102
#define IDS_FRIENDLY_NAME_COLUMN
Definition: cryptuires.h:103
#define IDS_SUBJECT_COLUMN
Definition: cryptuires.h:100
#define IDC_MGR_CERTS
Definition: cryptuires.h:258
#define IDS_ISSUER_COLUMN
Definition: cryptuires.h:101
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define LVCF_WIDTH
Definition: commctrl.h:2587
#define LVS_EX_FULLROWSELECT
Definition: commctrl.h:2734
#define LVM_INSERTCOLUMNW
Definition: commctrl.h:2632
#define LVCF_TEXT
Definition: commctrl.h:2588
#define LVM_SETEXTENDEDLISTVIEWSTYLE
Definition: commctrl.h:2724
LONG right
Definition: windef.h:308
LONG left
Definition: windef.h:306
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by cert_mgr_dlg_proc().

◆ add_cert_extension_detail()

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

Definition at line 2954 of file main.c.

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

Referenced by add_all_extensions(), and add_critical_extensions().

◆ add_cert_string_to_control()

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

Definition at line 1792 of file main.c.

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

Referenced by set_cert_name_string().

◆ add_cert_to_list()

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

Definition at line 7064 of file main.c.

7066{
7067 DWORD len;
7068 LVITEMW item;
7069 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
7070 WCHAR buf[80];
7071 SYSTEMTIME sysTime;
7072 LPWSTR none, usages;
7073
7075 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
7076 item.iSubItem = 0;
7077 item.iImage = 0;
7079 if (!item.iItem)
7080 {
7081 item.mask |= LVIF_STATE;
7082 item.state = LVIS_SELECTED;
7083 item.stateMask = -1;
7084 }
7086 {
7088 if (len > *allocatedLen)
7089 {
7090 HeapFree(GetProcessHeap(), 0, *str);
7091 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7092 if (*str)
7093 *allocatedLen = len;
7094 }
7095 if (*str)
7096 {
7098 item.pszText = *str;
7100 }
7101 item.mask = LVIF_TEXT;
7102 ++item.iSubItem;
7103 }
7105 {
7107 NULL, 0);
7108 if (len > *allocatedLen)
7109 {
7110 HeapFree(GetProcessHeap(), 0, *str);
7111 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7112 if (*str)
7113 *allocatedLen = len;
7114 }
7115 if (*str)
7116 {
7118 *str, len);
7119 item.pszText = *str;
7120 if (!item.iSubItem)
7122 else
7124 }
7125 item.mask = LVIF_TEXT;
7126 ++item.iSubItem;
7127 }
7129 {
7131 if (usages)
7132 {
7133 item.pszText = usages;
7134 if (!item.iSubItem)
7136 else
7139 }
7140 item.mask = LVIF_TEXT;
7141 ++item.iSubItem;
7142 }
7144 {
7147 if (len > *allocatedLen)
7148 {
7149 HeapFree(GetProcessHeap(), 0, *str);
7150 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
7151 if (*str)
7152 *allocatedLen = len;
7153 }
7154 if (*str)
7155 {
7157 item.pszText = none;
7158 else
7159 item.pszText = *str;
7160 if (!item.iSubItem)
7162 else
7164 }
7165 item.mask = LVIF_TEXT;
7166 ++item.iSubItem;
7167 }
7169 {
7171 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
7172 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, buf, ARRAY_SIZE(buf));
7173 item.pszText = buf;
7174 if (!item.iSubItem)
7176 else
7178 item.mask = LVIF_TEXT;
7179 ++item.iSubItem;
7180 }
7182 {
7183 static int show_fixme;
7184 if (!show_fixme++)
7185 FIXME("showing location is not implemented\n");
7187 if (!item.iSubItem)
7189 else
7191 }
7192}
#define FIXME(fmt,...)
Definition: debug.h:111
#define CRYPTUI_SELECT_ISSUEDTO_COLUMN
Definition: cryptuiapi.h:35
#define CRYPTUI_SELECT_ISSUEDBY_COLUMN
Definition: cryptuiapi.h:36
#define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN
Definition: cryptuiapi.h:38
#define CRYPTUI_SELECT_EXPIRATION_COLUMN
Definition: cryptuiapi.h:40
#define CRYPTUI_SELECT_LOCATION_COLUMN
Definition: cryptuiapi.h:39
#define CRYPTUI_SELECT_INTENDEDUSE_COLUMN
Definition: cryptuiapi.h:37
#define IDS_FRIENDLY_NAME_NONE
Definition: cryptuires.h:119
#define IDS_NO_IMPL
Definition: cryptuires.h:181
#define NULL
Definition: types.h:112
BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData)
Definition: cert.c:551
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:360
DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, void *pvTypePara, LPWSTR pszNameString, DWORD cchNameString)
Definition: str.c:1228
static void get_cert_usages(PCCERT_CONTEXT cert, LPWSTR *str)
Definition: main.c:850
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
GLbitfield flags
Definition: glext.h:7161
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: lang.c:1108
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
static ATOM item
Definition: dde.c:856
static PCCRYPT_OID_INFO ** usages
Definition: softpub.c:81
#define LOCALE_SYSTEM_DEFAULT
#define LVM_SETITEMTEXTW
Definition: commctrl.h:2687
#define LVM_GETITEMCOUNT
Definition: commctrl.h:2306
#define LVIF_STATE
Definition: commctrl.h:2312
#define LVIS_SELECTED
Definition: commctrl.h:2319
#define LVIF_PARAM
Definition: commctrl.h:2311
#define LVIF_TEXT
Definition: commctrl.h:2309
#define LVIF_IMAGE
Definition: commctrl.h:2310
#define LVM_INSERTITEMW
Definition: commctrl.h:2404
const WCHAR * str
#define CERT_NAME_SIMPLE_DISPLAY_TYPE
Definition: wincrypt.h:3500
#define CERT_FRIENDLY_NAME_PROP_ID
Definition: wincrypt.h:2697
#define CERT_NAME_ISSUER_FLAG
Definition: wincrypt.h:3506
#define LOCALE_SSHORTDATE
Definition: winnls.h:60

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

101{
102 DWORD len;
104 WCHAR dateFmt[80]; /* sufficient for LOCALE_SSHORTDATE */
105 WCHAR date[80];
106 SYSTEMTIME sysTime;
107 LPWSTR none;
108
110 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
111 item.iSubItem = 0;
112 item.iImage = 0;
115 NULL, 0);
116 if (len > *allocatedLen)
117 {
119 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
120 if (*str)
121 *allocatedLen = len;
122 }
123 if (*str)
124 {
126 *str, len);
127 item.pszText = *str;
129 }
130
131 item.mask = LVIF_TEXT;
134 if (len > *allocatedLen)
135 {
137 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
138 if (*str)
139 *allocatedLen = len;
140 }
141 if (*str)
142 {
145 item.pszText = *str;
146 item.iSubItem = 1;
148 }
149
151 FileTimeToSystemTime(&cert->pCertInfo->NotAfter, &sysTime);
152 GetDateFormatW(LOCALE_SYSTEM_DEFAULT, 0, &sysTime, dateFmt, date, ARRAY_SIZE(date));
153 item.pszText = date;
154 item.iSubItem = 2;
156
158 NULL, &len))
160 if (len > *allocatedLen)
161 {
163 *str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
164 if (*str)
165 *allocatedLen = len;
166 }
167 if (*str)
168 {
170 *str, &len))
171 item.pszText = none;
172 else
173 item.pszText = *str;
174 item.iSubItem = 3;
176 }
177}
__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 2992 of file main.c.

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

◆ add_date_string_to_control()

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

Definition at line 2409 of file main.c.

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

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

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

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

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

Referenced by add_field_and_value_to_list().

◆ add_icon_to_control()

static void add_icon_to_control ( HWND  hwnd,
int  id 
)
static

Definition at line 1807 of file main.c.

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

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

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

602{
604
606 {
608
609 for (ptr = usages; *ptr; ptr++)
612 }
613}
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:586
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 1991 of file main.c.

1992{
1993 struct OIDToString *entry;
1994 WCHAR nl = '\n';
1995 PARAFORMAT2 parFmt;
1996
1997 parFmt.cbSize = sizeof(parFmt);
1998 parFmt.dwMask = PFM_STARTINDENT;
1999 parFmt.dxStartIndent = MY_INDENT * 3;
2000 if ((entry = findSupportedOID(oid)))
2001 {
2002 WCHAR *str, *linebreak, *ptr;
2003 BOOL multiline = FALSE;
2004 int len;
2005
2006 len = LoadStringW(hInstance, entry->id, (LPWSTR)&str, 0);
2007 ptr = str;
2008 do {
2009 if ((linebreak = wmemchr(ptr, '\n', len)))
2010 {
2012
2013 multiline = TRUE;
2014 /* The source string contains a newline, which the richedit
2015 * control won't find since it's interpreted as a paragraph
2016 * break. Therefore copy up to the newline. lstrcpynW always
2017 * NULL-terminates, so pass one more than the length of the
2018 * source line so the copy includes the entire line and the
2019 * NULL-terminator.
2020 */
2021 lstrcpynW(copy, ptr, linebreak - ptr + 1);
2023 linebreak - ptr, &parFmt);
2024 ptr = linebreak + 1;
2026 }
2027 else if (multiline && *ptr)
2028 {
2029 /* Add the last line */
2031 len - (ptr - str), &parFmt);
2033 }
2034 } while (linebreak);
2035 if (!multiline)
2036 {
2039 }
2040 }
2041 else
2042 {
2043 WCHAR *oidW = HeapAlloc(GetProcessHeap(), 0,
2044 (strlen(oid) + 1) * sizeof(WCHAR));
2045
2046 if (oidW)
2047 {
2048 LPCSTR src;
2049 WCHAR *dst;
2050
2051 for (src = oid, dst = oidW; *src; src++, dst++)
2052 *dst = *src;
2053 *dst = 0;
2055 &parFmt);
2057 HeapFree(GetProcessHeap(), 0, oidW);
2058 }
2059 }
2060}
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:1759
#define MY_INDENT
Definition: main.c:1889
static struct OIDToString * findSupportedOID(LPCSTR oid)
Definition: main.c:1974
#define lstrcpynW
Definition: compat.h:738
const WCHAR * text
Definition: package.c:1799
unsigned int BOOL
Definition: ntddk_ex.h:94
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
_CONST_RETURN wchar_t *__cdecl wmemchr(_In_reads_(_N) const wchar_t *_S, _In_ wchar_t _C, _In_ size_t _N)
Definition: wchar.h:2554
uint32_t entry
Definition: isohybrid.c:63
#define PFM_STARTINDENT
Definition: richedit.h:838
LPCSTR oid
Definition: main.c:1910
DWORD dwMask
Definition: richedit.h:667
UINT cbSize
Definition: richedit.h:666
LONG dxStartIndent
Definition: richedit.h:670
const char * LPCSTR
Definition: xmlstorage.h:183

Referenced by display_app_usages(), and display_cert_usages().

◆ add_oid_text_to_control()

static void add_oid_text_to_control ( HWND  hwnd,
char oid 
)
static

Definition at line 1891 of file main.c.

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

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

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

Referenced by convert_usages_str_to_usage(), and create_advanced_filter().

◆ add_properties()

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

Definition at line 3035 of file main.c.

3036{
3037 DWORD i;
3038 PCCERT_CONTEXT cert = data->pCertViewInfo->pCertContext;
3039
3040 for (i = 0; i < ARRAY_SIZE(prop_id_map); i++)
3041 {
3042 DWORD cb;
3043
3045 &cb))
3046 {
3047 BYTE *pb;
3048 WCHAR *val = NULL;
3049
3050 /* FIXME: MS adds a separate value for the signature hash
3051 * algorithm.
3052 */
3053 pb = HeapAlloc(GetProcessHeap(), 0, cb);
3054 if (pb)
3055 {
3057 prop_id_map[i].prop, pb, &cb))
3058 {
3059 if (prop_id_map[i].prop_is_string)
3060 {
3061 val = (LPWSTR)pb;
3062 /* Don't double-free pb */
3063 pb = NULL;
3064 }
3065 else
3066 val = prop_id_map[i].prop_to_value(pb, cb);
3067 }
3068 HeapFree(GetProcessHeap(), 0, pb);
3069 }
3071 NULL, NULL);
3072 }
3073 }
3074}
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:2804
static const struct prop_id_to_string_id prop_id_map[]
Definition: main.c:3027
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
unsigned char BYTE
Definition: xxhash.c:193

Referenced by add_all_fields().

◆ add_purpose()

static void add_purpose ( HWND  hwnd,
LPCSTR  oid 
)
static

Definition at line 3150 of file main.c.

3151{
3154 sizeof(CRYPT_OID_INFO));
3155
3156 if (info)
3157 {
3158 char *oidCopy = HeapAlloc(GetProcessHeap(), 0, strlen(oid) + 1);
3159
3160 if (oidCopy)
3161 {
3162 LVITEMA item;
3163
3164 strcpy(oidCopy, oid);
3165 info->cbSize = sizeof(CRYPT_OID_INFO);
3166 info->pszOID = oidCopy;
3169 item.stateMask = LVIS_STATEIMAGEMASK;
3170 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
3171 item.iSubItem = 0;
3172 item.lParam = (LPARAM)info;
3173 item.pszText = oidCopy;
3175 }
3176 else
3178 }
3179}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
#define IDC_CERTIFICATE_USAGES
Definition: cryptuires.h:238
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define LVM_INSERTITEMA
Definition: commctrl.h:2403
struct _CRYPT_OID_INFO CRYPT_OID_INFO
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by add_purpose_dlg_proc(), and show_cert_usages().

◆ add_purpose_dlg_proc()

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

Definition at line 3227 of file main.c.

3229{
3230 LRESULT ret = 0;
3231 char buf[MAX_PURPOSE + 1];
3232
3233 switch (msg)
3234 {
3235 case WM_INITDIALOG:
3237 MAX_PURPOSE, 0);
3240 break;
3241 case WM_COMMAND:
3242 switch (HIWORD(wp))
3243 {
3244 case EN_CHANGE:
3245 if (LOWORD(wp) == IDC_NEW_PURPOSE)
3246 {
3247 /* Show/hide scroll bar on description depending on how much
3248 * text it has.
3249 */
3252
3254 }
3255 break;
3256 case BN_CLICKED:
3257 switch (LOWORD(wp))
3258 {
3259 case IDOK:
3261 (LPARAM)buf);
3262 if (!buf[0])
3263 {
3264 /* An empty purpose is the same as cancelling */
3266 ret = TRUE;
3267 }
3268 else if (!is_valid_oid(buf))
3269 {
3271
3275 }
3276 else if (is_oid_in_list(
3278 {
3280
3282 ARRAY_SIZE(error));
3285 }
3286 else
3287 {
3289
3291 EndDialog(hwnd, wp);
3292 ret = TRUE;
3293 }
3294 break;
3295 case IDCANCEL:
3296 EndDialog(hwnd, wp);
3297 ret = TRUE;
3298 break;
3299 }
3300 break;
3301 }
3302 break;
3303 }
3304 return ret;
3305}
#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:3150
static BOOL is_oid_in_list(HWND hwnd, LPCSTR oid)
Definition: main.c:3219
static BOOL is_valid_oid(LPCSTR oid)
Definition: main.c:3181
#define MAX_PURPOSE
Definition: main.c:3225
HANDLE HWND
Definition: compat.h:19
r parent
Definition: btrfs.c:3010
#define error(str)
Definition: mkdosfs.c:1605
#define LOWORD(l)
Definition: pedump.c:82
static char title[]
Definition: ps.c:92
eMaj lines
Definition: tritemp.h:206
#define HIWORD(l)
Definition: typedefs.h:247
int ret
LONG_PTR LRESULT
Definition: windef.h:209
const char * description
Definition: directx.c:2497
#define DWLP_USER
Definition: winuser.h:872
#define GetWindowLongPtrW
Definition: winuser.h:4829
#define IDCANCEL
Definition: winuser.h:831
#define SB_VERT
Definition: winuser.h:553
#define WM_COMMAND
Definition: winuser.h:1740
#define WM_GETTEXT
Definition: winuser.h:1618
#define WM_INITDIALOG
Definition: winuser.h:1739
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
#define IDOK
Definition: winuser.h:830
#define MB_ICONERROR
Definition: winuser.h:787
#define EM_SETLIMITTEXT
Definition: winuser.h:2011
#define MB_ICONEXCLAMATION
Definition: winuser.h:785
#define MB_OK
Definition: winuser.h:790
#define BN_CLICKED
Definition: winuser.h:1925
BOOL WINAPI ShowScrollBar(_In_ HWND, _In_ int, _In_ BOOL)
#define EM_GETLINECOUNT
Definition: winuser.h:1992
#define SetWindowLongPtrW
Definition: winuser.h:5346
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define EN_CHANGE
Definition: winuser.h:2022

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

7196{
7198 BOOL select = FALSE;
7199 DWORD allocatedLen = 0;
7200 LPWSTR str = NULL;
7201
7202 do {
7204 if (cert && (!filter || filter(cert, &select, callback_data)))
7205 add_cert_to_list(lv, cert, flags, &allocatedLen, &str);
7206 } while (cert);
7208}
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:7064
LPCWSTR filter
Definition: main.c:4927
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 2804 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 1750 of file main.c.

1751{
1752 LPWSTR str;
1753 LONG len;
1754
1755 len = LoadStringW(hInstance, id, (LPWSTR)&str, 0);
1757}
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 1733 of file main.c.

1734{
1735 struct ReadStringStruct string;
1736 EDITSTREAM editstream;
1737
1738 TRACE("(%p, %s)\n", hwnd, debugstr_wn(text, len));
1739
1740 string.buf = text;
1741 string.pos = 0;
1742 string.len = len;
1743 editstream.dwCookie = (DWORD_PTR)&string;
1744 editstream.dwError = 0;
1745 editstream.pfnCallback = read_text_callback;
1747 (LPARAM)&editstream);
1748}
static DWORD CALLBACK read_text_callback(DWORD_PTR dwCookie, LPBYTE buf, LONG cb, LONG *pcb)
Definition: main.c:1719
#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 2820 of file main.c.

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

Referenced by add_v1_fields().

◆ add_v1_fields()

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

Definition at line 2844 of file main.c.

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

Referenced by add_all_fields().

◆ apply_general_changes()

static void apply_general_changes ( HWND  hwnd)
static

Definition at line 3536 of file main.c.

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

Referenced by cert_properties_general_dlg_proc().

◆ cert_mgr_advanced_dlg_proc()

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

Definition at line 722 of file main.c.

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

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_clear_cert_selection()

static void cert_mgr_clear_cert_selection ( HWND  hwnd)
static

Definition at line 809 of file main.c.

810{
815 (LPARAM)empty);
817}
#define IDC_MGR_EXPORT
Definition: cryptuires.h:260
#define IDC_MGR_VIEW
Definition: cryptuires.h:264
#define IDC_MGR_REMOVE
Definition: cryptuires.h:261
#define IDC_MGR_PURPOSES
Definition: cryptuires.h:263
static const WCHAR empty[]
Definition: main.c:47
static void refresh_store_certs(HWND hwnd)
Definition: main.c:570
#define WM_SETTEXT
Definition: winuser.h:1617
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 555 of file main.c.

556{
558
559 return cert_mgr_index_to_store(tab, SendMessageW(tab, TCM_GETCURSEL, 0, 0));
560}
#define IDC_MGR_STORES
Definition: cryptuires.h:257
static HCERTSTORE cert_mgr_index_to_store(HWND tab, int index)
Definition: main.c:546
#define TCM_GETCURSEL
Definition: commctrl.h:4062

Referenced by cert_mgr_dlg_proc(), and refresh_store_certs().

◆ cert_mgr_dlg_proc()

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

Definition at line 1119 of file main.c.

1121{
1122 struct CertMgrData *data;
1123
1124 switch (msg)
1125 {
1126 case WM_INITDIALOG:
1127 {
1128 PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr =
1131
1132 data = HeapAlloc(GetProcessHeap(), 0, sizeof(struct CertMgrData));
1133 if (!data)
1134 return 0;
1135 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
1136 if (data->imageList)
1137 {
1138 HBITMAP bmp;
1139 COLORREF backColor = RGB(255, 0, 255);
1140
1142 ImageList_AddMasked(data->imageList, bmp, backColor);
1144 ImageList_SetBkColor(data->imageList, CLR_NONE);
1146 LVSIL_SMALL, (LPARAM)data->imageList);
1147 }
1149 data->title = pCryptUICertMgr->pwszTitle;
1150
1153 if (pCryptUICertMgr->pwszTitle)
1155 (LPARAM)pCryptUICertMgr->pwszTitle);
1156 show_cert_stores(hwnd, pCryptUICertMgr->dwFlags, data);
1158 break;
1159 }
1160#ifdef __REACTOS__
1161 case WM_DESTROY:
1166 break;
1167#endif
1168 case WM_NOTIFY:
1169 {
1170 NMHDR *hdr = (NMHDR *)lp;
1171
1172 switch (hdr->code)
1173 {
1174 case TCN_SELCHANGE:
1176 break;
1177 case LVN_ITEMCHANGED:
1178 {
1179 NMITEMACTIVATE *nm = (NMITEMACTIVATE*)lp;
1181 int numSelected = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1182
1183 EnableWindow(GetDlgItem(hwnd, IDC_MGR_EXPORT), numSelected > 0);
1184 EnableWindow(GetDlgItem(hwnd, IDC_MGR_REMOVE), numSelected > 0);
1185 EnableWindow(GetDlgItem(hwnd, IDC_MGR_VIEW), numSelected == 1);
1186 if (numSelected == 1)
1188 else
1190 (LPARAM)empty);
1191 break;
1192 }
1193 case NM_DBLCLK:
1194 show_selected_cert(hwnd, ((NMITEMACTIVATE *)lp)->iItem);
1195 break;
1196 case LVN_KEYDOWN:
1197 {
1198 NMLVKEYDOWN *lvk = (NMLVKEYDOWN *)lp;
1199
1200 if (lvk->wVKey == VK_DELETE)
1202 break;
1203 }
1204 case LVN_COLUMNCLICK:
1205 {
1206 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
1208
1209 /* FIXME: doesn't support swapping sort order between ascending
1210 * and descending.
1211 */
1212 switch (nmlv->iSubItem)
1213 {
1214 case 0:
1217 break;
1218 case 1:
1221 break;
1222 case 2:
1225 break;
1226 case 3:
1229 break;
1230 }
1231 break;
1232 }
1233 }
1234 break;
1235 }
1236 case WM_COMMAND:
1237 switch (wp)
1238 {
1241 break;
1242 case IDC_MGR_IMPORT:
1243 if (CryptUIWizImport(0, hwnd, NULL, NULL,
1246 break;
1247 case IDC_MGR_ADVANCED:
1250 {
1252 int index, len;
1253 LPWSTR curString = NULL;
1254
1256 if (index >= 0)
1257 {
1259 curString = HeapAlloc(GetProcessHeap(), 0,
1260 (len + 1) * sizeof(WCHAR));
1261 SendMessageW(cb, CB_GETLBTEXT, index, (LPARAM)curString);
1262 }
1265 if (curString)
1266 {
1268 (LPARAM)curString);
1269 if (index >= 0)
1271 HeapFree(GetProcessHeap(), 0, curString);
1272 }
1274 }
1275 break;
1276 case IDC_MGR_VIEW:
1277 {
1281
1282 if (selection >= 0)
1284 break;
1285 }
1286 case IDC_MGR_EXPORT:
1288 break;
1289 case IDC_MGR_REMOVE:
1291 break;
1292 case IDCANCEL:
1293#ifndef __REACTOS__
1297 ImageList_Destroy(data->imageList);
1299#endif
1301 break;
1302 }
1303 break;
1304 }
1305 return 0;
1306}
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:809
BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5557
static void initialize_purpose_selection(HWND hwnd)
Definition: main.c:220
static int CALLBACK cert_mgr_sort_by_issuer(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1100
static LRESULT CALLBACK cert_mgr_advanced_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:722
static int CALLBACK cert_mgr_sort_by_friendly_name(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1113
static void show_store_certs(HWND hwnd, HCERTSTORE store)
Definition: main.c:353
static void close_stores(HWND tab)
Definition: main.c:562
static HCERTSTORE cert_mgr_current_store(HWND hwnd)
Definition: main.c:555
static void cert_mgr_do_export(HWND hwnd)
Definition: main.c:1016
static void cert_mgr_do_remove(HWND hwnd)
Definition: main.c:970
static void show_selected_cert(HWND hwnd, int index)
Definition: main.c:833
static void cert_mgr_show_cert_usages(HWND hwnd, int index)
Definition: main.c:956
static int CALLBACK cert_mgr_sort_by_date(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1105
static void show_cert_stores(HWND hwnd, DWORD dwFlags, struct CertMgrData *data)
Definition: main.c:494
static void add_cert_columns(HWND hwnd)
Definition: main.c:75
static int CALLBACK cert_mgr_sort_by_subject(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:1095
static void free_certs(HWND lv)
Definition: main.c:531
#define LVSIL_SMALL
Definition: commctrl.h:2299
#define LVN_COLUMNCLICK
Definition: commctrl.h:3139
#define NM_DBLCLK
Definition: commctrl.h:131
#define LVNI_SELECTED
Definition: commctrl.h:2424
#define LVM_GETNEXTITEM
Definition: commctrl.h:2433
#define TCN_SELCHANGE
Definition: commctrl.h:4132
#define LVN_KEYDOWN
Definition: commctrl.h:3184
#define LVM_GETSELECTEDCOUNT
Definition: commctrl.h:2708
#define LVM_SORTITEMSEX
Definition: commctrl.h:2800
#define LVN_ITEMCHANGED
Definition: commctrl.h:3131
#define LVM_SORTITEMS
Definition: commctrl.h:2702
#define CB_GETLBTEXTLEN
Definition: winuser.h:1953
#define CB_GETLBTEXT
Definition: winuser.h:1952
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4399
#define CB_SETCURSEL
Definition: winuser.h:1961
#define CB_RESETCONTENT
Definition: winuser.h:1959
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1940
#define CBN_SELCHANGE
Definition: winuser.h:1979
#define VK_DELETE
Definition: winuser.h:2233
#define WM_DESTROY
Definition: winuser.h:1609
#define CB_GETCURSEL
Definition: winuser.h:1943

Referenced by CryptUIDlgCertMgr().

◆ cert_mgr_do_export()

static void cert_mgr_do_export ( HWND  hwnd)
static

Definition at line 1016 of file main.c.

1017{
1019 int selectionCount = SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0);
1020
1021 if (selectionCount == 1)
1022 {
1025
1026 if (selection >= 0)
1027 {
1029
1030 if (cert)
1031 {
1033
1034 info.dwSize = sizeof(info);
1035 info.pwszExportFileName = NULL;
1036 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
1037 info.u.pCertContext = cert;
1038 info.cStores = 0;
1040 }
1041 }
1042 }
1043 else if (selectionCount > 1)
1044 {
1047
1048 if (store)
1049 {
1051 int selection = -1;
1052
1053 info.dwSize = sizeof(info);
1054 info.pwszExportFileName = NULL;
1055 info.dwSubjectChoice =
1057 info.u.hCertStore = store;
1058 info.cStores = 0;
1059 do {
1062 if (selection >= 0)
1063 {
1065 selection);
1066
1069 }
1070 } while (selection >= 0);
1072 CertCloseStore(store, 0);
1073 }
1074 }
1075}
#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:819
BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid)
Definition: main.c:6988
#define CERT_STORE_CREATE_NEW_FLAG
Definition: wincrypt.h:2464
#define CERT_STORE_PROV_MEMORY
Definition: wincrypt.h:2251
#define CERT_STORE_ADD_ALWAYS
Definition: wincrypt.h:2485

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_do_remove()

static void cert_mgr_do_remove ( HWND  hwnd)
static

Definition at line 970 of file main.c.

971{
973 TCM_GETCURSEL, 0, 0);
974 struct CertMgrData *data =
976
977 if (tabIndex < data->nStores)
978 {
981 LPCWSTR pTitle;
982 int warningID;
983
984 if (SendMessageW(lv, LVM_GETSELECTEDCOUNT, 0, 0) > 1)
985 warningID = data->stores[tabIndex].removePluralWarning;
986 else
987 warningID = data->stores[tabIndex].removeWarning;
988 if (data->title)
989 pTitle = data->title;
990 else
991 {
993 pTitle = title;
994 }
996 if (MessageBoxW(hwnd, warning, pTitle, MB_YESNO) == IDYES)
997 {
998 int selection = -1;
999
1000 do {
1003 if (selection >= 0)
1004 {
1006 selection);
1007
1009 }
1010 } while (selection >= 0);
1012 }
1013 }
1014}
#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:490
#define MB_YESNO
Definition: winuser.h:817
#define IDYES
Definition: winuser.h:835
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by cert_mgr_dlg_proc().

◆ cert_mgr_index_to_cert()

static PCCERT_CONTEXT cert_mgr_index_to_cert ( HWND  hwnd,
int  index 
)
static

Definition at line 819 of file main.c.

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

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

◆ cert_mgr_index_to_store()

static HCERTSTORE cert_mgr_index_to_store ( HWND  tab,
int  index 
)
static

Definition at line 546 of file main.c.

547{
549
550 item.mask = TCIF_PARAM;
552 return (HCERTSTORE)item.lParam;
553}
#define TCIF_PARAM
Definition: commctrl.h:3974
#define TCM_GETITEMW
Definition: commctrl.h:4033

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

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

Referenced by cert_mgr_dlg_proc(), and select_cert_dlg_proc().

◆ cert_mgr_sort_by_friendly_name()

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

Definition at line 1113 of file main.c.

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

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

1101{
1102 return cert_mgr_sort_by_text((HWND)lp, 1, lp1, lp2);
1103}

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

1096{
1097 return cert_mgr_sort_by_text((HWND)lp, 0, lp1, lp2);
1098}

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

1078{
1079 LVITEMW item;
1080 WCHAR buf1[MAX_STRING_LEN];
1081 WCHAR buf2[MAX_STRING_LEN];
1082
1083 item.cchTextMax = ARRAY_SIZE(buf1);
1084 item.mask = LVIF_TEXT;
1085 item.pszText = buf1;
1086 item.iItem = index1;
1087 item.iSubItem = col;
1089 item.pszText = buf2;
1090 item.iItem = index2;
1092 return lstrcmpW(buf1, buf2);
1093}
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170

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

4287{
4288 RECT rc;
4289
4290 TRACE("(%p, %08x, %08lx)\n", hwnd, msg, lp);
4291
4292 switch (msg)
4293 {
4294 case PSCB_INITIALIZED:
4295 /* Get cancel button's position.. */
4297 MapWindowPoints( 0, hwnd, (POINT *)&rc, 2 );
4298 /* hide the cancel button.. */
4300 /* and move the OK button to the cancel button's original position. */
4301 SetWindowPos(GetDlgItem(hwnd, IDOK), 0, rc.left, rc.top, 0, 0,
4303 break;
4304 }
4305 return 0;
4306}
#define PSCB_INITIALIZED
Definition: prsht.h:75
LONG top
Definition: windef.h:307
#define SWP_NOACTIVATE
Definition: winuser.h:1242
#define SWP_NOREDRAW
Definition: winuser.h:1246
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:1245
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:1247

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

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

Referenced by show_edit_cert_properties_dialog().

◆ cert_properties_general_dlg_proc()

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

Definition at line 3600 of file main.c.

3602{
3604
3605 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
3606
3607 switch (msg)
3608 {
3609 case WM_INITDIALOG:
3610 {
3612 struct detail_data *detailData;
3613 struct edit_cert_data *editData;
3614
3615 page = (PROPSHEETPAGEW *)lp;
3616 detailData = (struct detail_data *)page->lParam;
3621 editData = HeapAlloc(GetProcessHeap(), 0,
3622 sizeof(struct edit_cert_data));
3623 if (editData)
3624 {
3625 editData->imageList = ImageList_Create(16, 16,
3626 ILC_COLOR4 | ILC_MASK, 4, 0);
3627 if (editData->imageList)
3628 {
3629 HBITMAP bmp;
3630 COLORREF backColor = RGB(255, 0, 255);
3631
3633 ImageList_AddMasked(editData->imageList, bmp, backColor);
3636 }
3637 editData->cert = detailData->pCertViewInfo->pCertContext;
3638 editData->pfPropertiesChanged = detailData->pfPropertiesChanged;
3641 }
3642 break;
3643 }
3644 case WM_NOTIFY:
3645 {
3646 NMHDR *hdr = (NMHDR *)lp;
3647 NMITEMACTIVATE *nm;
3648
3649 switch (hdr->code)
3650 {
3651 case NM_CLICK:
3652 nm = (NMITEMACTIVATE *)lp;
3653 toggle_usage(hwnd, nm->iItem);
3655 break;
3656 case PSN_APPLY:
3658 break;
3659 }
3660 break;
3661 }
3662 case WM_COMMAND:
3663 switch (HIWORD(wp))
3664 {
3665 case EN_CHANGE:
3667 if (LOWORD(wp) == IDC_DESCRIPTION)
3668 {
3669 /* Show/hide scroll bar on description depending on how much
3670 * text it has.
3671 */
3674
3676 }
3677 break;
3678 case BN_CLICKED:
3679 switch (LOWORD(wp))
3680 {
3681 case IDC_ADD_PURPOSE:
3686 break;
3692 break;
3693 }
3694 break;
3695 }
3696 break;
3697 }
3698 return 0;
3699}
#define IDD_ADD_CERT_PURPOSE
Definition: cryptuires.h:188
#define IDC_ADD_PURPOSE
Definition: cryptuires.h:239
#define MAX_FRIENDLY_NAME
Definition: main.c:3533
static LRESULT CALLBACK add_purpose_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3227
static void select_purposes(HWND hwnd, PurposeSelection selection)
Definition: main.c:3384
static void set_general_cert_properties(HWND hwnd, struct edit_cert_data *data)
Definition: main.c:3489
static void apply_general_changes(HWND hwnd)
Definition: main.c:3536
#define PSN_APPLY
Definition: prsht.h:117
BOOL * pfPropertiesChanged
Definition: main.c:2749
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
Definition: main.c:2748
HIMAGELIST imageList
Definition: main.c:3407
BOOL * pfPropertiesChanged
Definition: main.c:3406
PCCERT_CONTEXT cert
Definition: main.c:3405
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 4655 of file main.c.

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

Referenced by do_import().

◆ check_store_context_type()

static BOOL check_store_context_type ( DWORD  dwFlags,
HCERTSTORE  store 
)
static

Definition at line 4720 of file main.c.

4721{
4722 BOOL ret;
4723
4724 if (dwFlags &
4727 {
4730 PCCTL_CONTEXT ctl;
4731
4732 ret = TRUE;
4733 if ((cert = CertEnumCertificatesInStore(store, NULL)))
4734 {
4737 ret = FALSE;
4738 }
4739 if (ret && (crl = CertEnumCRLsInStore(store, NULL)))
4740 {
4743 ret = FALSE;
4744 }
4745 if (ret && (ctl = CertEnumCTLsInStore(store, NULL)))
4746 {
4747 CertFreeCTLContext(ctl);
4749 ret = FALSE;
4750 }
4751 }
4752 else
4753 ret = TRUE;
4754 if (!ret)
4756 return ret;
4757}
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:371
BOOL WINAPI CertFreeCRLContext(PCCRL_CONTEXT pCrlContext)
Definition: crl.c:386
BOOL WINAPI CertFreeCTLContext(PCCTL_CONTEXT pCTLContext)
Definition: ctl.c:499
PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pPrev)
Definition: ctl.c:200
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev)
Definition: store.c:1101
static const BYTE crl[]
Definition: message.c:864

Referenced by import_store(), and import_validate_filename().

◆ choose_store_for_cert()

static HCERTSTORE choose_store_for_cert ( PCCERT_CONTEXT  cert)
static

Definition at line 4560 of file main.c.

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

Referenced by import_cert().

◆ close_stores()

static void close_stores ( HWND  tab)
static

Definition at line 562 of file main.c.

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

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

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

Referenced by create_advanced_filter().

◆ create_advanced_filter()

static CERT_ENHKEY_USAGE * create_advanced_filter ( void  )
static

Definition at line 300 of file main.c.

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

Referenced by show_store_certs().

◆ create_cert_details_list()

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

Definition at line 3143 of file main.c.

3144{
3148}
static void create_show_list(HWND hwnd, struct detail_data *data)
Definition: main.c:3097
static void set_fields_selection(HWND hwnd, struct detail_data *data, int sel)
Definition: main.c:3132
static void create_listview_columns(HWND hwnd)
Definition: main.c:3114

Referenced by detail_dlg_proc().

◆ create_listview_columns()

static void create_listview_columns ( HWND  hwnd)
static

Definition at line 3114 of file main.c.

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

Referenced by create_cert_details_list().

◆ create_show_list()

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

Definition at line 3097 of file main.c.

3098{
3101 int i;
3102
3103 for (i = 0; i < ARRAY_SIZE(listItems); i++)
3104 {
3105 int index;
3106
3110 }
3112}
#define IDC_DETAIL_SELECT
Definition: cryptuires.h:219
static const struct selection_list_item listItems[]
Definition: main.c:3089
#define CB_SETITEMDATA
Definition: winuser.h:1966
#define CB_INSERTSTRING
Definition: winuser.h:1957

Referenced by create_cert_details_list().

◆ crypt_format_extension()

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

Definition at line 2858 of file main.c.

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

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

◆ CryptUIDlgCertMgr()

BOOL WINAPI CryptUIDlgCertMgr ( PCCRYPTUI_CERT_MGR_STRUCT  pCryptUICertMgr)

Definition at line 1311 of file main.c.

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

Referenced by display_cert_manager(), and OpenPersonalTrustDBDialog().

◆ CryptUIDlgSelectCertificateA()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTA  pcsc)

Definition at line 7537 of file main.c.

7538{
7541 LPWSTR title = NULL, display_str = NULL;
7542 PROPSHEETPAGEW *pages = NULL;
7543
7544 TRACE("%p\n", pcsc);
7545
7546 if (pcsc->dwSize != sizeof(*pcsc) && pcsc->dwSize != sizeof(*pcsc) - sizeof(HCERTSTORE))
7547 {
7548 WARN("unexpected size %d\n", pcsc->dwSize);
7550 return NULL;
7551 }
7552 memcpy(&selCertInfo, pcsc, pcsc->dwSize);
7553 if (pcsc->szTitle)
7554 {
7555 if (!(title = strdupAtoW( pcsc->szTitle ))) goto error;
7556 selCertInfo.szTitle = title;
7557 }
7558 if (pcsc->szDisplayString)
7559 {
7560 if (!(display_str = strdupAtoW( pcsc->szDisplayString ))) goto error;
7561 selCertInfo.szDisplayString = display_str;
7562 }
7563 if (pcsc->cPropSheetPages)
7564 {
7566 if (!pages)
7567 goto error;
7568 selCertInfo.rgPropSheetPages = pages;
7569 }
7570 cert = CryptUIDlgSelectCertificateW(&selCertInfo);
7571error:
7573 HeapFree(GetProcessHeap(), 0, display_str);
7574 if (pcsc->cPropSheetPages)
7576 return cert;
7577}
PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc)
Definition: main.c:7438
static void free_prop_sheet_pages(PROPSHEETPAGEW *pages, DWORD num)
Definition: main.c:7459
static WCHAR * strdupAtoW(const char *str)
Definition: main.c:65
static PROPSHEETPAGEW * prop_sheet_pages_AtoW(LPCPROPSHEETPAGEA pages, DWORD num)
Definition: main.c:7480
#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 7579 of file main.c.

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

◆ CryptUIDlgSelectCertificateW()

PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW ( PCCRYPTUI_SELECTCERTIFICATE_STRUCTW  pcsc)

Definition at line 7438 of file main.c.

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

Referenced by CryptUIDlgSelectCertificateA(), and CryptUIDlgSelectCertificateFromStore().

◆ CryptUIDlgSelectStoreA()

HCERTSTORE WINAPI CryptUIDlgSelectStoreA ( PCRYPTUI_SELECTSTORE_INFO_A  info)

Definition at line 1636 of file main.c.

1637{
1640 int len;
1641
1642 TRACE("(%p)\n", info);
1643
1644 if (info->dwSize != sizeof(CRYPTUI_SELECTSTORE_INFO_A))
1645 {
1646 WARN("unexpected size %d\n", info->dwSize);
1648 return NULL;
1649 }
1650 memcpy(&infoW, info, sizeof(*info));
1651 if (info->pszTitle)
1652 {
1653 len = MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, NULL, 0);
1654 infoW.pwszTitle = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1655 MultiByteToWideChar(CP_ACP, 0, info->pszTitle, -1, infoW.pwszTitle,
1656 len);
1657 }
1658 if (info->pszText)
1659 {
1660 len = MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, NULL, 0);
1661 infoW.pwszText = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1662 MultiByteToWideChar(CP_ACP, 0, info->pszText, -1, infoW.pwszText, len);
1663 }
1665 HeapFree(GetProcessHeap(), 0, infoW.pwszText);
1666 HeapFree(GetProcessHeap(), 0, infoW.pwszTitle);
1667 return ret;
1668}
HCERTSTORE WINAPI CryptUIDlgSelectStoreW(PCRYPTUI_SELECTSTORE_INFO_W info)
Definition: main.c:1616
#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 1616 of file main.c.

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

Referenced by CryptUIDlgSelectStoreA(), and import_store_dlg_proc().

◆ CryptUIDlgViewCertificateA()

BOOL WINAPI CryptUIDlgViewCertificateA ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTA  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 1673 of file main.c.

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

◆ CryptUIDlgViewCertificateW()

BOOL WINAPI CryptUIDlgViewCertificateW ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
BOOL pfPropertiesChanged 
)

Definition at line 4413 of file main.c.

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

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

◆ CryptUIDlgViewContext()

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

Definition at line 4487 of file main.c.

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

◆ CryptUIDlgViewSignerInfoA()

BOOL WINAPI CryptUIDlgViewSignerInfoA ( CRYPTUI_VIEWSIGNERINFO_STRUCTA pcvsi)

Definition at line 7016 of file main.c.

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

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

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

◆ CryptUIWizExport()

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

Definition at line 6988 of file main.c.

6990{
6991 BOOL ret;
6992
6993 TRACE("(%08x, %p, %s, %p, %p)\n", dwFlags, hwndParent,
6994 debugstr_w(pwszWizardTitle), pExportInfo, pvoid);
6995
6996 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
6998 pvoid);
6999 else
7000 {
7003 CREATE_ALWAYS, 0, NULL);
7004
7006 {
7007 ret = do_export(file, pExportInfo, pvoid, NULL, FALSE);
7009 }
7010 else
7011 ret = FALSE;
7012 }
7013 return ret;
7014}
static HWND hwndParent
Definition: cryptui.c:300
static HWND LPCWSTR pwszWizardTitle
Definition: cryptui.c:301
#define CRYPTUI_WIZ_NO_UI
Definition: cryptuiapi.h:246
static BOOL show_export_ui(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, const void *pvoid)
Definition: main.c:6831
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:6692
#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 5557 of file main.c.

5559{
5560 BOOL ret;
5561
5562 TRACE("(0x%08x, %p, %s, %p, %p)\n", dwFlags, hwndParent, debugstr_w(pwszWizardTitle),
5564
5565 if (pImportSrc &&
5566 pImportSrc->dwSize != sizeof(CRYPTUI_WIZ_IMPORT_SRC_INFO))
5567 {
5569 return FALSE;
5570 }
5571
5572 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
5575 else if (pImportSrc)
5578 else
5579 {
5580 /* Can't have no UI without specifying source */
5582 ret = FALSE;
5583 }
5584
5585 return ret;
5586}
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO HCERTSTORE hDestCertStore
Definition: cryptui.c:302
static HWND LPCWSTR PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc
Definition: cryptui.c:301
static BOOL do_import(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5327
static BOOL show_import_ui(DWORD dwFlags, HWND hwndParent, LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, HCERTSTORE hDestCertStore)
Definition: main.c:5444

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

3905{
3906 struct detail_data *data;
3907
3908 switch (msg)
3909 {
3910 case PSPCB_RELEASE:
3911 data = (struct detail_data *)page->lParam;
3914 break;
3915 }
3916 return 0;
3917}
static void free_detail_fields(struct detail_data *data)
Definition: main.c:3772

Referenced by init_detail_page().

◆ detail_dlg_proc()

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

Definition at line 3796 of file main.c.

3798{
3800 struct detail_data *data;
3801
3802 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
3803
3804 switch (msg)
3805 {
3806 case WM_INITDIALOG:
3807 page = (PROPSHEETPAGEW *)lp;
3808 data = (struct detail_data *)page->lParam;
3810 if (!(data->pCertViewInfo->dwFlags & CRYPTUI_ENABLE_EDITPROPERTIES))
3812 if (data->pCertViewInfo->dwFlags & CRYPTUI_DISABLE_EXPORT)
3814 break;
3815 case WM_NOTIFY:
3816 {
3817 NMITEMACTIVATE *nm;
3819
3820 nm = (NMITEMACTIVATE*)lp;
3821 if (nm->hdr.hwndFrom == list && nm->uNewState & LVN_ITEMACTIVATE
3822 && nm->hdr.code == LVN_ITEMCHANGED)
3823 {
3824 data = (struct detail_data *)nm->lParam;
3825 if (nm->iItem >= 0 && data && nm->iItem < data->cFields)
3826 {
3828 HWND valueCtl = GetDlgItem(hwnd, IDC_DETAIL_VALUE);
3829
3830 if (data->fields[nm->iItem].create)
3831 val = data->fields[nm->iItem].create(
3832 data->pCertViewInfo->pCertContext,
3833 data->fields[nm->iItem].param);
3834 else
3835 {
3836 LVITEMW item;
3837 int res;
3838
3839 item.cchTextMax = ARRAY_SIZE(buf);
3840 item.mask = LVIF_TEXT;
3841 item.pszText = buf;
3842 item.iItem = nm->iItem;
3843 item.iSubItem = 1;
3845 if (res)
3846 val = buf;
3847 }
3848 /* Select all the text in the control, the next update will
3849 * replace it
3850 */
3851 SendMessageW(valueCtl, EM_SETSEL, 0, -1);
3853 val ? lstrlenW(val) : 0);
3854 if (val != buf)
3856 }
3857 }
3858 break;
3859 }
3860 case WM_COMMAND:
3861 switch (wp)
3862 {
3863 case IDC_EXPORT:
3864 {
3867
3868 data = (struct detail_data *)SendMessageW(cb, CB_GETITEMDATA, 0, 0);
3869 info.dwSize = sizeof(info);
3870 info.pwszExportFileName = NULL;
3871 info.dwSubjectChoice = CRYPTUI_WIZ_EXPORT_CERT_CONTEXT;
3872 info.u.pCertContext = data->pCertViewInfo->pCertContext;
3873 info.cStores = 0;
3875 break;
3876 }
3877 case IDC_EDITPROPERTIES:
3878 {
3880 int curSel;
3881
3882 curSel = SendMessageW(cb, CB_GETCURSEL, 0, 0);
3883 /* Actually, any index will do, since they all store the same
3884 * data value
3885 */
3887 curSel, 0);
3889 break;
3890 }
3891 case ((CBN_SELCHANGE << 16) | IDC_DETAIL_SELECT):
3893 break;
3894 }
3895 break;
3896 case WM_REFRESH_VIEW:
3898 break;
3899 }
3900 return 0;
3901}
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:3143
#define WM_REFRESH_VIEW
Definition: main.c:3524
static void show_edit_cert_properties_dialog(HWND parent, struct detail_data *data)
Definition: main.c:3744
static void refresh_details_view(HWND hwnd)
Definition: main.c:3783
GLuint res
Definition: glext.h:9613
#define LVN_ITEMACTIVATE
Definition: commctrl.h:3147
UINT code
Definition: winuser.h:3159
HWND hwndFrom
Definition: winuser.h:3157
#define CB_GETITEMDATA
Definition: winuser.h:1950
#define EM_SETSEL
Definition: winuser.h:2018

Referenced by init_detail_page().

◆ display_app_usages()

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

Definition at line 2062 of file main.c.

2064{
2065 static char any_app_policy[] = szOID_ANY_APPLICATION_POLICY;
2066 WCHAR nl = '\n';
2067 CHARFORMATW charFmt;
2068 PCERT_EXTENSION policyExt;
2069 if (!*anyUsageAdded)
2070 {
2071 PARAFORMAT2 parFmt;
2072
2073 parFmt.cbSize = sizeof(parFmt);
2074 parFmt.dwMask = PFM_STARTINDENT;
2075 parFmt.dxStartIndent = MY_INDENT;
2077 IDS_CERT_INFO_PURPOSES, &parFmt);
2079 *anyUsageAdded = TRUE;
2080 }
2081 memset(&charFmt, 0, sizeof(charFmt));
2082 charFmt.cbSize = sizeof(charFmt);
2083 charFmt.dwMask = CFM_BOLD;
2084 charFmt.dwEffects = 0;
2087 cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension)))
2088 {
2089 CERT_POLICIES_INFO *policies;
2090 DWORD size;
2091
2093 policyExt->Value.pbData, policyExt->Value.cbData,
2094 CRYPT_DECODE_ALLOC_FLAG, NULL, &policies, &size))
2095 {
2096 DWORD i;
2097
2098 for (i = 0; i < policies->cPolicyInfo; i++)
2099 {
2100 DWORD j;
2101
2102 for (j = 0; j < policies->rgPolicyInfo[i].cPolicyQualifier; j++)
2104 policies->rgPolicyInfo[i].rgPolicyQualifier[j].
2105 pszPolicyQualifierId);
2106 }
2107 LocalFree(policies);
2108 }
2109 }
2110 else
2111 add_oid_text_to_control(text, any_app_policy);
2112}
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:1766
static void add_local_oid_text_to_control(HWND text, LPCSTR oid)
Definition: main.c:1991
static void add_oid_text_to_control(HWND hwnd, char *oid)
Definition: main.c:1891
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
#define SCF_SELECTION
Definition: richedit.h:235
#define EM_SETCHARFORMAT
Definition: richedit.h:101
#define CFM_BOLD
Definition: richedit.h:332
CRYPT_OBJID_BLOB Value
Definition: wincrypt.h:232
CERT_POLICY_INFO * rgPolicyInfo
Definition: wincrypt.h:400
CERT_POLICY_QUALIFIER_INFO * rgPolicyQualifier
Definition: wincrypt.h:395
DWORD cPolicyQualifier
Definition: wincrypt.h:394
BYTE * pbData
Definition: wincrypt.h:103
UINT cbSize
Definition: richedit.h:268
DWORD dwMask
Definition: richedit.h:269
DWORD dwEffects
Definition: richedit.h:270
#define CRYPT_DECODE_ALLOC_FLAG
Definition: wincrypt.h:3454
#define X509_CERT_POLICIES
Definition: wincrypt.h:3381
#define szOID_ANY_APPLICATION_POLICY
Definition: wincrypt.h:3247
#define szOID_APPLICATION_CERT_POLICIES
Definition: wincrypt.h:3275

Referenced by set_policy_text().

◆ display_cert_usages()

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

Definition at line 2114 of file main.c.

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

Referenced by set_policy_text().

◆ DllMain()

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

Definition at line 49 of file main.c.

50{
51 TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
52
53 switch (fdwReason)
54 {
55 case DLL_WINE_PREATTACH:
56 return FALSE; /* prefer native version */
58 hInstance = hinstDLL;
60 break;
61 }
62 return TRUE;
63}
#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 6692 of file main.c.

6695{
6696 BOOL ret;
6697
6698 if (pContextInfo->dwSize != sizeof(CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO))
6699 {
6701 return FALSE;
6702 }
6703 switch (pExportInfo->dwSubjectChoice)
6704 {
6706 ret = save_der(file,
6707 pExportInfo->u.pCRLContext->pbCrlEncoded,
6708 pExportInfo->u.pCRLContext->cbCrlEncoded);
6709 break;
6711 ret = save_der(file,
6712 pExportInfo->u.pCTLContext->pbCtlEncoded,
6713 pExportInfo->u.pCTLContext->cbCtlEncoded);
6714 break;
6716 ret = save_serialized_store(file, pExportInfo->u.hCertStore);
6717 break;
6719 ret = save_store_as_cms(file, pExportInfo->u.hCertStore);
6720 break;
6721 default:
6722 switch (pContextInfo->dwExportFormat)
6723 {
6725 ret = save_der(file, pExportInfo->u.pCertContext->pbCertEncoded,
6726 pExportInfo->u.pCertContext->cbCertEncoded);
6727 break;
6730 pExportInfo->u.pCertContext->pbCertEncoded,
6731 pExportInfo->u.pCertContext->cbCertEncoded);
6732 break;
6734 ret = save_cert_as_cms(file, pExportInfo,
6735 pContextInfo->fExportChain);
6736 break;
6738 ret = save_pfx(file, pExportInfo, pContextInfo, keyProvInfo,
6739 deleteKeys);
6740 break;
6741 default:
6743 ret = FALSE;
6744 }
6745 }
6746 return ret;
6747}
#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:6487
static BOOL save_serialized_store(HANDLE file, HCERTSTORE store)
Definition: main.c:6555
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:6561
static BOOL save_der(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6449
static BOOL save_base64(HANDLE file, const BYTE *pb, DWORD cb)
Definition: main.c:6456
static BOOL save_store_as_cms(HANDLE file, HCERTSTORE store)
Definition: main.c:6481
BYTE * pbCertEncoded
Definition: wincrypt.h:480
DWORD cbCertEncoded
Definition: wincrypt.h:481
DWORD cbCrlEncoded
Definition: wincrypt.h:621
BYTE * pbCrlEncoded
Definition: wincrypt.h:620
PCCTL_CONTEXT pCTLContext
Definition: cryptuiapi.h:273
PCCERT_CONTEXT pCertContext
Definition: cryptuiapi.h:272
PCCRL_CONTEXT pCRLContext
Definition: cryptuiapi.h:274
DWORD cbCtlEncoded
Definition: wincrypt.h:746
BYTE * pbCtlEncoded
Definition: wincrypt.h:745

Referenced by CryptUIWizExport(), and export_finish_dlg_proc().

◆ do_import()

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

Definition at line 5327 of file main.c.

5329{
5330 BOOL ret;
5331
5332 switch (pImportSrc->dwSubjectChoice)
5333 {
5336 pImportSrc->u.pwszFileName, hDestCertStore);
5337 break;
5340 ret = import_cert(pImportSrc->u.pCertContext, hDestCertStore);
5341 else
5343 break;
5346 ret = import_crl(pImportSrc->u.pCRLContext, hDestCertStore);
5347 else
5349 break;
5352 ret = import_ctl(pImportSrc->u.pCTLContext, hDestCertStore);
5353 else
5355 break;
5358 pImportSrc->u.hCertStore, hDestCertStore);
5359 break;
5360 default:
5361 WARN("unknown source type: %u\n", pImportSrc->dwSubjectChoice);
5363 ret = FALSE;
5364 }
5365 return ret;
5366}
#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:4715
static BOOL import_crl(PCCRL_CONTEXT crl, HCERTSTORE hDestCertStore)
Definition: main.c:4597
static BOOL import_cert(PCCERT_CONTEXT cert, HCERTSTORE hDestCertStore)
Definition: main.c:4572
static BOOL import_ctl(PCCTL_CONTEXT ctl, HCERTSTORE hDestCertStore)
Definition: main.c:4623
static BOOL check_context_type(DWORD dwFlags, DWORD type)
Definition: main.c:4655
static BOOL import_store(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, HCERTSTORE source, HCERTSTORE dest)
Definition: main.c:4759
static BOOL import_file(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, LPCWSTR fileName, HCERTSTORE dest)
Definition: main.c:4838

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

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

Referenced by enumerate_stores().

◆ enumerate_stores()

static void enumerate_stores ( HWND  hwnd,
CRYPTUI_ENUM_DATA pEnumData 
)
static

Definition at line 1429 of file main.c.

1430{
1431 DWORD i;
1433
1434 for (i = 0; i < pEnumData->cEnumArgs; i++)
1438 for (i = 0; i < pEnumData->cStores; i++)
1439 {
1440 DWORD size;
1441
1442 if (CertGetStoreProperty(pEnumData->rghStore[i],
1444 {
1446
1447 if (name)
1448 {
1449 if (CertGetStoreProperty(pEnumData->rghStore[i],
1451 {
1452 struct StoreInfo *storeInfo = HeapAlloc(GetProcessHeap(),
1453 0, sizeof(struct StoreInfo));
1454
1455 if (storeInfo)
1456 {
1457 TVINSERTSTRUCTW tvis;
1458
1459 storeInfo->type = StoreHandle;
1460 storeInfo->u.store = pEnumData->rghStore[i];
1461 tvis.hParent = NULL;
1462 tvis.hInsertAfter = TVI_LAST;
1463 tvis.u.item.mask = TVIF_TEXT | TVIF_PARAM;
1464 tvis.u.item.pszText = name;
1465 tvis.u.item.lParam = (LPARAM)storeInfo;
1467 }
1468 }
1470 }
1471 }
1472 }
1473}
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:1383
@ StoreHandle
Definition: main.c:1374
HCERTSTORE store
Definition: main.c:1378
PCRYPTUI_ENUM_SYSTEM_STORE_ARGS rgEnumArgs
Definition: main.c:1338
DWORD cEnumArgs
Definition: main.c:1337
HCERTSTORE * rghStore
Definition: main.c:1336
#define CERT_STORE_LOCALIZED_NAME_PROP_ID
Definition: wincrypt.h:2830

Referenced by select_store_dlg_proc().

◆ export_acquire_private_key()

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

Definition at line 5668 of file main.c.

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

Referenced by export_private_key_dlg_proc().

◆ export_append_extension()

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

Definition at line 6042 of file main.c.

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

Referenced by export_file_dlg_proc().

◆ export_file_dlg_proc()

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

Definition at line 6245 of file main.c.

6247{
6248 LRESULT ret = 0;
6249 struct ExportWizData *data;
6250
6251 switch (msg)
6252 {
6253 case WM_INITDIALOG:
6254 {
6256
6257 data = (struct ExportWizData *)page->lParam;
6259 if (data->exportInfo.pwszExportFileName)
6261 (LPARAM)data->exportInfo.pwszExportFileName);
6262 break;
6263 }
6264 case WM_NOTIFY:
6265 {
6266 NMHDR *hdr = (NMHDR *)lp;
6267
6268 switch (hdr->code)
6269 {
6270 case PSN_WIZBACK:
6272 if (data->contextInfo.dwExportFormat !=
6274 {
6276 ret = 1;
6277 }
6278 break;
6279 case PSN_WIZNEXT:
6280 {
6281 HWND fileNameEdit = GetDlgItem(hwnd, IDC_EXPORT_FILENAME);
6282 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
6283
6285 if (!len)
6286 {
6288 LPCWSTR pTitle;
6289
6290 if (data->pwszWizardTitle)
6291 pTitle = data->pwszWizardTitle;
6292 else
6293 {
6295 pTitle = title;
6296 }
6300 ret = 1;
6301 }
6302 else
6303 {
6305 (len + 1) * sizeof(WCHAR));
6306
6307 if (fileName)
6308 {
6309 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
6310 (LPARAM)fileName);
6313 {
6316 ret = 1;
6317 }
6318 else
6319 data->fileName = fileName;
6320 }
6321 }
6322 break;
6323 }
6324 case PSN_SETACTIVE:
6327 ret = TRUE;
6328 break;
6329 }
6330 break;
6331 }
6332 case WM_COMMAND:
6333 switch (wp)
6334 {
6336 {
6338 WCHAR fileBuf[MAX_PATH];
6339
6341 memset(&ofn, 0, sizeof(ofn));
6342 ofn.lStructSize = sizeof(ofn);
6343 ofn.hwndOwner = hwnd;
6345 data->contextInfo.dwExportFormat,
6346 data->exportInfo.dwSubjectChoice);
6347 ofn.lpstrFile = fileBuf;
6348 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
6349 fileBuf[0] = 0;
6350 if (GetSaveFileNameW(&ofn))
6352 0, (LPARAM)ofn.lpstrFile);
6354 break;
6355 }
6356 }
6357 break;
6358 }
6359 return ret;
6360}
#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:6094
static WCHAR * make_export_file_filter(DWORD exportFormat, DWORD subjectChoice)
Definition: main.c:6179
static LPWSTR export_append_extension(const struct ExportWizData *data, LPWSTR fileName)
Definition: main.c:6042
#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:5598
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:1619
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define DWLP_MSGRESULT
Definition: winuser.h:870

Referenced by show_export_ui().

◆ export_finish_dlg_proc()

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

Definition at line 6749 of file main.c.

6751{
6752 LRESULT ret = 0;
6753 struct ExportWizData *data;
6754
6755 switch (msg)
6756 {
6757 case WM_INITDIALOG:
6758 {
6761 RECT rc;
6763
6764 data = (struct ExportWizData *)page->lParam;
6767 (WPARAM)data->titleFont, TRUE);
6768 GetWindowRect(lv, &rc);
6769 column.mask = LVCF_WIDTH;
6770 column.cx = (rc.right - rc.left) / 2 - 2;
6774 break;
6775 }
6776 case WM_NOTIFY:
6777 {
6778 NMHDR *hdr = (NMHDR *)lp;
6779
6780 switch (hdr->code)
6781 {
6782 case PSN_SETACTIVE:
6783 {
6785
6791 ret = TRUE;
6792 break;
6793 }
6794 case PSN_WIZFINISH:
6795 {
6796 int messageID;
6798 LPCWSTR pTitle;
6799 DWORD mbFlags;
6800
6802 if ((data->success = do_export(data->file, &data->exportInfo,
6803 &data->contextInfo, data->keyProvInfo, data->deleteKeys)))
6804 {
6805 messageID = IDS_EXPORT_SUCCEEDED;
6806 mbFlags = MB_OK;
6807 }
6808 else
6809 {
6810 messageID = IDS_EXPORT_FAILED;
6811 mbFlags = MB_OK | MB_ICONERROR;
6812 }
6813 if (data->pwszWizardTitle)
6814 pTitle = data->pwszWizardTitle;
6815 else
6816 {
6818 pTitle = title;
6819 }
6821 MessageBoxW(hwnd, message, pTitle, mbFlags);
6822 break;
6823 }
6824 }
6825 break;
6826 }
6827 }
6828 return ret;
6829}
#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:6362
#define PSWIZB_FINISH
Definition: prsht.h:155
#define PSN_WIZFINISH
Definition: prsht.h:122
#define LVM_DELETEALLITEMS
Definition: commctrl.h:2413
Definition: tftpd.h:60
#define WM_SETFONT
Definition: winuser.h:1650

Referenced by show_export_ui().

◆ export_format_dlg_proc()

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

Definition at line 5833 of file main.c.

5835{
5836 LRESULT ret = 0;
5837 struct ExportWizData *data;
5838
5839 switch (msg)
5840 {
5841 case WM_INITDIALOG:
5842 {
5844
5845 data = (struct ExportWizData *)page->lParam;
5848 break;
5849 }
5850 case WM_NOTIFY:
5851 {
5852 NMHDR *hdr = (NMHDR *)lp;
5853
5854 switch (hdr->code)
5855 {
5856 case PSN_SETACTIVE:
5861 ret = TRUE;
5862 break;
5863 case PSN_WIZNEXT:
5864 {
5865 BOOL skipPasswordPage = TRUE;
5866
5869 data->contextInfo.dwExportFormat =
5872 data->contextInfo.dwExportFormat =
5875 {
5876 data->contextInfo.dwExportFormat =
5879 data->contextInfo.fExportChain =
5881 }
5882 else
5883 {
5884 data->contextInfo.dwExportFormat =
5887 data->contextInfo.fExportChain = TRUE;
5889 data->contextInfo.fStrongEncryption = TRUE;
5891 data->deleteKeys = TRUE;
5892 skipPasswordPage = FALSE;
5893 }
5895 skipPasswordPage ? IDD_EXPORT_FILE : 0);
5896 ret = 1;
5897 break;
5898 }
5899 }
5900 break;
5901 }
5902 case WM_COMMAND:
5903 switch (HIWORD(wp))
5904 {
5905 case BN_CLICKED:
5906 switch (LOWORD(wp))
5907 {
5911 FALSE);
5913 FALSE);
5915 FALSE);
5918 break;
5921 TRUE);
5922 break;
5925 TRUE);
5927 TRUE);
5930 break;
5931 }
5932 break;
5933 }
5934 break;
5935 }
5936 return ret;
5937}
#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:5798

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

5799{
5800 int defaultFormatID;
5801
5802 switch (data->contextInfo.dwExportFormat)
5803 {
5805 defaultFormatID = IDC_EXPORT_FORMAT_BASE64;
5806 break;
5808 defaultFormatID = IDC_EXPORT_FORMAT_CMS;
5809 break;
5811 defaultFormatID = IDC_EXPORT_FORMAT_PFX;
5812 break;
5813 default:
5814 defaultFormatID = IDC_EXPORT_FORMAT_DER;
5815 }
5816 SendMessageW(GetDlgItem(hwnd, defaultFormatID), BM_CLICK, 0, 0);
5817 if (defaultFormatID == IDC_EXPORT_FORMAT_PFX)
5818 {
5823 }
5824 else
5825 {
5830 }
5831}
#define BM_CLICK
Definition: winuser.h:1917

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

5647{
5649 DWORD size;
5650
5652 NULL, &size))
5653 {
5655 if (info)
5656 {
5659 {
5661 info = NULL;
5662 }
5663 }
5664 }
5665 return info;
5666}
#define CERT_KEY_PROV_INFO_PROP_ID
Definition: wincrypt.h:2686

Referenced by export_private_key_dlg_proc(), and save_pfx().

◆ export_info_has_private_key()

static BOOL export_info_has_private_key ( PCCRYPTUI_WIZ_EXPORT_INFO  pExportInfo)
static

Definition at line 5780 of file main.c.

5781{
5782 BOOL ret = FALSE;
5783
5785 {
5786 DWORD size;
5787
5788 /* If there's a CRYPT_KEY_PROV_INFO set for this cert, assume the
5789 * cert has a private key.
5790 */
5793 ret = TRUE;
5794 }
5795 return ret;
5796}

Referenced by show_export_ui().

◆ export_is_key_exportable()

static BOOL export_is_key_exportable ( HCRYPTPROV  hProv,
DWORD  keySpec 
)
static

Definition at line 5686 of file main.c.

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

Referenced by export_private_key_dlg_proc().

◆ export_password_dlg_proc()

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

Definition at line 5956 of file main.c.

5958{
5959 LRESULT ret = 0;
5960 struct ExportWizData *data;
5961
5962 switch (msg)
5963 {
5964 case WM_INITDIALOG:
5965 {
5967
5968 data = (struct ExportWizData *)page->lParam;
5970 break;
5971 }
5972 case WM_NOTIFY:
5973 {
5974 NMHDR *hdr = (NMHDR *)lp;
5975
5976 switch (hdr->code)
5977 {
5978 case PSN_SETACTIVE:
5981 ret = TRUE;
5982 break;
5983 case PSN_WIZNEXT:
5984 {
5985 HWND passwordEdit = GetDlgItem(hwnd, IDC_EXPORT_PASSWORD);
5986 HWND passwordConfirmEdit = GetDlgItem(hwnd,
5988 DWORD passwordLen = SendMessageW(passwordEdit, WM_GETTEXTLENGTH,
5989 0, 0);
5990 DWORD passwordConfirmLen = SendMessageW(passwordConfirmEdit,
5991 WM_GETTEXTLENGTH, 0, 0);
5992
5994 if (!passwordLen && !passwordConfirmLen)
5995 data->contextInfo.pwszPassword = NULL;
5996 else if (passwordLen != passwordConfirmLen)
5997 {
6000 ret = 1;
6001 }
6002 else
6003 {
6005 (passwordLen + 1) * sizeof(WCHAR));
6006 LPWSTR passwordConfirm = HeapAlloc(GetProcessHeap(), 0,
6007 (passwordConfirmLen + 1) * sizeof(WCHAR));
6009
6010 if (password && passwordConfirm)
6011 {
6012 SendMessageW(passwordEdit, WM_GETTEXT, passwordLen + 1,
6013 (LPARAM)password);
6014 SendMessageW(passwordConfirmEdit, WM_GETTEXT,
6015 passwordConfirmLen + 1, (LPARAM)passwordConfirm);
6016 if (lstrcmpW(password, passwordConfirm))
6017 {
6020 ret = 1;
6021 }
6022 else
6023 {
6024 data->contextInfo.pwszPassword = password;
6026 data->freePassword = TRUE;
6027 }
6028 }
6029 if (freePassword)
6031 HeapFree(GetProcessHeap(), 0, passwordConfirm);
6032 }
6033 break;
6034 }
6035 }
6036 break;
6037 }
6038 }
6039 return ret;
6040}
#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:5939
static WCHAR password[]
Definition: url.c:33
BOOL freePassword
Definition: main.c:5595

Referenced by show_export_ui().

◆ export_password_mismatch()

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

Definition at line 5939 of file main.c.

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

Referenced by export_password_dlg_proc().

◆ export_private_key_dlg_proc()

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

Definition at line 5703 of file main.c.

5705{
5706 LRESULT ret = 0;
5707 struct ExportWizData *data;
5708
5709 switch (msg)
5710 {
5711 case WM_INITDIALOG:
5712 {
5715 HCRYPTPROV hProv = 0;
5716 int errorID = 0;
5717
5718 data = (struct ExportWizData *)page->lParam;
5720 /* Get enough information about a key to see whether it's exportable.
5721 */
5723 data->exportInfo.u.pCertContext)))
5727 else if (!export_is_key_exportable(hProv, info->dwKeySpec))
5729
5730 if (errorID)
5731 {
5733
5736 WM_SETTEXT, 0, (LPARAM)error);
5738 }
5739 else
5740 data->keyProvInfo = info;
5741 if (hProv)
5744 0, 0);
5745 break;
5746 }
5747 case WM_NOTIFY:
5748 {
5749 NMHDR *hdr = (NMHDR *)lp;
5750
5751 switch (hdr->code)
5752 {
5753 case PSN_SETACTIVE:
5756 ret = TRUE;
5757 break;
5758 case PSN_WIZNEXT:
5761 {
5762 data->contextInfo.dwExportFormat =
5764 data->contextInfo.fExportPrivateKeys = FALSE;
5765 }
5766 else
5767 {
5768 data->contextInfo.dwExportFormat =
5770 data->contextInfo.fExportPrivateKeys = TRUE;
5771 }
5772 break;
5773 }
5774 break;
5775 }
5776 }
5777 return ret;
5778}
#define IDC_EXPORT_PRIVATE_KEY_YES
Definition: cryptuires.h:278
#define IDS_EXPORT_PRIVATE_KEY_NON_EXPORTABLE
Definition: cryptuires.h:174
#define IDS_EXPORT_PRIVATE_KEY_UNAVAILABLE
Definition: cryptuires.h:173
#define IDC_EXPORT_PRIVATE_KEY_UNAVAILABLE
Definition: cryptuires.h:280
#define IDC_EXPORT_PRIVATE_KEY_NO
Definition: cryptuires.h:279
BOOL WINAPI CryptReleaseContext(HCRYPTPROV hProv, DWORD dwFlags)
Definition: crypt.c:648
static BOOL export_is_key_exportable(HCRYPTPROV hProv, DWORD keySpec)
Definition: main.c:5686
static PCRYPT_KEY_PROV_INFO export_get_private_key_info(PCCERT_CONTEXT cert)
Definition: main.c:5646
static BOOL export_acquire_private_key(const CRYPT_KEY_PROV_INFO *info, HCRYPTPROV *phProv)
Definition: main.c:5668
ULONG_PTR HCRYPTPROV
Definition: wincrypt.h:46

Referenced by show_export_ui().

◆ export_validate_filename()

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

Definition at line 6094 of file main.c.

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

Referenced by export_file_dlg_proc().

◆ export_welcome_dlg_proc()

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

Definition at line 5603 of file main.c.

5605{
5606 LRESULT ret = 0;
5607
5608 switch (msg)
5609 {
5610 case WM_INITDIALOG:
5611 {
5612 struct ExportWizData *data;
5614 WCHAR fontFace[MAX_STRING_LEN];
5615 HDC hDC = GetDC(hwnd);
5616 int height;
5617
5618 data = (struct ExportWizData *)page->lParam;
5621 data->titleFont = CreateFontW(height, 0, 0, 0, FW_BOLD, 0, 0, 0,
5625 (WPARAM)data->titleFont, TRUE);
5626 ReleaseDC(hwnd, hDC);
5627 break;
5628 }
5629 case WM_NOTIFY:
5630 {
5631 NMHDR *hdr = (NMHDR *)lp;
5632
5633 switch (hdr->code)
5634 {
5635 case PSN_SETACTIVE:
5637 ret = TRUE;
5638 break;
5639 }
5640 break;
5641 }
5642 }
5643 return ret;
5644}
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:92
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 2635 of file main.c.

2636{
2637 WCHAR *str = NULL;
2640
2641 if (len)
2642 {
2643 str = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
2644 if (str)
2647 }
2648 return str;
2649}
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
Definition: str.c:702
#define CERT_X500_NAME_STR
Definition: wincrypt.h:3486
#define CERT_NAME_STR_CRLF_FLAG
Definition: wincrypt.h:3490

Referenced by field_format_detailed_issuer(), and field_format_detailed_subject().

◆ field_format_detailed_extension()

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

Definition at line 2943 of file main.c.

2944{
2948
2949 if (!str)
2951 return str;
2952}
static WCHAR * field_format_extension_hex_with_ascii(const CERT_EXTENSION *ext)
Definition: main.c:2873
#define CRYPT_FORMAT_STR_MULTI_LINE
Definition: wincrypt.h:3510
#define CRYPT_FORMAT_STR_NO_HEX
Definition: wincrypt.h:3511

Referenced by add_cert_extension_detail().

◆ field_format_detailed_issuer()

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

Definition at line 2651 of file main.c.

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

◆ field_format_detailed_public_key()

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

Definition at line 2738 of file main.c.

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

◆ field_format_detailed_subject()

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

Definition at line 2661 of file main.c.

2662{
2663 return field_format_detailed_cert_name(&cert->pCertInfo->Subject);
2664}

◆ field_format_extension_hex_with_ascii()

static WCHAR * field_format_extension_hex_with_ascii ( const CERT_EXTENSION ext)
static

Definition at line 2873 of file main.c.

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

Referenced by field_format_detailed_extension().

◆ field_format_from_date()

static WCHAR * field_format_from_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2687 of file main.c.

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

◆ field_format_issuer()

static WCHAR * field_format_issuer ( PCCERT_CONTEXT  cert)
static

Definition at line 2629 of file main.c.

◆ field_format_public_key()

static WCHAR * field_format_public_key ( PCCERT_CONTEXT  cert)
static

Definition at line 2697 of file main.c.

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

◆ field_format_serial_number()

static WCHAR * field_format_serial_number ( PCCERT_CONTEXT  cert)
static

Definition at line 2623 of file main.c.

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

◆ field_format_subject()

static WCHAR * field_format_subject ( PCCERT_CONTEXT  cert)
static

Definition at line 2656 of file main.c.

◆ field_format_to_date()

static WCHAR * field_format_to_date ( PCCERT_CONTEXT  cert)
static

Definition at line 2692 of file main.c.

2693{
2694 return format_long_date(&cert->pCertInfo->NotAfter);
2695}

◆ field_format_version()

static WCHAR * field_format_version ( PCCERT_CONTEXT  cert)
static

Definition at line 2597 of file main.c.

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

◆ find_oid_in_list()

static LONG_PTR find_oid_in_list ( HWND  lv,
LPCSTR  oid 
)
static

Definition at line 637 of file main.c.

638{
642
643 if (oidInfo)
644 {
645 LVFINDINFOW findInfo;
646
647 findInfo.flags = LVFI_PARAM;
648 findInfo.lParam = (LPARAM)oidInfo;
649 ret = SendMessageW(lv, LVM_FINDITEMW, -1, (LPARAM)&findInfo);
650 }
651 else
652 {
653 LVFINDINFOA findInfo;
654
655 findInfo.flags = LVFI_STRING;
656 findInfo.psz = oid;
657 ret = SendMessageW(lv, LVM_FINDITEMA, -1, (LPARAM)&findInfo);
658 }
659 return ret;
660}
#define LVFI_STRING
Definition: commctrl.h:2437
#define LVFI_PARAM
Definition: commctrl.h:2436
#define LVM_FINDITEMW
Definition: commctrl.h:2466
#define LVM_FINDITEMA
Definition: commctrl.h:2465
LPARAM lParam
Definition: commctrl.h:2458
#define CRYPT_ENHKEY_USAGE_OID_GROUP_ID
Definition: wincrypt.h:1690

Referenced by cert_mgr_advanced_dlg_proc(), and is_oid_in_list().

◆ find_policy_qualifier()

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

Definition at line 2210 of file main.c.

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

Referenced by set_issuer_statement().

◆ findSupportedOID()

static struct OIDToString * findSupportedOID ( LPCSTR  oid)
static

Definition at line 1974 of file main.c.

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

Referenced by add_local_oid_text_to_control().

◆ format_enhanced_key_usage_value()

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

Definition at line 3013 of file main.c.

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

◆ format_hex_string()

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

Definition at line 2607 of file main.c.

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

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

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

Referenced by field_format_from_date(), and field_format_to_date().

◆ free_certs()

static void free_certs ( HWND  lv)
static

Definition at line 531 of file main.c.

532{
534 int items = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0), i;
535
536 for (i = 0; i < items; i++)
537 {
538 item.mask = LVIF_PARAM;
539 item.iItem = i;
540 item.iSubItem = 0;
543 }
544}
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 3772 of file main.c.

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

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

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

Referenced by CryptUIDlgSelectCertificateA(), and prop_sheet_pages_AtoW().

◆ free_store_info()

static void free_store_info ( HWND  tree)
static

Definition at line 1475 of file main.c.

1476{
1478 0);
1479
1480 while (next)
1481 {
1482 TVITEMW item;
1483
1484 memset(&item, 0, sizeof(item));
1485 item.mask = TVIF_HANDLE | TVIF_PARAM;
1486 item.hItem = next;
1488 if (item.lParam)
1489 {
1490 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1491
1492 if (storeInfo->type == SystemStore)
1493 HeapFree(GetProcessHeap(), 0, storeInfo->u.name);
1494 HeapFree(GetProcessHeap(), 0, storeInfo);
1495 }
1497 (LPARAM)next);
1498 }
1499}
#define TVM_GETITEMW
Definition: commctrl.h:3486
struct _TREEITEM * HTREEITEM
Definition: commctrl.h:3264
#define TVIF_HANDLE
Definition: commctrl.h:3270
#define TVGN_CHILD
Definition: commctrl.h:3456
#define TVGN_NEXT
Definition: commctrl.h:3453
#define TVM_GETNEXTITEM
Definition: commctrl.h:3449
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 2561 of file main.c.

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

Referenced by init_general_page().

◆ general_dlg_proc()

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

Definition at line 2510 of file main.c.

2512{
2515
2516 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
2517
2518 switch (msg)
2519 {
2520 case WM_INITDIALOG:
2521 page = (PROPSHEETPAGEW *)lp;
2522 pCertViewInfo = (PCCRYPTUI_VIEWCERTIFICATE_STRUCTW)page->lParam;
2523 if (pCertViewInfo->dwFlags & CRYPTUI_DISABLE_ADDTOSTORE)
2526 set_general_info(hwnd, pCertViewInfo);
2527 break;
2528 case WM_COMMAND:
2529 switch (wp)
2530 {
2531 case IDC_ADDTOSTORE:
2533 break;
2535 {
2536 struct IssuerStatement *issuerStatement =
2538
2539 if (issuerStatement)
2540 {
2541 if (issuerStatement->userNotice)
2542 show_user_notice(hwnd, issuerStatement);
2543 else if (issuerStatement->cps)
2544 {
2545 IBindCtx *bctx = NULL;
2546
2547 CreateBindCtx(0, &bctx);
2548 HlinkSimpleNavigateToString(issuerStatement->cps, NULL,
2549 NULL, NULL, bctx, NULL, HLNF_OPENINNEWWINDOW, 0);
2550 IBindCtx_Release(bctx);
2551 }
2552 }
2553 break;
2554 }
2555 }
2556 break;
2557 }
2558 return 0;
2559}
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:2450
static void show_user_notice(HWND hwnd, struct IssuerStatement *issuerStatement)
Definition: main.c:2504
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
Definition: umon.c:922

Referenced by init_general_page().

◆ get_cert_display_name()

static WCHAR * get_cert_display_name ( PCCERT_CONTEXT  cert)
static

Definition at line 4007 of file main.c.

4008{
4010
4011 if (!name)
4013 return name;
4014}
static WCHAR * get_cert_property_as_string(PCCERT_CONTEXT cert, DWORD prop)
Definition: main.c:3307

Referenced by show_cert_chain().

◆ get_cert_mgr_usages()

static LPSTR get_cert_mgr_usages ( void  )
static

Definition at line 179 of file main.c.

180{
181 static const WCHAR keyName[] = { 'S','o','f','t','w','a','r','e','\\','M',
182 'i','c','r','o','s','o','f','t','\\','C','r','y','p','t','o','g','r','a',
183 'p','h','y','\\','U','I','\\','C','e','r','t','m','g','r','\\','P','u',
184 'r','p','o','s','e',0 };
185 LPSTR str = NULL;
186 HKEY key;
187
188 if (!RegCreateKeyExW(HKEY_CURRENT_USER, keyName, 0, NULL, 0, KEY_READ,
189 NULL, &key, NULL))
190 {
191 LONG rc;
192 DWORD type, size;
193
194 rc = RegQueryValueExA(key, "Purpose", NULL, &type, NULL, &size);
195 if ((!rc || rc == ERROR_MORE_DATA) && type == REG_SZ)
196 {
198 if (str)
199 {
200 rc = RegQueryValueExA(key, "Purpose", NULL, NULL, (LPBYTE)str,
201 &size);
202 if (rc)
203 {
205 str = NULL;
206 }
207 }
208 }
210 }
211 return str;
212}
#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:4038
#define REG_SZ
Definition: layer.c:22
#define KEY_READ
Definition: nt_native.h:1023
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11

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

◆ get_cert_name_string()

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

Definition at line 1776 of file main.c.

1778{
1779 LPWSTR buf = NULL;
1780 DWORD len;
1781
1783 if (len)
1784 {
1785 buf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
1786 if (buf)
1788 }
1789 return buf;
1790}

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

3308{
3309 WCHAR *name = NULL;
3310 DWORD cb;
3311
3313 {
3315 if (name)
3316 {
3318 {
3320 name = NULL;
3321 }
3322 }
3323 }
3324 return name;
3325}

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

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

Referenced by add_cert_to_list(), and cert_mgr_show_cert_usages().

◆ get_cps_str_from_qualifier()

static WCHAR * get_cps_str_from_qualifier ( const CRYPT_OBJID_BLOB qualifier)
static

Definition at line 2229 of file main.c.

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

Referenced by set_issuer_statement().

◆ get_hierarchy_data_from_tree_item()

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

Definition at line 3981 of file main.c.

3983{
3984 struct hierarchy_data *data = NULL;
3986
3987 do {
3990
3991 if (!parent)
3992 root = hItem;
3993 hItem = parent;
3994 } while (hItem);
3995 if (root)
3996 {
3997 TVITEMW item;
3998
3999 item.mask = TVIF_PARAM;
4000 item.hItem = root;
4002 data = (struct hierarchy_data *)item.lParam;
4003 }
4004 return data;
4005}
struct _root root
#define TVGN_PARENT
Definition: commctrl.h:3455
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 2250 of file main.c.

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

Referenced by set_issuer_statement().

◆ hierarchy_callback()

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

Definition at line 4229 of file main.c.

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

Referenced by init_hierarchy_page().

◆ hierarchy_dlg_proc()

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

Definition at line 4151 of file main.c.

4153{
4155 struct hierarchy_data *data;
4156 LRESULT ret = 0;
4158
4159 TRACE("(%p, %08x, %08lx, %08lx)\n", hwnd, msg, wp, lp);
4160
4161 switch (msg)
4162 {
4163 case WM_INITDIALOG:
4164 page = (PROPSHEETPAGEW *)lp;
4165 data = (struct hierarchy_data *)page->lParam;
4167 break;
4168 case WM_NOTIFY:
4169 {
4170 NMHDR *hdr;
4171
4172 hdr = (NMHDR *)lp;
4173 switch (hdr->code)
4174 {
4175 case TVN_SELCHANGEDW:
4176 {
4177 NMTREEVIEWW *nm = (NMTREEVIEWW*)lp;
4179 CRYPT_PROVIDER_SGNR *provSigner;
4180
4183 provSigner = WTHelperGetProvSignerFromChain(
4184 (CRYPT_PROVIDER_DATA *)data->pCertViewInfo->u.pCryptProviderData,
4185 data->pCertViewInfo->idxSigner,
4186 data->pCertViewInfo->fCounterSigner,
4187 data->pCertViewInfo->idxCounterSigner);
4190 &provSigner->pasCertChain[selection]);
4191 break;
4192 }
4193 case NM_DBLCLK:
4196 ret = 1;
4197 break;
4198 }
4199 break;
4200 }
4201 case WM_COMMAND:
4202 switch (wp)
4203 {
4206 break;
4207 }
4208 break;
4209 case WM_REFRESH_VIEW:
4210 {
4211 TVITEMW item;
4212
4213 /* Get hierarchy data */
4214 memset(&item, 0, sizeof(item));
4215 item.mask = TVIF_HANDLE | TVIF_PARAM;
4217 0);
4219 /* Delete the contents of the tree */
4221 /* Reinitialize the tree */
4223 break;
4224 }
4225 }
4226 return ret;
4227}
#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:4106
static void set_certificate_status(HWND hwnd, const CRYPT_PROVIDER_CERT *cert)
Definition: main.c:4067
static void show_cert_hierarchy(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:4098
static DWORD lparam_to_index(struct hierarchy_data *data, LPARAM lp)
Definition: main.c:3969
static struct hierarchy_data * get_hierarchy_data_from_tree_item(HWND tree, HTREEITEM hItem)
Definition: main.c:3981
#define TVN_SELCHANGEDW
Definition: commctrl.h:3648
#define TVI_ROOT
Definition: commctrl.h:3368
#define TVM_DELETEITEM
Definition: commctrl.h:3414
#define TVGN_ROOT
Definition: commctrl.h:3452
CRYPT_PROVIDER_CERT * pasCertChain
Definition: wintrust.h:235
TVITEMW itemNew
Definition: commctrl.h:3638
HTREEITEM hItem
Definition: commctrl.h:3317
LPARAM lParam
Definition: commctrl.h:3325

Referenced by init_hierarchy_page().

◆ import_cert()

static BOOL import_cert ( PCCERT_CONTEXT  cert,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4572 of file main.c.

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

Referenced by do_import(), and import_store().

◆ import_crl()

static BOOL import_crl ( PCCRL_CONTEXT  crl,
HCERTSTORE  hDestCertStore 
)
static

Definition at line 4597 of file main.c.

4598{
4599 HCERTSTORE store;
4600 BOOL ret;
4601
4602 if (!crl)
4603 {
4605 return FALSE;
4606 }
4607 if (hDestCertStore) store = hDestCertStore;
4608 else
4609 {
4610 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4612 {
4613 WARN("unable to open certificate store\n");
4614 return FALSE;
4615 }
4616 }
4619 if (!hDestCertStore) CertCloseStore(store, 0);
4620 return ret;
4621}
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 4623 of file main.c.

4624{
4625 HCERTSTORE store;
4626 BOOL ret;
4627
4628 if (!ctl)
4629 {
4631 return FALSE;
4632 }
4633 if (hDestCertStore) store = hDestCertStore;
4634 else
4635 {
4636 static const WCHAR trust[] = { 'T','r','u','s','t',0 };
4637
4638 if (!(store = CertOpenStore(CERT_STORE_PROV_SYSTEM_W, 0, 0,
4640 {
4641 WARN("unable to open certificate store\n");
4642 return FALSE;
4643 }
4644 }
4645 ret = CertAddCTLContextToStore(store, ctl,
4647 if (!hDestCertStore) CertCloseStore(store, 0);
4648 return ret;
4649}
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 4838 of file main.c.

4840{
4842 BOOL ret;
4843
4844 if ((source = open_store_from_file(dwFlags, fileName, NULL)))
4845 {
4848 }
4849 else
4850 ret = FALSE;
4851 return ret;
4852}
WCHAR szTitle[MAX_LOADSTRING]
Definition: main.c:43
static HCERTSTORE open_store_from_file(DWORD dwFlags, LPCWSTR fileName, DWORD *pContentType)
Definition: main.c:4791
static char * dest
Definition: rtl.c:135

Referenced by do_import().

◆ import_file_dlg_proc()

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

Definition at line 5050 of file main.c.

5052{
5053 LRESULT ret = 0;
5054 struct ImportWizData *data;
5055
5056 switch (msg)
5057 {
5058 case WM_INITDIALOG:
5059 {
5061
5062 data = (struct ImportWizData *)page->lParam;
5064 if (data->fileName)
5065 {
5066 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5067
5068 SendMessageW(fileNameEdit, WM_SETTEXT, 0, (LPARAM)data->fileName);
5069 }
5070 break;
5071 }
5072 case WM_NOTIFY:
5073 {
5074 NMHDR *hdr = (NMHDR *)lp;
5075
5076 switch (hdr->code)
5077 {
5078 case PSN_SETACTIVE:
5081 ret = TRUE;
5082 break;
5083 case PSN_WIZNEXT:
5084 {
5085 HWND fileNameEdit = GetDlgItem(hwnd, IDC_IMPORT_FILENAME);
5086 DWORD len = SendMessageW(fileNameEdit, WM_GETTEXTLENGTH, 0, 0);
5087
5089 if (!len)
5090 {
5091 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5094 ret = 1;
5095 }
5096 else
5097 {
5099 (len + 1) * sizeof(WCHAR));
5100
5101 if (fileName)
5102 {
5103 SendMessageW(fileNameEdit, WM_GETTEXT, len + 1,
5104 (LPARAM)fileName);
5106 {
5109 ret = 1;
5110 }
5111 else
5112 data->fileName = fileName;
5113 }
5114 }
5115 break;
5116 }
5117 }
5118 break;
5119 }
5120 case WM_COMMAND:
5121 switch (wp)
5122 {
5124 {
5126 WCHAR fileBuf[MAX_PATH];
5127
5129 memset(&ofn, 0, sizeof(ofn));
5130 ofn.lStructSize = sizeof(ofn);
5131 ofn.hwndOwner = hwnd;
5133 ofn.lpstrFile = fileBuf;
5134 ofn.nMaxFile = ARRAY_SIZE(fileBuf);
5135#ifdef __REACTOS__
5137#endif
5138 fileBuf[0] = 0;
5139 if (GetOpenFileNameW(&ofn))
5141 0, (LPARAM)ofn.lpstrFile);
5143 break;
5144 }
5145 }
5146 break;
5147 }
5148 return ret;
5149}
#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:4978
static void import_warning(DWORD dwFlags, HWND hwnd, LPCWSTR szTitle, int warningID)
Definition: main.c:4695
static WCHAR * make_import_file_filter(DWORD dwFlags)
Definition: main.c:4938
LPWSTR fileName
Definition: main.c:4860
DWORD Flags
Definition: commdlg.h:342

Referenced by show_import_ui().

◆ import_finish_dlg_proc()

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

Definition at line 5368 of file main.c.

5370{
5371 LRESULT ret = 0;
5372 struct ImportWizData *data;
5373
5374 switch (msg)
5375 {
5376 case WM_INITDIALOG:
5377 {
5380 RECT rc;
5382
5383 data = (struct ImportWizData *)page->lParam;
5386 (WPARAM)data->titleFont, TRUE);
5387 GetWindowRect(lv, &rc);
5388 column.mask = LVCF_WIDTH;
5389 column.cx = (rc.right - rc.left) / 2 - 2;
5393 break;
5394 }
5395 case WM_NOTIFY:
5396 {
5397 NMHDR *hdr = (NMHDR *)lp;
5398
5399 switch (hdr->code)
5400 {
5401 case PSN_SETACTIVE:
5402 {
5404
5410 ret = TRUE;
5411 break;
5412 }
5413 case PSN_WIZFINISH:
5414 {
5416 if ((data->success = do_import(data->dwFlags, hwnd,
5417 data->pwszWizardTitle, &data->importSrc, data->hDestCertStore)))
5418 {
5420 LPCWSTR pTitle;
5421
5422 if (data->pwszWizardTitle)
5423 pTitle = data->pwszWizardTitle;
5424 else
5425 {
5427 pTitle = title;
5428 }
5430 MessageBoxW(hwnd, message, pTitle, MB_OK);
5431 }
5432 else
5433 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5435 break;
5436 }
5437 }
5438 break;
5439 }
5440 }
5441 return ret;
5442}
#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:5266

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

4761{
4762 BOOL ret;
4763
4765 {
4768 PCCTL_CONTEXT ctl = NULL;
4769
4770 do {
4772 if (cert)
4774 } while (ret && cert);
4775 do {
4777 if (crl)
4778 ret = import_crl(crl, dest);
4779 } while (ret && crl);
4780 do {
4781 ctl = CertEnumCTLsInStore(source, ctl);
4782 if (ctl)
4783 ret = import_ctl(ctl, dest);
4784 } while (ret && ctl);
4785 }
4786 else
4788 return ret;
4789}
static BOOL check_store_context_type(DWORD dwFlags, HCERTSTORE store)
Definition: main.c:4720

Referenced by do_import(), and import_file().

◆ import_store_dlg_proc()

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

Definition at line 5151 of file main.c.

5153{
5154 LRESULT ret = 0;
5155 struct ImportWizData *data;
5156
5157 switch (msg)
5158 {
5159 case WM_INITDIALOG:
5160 {
5162
5163 data = (struct ImportWizData *)page->lParam;
5165 if (!data->hDestCertStore)
5166 {
5168 0, 0);
5172 }
5173 else
5174 {
5175 WCHAR storeTitle[MAX_STRING_LEN];
5176
5178 0, 0);
5185 0, (LPARAM)storeTitle);
5186 }
5187 break;
5188 }
5189 case WM_NOTIFY:
5190 {
5191 NMHDR *hdr = (NMHDR *)lp;
5192
5193 switch (hdr->code)
5194 {
5195 case PSN_SETACTIVE:
5198 ret = TRUE;
5199 break;
5200 case PSN_WIZNEXT:
5201 {
5204 !data->hDestCertStore)
5205 {
5206 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5209 ret = 1;
5210 }
5211 break;
5212 }
5213 }
5214 break;
5215 }
5216 case WM_COMMAND:
5217 switch (wp)
5218 {
5221 data->autoDest = TRUE;
5224 break;
5227 data->autoDest = FALSE;
5230 break;
5232 {
5235 CRYPTUI_ENUM_DATA enumData = { 0, NULL, 1, &enumArgs };
5236 CRYPTUI_SELECTSTORE_INFO_W selectInfo;
5237 HCERTSTORE store;
5238
5240 selectInfo.dwSize = sizeof(selectInfo);
5241 selectInfo.parent = hwnd;
5243 selectInfo.pwszTitle = NULL;
5244 selectInfo.pwszText = NULL;
5245 selectInfo.pEnumData = &enumData;
5246 selectInfo.pfnSelectedStoreCallback = NULL;
5247 if ((store = CryptUIDlgSelectStoreW(&selectInfo)))
5248 {
5249 WCHAR storeTitle[MAX_STRING_LEN];
5250
5252 ARRAY_SIZE(storeTitle));
5254 0, (LPARAM)storeTitle);
5255 data->hDestCertStore = store;
5256 data->freeDest = TRUE;
5257 }
5258 break;
5259 }
5260 }
5261 break;
5262 }
5263 return ret;
5264}
#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:1345
CRYPTUI_ENUM_DATA * pEnumData
Definition: main.c:1366
PFN_SELECTED_STORE_CB pfnSelectedStoreCallback
Definition: main.c:1367

Referenced by show_import_ui().

◆ import_validate_filename()

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

Definition at line 4978 of file main.c.

4980{
4981 HANDLE file;
4982 BOOL ret = FALSE;
4983
4985 OPEN_EXISTING, 0, NULL);
4987 {
4988 HCERTSTORE source = open_store_from_file(data->dwFlags, fileName,
4989 &data->contentType);
4990 int warningID = 0;
4991
4992 if (!source)
4993 warningID = IDS_IMPORT_BAD_FORMAT;
4994 else if (!check_store_context_type(data->dwFlags, source))
4995 warningID = IDS_IMPORT_TYPE_MISMATCH;
4996 else
4997 {
4998 data->importSrc.dwSubjectChoice =
5000 data->importSrc.u.hCertStore = source;
5001 data->freeSource = TRUE;
5002 ret = TRUE;
5003 }
5004 if (warningID)
5005 {
5006 import_warning(data->dwFlags, hwnd, data->pwszWizardTitle,
5007 warningID);
5008 }
5010 }
5011 else
5012 {
5014 LPCWSTR pTitle;
5015 LPWSTR msgBuf, fullError;
5016
5017 if (data->pwszWizardTitle)
5018 pTitle = data->pwszWizardTitle;
5019 else
5020 {
5022 pTitle = title;
5023 }
5027 GetLastError(), 0, (LPWSTR) &msgBuf, 0, NULL);
5028 fullError = HeapAlloc(GetProcessHeap(), 0,
5029 (lstrlenW(error) + lstrlenW(fileName) + lstrlenW(msgBuf) + 3)
5030 * sizeof(WCHAR));
5031 if (fullError)
5032 {
5033 LPWSTR ptr = fullError;
5034
5035 lstrcpyW(ptr, error);
5036 ptr += lstrlenW(error);
5037 lstrcpyW(ptr, fileName);
5038 ptr += lstrlenW(fileName);
5039 *ptr++ = ':';
5040 *ptr++ = '\n';
5041 lstrcpyW(ptr, msgBuf);
5042 MessageBoxW(hwnd, fullError, pTitle, MB_ICONERROR | MB_OK);
5043 HeapFree(GetProcessHeap(), 0, fullError);
5044 }
5045 LocalFree(msgBuf);
5046 }
5047 return ret;
5048}
#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 4715 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 4695 of file main.c.

4697{
4698 if (!(dwFlags & CRYPTUI_WIZ_NO_UI))
4699 {
4701 LPCWSTR pTitle;
4702
4703 if (szTitle)
4704 pTitle = szTitle;
4705 else
4706 {
4708 pTitle = title;
4709 }
4712 }
4713}

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

◆ import_welcome_dlg_proc()

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

Definition at line 4869 of file main.c.

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

Referenced by show_import_ui().

◆ index_to_lparam()

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

Definition at line 3954 of file main.c.

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

Referenced by show_cert_chain().

◆ init_columns()

static void init_columns ( HWND  lv,
DWORD  flags 
)
static

Definition at line 7022 of file main.c.

7023{
7026 DWORD i = 0;
7027
7029 column.mask = LVCF_WIDTH | LVCF_TEXT;
7030 column.cx = 90;
7031 column.pszText = buf;
7033 {
7036 }
7038 {
7041 }
7043 {
7046 }
7048 {
7051 }
7053 {
7056 }
7058 {
7061 }
7062}
#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 3919 of file main.c.

3921{
3922 BOOL ret;
3924 sizeof(struct detail_data));
3925
3926 if (data)
3927 {
3928 data->pCertViewInfo = pCertViewInfo;
3929 data->pfPropertiesChanged = pfPropertiesChanged;
3930 data->cFields = 0;
3931 data->fields = NULL;
3932 memset(page, 0, sizeof(PROPSHEETPAGEW));
3933 page->dwSize = sizeof(PROPSHEETPAGEW);
3934 page->dwFlags = PSP_USECALLBACK;
3935 page->pfnCallback = detail_callback;
3936 page->hInstance = hInstance;
3937 page->u.pszTemplate = MAKEINTRESOURCEW(IDD_DETAIL);
3938 page->pfnDlgProc = detail_dlg_proc;
3939 page->lParam = (LPARAM)data;
3940 ret = TRUE;
3941 }
3942 else
3943 ret = FALSE;
3944 return ret;
3945}
#define IDD_DETAIL
Definition: cryptuires.h:184
static UINT CALLBACK detail_callback(HWND hwnd, UINT msg, PROPSHEETPAGEW *page)
Definition: main.c:3903
static LRESULT CALLBACK detail_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:3796
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 2582 of file main.c.

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

Referenced by show_cert_dialog().

◆ init_hierarchy_page()

static BOOL init_hierarchy_page ( PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo,
PROPSHEETPAGEW page 
)
static

Definition at line 4247 of file main.c.

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

Referenced by show_cert_dialog().

◆ initialize_purpose_selection()

static void initialize_purpose_selection ( HWND  hwnd)
static

Definition at line 220 of file main.c.

221{
225 int index;
226
234 if ((usages = get_cert_mgr_usages()))
235 {
236 LPSTR ptr, comma;
237
238 for (ptr = usages, comma = strchr(ptr, ','); ptr && *ptr;
239 ptr = comma ? comma + 1 : NULL,
240 comma = ptr ? strchr(ptr, ',') : NULL)
241 {
243
244 if (comma)
245 *comma = 0;
247 {
249 (LPARAM)info->pwszName);
251 }
252 }
254 }
255}
#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 4522 of file main.c.

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

Referenced by choose_store_for_cert().

◆ is_oid_in_list()

static BOOL is_oid_in_list ( HWND  hwnd,
LPCSTR  oid 
)
static

Definition at line 3219 of file main.c.

3220{
3222 != -1;
3223}

Referenced by add_purpose_dlg_proc().

◆ is_valid_oid()

static BOOL is_valid_oid ( LPCSTR  oid)
static

Definition at line 3181 of file main.c.

3182{
3183 BOOL ret;
3184
3185 if (oid[0] != '0' && oid[0] != '1' && oid[0] != '2')
3186 ret = FALSE;
3187 else if (oid[1] != '.')
3188 ret = FALSE;
3189 else if (!oid[2])
3190 ret = FALSE;
3191 else
3192 {
3193 const char *ptr;
3194 BOOL expectNum = TRUE;
3195
3196 for (ptr = oid + 2, ret = TRUE; ret && *ptr; ptr++)
3197 {
3198 if (expectNum)
3199 {
3200 if (!isdigit(*ptr))
3201 ret = FALSE;
3202 else if (*(ptr + 1) == '.')
3203 expectNum = FALSE;
3204 }
3205 else
3206 {
3207 if (*ptr != '.')
3208 ret = FALSE;
3209 else if (!(*(ptr + 1)))
3210 ret = FALSE;
3211 else
3212 expectNum = TRUE;
3213 }
3214 }
3215 }
3216 return ret;
3217}
#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 3969 of file main.c.

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

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

6180{
6181 int baseLen, allLen, totalLen = 2, baseID;
6182 LPWSTR filter = NULL, baseFilter, all;
6183 LPCWSTR filterStr;
6184
6185 switch (exportFormat)
6186 {
6189 filterStr = export_filter_cert;
6190 break;
6192 baseID = IDS_EXPORT_FILTER_PFX;
6193 filterStr = export_filter_pfx;
6194 break;
6196 baseID = IDS_EXPORT_FILTER_CMS;
6197 filterStr = export_filter_cms;
6198 break;
6199 default:
6200 switch (subjectChoice)
6201 {
6203 baseID = IDS_EXPORT_FILTER_CRL;
6204 filterStr = export_filter_crl;
6205 break;
6207 baseID = IDS_EXPORT_FILTER_CTL;
6208 filterStr = export_filter_ctl;
6209 break;
6212 filterStr = export_filter_sst;
6213 break;
6214 default:
6215 baseID = IDS_EXPORT_FILTER_CERT;
6216 filterStr = export_filter_cert;
6217 break;
6218 }
6219 }
6220 baseLen = LoadStringW(hInstance, baseID, (LPWSTR)&baseFilter, 0);
6221 totalLen += baseLen + lstrlenW(filterStr) + 2;
6223 totalLen += allLen + lstrlenW(filter_all) + 2;
6224 filter = HeapAlloc(GetProcessHeap(), 0, totalLen * sizeof(WCHAR));
6225 if (filter)
6226 {
6227 LPWSTR ptr;
6228
6229 ptr = filter;
6230 memcpy(ptr, baseFilter, baseLen * sizeof(WCHAR));
6231 ptr += baseLen;
6232 *ptr++ = 0;
6233 lstrcpyW(ptr, filterStr);
6234 ptr += lstrlenW(filterStr) + 1;
6235 memcpy(ptr, all, allLen * sizeof(WCHAR));
6236 ptr += allLen;
6237 *ptr++ = 0;
6239 ptr += lstrlenW(filter_all) + 1;
6240 *ptr++ = 0;
6241 }
6242 return filter;
6243}
#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:6176
static const WCHAR export_filter_ctl[]
Definition: main.c:6174
static const WCHAR export_filter_cert[]
Definition: main.c:6172
static const WCHAR export_filter_sst[]
Definition: main.c:6177
static const WCHAR filter_all[]
Definition: main.c:4921
static const WCHAR export_filter_cms[]
Definition: main.c:6175
static const WCHAR export_filter_crl[]
Definition: main.c:6173

Referenced by export_file_dlg_proc().

◆ make_import_file_filter()

static WCHAR * make_import_file_filter ( DWORD  dwFlags)
static

Definition at line 4938 of file main.c.

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

Referenced by import_file_dlg_proc().

◆ open_store_from_file()

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

Definition at line 4791 of file main.c.

4793{
4794 HCERTSTORE store = NULL;
4795 DWORD contentType = 0, expectedContentTypeFlags;
4796
4797 if (dwFlags &
4800 {
4801 expectedContentTypeFlags =
4806 expectedContentTypeFlags |=
4810 expectedContentTypeFlags |=
4814 expectedContentTypeFlags |=
4817 }
4818 else
4819 expectedContentTypeFlags =
4829
4831 expectedContentTypeFlags, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL,
4832 &contentType, NULL, &store, NULL, NULL);
4833 if (pContentType)
4834 *pContentType = contentType;
4835 return store;
4836}
BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType, DWORD *pdwFormatType, HCERTSTORE *phCertStore, HCRYPTMSG *phMsg, const void **ppvContext)
Definition: object.c:699
#define CERT_QUERY_CONTENT_FLAG_CTL
Definition: wincrypt.h:3544
#define CERT_QUERY_OBJECT_FILE
Definition: wincrypt.h:3526
#define CERT_QUERY_CONTENT_FLAG_CRL
Definition: wincrypt.h:3545
#define CERT_QUERY_CONTENT_FLAG_CERT
Definition: wincrypt.h:3543
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
Definition: wincrypt.h:3548
#define CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
Definition: wincrypt.h:3554
#define CERT_QUERY_FORMAT_FLAG_ALL
Definition: wincrypt.h:3589
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
Definition: wincrypt.h:3546
#define CERT_QUERY_CONTENT_FLAG_PFX
Definition: wincrypt.h:3561
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
Definition: wincrypt.h:3552
#define CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
Definition: wincrypt.h:3550

Referenced by import_file(), and import_validate_filename().

◆ prop_sheet_pages_AtoW()

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

Definition at line 7480 of file main.c.

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

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

Referenced by add_unformatted_text_to_control().

◆ redraw_states()

static void redraw_states ( HWND  list,
BOOL  enabled 
)
static

Definition at line 3327 of file main.c.

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

Referenced by select_purposes().

◆ refresh_details_view()

static void refresh_details_view ( HWND  hwnd)
static

Definition at line 3783 of file main.c.

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

Referenced by detail_dlg_proc().

◆ refresh_propsheet_pages()

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

Definition at line 3526 of file main.c.

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

Referenced by apply_general_changes().

◆ refresh_store_certs()

static void refresh_store_certs ( HWND  hwnd)
static

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

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

Referenced by do_export().

◆ save_cert_as_cms()

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

Definition at line 6487 of file main.c.

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

Referenced by do_export().

◆ save_cert_mgr_usages()

static void save_cert_mgr_usages ( HWND  hwnd)
static

Definition at line 662 of file main.c.

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

Referenced by cert_mgr_advanced_dlg_proc().

◆ save_der()

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

Definition at line 6449 of file main.c.

6450{
6452
6453 return WriteFile(file, pb, cb, &bytesWritten, NULL);
6454}
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 6561 of file main.c.

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

Referenced by do_export().

◆ save_serialized_store()

static BOOL save_serialized_store ( HANDLE  file,
HCERTSTORE  store 
)
static

Definition at line 6555 of file main.c.

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

Referenced by do_export().

◆ save_store_as_cms()

static BOOL save_store_as_cms ( HANDLE  file,
HCERTSTORE  store 
)
inlinestatic

Definition at line 6481 of file main.c.

6482{
6485}
#define CERT_STORE_SAVE_AS_PKCS7
Definition: wincrypt.h:2647

Referenced by do_export(), and save_cert_as_cms().

◆ select_cert_dlg_proc()

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

Definition at line 7286 of file main.c.

7287{
7288 struct SelectCertData *data;
7289
7290 switch (msg)
7291 {
7292 case WM_INITDIALOG:
7293 {
7294 struct SelectCertParam *param = (struct SelectCertParam *)lp;
7297 DWORD i = 0;
7298
7299 data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data));
7300 if (!data)
7301 return 0;
7302 data->cert = &param->cert;
7303 data->dateColumn = 4 -
7308 data->imageList = ImageList_Create(16, 16, ILC_COLOR4 | ILC_MASK, 2, 0);
7309 if (data->imageList)
7310 {
7311 HBITMAP bmp;
7312 COLORREF backColor = RGB(255, 0, 255);
7313
7315 ImageList_AddMasked(data->imageList, bmp, backColor);
7317 ImageList_SetBkColor(data->imageList, CLR_NONE);
7319 (LPARAM)data->imageList);
7320 }
7321 data->title = pcsc->szTitle;
7322 data->cStores = pcsc->cStores;
7323 data->rghStores = pcsc->rghStores;
7324 data->cPropSheetPages = pcsc->cPropSheetPages;
7325 data->rgPropSheetPages = pcsc->rgPropSheetPages;
7326 data->displayProc = pcsc->pDisplayCallback;
7327 data->callbackData = pcsc->pvCallbackData;
7329
7330 if (pcsc->szTitle)
7332 if (pcsc->szDisplayString)
7336 while (i < pcsc->cDisplayStores)
7340 break;
7341 }
7342#ifdef __REACTOS__
7343 case WM_DESTROY:
7347 break;
7348#endif
7349 case WM_NOTIFY:
7350 {
7351 NMHDR *hdr = (NMHDR *)lp;
7352
7353 switch (hdr->code)
7354 {
7355 case NM_DBLCLK:
7356 {
7358
7360 if (cert)
7362 break;
7363 }
7364 case LVN_COLUMNCLICK:
7365 {
7366 NMLISTVIEW *nmlv = (NMLISTVIEW *)lp;
7368
7369 /* FIXME: doesn't support swapping sort order between ascending and descending. */
7371 if (nmlv->iSubItem == data->dateColumn)
7373 else
7374 {
7375 struct SortData sortData;
7376
7377 sortData.hwnd = lv;
7378 sortData.column = nmlv->iSubItem;
7379 SendMessageW(lv, LVM_SORTITEMSEX, (WPARAM)&sortData,
7381 }
7382 break;
7383 }
7384 }
7385 break;
7386 }
7387 case WM_COMMAND:
7388 switch (wp)
7389 {
7390 case IDOK:
7391 {
7393
7395 if (!cert)
7396 {
7397 WCHAR buf[40], title[40];
7398
7400 if (!data->title)
7402 MessageBoxW(hwnd, buf, data->title ? data->title : title, MB_OK | MB_ICONWARNING);
7403 break;
7404 }
7406#ifndef __REACTOS__
7408 ImageList_Destroy(data->imageList);
7410#endif
7412 break;
7413 }
7414 case IDCANCEL:
7415#ifndef __REACTOS__
7418 ImageList_Destroy(data->imageList);
7420#endif
7422 break;
7424 {
7426
7428 if (cert)
7430 break;
7431 }
7432 }
7433 break;
7434 }
7435 return 0;
7436}
#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:7228
static PCCERT_CONTEXT select_cert_get_selected(HWND hwnd, int selection)
Definition: main.c:7210
static void init_columns(HWND lv, DWORD flags)
Definition: main.c:7022
static void add_store_certs(HWND lv, HCERTSTORE store, DWORD flags, PFNCFILTERPROC filter, void *callback_data)
Definition: main.c:7194
static int CALLBACK select_cert_sort_by_text(LPARAM lp1, LPARAM lp2, LPARAM lp)
Definition: main.c:7274
static void select_cert_view(HWND hwnd, PCCERT_CONTEXT cert, struct SelectCertData *data)
Definition: main.c:7250
HWND hwnd
Definition: main.c:7270
PFNCCERTDISPLAYPROC pDisplayCallback
Definition: cryptuiapi.h:378
#define MB_ICONWARNING
Definition: winuser.h:786

Referenced by CryptUIDlgSelectCertificateW().

◆ select_cert_get_selected()

static PCCERT_CONTEXT select_cert_get_selected ( HWND  hwnd,
int  selection 
)
static

Definition at line 7210 of file main.c.

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

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

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

Referenced by select_cert_dlg_proc().

◆ select_cert_update_view_button()

static void select_cert_update_view_button ( HWND  hwnd)
static

Definition at line 7228 of file main.c.

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

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

7251{
7253
7254 if (data->displayProc && data->displayProc(cert, hwnd, data->callbackData))
7255 return;
7256 memset(&viewInfo, 0, sizeof(viewInfo));
7257 viewInfo.dwSize = sizeof(viewInfo);
7258 viewInfo.hwndParent = hwnd;
7259 viewInfo.pCertContext = cert;
7260 viewInfo.cStores = data->cStores;
7261 viewInfo.rghStores = data->rghStores;
7262 viewInfo.cPropSheetPages = data->cPropSheetPages;
7263 viewInfo.rgPropSheetPages = data->rgPropSheetPages;
7264 /* FIXME: this should be modal */
7265 CryptUIDlgViewCertificateW(&viewInfo, NULL);
7266}
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 3384 of file main.c.

3385{
3387
3388 switch (selection)
3389 {
3390 case PurposeEnableAll:
3391 case PurposeDisableAll:
3392 EnableWindow(lv, FALSE);
3393 redraw_states(lv, FALSE);
3395 break;
3397 EnableWindow(lv, TRUE);
3398 redraw_states(lv, TRUE);
3400 }
3401}
static void redraw_states(HWND list, BOOL enabled)
Definition: main.c:3327

Referenced by cert_properties_general_dlg_proc(), and show_cert_usages().

◆ select_store_dlg_proc()

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

Definition at line 1536 of file main.c.

1538{
1539 struct SelectStoreInfo *selectInfo;
1540 LRESULT ret = 0;
1541
1542 switch (msg)
1543 {
1544 case WM_INITDIALOG:
1545 {
1546 selectInfo = (struct SelectStoreInfo *)lp;
1548 if (selectInfo->info->pwszTitle)
1550 (LPARAM)selectInfo->info->pwszTitle);
1551 if (selectInfo->info->pwszText)
1553 (LPARAM)selectInfo->info->pwszText);
1554 if (!(selectInfo->info->dwFlags & CRYPTUI_ENABLE_SHOW_PHYSICAL_STORE))
1556 enumerate_stores(hwnd, selectInfo->info->pEnumData);
1557 break;
1558 }
1559 case WM_COMMAND:
1560 switch (wp)
1561 {
1562 case IDOK:
1563 {
1567
1568 selectInfo = (struct SelectStoreInfo *)GetWindowLongPtrW(hwnd,
1569 DWLP_USER);
1570 if (!selection)
1571 {
1573
1574 if (selectInfo->info->pwszTitle)
1575 pTitle = selectInfo->info->pwszTitle;
1576 else
1577 {
1579 pTitle = title;
1580 }
1583 }
1584 else
1585 {
1587
1588 if (!selectInfo->info->pfnSelectedStoreCallback ||
1590 selectInfo->info->pvArg))
1591 {
1592 selectInfo->store = store;
1595 }
1596 else
1598 }
1599 ret = TRUE;
1600 break;
1601 }
1602 case IDCANCEL:
1605 ret = TRUE;
1606 break;
1607 }
1608 break;
1609 }
1610 return ret;
1611}
#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:1501
static void enumerate_stores(HWND hwnd, CRYPTUI_ENUM_DATA *pEnumData)
Definition: main.c:1429
static void free_store_info(HWND tree)
Definition: main.c:1475
#define TVGN_CARET
Definition: commctrl.h:3461

Referenced by CryptUIDlgSelectStoreW().

◆ selected_item_to_store()

static HCERTSTORE selected_item_to_store ( HWND  tree,
HTREEITEM  hItem 
)
static

Definition at line 1501 of file main.c.

1502{
1504 TVITEMW item;
1505 HCERTSTORE store;
1506
1507 memset(&item, 0, sizeof(item));
1509 item.hItem = hItem;
1510 item.cchTextMax = ARRAY_SIZE(buf);
1511 item.pszText = buf;
1513 if (item.lParam)
1514 {
1515 struct StoreInfo *storeInfo = (struct StoreInfo *)item.lParam;
1516
1517 if (storeInfo->type == StoreHandle)
1518 store = storeInfo->u.store;
1519 else
1520 store = CertOpenSystemStoreW(0, storeInfo->u.name);
1521 }
1522 else
1523 {
1524 /* It's implicitly a system store */
1526 }
1527 return store;
1528}
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 2321 of file main.c.

2323{
2324 CHARFORMATW charFmt;
2325 PARAFORMAT2 parFmt;
2329 (CRYPT_PROVIDER_DATA *)pCertViewInfo->u.pCryptProviderData,
2330 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
2331 pCertViewInfo->idxCounterSigner);
2333 &provSigner->pasCertChain[provSigner->csCertChain - 1];
2334
2335 if (!provSigner->pChainContext ||
2339 else if (!root->fTrustedRoot)
2341 else
2343
2344 memset(&charFmt, 0, sizeof(charFmt));
2345 charFmt.cbSize = sizeof(charFmt);
2346 charFmt.dwMask = CFM_BOLD;
2347 charFmt.dwEffects = CFE_BOLD;
2349 /* FIXME: vertically center text */
2350 parFmt.cbSize = sizeof(parFmt);
2351 parFmt.dwMask = PFM_STARTINDENT;
2352 parFmt.dxStartIndent = MY_INDENT;
2355
2358 if (provSigner->dwError == TRUST_E_CERT_SIGNATURE)
2360 IDS_CERT_INFO_BAD_SIG, &parFmt);
2361 else if (!provSigner->pChainContext ||
2366 else if (!root->fTrustedRoot)
2367 {
2368 if (provSigner->csCertChain == 1 && root->fSelfSigned)
2371 else
2374 }
2375 else
2376 {
2377 set_policy_text(text, pCertViewInfo);
2378 set_issuer_statement(hwnd, pCertViewInfo);
2379 }
2380}
#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:2276
static void add_icon_to_control(HWND hwnd, int id)
Definition: main.c:1807
static void set_policy_text(HWND text, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2170
#define CFE_BOLD
Definition: richedit.h:406
CERT_TRUST_STATUS TrustStatus
Definition: wincrypt.h:939
PCCERT_CHAIN_CONTEXT pChainContext
Definition: wintrust.h:241
#define CERT_TRUST_IS_PARTIAL_CHAIN
Definition: wincrypt.h:891
#define TRUST_E_CERT_SIGNATURE
Definition: winerror.h:3107

Referenced by set_general_info().

◆ set_cert_name_string()

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

Definition at line 2382 of file main.c.

2384{
2385 WCHAR nl = '\n';
2387 CHARFORMATW charFmt;
2388 PARAFORMAT2 parFmt;
2389
2390 memset(&charFmt, 0, sizeof(charFmt));
2391 charFmt.cbSize = sizeof(charFmt);
2392 charFmt.dwMask = CFM_BOLD;
2393 charFmt.dwEffects = CFE_BOLD;
2395 parFmt.cbSize = sizeof(parFmt);
2396 parFmt.dwMask = PFM_STARTINDENT;
2397 parFmt.dxStartIndent = MY_INDENT * 3;
2399 charFmt.dwEffects = 0;
2402 nameFlags);
2406
2407}
#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:1792

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

3511{
3512 if (str && *str)
3513 {
3515
3516 blob.pbData = (BYTE *)str;
3517 blob.cbData = (lstrlenW(str) + 1) * sizeof(WCHAR);
3519 }
3520 else
3522}
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 2421 of file main.c.

2422{
2423 WCHAR nl = '\n';
2425 CHARFORMATW charFmt;
2426 PARAFORMAT2 parFmt;
2427
2428 memset(&charFmt, 0, sizeof(charFmt));
2429 charFmt.cbSize = sizeof(charFmt);
2430 charFmt.dwMask = CFM_BOLD;
2431 charFmt.dwEffects = CFE_BOLD;
2433 parFmt.cbSize = sizeof(parFmt);
2434 parFmt.dwMask = PFM_STARTINDENT;
2435 parFmt.dxStartIndent = MY_INDENT * 3;
2437 &parFmt);
2438 charFmt.dwEffects = 0;
2440 add_date_string_to_control(text, &cert->pCertInfo->NotBefore);
2441 charFmt.dwEffects = CFE_BOLD;
2444 charFmt.dwEffects = 0;
2446 add_date_string_to_control(text, &cert->pCertInfo->NotAfter);
2448}
#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:2409
static void add_string_resource_to_control(HWND hwnd, int id)
Definition: main.c:1750

Referenced by set_general_info().

◆ set_certificate_status()

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

Definition at line 4067 of file main.c.

4068{
4069 /* Select all the text in the control, the next update will replace it */
4070 SendMessageW(hwnd, EM_SETSEL, 0, -1);
4071 /* Set the highest priority error messages first. */
4072 if (!(cert->dwConfidence & CERT_CONFIDENCE_SIG))
4074 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIME))
4076 else if (!(cert->dwConfidence & CERT_CONFIDENCE_TIMENEST))
4078 else if (cert->dwRevokedReason)
4080 else
4082}
#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 4084 of file main.c.

4086{
4089 (CRYPT_PROVIDER_DATA *)pCertViewInfo->u.pCryptProviderData,
4090 pCertViewInfo->idxSigner, pCertViewInfo->fCounterSigner,
4091 pCertViewInfo->idxCounterSigner);
4093 pCertViewInfo->idxCert);
4094
4095 set_certificate_status(status, provCert);
4096}
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 3132 of file main.c.

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

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

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

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

2452{
2453 set_cert_info(hwnd, pCertViewInfo);
2454 set_cert_name_string(hwnd, pCertViewInfo->pCertContext, 0,
2456 set_cert_name_string(hwnd, pCertViewInfo->pCertContext,
2459}
#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:2421
static void set_cert_name_string(HWND hwnd, PCCERT_CONTEXT cert, DWORD nameFlags, int heading)
Definition: main.c:2382
static void set_cert_info(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:2321

Referenced by general_dlg_proc().

◆ set_issuer_statement()

static void set_issuer_statement ( HWND  hwnd,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2276 of file main.c.

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

Referenced by set_cert_info().

◆ set_policy_text()

static void set_policy_text ( HWND  text,
PCCRYPTUI_VIEWCERTIFICATE_STRUCTW  pCertViewInfo 
)
static

Definition at line 2170 of file main.c.

2172{
2173 BOOL includeCertUsages = FALSE, includeAppUsages = FALSE;
2174 BOOL badUsages = FALSE, anyUsageAdded = FALSE;
2175
2176 if (pCertViewInfo->cPurposes)
2177 {
2178 DWORD i;
2179
2180 for (i = 0; i < pCertViewInfo->cPurposes; i++)
2181 {
2182 if (!strcmp(pCertViewInfo->rgszPurposes[i], szOID_ANY_CERT_POLICY))
2183 includeCertUsages = TRUE;
2184 else if (!strcmp(pCertViewInfo->rgszPurposes[i],
2186 includeAppUsages = TRUE;
2187 else
2188 badUsages = TRUE;
2189 }
2190 }
2191 else
2192 includeAppUsages = includeCertUsages = TRUE;
2193 if (includeAppUsages)
2194 display_app_usages(text, pCertViewInfo->pCertContext, &anyUsageAdded);
2195 if (includeCertUsages)
2196 badUsages = display_cert_usages(text, pCertViewInfo->pCertContext,
2197 &anyUsageAdded);
2198 if (badUsages)
2199 {
2200 PARAFORMAT2 parFmt;
2201
2202 parFmt.cbSize = sizeof(parFmt);
2203 parFmt.dwMask = PFM_STARTINDENT;
2204 parFmt.dxStartIndent = MY_INDENT;
2207 }
2208}
#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:2114
static void display_app_usages(HWND text, PCCERT_CONTEXT cert, BOOL *anyUsageAdded)
Definition: main.c:2062

Referenced by set_cert_info().

◆ show_cert_chain()

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

Definition at line 4016 of file main.c.

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

Referenced by show_cert_hierarchy().

◆ show_cert_dialog()

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

Definition at line 4308 of file main.c.

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

Referenced by CryptUIDlgViewCertificateW().

◆ show_cert_hierarchy()

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

Definition at line 4098 of file main.c.

4099{
4100 /* Disable view certificate button until a certificate is selected */
4104}
static void set_certificate_status_for_end_cert(HWND hwnd, PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo)
Definition: main.c:4084
static void show_cert_chain(HWND hwnd, struct hierarchy_data *data)
Definition: main.c:4016

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

495{
496 const struct CertMgrStoreInfo *storeList;
497 int cStores, i;
499
501 {
502 storeList = publisherStoreList;
504 }
505 else
506 {
507 storeList = defaultStoreList;
508 cStores = ARRAY_SIZE(defaultStoreList);
509 }
511 cStores = 1;
512 data->nStores = cStores;
513 data->stores = storeList;
514 for (i = 0; i < cStores; i++)
515 {
518 HCERTSTORE store;
519
520 if (!(name = CryptFindLocalizedName(storeList[i].name)))
521 name = storeList[i].name;
524 item.mask = TCIF_TEXT | TCIF_PARAM;
525 item.pszText = (LPWSTR)name;
526 item.lParam = (LPARAM)store;
528 }
529}
#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:468
static const struct CertMgrStoreInfo publisherStoreList[]
Definition: main.c:479
#define TCM_INSERTITEMW
Definition: commctrl.h:4047
#define TCIF_TEXT
Definition: commctrl.h:3971
LPCWSTR name
Definition: main.c:463

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

3411{
3412 PCCERT_CONTEXT cert = data->cert;
3415 DWORD size;
3416 RECT rc;
3418 PurposeSelection purposeSelection = PurposeEnableAll;
3419
3420 GetWindowRect(lv, &rc);
3421 column.mask = LVCF_WIDTH;
3422 column.cx = rc.right - rc.left;
3425
3426 /* Get enhanced key usage. Have to check for a property and an extension
3427 * separately, because CertGetEnhancedKeyUsage will succeed and return an
3428 * empty usage if neither is set. Unfortunately an empty usage implies
3429 * no usage is allowed, so we have to distinguish between the two cases.
3430 */
3432 NULL, &size))
3433 {
3437 {
3439 usage = NULL;
3440 }
3441 else if (usage->cUsageIdentifier)
3442 purposeSelection = PurposeEnableSelected;
3443 else
3444 purposeSelection = PurposeDisableAll;
3445 }
3447 NULL, &size))
3448 {
3452 {
3454 usage = NULL;
3455 }
3456 else if (usage->cUsageIdentifier)
3457 purposeSelection = PurposeEnableAll;
3458 else
3459 purposeSelection = PurposeDisableAll;
3460 }
3461 else
3462 {
3463 purposeSelection = PurposeEnableAll;
3464 usage = NULL;
3465 }
3466 if (usage)
3467 {
3468 DWORD i;
3469
3470 for (i = 0; i < usage->cUsageIdentifier; i++)
3471 {
3473 usage->rgpszUsageIdentifier[i], CRYPT_ENHKEY_USAGE_OID_GROUP_ID);
3474
3475 if (info)
3477 else
3478 add_purpose(hwnd, usage->rgpszUsageIdentifier[i]);
3479 }
3481 }
3482 else
3484 select_purposes(hwnd, purposeSelection);
3486 BM_CLICK, 0, 0);
3487}

Referenced by set_general_cert_properties().

◆ show_dialog_for_selected_cert()

static void show_dialog_for_selected_cert ( HWND  hwnd)
static

Definition at line 4106 of file main.c.

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

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

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

Referenced by detail_dlg_proc().

◆ show_export_details()

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

Definition at line 6362 of file main.c.

6363{
6365 LVITEMW item;
6366 int contentID;
6367
6368 item.mask = LVIF_TEXT;
6369 if (data->fileName)
6370 {
6371 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6372 item.iSubItem = 0;
6374 item.pszText = text;
6376 item.iSubItem = 1;
6377 item.pszText = data->fileName;
6379 }
6380
6381 item.pszText = text;
6382 switch (data->exportInfo.dwSubjectChoice)
6383 {
6388 /* do nothing */
6389 break;
6390 default:
6391 {
6392 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6393 item.iSubItem = 0;
6396 item.iSubItem = 1;
6397 LoadStringW(hInstance, data->contextInfo.fExportChain ? IDS_YES : IDS_NO, text,
6398 ARRAY_SIZE(text));
6400
6401 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6402 item.iSubItem = 0;
6405 item.iSubItem = 1;
6406 LoadStringW(hInstance, data->contextInfo.fExportPrivateKeys ? IDS_YES : IDS_NO, text,
6407 ARRAY_SIZE(text));
6409 }
6410 }
6411
6412 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
6413 item.iSubItem = 0;
6416
6417 item.iSubItem = 1;
6418 switch (data->exportInfo.dwSubjectChoice)
6419 {
6421 contentID = IDS_EXPORT_FILTER_CRL;
6422 break;
6424 contentID = IDS_EXPORT_FILTER_CTL;
6425 break;
6428 break;
6429 default:
6430 switch (data->contextInfo.dwExportFormat)
6431 {
6434 break;
6436 contentID = IDS_EXPORT_FILTER_CMS;
6437 break;
6439 contentID = IDS_EXPORT_FILTER_PFX;
6440 break;
6441 default:
6442 contentID = IDS_EXPORT_FILTER_CERT;
6443 }
6444 }
6445 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
6447}
#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 6831 of file main.c.

6833{
6835 PROPSHEETPAGEW pages[6];
6836 struct ExportWizData data;
6837 int nPages = 0;
6838 BOOL hasPrivateKey, showFormatPage = TRUE;
6839 INT_PTR l;
6840
6841 data.dwFlags = dwFlags;
6842 data.pwszWizardTitle = pwszWizardTitle;
6843 memset(&data.exportInfo, 0, sizeof(data.exportInfo));
6844 memcpy(&data.exportInfo, pExportInfo,
6845 min(sizeof(data.exportInfo), pExportInfo->dwSize));
6846 if (pExportInfo->dwSize > sizeof(data.exportInfo))
6847 data.exportInfo.dwSize = sizeof(data.exportInfo);
6848 data.contextInfo.dwSize = sizeof(data.contextInfo);
6849 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6850 data.contextInfo.fExportChain = FALSE;
6851 data.contextInfo.fStrongEncryption = FALSE;
6852 data.contextInfo.fExportPrivateKeys = FALSE;
6853 data.contextInfo.pwszPassword = NULL;
6854 data.freePassword = FALSE;
6856 pvoid)
6857 memcpy(&data.contextInfo, pvoid,
6859 sizeof(data.contextInfo)));
6860 data.keyProvInfo = NULL;
6861 data.deleteKeys = FALSE;
6862 data.fileName = NULL;
6864 data.success = FALSE;
6865
6866 memset(pages, 0, sizeof(pages));
6867
6868 pages[nPages].dwSize = sizeof(pages[0]);
6869 pages[nPages].hInstance = hInstance;
6871 pages[nPages].pfnDlgProc = export_welcome_dlg_proc;
6872 pages[nPages].dwFlags = PSP_HIDEHEADER;
6873 pages[nPages].lParam = (LPARAM)&data;
6874 nPages++;
6875
6876 hasPrivateKey = export_info_has_private_key(pExportInfo);
6877 switch (pExportInfo->dwSubjectChoice)
6878 {
6881 showFormatPage = FALSE;
6882 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_DER;
6883 break;
6885 showFormatPage = FALSE;
6886 data.contextInfo.dwExportFormat =
6888 break;
6890 showFormatPage = FALSE;
6891 data.contextInfo.dwExportFormat = CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7;
6892 break;
6893 }
6894
6895 if (hasPrivateKey && showFormatPage)
6896 {
6897 pages[nPages].dwSize = sizeof(pages[0]);
6898 pages[nPages].hInstance = hInstance;
6901 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6902 pages[nPages].pszHeaderTitle =
6904 pages[nPages].pszHeaderSubTitle =
6906 pages[nPages].lParam = (LPARAM)&data;
6907 nPages++;
6908 }
6909 if (showFormatPage)
6910 {
6911 pages[nPages].dwSize = sizeof(pages[0]);
6912 pages[nPages].hInstance = hInstance;
6914 pages[nPages].pfnDlgProc = export_format_dlg_proc;
6915 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6916 pages[nPages].pszHeaderTitle =
6918 pages[nPages].pszHeaderSubTitle =
6920 pages[nPages].lParam = (LPARAM)&data;
6921 nPages++;
6922 }
6923 if (hasPrivateKey && showFormatPage)
6924 {
6925 pages[nPages].dwSize = sizeof(pages[0]);
6926 pages[nPages].hInstance = hInstance;
6928 pages[nPages].pfnDlgProc = export_password_dlg_proc;
6929 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6930 pages[nPages].pszHeaderTitle =
6932 pages[nPages].pszHeaderSubTitle =
6934 pages[nPages].lParam = (LPARAM)&data;
6935 nPages++;
6936 }
6937
6938 pages[nPages].dwSize = sizeof(pages[0]);
6939 pages[nPages].hInstance = hInstance;
6940 pages[nPages].u.pszTemplate = MAKEINTRESOURCEW(IDD_EXPORT_FILE);
6941 pages[nPages].pfnDlgProc = export_file_dlg_proc;
6942 pages[nPages].dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
6943 pages[nPages].pszHeaderTitle = MAKEINTRESOURCEW(IDS_EXPORT_FILE_TITLE);
6944 pages[nPages].pszHeaderSubTitle =
6946 pages[nPages].lParam = (LPARAM)&data;
6947 nPages++;
6948
6949 pages[nPages].dwSize = sizeof(pages[0]);
6950 pages[nPages].hInstance = hInstance;
6952 pages[nPages].pfnDlgProc = export_finish_dlg_proc;
6953 pages[nPages].dwFlags = PSP_HIDEHEADER;
6954 pages[nPages].lParam = (LPARAM)&data;
6955 nPages++;
6956
6957 memset(&hdr, 0, sizeof(hdr));
6958 hdr.dwSize = sizeof(hdr);
6959 hdr.hwndParent = hwndParent;
6960 hdr.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD97_NEW | PSH_HEADER |
6961 PSH_WATERMARK;
6962 hdr.hInstance = hInstance;
6963 if (pwszWizardTitle)
6964 hdr.pszCaption = pwszWizardTitle;
6965 else
6967 hdr.u3.ppsp = pages;
6968 hdr.nPages = nPages;
6969 hdr.u4.pszbmWatermark = MAKEINTRESOURCEW(IDB_CERT_WATERMARK);
6970 hdr.u5.pszbmHeader = MAKEINTRESOURCEW(IDB_CERT_HEADER);
6971 l = PropertySheetW(&hdr);
6972 DeleteObject(data.titleFont);
6973 if (data.freePassword)
6975 (LPWSTR)data.contextInfo.pwszPassword);
6976 HeapFree(GetProcessHeap(), 0, data.keyProvInfo);
6977 CloseHandle(data.file);
6978 HeapFree(GetProcessHeap(), 0, data.fileName);
6979 if (l == 0)
6980 {
6982 return FALSE;
6983 }
6984 else
6985 return data.success;
6986}
#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:5780
static LRESULT CALLBACK export_private_key_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5703
static LRESULT CALLBACK export_format_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5833
static LRESULT CALLBACK export_password_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5956
static LRESULT CALLBACK export_file_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6245
static LRESULT CALLBACK export_welcome_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:5603
static LRESULT CALLBACK export_finish_dlg_proc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
Definition: main.c:6749
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 5266 of file main.c.

5267{
5269 LVITEMW item;
5270 int contentID;
5271
5272 item.mask = LVIF_TEXT;
5273 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5274 item.iSubItem = 0;
5276 item.pszText = text;
5278 item.iSubItem = 1;
5279 if (data->autoDest)
5281 else
5284 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5285 item.iSubItem = 0;
5288 switch (data->contentType)
5289 {
5292 contentID = IDS_IMPORT_CONTENT_CERT;
5293 break;
5296 contentID = IDS_IMPORT_CONTENT_CRL;
5297 break;
5300 contentID = IDS_IMPORT_CONTENT_CTL;
5301 break;
5303 contentID = IDS_IMPORT_CONTENT_CMS;
5304 break;
5306 contentID = IDS_IMPORT_CONTENT_PFX;
5307 break;
5308 default:
5309 contentID = IDS_IMPORT_CONTENT_STORE;
5310 break;
5311 }
5312 LoadStringW(hInstance, contentID, text, ARRAY_SIZE(text));
5313 item.iSubItem = 1;
5315 if (data->fileName)
5316 {
5317 item.iItem = SendMessageW(lv, LVM_GETITEMCOUNT, 0, 0);
5318 item.iSubItem = 0;
5321 item.iSubItem = 1;
5322 item.pszText = data->fileName;
5324 }
5325}
#define IDS_IMPORT_CONTENT_CERT
Definition: cryptuires.h:89
#define IDS_IMPORT_CONTENT_CMS
Definition: cryptuires.h:92
#define IDS_IMPORT_CONTENT
Definition: cryptuires.h:88
#define IDS_IMPORT_CONTENT_STORE
Definition: cryptuires.h:94
#define IDS_IMPORT_CONTENT_PFX
Definition: cryptuires.h:93
#define IDS_IMPORT_CONTENT_CRL
Definition: cryptuires.h:90
#define IDS_IMPORT_STORE_SELECTION
Definition: cryptuires.h:85
#define IDS_IMPORT_CONTENT_CTL
Definition: cryptuires.h:91
#define IDS_IMPORT_DEST_AUTOMATIC
Definition: cryptuires.h:86
#define CERT_QUERY_CONTENT_PKCS7_SIGNED
Definition: wincrypt.h:3536

Referenced by import_finish_dlg_proc().

◆ show_import_ui()

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

Definition at line 5444 of file main.c.

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

Referenced by CryptUIWizImport().

◆ show_selected_cert()

static void show_selected_cert ( HWND  hwnd,
int  index 
)
static

Definition at line 833 of file main.c.

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

Referenced by cert_mgr_dlg_proc().

◆ show_store_certs()

static void show_store_certs ( HWND  hwnd,
HCERTSTORE  store 
)
static

Definition at line 353 of file main.c.

354{
358 DWORD allocatedLen = 0;
359 LPWSTR str = NULL;
360 int index;
362 LPCSTR oid = NULL;
363 CERT_ENHKEY_USAGE *advanced = NULL;
364
366 if (index >= 0)
367 {
369
370 if (!HIWORD(data))
371 filter = data;
372 else
373 {
375
377 oid = info->pszOID;
378 }
379 }
381 advanced = create_advanced_filter();
382 do {
384 if (cert)
385 {
386 BOOL show = FALSE;
387
389 show = TRUE;
390 else
391 {
392 int numOIDs;
393 DWORD cbOIDs = 0;
394
395 if (CertGetValidUsages(1, &cert, &numOIDs, NULL, &cbOIDs))
396 {
397 if (numOIDs == -1)
398 {
399 /* -1 implies all usages are valid */
400 show = TRUE;
401 }
402 else
403 {
404 LPSTR *oids = HeapAlloc(GetProcessHeap(), 0, cbOIDs);
405
406 if (oids)
407 {
408 if (CertGetValidUsages(1, &cert, &numOIDs, oids,
409 &cbOIDs))
410 {
411 int i;
412
414 {
415 for (i = 0; !show && i < numOIDs; i++)
416 if (!strcmp(oids[i], oid))
417 show = TRUE;
418 }
419 else
420 {
421 for (i = 0; !show && i < numOIDs; i++)
422 {
423 DWORD j;
424
425 for (j = 0; !show &&
426 j < advanced->cUsageIdentifier; j++)
427 if (!strcmp(oids[i],
428 advanced->rgpszUsageIdentifier[j]))
429 show = TRUE;
430 }
431 }
432 }
433 HeapFree(GetProcessHeap(), 0, oids);
434 }
435 }
436 }
437 }
438 if (show)
439 add_cert_to_view(lv, cert, &allocatedLen, &str);
440 }
441 } while (cert);
443 if (advanced)
444 {
446 HeapFree(GetProcessHeap(), 0, advanced);
447 }
450}
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:99
static CERT_ENHKEY_USAGE * create_advanced_filter(void)
Definition: main.c:300
const CRYPT_OID_INFO * PCCRYPT_OID_INFO
Definition: wincrypt.h:1418

Referenced by cert_mgr_dlg_proc(), and refresh_store_certs().

◆ show_user_notice()

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

Definition at line 2504 of file main.c.

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

Referenced by general_dlg_proc().

◆ strdupAtoW()

static WCHAR * strdupAtoW ( const char str)
static

Definition at line 65 of file main.c.

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

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

616{
618 int res;
620
621 item.mask = LVIF_STATE;
622 item.iItem = iItem;
623 item.iSubItem = 0;
624 item.stateMask = LVIS_STATEIMAGEMASK;
626 if (res)
627 {
628 int state = item.state >> 12;
629
634 }
635}

Referenced by cert_mgr_advanced_dlg_proc(), and cert_properties_general_dlg_proc().

◆ user_notice_dlg_proc()

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

Definition at line 2461 of file main.c.

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

Referenced by show_user_notice().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( cryptui  )

◆ WTHelperGetKnownUsages()

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

Definition at line 896 of file wintrust_main.c.

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

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

Variable Documentation

◆ addressBook

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

Definition at line 453 of file main.c.

Referenced by choose_store_for_cert(), and test_crypt_ui_wiz_import().

◆ allowFlags

DWORD allowFlags

Definition at line 4926 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:452
static const WCHAR disallowed[]
Definition: main.c:459
static const WCHAR trustedPublisher[]
Definition: main.c:457

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

Referenced by CRYPTDLG_IsCertAllowed(), and SoftpubAuthenticode().

◆ empty

const WCHAR empty[] = {0}
static

Definition at line 47 of file main.c.

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

◆ export_filter_cert

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

Definition at line 6172 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 6175 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 6173 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 6174 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 6176 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 6177 of file main.c.

Referenced by make_export_file_filter().

◆ filter

◆ filter_all

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

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

◆ filter_cms

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

Definition at line 4919 of file main.c.

◆ filter_crl

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

Definition at line 4916 of file main.c.

◆ filter_ctl

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

Definition at line 4917 of file main.c.

◆ filter_pfx

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

Definition at line 4914 of file main.c.

◆ filter_serialized_store

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

Definition at line 4918 of file main.c.

◆ hInstance

HINSTANCE hInstance
static

Definition at line 45 of file main.c.

◆ id

Definition at line 4925 of file main.c.

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

◆ 

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

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

Definition at line 3089 of file main.c.

Referenced by create_show_list(), and set_fields_selection().

◆ my

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

Definition at line 452 of file main.c.

◆ oidMap

struct OIDToString oidMap[]
static

Definition at line 1915 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:3013
#define CERT_ENHKEY_USAGE_PROP_ID
Definition: wincrypt.h:2694
#define CERT_HASH_PROP_ID
Definition: wincrypt.h:2688

Definition at line 3027 of file main.c.

Referenced by add_properties().

◆ publisherStoreList

◆ root

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

Definition at line 456 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 457 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:2651
static WCHAR * field_format_subject(PCCERT_CONTEXT cert)
Definition: main.c:2656
static WCHAR * field_format_public_key(PCCERT_CONTEXT cert)
Definition: main.c:2697
static WCHAR * field_format_to_date(PCCERT_CONTEXT cert)
Definition: main.c:2692
static WCHAR * field_format_from_date(PCCERT_CONTEXT cert)
Definition: main.c:2687
static WCHAR * field_format_serial_number(PCCERT_CONTEXT cert)
Definition: main.c:2623
static WCHAR * field_format_detailed_public_key(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2738
static WCHAR * field_format_detailed_subject(PCCERT_CONTEXT cert, void *param)
Definition: main.c:2661
static WCHAR * field_format_issuer(PCCERT_CONTEXT cert)
Definition: main.c:2629
static WCHAR * field_format_version(PCCERT_CONTEXT cert)
Definition: main.c:2597

Definition at line 2833 of file main.c.

Referenced by add_v1_fields().