2 * Copyright (C) 2008 Juan Lang
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 #ifndef __CRYPTUIAPI_H__
19 #define __CRYPTUIAPI_H__
31 BOOL WINAPI
CryptUIDlgViewContext(DWORD dwContextType
, LPVOID pvContext
,
32 HWND hwnd
, LPCWSTR pwszTitle
, DWORD dwFlags
, LPVOID pvReserved
);
34 /* Values for dwDontUseColumn */
35 #define CRYPTUI_SELECT_ISSUEDTO_COLUMN 0x00000001
36 #define CRYPTUI_SELECT_ISSUEDBY_COLUMN 0x00000002
37 #define CRYPTUI_SELECT_INTENDEDUSE_COLUMN 0x00000004
38 #define CRYPTUI_SELECT_FRIENDLYNAME_COLUMN 0x00000008
39 #define CRYPTUI_SELECT_LOCATION_COLUMN 0x00000010
40 #define CRYPTUI_SELECT_EXPIRATION_COLUMN 0x00000020
42 PCCERT_CONTEXT WINAPI
CryptUIDlgSelectCertificateFromStore(
43 HCERTSTORE hCertStore
, HWND hwnd
, LPCWSTR pwszTitle
, LPCWSTR pwszDisplayString
,
44 DWORD dwDontUseColumn
, DWORD dwFlags
, LPVOID pvReserved
);
46 /* Values for CRYPTUI_CERT_MGR_STRUCT's dwFlags */
47 #define CRYPTUI_CERT_MGR_PUBLISHER_TAB 0x00000004
48 #define CRYPTUI_CERT_MGR_TAB_MASK 0x0000000f
49 #define CRYPTUI_CERT_MGR_SINGLE_TAB_FLAG 0x00008000
51 typedef struct _CRYPTUI_CERT_MGR_STRUCT
57 LPCSTR pszInitUsageOID
;
58 } CRYPTUI_CERT_MGR_STRUCT
, *PCRYPTUI_CERT_MGR_STRUCT
;
59 typedef const struct _CRYPTUI_CERT_MGR_STRUCT
*PCCRYPTUI_CERT_MGR_STRUCT
;
61 BOOL WINAPI
CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr
);
63 typedef BOOL (WINAPI
*PFNCFILTERPROC
)(PCCERT_CONTEXT pCertContext
,
64 BOOL
*pfInitialSelectedCert
, void *pvCallbackData
);
66 typedef struct tagCRYPTUI_INITDIALOG_STRUCT
69 PCCERT_CONTEXT pCertContext
;
70 } CRYPTUI_INITDIALOG_STRUCT
, *PCRYPTUI_INITDIALOG_STRUCT
;
72 /* Values for CRYPTUI_VIEWCERTIFICATE_STRUCT's dwFlags */
73 #define CRYPTUI_HIDE_HIERARCHYPAGE 0x00000001
74 #define CRYPTUI_HIDE_DETAILPAGE 0x00000002
75 #define CRYPTUI_DISABLE_EDITPROPERTIES 0x00000004
76 #define CRYPTUI_ENABLE_EDITPROPERTIES 0x00000008
77 #define CRYPTUI_DISABLE_ADDTOSTORE 0x00000010
78 #define CRYPTUI_ENABLE_ADDTOSTORE 0x00000020
79 #define CRYPTUI_ACCEPT_DECLINE_STYLE 0x00000040
80 #define CRYPTUI_IGNORE_UNTRUSTED_ROOT 0x00000080
81 #define CRYPTUI_DONT_OPEN_STORES 0x00000100
82 #define CRYPTUI_ONLY_OPEN_ROOT_STORE 0x00000200
83 #define CRYPTUI_WARN_UNTRUSTED_ROOT 0x00000400
84 #define CRYPTUI_ENABLE_REVOCATION_CHECKING 0x00000800
85 #define CRYPTUI_WARN_REMOTE_TRUST 0x00001000
86 #define CRYPTUI_DISABLE_EXPORT 0x00002000
87 #define CRYPTUI_ENABLE_REVOCATION_CHECK_END_CERT 0x00004000
88 #define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN 0x00008000
89 #define CRYPTUI_ENABLE_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT CRYPTUI_ENABLE_REVOCATION_CHECKING
90 #define CRYPTUI_DISABLE_HTMLLINK 0x00010000
91 #define CRYPTUI_DISABLE_ISSUERSTATEMENT 0x00020000
93 typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA
99 PCCERT_CONTEXT pCertContext
;
100 LPCSTR
*rgszPurposes
;
103 CRYPT_PROVIDER_DATA
const *pCryptProviderData
;
104 HANDLE hWVTStateData
;
106 BOOL fpCryptProviderDataTrustedUsage
;
110 DWORD idxCounterSigner
;
112 HCERTSTORE
*rghStores
;
113 DWORD cPropSheetPages
;
114 LPCPROPSHEETPAGEA rgPropSheetPages
;
116 } CRYPTUI_VIEWCERTIFICATE_STRUCTA
, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA
;
117 typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA
*PCCRYPTUI_VIEWCERTIFICATE_STRUCTA
;
119 typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW
125 PCCERT_CONTEXT pCertContext
;
126 LPCSTR
*rgszPurposes
;
129 CRYPT_PROVIDER_DATA
const *pCryptProviderData
;
130 HANDLE hWVTStateData
;
132 BOOL fpCryptProviderDataTrustedUsage
;
136 DWORD idxCounterSigner
;
138 HCERTSTORE
*rghStores
;
139 DWORD cPropSheetPages
;
140 LPCPROPSHEETPAGEW rgPropSheetPages
;
142 } CRYPTUI_VIEWCERTIFICATE_STRUCTW
, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW
;
143 typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW
*PCCRYPTUI_VIEWCERTIFICATE_STRUCTW
;
145 #define CRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT)
146 #define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT)
148 BOOL WINAPI
CryptUIDlgViewCertificateA(
149 PCCRYPTUI_VIEWCERTIFICATE_STRUCTA pCertViewInfo
, BOOL
*pfPropertiesChanged
);
150 BOOL WINAPI
CryptUIDlgViewCertificateW(
151 PCCRYPTUI_VIEWCERTIFICATE_STRUCTW pCertViewInfo
, BOOL
*pfPropertiesChanged
);
152 #define CryptUIDlgViewCertificate WINELIB_NAME_AW(CryptUIDlgViewCertificate)
154 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
160 LPCWSTR pwszDisplayName
;
161 } CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
, *PCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
;
162 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
*
163 PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
;
165 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
169 HCERTSTORE
*rghCertStore
;
170 PFNCFILTERPROC pFilterCallback
;
171 void *pvCallbackData
;
172 } CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
, *PCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
;
173 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
*
174 PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
;
176 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
179 LPWSTR pwszPvkFileName
;
182 } CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
,
183 *PCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
;
184 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
*
185 PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
;
187 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
190 LPWSTR pwszSigningCertFileName
;
193 PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo
;
194 PCRYPT_KEY_PROV_INFO pPvkProvInfo
;
196 } CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
,
197 *PCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
;
198 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
*
199 PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
;
201 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
205 LPCWSTR pwszDescription
;
206 LPCWSTR pwszMoreInfoLocation
;
208 LPCWSTR pwszSigningCertDisplayString
;
209 HCERTSTORE hAdditionalCertStore
;
210 PCRYPT_ATTRIBUTES psAuthenticated
;
211 PCRYPT_ATTRIBUTES psUnauthenticated
;
212 } CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
,
213 *PCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
;
214 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
*
215 PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
;
217 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO
220 DWORD dwSubjectChoice
;
222 LPCWSTR pwszFileName
;
223 PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo
;
225 DWORD dwSigningCertChoice
;
227 PCCERT_CONTEXT pSigningCertContext
;
228 PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO pSigningCertStore
;
229 PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo
;
231 LPCWSTR pwszTimestampURL
;
232 DWORD dwAdditionalCertChoice
;
233 PCCRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO pSignExtInfo
;
234 } CRYPTUI_WIZ_DIGITAL_SIGN_INFO
, *PCRYPTUI_WIZ_DIGITAL_SIGN_INFO
;
235 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_INFO
*PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO
;
237 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
242 } CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
;
243 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
*PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
;
245 /* Values for CryptUIWizDigitalSign's dwFlags */
246 #define CRYPTUI_WIZ_NO_UI 0x00000001
247 #define CRYPTUI_WIZ_DIGITAL_SIGN_EXCLUDE_PAGE_HASHES 0x00000002
248 #define CRYPTUI_WIZ_DIGITAL_SIGN_INCLUDE_PAGE_HASHES 0x00000004
250 BOOL WINAPI
CryptUIWizDigitalSign(DWORD dwFlags
, HWND hwndParent
,
251 LPCWSTR pwszWizardTitle
, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo
,
252 PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
*ppSignContext
);
254 BOOL WINAPI
CryptUIWizFreeDigitalSignContext(
255 PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext
);
257 /* Values for CRYPTUI_WIZ_EXPORT_INFO's dwSubjectChoice */
258 #define CRYPTUI_WIZ_EXPORT_CERT_CONTEXT 1
259 #define CRYPTUI_WIZ_EXPORT_CTL_CONTEXT 2
260 #define CRYPTUI_WIZ_EXPORT_CRL_CONTEXT 3
261 #define CRYPTUI_WIZ_EXPORT_CERT_STORE 4
262 #define CRYPTUI_WIZ_EXPORT_CERT_STORE_CERTIFICATES_ONLY 5
263 #define CRYPTUI_WIZ_EXPORT_FORMAT_CRL 6
264 #define CRYPTUI_WIZ_EXPORT_FORMAT_CTL 7
266 typedef struct _CRYPTUI_WIZ_EXPORT_INFO
269 LPCWSTR pwszExportFileName
;
270 DWORD dwSubjectChoice
;
272 PCCERT_CONTEXT pCertContext
;
273 PCCTL_CONTEXT pCTLContext
;
274 PCCRL_CONTEXT pCRLContext
;
275 HCERTSTORE hCertStore
;
278 HCERTSTORE
*rghStores
;
279 } CRYPTUI_WIZ_EXPORT_INFO
, *PCRYPTUI_WIZ_EXPORT_INFO
;
280 typedef const CRYPTUI_WIZ_EXPORT_INFO
*PCCRYPTUI_WIZ_EXPORT_INFO
;
282 /* Values for CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO's dwExportFormat */
283 #define CRYPTUI_WIZ_EXPORT_FORMAT_DER 1
284 #define CRYPTUI_WIZ_EXPORT_FORMAT_PFX 2
285 #define CRYPTUI_WIZ_EXPORT_FORMAT_PKCS7 3
286 #define CRYPTUI_WIZ_EXPORT_FORMAT_BASE64 4
287 #define CRYPTUI_WIZ_EXPORT_FORMAT_SERIALIZED_CERT_STORE 5
289 typedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
292 DWORD dwExportFormat
;
294 BOOL fExportPrivateKeys
;
295 LPCWSTR pwszPassword
;
296 BOOL fStrongEncryption
;
297 } CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
, *PCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
;
298 typedef const CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
*
299 PCCRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
;
301 BOOL WINAPI
CryptUIWizExport(DWORD dwFlags
, HWND hwndParent
,
302 LPCWSTR pwszWizardTitle
, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo
, void *pvoid
);
304 /* Values for CRYPTUI_WIZ_IMPORT_SRC_INFO's dwSubjectChoice */
305 #define CRYPTUI_WIZ_IMPORT_SUBJECT_FILE 1
306 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_CONTEXT 2
307 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CTL_CONTEXT 3
308 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CRL_CONTEXT 4
309 #define CRYPTUI_WIZ_IMPORT_SUBJECT_CERT_STORE 5
311 typedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO
314 DWORD dwSubjectChoice
;
316 LPCWSTR pwszFileName
;
317 PCCERT_CONTEXT pCertContext
;
318 PCCTL_CONTEXT pCTLContext
;
319 PCCRL_CONTEXT pCRLContext
;
320 HCERTSTORE hCertStore
;
323 LPCWSTR pwszPassword
;
324 } CRYPTUI_WIZ_IMPORT_SRC_INFO
, *PCRYPTUI_WIZ_IMPORT_SRC_INFO
;
325 typedef const CRYPTUI_WIZ_IMPORT_SRC_INFO
*PCCRYPTUI_WIZ_IMPORT_SRC_INFO
;
327 /* Values for CryptUIWizImport's dwFlags */
328 #define CRYPTUI_WIZ_IMPORT_NO_CHANGE_DEST_STORE 0x00010000
329 #define CRYPTUI_WIZ_IMPORT_ALLOW_CERT 0x00020000
330 #define CRYPTUI_WIZ_IMPORT_ALLOW_CRL 0x00040000
331 #define CRYPTUI_WIZ_IMPORT_ALLOW_CTL 0x00080000
332 #define CRYPTUI_WIZ_IMPORT_TO_LOCALMACHINE 0x00100000
333 #define CRYPTUI_WIZ_IMPORT_TO_CURRENTUSER 0x00200000
334 #define CRYPTUI_WIZ_IMPORT_REMOTE_DEST_STORE 0x00400000
336 BOOL WINAPI
CryptUIWizImport(DWORD dwFlags
, HWND hwndParent
,
337 LPCWSTR pwszWizardTitle
, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc
,
338 HCERTSTORE hDestCertStore
);
340 /* Definitions missing from PSDK's cryptuiapi.h, but documented on MSDN. */
341 typedef BOOL (WINAPI
*PFNCCERTDISPLAYPROC
)(PCCERT_CONTEXT pCertContext
,
342 HWND hWndSelCertDlg
, void *pvCallbackData
);
344 /* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */
345 #define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001
347 typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA
353 DWORD dwDontUseColumn
;
354 LPCSTR szDisplayString
;
355 PFNCFILTERPROC pFilterCallback
;
356 PFNCCERTDISPLAYPROC pDisplayCallback
;
357 void *pvCallbackData
;
358 DWORD cDisplayStores
;
359 HCERTSTORE
*rghDisplayStores
;
361 HCERTSTORE
*rghStores
;
362 DWORD cPropSheetPages
;
363 LPCPROPSHEETPAGEA rgPropSheetPages
;
364 HCERTSTORE hSelectedCertStore
;
365 } CRYPTUI_SELECTCERTIFICATE_STRUCTA
, *PCRYPTUI_SELECTCERTIFICATE_STRUCTA
;
366 typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTA
*
367 PCCRYPTUI_SELECTCERTIFICATE_STRUCTA
;
369 typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW
375 DWORD dwDontUseColumn
;
376 LPCWSTR szDisplayString
;
377 PFNCFILTERPROC pFilterCallback
;
378 PFNCCERTDISPLAYPROC pDisplayCallback
;
379 void *pvCallbackData
;
380 DWORD cDisplayStores
;
381 HCERTSTORE
*rghDisplayStores
;
383 HCERTSTORE
*rghStores
;
384 DWORD cPropSheetPages
;
385 LPCPROPSHEETPAGEW rgPropSheetPages
;
386 HCERTSTORE hSelectedCertStore
;
387 } CRYPTUI_SELECTCERTIFICATE_STRUCTW
, *PCRYPTUI_SELECTCERTIFICATE_STRUCTW
;
388 typedef const CRYPTUI_SELECTCERTIFICATE_STRUCTW
*
389 PCCRYPTUI_SELECTCERTIFICATE_STRUCTW
;
391 PCCERT_CONTEXT WINAPI
CryptUIDlgSelectCertificateA(
392 PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc
);
393 PCCERT_CONTEXT WINAPI
CryptUIDlgSelectCertificateW(
394 PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc
);
396 typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA
402 CMSG_SIGNER_INFO
*pSignerInfo
;
405 DWORD_PTR dwReserved
;
407 HCERTSTORE
*rghStores
;
408 DWORD cPropSheetPages
;
409 LPCPROPSHEETPAGEA rgPropSheetPages
;
410 } CRYPTUI_VIEWSIGNERINFO_STRUCTA
, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA
;
412 typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW
418 CMSG_SIGNER_INFO
*pSignerInfo
;
421 DWORD_PTR dwReserved
;
423 HCERTSTORE
*rghStores
;
424 DWORD cPropSheetPages
;
425 LPCPROPSHEETPAGEW rgPropSheetPages
;
426 } CRYPTUI_VIEWSIGNERINFO_STRUCTW
, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW
;
428 BOOL WINAPI
CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA
*pcvsi
);
429 BOOL WINAPI
CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW
*pcvsi
);