wintrust: Add trust step error definitions.
[wine] / include / wintrust.h
1 /*
2  * Copyright (C) 2004 Francois Gouget
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
19 #ifndef __WINE_WINTRUST_H
20 #define __WINE_WINTRUST_H
21
22 #include <wincrypt.h>
23
24
25 #include <pshpack8.h>
26
27 typedef struct WINTRUST_FILE_INFO_
28 {
29     DWORD   cbStruct;
30     LPCWSTR pcwszFilePath;
31     HANDLE  hFile;
32     GUID*   pgKnownSubject;
33 } WINTRUST_FILE_INFO, *PWINTRUST_FILE_INFO;
34
35 typedef struct WINTRUST_CATALOG_INFO_
36 {
37     DWORD         cbStruct;
38     DWORD         dwCatalogVersion;
39     LPCWSTR       pcwszCatalogFilePath;
40     LPCWSTR       pcwszMemberTag;
41     LPCWSTR       pcwszMemberFilePath;
42     HANDLE        hMemberFile;
43     BYTE*         pbCalculatedFileHash;
44     DWORD         cbCalculatedFileHash;
45     PCCTL_CONTEXT pcCatalogContext;
46 } WINTRUST_CATALOG_INFO, *PWINTRUST_CATALOG_INFO;
47
48 typedef struct WINTRUST_BLOB_INFO_
49 {
50     DWORD   cbStruct;
51     GUID    gSubject;
52     LPCWSTR pcwszDisplayName;
53     DWORD   cbMemObject;
54     BYTE*   pbMemObject;
55     DWORD   cbMemSignedMsg;
56     BYTE*   pbMemSignedMsg;
57 } WINTRUST_BLOB_INFO, *PWINTRUST_BLOB_INFO;
58
59 typedef struct WINTRUST_SGNR_INFO_
60 {
61     DWORD             cbStruct;
62     LPCWSTR           pcwszDisplayName;
63     CMSG_SIGNER_INFO* psSignerInfo;
64     DWORD             chStores;
65     HCERTSTORE*       pahStores;
66 } WINTRUST_SGNR_INFO, *PWINTRUST_SGNR_INFO;
67
68 typedef struct WINTRUST_CERT_INFO_
69 {
70     DWORD         cbStruct;
71     LPCWSTR       pcwszDisplayName;
72     CERT_CONTEXT* psCertContext;
73     DWORD         chStores;
74     HCERTSTORE*   pahStores;
75     DWORD         dwFlags;
76     FILETIME*     psftVerifyAsOf;
77 } WINTRUST_CERT_INFO, *PWINTRUST_CERT_INFO;
78
79 #define WTCI_DONT_OPEN_STORES 0x00000001
80 #define WTCI_OPEN_ONLY_ROOT   0x00000002
81
82 /* dwUIChoice */
83 #define WTD_UI_ALL                1
84 #define WTD_UI_NONE               2
85 #define WTD_UI_NOBAD              3
86 #define WTD_UI_NOGOOD             4
87 /* fdwRevocationChecks */
88 #define WTD_REVOKE_NONE           0
89 #define WTD_REVOKE_WHOLECHAIN     1
90 /* dwUnionChoice */
91 #define WTD_CHOICE_FILE           1
92 #define WTD_CHOICE_CATALOG        2
93 #define WTD_CHOICE_BLOB           3
94 #define WTD_CHOICE_SIGNER         4
95 #define WTD_CHOICE_CERT           5
96
97 typedef struct _WINTRUST_DATA
98 {
99     DWORD  cbStruct;
100     LPVOID pPolicyCallbackData;
101     LPVOID pSIPClientData;
102     DWORD  dwUIChoice;
103     DWORD  fdwRevocationChecks;
104     DWORD  dwUnionChoice;
105     union
106     {
107         struct WINTRUST_FILE_INFO_*    pFile;
108         struct WINTRUST_CATALOG_INFO_* pCatalog;
109         struct WINTRUST_BLOB_INFO_*    pBlob;
110         struct WINTRUST_SGNR_INFO_*    pSgnr;
111         struct WINTRUST_CERT_INFO_*    pCert;
112     } DUMMYUNIONNAME;
113
114     DWORD  dwStateAction;
115     HANDLE hWVTStateData;
116     WCHAR* pwszURLReference;
117     DWORD  dwProvFlags;
118     DWORD  dwUIContext;
119 } WINTRUST_DATA, *PWINTRUST_DATA;
120
121 #define WTD_STATEACTION_IGNORE           0
122 #define WTD_STATEACTION_VERIFY           1
123 #define WTD_STATEACTION_CLOSE            2
124 #define WTD_STATEACTION_AUTO_CACHE       3
125 #define WTD_STATEACTION_AUTO_CACHE_FLUSH 4
126
127 #define WTD_PROV_FLAGS_MASK                     0x0000ffff
128 #define WTD_USE_IE4_TRUST_FLAG                  0x00000001
129 #define WTD_NO_IE4_CHAIN_FLAG                   0x00000002
130 #define WTD_NO_POLICY_USAGE_FLAG                0x00000004
131 #define WTD_REVOCATION_CHECK_NONE               0x00000010
132 #define WTD_REVOCATION_CHECK_END_CERT           0x00000020
133 #define WTD_REVOCATION_CHECK_CHAIN              0x00000040
134 #define WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT 0x00000080
135 #define WTD_SAFER_FLAG                          0x00000100
136 #define WTD_HASH_ONLY_FLAG                      0x00000200
137 #define WTD_USE_DEFAULT_OSVER_CHECK             0x00000400
138 #define WTD_LIFETIME_SIGNING_FLAG               0x00000800
139
140 #define WTD_UICONTEXT_EXECUTE 0
141 #define WTD_UICONTEXT_INSTALL 1
142
143 typedef struct _CRYPT_TRUST_REG_ENTRY
144 {
145     DWORD cbStruct;
146     WCHAR *pwszDLLName;
147     WCHAR *pwszFunctionName;
148 } CRYPT_TRUST_REG_ENTRY, *PCRYPT_TRUST_REG_ENTRY;
149
150 typedef struct _CRYPT_REGISTER_ACTIONID
151 {
152     DWORD cbStruct;
153     CRYPT_TRUST_REG_ENTRY sInitProvider;
154     CRYPT_TRUST_REG_ENTRY sObjectProvider;
155     CRYPT_TRUST_REG_ENTRY sSignatureProvider;
156     CRYPT_TRUST_REG_ENTRY sCertificateProvider;
157     CRYPT_TRUST_REG_ENTRY sCertificatePolicyProvider;
158     CRYPT_TRUST_REG_ENTRY sFinalPolicyProvider;
159     CRYPT_TRUST_REG_ENTRY sTestPolicyProvider;
160     CRYPT_TRUST_REG_ENTRY sCleanupProvider;
161 } CRYPT_REGISTER_ACTIONID, *PCRYPT_REGISTER_ACTIONID;
162
163 typedef struct _CRYPT_PROVIDER_REGDEFUSAGE
164 {
165     DWORD cbStruct;
166     GUID  *pgActionID;
167     WCHAR *pwszDllName;
168     char  *pwszLoadCallbackDataFunctionName;
169     char  *pwszFreeCallbackDataFunctionName;
170 } CRYPT_PROVIDER_REGDEFUSAGE, *PCRYPT_PROVIDER_REGDEFUSAGE;
171
172 typedef struct _CRYPT_PROVUI_DATA {
173     DWORD cbStruct;
174     DWORD dwFinalError;
175     WCHAR *pYesButtonText;
176     WCHAR *pNoButtonText;
177     WCHAR *pMoreInfoButtonText;
178     WCHAR *pAdvancedLinkText;
179     WCHAR *pCopyActionText;
180     WCHAR *pCopyActionTextNoTS;
181     WCHAR *pCopyActionTextNotSigned;
182 } CRYPT_PROVUI_DATA, *PCRYPT_PROVUI_DATA;
183
184 typedef struct _CRYPT_PROVIDER_CERT {
185     DWORD               cbStruct;
186     PCCERT_CONTEXT      pCert;
187     BOOL                fCommercial;
188     BOOL                fTrustedRoot;
189     BOOL                fSelfSigned;
190     BOOL                fTestCert;
191     DWORD               dwRevokedReason;
192     DWORD               dwConfidence;
193     DWORD               dwError;
194     CTL_CONTEXT        *pTrustListContext;
195     BOOL                fTrustListSignerCert;
196     PCCTL_CONTEXT       pCtlContext;
197     DWORD               dwCtlError;
198     BOOL                fIsCyclic;
199     PCERT_CHAIN_ELEMENT pChainElement;
200 } CRYPT_PROVIDER_CERT, *PCRYPT_PROVIDER_CERT;
201
202 typedef struct _CRYPT_PROVIDER_SGNR {
203     DWORD                cbStruct;
204     FILETIME             sftVerifyAsOf;
205     DWORD                csCertChain;
206     CRYPT_PROVIDER_CERT *pasCertChain;
207     DWORD                dwSignerType;
208     CMSG_SIGNER_INFO    *psSigner;
209     DWORD                dwError;
210     DWORD                csCounterSigners;
211     struct _CRYPT_PROVIDER_SGNR *pasCounterSigners;
212     PCCERT_CHAIN_CONTEXT pChainContext;
213 } CRYPT_PROVIDER_SGNR, *PCRYPT_PROVIDER_SGNR;
214
215 typedef struct _CRYPT_PROVIDER_PRIVDATA {
216     DWORD cbStruct;
217     GUID  gProviderID;
218     DWORD cbProvData;
219     void *pvProvData;
220 } CRYPT_PROVIDER_PRIVDATA, *PCRYPT_PROVIDER_PRIVDATA;
221
222 struct _CRYPT_PROVIDER_DATA;
223
224 #define TRUSTERROR_STEP_WVTPARAMS               0
225 #define TRUSTERROR_STEP_FILEIO                  2
226 #define TRUSTERROR_STEP_SIP                     3
227 #define TRUSTERROR_STEP_SIPSUBJINFO             5
228 #define TRUSTERROR_STEP_CATALOGFILE             6
229 #define TRUSTERROR_STEP_CERTSTORE               7
230 #define TRUSTERROR_STEP_MESSAGE                 8
231 #define TRUSTERROR_STEP_MSG_SIGNERCOUNT         9
232 #define TRUSTERROR_STEP_MSG_INNERCNTTYPE       10
233 #define TRUSTERROR_STEP_MSG_INNERCNT           11
234 #define TRUSTERROR_STEP_MSG_STORE              12
235 #define TRUSTERROR_STEP_MSG_SIGNERINFO         13
236 #define TRUSTERROR_STEP_MSG_SIGNERCERT         14
237 #define TRUSTERROR_STEP_MSG_CERTCHAIN          15
238 #define TRUSTERROR_STEP_MSG_COUNTERSIGINFO     16
239 #define TRUSTERROR_STEP_MSG_COUNTERSIGCERT     17
240 #define TRUSTERROR_STEP_VERIFY_MSGHASH         18
241 #define TRUSTERROR_STEP_VERIFY_MSGINDIRECTDATA 19
242 #define TRUSTERROR_STEP_FINAL_WVTINIT          30
243 #define TRUSTERROR_STEP_FINAL_INITPROV         31
244 #define TRUSTERROR_STEP_FINAL_OBJPROV          32
245 #define TRUSTERROR_STEP_FINAL_SIGPROV          33
246 #define TRUSTERROR_STEP_FINAL_CERTPROV         34
247 #define TRUSTERROR_STEP_FINAL_CERTCHKPROV      35
248 #define TRUSTERROR_STEP_FINAL_POLICYPROV       36
249 #define TRUSTERROR_STEP_FINAL_UIPROV           37
250
251 #define TRUSTERROR_MAX_STEPS                   38
252
253 typedef void * (WINAPI *PFN_CPD_MEM_ALLOC)(DWORD cbSize);
254 typedef void (WINAPI *PFN_CPD_MEM_FREE)(void *pvMem2Free);
255 typedef BOOL (WINAPI *PFN_CPD_ADD_STORE)(struct _CRYPT_PROVIDER_DATA *pProvData,
256  HCERTSTORE hStore2Add);
257 typedef BOOL (WINAPI *PFN_CPD_ADD_SGNR)(struct _CRYPT_PROVIDER_DATA *pProvData,
258  BOOL fCounterSigner, DWORD idxSigner, struct _CRYPT_PROVIDER_SGNR *pSgnr2Add);
259 typedef BOOL (WINAPI *PFN_CPD_ADD_CERT)(struct _CRYPT_PROVIDER_DATA *pProvData,
260  DWORD idxSigner, BOOL fCounterSigner, DWORD idxCounterSigner,
261  PCCERT_CONTEXT pCert2Add);
262 typedef BOOL (WINAPI *PFN_CPD_ADD_PRIVDATA)(struct _CRYPT_PROVIDER_DATA *pProvData,
263  struct _CRYPT_PROVIDER_PRIVDATA *pPrivData2Add);
264 typedef HRESULT (WINAPI *PFN_PROVIDER_INIT_CALL)(
265  struct _CRYPT_PROVIDER_DATA *pProvData);
266 typedef HRESULT (WINAPI *PFN_PROVIDER_OBJTRUST_CALL)(
267  struct _CRYPT_PROVIDER_DATA *pProvData);
268 typedef HRESULT (WINAPI *PFN_PROVIDER_SIGTRUST_CALL)(
269  struct _CRYPT_PROVIDER_DATA *pProvData);
270 typedef HRESULT (WINAPI *PFN_PROVIDER_CERTTRUST_CALL)(
271  struct _CRYPT_PROVIDER_DATA *pProvData);
272 typedef HRESULT (WINAPI *PFN_PROVIDER_FINALPOLICY_CALL)(
273  struct _CRYPT_PROVIDER_DATA *pProvData);
274 typedef HRESULT (WINAPI *PFN_PROVIDER_TESTFINALPOLICY_CALL)(
275  struct _CRYPT_PROVIDER_DATA *pProvData);
276 typedef HRESULT (WINAPI *PFN_PROVIDER_CLEANUP_CALL)(
277  struct _CRYPT_PROVIDER_DATA *pProvData);
278 typedef BOOL (WINAPI *PFN_PROVIDER_CERTCHKPOLICY_CALL)(
279  struct _CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner,
280  BOOL fCounterSignerChain, DWORD idxCounterSigner);
281
282 typedef struct _CRYPT_PROVIDER_FUNCTIONS {
283     DWORD cbStruct;
284     PFN_CPD_MEM_ALLOC    pfnAlloc;
285     PFN_CPD_MEM_FREE     pfnFree;
286     PFN_CPD_ADD_STORE    pfnAddStore2Chain;
287     PFN_CPD_ADD_SGNR     pfnAddSgnr2Chain;
288     PFN_CPD_ADD_CERT     pfnAddCert2Chain;
289     PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;
290     PFN_PROVIDER_INIT_CALL            pfnInitialize;
291     PFN_PROVIDER_OBJTRUST_CALL        pfnObjectTrust;
292     PFN_PROVIDER_SIGTRUST_CALL        pfnSignatureTrust;
293     PFN_PROVIDER_CERTTRUST_CALL       pfnCertificateTrust;
294     PFN_PROVIDER_FINALPOLICY_CALL     pfnFinalPolicy;
295     PFN_PROVIDER_CERTCHKPOLICY_CALL   pfnCertCheckPolicy;
296     PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;
297     struct _CRYPT_PROVUI_FUNCS       *psUIpfns;
298     PFN_PROVIDER_CLEANUP_CALL         pfnCleanupPolicy;
299 } CRYPT_PROVIDER_FUNCTIONS, *PCRYPT_PROVIDER_FUNCTIONS;
300
301 struct SIP_DISPATCH_INFO_;
302 struct SIP_SUBJECTINFO_;
303 struct SIP_INDIRECT_DATA_;
304
305 typedef struct _PROVDATA_SIP {
306     DWORD cbStruct;
307     GUID  gSubject;
308     struct SIP_DISPATCH_INFO_ *pSip;
309     struct SIP_DISPATCH_INFO_ *pCATSip;
310     struct SIP_SUBJECTINFO_   *psSipSubjectInfo;
311     struct SIP_SUBJECTINFO_   *psSipCATSubjectInfo;
312     struct SIP_INDIRECT_DATA_ *psIndirectData;
313 } PROVDATA_SIP, *PPROVDATA_SIP;
314
315 typedef struct _CRYPT_PROVIDER_DATA {
316     DWORD                     cbStruct;
317     WINTRUST_DATA            *pWintrustData;
318     BOOL                      fOpenedFile;
319     HWND                      hWndParent;
320     GUID                     *pgActionID;
321     HCRYPTPROV                hProv;
322     DWORD                     dwError;
323     DWORD                     dwRegSecuritySettings;
324     DWORD                     dwRegPolicySettings;
325     CRYPT_PROVIDER_FUNCTIONS *psPfns;
326     DWORD                     cdwTrustStepErrors;
327     DWORD                    *padwTrustStepErrors;
328     DWORD                     chStores;
329     HCERTSTORE               *pahStores;
330     DWORD                     dwEncoding;
331     HCRYPTMSG                 hMsg;
332     DWORD                     csSigners;
333     CRYPT_PROVIDER_SGNR      *pasSigners;
334     DWORD                     dwSubjectChoice;
335     union {
336         struct _PROVDATA_SIP        *pPDSip;
337     } DUMMYUNIONNAME;
338     char                     *pszUsageOID;
339     BOOL                      fRecallWithState;
340     FILETIME                  sftSystemTime;
341     char                      *pszCTLSignerUsageOID;
342     DWORD                     dwProvFlags;
343     DWORD                     dwFinalError;
344     PCERT_USAGE_MATCH         pRequestUsage;
345     DWORD                     dwTrustPubSettings;
346     DWORD                     dwUIStateFlags;
347 } CRYPT_PROVIDER_DATA, *PCRYPT_PROVIDER_DATA;
348
349 typedef BOOL (*PFN_PROVUI_CALL)(HWND hWndSecurityDialog,
350  struct _CRYPT_PROVIDER_DATA *pProvData);
351
352 typedef struct _CRYPT_PROVUI_FUNCS {
353     DWORD cbStruct;
354     CRYPT_PROVUI_DATA psUIData;
355     PFN_PROVUI_CALL pfnOnMoreInfoClick;
356     PFN_PROVUI_CALL pfnOnMoreInfoClickDefault;
357     PFN_PROVUI_CALL pfnOnAdvancedClick;
358     PFN_PROVUI_CALL pfnOnAdvancedClickDefault;
359 } CRYPT_PROVUI_FUNCS, *PCRYPT_PROVUI_FUNCS;
360
361 #include <poppack.h>
362
363 #define WTPF_TRUSTTEST            0x00000020
364 #define WTPF_TESTCANBEVALID       0x00000080
365 #define WTPF_IGNOREEXPIRATION     0x00000100
366 #define WTPF_IGNOREREVOKATION     0x00000200
367 #define WTPF_OFFLINEOK_IND        0x00000400
368 #define WTPF_OFFLINEOK_COM        0x00000800
369 #define WTPF_OFFLINEOKNBU_IND     0x00001000
370 #define WTPF_OFFLINEOKNBU_COM     0x00002000
371 #define WTPF_VERIFY_V1_OFF        0x00010000
372 #define WTPF_IGNOREREVOCATIONONTS 0x00020000
373 #define WTPF_ALLOWONLYPERTRUST    0x00040000
374
375 #define WT_ADD_ACTION_ID_RET_RESULT_FLAG 1
376
377 #ifdef __cplusplus
378 extern "C" {
379 #endif
380
381 #if defined(__GNUC__)
382 #define WT_PROVIDER_CERTTRUST_FUNCTION (const WCHAR []) \
383     {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0}
384 #elif defined(_MSC_VER)
385 #define WT_PROVIDER_CERTTRUST_FUNCTION L"WintrustCertificateTrust"
386 #else
387 static const WCHAR WT_PROVIDER_CERTTRUST_FUNCTION[] =
388     {'W','i','n','t','r','u','s','t','C','e','r','t','i','f','i','c','a','t','e','T','r','u','s','t', 0};
389 #endif
390
391 BOOL      WINAPI WintrustAddActionID(GUID*,DWORD,CRYPT_REGISTER_ACTIONID*);
392 BOOL      WINAPI WintrustRemoveActionID(GUID*);
393 BOOL      WINAPI WintrustLoadFunctionPointers(GUID*,CRYPT_PROVIDER_FUNCTIONS*);
394 BOOL      WINAPI WintrustAddDefaultForUsage(const char*,CRYPT_PROVIDER_REGDEFUSAGE*);
395 void      WINAPI WintrustGetRegPolicyFlags(DWORD*);
396 BOOL      WINAPI WintrustSetRegPolicyFlags(DWORD);
397 LONG      WINAPI WinVerifyTrust(HWND,GUID*,LPVOID);
398 HRESULT   WINAPI WinVerifyTrustEx(HWND,GUID*,WINTRUST_DATA*);
399
400 CRYPT_PROVIDER_SGNR * WINAPI WTHelperGetProvSignerFromChain(
401  CRYPT_PROVIDER_DATA *pProvData, DWORD idxSigner, BOOL fCounterSigner,
402  DWORD idxCounterSigner);
403 CRYPT_PROVIDER_DATA * WINAPI WTHelperProvDataFromStateData(HANDLE hStateData);
404
405 #define SPC_INDIRECT_DATA_OBJID      "1.3.6.1.4.1.311.2.1.4"
406 #define SPC_SP_AGENCY_INFO_OBJID     "1.3.6.1.4.1.311.2.1.10"
407 #define SPC_STATEMENT_TYPE_OBJID     "1.3.6.1.4.1.311.2.1.11"
408 #define SPC_SP_OPUS_INFO_OBJID       "1.3.6.1.4.1.311.2.1.12"
409 #define SPC_CERT_EXTENSIONS_OBJID    "1.3.6.1.4.1.311.2.1.14"
410 #define SPC_PE_IMAGE_DATA_OBJID      "1.3.6.1.4.1.311.2.1.15"
411 #define SPC_RAW_FILE_DATA_OBJID      "1.3.6.1.4.1.311.2.1.18"
412 #define SPC_STRUCTURED_STORAGE_DATA_OBJID "1.3.6.1.4.1.311.2.1.19"
413 #define SPC_JAVA_CLASS_DATA_OBJID    "1.3.6.1.4.1.311.2.1.20"
414 #define SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.21"
415 #define SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID "1.3.6.1.4.1.311.2.1.22"
416 #define SPC_CAB_DATA_OBJID           "1.3.6.1.4.1.311.2.1.25"
417 #define SPC_GLUE_RDN_OBJID           "1.3.6.1.4.1.311.2.1.25"
418 #define SPC_MINIMAL_CRITERIA_OBJID   "1.3.6.1.4.1.311.2.1.26"
419 #define SPC_FINANCIAL_CRITERIA_OBJID "1.3.6.1.4.1.311.2.1.27"
420 #define SPC_LINK_OBJID               "1.3.6.1.4.1.311.2.1.28"
421 #define SPC_SIGINFO_OBJID            "1.3.6.1.4.1.311.2.1.30"
422 #define CAT_NAMEVALUE_OBJID          "1.3.6.1.4.1.311.12.2.1"
423 #define CAT_MEMBERINFO_OBJID         "1.3.6.1.4.1.311.12.2.2"
424
425 #define SPC_SP_AGENCY_INFO_STRUCT        ((LPCSTR) 2000)
426 #define SPC_MINIMAL_CRITERIA_STRUCT      ((LPCSTR) 2001)
427 #define SPC_FINANCIAL_CRITERIA_STRUCT    ((LPCSTR) 2002)
428 #define SPC_INDIRECT_DATA_CONTENT_STRUCT ((LPCSTR) 2003)
429 #define SPC_PE_IMAGE_DATA_STRUCT         ((LPCSTR) 2004)
430 #define SPC_LINK_STRUCT                  ((LPCSTR) 2005)
431 #define SPC_STATEMENT_TYPE_STRUCT        ((LPCSTR) 2006)
432 #define SPC_SP_OPUS_INFO_STRUCT          ((LPCSTR) 2007)
433 #define SPC_CAB_DATA_STRUCT              ((LPCSTR) 2008)
434 #define SPC_JAVA_CLASS_DATA_STRUCT       ((LPCSTR) 2009)
435 #define SPC_SIGINFO_STRUCT               ((LPCSTR) 2130)
436 #define CAT_NAMEVALUE_STRUCT             ((LPCSTR) 2221)
437 #define CAT_MEMBERINFO_STRUCT            ((LPCSTR) 2222)
438
439 #define SPC_UUID_LENGTH 16
440 typedef BYTE SPC_UUID[SPC_UUID_LENGTH];
441
442 typedef struct _SPC_SERIALIZED_OBJECT
443 {
444     SPC_UUID        ClassId;
445     CRYPT_DATA_BLOB SerializedData;
446 } SPC_SERIALIZED_OBJECT, *PSPC_SERIALIZED_OBJECT;
447
448 typedef struct SPC_SIGINFO_
449 {
450     DWORD dwSipVersion;
451     GUID  gSIPGuid;
452     DWORD dwReserved1;
453     DWORD dwReserved2;
454     DWORD dwReserved3;
455     DWORD dwReserved4;
456     DWORD dwReserved5;
457 } SPC_SIGINFO, *PSPC_SIGINFO;
458
459 #define SPC_URL_LINK_CHOICE     1
460 #define SPC_MONIKER_LINK_CHOICE 2
461 #define SPC_FILE_LINK_CHOICE    3
462
463 typedef struct SPC_LINK_
464 {
465     DWORD dwLinkChoice;
466     union
467     {
468         LPWSTR                pwszUrl;
469         SPC_SERIALIZED_OBJECT Moniker;
470         LPWSTR                pwszFile;
471     } DUMMYUNIONNAME;
472 } SPC_LINK, *PSPC_LINK;
473
474 typedef struct _SPC_PE_IMAGE_DATA
475 {
476     CRYPT_BIT_BLOB Flags;
477     PSPC_LINK      pFile;
478 } SPC_PE_IMAGE_DATA, *PSPC_PE_IMAGE_DATA;
479
480 typedef struct _SPC_INDIRECT_DATA_CONTENT
481 {
482     CRYPT_ATTRIBUTE_TYPE_VALUE Data;
483     CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
484     CRYPT_HASH_BLOB            Digest;
485 } SPC_INDIRECT_DATA_CONTENT, *PSPC_INDIRECT_DATA_CONTENT;
486
487 typedef struct _SPC_FINANCIAL_CRITERIA
488 {
489     BOOL fFinancialInfoAvailable;
490     BOOL fMeetsCriteria;
491 } SPC_FINANCIAL_CRITERIA, *PSPC_FINANCIAL_CRITERIA;
492
493 typedef struct _SPC_IMAGE
494 {
495     struct SPC_LINK_ *pImageLink;
496     CRYPT_DATA_BLOB   Bitmap;
497     CRYPT_DATA_BLOB   Metafile;
498     CRYPT_DATA_BLOB   EnhancedMetafile;
499     CRYPT_DATA_BLOB   GifFile;
500 } SPC_IMAGE, *PSPC_IMAGE;
501
502 typedef struct _SPC_SP_AGENCY_INFO
503 {
504     struct SPC_LINK_ *pPolicyInformation;
505     LPWSTR            pwszPolicyDisplayText;
506     PSPC_IMAGE        pLogoImage;
507     struct SPC_LINK_ *pLogoLink;
508 } SPC_SP_AGENCY_INFO, *PSPC_SP_AGENCY_INFO;
509
510 typedef struct _SPC_STATEMENT_TYPE
511 {
512     DWORD  cKeyPurposeId;
513     LPSTR *rgpszKeyPurposeId;
514 } SPC_STATEMENT_TYPE, *PSPC_STATEMENT_TYPE;
515
516 typedef struct _SPC_SP_OPUS_INFO
517 {
518     LPCWSTR           pwszProgramName;
519     struct SPC_LINK_ *pMoreInfo;
520     struct SPC_LINK_ *pPublisherInfo;
521 } SPC_SP_OPUS_INFO, *PSPC_SP_OPUS_INFO;
522
523 typedef struct _CAT_NAMEVALUE
524 {
525     LPWSTR          pwszTag;
526     DWORD           fdwFlags;
527     CRYPT_DATA_BLOB Value;
528 } CAT_NAMEVALUE, *PCAT_NAMEVALUE;
529
530 typedef struct _CAT_MEMBERINFO
531 {
532     LPWSTR pwszSubjGuid;
533     DWORD  dwCertVersion;
534 } CAT_MEMBERINFO, *PCAT_MEMBERINFO;
535
536 #define WIN_SPUB_ACTION_PUBLISHED_SOFTWARE \
537      { 0x64b9d180, 0x8da2, 0x11cf, { 0x87,0x36,0x00,0xaa,0x00,0xa4,0x85,0xeb }}
538
539 #ifdef __cplusplus
540 }
541 #endif
542
543 #endif