1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! Security Support Provider Interface Prototypes and structure definitions
4 pub type SEC_WCHAR = ::WCHAR;
5 pub type SEC_CHAR = ::CHAR;
6 pub type SECURITY_STATUS = ::LONG;
7 STRUCT!{struct SecHandle {
8     dwLower: ::ULONG_PTR,
9     dwUpper: ::ULONG_PTR,
10 }}
11 pub type PSecHandle = *mut SecHandle;
12 pub const SEC_DELETED_HANDLE: ::ULONG_PTR = 2;
13 pub type CredHandle = SecHandle;
14 pub type PCredHandle = PSecHandle;
15 pub type CtxtHandle = SecHandle;
16 pub type PCtxtHandle = PSecHandle;
17 pub type SECURITY_INTEGER = ::LARGE_INTEGER;
18 pub type PSECURITY_INTEGER = *mut ::LARGE_INTEGER;
19 pub type TimeStamp = SECURITY_INTEGER;
20 pub type PTimeStamp = *mut SECURITY_INTEGER;
21 STRUCT!{struct SECURITY_STRING {
22     Length: ::c_ushort,
23     MaximumLength: ::c_ushort,
24     Buffer: *mut ::c_ushort,
25 }}
26 pub type PSECURITY_STRING = *mut SECURITY_STRING;
27 STRUCT!{struct SecPkgInfoW {
28     fCapabilities: ::c_ulong,
29     wVersion: ::c_ushort,
30     wRPCID: ::c_ushort,
31     cbMaxToken: ::c_ulong,
32     Name: *mut SEC_WCHAR,
33     Comment: *mut SEC_WCHAR,
34 }}
35 pub type PSecPkgInfoW = *mut SecPkgInfoW;
36 STRUCT!{struct SecPkgInfoA {
37     fCapabilities: ::c_ulong,
38     wVersion: ::c_ushort,
39     wRPCID: ::c_ushort,
40     cbMaxToken: ::c_ulong,
41     Name: *mut SEC_CHAR,
42     Comment: *mut SEC_CHAR,
43 }}
44 pub type PSecPkgInfoA = *mut SecPkgInfoA;
45 pub const SECPKG_FLAG_INTEGRITY: ::c_ulong = 0x00000001;
46 pub const SECPKG_FLAG_PRIVACY: ::c_ulong = 0x00000002;
47 pub const SECPKG_FLAG_TOKEN_ONLY: ::c_ulong = 0x00000004;
48 pub const SECPKG_FLAG_DATAGRAM: ::c_ulong = 0x00000008;
49 pub const SECPKG_FLAG_CONNECTION: ::c_ulong = 0x00000010;
50 pub const SECPKG_FLAG_MULTI_REQUIRED: ::c_ulong = 0x00000020;
51 pub const SECPKG_FLAG_CLIENT_ONLY: ::c_ulong = 0x00000040;
52 pub const SECPKG_FLAG_EXTENDED_ERROR: ::c_ulong = 0x00000080;
53 pub const SECPKG_FLAG_IMPERSONATION: ::c_ulong = 0x00000100;
54 pub const SECPKG_FLAG_ACCEPT_WIN32_NAME: ::c_ulong = 0x00000200;
55 pub const SECPKG_FLAG_STREAM: ::c_ulong = 0x00000400;
56 pub const SECPKG_FLAG_NEGOTIABLE: ::c_ulong = 0x00000800;
57 pub const SECPKG_FLAG_GSS_COMPATIBLE: ::c_ulong = 0x00001000;
58 pub const SECPKG_FLAG_LOGON: ::c_ulong = 0x00002000;
59 pub const SECPKG_FLAG_ASCII_BUFFERS: ::c_ulong = 0x00004000;
60 pub const SECPKG_FLAG_FRAGMENT: ::c_ulong = 0x00008000;
61 pub const SECPKG_FLAG_MUTUAL_AUTH: ::c_ulong = 0x00010000;
62 pub const SECPKG_FLAG_DELEGATION: ::c_ulong = 0x00020000;
63 pub const SECPKG_FLAG_READONLY_WITH_CHECKSUM: ::c_ulong = 0x00040000;
64 pub const SECPKG_FLAG_RESTRICTED_TOKENS: ::c_ulong = 0x00080000;
65 pub const SECPKG_FLAG_NEGO_EXTENDER: ::c_ulong = 0x00100000;
66 pub const SECPKG_FLAG_NEGOTIABLE2: ::c_ulong = 0x00200000;
67 pub const SECPKG_FLAG_APPCONTAINER_PASSTHROUGH: ::c_ulong = 0x00400000;
68 pub const SECPKG_FLAG_APPCONTAINER_CHECKS: ::c_ulong = 0x00800000;
69 pub const SECPKG_ID_NONE: ::c_ulong = 0xFFFF;
70 pub const SECPKG_CALLFLAGS_APPCONTAINER: ::c_ulong = 0x00000001;
71 pub const SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE: ::c_ulong = 0x00000002;
72 pub const SECPKG_CALLFLAGS_FORCE_SUPPLIED: ::c_ulong = 0x00000004;
73 STRUCT!{struct SecBuffer {
74     cbBuffer: ::c_ulong,
75     BufferType: ::c_ulong,
76     pvBuffer: *mut ::c_void,
77 }}
78 pub type PSecBuffer = *mut SecBuffer;
79 STRUCT!{struct SecBufferDesc {
80     ulVersion: ::c_ulong,
81     cBuffers: ::c_ulong,
82     pBuffers: PSecBuffer,
83 }}
84 pub type PSecBufferDesc = *mut SecBufferDesc;
85 pub const SECBUFFER_VERSION: ::c_ulong = 0;
86 pub const SECBUFFER_EMPTY: ::c_ulong = 0;
87 pub const SECBUFFER_DATA: ::c_ulong = 1;
88 pub const SECBUFFER_TOKEN: ::c_ulong = 2;
89 pub const SECBUFFER_PKG_PARAMS: ::c_ulong = 3;
90 pub const SECBUFFER_MISSING: ::c_ulong = 4;
91 pub const SECBUFFER_EXTRA: ::c_ulong = 5;
92 pub const SECBUFFER_STREAM_TRAILER: ::c_ulong = 6;
93 pub const SECBUFFER_STREAM_HEADER: ::c_ulong = 7;
94 pub const SECBUFFER_NEGOTIATION_INFO: ::c_ulong = 8;
95 pub const SECBUFFER_PADDING: ::c_ulong = 9;
96 pub const SECBUFFER_STREAM: ::c_ulong = 10;
97 pub const SECBUFFER_MECHLIST: ::c_ulong = 11;
98 pub const SECBUFFER_MECHLIST_SIGNATURE: ::c_ulong = 12;
99 pub const SECBUFFER_TARGET: ::c_ulong = 13;
100 pub const SECBUFFER_CHANNEL_BINDINGS: ::c_ulong = 14;
101 pub const SECBUFFER_CHANGE_PASS_RESPONSE: ::c_ulong = 15;
102 pub const SECBUFFER_TARGET_HOST: ::c_ulong = 16;
103 pub const SECBUFFER_ALERT: ::c_ulong = 17;
104 pub const SECBUFFER_APPLICATION_PROTOCOLS: ::c_ulong = 18;
105 pub const SECBUFFER_ATTRMASK: ::c_ulong = 0xF0000000;
106 pub const SECBUFFER_READONLY: ::c_ulong = 0x80000000;
107 pub const SECBUFFER_READONLY_WITH_CHECKSUM: ::c_ulong = 0x10000000;
108 pub const SECBUFFER_RESERVED: ::c_ulong = 0x60000000;
109 STRUCT!{struct SEC_NEGOTIATION_INFO {
110     Size: ::c_ulong,
111     NameLength: ::c_ulong,
112     Name: *mut SEC_WCHAR,
113     Reserved: *mut ::c_void,
114 }}
115 pub type PSEC_NEGOTIATION_INFO = *mut SEC_NEGOTIATION_INFO;
116 STRUCT!{struct SEC_CHANNEL_BINDINGS {
117     dwInitiatorAddrType: ::c_ulong,
118     cbInitiatorLength: ::c_ulong,
119     dwInitiatorOffset: ::c_ulong,
120     dwAcceptorAddrType: ::c_ulong,
121     cbAcceptorLength: ::c_ulong,
122     dwAcceptorOffset: ::c_ulong,
123     cbApplicationDataLength: ::c_ulong,
124     dwApplicationDataOffset: ::c_ulong,
125 }}
126 pub type PSEC_CHANNEL_BINDINGS = *mut SEC_CHANNEL_BINDINGS;
127 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT {
128     SecApplicationProtocolNegotiationExt_None,
129     SecApplicationProtocolNegotiationExt_NPN,
130     SecApplicationProtocolNegotiationExt_ALPN,
131 }}
132 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT = *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT;
133 STRUCT!{struct SEC_APPLICATION_PROTOCOL_LIST {
134     ProtoNegoExt: ::SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT,
135     ProtocolListSize: ::c_ushort,
136     ProtocolList: [::c_uchar; 0],
137 }}
138 STRUCT!{struct SEC_APPLICATION_PROTOCOLS {
139     ProtocolListsSize: ::c_ulong,
140     ProtocolLists: [SEC_APPLICATION_PROTOCOL_LIST; 0],
141 }}
142 pub type PSEC_APPLICATION_PROTOCOLS = *mut SEC_APPLICATION_PROTOCOLS;
143 pub const SECURITY_NATIVE_DREP: ::c_ulong = 0x00000010;
144 pub const SECURITY_NETWORK_DREP: ::c_ulong = 0x00000000;
145 pub const SECPKG_CRED_INBOUND: ::c_ulong = 0x00000001;
146 pub const SECPKG_CRED_OUTBOUND: ::c_ulong = 0x00000002;
147 pub const SECPKG_CRED_BOTH: ::c_ulong = 0x00000003;
148 pub const SECPKG_CRED_DEFAULT: ::c_ulong = 0x00000004;
149 pub const SECPKG_CRED_RESERVED: ::c_ulong = 0xF0000000;
150 pub const SECPKG_CRED_AUTOLOGON_RESTRICTED: ::c_ulong = 0x00000010;
151 pub const SECPKG_CRED_PROCESS_POLICY_ONLY: ::c_ulong = 0x00000020;
152 pub const ISC_REQ_DELEGATE: ::c_ulong = 0x00000001;
153 pub const ISC_REQ_MUTUAL_AUTH: ::c_ulong = 0x00000002;
154 pub const ISC_REQ_REPLAY_DETECT: ::c_ulong = 0x00000004;
155 pub const ISC_REQ_SEQUENCE_DETECT: ::c_ulong = 0x00000008;
156 pub const ISC_REQ_CONFIDENTIALITY: ::c_ulong = 0x00000010;
157 pub const ISC_REQ_USE_SESSION_KEY: ::c_ulong = 0x00000020;
158 pub const ISC_REQ_PROMPT_FOR_CREDS: ::c_ulong = 0x00000040;
159 pub const ISC_REQ_USE_SUPPLIED_CREDS: ::c_ulong = 0x00000080;
160 pub const ISC_REQ_ALLOCATE_MEMORY: ::c_ulong = 0x00000100;
161 pub const ISC_REQ_USE_DCE_STYLE: ::c_ulong = 0x00000200;
162 pub const ISC_REQ_DATAGRAM: ::c_ulong = 0x00000400;
163 pub const ISC_REQ_CONNECTION: ::c_ulong = 0x00000800;
164 pub const ISC_REQ_CALL_LEVEL: ::c_ulong = 0x00001000;
165 pub const ISC_REQ_FRAGMENT_SUPPLIED: ::c_ulong = 0x00002000;
166 pub const ISC_REQ_EXTENDED_ERROR: ::c_ulong = 0x00004000;
167 pub const ISC_REQ_STREAM: ::c_ulong = 0x00008000;
168 pub const ISC_REQ_INTEGRITY: ::c_ulong = 0x00010000;
169 pub const ISC_REQ_IDENTIFY: ::c_ulong = 0x00020000;
170 pub const ISC_REQ_NULL_SESSION: ::c_ulong = 0x00040000;
171 pub const ISC_REQ_MANUAL_CRED_VALIDATION: ::c_ulong = 0x00080000;
172 pub const ISC_REQ_RESERVED1: ::c_ulong = 0x00100000;
173 pub const ISC_REQ_FRAGMENT_TO_FIT: ::c_ulong = 0x00200000;
174 pub const ISC_REQ_FORWARD_CREDENTIALS: ::c_ulong = 0x00400000;
175 pub const ISC_REQ_NO_INTEGRITY: ::c_ulong = 0x00800000;
176 pub const ISC_REQ_USE_HTTP_STYLE: ::c_ulong = 0x01000000;
177 pub const ISC_REQ_UNVERIFIED_TARGET_NAME: ::c_ulong = 0x20000000;
178 pub const ISC_REQ_CONFIDENTIALITY_ONLY: ::c_ulong = 0x40000000;
179 pub const ISC_RET_DELEGATE: ::c_ulong = 0x00000001;
180 pub const ISC_RET_MUTUAL_AUTH: ::c_ulong = 0x00000002;
181 pub const ISC_RET_REPLAY_DETECT: ::c_ulong = 0x00000004;
182 pub const ISC_RET_SEQUENCE_DETECT: ::c_ulong = 0x00000008;
183 pub const ISC_RET_CONFIDENTIALITY: ::c_ulong = 0x00000010;
184 pub const ISC_RET_USE_SESSION_KEY: ::c_ulong = 0x00000020;
185 pub const ISC_RET_USED_COLLECTED_CREDS: ::c_ulong = 0x00000040;
186 pub const ISC_RET_USED_SUPPLIED_CREDS: ::c_ulong = 0x00000080;
187 pub const ISC_RET_ALLOCATED_MEMORY: ::c_ulong = 0x00000100;
188 pub const ISC_RET_USED_DCE_STYLE: ::c_ulong = 0x00000200;
189 pub const ISC_RET_DATAGRAM: ::c_ulong = 0x00000400;
190 pub const ISC_RET_CONNECTION: ::c_ulong = 0x00000800;
191 pub const ISC_RET_INTERMEDIATE_RETURN: ::c_ulong = 0x00001000;
192 pub const ISC_RET_CALL_LEVEL: ::c_ulong = 0x00002000;
193 pub const ISC_RET_EXTENDED_ERROR: ::c_ulong = 0x00004000;
194 pub const ISC_RET_STREAM: ::c_ulong = 0x00008000;
195 pub const ISC_RET_INTEGRITY: ::c_ulong = 0x00010000;
196 pub const ISC_RET_IDENTIFY: ::c_ulong = 0x00020000;
197 pub const ISC_RET_NULL_SESSION: ::c_ulong = 0x00040000;
198 pub const ISC_RET_MANUAL_CRED_VALIDATION: ::c_ulong = 0x00080000;
199 pub const ISC_RET_RESERVED1: ::c_ulong = 0x00100000;
200 pub const ISC_RET_FRAGMENT_ONLY: ::c_ulong = 0x00200000;
201 pub const ISC_RET_FORWARD_CREDENTIALS: ::c_ulong = 0x00400000;
202 pub const ISC_RET_USED_HTTP_STYLE: ::c_ulong = 0x01000000;
203 pub const ISC_RET_NO_ADDITIONAL_TOKEN: ::c_ulong = 0x02000000;
204 pub const ISC_RET_REAUTHENTICATION: ::c_ulong = 0x08000000;
205 pub const ISC_RET_CONFIDENTIALITY_ONLY: ::c_ulong = 0x40000000;
206 pub const ASC_REQ_DELEGATE: ::c_ulong = 0x00000001;
207 pub const ASC_REQ_MUTUAL_AUTH: ::c_ulong = 0x00000002;
208 pub const ASC_REQ_REPLAY_DETECT: ::c_ulong = 0x00000004;
209 pub const ASC_REQ_SEQUENCE_DETECT: ::c_ulong = 0x00000008;
210 pub const ASC_REQ_CONFIDENTIALITY: ::c_ulong = 0x00000010;
211 pub const ASC_REQ_USE_SESSION_KEY: ::c_ulong = 0x00000020;
212 pub const ASC_REQ_SESSION_TICKET: ::c_ulong = 0x00000040;
213 pub const ASC_REQ_ALLOCATE_MEMORY: ::c_ulong = 0x00000100;
214 pub const ASC_REQ_USE_DCE_STYLE: ::c_ulong = 0x00000200;
215 pub const ASC_REQ_DATAGRAM: ::c_ulong = 0x00000400;
216 pub const ASC_REQ_CONNECTION: ::c_ulong = 0x00000800;
217 pub const ASC_REQ_CALL_LEVEL: ::c_ulong = 0x00001000;
218 pub const ASC_REQ_EXTENDED_ERROR: ::c_ulong = 0x00008000;
219 pub const ASC_REQ_STREAM: ::c_ulong = 0x00010000;
220 pub const ASC_REQ_INTEGRITY: ::c_ulong = 0x00020000;
221 pub const ASC_REQ_LICENSING: ::c_ulong = 0x00040000;
222 pub const ASC_REQ_IDENTIFY: ::c_ulong = 0x00080000;
223 pub const ASC_REQ_ALLOW_NULL_SESSION: ::c_ulong = 0x00100000;
224 pub const ASC_REQ_ALLOW_NON_USER_LOGONS: ::c_ulong = 0x00200000;
225 pub const ASC_REQ_ALLOW_CONTEXT_REPLAY: ::c_ulong = 0x00400000;
226 pub const ASC_REQ_FRAGMENT_TO_FIT: ::c_ulong = 0x00800000;
227 pub const ASC_REQ_FRAGMENT_SUPPLIED: ::c_ulong = 0x00002000;
228 pub const ASC_REQ_NO_TOKEN: ::c_ulong = 0x01000000;
229 pub const ASC_REQ_PROXY_BINDINGS: ::c_ulong = 0x04000000;
230 pub const ASC_REQ_ALLOW_MISSING_BINDINGS: ::c_ulong = 0x10000000;
231 pub const ASC_RET_DELEGATE: ::c_ulong = 0x00000001;
232 pub const ASC_RET_MUTUAL_AUTH: ::c_ulong = 0x00000002;
233 pub const ASC_RET_REPLAY_DETECT: ::c_ulong = 0x00000004;
234 pub const ASC_RET_SEQUENCE_DETECT: ::c_ulong = 0x00000008;
235 pub const ASC_RET_CONFIDENTIALITY: ::c_ulong = 0x00000010;
236 pub const ASC_RET_USE_SESSION_KEY: ::c_ulong = 0x00000020;
237 pub const ASC_RET_SESSION_TICKET: ::c_ulong = 0x00000040;
238 pub const ASC_RET_ALLOCATED_MEMORY: ::c_ulong = 0x00000100;
239 pub const ASC_RET_USED_DCE_STYLE: ::c_ulong = 0x00000200;
240 pub const ASC_RET_DATAGRAM: ::c_ulong = 0x00000400;
241 pub const ASC_RET_CONNECTION: ::c_ulong = 0x00000800;
242 pub const ASC_RET_CALL_LEVEL: ::c_ulong = 0x00002000;
243 pub const ASC_RET_THIRD_LEG_FAILED: ::c_ulong = 0x00004000;
244 pub const ASC_RET_EXTENDED_ERROR: ::c_ulong = 0x00008000;
245 pub const ASC_RET_STREAM: ::c_ulong = 0x00010000;
246 pub const ASC_RET_INTEGRITY: ::c_ulong = 0x00020000;
247 pub const ASC_RET_LICENSING: ::c_ulong = 0x00040000;
248 pub const ASC_RET_IDENTIFY: ::c_ulong = 0x00080000;
249 pub const ASC_RET_NULL_SESSION: ::c_ulong = 0x00100000;
250 pub const ASC_RET_ALLOW_NON_USER_LOGONS: ::c_ulong = 0x00200000;
251 pub const ASC_RET_ALLOW_CONTEXT_REPLAY: ::c_ulong = 0x00400000;
252 pub const ASC_RET_FRAGMENT_ONLY: ::c_ulong = 0x00800000;
253 pub const ASC_RET_NO_TOKEN: ::c_ulong = 0x01000000;
254 pub const ASC_RET_NO_ADDITIONAL_TOKEN: ::c_ulong = 0x02000000;
255 pub const SECPKG_CRED_ATTR_NAMES: ::c_ulong = 1;
256 pub const SECPKG_CRED_ATTR_SSI_PROVIDER: ::c_ulong = 2;
257 pub const SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS: ::c_ulong = 3;
258 pub const SECPKG_CRED_ATTR_CERT: ::c_ulong = 4;
259 STRUCT!{struct SecPkgCredentials_NamesW {
260     sUserName: *mut SEC_WCHAR,
261 }}
262 pub type PSecPkgCredentials_NamesW = *mut SecPkgCredentials_NamesW;
263 STRUCT!{struct SecPkgCredentials_NamesA {
264     sUserName: *mut SEC_CHAR,
265 }}
266 pub type PSecPkgCredentials_NamesA = *mut SecPkgCredentials_NamesA;
267 STRUCT!{struct SecPkgCredentials_SSIProviderW {
268     sProviderName: *mut SEC_WCHAR,
269     ProviderInfoLength: ::c_ulong,
270     ProviderInfo: *mut ::c_char,
271 }}
272 pub type PSecPkgCredentials_SSIProviderW = *mut SecPkgCredentials_SSIProviderW;
273 STRUCT!{struct SecPkgCredentials_SSIProviderA {
274     sProviderName: *mut SEC_CHAR,
275     ProviderInfoLength: ::c_ulong,
276     ProviderInfo: *mut ::c_char,
277 }}
278 pub type PSecPkgCredentials_SSIProviderA = *mut SecPkgCredentials_SSIProviderA;
279 pub const KDC_PROXY_SETTINGS_V1: ::ULONG = 1;
280 pub const KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY: ::ULONG = 0x1;
281 STRUCT!{struct SecPkgCredentials_KdcProxySettingsW {
282     Version: ::ULONG,
283     Flags: ::ULONG,
284     ProxyServerOffset: ::USHORT,
285     ProxyServerLength: ::USHORT,
286     ClientTlsCredOffset: ::USHORT,
287     ClientTlsCredLength: ::USHORT,
288 }}
289 pub type PSecPkgCredentials_KdcProxySettingsW = *mut SecPkgCredentials_KdcProxySettingsW;
290 STRUCT!{struct SecPkgCredentials_Cert {
291     EncodedCertSize: ::c_ulong,
292     EncodedCert: *mut ::c_uchar,
293 }}
294 pub type PSecPkgCredentials_Cert = *mut SecPkgCredentials_Cert;
295 pub const SECPKG_ATTR_SIZES: ::c_ulong = 0;
296 pub const SECPKG_ATTR_NAMES: ::c_ulong = 1;
297 pub const SECPKG_ATTR_LIFESPAN: ::c_ulong = 2;
298 pub const SECPKG_ATTR_DCE_INFO: ::c_ulong = 3;
299 pub const SECPKG_ATTR_STREAM_SIZES: ::c_ulong = 4;
300 pub const SECPKG_ATTR_KEY_INFO: ::c_ulong = 5;
301 pub const SECPKG_ATTR_AUTHORITY: ::c_ulong = 6;
302 pub const SECPKG_ATTR_PROTO_INFO: ::c_ulong = 7;
303 pub const SECPKG_ATTR_PASSWORD_EXPIRY: ::c_ulong = 8;
304 pub const SECPKG_ATTR_SESSION_KEY: ::c_ulong = 9;
305 pub const SECPKG_ATTR_PACKAGE_INFO: ::c_ulong = 10;
306 pub const SECPKG_ATTR_USER_FLAGS: ::c_ulong = 11;
307 pub const SECPKG_ATTR_NEGOTIATION_INFO: ::c_ulong = 12;
308 pub const SECPKG_ATTR_NATIVE_NAMES: ::c_ulong = 13;
309 pub const SECPKG_ATTR_FLAGS: ::c_ulong = 14;
310 pub const SECPKG_ATTR_USE_VALIDATED: ::c_ulong = 15;
311 pub const SECPKG_ATTR_CREDENTIAL_NAME: ::c_ulong = 16;
312 pub const SECPKG_ATTR_TARGET_INFORMATION: ::c_ulong = 17;
313 pub const SECPKG_ATTR_ACCESS_TOKEN: ::c_ulong = 18;
314 pub const SECPKG_ATTR_TARGET: ::c_ulong = 19;
315 pub const SECPKG_ATTR_AUTHENTICATION_ID: ::c_ulong = 20;
316 pub const SECPKG_ATTR_LOGOFF_TIME: ::c_ulong = 21;
317 pub const SECPKG_ATTR_NEGO_KEYS: ::c_ulong = 22;
318 pub const SECPKG_ATTR_PROMPTING_NEEDED: ::c_ulong = 24;
319 pub const SECPKG_ATTR_UNIQUE_BINDINGS: ::c_ulong = 25;
320 pub const SECPKG_ATTR_ENDPOINT_BINDINGS: ::c_ulong = 26;
321 pub const SECPKG_ATTR_CLIENT_SPECIFIED_TARGET: ::c_ulong = 27;
322 pub const SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS: ::c_ulong = 30;
323 pub const SECPKG_ATTR_NEGO_PKG_INFO: ::c_ulong = 31;
324 pub const SECPKG_ATTR_NEGO_STATUS: ::c_ulong = 32;
325 pub const SECPKG_ATTR_CONTEXT_DELETED: ::c_ulong = 33;
326 pub const SECPKG_ATTR_DTLS_MTU: ::c_ulong = 34;
327 pub const SECPKG_ATTR_DATAGRAM_SIZES: ::c_ulong = SECPKG_ATTR_STREAM_SIZES;
328 pub const SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES: ::c_ulong = 128;
329 pub const SECPKG_ATTR_APPLICATION_PROTOCOL: ::c_ulong = 35;
330 STRUCT!{struct SecPkgContext_SubjectAttributes {
331     AttributeInfo: *mut ::c_void,
332 }}
333 pub type PSecPkgContext_SubjectAttributes = *mut SecPkgContext_SubjectAttributes;
334 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS: ::c_ulong = 0x1;
335 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM: ::c_ulong = 0x2;
336 ENUM!{enum SECPKG_CRED_CLASS {
337     SecPkgCredClass_None = 0,
338     SecPkgCredClass_Ephemeral = 10,
339     SecPkgCredClass_PersistedGeneric = 20,
340     SecPkgCredClass_PersistedSpecific = 30,
341     SecPkgCredClass_Explicit = 40,
342 }}
343 pub type PSECPKG_CRED_CLASS = *mut SECPKG_CRED_CLASS;
344 STRUCT!{struct SecPkgContext_CredInfo {
345     CredClass: SECPKG_CRED_CLASS,
346     IsPromptingNeeded: ::c_ulong,
347 }}
348 pub type PSecPkgContext_CredInfo = *mut SecPkgContext_CredInfo;
349 STRUCT!{struct SecPkgContext_NegoPackageInfo {
350     PackageMask: ::c_ulong,
351 }}
352 pub type PSecPkgContext_NegoPackageInfo = *mut SecPkgContext_NegoPackageInfo;
353 STRUCT!{struct SecPkgContext_NegoStatus {
354     LastStatus: ::c_ulong,
355 }}
356 pub type PSecPkgContext_NegoStatus = *mut SecPkgContext_NegoStatus;
357 STRUCT!{struct SecPkgContext_Sizes {
358     cbMaxToken: ::c_ulong,
359     cbMaxSignature: ::c_ulong,
360     cbBlockSize: ::c_ulong,
361     cbSecurityTrailer: ::c_ulong,
362 }}
363 pub type PSecPkgContext_Sizes = *mut SecPkgContext_Sizes;
364 STRUCT!{struct SecPkgContext_StreamSizes {
365     cbHeader: ::c_ulong,
366     cbTrailer: ::c_ulong,
367     cbMaximumMessage: ::c_ulong,
368     cBuffers: ::c_ulong,
369     cbBlockSize: ::c_ulong,
370 }}
371 pub type PSecPkgContext_StreamSizes = *mut SecPkgContext_StreamSizes;
372 pub type SecPkgContext_DatagramSizes = SecPkgContext_StreamSizes;
373 pub type PSecPkgContext_DatagramSizes = PSecPkgContext_StreamSizes;
374 STRUCT!{struct SecPkgContext_NamesW {
375     sUserName: *mut SEC_WCHAR,
376 }}
377 pub type PSecPkgContext_NamesW = *mut SecPkgContext_NamesW;
378 ENUM!{enum SECPKG_ATTR_LCT_STATUS {
379     SecPkgAttrLastClientTokenYes,
380     SecPkgAttrLastClientTokenNo,
381     SecPkgAttrLastClientTokenMaybe,
382 }}
383 pub type PSECPKG_ATTR_LCT_STATUS = *mut SECPKG_ATTR_LCT_STATUS;
384 STRUCT!{struct SecPkgContext_LastClientTokenStatus {
385     LastClientTokenStatus: SECPKG_ATTR_LCT_STATUS,
386 }}
387 pub type PSecPkgContext_LastClientTokenStatus = *mut SecPkgContext_LastClientTokenStatus;
388 STRUCT!{struct SecPkgContext_NamesA {
389     sUserName: *mut SEC_CHAR,
390 }}
391 pub type PSecPkgContext_NamesA = *mut SecPkgContext_NamesA;
392 STRUCT!{struct SecPkgContext_Lifespan {
393     tsStart: TimeStamp,
394     tsExpiry: TimeStamp,
395 }}
396 pub type PSecPkgContext_Lifespan = *mut SecPkgContext_Lifespan;
397 STRUCT!{struct SecPkgContext_DceInfo {
398     AuthzSvc: ::c_ulong,
399     pPac: *mut ::c_void,
400 }}
401 pub type PSecPkgContext_DceInfo = *mut SecPkgContext_DceInfo;
402 STRUCT!{struct SecPkgContext_KeyInfoA {
403     sSignatureAlgorithmName: *mut ::SEC_CHAR,
404     sEncryptAlgorithmName: *mut ::SEC_CHAR,
405     KeySize: ::c_ulong,
406     SignatureAlgorithm: ::c_ulong,
407     EncryptAlgorithm: ::c_ulong,
408 }}
409 pub type PSecPkgContext_KeyInfoA = *mut SecPkgContext_KeyInfoA;
410 STRUCT!{struct SecPkgContext_KeyInfoW {
411     sSignatureAlgorithmName: *mut ::SEC_WCHAR,
412     sEncryptAlgorithmName: *mut ::SEC_WCHAR,
413     KeySize: ::c_ulong,
414     SignatureAlgorithm: ::c_ulong,
415     EncryptAlgorithm: ::c_ulong,
416 }}
417 pub type PSecPkgContext_KeyInfoW = *mut SecPkgContext_KeyInfoW;
418 STRUCT!{struct SecPkgContext_AuthorityA {
419     sAuthorityName: *mut SEC_CHAR,
420 }}
421 pub type PSecPkgContext_AuthorityA = *mut SecPkgContext_AuthorityA;
422 STRUCT!{struct SecPkgContext_AuthorityW {
423     sAuthorityName: *mut SEC_WCHAR,
424 }}
425 pub type PSecPkgContext_AuthorityW = *mut SecPkgContext_AuthorityW;
426 STRUCT!{struct SecPkgContext_ProtoInfoA {
427     sProtocolName: *mut SEC_CHAR,
428     majorVersion: ::c_ulong,
429     minorVersion: ::c_ulong,
430 }}
431 pub type PSecPkgContext_ProtoInfoA = *mut SecPkgContext_ProtoInfoA;
432 STRUCT!{struct SecPkgContext_ProtoInfoW {
433     sProtocolName: *mut SEC_WCHAR,
434     majorVersion: ::c_ulong,
435     minorVersion: ::c_ulong,
436 }}
437 pub type PSecPkgContext_ProtoInfoW = *mut SecPkgContext_ProtoInfoW;
438 STRUCT!{struct SecPkgContext_PasswordExpiry {
439     tsPasswordExpires: TimeStamp,
440 }}
441 pub type PSecPkgContext_PasswordExpiry = *mut SecPkgContext_PasswordExpiry;
442 STRUCT!{struct SecPkgContext_LogoffTime {
443     tsLogoffTime: TimeStamp,
444 }}
445 pub type PSecPkgContext_LogoffTime = *mut SecPkgContext_LogoffTime;
446 STRUCT!{struct SecPkgContext_SessionKey {
447     SessionKeyLength: ::c_ulong,
448     SessionKey: *mut ::c_uchar,
449 }}
450 pub type PSecPkgContext_SessionKey = *mut SecPkgContext_SessionKey;
451 STRUCT!{struct SecPkgContext_NegoKeys {
452     KeyType: ::c_ulong,
453     KeyLength: ::c_ushort,
454     KeyValue: *mut ::c_uchar,
455     VerifyKeyType: ::c_ulong,
456     VerifyKeyLength: ::c_ushort,
457     VerifyKeyValue: *mut ::c_uchar,
458 }}
459 pub type PSecPkgContext_NegoKeys = *mut SecPkgContext_NegoKeys;
460 STRUCT!{struct SecPkgContext_PackageInfoW {
461     PackageInfo: PSecPkgInfoW,
462 }}
463 pub type PSecPkgContext_PackageInfoW = *mut SecPkgContext_PackageInfoW;
464 STRUCT!{struct SecPkgContext_PackageInfoA {
465     PackageInfo: PSecPkgInfoA,
466 }}
467 pub type PSecPkgContext_PackageInfoA = *mut SecPkgContext_PackageInfoA;
468 STRUCT!{struct SecPkgContext_UserFlags {
469     UserFlags: ::c_ulong,
470 }}
471 pub type PSecPkgContext_UserFlags = *mut SecPkgContext_UserFlags;
472 STRUCT!{struct SecPkgContext_Flags {
473     Flags: ::c_ulong,
474 }}
475 pub type PSecPkgContext_Flags = *mut SecPkgContext_Flags;
476 STRUCT!{struct SecPkgContext_NegotiationInfoA {
477     PackageInfo: PSecPkgInfoA,
478     NegotiationState: ::c_ulong,
479 }}
480 pub type PSecPkgContext_NegotiationInfoA = *mut SecPkgContext_NegotiationInfoA;
481 STRUCT!{struct SecPkgContext_NegotiationInfoW {
482     PackageInfo: PSecPkgInfoW,
483     NegotiationState: ::c_ulong,
484 }}
485 pub type PSecPkgContext_NegotiationInfoW = *mut SecPkgContext_NegotiationInfoW;
486 pub const SECPKG_NEGOTIATION_COMPLETE: ::c_ulong = 0;
487 pub const SECPKG_NEGOTIATION_OPTIMISTIC: ::c_ulong = 1;
488 pub const SECPKG_NEGOTIATION_IN_PROGRESS: ::c_ulong = 2;
489 pub const SECPKG_NEGOTIATION_DIRECT: ::c_ulong = 3;
490 pub const SECPKG_NEGOTIATION_TRY_MULTICRED: ::c_ulong = 4;
491 STRUCT!{struct SecPkgContext_NativeNamesW {
492     sClientName: SEC_WCHAR,
493     sServerName: SEC_WCHAR,
494 }}
495 pub type PSecPkgContext_NativeNamesW = *mut SecPkgContext_NativeNamesW;
496 STRUCT!{struct SecPkgContext_NativeNamesA {
497     sClientName: SEC_CHAR,
498     sServerName: SEC_CHAR,
499 }}
500 pub type PSecPkgContext_NativeNamesA = *mut SecPkgContext_NativeNamesA;
501 STRUCT!{struct SecPkgContext_CredentialNameW {
502     CredentialType: ::c_ulong,
503     sCredentialName: *mut SEC_WCHAR,
504 }}
505 pub type PSecPkgContext_CredentialNameW = *mut SecPkgContext_CredentialNameW;
506 STRUCT!{struct SecPkgContext_CredentialNameA {
507     CredentialType: ::c_ulong,
508     sCredentialName: *mut SEC_CHAR,
509 }}
510 pub type PSecPkgContext_CredentialNameA = *mut SecPkgContext_CredentialNameA;
511 STRUCT!{struct SecPkgContext_AccessToken {
512     AccessToken: *mut ::c_void,
513 }}
514 pub type PSecPkgContext_AccessToken = *mut SecPkgContext_AccessToken;
515 STRUCT!{struct SecPkgContext_TargetInformation {
516     MarshalledTargetInfoLength: ::c_ulong,
517     MarshalledTargetInfo: *mut ::c_uchar,
518 }}
519 pub type PSecPkgContext_TargetInformation = *mut SecPkgContext_TargetInformation;
520 STRUCT!{struct SecPkgContext_AuthzID {
521     AuthzIDLength: ::c_ulong,
522     AuthzID: *mut ::c_char,
523 }}
524 pub type PSecPkgContext_AuthzID = *mut SecPkgContext_AuthzID;
525 STRUCT!{struct SecPkgContext_Target {
526     TargetLength: ::c_ulong,
527     Target: *mut ::c_char,
528 }}
529 pub type PSecPkgContext_Target = *mut SecPkgContext_Target;
530 STRUCT!{struct SecPkgContext_ClientSpecifiedTarget {
531     sTargetName: *mut SEC_WCHAR,
532 }}
533 pub type PSecPkgContext_ClientSpecifiedTarget = *mut SecPkgContext_ClientSpecifiedTarget;
534 STRUCT!{struct SecPkgContext_Bindings {
535     BindingsLength: ::c_ulong,
536     Bindings: *mut SEC_CHANNEL_BINDINGS,
537 }}
538 pub type PSecPkgContext_Bindings = *mut SecPkgContext_Bindings;
539 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS {
540     SecApplicationProtocolNegotiationStatus_None,
541     SecApplicationProtocolNegotiationStatus_Success,
542     SecApplicationProtocolNegotiationStatus_SelectedClientOnly,
543 }}
544 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS =
545     *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS;
546 pub const MAX_PROTOCOL_ID_SIZE: usize = 0xff;
547 STRUCT!{nodebug struct SecPkgContext_ApplicationProtocol {
548     ProtoNegoStatus: SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS,
549     ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT,
550     ProtocolIdSize: ::c_uchar,
551     ProtocolId: [::c_uchar; MAX_PROTOCOL_ID_SIZE],
552 }}
553 pub type PSecPkgContext_ApplicationProtocol = *mut SecPkgContext_ApplicationProtocol;
554 pub type SEC_GET_KEY_FN = Option<unsafe extern "system" fn(
555     Arg: *mut ::c_void, Principal: *mut ::c_void, KeyVer: ::c_ulong, Key: *mut *mut ::c_void,
556     Status: *mut SECURITY_STATUS,
557 )>;
558 pub const SECPKG_CONTEXT_EXPORT_RESET_NEW: ::c_ulong = 0x00000001;
559 pub const SECPKG_CONTEXT_EXPORT_DELETE_OLD: ::c_ulong = 0x00000002;
560 pub const SECPKG_CONTEXT_EXPORT_TO_KERNEL: ::c_ulong = 0x00000004;
561 pub type ACQUIRE_CREDENTIALS_HANDLE_FN_W = Option<unsafe extern "system" fn(
562     *mut SEC_WCHAR, *mut SEC_WCHAR, ::c_ulong, *mut ::c_void, *mut ::c_void, SEC_GET_KEY_FN,
563     *mut ::c_void, PCredHandle, PTimeStamp,
564 ) -> SECURITY_STATUS>;
565 pub type ACQUIRE_CREDENTIALS_HANDLE_FN_A = Option<unsafe extern "system" fn(
566     *mut SEC_CHAR, *mut SEC_CHAR, ::c_ulong, *mut ::c_void, *mut ::c_void, SEC_GET_KEY_FN,
567     *mut ::c_void, PCredHandle, PTimeStamp,
568 ) -> SECURITY_STATUS>;
569 pub type FREE_CREDENTIALS_HANDLE_FN = Option<unsafe extern "system" fn(
570     PCredHandle,
571 ) -> SECURITY_STATUS>;
572 pub type ADD_CREDENTIALS_FN_W = Option<unsafe extern "system" fn(
573     PCredHandle, *mut SEC_WCHAR, *mut SEC_WCHAR, ::c_ulong, *mut ::c_void, SEC_GET_KEY_FN,
574     *mut ::c_void, PTimeStamp,
575 ) -> SECURITY_STATUS>;
576 pub type ADD_CREDENTIALS_FN_A = Option<unsafe extern "system" fn(
577     PCredHandle, *mut SEC_CHAR, *mut SEC_CHAR, ::c_ulong, *mut ::c_void, SEC_GET_KEY_FN,
578     *mut ::c_void, PTimeStamp,
579 ) -> SECURITY_STATUS>;
580 pub type CHANGE_PASSWORD_FN_W = Option<unsafe extern "system" fn(
581     *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, ::BOOLEAN,
582     ::c_ulong, PSecBufferDesc,
583 ) -> SECURITY_STATUS>;
584 pub type CHANGE_PASSWORD_FN_A = Option<unsafe extern "system" fn(
585     *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, ::BOOLEAN,
586     ::c_ulong, PSecBufferDesc,
587 ) -> SECURITY_STATUS>;
588 //1844
589 ENUM!{enum SecDelegationType {
590     SecFull,
591     SecService,
592     SecTree,
593     SecDirectory,
594     SecObject,
595 }}
596 pub type PSecDelegationType = *mut SecDelegationType;
597 STRUCT!{struct SEC_WINNT_AUTH_BYTE_VECTOR {
598     ByteArrayOffset: ::c_ulong,
599     ByteArrayLength: ::c_ushort,
600 }}
601 pub type PSEC_WINNT_AUTH_BYTE_VECTOR = *mut SEC_WINNT_AUTH_BYTE_VECTOR;
602 STRUCT!{struct SEC_WINNT_AUTH_DATA {
603     CredType: ::GUID,
604     CredData: SEC_WINNT_AUTH_BYTE_VECTOR,
605 }}
606 pub type PSEC_WINNT_AUTH_DATA = *mut SEC_WINNT_AUTH_DATA;
607 STRUCT!{struct SEC_WINNT_AUTH_PACKED_CREDENTIALS {
608     cbHeaderLength: ::c_ushort,
609     cbStructureLength: ::c_ushort,
610     AuthData: SEC_WINNT_AUTH_DATA,
611 }}
612 pub type PSEC_WINNT_AUTH_PACKED_CREDENTIALS = *mut SEC_WINNT_AUTH_PACKED_CREDENTIALS;
613 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_PASSWORD, 0x28bfc32f, 0x10f6, 0x4738,
614     0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a);
615 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CERT, 0x235f69ad, 0x73fb, 0x4dbc,
616     0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b);
617 STRUCT!{struct SEC_WINNT_AUTH_DATA_PASSWORD {
618     UnicodePassword: SEC_WINNT_AUTH_BYTE_VECTOR,
619 }}
620 pub type PSEC_WINNT_AUTH_DATA_PASSWORD = *mut SEC_WINNT_AUTH_DATA_PASSWORD;
621 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA, 0x68fd9879, 0x79c, 0x4dfe,
622     0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0);
623 STRUCT!{struct SEC_WINNT_AUTH_CERTIFICATE_DATA {
624     cbHeaderLength: ::c_ushort,
625     cbStructureLength: ::c_ushort,
626     Certificate: SEC_WINNT_AUTH_BYTE_VECTOR,
627 }}
628 pub type PSEC_WINNT_AUTH_CERTIFICATE_DATA = *mut SEC_WINNT_AUTH_CERTIFICATE_DATA;
629 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT_VECTOR {
630     CredUIContextArrayOffset: ::ULONG,
631     CredUIContextCount: ::USHORT,
632 }}
633 pub type PSEC_WINNT_CREDUI_CONTEXT_VECTOR = *mut SEC_WINNT_CREDUI_CONTEXT_VECTOR;
634 STRUCT!{struct SEC_WINNT_AUTH_SHORT_VECTOR {
635     ShortArrayOffset: ::ULONG,
636     ShortArrayCount: ::USHORT,
637 }}
638 pub type PSEC_WINNT_AUTH_SHORT_VECTOR = *mut SEC_WINNT_AUTH_SHORT_VECTOR;
639 STRUCT!{struct CREDUIWIN_MARSHALED_CONTEXT {
640     StructureType: ::GUID,
641     cbHeaderLength: ::USHORT,
642     LogonId: ::LUID,
643     MarshaledDataType: ::GUID,
644     MarshaledDataOffset: ::ULONG,
645     MarshaledDataLength: ::USHORT,
646 }}
647 pub type PCREDUIWIN_MARSHALED_CONTEXT = *mut CREDUIWIN_MARSHALED_CONTEXT;
648 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT {
649     cbHeaderLength: ::USHORT,
650     CredUIContextHandle: ::HANDLE,
651     UIInfo: ::PCREDUI_INFOW,
652     dwAuthError: ::ULONG,
653     pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE,
654     TargetName: ::PUNICODE_STRING,
655 }}
656 pub type PSEC_WINNT_CREDUI_CONTEXT = *mut SEC_WINNT_CREDUI_CONTEXT;
657 pub type PSEC_WINNT_AUTH_IDENTITY_OPAQUE = ::PVOID;
658