xref: /reactos/sdk/include/psdk/cryptuiapi.h (revision c2c66aff)
1 /*
2  * Copyright (C) 2008 Juan Lang
3  *
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.
8  *
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.
13  *
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
17  */
18 #ifndef __CRYPTUIAPI_H__
19 #define __CRYPTUIAPI_H__
20 
21 #include <wintrust.h>
22 #include <wincrypt.h>
23 #include <prsht.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 #include <pshpack8.h>
30 
31 BOOL WINAPI CryptUIDlgViewContext(DWORD dwContextType, LPVOID pvContext,
32  HWND hwnd, LPCWSTR pwszTitle, DWORD dwFlags, LPVOID pvReserved);
33 
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
41 
42 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateFromStore(
43  HCERTSTORE hCertStore, HWND hwnd, LPCWSTR pwszTitle, LPCWSTR pwszDisplayString,
44  DWORD dwDontUseColumn, DWORD dwFlags, LPVOID pvReserved);
45 
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
50 
51 typedef struct _CRYPTUI_CERT_MGR_STRUCT
52 {
53     DWORD   dwSize;
54     HWND    hwndParent;
55     DWORD   dwFlags;
56     LPCWSTR pwszTitle;
57     LPCSTR  pszInitUsageOID;
58 } CRYPTUI_CERT_MGR_STRUCT, *PCRYPTUI_CERT_MGR_STRUCT;
59 typedef const struct _CRYPTUI_CERT_MGR_STRUCT *PCCRYPTUI_CERT_MGR_STRUCT;
60 
61 BOOL WINAPI CryptUIDlgCertMgr(PCCRYPTUI_CERT_MGR_STRUCT pCryptUICertMgr);
62 
63 typedef BOOL (WINAPI *PFNCFILTERPROC)(PCCERT_CONTEXT pCertContext,
64  BOOL *pfInitialSelectedCert, void *pvCallbackData);
65 
66 typedef struct tagCRYPTUI_INITDIALOG_STRUCT
67 {
68     LPARAM         lParam;
69     PCCERT_CONTEXT pCertContext;
70 } CRYPTUI_INITDIALOG_STRUCT, *PCRYPTUI_INITDIALOG_STRUCT;
71 
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
92 
93 typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTA
94 {
95     DWORD             dwSize;
96     HWND              hwndParent;
97     DWORD             dwFlags;
98     LPCSTR            szTitle;
99     PCCERT_CONTEXT    pCertContext;
100     LPCSTR           *rgszPurposes;
101     DWORD             cPurposes;
102     union {
103         CRYPT_PROVIDER_DATA const *pCryptProviderData;
104         HANDLE                     hWVTStateData;
105     } DUMMYUNIONNAME;
106     BOOL              fpCryptProviderDataTrustedUsage;
107     DWORD             idxSigner;
108     DWORD             idxCert;
109     BOOL              fCounterSigner;
110     DWORD             idxCounterSigner;
111     DWORD             cStores;
112     HCERTSTORE       *rghStores;
113     DWORD             cPropSheetPages;
114     LPCPROPSHEETPAGEA rgPropSheetPages;
115     DWORD             nStartPage;
116 } CRYPTUI_VIEWCERTIFICATE_STRUCTA, *PCRYPTUI_VIEWCERTIFICATE_STRUCTA;
117 typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTA *PCCRYPTUI_VIEWCERTIFICATE_STRUCTA;
118 
119 typedef struct tagCRYPTUI_VIEWCERTIFICATE_STRUCTW
120 {
121     DWORD             dwSize;
122     HWND              hwndParent;
123     DWORD             dwFlags;
124     LPCWSTR           szTitle;
125     PCCERT_CONTEXT    pCertContext;
126     LPCSTR           *rgszPurposes;
127     DWORD             cPurposes;
128     union {
129         CRYPT_PROVIDER_DATA const *pCryptProviderData;
130         HANDLE                     hWVTStateData;
131     } DUMMYUNIONNAME;
132     BOOL              fpCryptProviderDataTrustedUsage;
133     DWORD             idxSigner;
134     DWORD             idxCert;
135     BOOL              fCounterSigner;
136     DWORD             idxCounterSigner;
137     DWORD             cStores;
138     HCERTSTORE       *rghStores;
139     DWORD             cPropSheetPages;
140     LPCPROPSHEETPAGEW rgPropSheetPages;
141     DWORD             nStartPage;
142 } CRYPTUI_VIEWCERTIFICATE_STRUCTW, *PCRYPTUI_VIEWCERTIFICATE_STRUCTW;
143 typedef const CRYPTUI_VIEWCERTIFICATE_STRUCTW *PCCRYPTUI_VIEWCERTIFICATE_STRUCTW;
144 
145 #define CRYPTUI_VIEWCERTIFICATE_STRUCT   WINELIB_NAME_AW(CRYPTUI_VIEWCERTIFICATE_STRUCT)
146 #define PCCRYPTUI_VIEWCERTIFICATE_STRUCT WINELIB_NAME_AW(PCCRYPTUI_VIEWCERTIFICATE_STRUCT)
147 
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)
153 
154 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO
155 {
156     DWORD   dwSize;
157     GUID   *pGuidSubject;
158     DWORD   cbBlob;
159     BYTE   *pbBlob;
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;
164 
165 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO
166 {
167     DWORD          dwSize;
168     DWORD          cCertStore;
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;
175 
176 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO
177 {
178     DWORD  dwSize;
179     LPWSTR pwszPvkFileName;
180     LPWSTR pwszProvName;
181     DWORD  dwProvType;
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;
186 
187 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO
188 {
189     DWORD  dwSize;
190     LPWSTR pwszSigningCertFileName;
191     DWORD  dwPvkChoice;
192     union {
193         PCCRYPTUI_WIZ_DIGITAL_SIGN_PVK_FILE_INFO pPvkFileInfo;
194         PCRYPT_KEY_PROV_INFO                    pPvkProvInfo;
195     } DUMMYUNIONNAME;
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;
200 
201 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO
202 {
203     DWORD             dwSize;
204     DWORD             dwAttrFlags;
205     LPCWSTR           pwszDescription;
206     LPCWSTR           pwszMoreInfoLocation;
207     LPCSTR            pszHashAlg;
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;
216 
217 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_INFO
218 {
219     DWORD   dwSize;
220     DWORD   dwSubjectChoice;
221     union {
222         LPCWSTR                              pwszFileName;
223         PCCRYPTUI_WIZ_DIGITAL_SIGN_BLOB_INFO pSignBlobInfo;
224     } DUMMYUNIONNAME1;
225     DWORD   dwSigningCertChoice;
226     union {
227         PCCERT_CONTEXT                           pSigningCertContext;
228         PCCRYPTUI_WIZ_DIGITAL_SIGN_STORE_INFO    pSigningCertStore;
229         PCCRYPTUI_WIZ_DIGITAL_SIGN_CERT_PVK_INFO pSigningCertPvkInfo;
230     } DUMMYUNIONNAME2;
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;
236 
237 typedef struct _CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT
238 {
239     DWORD dwSize;
240     DWORD cbBlob;
241     BYTE *pbBlob;
242 } CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT, *PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
243 typedef const CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT;
244 
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
249 
250 BOOL WINAPI CryptUIWizDigitalSign(DWORD dwFlags, HWND hwndParent,
251  LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_DIGITAL_SIGN_INFO pDigitalSignInfo,
252  PCCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT *ppSignContext);
253 
254 BOOL WINAPI CryptUIWizFreeDigitalSignContext(
255  PCRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT pSignContext);
256 
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
265 
266 typedef struct _CRYPTUI_WIZ_EXPORT_INFO
267 {
268     DWORD       dwSize;
269     LPCWSTR     pwszExportFileName;
270     DWORD       dwSubjectChoice;
271     union {
272         PCCERT_CONTEXT pCertContext;
273         PCCTL_CONTEXT  pCTLContext;
274         PCCRL_CONTEXT  pCRLContext;
275         HCERTSTORE     hCertStore;
276     } DUMMYUNIONNAME;
277     DWORD       cStores;
278     HCERTSTORE *rghStores;
279 } CRYPTUI_WIZ_EXPORT_INFO, *PCRYPTUI_WIZ_EXPORT_INFO;
280 typedef const CRYPTUI_WIZ_EXPORT_INFO *PCCRYPTUI_WIZ_EXPORT_INFO;
281 
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
288 
289 typedef struct _CRYPTUI_WIZ_EXPORT_CERTCONTEXT_INFO
290 {
291     DWORD   dwSize;
292     DWORD   dwExportFormat;
293     BOOL    fExportChain;
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;
300 
301 BOOL WINAPI CryptUIWizExport(DWORD dwFlags, HWND hwndParent,
302  LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_EXPORT_INFO pExportInfo, void *pvoid);
303 
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
310 
311 typedef struct _CRYPTUI_WIZ_IMPORT_SUBJECT_INFO
312 {
313     DWORD   dwSize;
314     DWORD   dwSubjectChoice;
315     union {
316         LPCWSTR        pwszFileName;
317         PCCERT_CONTEXT pCertContext;
318         PCCTL_CONTEXT  pCTLContext;
319         PCCRL_CONTEXT  pCRLContext;
320         HCERTSTORE     hCertStore;
321     } DUMMYUNIONNAME;
322     DWORD   dwFlags;
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;
326 
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
335 
336 BOOL WINAPI CryptUIWizImport(DWORD dwFlags, HWND hwndParent,
337  LPCWSTR pwszWizardTitle, PCCRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
338  HCERTSTORE hDestCertStore);
339 
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);
343 
344 /* Values for CRYPTUI_SELECTCERTIFICATE_STRUCT's dwFlags */
345 #define CRYPTUI_SELECTCERT_MULTISELECT 0x00000001
346 
347 typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTA
348 {
349     DWORD               dwSize;
350     HWND                hwndParent;
351     DWORD               dwFlags;
352     LPCSTR              szTitle;
353     DWORD               dwDontUseColumn;
354     LPCSTR              szDisplayString;
355     PFNCFILTERPROC      pFilterCallback;
356     PFNCCERTDISPLAYPROC pDisplayCallback;
357     void               *pvCallbackData;
358     DWORD               cDisplayStores;
359     HCERTSTORE         *rghDisplayStores;
360     DWORD               cStores;
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;
368 
369 typedef struct _CRYPTUI_SELECTCERTIFICATE_STRUCTW
370 {
371     DWORD               dwSize;
372     HWND                hwndParent;
373     DWORD               dwFlags;
374     LPCWSTR             szTitle;
375     DWORD               dwDontUseColumn;
376     LPCWSTR             szDisplayString;
377     PFNCFILTERPROC      pFilterCallback;
378     PFNCCERTDISPLAYPROC pDisplayCallback;
379     void               *pvCallbackData;
380     DWORD               cDisplayStores;
381     HCERTSTORE         *rghDisplayStores;
382     DWORD               cStores;
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;
390 
391 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateA(
392  PCCRYPTUI_SELECTCERTIFICATE_STRUCTA pcsc);
393 PCCERT_CONTEXT WINAPI CryptUIDlgSelectCertificateW(
394  PCCRYPTUI_SELECTCERTIFICATE_STRUCTW pcsc);
395 
396 typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTA
397 {
398     DWORD             dwSize;
399     HWND              hwndParent;
400     DWORD             dwFlags;
401     LPCSTR            szTitle;
402     CMSG_SIGNER_INFO *pSignerInfo;
403     HCRYPTMSG         hMsg;
404     LPCSTR            pszOID;
405     DWORD_PTR         dwReserved;
406     DWORD             cStores;
407     HCERTSTORE       *rghStores;
408     DWORD             cPropSheetPages;
409     LPCPROPSHEETPAGEA rgPropSheetPages;
410 } CRYPTUI_VIEWSIGNERINFO_STRUCTA, *PCRYPTUI_VIEWSIGNERINFO_STRUCTA;
411 
412 typedef struct tagCRYPTUI_VIEWSIGNERINFO_STRUCTW
413 {
414     DWORD             dwSize;
415     HWND              hwndParent;
416     DWORD             dwFlags;
417     LPCWSTR           szTitle;
418     CMSG_SIGNER_INFO *pSignerInfo;
419     HCRYPTMSG         hMsg;
420     LPCSTR            pszOID;
421     DWORD_PTR         dwReserved;
422     DWORD             cStores;
423     HCERTSTORE       *rghStores;
424     DWORD             cPropSheetPages;
425     LPCPROPSHEETPAGEW rgPropSheetPages;
426 } CRYPTUI_VIEWSIGNERINFO_STRUCTW, *PCRYPTUI_VIEWSIGNERINFO_STRUCTW;
427 
428 BOOL WINAPI CryptUIDlgViewSignerInfoA(CRYPTUI_VIEWSIGNERINFO_STRUCTA *pcvsi);
429 BOOL WINAPI CryptUIDlgViewSignerInfoW(CRYPTUI_VIEWSIGNERINFO_STRUCTW *pcvsi);
430 
431 #include <poppack.h>
432 
433 #ifdef __cplusplus
434 }
435 #endif
436 
437 #endif
438