master
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 __SSPI_H__
7#define __SSPI_H__
8
9#include <_mingw_unicode.h>
10#include <ntsecapi.h>
11
12#ifdef __cplusplus
13extern "C" {
14#endif
15
16#ifdef SECURITY_WIN32
17#define ISSP_LEVEL 32
18#define ISSP_MODE 1
19#endif
20
21#ifdef SECURITY_KERNEL
22#define ISSP_LEVEL 32
23
24#ifdef ISSP_MODE
25#undef ISSP_MODE
26#endif
27#define ISSP_MODE 0
28#endif
29
30#ifdef SECURITY_MAC
31#define ISSP_LEVEL 32
32#define ISSP_MODE 1
33#endif
34
35#ifndef ISSP_LEVEL
36#error You must define one of SECURITY_WIN32,SECURITY_KERNEL,or
37#error SECURITY_MAC
38#endif
39
40#if defined(_NO_KSECDD_IMPORT_)
41
42#define KSECDDDECLSPEC
43#else
44
45#define KSECDDDECLSPEC __declspec(dllimport)
46#endif
47
48 typedef WCHAR SEC_WCHAR;
49 typedef CHAR SEC_CHAR;
50
51#ifndef __SECSTATUS_DEFINED__
52 typedef LONG SECURITY_STATUS;
53#define __SECSTATUS_DEFINED__
54#endif
55
56#ifndef WINAPI
57#if defined(_ARM_)
58#define WINAPI
59#else
60#define WINAPI __stdcall
61#endif
62#endif
63
64#define SEC_TEXT TEXT
65#define SEC_FAR
66#define __SEC_FAR
67#define SEC_ENTRY WINAPI
68
69#if defined(UNICODE)
70 typedef SEC_WCHAR *SECURITY_PSTR;
71 typedef CONST SEC_WCHAR *SECURITY_PCSTR;
72#else
73 typedef SEC_CHAR *SECURITY_PSTR;
74 typedef CONST SEC_CHAR *SECURITY_PCSTR;
75#endif
76
77
78#ifndef __SECHANDLE_DEFINED__
79 typedef struct _SecHandle {
80 ULONG_PTR dwLower;
81 ULONG_PTR dwUpper;
82 } SecHandle,*PSecHandle;
83
84#define __SECHANDLE_DEFINED__
85#endif
86
87#define SecInvalidateHandle(x) ((PSecHandle) x)->dwLower = ((ULONG_PTR) ((INT_PTR)-1)); ((PSecHandle) x)->dwUpper = ((ULONG_PTR) ((INT_PTR)-1));
88#define SecIsValidHandle(x) ((((PSecHandle) x)->dwLower!=((ULONG_PTR) ((INT_PTR) -1))) && (((PSecHandle) x)->dwUpper!=((ULONG_PTR) ((INT_PTR) -1))))
89
90#define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
91
92 typedef SecHandle CredHandle;
93 typedef PSecHandle PCredHandle;
94
95 typedef SecHandle CtxtHandle;
96 typedef PSecHandle PCtxtHandle;
97
98#ifdef WIN32_CHICAGO
99 __MINGW_EXTENSION typedef unsigned __int64 QWORD;
100 typedef QWORD SECURITY_INTEGER,*PSECURITY_INTEGER;
101#define SEC_SUCCESS(Status) ((Status) >= 0)
102#elif defined(_NTDEF_) || defined(_WINNT_)
103 typedef LARGE_INTEGER _SECURITY_INTEGER,SECURITY_INTEGER,*PSECURITY_INTEGER;
104#else
105 typedef struct _SECURITY_INTEGER {
106 unsigned __LONG32 LowPart;
107 __LONG32 HighPart;
108 } SECURITY_INTEGER,*PSECURITY_INTEGER;
109#endif
110
111#ifndef SECURITY_MAC
112 typedef SECURITY_INTEGER TimeStamp;
113 typedef SECURITY_INTEGER *PTimeStamp;
114#else
115 typedef unsigned __LONG32 TimeStamp;
116 typedef unsigned __LONG32 *PTimeStamp;
117#endif
118
119#ifndef _NTDEF_
120 typedef struct _SECURITY_STRING {
121 unsigned short Length;
122 unsigned short MaximumLength;
123 unsigned short *Buffer;
124 } SECURITY_STRING,*PSECURITY_STRING;
125#else
126 typedef UNICODE_STRING SECURITY_STRING,*PSECURITY_STRING;
127#endif
128
129 typedef struct _SecPkgInfoW {
130 unsigned __LONG32 fCapabilities;
131 unsigned short wVersion;
132 unsigned short wRPCID;
133 unsigned __LONG32 cbMaxToken;
134 SEC_WCHAR *Name;
135 SEC_WCHAR *Comment;
136 } SecPkgInfoW,*PSecPkgInfoW;
137
138 typedef struct _SecPkgInfoA {
139 unsigned __LONG32 fCapabilities;
140 unsigned short wVersion;
141 unsigned short wRPCID;
142 unsigned __LONG32 cbMaxToken;
143 SEC_CHAR *Name;
144 SEC_CHAR *Comment;
145 } SecPkgInfoA,*PSecPkgInfoA;
146
147#define SecPkgInfo __MINGW_NAME_AW(SecPkgInfo)
148#define PSecPkgInfo __MINGW_NAME_AW(PSecPkgInfo)
149
150#define SECPKG_FLAG_INTEGRITY 0x00000001
151#define SECPKG_FLAG_PRIVACY 0x00000002
152#define SECPKG_FLAG_TOKEN_ONLY 0x00000004
153#define SECPKG_FLAG_DATAGRAM 0x00000008
154#define SECPKG_FLAG_CONNECTION 0x00000010
155#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
156#define SECPKG_FLAG_CLIENT_ONLY 0x00000040
157#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
158#define SECPKG_FLAG_IMPERSONATION 0x00000100
159#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
160#define SECPKG_FLAG_STREAM 0x00000400
161#define SECPKG_FLAG_NEGOTIABLE 0x00000800
162#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
163#define SECPKG_FLAG_LOGON 0x00002000
164#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
165#define SECPKG_FLAG_FRAGMENT 0x00008000
166#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
167#define SECPKG_FLAG_DELEGATION 0x00020000
168#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
169#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
170#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
171#define SECPKG_FLAG_NEGOTIABLE2 0x00200000
172#define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000
173#define SECPKG_FLAG_APPCONTAINER_CHECKS 0x00800000
174#define SECPKG_FLAG_CREDENTIAL_ISOLATION_ENABLED 0x01000000
175#define SECPKG_FLAG_APPLY_LOOPBACK 0x02000000
176
177#define SECPKG_ID_NONE 0xFFFF
178
179#define SECPKG_CALLFLAGS_APPCONTAINER 0x00000001
180#define SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE 0x00000002
181#define SECPKG_CALLFLAGS_FORCE_SUPPLIED 0x00000004
182#define SECPKG_CALLFLAGS_APPCONTAINER_UPNCAPABLE 0x00000008
183
184 typedef struct _SecBuffer {
185 unsigned __LONG32 cbBuffer;
186 unsigned __LONG32 BufferType;
187 void *pvBuffer;
188 } SecBuffer,*PSecBuffer;
189
190 typedef struct _SecBufferDesc {
191 unsigned __LONG32 ulVersion;
192 unsigned __LONG32 cBuffers;
193 PSecBuffer pBuffers;
194 } SecBufferDesc,*PSecBufferDesc;
195
196#define SECBUFFER_VERSION 0
197
198#define SECBUFFER_EMPTY 0
199#define SECBUFFER_DATA 1
200#define SECBUFFER_TOKEN 2
201#define SECBUFFER_PKG_PARAMS 3
202#define SECBUFFER_MISSING 4
203#define SECBUFFER_EXTRA 5
204#define SECBUFFER_STREAM_TRAILER 6
205#define SECBUFFER_STREAM_HEADER 7
206#define SECBUFFER_NEGOTIATION_INFO 8
207#define SECBUFFER_PADDING 9
208#define SECBUFFER_STREAM 10
209#define SECBUFFER_MECHLIST 11
210#define SECBUFFER_MECHLIST_SIGNATURE 12
211#define SECBUFFER_TARGET 13
212#define SECBUFFER_CHANNEL_BINDINGS 14
213#define SECBUFFER_CHANGE_PASS_RESPONSE 15
214#define SECBUFFER_TARGET_HOST 16
215#define SECBUFFER_ALERT 17
216#define SECBUFFER_APPLICATION_PROTOCOLS 18
217#define SECBUFFER_SRTP_PROTECTION_PROFILES 19
218#define SECBUFFER_SRTP_MASTER_KEY_IDENTIFIER 20
219#define SECBUFFER_TOKEN_BINDING 21
220#define SECBUFFER_PRESHARED_KEY 22
221#define SECBUFFER_PRESHARED_KEY_IDENTITY 23
222#define SECBUFFER_DTLS_MTU 24
223#define SECBUFFER_SEND_GENERIC_TLS_EXTENSION 25
224#define SECBUFFER_SUBSCRIBE_GENERIC_TLS_EXTENSION 26
225#define SECBUFFER_FLAGS 27
226#define SECBUFFER_TRAFFIC_SECRETS 28
227#define SECBUFFER_CERTIFICATE_REQUEST_CONTEXT 29
228
229#define SECBUFFER_ATTRMASK 0xF0000000
230#define SECBUFFER_READONLY 0x80000000
231#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
232#define SECBUFFER_RESERVED 0x60000000
233
234 typedef struct _SEC_NEGOTIATION_INFO {
235 unsigned __LONG32 Size;
236 unsigned __LONG32 NameLength;
237 SEC_WCHAR *Name;
238 void *Reserved;
239 } SEC_NEGOTIATION_INFO,*PSEC_NEGOTIATION_INFO;
240
241 typedef struct _SEC_CHANNEL_BINDINGS {
242 unsigned __LONG32 dwInitiatorAddrType;
243 unsigned __LONG32 cbInitiatorLength;
244 unsigned __LONG32 dwInitiatorOffset;
245 unsigned __LONG32 dwAcceptorAddrType;
246 unsigned __LONG32 cbAcceptorLength;
247 unsigned __LONG32 dwAcceptorOffset;
248 unsigned __LONG32 cbApplicationDataLength;
249 unsigned __LONG32 dwApplicationDataOffset;
250 } SEC_CHANNEL_BINDINGS,*PSEC_CHANNEL_BINDINGS;
251
252 typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT {
253 SecApplicationProtocolNegotiationExt_None,
254 SecApplicationProtocolNegotiationExt_NPN,
255 SecApplicationProtocolNegotiationExt_ALPN
256 } SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT,*PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT;
257
258 typedef struct _SEC_APPLICATION_PROTOCOL_LIST {
259 SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT ProtoNegoExt;
260 unsigned short ProtocolListSize;
261 unsigned char ProtocolList[ANYSIZE_ARRAY];
262 } SEC_APPLICATION_PROTOCOL_LIST,*PSEC_APPLICATION_PROTOCOL_LIST;
263
264 typedef struct _SEC_APPLICATION_PROTOCOLS {
265 unsigned __LONG32 ProtocolListsSize;
266 SEC_APPLICATION_PROTOCOL_LIST ProtocolLists[ANYSIZE_ARRAY];
267 } SEC_APPLICATION_PROTOCOLS,*PSEC_APPLICATION_PROTOCOLS;
268
269 typedef struct _SEC_SRTP_PROTECTION_PROFILES {
270 unsigned short ProfilesSize;
271 unsigned short ProfilesList[ANYSIZE_ARRAY];
272 } SEC_SRTP_PROTECTION_PROFILES,*PSEC_SRTP_PROTECTION_PROFILES;
273
274 typedef struct _SEC_SRTP_MASTER_KEY_IDENTIFIER {
275 unsigned char MasterKeyIdentifierSize;
276 unsigned char MasterKeyIdentifier[ANYSIZE_ARRAY];
277 } SEC_SRTP_MASTER_KEY_IDENTIFIER,*PSEC_SRTP_MASTER_KEY_IDENTIFIER;
278
279 typedef struct _SEC_TOKEN_BINDING {
280 unsigned char MajorVersion;
281 unsigned char MinorVersion;
282 unsigned short KeyParametersSize;
283 unsigned char KeyParameters[ANYSIZE_ARRAY];
284 } SEC_TOKEN_BINDING,*PSEC_TOKEN_BINDING;
285
286 typedef struct _SEC_PRESHAREDKEY {
287 unsigned short KeySize;
288 unsigned char Key[ANYSIZE_ARRAY];
289 } SEC_PRESHAREDKEY,*PSEC_PRESHAREDKEY;
290
291 typedef struct _SEC_PRESHAREDKEY_IDENTITY {
292 unsigned short KeyIdentitySize;
293 unsigned char KeyIdentity[ANYSIZE_ARRAY];
294 } SEC_PRESHAREDKEY_IDENTITY,*PSEC_PRESHAREDKEY_IDENTITY;
295
296 typedef struct _SEC_DTLS_MTU {
297 unsigned short PathMTU;
298 } SEC_DTLS_MTU,*PSEC_DTLS_MTU;
299
300 typedef struct _SEC_FLAGS {
301 unsigned long long Flags;
302 } SEC_FLAGS,*PSEC_FLAGS;
303
304 typedef struct _SEC_CERTIFICATE_REQUEST_CONTEXT {
305 unsigned char cbCertificateRequestContext;
306 unsigned char rgCertificateRequestContext[ANYSIZE_ARRAY];
307 } SEC_CERTIFICATE_REQUEST_CONTEXT,*PSEC_CERTIFICATE_REQUEST_CONTEXT;
308
309 typedef enum _SEC_TRAFFIC_SECRET_TYPE {
310 SecTrafficSecret_None,
311 SecTrafficSecret_Client,
312 SecTrafficSecret_Server
313 } SEC_TRAFFIC_SECRET_TYPE,*PSEC_TRAFFIC_SECRET_TYPE;
314
315#define SZ_ALG_MAX_SIZE 64
316
317 typedef struct _SEC_TRAFFIC_SECRETS {
318 wchar_t SymmetricAlgId[SZ_ALG_MAX_SIZE];
319 wchar_t ChainingMode[SZ_ALG_MAX_SIZE];
320 wchar_t HashAlgId[SZ_ALG_MAX_SIZE];
321 unsigned short KeySize;
322 unsigned short IvSize;
323 unsigned short MsgSequenceStart;
324 unsigned short MsgSequenceEnd;
325 SEC_TRAFFIC_SECRET_TYPE TrafficSecretType;
326 unsigned short TrafficSecretSize;
327 unsigned char TrafficSecret[ANYSIZE_ARRAY];
328} SEC_TRAFFIC_SECRETS,*PSEC_TRAFFIC_SECRETS;
329
330#define SECURITY_NATIVE_DREP 0x00000010
331#define SECURITY_NETWORK_DREP 0x00000000
332
333#define SECPKG_CRED_INBOUND 0x00000001
334#define SECPKG_CRED_OUTBOUND 0x00000002
335#define SECPKG_CRED_BOTH 0x00000003
336#define SECPKG_CRED_DEFAULT 0x00000004
337#define SECPKG_CRED_RESERVED 0xF0000000
338
339#define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010
340#define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020
341
342#define ISC_REQ_DELEGATE 0x00000001
343#define ISC_REQ_MUTUAL_AUTH 0x00000002
344#define ISC_REQ_REPLAY_DETECT 0x00000004
345#define ISC_REQ_SEQUENCE_DETECT 0x00000008
346#define ISC_REQ_CONFIDENTIALITY 0x00000010
347#define ISC_REQ_USE_SESSION_KEY 0x00000020
348#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
349#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
350#define ISC_REQ_ALLOCATE_MEMORY 0x00000100
351#define ISC_REQ_USE_DCE_STYLE 0x00000200
352#define ISC_REQ_DATAGRAM 0x00000400
353#define ISC_REQ_CONNECTION 0x00000800
354#define ISC_REQ_CALL_LEVEL 0x00001000
355#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
356#define ISC_REQ_EXTENDED_ERROR 0x00004000
357#define ISC_REQ_STREAM 0x00008000
358#define ISC_REQ_INTEGRITY 0x00010000
359#define ISC_REQ_IDENTIFY 0x00020000
360#define ISC_REQ_NULL_SESSION 0x00040000
361#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
362#define ISC_REQ_RESERVED1 0x00100000
363#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
364#define ISC_REQ_FORWARD_CREDENTIALS 0x00400000
365#define ISC_REQ_NO_INTEGRITY 0x00800000
366#define ISC_REQ_USE_HTTP_STYLE 0x01000000
367#define ISC_REQ_UNVERIFIED_TARGET_NAME 0x20000000
368#define ISC_REQ_CONFIDENTIALITY_ONLY 0x40000000
369#define ISC_REQ_MESSAGES 0x0000000100000000
370#define ISC_REQ_DEFERRED_CRED_VALIDATION 0x0000000200000000
371#define ISC_REQ_NO_POST_HANDSHAKE_AUTH 0x0000000400000000
372
373#define ISC_RET_DELEGATE 0x00000001
374#define ISC_RET_MUTUAL_AUTH 0x00000002
375#define ISC_RET_REPLAY_DETECT 0x00000004
376#define ISC_RET_SEQUENCE_DETECT 0x00000008
377#define ISC_RET_CONFIDENTIALITY 0x00000010
378#define ISC_RET_USE_SESSION_KEY 0x00000020
379#define ISC_RET_USED_COLLECTED_CREDS 0x00000040
380#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
381#define ISC_RET_ALLOCATED_MEMORY 0x00000100
382#define ISC_RET_USED_DCE_STYLE 0x00000200
383#define ISC_RET_DATAGRAM 0x00000400
384#define ISC_RET_CONNECTION 0x00000800
385#define ISC_RET_INTERMEDIATE_RETURN 0x00001000
386#define ISC_RET_CALL_LEVEL 0x00002000
387#define ISC_RET_EXTENDED_ERROR 0x00004000
388#define ISC_RET_STREAM 0x00008000
389#define ISC_RET_INTEGRITY 0x00010000
390#define ISC_RET_IDENTIFY 0x00020000
391#define ISC_RET_NULL_SESSION 0x00040000
392#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
393#define ISC_RET_RESERVED1 0x00100000
394#define ISC_RET_FRAGMENT_ONLY 0x00200000
395#define ISC_RET_FORWARD_CREDENTIALS 0x00400000
396#define ISC_RET_USED_HTTP_STYLE 0x01000000
397#define ISC_RET_NO_ADDITIONAL_TOKEN 0x02000000
398#define ISC_RET_REAUTHENTICATION 0x08000000
399#define ISC_RET_CONFIDENTIALITY_ONLY 0x40000000
400#define ISC_RET_MESSAGES 0x0000000100000000
401#define ISC_RET_DEFERRED_CRED_VALIDATION 0x0000000200000000
402#define ISC_RET_NO_POST_HANDSHAKE_AUTH 0x0000000400000000
403
404#define ASC_REQ_DELEGATE 0x00000001
405#define ASC_REQ_MUTUAL_AUTH 0x00000002
406#define ASC_REQ_REPLAY_DETECT 0x00000004
407#define ASC_REQ_SEQUENCE_DETECT 0x00000008
408#define ASC_REQ_CONFIDENTIALITY 0x00000010
409#define ASC_REQ_USE_SESSION_KEY 0x00000020
410#define ASC_REQ_SESSION_TICKET 0x00000040
411#define ASC_REQ_ALLOCATE_MEMORY 0x00000100
412#define ASC_REQ_USE_DCE_STYLE 0x00000200
413#define ASC_REQ_DATAGRAM 0x00000400
414#define ASC_REQ_CONNECTION 0x00000800
415#define ASC_REQ_CALL_LEVEL 0x00001000
416#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
417#define ASC_REQ_EXTENDED_ERROR 0x00008000
418#define ASC_REQ_STREAM 0x00010000
419#define ASC_REQ_INTEGRITY 0x00020000
420#define ASC_REQ_LICENSING 0x00040000
421#define ASC_REQ_IDENTIFY 0x00080000
422#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
423#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
424#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
425#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
426#define ASC_REQ_NO_TOKEN 0x01000000
427#define ASC_REQ_PROXY_BINDINGS 0x04000000
428#define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000
429#define ASC_REQ_MESSAGES 0x0000000100000000
430
431#define ASC_RET_DELEGATE 0x00000001
432#define ASC_RET_MUTUAL_AUTH 0x00000002
433#define ASC_RET_REPLAY_DETECT 0x00000004
434#define ASC_RET_SEQUENCE_DETECT 0x00000008
435#define ASC_RET_CONFIDENTIALITY 0x00000010
436#define ASC_RET_USE_SESSION_KEY 0x00000020
437#define ASC_RET_SESSION_TICKET 0x00000040
438#define ASC_RET_ALLOCATED_MEMORY 0x00000100
439#define ASC_RET_USED_DCE_STYLE 0x00000200
440#define ASC_RET_DATAGRAM 0x00000400
441#define ASC_RET_CONNECTION 0x00000800
442#define ASC_RET_CALL_LEVEL 0x00002000
443#define ASC_RET_THIRD_LEG_FAILED 0x00004000
444#define ASC_RET_EXTENDED_ERROR 0x00008000
445#define ASC_RET_STREAM 0x00010000
446#define ASC_RET_INTEGRITY 0x00020000
447#define ASC_RET_LICENSING 0x00040000
448#define ASC_RET_IDENTIFY 0x00080000
449#define ASC_RET_NULL_SESSION 0x00100000
450#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
451#define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
452#define ASC_RET_FRAGMENT_ONLY 0x00800000
453#define ASC_RET_NO_TOKEN 0x01000000
454#define ASC_RET_NO_ADDITIONAL_TOKEN 0x02000000
455#define ASC_RET_MESSAGES 0x0000000100000000
456
457#define SECPKG_CRED_ATTR_NAMES 1
458#define SECPKG_CRED_ATTR_SSI_PROVIDER 2
459#define SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS 3
460#define SECPKG_CRED_ATTR_CERT 4
461#define SECPKG_CRED_ATTR_PAC_BYPASS 5
462
463 typedef struct _SecPkgCredentials_NamesW
464 {
465 SEC_WCHAR *sUserName;
466 } SecPkgCredentials_NamesW,*PSecPkgCredentials_NamesW;
467
468 typedef struct _SecPkgCredentials_NamesA
469 {
470 SEC_CHAR *sUserName;
471 } SecPkgCredentials_NamesA,*PSecPkgCredentials_NamesA;
472
473#define SecPkgCredentials_Names __MINGW_NAME_AW(SecPkgCredentials_Names)
474#define PSecPkgCredentials_Names __MINGW_NAME_AW(PSecPkgCredentials_Names)
475
476 typedef struct _SecPkgCredentials_SSIProviderW {
477 SEC_WCHAR *sProviderName;
478 unsigned __LONG32 ProviderInfoLength;
479 char *ProviderInfo;
480 } SecPkgCredentials_SSIProviderW,*PSecPkgCredentials_SSIProviderW;
481
482 typedef struct _SecPkgCredentials_SSIProviderA {
483 SEC_CHAR *sProviderName;
484 unsigned __LONG32 ProviderInfoLength;
485 char *ProviderInfo;
486 } SecPkgCredentials_SSIProviderA,*PSecPkgCredentials_SSIProviderA;
487
488#define SecPkgCredentials_SSIProvider __MINGW_NAME_AW(SecPkgCredentials_SSIProvider)
489#define PSecPkgCredentials_SSIProvider __MINGW_NAME_AW(PSecPkgCredentials_SSIProvider)
490
491#define KDC_PROXY_SETTINGS_V1 1
492#define KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY 0x1
493
494 typedef struct _SecPkgCredentials_KdcProxySettingsW {
495 ULONG Version;
496 ULONG Flags;
497 USHORT ProxyServerOffset;
498 USHORT ProxyServerLength;
499 USHORT ClientTlsCredOffset;
500 USHORT ClientTlsCredLength;
501 } SecPkgCredentials_KdcProxySettingsW,*PSecPkgCredentials_KdcProxySettingsW;
502
503 typedef struct _SecPkgCredentials_Cert {
504 unsigned __LONG32 EncodedCertSize;
505 unsigned char *EncodedCert;
506 } SecPkgCredentials_Cert,*PSecPkgCredentials_Cert;
507
508#define SECPKG_ATTR_SIZES 0
509#define SECPKG_ATTR_NAMES 1
510#define SECPKG_ATTR_LIFESPAN 2
511#define SECPKG_ATTR_DCE_INFO 3
512#define SECPKG_ATTR_STREAM_SIZES 4
513#define SECPKG_ATTR_KEY_INFO 5
514#define SECPKG_ATTR_AUTHORITY 6
515#define SECPKG_ATTR_PROTO_INFO 7
516#define SECPKG_ATTR_PASSWORD_EXPIRY 8
517#define SECPKG_ATTR_SESSION_KEY 9
518#define SECPKG_ATTR_PACKAGE_INFO 10
519#define SECPKG_ATTR_USER_FLAGS 11
520#define SECPKG_ATTR_NEGOTIATION_INFO 12
521#define SECPKG_ATTR_NATIVE_NAMES 13
522#define SECPKG_ATTR_FLAGS 14
523#define SECPKG_ATTR_USE_VALIDATED 15
524#define SECPKG_ATTR_CREDENTIAL_NAME 16
525#define SECPKG_ATTR_TARGET_INFORMATION 17
526#define SECPKG_ATTR_ACCESS_TOKEN 18
527#define SECPKG_ATTR_TARGET 19
528#define SECPKG_ATTR_AUTHENTICATION_ID 20
529#define SECPKG_ATTR_LOGOFF_TIME 21
530#define SECPKG_ATTR_NEGO_KEYS 22
531#define SECPKG_ATTR_PROMPTING_NEEDED 24
532#define SECPKG_ATTR_UNIQUE_BINDINGS 25
533#define SECPKG_ATTR_ENDPOINT_BINDINGS 26
534#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
535#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
536#define SECPKG_ATTR_NEGO_PKG_INFO 31
537#define SECPKG_ATTR_NEGO_STATUS 32
538#define SECPKG_ATTR_CONTEXT_DELETED 33
539#define SECPKG_ATTR_DTLS_MTU 34
540#define SECPKG_ATTR_DATAGRAM_SIZES SECPKG_ATTR_STREAM_SIZES
541#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
542#define SECPKG_ATTR_APPLICATION_PROTOCOL 35
543#define SECPKG_ATTR_NEGOTIATED_TLS_EXTENSIONS 36
544#define SECPKG_ATTR_IS_LOOPBACK 37
545
546 typedef struct _SecPkgContext_SubjectAttributes {
547 void *AttributeInfo;
548 } SecPkgContext_SubjectAttributes,*PSecPkgContext_SubjectAttributes;
549
550#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
551#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2
552
553 typedef enum _SECPKG_CRED_CLASS {
554 SecPkgCredClass_None = 0,
555 SecPkgCredClass_Ephemeral = 10,
556 SecPkgCredClass_PersistedGeneric = 20,
557 SecPkgCredClass_PersistedSpecific = 30,
558 SecPkgCredClass_Explicit = 40
559 } SECPKG_CRED_CLASS,*PSECPKG_CRED_CLASS;
560
561 typedef struct _SecPkgContext_CredInfo {
562 SECPKG_CRED_CLASS CredClass;
563 unsigned __LONG32 IsPromptingNeeded;
564 } SecPkgContext_CredInfo,*PSecPkgContext_CredInfo;
565
566 typedef struct _SecPkgContext_NegoPackageInfo {
567 unsigned __LONG32 PackageMask;
568 } SecPkgContext_NegoPackageInfo,*PSecPkgContext_NegoPackageInfo;
569
570 typedef struct _SecPkgContext_NegoStatus {
571 unsigned __LONG32 LastStatus;
572 } SecPkgContext_NegoStatus,*PSecPkgContext_NegoStatus;
573
574 typedef struct _SecPkgContext_Sizes {
575 unsigned __LONG32 cbMaxToken;
576 unsigned __LONG32 cbMaxSignature;
577 unsigned __LONG32 cbBlockSize;
578 unsigned __LONG32 cbSecurityTrailer;
579 } SecPkgContext_Sizes,*PSecPkgContext_Sizes;
580
581 typedef struct _SecPkgContext_StreamSizes {
582 unsigned __LONG32 cbHeader;
583 unsigned __LONG32 cbTrailer;
584 unsigned __LONG32 cbMaximumMessage;
585 unsigned __LONG32 cBuffers;
586 unsigned __LONG32 cbBlockSize;
587 } SecPkgContext_StreamSizes,*PSecPkgContext_StreamSizes;
588
589typedef SecPkgContext_StreamSizes SecPkgContext_DatagramSizes;
590typedef PSecPkgContext_StreamSizes PSecPkgContext_DatagramSizes;
591
592 typedef struct _SecPkgContext_NamesW {
593 SEC_WCHAR *sUserName;
594 } SecPkgContext_NamesW,*PSecPkgContext_NamesW;
595
596 typedef enum _SECPKG_ATTR_LCT_STATUS {
597 SecPkgAttrLastClientTokenYes,
598 SecPkgAttrLastClientTokenNo,
599 SecPkgAttrLastClientTokenMaybe
600 } SECPKG_ATTR_LCT_STATUS,*PSECPKG_ATTR_LCT_STATUS;
601
602 typedef struct _SecPkgContext_LastClientTokenStatus {
603 SECPKG_ATTR_LCT_STATUS LastClientTokenStatus;
604 } SecPkgContext_LastClientTokenStatus,*PSecPkgContext_LastClientTokenStatus;
605
606 typedef struct _SecPkgContext_NamesA {
607 SEC_CHAR *sUserName;
608 } SecPkgContext_NamesA,*PSecPkgContext_NamesA;
609
610#define SecPkgContext_Names __MINGW_NAME_AW(SecPkgContext_Names)
611#define PSecPkgContext_Names __MINGW_NAME_AW(PSecPkgContext_Names)
612
613 typedef struct _SecPkgContext_Lifespan {
614 TimeStamp tsStart;
615 TimeStamp tsExpiry;
616 } SecPkgContext_Lifespan,*PSecPkgContext_Lifespan;
617
618 typedef struct _SecPkgContext_DceInfo {
619 unsigned __LONG32 AuthzSvc;
620 void *pPac;
621 } SecPkgContext_DceInfo,*PSecPkgContext_DceInfo;
622
623 typedef struct _SecPkgContext_KeyInfoA {
624 SEC_CHAR *sSignatureAlgorithmName;
625 SEC_CHAR *sEncryptAlgorithmName;
626 unsigned __LONG32 KeySize;
627 unsigned __LONG32 SignatureAlgorithm;
628 unsigned __LONG32 EncryptAlgorithm;
629 } SecPkgContext_KeyInfoA,*PSecPkgContext_KeyInfoA;
630
631 typedef struct _SecPkgContext_KeyInfoW {
632 SEC_WCHAR *sSignatureAlgorithmName;
633 SEC_WCHAR *sEncryptAlgorithmName;
634 unsigned __LONG32 KeySize;
635 unsigned __LONG32 SignatureAlgorithm;
636 unsigned __LONG32 EncryptAlgorithm;
637 } SecPkgContext_KeyInfoW,*PSecPkgContext_KeyInfoW;
638
639#define SecPkgContext_KeyInfo __MINGW_NAME_AW(SecPkgContext_KeyInfo)
640#define PSecPkgContext_KeyInfo __MINGW_NAME_AW(PSecPkgContext_KeyInfo)
641
642 typedef struct _SecPkgContext_AuthorityA {
643 SEC_CHAR *sAuthorityName;
644 } SecPkgContext_AuthorityA,*PSecPkgContext_AuthorityA;
645
646 typedef struct _SecPkgContext_AuthorityW {
647 SEC_WCHAR *sAuthorityName;
648 } SecPkgContext_AuthorityW,*PSecPkgContext_AuthorityW;
649
650#define SecPkgContext_Authority __MINGW_NAME_AW(SecPkgContext_Authority)
651#define PSecPkgContext_Authority __MINGW_NAME_AW(PSecPkgContext_Authority)
652
653 typedef struct _SecPkgContext_ProtoInfoA {
654 SEC_CHAR *sProtocolName;
655 unsigned __LONG32 majorVersion;
656 unsigned __LONG32 minorVersion;
657 } SecPkgContext_ProtoInfoA,*PSecPkgContext_ProtoInfoA;
658
659 typedef struct _SecPkgContext_ProtoInfoW {
660 SEC_WCHAR *sProtocolName;
661 unsigned __LONG32 majorVersion;
662 unsigned __LONG32 minorVersion;
663 } SecPkgContext_ProtoInfoW,*PSecPkgContext_ProtoInfoW;
664
665#define SecPkgContext_ProtoInfo __MINGW_NAME_AW(SecPkgContext_ProtoInfo)
666#define PSecPkgContext_ProtoInfo __MINGW_NAME_AW(PSecPkgContext_ProtoInfo)
667
668 typedef struct _SecPkgContext_PasswordExpiry {
669 TimeStamp tsPasswordExpires;
670 } SecPkgContext_PasswordExpiry,*PSecPkgContext_PasswordExpiry;
671
672 typedef struct _SecPkgContext_LogoffTime {
673 TimeStamp tsLogoffTime;
674 } SecPkgContext_LogoffTime,*PSecPkgContext_LogoffTime;
675
676 typedef struct _SecPkgContext_SessionKey {
677 unsigned __LONG32 SessionKeyLength;
678 unsigned char *SessionKey;
679 } SecPkgContext_SessionKey,*PSecPkgContext_SessionKey;
680
681 typedef struct _SecPkgContext_NegoKeys {
682 unsigned __LONG32 KeyType;
683 unsigned short KeyLength;
684 unsigned char *KeyValue;
685 unsigned __LONG32 VerifyKeyType;
686 unsigned short VerifyKeyLength;
687 unsigned char *VerifyKeyValue;
688 } SecPkgContext_NegoKeys,*PSecPkgContext_NegoKeys;
689
690 typedef struct _SecPkgContext_PackageInfoW {
691 PSecPkgInfoW PackageInfo;
692 } SecPkgContext_PackageInfoW,*PSecPkgContext_PackageInfoW;
693
694 typedef struct _SecPkgContext_PackageInfoA {
695 PSecPkgInfoA PackageInfo;
696 } SecPkgContext_PackageInfoA,*PSecPkgContext_PackageInfoA;
697
698 typedef struct _SecPkgContext_UserFlags {
699 unsigned __LONG32 UserFlags;
700 } SecPkgContext_UserFlags,*PSecPkgContext_UserFlags;
701
702 typedef struct _SecPkgContext_Flags {
703 unsigned __LONG32 Flags;
704 } SecPkgContext_Flags,*PSecPkgContext_Flags;
705
706#define SecPkgContext_PackageInfo __MINGW_NAME_AW(SecPkgContext_PackageInfo)
707#define PSecPkgContext_PackageInfo __MINGW_NAME_AW(PSecPkgContext_PackageInfo)
708
709 typedef struct _SecPkgContext_NegotiationInfoA {
710 PSecPkgInfoA PackageInfo;
711 unsigned __LONG32 NegotiationState;
712 } SecPkgContext_NegotiationInfoA,*PSecPkgContext_NegotiationInfoA;
713
714 typedef struct _SecPkgContext_NegotiationInfoW {
715 PSecPkgInfoW PackageInfo;
716 unsigned __LONG32 NegotiationState;
717 } SecPkgContext_NegotiationInfoW,*PSecPkgContext_NegotiationInfoW;
718
719#define SecPkgContext_NegotiationInfo __MINGW_NAME_AW(SecPkgContext_NegotiationInfo)
720#define PSecPkgContext_NegotiationInfo __MINGW_NAME_AW(PSecPkgContext_NegotiationInfo)
721
722#define SECPKG_NEGOTIATION_COMPLETE 0
723#define SECPKG_NEGOTIATION_OPTIMISTIC 1
724#define SECPKG_NEGOTIATION_IN_PROGRESS 2
725#define SECPKG_NEGOTIATION_DIRECT 3
726#define SECPKG_NEGOTIATION_TRY_MULTICRED 4
727
728 typedef struct _SecPkgContext_NativeNamesW {
729 SEC_WCHAR *sClientName;
730 SEC_WCHAR *sServerName;
731 } SecPkgContext_NativeNamesW,*PSecPkgContext_NativeNamesW;
732
733 typedef struct _SecPkgContext_NativeNamesA {
734 SEC_CHAR *sClientName;
735 SEC_CHAR *sServerName;
736 } SecPkgContext_NativeNamesA,*PSecPkgContext_NativeNamesA;
737
738#define SecPkgContext_NativeNames __MINGW_NAME_AW(SecPkgContext_NativeNames)
739#define PSecPkgContext_NativeNames __MINGW_NAME_AW(PSecPkgContext_NativeNames)
740
741 typedef struct _SecPkgContext_CredentialNameW {
742 unsigned __LONG32 CredentialType;
743 SEC_WCHAR *sCredentialName;
744 } SecPkgContext_CredentialNameW,*PSecPkgContext_CredentialNameW;
745
746 typedef struct _SecPkgContext_CredentialNameA {
747 unsigned __LONG32 CredentialType;
748 SEC_CHAR *sCredentialName;
749 } SecPkgContext_CredentialNameA,*PSecPkgContext_CredentialNameA;
750
751#define SecPkgContext_CredentialName __MINGW_NAME_AW(SecPkgContext_CredentialName)
752#define PSecPkgContext_CredentialName __MINGW_NAME_AW(PSecPkgContext_CredentialName)
753
754 typedef struct _SecPkgContext_AccessToken {
755 void *AccessToken;
756 } SecPkgContext_AccessToken,*PSecPkgContext_AccessToken;
757
758 typedef struct _SecPkgContext_TargetInformation {
759 unsigned __LONG32 MarshalledTargetInfoLength;
760 unsigned char *MarshalledTargetInfo;
761 } SecPkgContext_TargetInformation,*PSecPkgContext_TargetInformation;
762
763 typedef struct _SecPkgContext_AuthzID {
764 unsigned __LONG32 AuthzIDLength;
765 char *AuthzID;
766 } SecPkgContext_AuthzID,*PSecPkgContext_AuthzID;
767
768 typedef struct _SecPkgContext_Target {
769 unsigned __LONG32 TargetLength;
770 char *Target;
771 } SecPkgContext_Target,*PSecPkgContext_Target;
772
773 typedef struct _SecPkgContext_ClientSpecifiedTarget {
774 SEC_WCHAR *sTargetName;
775 } SecPkgContext_ClientSpecifiedTarget,*PSecPkgContext_ClientSpecifiedTarget;
776
777 typedef struct _SecPkgContext_Bindings {
778 unsigned __LONG32 BindingsLength;
779 SEC_CHANNEL_BINDINGS *Bindings;
780 } SecPkgContext_Bindings,*PSecPkgContext_Bindings;
781
782 typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS {
783 SecApplicationProtocolNegotiationStatus_None,
784 SecApplicationProtocolNegotiationStatus_Success,
785 SecApplicationProtocolNegotiationStatus_SelectedClientOnly
786 } SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS,*PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS;
787
788#define MAX_PROTOCOL_ID_SIZE 0xff
789
790 typedef struct _SecPkgContext_ApplicationProtocol {
791 SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS ProtoNegoStatus;
792 SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT ProtoNegoExt;
793 unsigned char ProtocolIdSize;
794 unsigned char ProtocolId[MAX_PROTOCOL_ID_SIZE];
795 } SecPkgContext_ApplicationProtocol,*PSecPkgContext_ApplicationProtocol;
796
797 typedef struct _SecPkgContext_NegotiatedTlsExtensions {
798 unsigned __LONG32 ExtensionsCount;
799 unsigned short *Extensions;
800 } SecPkgContext_NegotiatedTlsExtensions,*PSecPkgContext_NegotiatedTlsExtensions;
801
802 typedef struct _SECPKG_APP_MODE_INFO {
803 ULONG UserFunction;
804 ULONG_PTR Argument1;
805 ULONG_PTR Argument2;
806 SecBuffer UserData;
807 BOOLEAN ReturnToLsa;
808 } SECPKG_APP_MODE_INFO,*PSECPKG_APP_MODE_INFO;
809
810 typedef void (WINAPI *SEC_GET_KEY_FN) (void *Arg,void *Principal,unsigned __LONG32 KeyVer,void **Key,SECURITY_STATUS *Status);
811
812#define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
813#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
814#define SECPKG_CONTEXT_EXPORT_TO_KERNEL 0x00000004
815
816 KSECDDDECLSPEC SECURITY_STATUS WINAPI AcquireCredentialsHandleW(
817#if ISSP_MODE==0
818 PSECURITY_STRING pPrincipal,PSECURITY_STRING pPackage,
819#else
820 SEC_WCHAR *pszPrincipal,SEC_WCHAR *pszPackage,
821#endif
822 unsigned __LONG32 fCredentialUse,void *pvLogonId,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PCredHandle phCredential,PTimeStamp ptsExpiry);
823
824 typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
825#if ISSP_MODE==0
826 PSECURITY_STRING,PSECURITY_STRING,
827#else
828 SEC_WCHAR *,SEC_WCHAR *,
829#endif
830 unsigned __LONG32,void *,void *,SEC_GET_KEY_FN,void *,PCredHandle,PTimeStamp);
831
832 SECURITY_STATUS WINAPI AcquireCredentialsHandleA(SEC_CHAR *pszPrincipal,SEC_CHAR *pszPackage,unsigned __LONG32 fCredentialUse,void *pvLogonId,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PCredHandle phCredential,PTimeStamp ptsExpiry);
833
834 typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(SEC_CHAR *,SEC_CHAR *,unsigned __LONG32,void *,void *,SEC_GET_KEY_FN,void *,PCredHandle,PTimeStamp);
835
836#define AcquireCredentialsHandle __MINGW_NAME_AW(AcquireCredentialsHandle)
837#define ACQUIRE_CREDENTIALS_HANDLE_FN __MINGW_NAME_UAW(ACQUIRE_CREDENTIALS_HANDLE_FN)
838
839 KSECDDDECLSPEC SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle phCredential);
840
841 typedef SECURITY_STATUS (WINAPI *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
842
843 KSECDDDECLSPEC SECURITY_STATUS WINAPI AddCredentialsW(PCredHandle hCredentials,
844#if ISSP_MODE==0
845 PSECURITY_STRING pPrincipal,PSECURITY_STRING pPackage,
846#else
847 SEC_WCHAR *pszPrincipal,SEC_WCHAR *pszPackage,
848#endif
849 unsigned __LONG32 fCredentialUse,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PTimeStamp ptsExpiry);
850
851 typedef SECURITY_STATUS (WINAPI *ADD_CREDENTIALS_FN_W)(PCredHandle,
852#if ISSP_MODE==0
853 PSECURITY_STRING,PSECURITY_STRING,
854#else
855 SEC_WCHAR *,SEC_WCHAR *,
856#endif
857 unsigned __LONG32,void *,SEC_GET_KEY_FN,void *,PTimeStamp);
858
859 SECURITY_STATUS WINAPI AddCredentialsA(PCredHandle hCredentials,SEC_CHAR *pszPrincipal,SEC_CHAR *pszPackage,unsigned __LONG32 fCredentialUse,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PTimeStamp ptsExpiry);
860
861 typedef SECURITY_STATUS (WINAPI *ADD_CREDENTIALS_FN_A)(PCredHandle,SEC_CHAR *,SEC_CHAR *,unsigned __LONG32,void *,SEC_GET_KEY_FN,void *,PTimeStamp);
862
863#define AddCredentials __MINGW_NAME_AW(AddCredentials)
864#define ADD_CREDENTIALS_FN __MINGW_NAME_UAW(ADD_CREDENTIALS_FN)
865
866 KSECDDDECLSPEC SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle phCredential,PCtxtHandle phContext,
867#if ISSP_MODE==0
868 PSECURITY_STRING pTargetName,
869#else
870 SEC_WCHAR *pszTargetName,
871#endif
872 unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
873
874 typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_W)(PCredHandle,PCtxtHandle,
875#if ISSP_MODE==0
876 PSECURITY_STRING,
877#else
878 SEC_WCHAR *,
879#endif
880 unsigned __LONG32,unsigned __LONG32,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
881
882 SECURITY_STATUS WINAPI InitializeSecurityContextA(PCredHandle phCredential,PCtxtHandle phContext,SEC_CHAR *pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
883
884 typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_A)(PCredHandle,PCtxtHandle,SEC_CHAR *,unsigned __LONG32,unsigned __LONG32,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
885
886#define InitializeSecurityContext __MINGW_NAME_AW(InitializeSecurityContext)
887#define INITIALIZE_SECURITY_CONTEXT_FN __MINGW_NAME_UAW(INITIALIZE_SECURITY_CONTEXT_FN)
888
889 KSECDDDECLSPEC SECURITY_STATUS WINAPI AcceptSecurityContext(PCredHandle phCredential,PCtxtHandle phContext,PSecBufferDesc pInput,unsigned __LONG32 fContextReq,unsigned __LONG32 TargetDataRep,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
890
891 typedef SECURITY_STATUS (WINAPI *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
892
893 SECURITY_STATUS WINAPI CompleteAuthToken(PCtxtHandle phContext,PSecBufferDesc pToken);
894
895 typedef SECURITY_STATUS (WINAPI *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,PSecBufferDesc);
896
897 KSECDDDECLSPEC SECURITY_STATUS WINAPI ImpersonateSecurityContext(PCtxtHandle phContext);
898
899 typedef SECURITY_STATUS (WINAPI *IMPERSONATE_SECURITY_CONTEXT_FN)(PCtxtHandle);
900
901 KSECDDDECLSPEC SECURITY_STATUS WINAPI RevertSecurityContext(PCtxtHandle phContext);
902
903 typedef SECURITY_STATUS (WINAPI *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
904
905 KSECDDDECLSPEC SECURITY_STATUS WINAPI QuerySecurityContextToken(PCtxtHandle phContext,HANDLE *Token);
906
907 typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_CONTEXT_TOKEN_FN)(PCtxtHandle,HANDLE *);
908
909 KSECDDDECLSPEC SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext);
910
911 typedef SECURITY_STATUS (WINAPI *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
912
913 KSECDDDECLSPEC SECURITY_STATUS WINAPI ApplyControlToken(PCtxtHandle phContext,PSecBufferDesc pInput);
914
915 typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,PSecBufferDesc);
916
917 KSECDDDECLSPEC SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer);
918
919 typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,unsigned __LONG32,void *);
920
921 SECURITY_STATUS WINAPI QueryContextAttributesA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer);
922
923 typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,unsigned __LONG32,void *);
924
925#define QueryContextAttributes __MINGW_NAME_AW(QueryContextAttributes)
926#define QUERY_CONTEXT_ATTRIBUTES_FN __MINGW_NAME_UAW(QUERY_CONTEXT_ATTRIBUTES_FN)
927
928 SECURITY_STATUS WINAPI QueryContextAttributesExW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
929
930 typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_EX_FN_W)(PCtxtHandle,unsigned __LONG32,void*,unsigned __LONG32);
931
932 SECURITY_STATUS WINAPI QueryContextAttributesExA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
933
934 typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_EX_FN_A)(PCtxtHandle,unsigned __LONG32,void*,unsigned __LONG32);
935
936#define QueryContextAttributesEx __MINGW_NAME_AW(QueryContextAttributesEx)
937#define QUERY_CONTEXT_ATTRIBUTES_EX_FN __MINGW_NAME_UAW(QUERY_CONTEXT_ATTRIBUTES_EX_FN)
938
939 SECURITY_STATUS WINAPI SetContextAttributesW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
940
941 typedef SECURITY_STATUS (WINAPI *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,unsigned __LONG32,void *,unsigned __LONG32);
942
943 SECURITY_STATUS WINAPI SetContextAttributesA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
944
945 typedef SECURITY_STATUS (WINAPI *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,unsigned __LONG32,void *,unsigned __LONG32);
946
947#define SetContextAttributes __MINGW_NAME_AW(SetContextAttributes)
948#define SET_CONTEXT_ATTRIBUTES_FN __MINGW_NAME_UAW(SET_CONTEXT_ATTRIBUTES_FN)
949
950 KSECDDDECLSPEC SECURITY_STATUS WINAPI QueryCredentialsAttributesW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer);
951
952 typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,unsigned __LONG32,void *);
953
954 SECURITY_STATUS WINAPI QueryCredentialsAttributesA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer);
955
956 typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,unsigned __LONG32,void *);
957
958#define QueryCredentialsAttributes __MINGW_NAME_AW(QueryCredentialsAttributes)
959#define QUERY_CREDENTIALS_ATTRIBUTES_FN __MINGW_NAME_UAW(QUERY_CREDENTIALS_ATTRIBUTES_FN)
960
961 SECURITY_STATUS WINAPI QueryCredentialsAttributesExW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
962
963 typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_W)(PCredHandle,unsigned __LONG32,void*,unsigned __LONG32);
964
965 SECURITY_STATUS WINAPI QueryCredentialsAttributesExA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
966
967 typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_A)(PCredHandle,unsigned __LONG32,void*,unsigned __LONG32);
968
969#define QueryCredentialsAttributesEx __MINGW_NAME_AW(QueryCredentialsAttributesEx)
970#define QUERY_CREDENTIALS_ATTRIBUTES_EX_FN __MINGW_NAME_UAW(QUERY_CREDENTIALS_ATTRIBUTES_EX_FN)
971
972 KSECDDDECLSPEC SECURITY_STATUS WINAPI SetCredentialsAttributesW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
973
974 typedef SECURITY_STATUS (WINAPI *SET_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,unsigned __LONG32,void *,unsigned __LONG32);
975
976 SECURITY_STATUS WINAPI SetCredentialsAttributesA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
977
978 typedef SECURITY_STATUS (WINAPI *SET_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,unsigned __LONG32,void *,unsigned __LONG32);
979
980#define SetCredentialsAttributes __MINGW_NAME_AW(SetCredentialsAttributes)
981#define SET_CREDENTIALS_ATTRIBUTES_FN __MINGW_NAME_UAW(SET_CREDENTIALS_ATTRIBUTES_FN)
982
983 SECURITY_STATUS WINAPI FreeContextBuffer(void *pvContextBuffer);
984
985 typedef SECURITY_STATUS (WINAPI *FREE_CONTEXT_BUFFER_FN)(void *);
986
987 KSECDDDECLSPEC SECURITY_STATUS WINAPI MakeSignature(PCtxtHandle phContext,unsigned __LONG32 fQOP,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo);
988
989 typedef SECURITY_STATUS (WINAPI *MAKE_SIGNATURE_FN)(PCtxtHandle,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32);
990
991 KSECDDDECLSPEC SECURITY_STATUS WINAPI VerifySignature(PCtxtHandle phContext,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo,unsigned __LONG32 *pfQOP);
992
993 typedef SECURITY_STATUS (WINAPI *VERIFY_SIGNATURE_FN)(PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32 *);
994
995#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
996#define SECQOP_WRAP_OOB_DATA 0x40000000
997
998 SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle phContext,unsigned __LONG32 fQOP,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo);
999
1000 typedef SECURITY_STATUS (WINAPI *ENCRYPT_MESSAGE_FN)(PCtxtHandle,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32);
1001
1002 SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle phContext,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo,unsigned __LONG32 *pfQOP);
1003
1004 typedef SECURITY_STATUS (WINAPI *DECRYPT_MESSAGE_FN)(PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32 *);
1005
1006 KSECDDDECLSPEC SECURITY_STATUS WINAPI EnumerateSecurityPackagesW(unsigned __LONG32 *pcPackages,PSecPkgInfoW *ppPackageInfo);
1007
1008 typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_W)(unsigned __LONG32 *,PSecPkgInfoW *);
1009
1010 SECURITY_STATUS WINAPI EnumerateSecurityPackagesA(unsigned __LONG32 *pcPackages,PSecPkgInfoA *ppPackageInfo);
1011
1012 typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_A)(unsigned __LONG32 *,PSecPkgInfoA *);
1013
1014#define EnumerateSecurityPackages __MINGW_NAME_AW(EnumerateSecurityPackages)
1015#define ENUMERATE_SECURITY_PACKAGES_FN __MINGW_NAME_UAW(ENUMERATE_SECURITY_PACKAGES_FN)
1016
1017 KSECDDDECLSPEC SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(
1018#if ISSP_MODE==0
1019 PSECURITY_STRING pPackageName,
1020#else
1021 SEC_WCHAR *pszPackageName,
1022#endif
1023 PSecPkgInfoW *ppPackageInfo);
1024
1025 typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_W)(
1026#if ISSP_MODE==0
1027 PSECURITY_STRING,
1028#else
1029 SEC_WCHAR *,
1030#endif
1031 PSecPkgInfoW *);
1032
1033 SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR *pszPackageName,PSecPkgInfoA *ppPackageInfo);
1034
1035 typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR *,PSecPkgInfoA *);
1036
1037#define QuerySecurityPackageInfo __MINGW_NAME_AW(QuerySecurityPackageInfo)
1038#define QUERY_SECURITY_PACKAGE_INFO_FN __MINGW_NAME_UAW(QUERY_SECURITY_PACKAGE_INFO_FN)
1039
1040 typedef enum _SecDelegationType {
1041 SecFull,SecService,SecTree,SecDirectory,SecObject
1042 } SecDelegationType,*PSecDelegationType;
1043
1044 SECURITY_STATUS WINAPI DelegateSecurityContext(PCtxtHandle phContext,
1045#if ISSP_MODE==0
1046 PSECURITY_STRING pTarget,
1047#else
1048 SEC_CHAR *pszTarget,
1049#endif
1050 SecDelegationType DelegationType,PTimeStamp pExpiry,PSecBuffer pPackageParameters,PSecBufferDesc pOutput);
1051
1052 KSECDDDECLSPEC SECURITY_STATUS WINAPI ExportSecurityContext(PCtxtHandle phContext,ULONG fFlags,PSecBuffer pPackedContext,void **pToken);
1053
1054 typedef SECURITY_STATUS (WINAPI *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,ULONG,PSecBuffer,void **);
1055
1056 KSECDDDECLSPEC SECURITY_STATUS WINAPI ImportSecurityContextW(
1057#if ISSP_MODE==0
1058 PSECURITY_STRING pszPackage,
1059#else
1060 SEC_WCHAR *pszPackage,
1061#endif
1062 PSecBuffer pPackedContext,void *Token,PCtxtHandle phContext);
1063
1064 typedef SECURITY_STATUS (WINAPI *IMPORT_SECURITY_CONTEXT_FN_W)(
1065#if ISSP_MODE==0
1066 PSECURITY_STRING,
1067#else
1068 SEC_WCHAR *,
1069#endif
1070 PSecBuffer,VOID *,PCtxtHandle);
1071
1072 SECURITY_STATUS WINAPI ImportSecurityContextA(SEC_CHAR *pszPackage,PSecBuffer pPackedContext,VOID *Token,PCtxtHandle phContext);
1073
1074 typedef SECURITY_STATUS (WINAPI *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,PSecBuffer,void *,PCtxtHandle);
1075
1076#define ImportSecurityContext __MINGW_NAME_AW(ImportSecurityContext)
1077#define IMPORT_SECURITY_CONTEXT_FN __MINGW_NAME_UAW(IMPORT_SECURITY_CONTEXT_FN)
1078
1079#if ISSP_MODE==0
1080 KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPN(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING Spn,PULONG Length,BOOLEAN Allocate);
1081 KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPNEx(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING TargetInfo,PUNICODE_STRING Spn,PULONG Length,BOOLEAN Allocate);
1082 KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPNEx2(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING InTargetInfo,PUNICODE_STRING Spn,PULONG TotalSize,BOOLEAN Allocate,BOOLEAN IsTargetInfoMarshaled);
1083 KSECDDDECLSPEC NTSTATUS WINAPI SecLookupAccountSid(PSID Sid,PULONG NameSize,PUNICODE_STRING NameBuffer,PULONG DomainSize,PUNICODE_STRING DomainBuffer,PSID_NAME_USE NameUse);
1084 KSECDDDECLSPEC NTSTATUS WINAPI SecLookupAccountName(PUNICODE_STRING Name,PULONG SidSize,PSID Sid,PSID_NAME_USE NameUse,PULONG DomainSize,PUNICODE_STRING ReferencedDomain);
1085 KSECDDDECLSPEC NTSTATUS WINAPI SecLookupWellKnownSid(WELL_KNOWN_SID_TYPE SidType,PSID Sid,ULONG SidBufferSize,PULONG SidSize);
1086#endif
1087
1088#define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
1089#define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
1090#define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
1091#define SECURITY_ENTRYPOINTA SEC_TEXT("InitSecurityInterfaceA")
1092#define SECURITY_ENTRYPOINT16 "INITSECURITYINTERFACEA"
1093
1094#ifdef SECURITY_WIN32
1095#define SECURITY_ENTRYPOINT __MINGW_NAME_AW(SECURITY_ENTRYPOINT)
1096#define SECURITY_ENTRYPOINT_ANSI __MINGW_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
1097#else
1098#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINT16
1099#define SECURITY_ENTRYPOINT_ANSI SECURITY_ENTRYPOINT16
1100#endif
1101
1102#define FreeCredentialHandle FreeCredentialsHandle
1103
1104#if ISSP_MODE != 0
1105
1106SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordW(SEC_WCHAR* pszPackageName,
1107 SEC_WCHAR* pszDomainName,
1108 SEC_WCHAR* pszAccountName,
1109 SEC_WCHAR* pszOldPassword,
1110 SEC_WCHAR* pszNewPassword,
1111 BOOLEAN bImpersonating,
1112 unsigned __LONG32 dwReserved,
1113 PSecBufferDesc pOutput);
1114
1115typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_W)(SEC_WCHAR*,
1116 SEC_WCHAR*,
1117 SEC_WCHAR*,
1118 SEC_WCHAR*,
1119 SEC_WCHAR*,
1120 BOOLEAN,
1121 unsigned __LONG32,
1122 PSecBufferDesc);
1123
1124SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordA(SEC_CHAR* pszPackageName,
1125 SEC_CHAR* pszDomainName,
1126 SEC_CHAR* pszAccountName,
1127 SEC_CHAR* pszOldPassword,
1128 SEC_CHAR* pszNewPassword,
1129 BOOLEAN bImpersonating,
1130 unsigned __LONG32 dwReserved,
1131 PSecBufferDesc pOutput);
1132
1133typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_A)(SEC_CHAR*,
1134 SEC_CHAR*,
1135 SEC_CHAR*,
1136 SEC_CHAR*,
1137 SEC_CHAR*,
1138 BOOLEAN,
1139 unsigned __LONG32,
1140 PSecBufferDesc);
1141
1142#define ChangeAccountPassword __MINGW_NAME_AW(ChangeAccountPassword)
1143#define CHANGE_PASSWORD_FN __MINGW_NAME_UAW(CHANGE_PASSWORD_FN)
1144
1145#endif
1146
1147 typedef struct _SECURITY_FUNCTION_TABLE_W {
1148 unsigned __LONG32 dwVersion;
1149 ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
1150 QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
1151 ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
1152 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
1153 void *Reserved2;
1154 INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
1155 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1156 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1157 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1158 APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1159 QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
1160 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1161 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1162 MAKE_SIGNATURE_FN MakeSignature;
1163 VERIFY_SIGNATURE_FN VerifySignature;
1164 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1165 QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
1166 void *Reserved3;
1167 void *Reserved4;
1168 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1169 IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
1170 ADD_CREDENTIALS_FN_W AddCredentialsW;
1171 void *Reserved8;
1172 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1173 ENCRYPT_MESSAGE_FN EncryptMessage;
1174 DECRYPT_MESSAGE_FN DecryptMessage;
1175 SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
1176 SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
1177#if ISSP_MODE != 0
1178 CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
1179#else
1180 void* Reserved9;
1181#endif
1182#if NTDDI_VERSION > NTDDI_WINBLUE
1183 QUERY_CONTEXT_ATTRIBUTES_EX_FN_W QueryContextAttributesExW;
1184 QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_W QueryCredentialsAttributesExW;
1185#endif
1186 } SecurityFunctionTableW,*PSecurityFunctionTableW;
1187
1188 typedef struct _SECURITY_FUNCTION_TABLE_A {
1189 unsigned __LONG32 dwVersion;
1190 ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
1191 QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
1192 ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
1193 FREE_CREDENTIALS_HANDLE_FN FreeCredentialHandle;
1194 void *Reserved2;
1195 INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
1196 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1197 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1198 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1199 APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1200 QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
1201 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1202 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1203 MAKE_SIGNATURE_FN MakeSignature;
1204 VERIFY_SIGNATURE_FN VerifySignature;
1205 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1206 QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
1207 void *Reserved3;
1208 void *Reserved4;
1209 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1210 IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
1211 ADD_CREDENTIALS_FN_A AddCredentialsA;
1212 void *Reserved8;
1213 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1214 ENCRYPT_MESSAGE_FN EncryptMessage;
1215 DECRYPT_MESSAGE_FN DecryptMessage;
1216 SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
1217 SET_CREDENTIALS_ATTRIBUTES_FN_A SetCredentialsAttributesA;
1218#if ISSP_MODE != 0
1219 CHANGE_PASSWORD_FN_A ChangeAccountPasswordA;
1220#else
1221 void* Reserved9;
1222#endif
1223#if NTDDI_VERSION > NTDDI_WINBLUE
1224 QUERY_CONTEXT_ATTRIBUTES_EX_FN_A QueryContextAttributesExA;
1225 QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_A QueryCredentialsAttributesExA;
1226#endif
1227 } SecurityFunctionTableA,*PSecurityFunctionTableA;
1228
1229#define SecurityFunctionTable __MINGW_NAME_AW(SecurityFunctionTable)
1230#define PSecurityFunctionTable __MINGW_NAME_AW(PSecurityFunctionTable)
1231
1232#define SECURITY_
1233
1234#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
1235#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
1236#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
1237#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
1238#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_5 5
1239
1240 PSecurityFunctionTableA WINAPI InitSecurityInterfaceA(void);
1241
1242 typedef PSecurityFunctionTableA (WINAPI *INIT_SECURITY_INTERFACE_A)(void);
1243
1244 KSECDDDECLSPEC PSecurityFunctionTableW WINAPI InitSecurityInterfaceW(void);
1245
1246 typedef PSecurityFunctionTableW (WINAPI *INIT_SECURITY_INTERFACE_W)(void);
1247
1248#define InitSecurityInterface __MINGW_NAME_AW(InitSecurityInterface)
1249#define INIT_SECURITY_INTERFACE __MINGW_NAME_UAW(INIT_SECURITY_INTERFACE)
1250
1251#ifdef SECURITY_WIN32
1252
1253 SECURITY_STATUS WINAPI SaslEnumerateProfilesA(LPSTR *ProfileList,ULONG *ProfileCount);
1254 SECURITY_STATUS WINAPI SaslEnumerateProfilesW(LPWSTR *ProfileList,ULONG *ProfileCount);
1255
1256#define SaslEnumerateProfiles __MINGW_NAME_AW(SaslEnumerateProfiles)
1257
1258 SECURITY_STATUS WINAPI SaslGetProfilePackageA(LPSTR ProfileName,PSecPkgInfoA *PackageInfo);
1259 SECURITY_STATUS WINAPI SaslGetProfilePackageW(LPWSTR ProfileName,PSecPkgInfoW *PackageInfo);
1260
1261#define SaslGetProfilePackage __MINGW_NAME_AW(SaslGetProfilePackage)
1262
1263 SECURITY_STATUS WINAPI SaslIdentifyPackageA(PSecBufferDesc pInput,PSecPkgInfoA *PackageInfo);
1264 SECURITY_STATUS WINAPI SaslIdentifyPackageW(PSecBufferDesc pInput,PSecPkgInfoW *PackageInfo);
1265
1266#define SaslIdentifyPackage __MINGW_NAME_AW(SaslIdentifyPackage)
1267
1268 SECURITY_STATUS WINAPI SaslInitializeSecurityContextW(PCredHandle phCredential,PCtxtHandle phContext,LPWSTR pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1269 SECURITY_STATUS WINAPI SaslInitializeSecurityContextA(PCredHandle phCredential,PCtxtHandle phContext,LPSTR pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1270
1271#define SaslInitializeSecurityContext __MINGW_NAME_AW(SaslInitializeSecurityContext)
1272
1273 SECURITY_STATUS WINAPI SaslAcceptSecurityContext(PCredHandle phCredential,PCtxtHandle phContext,PSecBufferDesc pInput,unsigned __LONG32 fContextReq,unsigned __LONG32 TargetDataRep,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1274
1275#define SASL_OPTION_SEND_SIZE 1
1276#define SASL_OPTION_RECV_SIZE 2
1277#define SASL_OPTION_AUTHZ_STRING 3
1278#define SASL_OPTION_AUTHZ_PROCESSING 4
1279
1280 typedef enum _SASL_AUTHZID_STATE {
1281 Sasl_AuthZIDForbidden,Sasl_AuthZIDProcessed
1282 } SASL_AUTHZID_STATE;
1283
1284 SECURITY_STATUS WINAPI SaslSetContextOption(PCtxtHandle ContextHandle,ULONG Option,PVOID Value,ULONG Size);
1285 SECURITY_STATUS WINAPI SaslGetContextOption(PCtxtHandle ContextHandle,ULONG Option,PVOID Value,ULONG Size,PULONG Needed);
1286#endif
1287
1288#ifndef _AUTH_IDENTITY_EX2_DEFINED
1289#define _AUTH_IDENTITY_EX2_DEFINED
1290
1291#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
1292
1293 typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
1294 unsigned __LONG32 Version;
1295 unsigned short cbHeaderLength;
1296 unsigned __LONG32 cbStructureLength;
1297 unsigned __LONG32 UserOffset;
1298 unsigned short UserLength;
1299 unsigned __LONG32 DomainOffset;
1300 unsigned short DomainLength;
1301 unsigned __LONG32 PackedCredentialsOffset;
1302 unsigned short PackedCredentialsLength;
1303 unsigned __LONG32 Flags;
1304 unsigned __LONG32 PackageListOffset;
1305 unsigned short PackageListLength;
1306 } SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
1307
1308#endif
1309
1310#ifndef _AUTH_IDENTITY_DEFINED
1311#define _AUTH_IDENTITY_DEFINED
1312
1313#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
1314#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
1315
1316 typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
1317 unsigned short *User;
1318 unsigned __LONG32 UserLength;
1319 unsigned short *Domain;
1320 unsigned __LONG32 DomainLength;
1321 unsigned short *Password;
1322 unsigned __LONG32 PasswordLength;
1323 unsigned __LONG32 Flags;
1324 } SEC_WINNT_AUTH_IDENTITY_W,*PSEC_WINNT_AUTH_IDENTITY_W;
1325
1326 typedef struct _SEC_WINNT_AUTH_IDENTITY_A {
1327 unsigned char *User;
1328 unsigned __LONG32 UserLength;
1329 unsigned char *Domain;
1330 unsigned __LONG32 DomainLength;
1331 unsigned char *Password;
1332 unsigned __LONG32 PasswordLength;
1333 unsigned __LONG32 Flags;
1334 } SEC_WINNT_AUTH_IDENTITY_A,*PSEC_WINNT_AUTH_IDENTITY_A;
1335
1336#define SEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(SEC_WINNT_AUTH_IDENTITY)
1337#define PSEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(PSEC_WINNT_AUTH_IDENTITY)
1338#define _SEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(_SEC_WINNT_AUTH_IDENTITY)
1339#endif
1340
1341#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
1342#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
1343
1344 typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW {
1345 unsigned __LONG32 Version;
1346 unsigned __LONG32 Length;
1347 unsigned short *User;
1348 unsigned __LONG32 UserLength;
1349 unsigned short *Domain;
1350 unsigned __LONG32 DomainLength;
1351 unsigned short *Password;
1352 unsigned __LONG32 PasswordLength;
1353 unsigned __LONG32 Flags;
1354 unsigned short *PackageList;
1355 unsigned __LONG32 PackageListLength;
1356 } SEC_WINNT_AUTH_IDENTITY_EXW,*PSEC_WINNT_AUTH_IDENTITY_EXW;
1357
1358 typedef struct _SEC_WINNT_AUTH_IDENTITY_EXA {
1359 unsigned __LONG32 Version;
1360 unsigned __LONG32 Length;
1361 unsigned char *User;
1362 unsigned __LONG32 UserLength;
1363 unsigned char *Domain;
1364 unsigned __LONG32 DomainLength;
1365 unsigned char *Password;
1366 unsigned __LONG32 PasswordLength;
1367 unsigned __LONG32 Flags;
1368 unsigned char *PackageList;
1369 unsigned __LONG32 PackageListLength;
1370 } SEC_WINNT_AUTH_IDENTITY_EXA,*PSEC_WINNT_AUTH_IDENTITY_EXA;
1371
1372#define SEC_WINNT_AUTH_IDENTITY_EX __MINGW_NAME_AW(SEC_WINNT_AUTH_IDENTITY_EX)
1373#define PSEC_WINNT_AUTH_IDENTITY_EX __MINGW_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_EX)
1374#endif
1375
1376#ifndef _AUTH_IDENTITY_INFO_DEFINED
1377#define _AUTH_IDENTITY_INFO_DEFINED
1378
1379 typedef union _SEC_WINNT_AUTH_IDENTITY_INFO {
1380 SEC_WINNT_AUTH_IDENTITY_EXW AuthIdExw;
1381 SEC_WINNT_AUTH_IDENTITY_EXA AuthIdExa;
1382 SEC_WINNT_AUTH_IDENTITY_A AuthId_a;
1383 SEC_WINNT_AUTH_IDENTITY_W AuthId_w;
1384 SEC_WINNT_AUTH_IDENTITY_EX2 AuthIdEx2;
1385 } SEC_WINNT_AUTH_IDENTITY_INFO, *PSEC_WINNT_AUTH_IDENTITY_INFO;
1386
1387#define SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED 0x10
1388#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED 0x20
1389#define SEC_WINNT_AUTH_IDENTITY_FLAGS_USER_PROTECTED 0x40
1390#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_ENCRYPTED 0x80
1391
1392#define SEC_WINNT_AUTH_IDENTITY_FLAGS_RESERVED 0x10000
1393#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_USER 0x20000
1394#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_DOMAIN 0x40000
1395#define SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER 0x80000
1396
1397#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_USE_MASK 0xff000000
1398#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE 0x80000000
1399#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_BY_CALLER SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE
1400#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED 0x40000000
1401#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX 0x20000000
1402#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD 0x10000000
1403
1404#define SEC_WINNT_AUTH_IDENTITY_FLAGS_VALID_SSPIPFC_FLAGS \
1405 (SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE | \
1406 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED | \
1407 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX | \
1408 SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD)
1409
1410#endif
1411
1412#define SSPIPFC_CREDPROV_DO_NOT_SAVE 0x00000001
1413#define SSPIPFC_SAVE_CRED_BY_CALLER SSPIPFC_CREDPROV_DO_NOT_SAVE
1414#define SSPIPFC_NO_CHECKBOX 0x00000002
1415#define SSPIPFC_CREDPROV_DO_NOT_LOAD 0x00000004
1416#define SSPIPFC_USE_CREDUIBROKER 0x00000008
1417#define SSPIPFC_VALID_FLAGS \
1418 (SSPIPFC_CREDPROV_DO_NOT_SAVE | SSPIPFC_NO_CHECKBOX | SSPIPFC_CREDPROV_DO_NOT_LOAD | SSPIPFC_USE_CREDUIBROKER)
1419
1420#ifndef _SSPIPFC_NONE_
1421
1422typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
1423
1424unsigned __LONG32 SEC_ENTRY SspiPromptForCredentialsW(
1425 PCWSTR pszTargetName,
1426#ifdef _CREDUI_INFO_DEFINED
1427 PCREDUI_INFOW pUiInfo,
1428#else
1429 PVOID pUiInfo,
1430#endif
1431 unsigned __LONG32 dwAuthError,
1432 PCWSTR pszPackage,
1433 PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity,
1434 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity,
1435 int* pfSave,
1436 unsigned __LONG32 dwFlags
1437);
1438
1439unsigned __LONG32 SEC_ENTRY SspiPromptForCredentialsA(
1440 PCSTR pszTargetName,
1441#ifdef _CREDUI_INFO_DEFINED
1442 PCREDUI_INFOA pUiInfo,
1443#else
1444 PVOID pUiInfo,
1445#endif
1446 unsigned __LONG32 dwAuthError,
1447 PCSTR pszPackage,
1448 PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity,
1449 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity,
1450 int* pfSave,
1451 unsigned __LONG32 dwFlags
1452);
1453
1454#define SspiPromptForCredentials __MINGW_NAME_AW(SspiPromptForCredentials)
1455
1456#else
1457
1458typedef PSEC_WINNT_AUTH_IDENTITY_INFO PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
1459
1460#endif
1461
1462#ifdef _SEC_WINNT_AUTH_TYPES
1463
1464EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_PASSWORD =
1465 { 0x28bfc32f, 0x10f6, 0x4738, { 0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a } };
1466
1467EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CERT =
1468 { 0x235f69ad, 0x73fb, 0x4dbc, { 0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b } };
1469
1470EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CREDMAN_CERT =
1471 { 0x7cb72412, 0x1016, 0x491a, { 0x8c, 0x87, 0x4d, 0x2a, 0xa1, 0xb7, 0xdd, 0x3a } };
1472
1473EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_NGC =
1474 { 0x10a47879, 0x5ebf, 0x4b85, { 0xbd, 0x8d, 0xc2, 0x1b, 0xb4, 0xf4, 0x9c, 0x8a } };
1475
1476EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_FIDO =
1477 { 0x32e8f8d7, 0x7871, 0x4bcc, { 0x83, 0xc5, 0x46, 0xf, 0x66, 0xc6, 0x13, 0x5c } };
1478
1479EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_KEYTAB =
1480 { 0xd587aae8, 0xf78f, 0x4455, { 0xa1, 0x12, 0xc9, 0x34, 0xbe, 0xee, 0x7c, 0xe1 } };
1481
1482EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_DELEGATION_TOKEN =
1483 { 0x12e52e0f, 0x6f9b, 0x4f83, { 0x90, 0x20, 0x9d, 0xe4, 0x2b, 0x22, 0x62, 0x67 } };
1484
1485EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA =
1486 { 0x68fd9879, 0x79c, 0x4dfe, { 0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0 } };
1487
1488EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS =
1489 { 0xb86c4ff3, 0x49d7, 0x4dc4, { 0xb5, 0x60, 0xb1, 0x16, 0x36, 0x85, 0xb2, 0x36 } };
1490
1491EXTERN_C __declspec(selectany) const GUID CREDUIWIN_STRUCTURE_TYPE_SSPIPFC =
1492 { 0x3c3e93d9, 0xd96b, 0x49b5, { 0x94, 0xa7, 0x45, 0x85, 0x92, 0x8, 0x83, 0x37 } };
1493
1494EXTERN_C __declspec(selectany) const GUID SSPIPFC_STRUCTURE_TYPE_CREDUI_CONTEXT =
1495 { 0xc2fffe6f, 0x503d, 0x4c3d, { 0xa9, 0x5e, 0xbc, 0xe8, 0x21, 0x21, 0x3d, 0x44 } };
1496
1497typedef struct _SEC_WINNT_AUTH_BYTE_VECTOR {
1498 unsigned __LONG32 ByteArrayOffset;
1499 unsigned short ByteArrayLength;
1500} SEC_WINNT_AUTH_BYTE_VECTOR, *PSEC_WINNT_AUTH_BYTE_VECTOR;
1501
1502typedef struct _SEC_WINNT_AUTH_DATA {
1503 GUID CredType;
1504 SEC_WINNT_AUTH_BYTE_VECTOR CredData;
1505} SEC_WINNT_AUTH_DATA, *PSEC_WINNT_AUTH_DATA;
1506
1507typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS {
1508 unsigned short cbHeaderLength;
1509 unsigned short cbStructureLength;
1510 SEC_WINNT_AUTH_DATA AuthData;
1511} SEC_WINNT_AUTH_PACKED_CREDENTIALS, *PSEC_WINNT_AUTH_PACKED_CREDENTIALS;
1512
1513typedef struct _SEC_WINNT_AUTH_DATA_PASSWORD {
1514 SEC_WINNT_AUTH_BYTE_VECTOR UnicodePassword;
1515} SEC_WINNT_AUTH_DATA_PASSWORD, PSEC_WINNT_AUTH_DATA_PASSWORD;
1516
1517typedef struct _SEC_WINNT_AUTH_CERTIFICATE_DATA {
1518 unsigned short cbHeaderLength;
1519 unsigned short cbStructureLength;
1520 SEC_WINNT_AUTH_BYTE_VECTOR Certificate;
1521} SEC_WINNT_AUTH_CERTIFICATE_DATA, *PSEC_WINNT_AUTH_CERTIFICATE_DATA;
1522
1523typedef struct _SEC_WINNT_AUTH_NGC_DATA {
1524 LUID LogonId;
1525 unsigned __LONG32 Flags;
1526 SEC_WINNT_AUTH_BYTE_VECTOR CspInfo;
1527 SEC_WINNT_AUTH_BYTE_VECTOR UserIdKeyAuthTicket;
1528 SEC_WINNT_AUTH_BYTE_VECTOR DecryptionKeyName;
1529 SEC_WINNT_AUTH_BYTE_VECTOR DecryptionKeyAuthTicket;
1530} SEC_WINNT_AUTH_NGC_DATA, *PSEC_WINNT_AUTH_NGC_DATA;
1531
1532#define NGC_DATA_FLAG_KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES 1
1533#define NGC_DATA_FLAG_KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO 2
1534#define NGC_DATA_FLAG_IS_SMARTCARD_DATA 4
1535#define NGC_DATA_FLAG_IS_CLOUD_TRUST_CRED 8
1536
1537typedef struct _SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA {
1538 PVOID pcc;
1539 PVOID hProv;
1540 LPWSTR pwszECDHKeyName;
1541} SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA, *PSEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA;
1542
1543typedef struct _SEC_WINNT_AUTH_FIDO_DATA {
1544 unsigned short cbHeaderLength;
1545 unsigned short cbStructureLength;
1546 SEC_WINNT_AUTH_BYTE_VECTOR Secret;
1547 SEC_WINNT_AUTH_BYTE_VECTOR NewSecret;
1548 SEC_WINNT_AUTH_BYTE_VECTOR EncryptedNewSecret;
1549 SEC_WINNT_AUTH_BYTE_VECTOR NetworkLogonBuffer;
1550 ULONG64 ulSignatureCount;
1551} SEC_WINNT_AUTH_FIDO_DATA, *PSEC_WINNT_AUTH_FIDO_DATA;
1552
1553typedef struct _SEC_WINNT_CREDUI_CONTEXT_VECTOR {
1554 ULONG CredUIContextArrayOffset;
1555 USHORT CredUIContextCount;
1556} SEC_WINNT_CREDUI_CONTEXT_VECTOR, *PSEC_WINNT_CREDUI_CONTEXT_VECTOR;
1557
1558typedef struct _SEC_WINNT_AUTH_SHORT_VECTOR {
1559 ULONG ShortArrayOffset;
1560 USHORT ShortArrayCount;
1561} SEC_WINNT_AUTH_SHORT_VECTOR, *PSEC_WINNT_AUTH_SHORT_VECTOR;
1562
1563typedef struct _CREDUIWIN_MARSHALED_CONTEXT {
1564 GUID StructureType;
1565 USHORT cbHeaderLength;
1566 LUID LogonId;
1567 GUID MarshaledDataType;
1568 ULONG MarshaledDataOffset;
1569 USHORT MarshaledDataLength;
1570} CREDUIWIN_MARSHALED_CONTEXT, *PCREDUIWIN_MARSHALED_CONTEXT;
1571
1572typedef struct _SEC_WINNT_CREDUI_CONTEXT {
1573 USHORT cbHeaderLength;
1574 HANDLE CredUIContextHandle;
1575#ifdef _CREDUI_INFO_DEFINED
1576 PCREDUI_INFOW UIInfo;
1577#else
1578 PVOID UIInfo;
1579#endif
1580 ULONG dwAuthError;
1581 PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity;
1582 PUNICODE_STRING TargetName;
1583} SEC_WINNT_CREDUI_CONTEXT, *PSEC_WINNT_CREDUI_CONTEXT;
1584
1585typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX {
1586 unsigned short cbHeaderLength;
1587 unsigned __LONG32 Flags;
1588 SEC_WINNT_AUTH_BYTE_VECTOR PackedCredentials;
1589 SEC_WINNT_AUTH_SHORT_VECTOR PackageList;
1590} SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX, *PSEC_WINNT_AUTH_PACKED_CREDENTIALS_EX;
1591
1592SECURITY_STATUS SEC_ENTRY SspiGetCredUIContext(HANDLE ContextHandle, GUID* CredType,
1593 LUID* LogonId,
1594 PSEC_WINNT_CREDUI_CONTEXT_VECTOR* CredUIContexts,
1595 HANDLE* TokenHandle);
1596SECURITY_STATUS SEC_ENTRY SspiUpdateCredentials(HANDLE ContextHandle, GUID* CredType,
1597 ULONG FlatCredUIContextLength,
1598 PUCHAR FlatCredUIContext);
1599SECURITY_STATUS SEC_ENTRY SspiUnmarshalCredUIContext(PUCHAR MarshaledCredUIContext,
1600 ULONG MarshaledCredUIContextLength,
1601 PSEC_WINNT_CREDUI_CONTEXT* CredUIContext);
1602
1603#endif
1604
1605#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4
1606#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8
1607
1608typedef struct _SECURITY_PACKAGE_OPTIONS {
1609 unsigned __LONG32 Size;
1610 unsigned __LONG32 Type;
1611 unsigned __LONG32 Flags;
1612 unsigned __LONG32 SignatureSize;
1613 void *Signature;
1614} SECURITY_PACKAGE_OPTIONS,*PSECURITY_PACKAGE_OPTIONS;
1615
1616#define SECPKG_OPTIONS_TYPE_UNKNOWN 0
1617#define SECPKG_OPTIONS_TYPE_LSA 1
1618#define SECPKG_OPTIONS_TYPE_SSPI 2
1619
1620#define SECPKG_OPTIONS_PERMANENT 0x00000001
1621
1622#define AddSecurityPackage __MINGW_NAME_AW(AddSecurityPackage)
1623#define DeleteSecurityPackage __MINGW_NAME_AW(DeleteSecurityPackage)
1624
1625SECURITY_STATUS WINAPI AddSecurityPackageA(LPSTR pszPackageName,PSECURITY_PACKAGE_OPTIONS pOptions);
1626SECURITY_STATUS WINAPI AddSecurityPackageW(LPWSTR pszPackageName,PSECURITY_PACKAGE_OPTIONS pOptions);
1627
1628 SECURITY_STATUS WINAPI DeleteSecurityPackageA(SEC_CHAR *pszPackageName);
1629 SECURITY_STATUS WINAPI DeleteSecurityPackageW(SEC_WCHAR *pszPackageName);
1630
1631#if ISSP_MODE == 0
1632
1633typedef struct _SspiAsyncContext SspiAsyncContext;
1634
1635typedef void (*SspiAsyncNotifyCallback)(SspiAsyncContext* Handle, PVOID CallbackData);
1636
1637SspiAsyncContext* SspiCreateAsyncContext();
1638void SspiFreeAsyncContext(SspiAsyncContext* Handle);
1639NTSTATUS SspiReinitAsyncContext(SspiAsyncContext* Handle);
1640SECURITY_STATUS SspiSetAsyncNotifyCallback(SspiAsyncContext* Context,
1641 SspiAsyncNotifyCallback Callback,
1642 void* CallbackData);
1643BOOLEAN SspiAsyncContextRequiresNotify(SspiAsyncContext* AsyncContext);
1644SECURITY_STATUS SspiGetAsyncCallStatus(SspiAsyncContext* Handle);
1645
1646SECURITY_STATUS SspiAcquireCredentialsHandleAsyncW(
1647 SspiAsyncContext* AsyncContext,
1648#if ISSP_MODE == 0
1649 PSECURITY_STRING pszPrincipal,
1650 PSECURITY_STRING pszPackage,
1651#else
1652 LPWSTR pszPrincipal,
1653 LPWSTR pszPackage,
1654#endif
1655 unsigned __LONG32 fCredentialUse,
1656 void* pvLogonId,
1657 void* pAuthData,
1658 SEC_GET_KEY_FN pGetKeyFn,
1659 void* pvGetKeyArgument,
1660 PCredHandle phCredential,
1661 PTimeStamp ptsExpiry
1662);
1663
1664SECURITY_STATUS SspiAcquireCredentialsHandleAsyncA(
1665 SspiAsyncContext* AsyncContext,
1666 LPSTR pszPrincipal,
1667 LPSTR pszPackage,
1668 unsigned __LONG32 fCredentialUse,
1669 void * pvLogonId,
1670 void * pAuthData,
1671 SEC_GET_KEY_FN pGetKeyFn,
1672 void * pvGetKeyArgument,
1673 PCredHandle phCredential,
1674 PTimeStamp ptsExpiry
1675);
1676
1677SECURITY_STATUS SspiInitializeSecurityContextAsyncW(
1678 SspiAsyncContext* AsyncContext,
1679 PCredHandle phCredential,
1680 PCtxtHandle phContext,
1681#if ISSP_MODE == 0
1682 PSECURITY_STRING pszTargetName,
1683#else
1684 LPWSTR pszTargetName,
1685#endif
1686 unsigned __LONG32 fContextReq,
1687 unsigned __LONG32 Reserved1,
1688 unsigned __LONG32 TargetDataRep,
1689 PSecBufferDesc pInput,
1690 unsigned __LONG32 Reserved2,
1691 PCtxtHandle phNewContext,
1692 PSecBufferDesc pOutput,
1693 unsigned __LONG32* pfContextAttr,
1694 PTimeStamp ptsExpiry
1695);
1696
1697SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
1698 SspiAsyncContext* AsyncContext,
1699 PCredHandle phCredential,
1700 PCtxtHandle phContext,
1701 LPSTR pszTargetName,
1702 unsigned __LONG32 fContextReq,
1703 unsigned __LONG32 Reserved1,
1704 unsigned __LONG32 TargetDataRep,
1705 PSecBufferDesc pInput,
1706 unsigned __LONG32 Reserved2,
1707 PCtxtHandle phNewContext,
1708 PSecBufferDesc pOutput,
1709 unsigned __LONG32* pfContextAttr,
1710 PTimeStamp ptsExpiry
1711);
1712
1713SECURITY_STATUS SspiAcceptSecurityContextAsync(
1714 SspiAsyncContext* AsyncContext,
1715 PCredHandle phCredential,
1716 PCtxtHandle phContext,
1717 PSecBufferDesc pInput,
1718 unsigned __LONG32 fContextReq,
1719 unsigned __LONG32 TargetDataRep,
1720 PCtxtHandle phNewContext,
1721 PSecBufferDesc pOutput,
1722 unsigned __LONG32* pfContextAttr,
1723 PTimeStamp ptsExpiry
1724);
1725
1726SECURITY_STATUS SspiFreeCredentialsHandleAsync(
1727 SspiAsyncContext* AsyncContext,
1728 PCredHandle phCredential
1729);
1730
1731SECURITY_STATUS SspiDeleteSecurityContextAsync(
1732 SspiAsyncContext* AsyncContext,
1733 PCtxtHandle phContext
1734);
1735
1736#define SspiAcquireCredentialsHandleAsync __MINGW_NAME_AW(SspiAcquireCredentialsHandleAsync)
1737#define SspiInitializeSecurityContextAsync __MINGW_NAME_AW(SspiInitializeSecurityContextAsync)
1738
1739#endif
1740
1741SECURITY_STATUS SEC_ENTRY SspiPrepareForCredRead(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1742 PCWSTR pszTargetName, PULONG pCredmanCredentialType,
1743 PCWSTR* ppszCredmanTargetName);
1744
1745SECURITY_STATUS SEC_ENTRY SspiPrepareForCredWrite(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1746 PCWSTR pszTargetName, PULONG pCredmanCredentialType,
1747 PCWSTR* ppszCredmanTargetName, PCWSTR* ppszCredmanUserName,
1748 PUCHAR *ppCredentialBlob, PULONG pCredentialBlobSize);
1749
1750#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 1
1751#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS 2
1752#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_FOR_SYSTEM 4
1753
1754SECURITY_STATUS SEC_ENTRY SspiEncryptAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1755
1756SECURITY_STATUS SEC_ENTRY SspiEncryptAuthIdentityEx(ULONG Options, PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1757
1758SECURITY_STATUS SEC_ENTRY SspiDecryptAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1759
1760SECURITY_STATUS SEC_ENTRY SspiDecryptAuthIdentityEx(ULONG Options, PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1761
1762BOOLEAN SEC_ENTRY SspiIsAuthIdentityEncrypted(PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1763
1764#if NTDDI_VERSION >= NTDDI_WIN7
1765
1766SECURITY_STATUS SEC_ENTRY SspiEncodeAuthIdentityAsStrings(PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
1767 PCWSTR* ppszUserName, PCWSTR* ppszDomainName,
1768 PCWSTR* ppszPackedCredentialsString);
1769
1770SECURITY_STATUS SEC_ENTRY SspiValidateAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1771
1772SECURITY_STATUS SEC_ENTRY SspiCopyAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
1773 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
1774
1775VOID SEC_ENTRY SspiFreeAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1776
1777VOID SEC_ENTRY SspiZeroAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1778
1779VOID SEC_ENTRY SspiLocalFree(PVOID DataBuffer);
1780
1781SECURITY_STATUS SEC_ENTRY SspiEncodeStringsAsAuthIdentity(PCWSTR pszUserName, PCWSTR pszDomainName,
1782 PCWSTR pszPackedCredentialsString,
1783 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
1784
1785SECURITY_STATUS SEC_ENTRY SspiCompareAuthIdentities(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
1786 PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
1787 PBOOLEAN SameSuppliedUser, PBOOLEAN SameSuppliedIdentity);
1788
1789SECURITY_STATUS SEC_ENTRY SspiMarshalAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1790 unsigned __LONG32* AuthIdentityLength,
1791 char** AuthIdentityByteArray);
1792
1793SECURITY_STATUS SEC_ENTRY SspiUnmarshalAuthIdentity(unsigned __LONG32 AuthIdentityLength,
1794 char* AuthIdentityByteArray,
1795 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
1796
1797BOOLEAN SEC_ENTRY SspiIsPromptingNeeded(unsigned __LONG32 ErrorOrNtStatus);
1798
1799SECURITY_STATUS SEC_ENTRY SspiGetTargetHostName(PCWSTR pszTargetName, PWSTR* pszHostName);
1800
1801SECURITY_STATUS SEC_ENTRY SspiExcludePackage(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1802 PCWSTR pszPackageName,
1803 PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
1804
1805#endif
1806
1807#ifdef __cplusplus
1808}
1809#endif
1810#endif