1 use shared::guiddef::GUID;
2 use shared::minwindef::{BYTE, DWORD, LPVOID};
3 use shared::ntdef::{HANDLE, LONG, LPCWSTR, LPWSTR, WCHAR};
4 use shared::windef::HWND;
5 use um::wincrypt::{CRYPT_DATA_BLOB, PCERT_STRONG_SIGN_PARA};
6 //90
7 pub const WTD_UI_ALL: DWORD = 1;
8 pub const WTD_UI_NONE: DWORD = 2;
9 pub const WTD_UI_NOBAD: DWORD = 3;
10 pub const WTD_UI_NOGOOD: DWORD = 4;
11 pub const WTD_REVOKE_NONE: DWORD = 0x00000000;
12 pub const WTD_REVOKE_WHOLECHAIN: DWORD = 0x00000001;
13 pub const WTD_CHOICE_FILE: DWORD = 1;
14 pub const WTD_CHOICE_CATALOG: DWORD = 2;
15 pub const WTD_CHOICE_BLOB: DWORD = 3;
16 pub const WTD_CHOICE_SIGNER: DWORD = 4;
17 pub const WTD_CHOICE_CERT: DWORD = 5;
18 pub const WTD_STATEACTION_IGNORE: DWORD = 0x00000000;
19 pub const WTD_STATEACTION_VERIFY: DWORD = 0x00000001;
20 pub const WTD_STATEACTION_CLOSE: DWORD = 0x00000002;
21 pub const WTD_STATEACTION_AUTO_CACHE: DWORD = 0x00000003;
22 pub const WTD_STATEACTION_AUTO_CACHE_FLUSH: DWORD = 0x00000004;
23 pub const WTD_PROV_FLAGS_MASK: DWORD = 0x0000FFFF;
24 pub const WTD_USE_IE4_TRUST_FLAG: DWORD = 0x00000001;
25 pub const WTD_NO_IE4_CHAIN_FLAG: DWORD = 0x00000002;
26 pub const WTD_NO_POLICY_USAGE_FLAG: DWORD = 0x00000004;
27 pub const WTD_REVOCATION_CHECK_NONE: DWORD = 0x00000010;
28 pub const WTD_REVOCATION_CHECK_END_CERT: DWORD = 0x00000020;
29 pub const WTD_REVOCATION_CHECK_CHAIN: DWORD = 0x00000040;
30 pub const WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT: DWORD = 0x00000080;
31 pub const WTD_SAFER_FLAG: DWORD = 0x00000100;
32 pub const WTD_HASH_ONLY_FLAG: DWORD = 0x00000200;
33 pub const WTD_USE_DEFAULT_OSVER_CHECK: DWORD = 0x00000400;
34 pub const WTD_LIFETIME_SIGNING_FLAG: DWORD = 0x00000800;
35 pub const WTD_CACHE_ONLY_URL_RETRIEVAL: DWORD = 0x00001000;
36 pub const WTD_DISABLE_MD2_MD4: DWORD = 0x00002000;
37 pub const WTD_MOTW: DWORD = 0x00004000;
38 pub const WTD_CODE_INTEGRITY_DRIVER_MODE: DWORD = 0x00008000;
39 pub const WTD_UICONTEXT_EXECUTE: DWORD = 0;
40 pub const WTD_UICONTEXT_INSTALL: DWORD = 1;
41 STRUCT!{struct WINTRUST_DATA {
42     cbStruct: DWORD,
43     pPolicyCallbackData: LPVOID,
44     pSIPClientData: LPVOID,
45     dwUIChoice: DWORD,
46     fdwRevocationChecks: DWORD,
47     dwUnionChoice: DWORD,
48     u: WINTRUST_DATA_u,
49     dwStateAction: DWORD,
50     hWVTStateData: HANDLE,
51     pwszURLReference: *mut WCHAR,
52     dwProvFlags: DWORD,
53     dwUIContext: DWORD,
54     pSignatureSettings: *mut WINTRUST_SIGNATURE_SETTINGS,
55 }}
56 UNION!{union WINTRUST_DATA_u {
57     [usize; 1],
58     pFile pFile_mut: *mut WINTRUST_FILE_INFO,
59     // pCatalog pCatalog_mut: *mut WINTRUST_CATALOG_INFO,
60     // pBlob pBlob_mut: *mut WINTRUST_BLOB_INFO,
61     // pSgnr pSgnr_mut: *mut WINTRUST_SGNR_INFO,
62     // pCert pCert_mut: *mut WINTRUST_CERT_INFO,
63 }}
64 pub type PWINTRUST_DATA = *mut WINTRUST_DATA;
65 STRUCT!{struct WINTRUST_SIGNATURE_SETTINGS {
66     cbStruct: DWORD,
67     dwIndex: DWORD,
68     dwFlags: DWORD,
69     cSecondarySigs: DWORD,
70     dwVerifiedSigIndex: DWORD,
71     pCryptoPolicy: PCERT_STRONG_SIGN_PARA,
72 }}
73 pub type PWINTRUST_SIGNATURE_SETTINGS = *mut WINTRUST_SIGNATURE_SETTINGS;
74 //217
75 STRUCT! {struct WINTRUST_FILE_INFO {
76     cbStruct: DWORD,
77     pcwszFilePath: LPCWSTR,
78     hFile: HANDLE,
79     pgKnownSubject: *const GUID,
80 }}
81 //414
82 extern "system" {
WinVerifyTrust(hwnd: HWND, pgActionID: *mut GUID, pWVTData: LPVOID) -> LONG83     pub fn WinVerifyTrust(hwnd: HWND, pgActionID: *mut GUID, pWVTData: LPVOID) -> LONG;
84 }
85 //1246
86 pub const SPC_UUID_LENGTH: usize = 16;
87 pub type SPC_UUID = [BYTE; SPC_UUID_LENGTH];
88 //SpcSerializedObjectAttributesClassId
89 STRUCT!{struct SPC_SERIALIZED_OBJECT {
90     ClassId: SPC_UUID,
91     SerializedData: CRYPT_DATA_BLOB,
92 }}
93 pub type PSPC_SERIALIZED_OBJECT = *mut SPC_SERIALIZED_OBJECT;
94 STRUCT!{struct SPC_SIGINFO {
95     dwSipVersion: DWORD,
96     gSIPGuid: GUID,
97     dwReserved1: DWORD,
98     dwReserved2: DWORD,
99     dwReserved3: DWORD,
100     dwReserved4: DWORD,
101     dwReserved5: DWORD,
102 }}
103 pub type PSPC_SIGINFO = *mut SPC_SIGINFO;
104 pub const SPC_URL_LINK_CHOICE: DWORD = 1;
105 pub const SPC_MONIKER_LINK_CHOICE: DWORD = 2;
106 pub const SPC_FILE_LINK_CHOICE: DWORD = 3;
107 STRUCT!{struct SPC_LINK {
108     dwLinkChoice: DWORD,
109     u: SPC_LINK_u,
110 }}
111 UNION!{union SPC_LINK_u {
112     [u32; 6] [u64; 4],
113     pwszUrl pwszUrl_mut: LPWSTR,
114     Moniker Moniker_mut: SPC_SERIALIZED_OBJECT,
115     pwszFile pwszFile_mut: LPWSTR,
116 }}
117 pub type PSPC_LINK = *mut SPC_LINK;
118 //1337
119 STRUCT!{struct SPC_SP_OPUS_INFO {
120     pwszProgramName: LPCWSTR,
121     pMoreInfo: *mut SPC_LINK,
122     pPublisherInfo: *mut SPC_LINK,
123 }}
124