1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef WINTRUST_H
7#define WINTRUST_H
8
9#include <wincrypt.h>
10
11#ifdef __cplusplus
12extern "C"
13{
14#endif
15
16#ifndef WIN_CERT_REVISION_1_0
17#define WT_DEFINE_ALL_APIS
18#else
19#undef WT_DEFINE_ALL_APIS
20#endif
21
22#include <pshpack8.h>
23
24#define WTD_UI_ALL 1
25#define WTD_UI_NONE 2
26#define WTD_UI_NOBAD 3
27#define WTD_UI_NOGOOD 4
28
29#define WTD_REVOKE_NONE 0x00000000
30#define WTD_REVOKE_WHOLECHAIN 0x00000001
31
32#define WTD_CHOICE_FILE 1
33#define WTD_CHOICE_CATALOG 2
34#define WTD_CHOICE_BLOB 3
35#define WTD_CHOICE_SIGNER 4
36#define WTD_CHOICE_CERT 5
37#define WTD_CHOICE_DETACHED_SIG 6
38
39#define WTD_STATEACTION_IGNORE 0x00000000
40#define WTD_STATEACTION_VERIFY 0x00000001
41#define WTD_STATEACTION_CLOSE 0x00000002
42#define WTD_STATEACTION_AUTO_CACHE 0x00000003
43#define WTD_STATEACTION_AUTO_CACHE_FLUSH 0x00000004
44
45#define WTD_PROV_FLAGS_MASK 0x0000FFFF
46#define WTD_USE_IE4_TRUST_FLAG 0x00000001
47#define WTD_NO_IE4_CHAIN_FLAG 0x00000002
48#define WTD_NO_POLICY_USAGE_FLAG 0x00000004
49#define WTD_USE_LOCAL_MACHINE_CERTS 0x00000008
50#define WTD_REVOCATION_CHECK_NONE 0x00000010
51#define WTD_REVOCATION_CHECK_END_CERT 0x00000020
52#define WTD_REVOCATION_CHECK_CHAIN 0x00000040
53#define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080
54#define WTD_SAFER_FLAG 0x00000100
55#define WTD_HASH_ONLY_FLAG 0x00000200
56#define WTD_USE_DEFAULT_OSVER_CHECK 0x00000400
57#define WTD_LIFETIME_SIGNING_FLAG 0x00000800
58#define WTD_CACHE_ONLY_URL_RETRIEVAL 0x00001000
59#define WTD_DISABLE_MD2_MD4 0x00002000
60#define WTD_MOTW 0x00004000
61#define WTD_CODE_INTEGRITY_DRIVER_MODE 0x00008000
62
63#define WTD_UICONTEXT_EXECUTE 0
64#define WTD_UICONTEXT_INSTALL 1
65
66 typedef struct _WINTRUST_DATA {
67 DWORD cbStruct;
68 LPVOID pPolicyCallbackData;
69 LPVOID pSIPClientData;
70 DWORD dwUIChoice;
71 DWORD fdwRevocationChecks;
72 DWORD dwUnionChoice;
73 __C89_NAMELESS union {
74 struct WINTRUST_FILE_INFO_ *pFile;
75 struct WINTRUST_CATALOG_INFO_ *pCatalog;
76 struct WINTRUST_BLOB_INFO_ *pBlob;
77 struct WINTRUST_SGNR_INFO_ *pSgnr;
78 struct WINTRUST_CERT_INFO_ *pCert;
79 struct WINTRUST_DETACHED_SIG_INFO_ *pDetachedSig;
80 };
81 DWORD dwStateAction;
82 HANDLE hWVTStateData;
83 WCHAR *pwszURLReference;
84 DWORD dwProvFlags;
85 DWORD dwUIContext;
86#if (NTDDI_VERSION >= NTDDI_WIN8)
87 struct WINTRUST_SIGNATURE_SETTINGS_ *pSignatureSettings;
88#endif
89 } WINTRUST_DATA,*PWINTRUST_DATA;
90
91#if (NTDDI_VERSION >= NTDDI_WIN8)
92 typedef struct WINTRUST_SIGNATURE_SETTINGS_ {
93 DWORD cbStruct;
94 DWORD dwIndex;
95 DWORD dwFlags;
96 DWORD cSecondarySigs;
97 DWORD dwVerifiedSigIndex;
98 PCERT_STRONG_SIGN_PARA pCryptoPolicy;
99 } WINTRUST_SIGNATURE_SETTINGS,*PWINTRUST_SIGNATURE_SETTINGS;
100
101#define WSS_VERIFY_SPECIFIC 0x00000001
102#define WSS_GET_SECONDARY_SIG_COUNT 0x00000002
103
104#if (NTDDI_VERSION >= NTDDI_WINBLUE)
105#define WSS_VERIFY_SEALING 0x00000004
106#define WSS_INPUT_FLAG_MASK 0x00000007
107#define WSS_OUT_SEALING_STATUS_VERIFIED 0x80000000
108#define WSS_OUT_HAS_SEALING_INTENT 0x40000000
109#define WSS_OUT_FILE_SUPPORTS_SEAL 0x20000000
110#define WSS_OUTPUT_FLAG_MASK 0xe0000000
111#endif /* (NTDDI_VERSION >= NTDDI_WINBLUE) */
112#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
113
114 typedef struct WINTRUST_FILE_INFO_ {
115 DWORD cbStruct;
116 LPCWSTR pcwszFilePath;
117 HANDLE hFile;
118 GUID *pgKnownSubject;
119 } WINTRUST_FILE_INFO,*PWINTRUST_FILE_INFO;
120
121 typedef struct WINTRUST_DETACHED_SIG_HANDLES_ {
122 HANDLE hContentFile;
123 HANDLE hSignatureFile;
124 } WINTRUST_DETACHED_SIG_FILE_HANDLES,*PWINTRUST_DETACHED_SIG_FILE_HANDLES;
125
126 typedef struct WINTRUST_DETACHED_SIG_BLOBS_ {
127 LARGE_INTEGER cbContentObject;
128 BYTE *pbContentObject;
129 DWORD cbSignatureObject;
130 BYTE *pbSignatureObject;
131 } WINTRUST_DETACHED_SIG_BLOBS,*PWINTRUST_DETACHED_SIG_BLOBS;
132
133#define WINTRUST_DETACHED_SIG_CHOICE_HANDLE 1
134#define WINTRUST_DETACHED_SIG_CHOICE_BLOB 2
135
136 typedef struct WINTRUST_DETACHED_SIG_INFO_ {
137 DWORD cbStruct;
138 DWORD dwUnionChoice;
139 __C89_NAMELESS union {
140 struct WINTRUST_DETACHED_SIG_HANDLES_ *pDetachedSigHandles;
141 struct WINTRUST_DETACHED_SIG_BLOBS_ *pDetachedSigBlobs;
142 };
143 } WINTRUST_DETACHED_SIG_INFO,*PWINTRUST_DETACHED_SIG_INFO;
144
145 typedef HANDLE HCATADMIN;
146
147 typedef struct WINTRUST_CATALOG_INFO_ {
148 DWORD cbStruct;
149 DWORD dwCatalogVersion;
150 LPCWSTR pcwszCatalogFilePath;
151 LPCWSTR pcwszMemberTag;
152 LPCWSTR pcwszMemberFilePath;
153 HANDLE hMemberFile;
154 BYTE *pbCalculatedFileHash;
155 DWORD cbCalculatedFileHash;
156 PCCTL_CONTEXT pcCatalogContext;
157#if (NTDDI_VERSION >= NTDDI_WIN8)
158 HCATADMIN hCatAdmin;
159#endif
160 } WINTRUST_CATALOG_INFO,*PWINTRUST_CATALOG_INFO;
161
162 typedef struct WINTRUST_BLOB_INFO_ {
163 DWORD cbStruct;
164 GUID gSubject;
165 LPCWSTR pcwszDisplayName;
166 DWORD cbMemObject;
167 BYTE *pbMemObject;
168 DWORD cbMemSignedMsg;
169 BYTE *pbMemSignedMsg;
170 } WINTRUST_BLOB_INFO,*PWINTRUST_BLOB_INFO;
171
172 typedef struct WINTRUST_SGNR_INFO_ {
173 DWORD cbStruct;
174 LPCWSTR pcwszDisplayName;
175 CMSG_SIGNER_INFO *psSignerInfo;
176 DWORD chStores;
177 HCERTSTORE *pahStores;
178 } WINTRUST_SGNR_INFO,*PWINTRUST_SGNR_INFO;
179
180#define WTCI_DONT_OPEN_STORES 0x00000001
181#define WTCI_OPEN_ONLY_ROOT 0x00000002
182
183 typedef struct WINTRUST_CERT_INFO_ {
184 DWORD cbStruct;
185 LPCWSTR pcwszDisplayName;
186 CERT_CONTEXT *psCertContext;
187 DWORD chStores;
188 HCERTSTORE *pahStores;
189 DWORD dwFlags;
190 FILETIME *psftVerifyAsOf;
191 } WINTRUST_CERT_INFO,*PWINTRUST_CERT_INFO;
192
193#include <poppack.h>
194
195 extern LONG WINAPI WinVerifyTrust(HWND hwnd,GUID *pgActionID,LPVOID pWVTData);
196 extern HRESULT WINAPI WinVerifyTrustEx(HWND hwnd,GUID *pgActionID,WINTRUST_DATA *pWinTrustData);
197
198#define WTPF_TRUSTTEST 0x00000020
199#define WTPF_TESTCANBEVALID 0x00000080
200#define WTPF_IGNOREEXPIRATION 0x00000100
201#define WTPF_IGNOREREVOKATION 0x00000200
202#define WTPF_OFFLINEOK_IND 0x00000400
203#define WTPF_OFFLINEOK_COM 0x00000800
204#define WTPF_OFFLINEOKNBU_IND 0x00001000
205#define WTPF_OFFLINEOKNBU_COM 0x00002000
206#define WTPF_VERIFY_V1_OFF 0x00010000
207#define WTPF_IGNOREREVOCATIONONTS 0x00020000
208#define WTPF_ALLOWONLYPERTRUST 0x00040000
209
210 extern void WINAPI WintrustGetRegPolicyFlags(DWORD *pdwPolicyFlags);
211 extern WINBOOL WINAPI WintrustSetRegPolicyFlags(DWORD dwPolicyFlags);
212
213#define TRUSTERROR_STEP_WVTPARAMS 0
214#define TRUSTERROR_STEP_FILEIO 2
215#define TRUSTERROR_STEP_SIP 3
216#define TRUSTERROR_STEP_SIPSUBJINFO 5
217#define TRUSTERROR_STEP_CATALOGFILE 6
218#define TRUSTERROR_STEP_CERTSTORE 7
219#define TRUSTERROR_STEP_MESSAGE 8
220#define TRUSTERROR_STEP_MSG_SIGNERCOUNT 9
221#define TRUSTERROR_STEP_MSG_INNERCNTTYPE 10
222#define TRUSTERROR_STEP_MSG_INNERCNT 11
223#define TRUSTERROR_STEP_MSG_STORE 12
224#define TRUSTERROR_STEP_MSG_SIGNERINFO 13
225#define TRUSTERROR_STEP_MSG_SIGNERCERT 14
226#define TRUSTERROR_STEP_MSG_CERTCHAIN 15
227#define TRUSTERROR_STEP_MSG_COUNTERSIGINFO 16
228#define TRUSTERROR_STEP_MSG_COUNTERSIGCERT 17
229#define TRUSTERROR_STEP_VERIFY_MSGHASH 18
230#define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19
231
232#define TRUSTERROR_STEP_FINAL_WVTINIT 30
233#define TRUSTERROR_STEP_FINAL_INITPROV 31
234#define TRUSTERROR_STEP_FINAL_OBJPROV 32
235#define TRUSTERROR_STEP_FINAL_SIGPROV 33
236#define TRUSTERROR_STEP_FINAL_CERTPROV 34
237#define TRUSTERROR_STEP_FINAL_CERTCHKPROV 35
238#define TRUSTERROR_STEP_FINAL_POLICYPROV 36
239#define TRUSTERROR_STEP_FINAL_UIPROV 37
240
241#define TRUSTERROR_MAX_STEPS 38
242
243 struct _CRYPT_PROVIDER_DATA;
244 struct _CRYPT_PROVIDER_SGNR;
245 struct _CRYPT_PROVIDER_PRIVDATA;
246 struct _CRYPT_PROVIDER_DEFUSAGE;
247
248 typedef void *(*PFN_CPD_MEM_ALLOC)(DWORD cbSize);
249 typedef void (*PFN_CPD_MEM_FREE)(void *pvMem2Free);
250 typedef WINBOOL (*PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData,HCERTSTORE hStore2Add);
251 typedef WINBOOL (*PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData,WINBOOL fCounterSigner,DWORD idxSigner,struct _CRYPT_PROVIDER_SGNR *pSgnr2Add);
252 typedef WINBOOL (*PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData,DWORD idxSigner,WINBOOL fCounterSigner,DWORD idxCounterSigner,PCCERT_CONTEXT pCert2Add);
253 typedef WINBOOL (*PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData,struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);
254 typedef HRESULT (*PFN_PROVIDER_INIT_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
255 typedef HRESULT (*PFN_PROVIDER_OBJTRUST_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
256 typedef HRESULT (*PFN_PROVIDER_SIGTRUST_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
257 typedef HRESULT (*PFN_PROVIDER_CERTTRUST_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
258 typedef HRESULT (*PFN_PROVIDER_FINALPOLICY_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
259 typedef HRESULT (*PFN_PROVIDER_TESTFINALPOLICY_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
260 typedef HRESULT (*PFN_PROVIDER_CLEANUP_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData);
261 typedef WINBOOL (*PFN_PROVIDER_CERTCHKPOLICY_CALL)(struct _CRYPT_PROVIDER_DATA *pProvData,DWORD idxSigner,WINBOOL fCounterSignerChain,DWORD idxCounterSigner);
262
263#define WVT_OFFSETOF(t,f) ((ULONG)((ULONG_PTR)(&((t*)0)->f)))
264#define WVT_ISINSTRUCT(structtypedef,structpassedsize,member) ((WVT_OFFSETOF(structtypedef,member) < structpassedsize) ? TRUE : FALSE)
265#define WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(structtypedef,structpassedsize,member) WVT_ISINSTRUCT(structtypedef,structpassedsize,member)
266
267#include <pshpack8.h>
268
269#define CPD_CHOICE_SIP 1
270
271#define CPD_USE_NT5_CHAIN_FLAG 0x80000000
272#define CPD_REVOCATION_CHECK_NONE 0x00010000
273#define CPD_REVOCATION_CHECK_END_CERT 0x00020000
274#define CPD_REVOCATION_CHECK_CHAIN 0x00040000
275#define CPD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00080000
276
277#define CPD_UISTATE_MODE_PROMPT 0x00000000
278#define CPD_UISTATE_MODE_BLOCK 0x00000001
279#define CPD_UISTATE_MODE_ALLOW 0x00000002
280#define CPD_UISTATE_MODE_MASK 0x00000003
281
282 typedef struct _CRYPT_PROVIDER_DATA {
283 DWORD cbStruct;
284 WINTRUST_DATA *pWintrustData;
285 WINBOOL fOpenedFile;
286 HWND hWndParent;
287 GUID *pgActionID;
288 HCRYPTPROV hProv;
289 DWORD dwError;
290 DWORD dwRegSecuritySettings;
291 DWORD dwRegPolicySettings;
292 struct _CRYPT_PROVIDER_FUNCTIONS *psPfns;
293 DWORD cdwTrustStepErrors;
294 DWORD *padwTrustStepErrors;
295 DWORD chStores;
296 HCERTSTORE *pahStores;
297 DWORD dwEncoding;
298 HCRYPTMSG hMsg;
299 DWORD csSigners;
300 struct _CRYPT_PROVIDER_SGNR *pasSigners;
301 DWORD csProvPrivData;
302 struct _CRYPT_PROVIDER_PRIVDATA *pasProvPrivData;
303 DWORD dwSubjectChoice;
304 __C89_NAMELESS union {
305 struct _PROVDATA_SIP *pPDSip;
306 };
307 char *pszUsageOID;
308 WINBOOL fRecallWithState;
309 FILETIME sftSystemTime;
310 char *pszCTLSignerUsageOID;
311 DWORD dwProvFlags;
312 DWORD dwFinalError;
313 PCERT_USAGE_MATCH pRequestUsage;
314 DWORD dwTrustPubSettings;
315 DWORD dwUIStateFlags;
316 } CRYPT_PROVIDER_DATA,*PCRYPT_PROVIDER_DATA;
317
318 typedef struct _CRYPT_PROVIDER_FUNCTIONS {
319 DWORD cbStruct;
320 PFN_CPD_MEM_ALLOC pfnAlloc;
321 PFN_CPD_MEM_FREE pfnFree;
322 PFN_CPD_ADD_STORE pfnAddStore2Chain;
323 PFN_CPD_ADD_SGNR pfnAddSgnr2Chain;
324 PFN_CPD_ADD_CERT pfnAddCert2Chain;
325 PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;
326 PFN_PROVIDER_INIT_CALL pfnInitialize;
327 PFN_PROVIDER_OBJTRUST_CALL pfnObjectTrust;
328 PFN_PROVIDER_SIGTRUST_CALL pfnSignatureTrust;
329 PFN_PROVIDER_CERTTRUST_CALL pfnCertificateTrust;
330 PFN_PROVIDER_FINALPOLICY_CALL pfnFinalPolicy;
331 PFN_PROVIDER_CERTCHKPOLICY_CALL pfnCertCheckPolicy;
332 PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;
333 struct _CRYPT_PROVUI_FUNCS *psUIpfns;
334 PFN_PROVIDER_CLEANUP_CALL pfnCleanupPolicy;
335 } CRYPT_PROVIDER_FUNCTIONS,*PCRYPT_PROVIDER_FUNCTIONS;
336
337 typedef WINBOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog,struct _CRYPT_PROVIDER_DATA *pProvData);
338
339 typedef struct _CRYPT_PROVUI_FUNCS {
340 DWORD cbStruct;
341 struct _CRYPT_PROVUI_DATA *psUIData;
342 PFN_PROVUI_CALL pfnOnMoreInfoClick;
343 PFN_PROVUI_CALL pfnOnMoreInfoClickDefault;
344 PFN_PROVUI_CALL pfnOnAdvancedClick;
345 PFN_PROVUI_CALL pfnOnAdvancedClickDefault;
346 } CRYPT_PROVUI_FUNCS,*PCRYPT_PROVUI_FUNCS;
347
348 typedef struct _CRYPT_PROVUI_DATA {
349 DWORD cbStruct;
350 DWORD dwFinalError;
351 WCHAR *pYesButtonText;
352 WCHAR *pNoButtonText;
353 WCHAR *pMoreInfoButtonText;
354 WCHAR *pAdvancedLinkText;
355 WCHAR *pCopyActionText;
356 WCHAR *pCopyActionTextNoTS;
357 WCHAR *pCopyActionTextNotSigned;
358 } CRYPT_PROVUI_DATA,*PCRYPT_PROVUI_DATA;
359
360#define SGNR_TYPE_TIMESTAMP 0x00000010
361
362 typedef struct _CRYPT_PROVIDER_SGNR {
363 DWORD cbStruct;
364 FILETIME sftVerifyAsOf;
365 DWORD csCertChain;
366 struct _CRYPT_PROVIDER_CERT *pasCertChain;
367 DWORD dwSignerType;
368 CMSG_SIGNER_INFO *psSigner;
369 DWORD dwError;
370 DWORD csCounterSigners;
371 struct _CRYPT_PROVIDER_SGNR *pasCounterSigners;
372 PCCERT_CHAIN_CONTEXT pChainContext;
373 } CRYPT_PROVIDER_SGNR,*PCRYPT_PROVIDER_SGNR;
374
375#define CERT_CONFIDENCE_SIG 0x10000000
376#define CERT_CONFIDENCE_TIME 0x01000000
377#define CERT_CONFIDENCE_TIMENEST 0x00100000
378#define CERT_CONFIDENCE_AUTHIDEXT 0x00010000
379#define CERT_CONFIDENCE_HYGIENE 0x00001000
380#define CERT_CONFIDENCE_HIGHEST 0x11111000
381
382 typedef struct _CRYPT_PROVIDER_CERT {
383 DWORD cbStruct;
384 PCCERT_CONTEXT pCert;
385 WINBOOL fCommercial;
386 WINBOOL fTrustedRoot;
387 WINBOOL fSelfSigned;
388 WINBOOL fTestCert;
389 DWORD dwRevokedReason;
390 DWORD dwConfidence;
391 DWORD dwError;
392 CTL_CONTEXT *pTrustListContext;
393 WINBOOL fTrustListSignerCert;
394 PCCTL_CONTEXT pCtlContext;
395 DWORD dwCtlError;
396 WINBOOL fIsCyclic;
397 PCERT_CHAIN_ELEMENT pChainElement;
398 } CRYPT_PROVIDER_CERT,*PCRYPT_PROVIDER_CERT;
399
400 typedef struct _CRYPT_PROVIDER_PRIVDATA {
401 DWORD cbStruct;
402 GUID gProviderID;
403 DWORD cbProvData;
404 void *pvProvData;
405 } CRYPT_PROVIDER_PRIVDATA,*PCRYPT_PROVIDER_PRIVDATA;
406
407 typedef struct _PROVDATA_SIP {
408 DWORD cbStruct;
409 GUID gSubject;
410 struct SIP_DISPATCH_INFO_ *pSip;
411 struct SIP_DISPATCH_INFO_ *pCATSip;
412 struct SIP_SUBJECTINFO_ *psSipSubjectInfo;
413 struct SIP_SUBJECTINFO_ *psSipCATSubjectInfo;
414 struct SIP_INDIRECT_DATA_ *psIndirectData;
415 } PROVDATA_SIP,*PPROVDATA_SIP;
416
417#define WT_CURRENT_VERSION 0x00000200
418
419 typedef struct _CRYPT_TRUST_REG_ENTRY {
420 DWORD cbStruct;
421 WCHAR *pwszDLLName;
422 WCHAR *pwszFunctionName;
423 } CRYPT_TRUST_REG_ENTRY,*PCRYPT_TRUST_REG_ENTRY;
424
425 typedef struct _CRYPT_REGISTER_ACTIONID {
426 DWORD cbStruct;
427 CRYPT_TRUST_REG_ENTRY sInitProvider;
428 CRYPT_TRUST_REG_ENTRY sObjectProvider;
429 CRYPT_TRUST_REG_ENTRY sSignatureProvider;
430 CRYPT_TRUST_REG_ENTRY sCertificateProvider;
431 CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider;
432 CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider;
433 CRYPT_TRUST_REG_ENTRY sTestPolicyProvider;
434 CRYPT_TRUST_REG_ENTRY sCleanupProvider;
435 } CRYPT_REGISTER_ACTIONID,*PCRYPT_REGISTER_ACTIONID;
436
437 typedef WINBOOL (*PFN_ALLOCANDFILLDEFUSAGE)(const char *pszUsageOID,struct _CRYPT_PROVIDER_DEFUSAGE *psDefUsage);
438 typedef WINBOOL (*PFN_FREEDEFUSAGE)(const char *pszUsageOID,struct _CRYPT_PROVIDER_DEFUSAGE *psDefUsage);
439
440 typedef struct _CRYPT_PROVIDER_REGDEFUSAGE {
441 DWORD cbStruct;
442 GUID *pgActionID;
443 WCHAR *pwszDllName;
444 char *pwszLoadCallbackDataFunctionName;
445 char *pwszFreeCallbackDataFunctionName;
446 } CRYPT_PROVIDER_REGDEFUSAGE,*PCRYPT_PROVIDER_REGDEFUSAGE;
447
448 typedef struct _CRYPT_PROVIDER_DEFUSAGE {
449 DWORD cbStruct;
450 GUID gActionID;
451 LPVOID pDefPolicyCallbackData;
452 LPVOID pDefSIPClientData;
453 } CRYPT_PROVIDER_DEFUSAGE,*PCRYPT_PROVIDER_DEFUSAGE;
454
455#include <poppack.h>
456
457#define WT_PROVIDER_DLL_NAME L"WINTRUST.DLL"
458#define WT_PROVIDER_CERTTRUST_FUNCTION L"WintrustCertificateTrust"
459
460 extern WINBOOL WINAPI WintrustAddActionID(GUID *pgActionID,DWORD fdwFlags,CRYPT_REGISTER_ACTIONID *psProvInfo);
461
462#define WT_ADD_ACTION_ID_RET_RESULT_FLAG 0x1
463
464 extern WINBOOL WINAPI WintrustRemoveActionID(GUID *pgActionID);
465 extern WINBOOL WINAPI WintrustLoadFunctionPointers(GUID *pgActionID,CRYPT_PROVIDER_FUNCTIONS *pPfns);
466 extern WINBOOL WINAPI WintrustAddDefaultForUsage(const char *pszUsageOID,CRYPT_PROVIDER_REGDEFUSAGE *psDefUsage);
467
468#define DWACTION_ALLOCANDFILL 1
469#define DWACTION_FREE 2
470
471 extern WINBOOL WINAPI WintrustGetDefaultForUsage(DWORD dwAction,const char *pszUsageOID,CRYPT_PROVIDER_DEFUSAGE *psUsage);
472 extern CRYPT_PROVIDER_SGNR *WINAPI WTHelperGetProvSignerFromChain(CRYPT_PROVIDER_DATA *pProvData,DWORD idxSigner,WINBOOL fCounterSigner,DWORD idxCounterSigner);
473 extern CRYPT_PROVIDER_CERT *WINAPI WTHelperGetProvCertFromChain(CRYPT_PROVIDER_SGNR *pSgnr,DWORD idxCert);
474 extern CRYPT_PROVIDER_DATA *WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);
475 extern CRYPT_PROVIDER_PRIVDATA *WINAPI WTHelperGetProvPrivateDataFromChain(CRYPT_PROVIDER_DATA *pProvData,GUID *pgProviderID);
476 extern WINBOOL WINAPI WTHelperCertIsSelfSigned(DWORD dwEncoding,CERT_INFO *pCert);
477 extern HRESULT WINAPI WTHelperCertCheckValidSignature(CRYPT_PROVIDER_DATA *pProvData);
478
479#include <pshpack8.h>
480
481#define szOID_TRUSTED_CODESIGNING_CA_LIST "1.3.6.1.4.1.311.2.2.1"
482#define szOID_TRUSTED_CLIENT_AUTH_CA_LIST "1.3.6.1.4.1.311.2.2.2"
483#define szOID_TRUSTED_SERVER_AUTH_CA_LIST "1.3.6.1.4.1.311.2.2.3"
484
485#define SPC_COMMON_NAME_OBJID szOID_COMMON_NAME
486#define SPC_TIME_STAMP_REQUEST_OBJID "1.3.6.1.4.1.311.3.2.1"
487#define SPC_INDIRECT_DATA_OBJID "1.3.6.1.4.1.311.2.1.4"
488#define SPC_SP_AGENCY_INFO_OBJID "1.3.6.1.4.1.311.2.1.10"
489#define SPC_STATEMENT_TYPE_OBJID "1.3.6.1.4.1.311.2.1.11"
490#define SPC_SP_OPUS_INFO_OBJID "1.3.6.1.4.1.311.2.1.12"
491#define SPC_CERT_EXTENSIONS_OBJID "1.3.6.1.4.1.311.2.1.14"
492#define SPC_PE_IMAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.15"
493#define SPC_RAW_FILE_DATA_OBJID "1.3.6.1.4.1.311.2.1.18"
494#define SPC_STRUCTURED_STORAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.19"
495#define SPC_JAVA_CLASS_DATA_OBJID "1.3.6.1.4.1.311.2.1.20"
496#define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.21"
497#define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.22"
498#define SPC_CAB_DATA_OBJID "1.3.6.1.4.1.311.2.1.25"
499#define SPC_GLUE_RDN_OBJID "1.3.6.1.4.1.311.2.1.25"
500#define SPC_MINIMAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.26"
501#define SPC_FINANCIAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.27"
502#define SPC_LINK_OBJID "1.3.6.1.4.1.311.2.1.28"
503#define SPC_SIGINFO_OBJID "1.3.6.1.4.1.311.2.1.30"
504
505#define CAT_NAMEVALUE_OBJID "1.3.6.1.4.1.311.12.2.1"
506#define CAT_MEMBERINFO_OBJID "1.3.6.1.4.1.311.12.2.2"
507
508#define SPC_SP_AGENCY_INFO_STRUCT ((LPCSTR) 2000)
509#define SPC_MINIMAL_CRITERIA_STRUCT ((LPCSTR) 2001)
510#define SPC_FINANCIAL_CRITERIA_STRUCT ((LPCSTR) 2002)
511#define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003)
512#define SPC_PE_IMAGE_DATA_STRUCT ((LPCSTR) 2004)
513#define SPC_LINK_STRUCT ((LPCSTR) 2005)
514#define SPC_STATEMENT_TYPE_STRUCT ((LPCSTR) 2006)
515#define SPC_SP_OPUS_INFO_STRUCT ((LPCSTR) 2007)
516#define SPC_CAB_DATA_STRUCT ((LPCSTR) 2008)
517#define SPC_JAVA_CLASS_DATA_STRUCT ((LPCSTR) 2009)
518
519#define SPC_SIGINFO_STRUCT ((LPCSTR) 2130)
520
521#define CAT_NAMEVALUE_STRUCT ((LPCSTR) 2221)
522#define CAT_MEMBERINFO_STRUCT ((LPCSTR) 2222)
523
524#define SPC_UUID_LENGTH 16
525
526 typedef BYTE SPC_UUID[SPC_UUID_LENGTH];
527
528 typedef struct _SPC_SERIALIZED_OBJECT {
529 SPC_UUID ClassId;
530 CRYPT_DATA_BLOB SerializedData;
531 } SPC_SERIALIZED_OBJECT,*PSPC_SERIALIZED_OBJECT;
532
533 typedef struct SPC_SIGINFO_ {
534 DWORD dwSipVersion;
535 GUID gSIPGuid;
536 DWORD dwReserved1;
537 DWORD dwReserved2;
538 DWORD dwReserved3;
539 DWORD dwReserved4;
540 DWORD dwReserved5;
541 } SPC_SIGINFO,*PSPC_SIGINFO;
542
543#define SPC_URL_LINK_CHOICE 1
544#define SPC_MONIKER_LINK_CHOICE 2
545#define SPC_FILE_LINK_CHOICE 3
546
547 typedef struct SPC_LINK_ {
548 DWORD dwLinkChoice;
549 __C89_NAMELESS union {
550 LPWSTR pwszUrl;
551 SPC_SERIALIZED_OBJECT Moniker;
552 LPWSTR pwszFile;
553 };
554 } SPC_LINK,*PSPC_LINK;
555
556 typedef struct _SPC_PE_IMAGE_DATA {
557 CRYPT_BIT_BLOB Flags;
558 PSPC_LINK pFile;
559 } SPC_PE_IMAGE_DATA,*PSPC_PE_IMAGE_DATA;
560
561 typedef struct _SPC_INDIRECT_DATA_CONTENT {
562 CRYPT_ATTRIBUTE_TYPE_VALUE Data;
563 CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
564 CRYPT_HASH_BLOB Digest;
565 } SPC_INDIRECT_DATA_CONTENT,*PSPC_INDIRECT_DATA_CONTENT;
566
567 typedef struct _SPC_FINANCIAL_CRITERIA {
568 WINBOOL fFinancialInfoAvailable;
569 WINBOOL fMeetsCriteria;
570 } SPC_FINANCIAL_CRITERIA,*PSPC_FINANCIAL_CRITERIA;
571
572 typedef struct _SPC_IMAGE {
573 struct SPC_LINK_ *pImageLink;
574 CRYPT_DATA_BLOB Bitmap;
575 CRYPT_DATA_BLOB Metafile;
576 CRYPT_DATA_BLOB EnhancedMetafile;
577 CRYPT_DATA_BLOB GifFile;
578 } SPC_IMAGE,*PSPC_IMAGE;
579
580 typedef struct _SPC_SP_AGENCY_INFO {
581 struct SPC_LINK_ *pPolicyInformation;
582 LPWSTR pwszPolicyDisplayText;
583 PSPC_IMAGE pLogoImage;
584 struct SPC_LINK_ *pLogoLink;
585 } SPC_SP_AGENCY_INFO,*PSPC_SP_AGENCY_INFO;
586
587 typedef struct _SPC_STATEMENT_TYPE {
588 DWORD cKeyPurposeId;
589 LPSTR *rgpszKeyPurposeId;
590 } SPC_STATEMENT_TYPE,*PSPC_STATEMENT_TYPE;
591
592 typedef struct _SPC_SP_OPUS_INFO {
593 LPCWSTR pwszProgramName;
594 struct SPC_LINK_ *pMoreInfo;
595 struct SPC_LINK_ *pPublisherInfo;
596 } SPC_SP_OPUS_INFO,*PSPC_SP_OPUS_INFO;
597
598 typedef struct _CAT_NAMEVALUE {
599 LPWSTR pwszTag;
600 DWORD fdwFlags;
601 CRYPT_DATA_BLOB Value;
602 } CAT_NAMEVALUE,*PCAT_NAMEVALUE;
603
604 typedef struct _CAT_MEMBERINFO {
605 LPWSTR pwszSubjGuid;
606 DWORD dwCertVersion;
607 } CAT_MEMBERINFO,*PCAT_MEMBERINFO;
608
609#include <poppack.h>
610
611#ifdef WT_DEFINE_ALL_APIS
612 typedef struct _WIN_CERTIFICATE {
613 DWORD dwLength;
614 WORD wRevision;
615 WORD wCertificateType;
616 BYTE bCertificate[ANYSIZE_ARRAY];
617 } WIN_CERTIFICATE,*LPWIN_CERTIFICATE;
618
619#define WIN_CERT_REVISION_1_0 (0x0100)
620#define WIN_CERT_REVISION_2_0 (0x0200)
621#define WIN_CERT_TYPE_X509 (0x0001)
622#define WIN_CERT_TYPE_PKCS_SIGNED_DATA (0x0002)
623#define WIN_CERT_TYPE_RESERVED_1 (0x0003)
624#define WIN_CERT_TYPE_TS_STACK_SIGNED (0x0004)
625
626 typedef LPVOID WIN_TRUST_SUBJECT;
627
628 typedef struct _WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT {
629 HANDLE hClientToken;
630 GUID *SubjectType;
631 WIN_TRUST_SUBJECT Subject;
632 } WIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT,*LPWIN_TRUST_ACTDATA_CONTEXT_WITH_SUBJECT;
633
634 typedef struct _WIN_TRUST_ACTDATA_SUBJECT_ONLY {
635 GUID *SubjectType;
636 WIN_TRUST_SUBJECT Subject;
637 } WIN_TRUST_ACTDATA_SUBJECT_ONLY,*LPWIN_TRUST_ACTDATA_SUBJECT_ONLY;
638
639#define WIN_TRUST_SUBJTYPE_RAW_FILE { 0x959dc450,0x8d9e,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
640#define WIN_TRUST_SUBJTYPE_PE_IMAGE { 0x43c9a1e0,0x8da0,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
641#define WIN_TRUST_SUBJTYPE_JAVA_CLASS { 0x08ad3990,0x8da1,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
642#define WIN_TRUST_SUBJTYPE_CABINET { 0xd17c5374,0xa392,0x11cf,{ 0x9d,0xf5,0x0,0xaa,0x0,0xc1,0x84,0xe0 } }
643
644 typedef struct _WIN_TRUST_SUBJECT_FILE {
645 HANDLE hFile;
646 LPCWSTR lpPath;
647 } WIN_TRUST_SUBJECT_FILE,*LPWIN_TRUST_SUBJECT_FILE;
648
649#define WIN_TRUST_SUBJTYPE_RAW_FILEEX { 0x6f458110,0xc2f1,0x11cf,{ 0x8a,0x69,0x0,0xaa,0x0,0x6c,0x37,0x6 } }
650#define WIN_TRUST_SUBJTYPE_PE_IMAGEEX { 0x6f458111,0xc2f1,0x11cf,{ 0x8a,0x69,0x0,0xaa,0x0,0x6c,0x37,0x6 } }
651#define WIN_TRUST_SUBJTYPE_JAVA_CLASSEX { 0x6f458113,0xc2f1,0x11cf,{ 0x8a,0x69,0x0,0xaa,0x0,0x6c,0x37,0x6 } }
652#define WIN_TRUST_SUBJTYPE_CABINETEX { 0x6f458114,0xc2f1,0x11cf,{ 0x8a,0x69,0x0,0xaa,0x0,0x6c,0x37,0x6 } }
653
654 typedef struct _WIN_TRUST_SUBJECT_FILE_AND_DISPLAY {
655 HANDLE hFile;
656 LPCWSTR lpPath;
657 LPCWSTR lpDisplayName;
658 } WIN_TRUST_SUBJECT_FILE_AND_DISPLAY,*LPWIN_TRUST_SUBJECT_FILE_AND_DISPLAY;
659
660#define WIN_TRUST_SUBJTYPE_OLE_STORAGE { 0xc257e740,0x8da0,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
661#define WIN_SPUB_ACTION_TRUSTED_PUBLISHER { 0x66426730,0x8da1,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
662#define WIN_SPUB_ACTION_NT_ACTIVATE_IMAGE { 0x8bc96b00,0x8da1,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
663#define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE { 0x64b9d180,0x8da2,0x11cf,{0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb} }
664
665 typedef struct _WIN_SPUB_TRUSTED_PUBLISHER_DATA {
666 HANDLE hClientToken;
667 LPWIN_CERTIFICATE lpCertificate;
668 } WIN_SPUB_TRUSTED_PUBLISHER_DATA,*LPWIN_SPUB_TRUSTED_PUBLISHER_DATA;
669
670#endif /* WT_DEFINE_ALL_APIS */
671
672#if (_WIN32_WINNT >= 0x0600)
673void WINAPI WintrustSetDefaultIncludePEPageHashes(WINBOOL fIncludePEPageHashes);
674#endif /*(_WIN32_WINNT >= 0x0600)*/
675
676#ifdef __cplusplus
677}
678#endif
679#endif