]> git.proxmox.com Git - rustc.git/blob - vendor/winapi/src/um/mssip.rs
New upstream version 1.41.1+dfsg1
[rustc.git] / vendor / winapi / src / um / mssip.rs
1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Microsoft SIP Provider Prototypes and Definitions
7 use shared::guiddef::GUID;
8 use shared::minwindef::{BOOL, BYTE, DWORD, LPVOID};
9 use um::mscat::{CRYPTCATMEMBER, CRYPTCATSTORE};
10 use um::wincrypt::{
11 CRYPT_ALGORITHM_IDENTIFIER, CRYPT_ATTRIBUTE_TYPE_VALUE, CRYPT_HASH_BLOB, HCRYPTPROV,
12 };
13 use um::winnt::{HANDLE, LPCWSTR, PWSTR, WCHAR};
14 pub type CRYPT_DIGEST_DATA = CRYPT_HASH_BLOB;
15 pub const MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE: DWORD = 0x00010000;
16 pub const MSSIP_FLAGS_USE_CATALOG: DWORD = 0x00020000;
17 pub const MSSIP_FLAGS_MULTI_HASH: DWORD = 0x00040000;
18 pub const SPC_INC_PE_RESOURCES_FLAG: DWORD = 0x80;
19 pub const SPC_INC_PE_DEBUG_INFO_FLAG: DWORD = 0x40;
20 pub const SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG: DWORD = 0x20;
21 pub const SPC_EXC_PE_PAGE_HASHES_FLAG: DWORD = 0x10;
22 pub const SPC_INC_PE_PAGE_HASHES_FLAG: DWORD = 0x100;
23 pub const SPC_DIGEST_GENERATE_FLAG: DWORD = 0x200;
24 pub const SPC_DIGEST_SIGN_FLAG: DWORD = 0x400;
25 pub const SPC_RELAXED_PE_MARKER_CHECK: DWORD = 0x800;
26 pub const SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG: DWORD = 0x00000001;
27 pub const SPC_MARKER_CHECK_CURRENTLY_SUPPORTED_FLAGS: DWORD
28 = SPC_MARKER_CHECK_SKIP_SIP_INDIRECT_DATA_FLAG;
29 pub const MSSIP_ADDINFO_NONE: DWORD = 0;
30 pub const MSSIP_ADDINFO_FLAT: DWORD = 1;
31 pub const MSSIP_ADDINFO_CATMEMBER: DWORD = 2;
32 pub const MSSIP_ADDINFO_BLOB: DWORD = 3;
33 pub const MSSIP_ADDINFO_NONMSSIP: DWORD = 500;
34 UNION!{union SIP_SUBJECTINFO_u {
35 [usize; 1],
36 psFlat psFlat_mut: *mut MS_ADDINFO_FLAT,
37 psCatMember psCatMember_mut: *mut MS_ADDINFO_CATALOGMEMBER,
38 psBlob psBlob_mut: *mut MS_ADDINFO_BLOB,
39 }}
40 STRUCT!{struct SIP_SUBJECTINFO {
41 cbSize: DWORD,
42 pgSubjectType: *mut GUID,
43 hFile: HANDLE,
44 pwsFileName: LPCWSTR,
45 pwsDisplayName: LPCWSTR,
46 dwReserved1: DWORD,
47 dwIntVersion: DWORD,
48 hProv: HCRYPTPROV,
49 DigestAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
50 dwFlags: DWORD,
51 dwEncodingType: DWORD,
52 dwReserved2: DWORD,
53 fdwCAPISettings: DWORD,
54 fdwSecuritySettings: DWORD,
55 dwIndex: DWORD,
56 dwUnionChoice: DWORD,
57 u: SIP_SUBJECTINFO_u,
58 pClientData: LPVOID,
59 }}
60 pub type LPSIP_SUBJECTINFO = *mut SIP_SUBJECTINFO;
61 STRUCT!{struct MS_ADDINFO_FLAT {
62 cbStruct: DWORD,
63 pIndirectData: *mut SIP_INDIRECT_DATA,
64 }}
65 pub type PMS_ADDINFO_FLAT = *mut MS_ADDINFO_FLAT;
66 STRUCT!{struct MS_ADDINFO_CATALOGMEMBER {
67 cbStruct: DWORD,
68 pStore: *mut CRYPTCATSTORE,
69 pMember: *mut CRYPTCATMEMBER,
70 }}
71 pub type PMS_ADDINFO_CATALOGMEMBER = *mut MS_ADDINFO_CATALOGMEMBER;
72 STRUCT!{struct MS_ADDINFO_BLOB {
73 cbStruct: DWORD,
74 cbMemObject: DWORD,
75 pbMemObject: *mut BYTE,
76 cbMemSignedMsg: DWORD,
77 pbMemSignedMsg: *mut BYTE,
78 }}
79 pub type PMS_ADDINFO_BLOB = *mut MS_ADDINFO_BLOB;
80 STRUCT!{struct SIP_CAP_SET_V2 {
81 cbSize: DWORD,
82 dwVersion: DWORD,
83 isMultiSign: BOOL,
84 dwReserved: DWORD,
85 }}
86 pub type PSIP_CAP_SET_V2 = *mut SIP_CAP_SET_V2;
87 UNION!{union SIP_CAP_SET_V3_u {
88 [u32; 1],
89 dwFlags dwFlags_mut: DWORD,
90 dwReserved dwReserved_mut: DWORD,
91 }}
92 STRUCT!{struct SIP_CAP_SET_V3 {
93 cbSize: DWORD,
94 dwVersion: DWORD,
95 isMultiSign: BOOL,
96 u: SIP_CAP_SET_V3_u,
97 }}
98 pub type PSIP_CAP_SET_V3 = *mut SIP_CAP_SET_V3;
99 pub type SIP_CAP_SET = SIP_CAP_SET_V3;
100 pub type PSIP_CAP_SET = PSIP_CAP_SET_V3;
101 pub const SIP_CAP_SET_VERSION_2: DWORD = 2;
102 pub const SIP_CAP_SET_VERSION_3: DWORD = 3;
103 pub const SIP_CAP_SET_CUR_VER: DWORD = 3;
104 pub const SIP_CAP_FLAG_SEALING: DWORD = 0x00000001;
105 STRUCT!{struct SIP_INDIRECT_DATA {
106 Data: CRYPT_ATTRIBUTE_TYPE_VALUE,
107 DigestAlgorithm: CRYPT_ALGORITHM_IDENTIFIER,
108 Digest: CRYPT_HASH_BLOB,
109 }}
110 pub type PSIP_INDIRECT_DATA = *mut SIP_INDIRECT_DATA;
111 extern "system" {
112 pub fn CryptSIPGetSignedDataMsg(
113 pSubjectInfo: *mut SIP_SUBJECTINFO,
114 pdwEncodingType: *mut DWORD,
115 dwIndex: DWORD,
116 pcbSignedDataMsg: *mut DWORD,
117 pbSignedDataMsg: *mut BYTE,
118 ) -> BOOL;
119 }
120 FN!{stdcall pCryptSIPGetSignedDataMsg(
121 pSubjectInfo: *mut SIP_SUBJECTINFO,
122 pdwEncodingType: *mut DWORD,
123 dwIndex: DWORD,
124 pcbSignedDataMsg: *mut DWORD,
125 pbSignedDataMsg: *mut BYTE,
126 ) -> BOOL}
127 extern "system" {
128 pub fn CryptSIPPutSignedDataMsg(
129 pSubjectInfo: *mut SIP_SUBJECTINFO,
130 dwEncodingType: DWORD,
131 pdwIndex: *mut DWORD,
132 cbSignedDataMsg: DWORD,
133 pbSignedDataMsg: *mut BYTE,
134 ) -> BOOL;
135 }
136 FN!{stdcall pCryptSIPPutSignedDataMsg(
137 pSubjectInfo: *mut SIP_SUBJECTINFO,
138 dwEncodingType: DWORD,
139 pdwIndex: *mut DWORD,
140 cbSignedDataMsg: DWORD,
141 pbSignedDataMsg: *mut BYTE,
142 ) -> BOOL}
143 extern "system" {
144 pub fn CryptSIPCreateIndirectData(
145 pSubjectInfo: *mut SIP_SUBJECTINFO,
146 pcbIndirectData: *mut DWORD,
147 pIndirectData: *mut SIP_INDIRECT_DATA,
148 ) -> BOOL;
149 }
150 FN!{stdcall pCryptSIPCreateIndirectData(
151 pSubjectInfo: *mut SIP_SUBJECTINFO,
152 pcbIndirectData: *mut DWORD,
153 pIndirectData: *mut SIP_INDIRECT_DATA,
154 ) -> BOOL}
155 extern "system" {
156 pub fn CryptSIPVerifyIndirectData(
157 pSubjectInfo: *mut SIP_SUBJECTINFO,
158 pIndirectData: *mut SIP_INDIRECT_DATA,
159 ) -> BOOL;
160 }
161 FN!{stdcall pCryptSIPVerifyIndirectData(
162 pSubjectInfo: *mut SIP_SUBJECTINFO,
163 pIndirectData: *mut SIP_INDIRECT_DATA,
164 ) -> BOOL}
165 extern "system" {
166 pub fn CryptSIPRemoveSignedDataMsg(
167 pSubjectInfo: *mut SIP_SUBJECTINFO,
168 dwIndex: DWORD,
169 ) -> BOOL;
170 }
171 FN!{stdcall pCryptSIPRemoveSignedDataMsg(
172 pSubjectInfo: *mut SIP_SUBJECTINFO,
173 dwIndex: DWORD,
174 ) -> BOOL}
175 STRUCT!{struct SIP_DISPATCH_INFO {
176 cbSize: DWORD,
177 hSIP: HANDLE,
178 pfGet: pCryptSIPGetSignedDataMsg,
179 pfPut: pCryptSIPPutSignedDataMsg,
180 pfCreate: pCryptSIPCreateIndirectData,
181 pfVerify: pCryptSIPVerifyIndirectData,
182 pfRemove: pCryptSIPRemoveSignedDataMsg,
183 }}
184 pub type LPSIP_DISPATCH_INFO = *mut SIP_DISPATCH_INFO;
185 FN!{stdcall pfnIsFileSupported(
186 hFile: HANDLE,
187 pgSubject: *mut GUID,
188 ) -> BOOL}
189 FN!{stdcall pfnIsFileSupportedName(
190 pwszFileName: *mut WCHAR,
191 pgSubject: *mut GUID,
192 ) -> BOOL}
193 STRUCT!{struct SIP_ADD_NEWPROVIDER {
194 cbStruct: DWORD,
195 pgSubject: *mut GUID,
196 pwszDLLFileName: *mut WCHAR,
197 pwszMagicNumber: *mut WCHAR,
198 pwszIsFunctionName: *mut WCHAR,
199 pwszGetFuncName: *mut WCHAR,
200 pwszPutFuncName: *mut WCHAR,
201 pwszCreateFuncName: *mut WCHAR,
202 pwszVerifyFuncName: *mut WCHAR,
203 pwszRemoveFuncName: *mut WCHAR,
204 pwszIsFunctionNameFmt2: *mut WCHAR,
205 pwszGetCapFuncName: PWSTR,
206 }}
207 pub type PSIP_ADD_NEWPROVIDER = *mut SIP_ADD_NEWPROVIDER;
208 pub const SIP_MAX_MAGIC_NUMBER: DWORD = 4;
209 extern "system" {
210 pub fn CryptSIPLoad(
211 pgSubject: *const GUID,
212 dwFlags: DWORD,
213 pSipDispatch: *mut SIP_DISPATCH_INFO,
214 ) -> BOOL;
215 pub fn CryptSIPRetrieveSubjectGuid(
216 FileName: LPCWSTR,
217 hFileIn: HANDLE,
218 pgSubject: *mut GUID,
219 ) -> BOOL;
220 pub fn CryptSIPRetrieveSubjectGuidForCatalogFile(
221 FileName: LPCWSTR,
222 hFileIn: HANDLE,
223 pgSubject: *mut GUID,
224 ) -> BOOL;
225 pub fn CryptSIPAddProvider(
226 psNewProv: *mut SIP_ADD_NEWPROVIDER,
227 ) -> BOOL;
228 pub fn CryptSIPRemoveProvider(
229 pgProv: *mut GUID,
230 ) -> BOOL;
231 pub fn CryptSIPGetCaps(
232 pSubjInfo: *mut SIP_SUBJECTINFO,
233 pCaps: *mut SIP_CAP_SET,
234 ) -> BOOL;
235 }
236 FN!{stdcall pCryptSIPGetCaps(
237 pSubjInfo: *mut SIP_SUBJECTINFO,
238 pCaps: *mut SIP_CAP_SET,
239 ) -> BOOL}
240 extern "system" {
241 pub fn CryptSIPGetSealedDigest(
242 pSubjectInfo: *mut SIP_SUBJECTINFO,
243 pSig: *const BYTE,
244 dwSig: DWORD,
245 pbDigest: *mut BYTE,
246 pcbDigest: *mut DWORD,
247 ) -> BOOL;
248 }
249 FN!{stdcall pCryptSIPGetSealedDigest(
250 pSubjectInfo: *mut SIP_SUBJECTINFO,
251 pSig: *const BYTE,
252 dwSig: DWORD,
253 pbDigest: *mut BYTE,
254 pcbDigest: *mut DWORD,
255 ) -> BOOL}