[PSDK] Update msctf.idl. CORE-16441
[reactos.git] / sdk / include / psdk / sspi.h
1 /*
2 * Copyright (C) 2004 Juan Lang
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18 #ifndef __WINE_SSPI_H__
19 #define __WINE_SSPI_H__
20
21 #include <wtypes.h>
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #define SEC_ENTRY WINAPI
28
29 typedef WCHAR SEC_WCHAR;
30 typedef CHAR SEC_CHAR;
31
32 #ifndef __SECSTATUS_DEFINED__
33 #define __SECSTATUS_DEFINED__
34 typedef LONG SECURITY_STATUS;
35 #endif
36
37 #define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
38 #define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
39 #define UNISP_NAME WINELIB_NAME_AW(UNISP_NAME_)
40
41 #ifdef UNICODE
42 typedef SEC_WCHAR * SECURITY_PSTR;
43 typedef CONST SEC_WCHAR * SECURITY_PCSTR;
44 #else
45 typedef SEC_CHAR * SECURITY_PSTR;
46 typedef CONST SEC_CHAR * SECURITY_PCSTR;
47 #endif
48
49 #ifndef __SECHANDLE_DEFINED__
50 #define __SECHANDLE_DEFINED__
51 typedef struct _SecHandle
52 {
53 ULONG_PTR dwLower;
54 ULONG_PTR dwUpper;
55 } SecHandle, *PSecHandle;
56 #endif
57
58 #define SecInvalidateHandle(x) do { \
59 ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
60 ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
61 } while (0)
62
63 #define SecIsValidHandle(x) \
64 ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
65 (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
66
67 typedef SecHandle CredHandle;
68 typedef PSecHandle PCredHandle;
69
70 typedef SecHandle CtxtHandle;
71 typedef PSecHandle PCtxtHandle;
72
73 typedef struct _SECURITY_INTEGER
74 {
75 ULONG LowPart;
76 LONG HighPart;
77 } SECURITY_INTEGER, *PSECURITY_INTEGER;
78 typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
79
80 #define SSPIPFC_CREDPROV_DO_NOT_SAVE 0x00000001
81 #define SSPIPFC_NO_CHECKBOX 0x00000002
82
83 typedef void *PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
84
85 ULONG SEC_ENTRY SspiPromptForCredentialsW(_In_ PCWSTR, _In_opt_ void *,
86 _In_ ULONG, _In_ PCWSTR, _In_opt_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE,
87 _Outptr_ PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, _Inout_opt_ int *, _In_ ULONG);
88
89 typedef struct _SecPkgInfoA
90 {
91 ULONG fCapabilities;
92 unsigned short wVersion;
93 unsigned short wRPCID;
94 ULONG cbMaxToken;
95 SEC_CHAR *Name;
96 SEC_CHAR *Comment;
97 } SecPkgInfoA, *PSecPkgInfoA;
98
99 typedef struct _SecPkgInfoW
100 {
101 ULONG fCapabilities;
102 unsigned short wVersion;
103 unsigned short wRPCID;
104 ULONG cbMaxToken;
105 SEC_WCHAR *Name;
106 SEC_WCHAR *Comment;
107 } SecPkgInfoW, *PSecPkgInfoW;
108
109 #define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo)
110 #define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo)
111
112 /* fCapabilities field of SecPkgInfo */
113 #define SECPKG_FLAG_INTEGRITY 0x00000001
114 #define SECPKG_FLAG_PRIVACY 0x00000002
115 #define SECPKG_FLAG_TOKEN_ONLY 0x00000004
116 #define SECPKG_FLAG_DATAGRAM 0x00000008
117 #define SECPKG_FLAG_CONNECTION 0x00000010
118 #define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
119 #define SECPKG_FLAG_CLIENT_ONLY 0x00000040
120 #define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
121 #define SECPKG_FLAG_IMPERSONATION 0x00000100
122 #define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
123 #define SECPKG_FLAG_STREAM 0x00000400
124 #define SECPKG_FLAG_NEGOTIABLE 0x00000800
125 #define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
126 #define SECPKG_FLAG_LOGON 0x00002000
127 #define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
128 #define SECPKG_FLAG_FRAGMENT 0x00008000
129 #define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
130 #define SECPKG_FLAG_DELEGATION 0x00020000
131 #define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
132 #define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
133 #define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
134 #define SECPKG_FLAG_NEGOTIABLE2 0x00200000
135 #define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000
136 #define SECPKG_FLAG_APPCONTAINER_CHECKS 0x00800000
137
138 typedef struct _SecBuffer {
139 ULONG cbBuffer;
140 ULONG BufferType;
141 _Field_size_bytes_(cbBuffer) void *pvBuffer;
142 } SecBuffer, *PSecBuffer;
143
144 /* values for BufferType */
145 #define SECBUFFER_EMPTY 0
146 #define SECBUFFER_DATA 1
147 #define SECBUFFER_TOKEN 2
148 #define SECBUFFER_PKG_PARAMS 3
149 #define SECBUFFER_MISSING 4
150 #define SECBUFFER_EXTRA 5
151 #define SECBUFFER_STREAM_TRAILER 6
152 #define SECBUFFER_STREAM_HEADER 7
153 #define SECBUFFER_NEGOTIATION_INFO 8
154 #define SECBUFFER_PADDING 9
155 #define SECBUFFER_STREAM 10
156 #define SECBUFFER_MECHLIST 11
157 #define SECBUFFER_MECHLIST_SIGNATURE 12
158 #define SECBUFFER_TARGET 13
159 #define SECBUFFER_CHANNEL_BINDINGS 14
160
161 #define SECBUFFER_ATTRMASK 0xf0000000
162 #define SECBUFFER_READONLY 0x80000000
163 #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
164 #define SECBUFFER_RESERVED 0x60000000
165
166 typedef struct _SecBufferDesc {
167 ULONG ulVersion;
168 ULONG cBuffers;
169 _Field_size_(cBuffers) PSecBuffer pBuffers;
170 } SecBufferDesc, *PSecBufferDesc;
171
172 /* values for ulVersion */
173 #define SECBUFFER_VERSION 0
174
175 typedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal,
176 ULONG KeyVer, void **Key, SECURITY_STATUS *Status);
177
178 SECURITY_STATUS
179 SEC_ENTRY
180 EnumerateSecurityPackagesA(
181 _Out_ PULONG pcPackages,
182 _Outptr_ PSecPkgInfoA *ppPackageInfo);
183
184 SECURITY_STATUS
185 SEC_ENTRY
186 EnumerateSecurityPackagesW(
187 _Out_ PULONG pcPackages,
188 _Outptr_ PSecPkgInfoW *ppPackageInfo);
189
190 #define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages)
191
192 typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG,
193 PSecPkgInfoA *);
194 typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG,
195 PSecPkgInfoW *);
196 #define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_)
197
198 SECURITY_STATUS
199 SEC_ENTRY
200 QueryCredentialsAttributesA(
201 _In_ PCredHandle phCredential,
202 _In_ ULONG ulAttribute,
203 _Inout_ void *pBuffer);
204
205 SECURITY_STATUS
206 SEC_ENTRY
207 QueryCredentialsAttributesW(
208 _In_ PCredHandle phCredential,
209 _In_ ULONG ulAttribute,
210 _Inout_ void *pBuffer);
211
212 #define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes)
213
214 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)
215 (PCredHandle, ULONG, PVOID);
216 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)
217 (PCredHandle, ULONG, PVOID);
218 #define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_)
219
220 typedef struct _SEC_CHANNEL_BINDINGS {
221 ULONG dwInitiatorAddrType;
222 ULONG cbInitiatorLength;
223 ULONG dwInitiatorOffset;
224 ULONG dwAcceptorAddrType;
225 ULONG cbAcceptorLength;
226 ULONG dwAcceptorOffset;
227 ULONG cbApplicationDataLength;
228 ULONG dwApplicationDataOffset;
229 } SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;
230
231 /* values for QueryCredentialsAttributes ulAttribute */
232 #define SECPKG_CRED_ATTR_NAMES 1
233
234 /* types for QueryCredentialsAttributes */
235 typedef struct _SecPkgCredentials_NamesA
236 {
237 SEC_CHAR *sUserName;
238 } SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA;
239
240 typedef struct _SecPkgCredentials_NamesW
241 {
242 SEC_WCHAR *sUserName;
243 } SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW;
244
245 #define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names)
246
247 SECURITY_STATUS
248 SEC_ENTRY
249 AcquireCredentialsHandleA(
250 _In_opt_ SEC_CHAR *pszPrincipal,
251 _In_ SEC_CHAR *pszPackage,
252 _In_ ULONG fCredentialsUse,
253 _In_opt_ PLUID pvLogonID,
254 _In_opt_ PVOID pAuthData,
255 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
256 _In_opt_ PVOID pvGetKeyArgument,
257 _Out_ PCredHandle phCredential,
258 _Out_opt_ PTimeStamp ptsExpiry);
259
260 SECURITY_STATUS
261 SEC_ENTRY
262 AcquireCredentialsHandleW(
263 _In_opt_ SEC_WCHAR *pszPrincipal,
264 _In_ SEC_WCHAR *pszPackage,
265 _In_ ULONG fCredentialsUse,
266 _In_opt_ PLUID pvLogonID,
267 _In_opt_ PVOID pAuthData,
268 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
269 _In_opt_ PVOID pvGetKeyArgument,
270 _Out_ PCredHandle phCredential,
271 _Out_opt_ PTimeStamp ptsExpiry);
272
273 #define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle)
274
275 /* flags for fCredentialsUse */
276 #define SECPKG_CRED_INBOUND 0x00000001
277 #define SECPKG_CRED_OUTBOUND 0x00000002
278 #define SECPKG_CRED_BOTH (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND)
279 #define SECPKG_CRED_DEFAULT 0x00000004
280 #define SECPKG_CRED_RESERVED 0xf0000000
281
282 typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(
283 SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
284 PCredHandle, PTimeStamp);
285 typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
286 SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID,
287 PCredHandle, PTimeStamp);
288 #define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_)
289
290 SECURITY_STATUS SEC_ENTRY FreeContextBuffer(_Inout_ PVOID pv);
291
292 typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(_Inout_ PVOID);
293
294 SECURITY_STATUS
295 SEC_ENTRY
296 FreeCredentialsHandle(
297 _In_ PCredHandle phCredential);
298
299 #define FreeCredentialHandle FreeCredentialsHandle
300
301 typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
302
303 SECURITY_STATUS
304 SEC_ENTRY
305 InitializeSecurityContextA(
306 _In_opt_ PCredHandle phCredential,
307 _In_opt_ PCtxtHandle phContext,
308 _In_opt_ SEC_CHAR *pszTargetName,
309 _In_ ULONG fContextReq,
310 _In_ ULONG Reserved1,
311 _In_ ULONG TargetDataRep,
312 _In_opt_ PSecBufferDesc pInput,
313 _In_ ULONG Reserved2,
314 _Inout_opt_ PCtxtHandle phNewContext,
315 _Inout_opt_ PSecBufferDesc pOutput,
316 _Out_ ULONG *pfContextAttr,
317 _Out_opt_ PTimeStamp ptsExpiry);
318
319 SECURITY_STATUS
320 SEC_ENTRY
321 InitializeSecurityContextW(
322 _In_opt_ PCredHandle phCredential,
323 _In_opt_ PCtxtHandle phContext,
324 _In_opt_ SEC_WCHAR *pszTargetName,
325 _In_ ULONG fContextReq,
326 _In_ ULONG Reserved1,
327 _In_ ULONG TargetDataRep,
328 _In_opt_ PSecBufferDesc pInput,
329 _In_ ULONG Reserved2,
330 _Inout_opt_ PCtxtHandle phNewContext,
331 _Inout_opt_ PSecBufferDesc pOutput,
332 _Out_ ULONG *pfContextAttr,
333 _Out_opt_ PTimeStamp ptsExpiry);
334
335 #define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext)
336
337 typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A)
338 (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG,
339 ULONG, PSecBufferDesc, ULONG, PCtxtHandle, PSecBufferDesc,
340 ULONG *, PTimeStamp);
341 typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)
342 (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG,
343 ULONG, PSecBufferDesc, ULONG, PCtxtHandle, PSecBufferDesc,
344 ULONG *, PTimeStamp);
345 #define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_)
346
347 /* flags for InitializeSecurityContext fContextReq and pfContextAttr */
348 #define ISC_REQ_DELEGATE 0x00000001
349 #define ISC_REQ_MUTUAL_AUTH 0x00000002
350 #define ISC_REQ_REPLAY_DETECT 0x00000004
351 #define ISC_REQ_SEQUENCE_DETECT 0x00000008
352 #define ISC_REQ_CONFIDENTIALITY 0x00000010
353 #define ISC_REQ_USE_SESSION_KEY 0x00000020
354 #define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
355 #define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
356 #define ISC_REQ_ALLOCATE_MEMORY 0x00000100
357 #define ISC_REQ_USE_DCE_STYLE 0x00000200
358 #define ISC_REQ_DATAGRAM 0x00000400
359 #define ISC_REQ_CONNECTION 0x00000800
360 #define ISC_REQ_CALL_LEVEL 0x00001000
361 #define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
362 #define ISC_REQ_EXTENDED_ERROR 0x00004000
363 #define ISC_REQ_STREAM 0x00008000
364 #define ISC_REQ_INTEGRITY 0x00010000
365 #define ISC_REQ_IDENTIFY 0x00020000
366 #define ISC_REQ_NULL_SESSION 0x00040000
367 #define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
368 #define ISC_REQ_RESERVED1 0x00100000
369 #define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
370
371 #define ISC_RET_DELEGATE 0x00000001
372 #define ISC_RET_MUTUAL_AUTH 0x00000002
373 #define ISC_RET_REPLAY_DETECT 0x00000004
374 #define ISC_RET_SEQUENCE_DETECT 0x00000008
375 #define ISC_RET_CONFIDENTIALITY 0x00000010
376 #define ISC_RET_USE_SESSION_KEY 0x00000020
377 #define ISC_RET_USED_COLLECTED_CREDS 0x00000040
378 #define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
379 #define ISC_RET_ALLOCATED_MEMORY 0x00000100
380 #define ISC_RET_USED_DCE_STYLE 0x00000200
381 #define ISC_RET_DATAGRAM 0x00000400
382 #define ISC_RET_CONNECTION 0x00000800
383 #define ISC_RET_INTERMEDIATE_RETURN 0x00001000
384 #define ISC_RET_CALL_LEVEL 0x00002000
385 #define ISC_RET_EXTENDED_ERROR 0x00004000
386 #define ISC_RET_STREAM 0x00008000
387 #define ISC_RET_INTEGRITY 0x00010000
388 #define ISC_RET_IDENTIFY 0x00020000
389 #define ISC_RET_NULL_SESSION 0x00040000
390 #define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
391 #define ISC_RET_RESERVED1 0x00100000
392 #define ISC_RET_FRAGMENT_ONLY 0x00200000
393
394 SECURITY_STATUS
395 SEC_ENTRY
396 AcceptSecurityContext(
397 _In_opt_ PCredHandle phCredential,
398 _In_opt_ PCtxtHandle phContext,
399 _In_opt_ PSecBufferDesc pInput,
400 _In_ ULONG fContextReq,
401 _In_ ULONG TargetDataRep,
402 _Inout_opt_ PCtxtHandle phNewContext,
403 _Inout_opt_ PSecBufferDesc pOutput,
404 _Out_ ULONG *pfContextAttr,
405 _Out_opt_ PTimeStamp ptsExpiry);
406
407 typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,
408 PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle,
409 PSecBufferDesc, ULONG *, PTimeStamp);
410
411 /* flags for AcceptSecurityContext fContextReq and pfContextAttr */
412 #define ASC_REQ_DELEGATE 0x00000001
413 #define ASC_REQ_MUTUAL_AUTH 0x00000002
414 #define ASC_REQ_REPLAY_DETECT 0x00000004
415 #define ASC_REQ_SEQUENCE_DETECT 0x00000008
416 #define ASC_REQ_CONFIDENTIALITY 0x00000010
417 #define ASC_REQ_USE_SESSION_KEY 0x00000020
418 #define ASC_REQ_ALLOCATE_MEMORY 0x00000100
419 #define ASC_REQ_USE_DCE_STYLE 0x00000200
420 #define ASC_REQ_DATAGRAM 0x00000400
421 #define ASC_REQ_CONNECTION 0x00000800
422 #define ASC_REQ_CALL_LEVEL 0x00001000
423 #define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
424 #define ASC_REQ_EXTENDED_ERROR 0x00008000
425 #define ASC_REQ_STREAM 0x00010000
426 #define ASC_REQ_INTEGRITY 0x00020000
427 #define ASC_REQ_LICENSING 0x00040000
428 #define ASC_REQ_IDENTIFY 0x00080000
429 #define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
430 #define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
431 #define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
432 #define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
433 #define ASC_REQ_FRAGMENT_NO_TOKEN 0x01000000
434
435 #define ASC_RET_DELEGATE 0x00000001
436 #define ASC_RET_MUTUAL_AUTH 0x00000002
437 #define ASC_RET_REPLAY_DETECT 0x00000004
438 #define ASC_RET_SEQUENCE_DETECT 0x00000008
439 #define ASC_RET_CONFIDENTIALITY 0x00000010
440 #define ASC_RET_USE_SESSION_KEY 0x00000020
441 #define ASC_RET_ALLOCATED_MEMORY 0x00000100
442 #define ASC_RET_USED_DCE_STYLE 0x00000200
443 #define ASC_RET_DATAGRAM 0x00000400
444 #define ASC_RET_CONNECTION 0x00000800
445 #define ASC_RET_CALL_LEVEL 0x00002000
446 #define ASC_RET_THIRD_LEG_FAILED 0x00004000
447 #define ASC_RET_EXTENDED_ERROR 0x00008000
448 #define ASC_RET_STREAM 0x00010000
449 #define ASC_RET_INTEGRITY 0x00020000
450 #define ASC_RET_LICENSING 0x00040000
451 #define ASC_RET_IDENTIFY 0x00080000
452 #define ASC_RET_NULL_SESSION 0x00100000
453 #define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
454 #define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
455 #define ASC_RET_FRAGMENT_ONLY 0x00800000
456 #define ASC_RET_NO_TOKEN 0x01000000
457
458 /*Vvalues for TargetDataRep */
459 #define SECURITY_NATIVE_DREP 0x00000010
460 #define SECURITY_NETWORK_DREP 0x00000000
461
462 SECURITY_STATUS
463 SEC_ENTRY
464 CompleteAuthToken(
465 _In_ PCtxtHandle phContext,
466 _In_ PSecBufferDesc pToken);
467
468 typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,
469 PSecBufferDesc);
470
471 SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(_In_ PCtxtHandle phContext);
472
473 typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
474
475 SECURITY_STATUS
476 SEC_ENTRY
477 ApplyControlToken(
478 _In_ PCtxtHandle phContext,
479 _In_ PSecBufferDesc pInput);
480
481 typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,
482 PSecBufferDesc);
483
484 SECURITY_STATUS
485 SEC_ENTRY
486 QueryContextAttributesA(
487 _In_ PCtxtHandle phContext,
488 _In_ ULONG ulAttribute,
489 _Out_ void *pBuffer);
490
491 SECURITY_STATUS
492 SEC_ENTRY
493 QueryContextAttributesW(
494 _In_ PCtxtHandle phContext,
495 _In_ ULONG ulAttribute,
496 _Out_ void *pBuffer);
497
498 #define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes)
499
500 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
501 ULONG, void *);
502 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
503 ULONG, void *);
504 #define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_)
505
506 /* values for QueryContextAttributes/SetContextAttributes ulAttribute */
507 #define SECPKG_ATTR_SIZES 0
508 #define SECPKG_ATTR_NAMES 1
509 #define SECPKG_ATTR_LIFESPAN 2
510 #define SECPKG_ATTR_DCE_INFO 3
511 #define SECPKG_ATTR_STREAM_SIZES 4
512 #define SECPKG_ATTR_KEY_INFO 5
513 #define SECPKG_ATTR_AUTHORITY 6
514 #define SECPKG_ATTR_PROTO_INFO 7
515 #define SECPKG_ATTR_PASSWORD_EXPIRY 8
516 #define SECPKG_ATTR_SESSION_KEY 9
517 #define SECPKG_ATTR_PACKAGE_INFO 10
518 #define SECPKG_ATTR_USER_FLAGS 11
519 #define SECPKG_ATTR_NEGOTIATION_INFO 12
520 #define SECPKG_ATTR_NATIVE_NAMES 13
521 #define SECPKG_ATTR_FLAGS 14
522 #define SECPKG_ATTR_USE_VALIDATED 15
523 #define SECPKG_ATTR_CREDENTIAL_NAME 16
524 #define SECPKG_ATTR_TARGET_INFORMATION 17
525 #define SECPKG_ATTR_ACCESS_TOKEN 18
526 #define SECPKG_ATTR_TARGET 19
527 #define SECPKG_ATTR_AUTHENTICATION_ID 20
528 #define SECPKG_ATTR_LOGOFF_TIME 21
529 #define SECPKG_ATTR_NEGO_KEYS 22
530 #define SECPKG_ATTR_PROMPTING_NEEDED 24
531 #define SECPKG_ATTR_UNIQUE_BINDINGS 25
532 #define SECPKG_ATTR_ENDPOINT_BINDINGS 26
533 #define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
534 #define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
535 #define SECPKG_ATTR_NEGO_PKG_INFO 31
536 #define SECPKG_ATTR_NEGO_STATUS 32
537 #define SECPKG_ATTR_CONTEXT_DELETED 33
538
539 #define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
540 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
541 #define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2
542
543 /* types for QueryContextAttributes/SetContextAttributes */
544
545 typedef struct _SecPkgContext_Sizes
546 {
547 ULONG cbMaxToken;
548 ULONG cbMaxSignature;
549 ULONG cbBlockSize;
550 ULONG cbSecurityTrailer;
551 } SecPkgContext_Sizes, *PSecPkgContext_Sizes;
552
553 typedef struct _SecPkgContext_StreamSizes
554 {
555 ULONG cbHeader;
556 ULONG cbTrailer;
557 ULONG cbMaximumMessage;
558 ULONG cbBuffers;
559 ULONG cbBlockSize;
560 } SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
561
562 typedef struct _SecPkgContext_NamesA
563 {
564 SEC_CHAR *sUserName;
565 } SecPkgContext_NamesA, *PSecPkgContext_NamesA;
566
567 typedef struct _SecPkgContext_NamesW
568 {
569 SEC_WCHAR *sUserName;
570 } SecPkgContext_NamesW, *PSecPkgContext_NamesW;
571
572 #define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names)
573 #define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names)
574
575 typedef struct _SecPkgContext_Lifespan
576 {
577 TimeStamp tsStart;
578 TimeStamp tsExpiry;
579 } SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
580
581 typedef struct _SecPkgContext_DceInfo
582 {
583 ULONG AuthzSvc;
584 void *pPac;
585 } SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
586
587 typedef struct _SecPkgContext_KeyInfoA
588 {
589 SEC_CHAR *sSignatureAlgorithmName;
590 SEC_CHAR *sEncryptAlgorithmName;
591 ULONG KeySize;
592 ULONG SignatureAlgorithm;
593 ULONG EncryptAlgorithm;
594 } SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA;
595
596 typedef struct _SecPkgContext_KeyInfoW
597 {
598 SEC_WCHAR *sSignatureAlgorithmName;
599 SEC_WCHAR *sEncryptAlgorithmName;
600 ULONG KeySize;
601 ULONG SignatureAlgorithm;
602 ULONG EncryptAlgorithm;
603 } SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
604
605 #define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo)
606 #define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo)
607
608 typedef struct _SecPkgContext_AuthorityA
609 {
610 SEC_CHAR *sAuthorityName;
611 } SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA;
612
613 typedef struct _SecPkgContext_AuthorityW
614 {
615 SEC_WCHAR *sAuthorityName;
616 } SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
617
618 #define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority)
619 #define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority)
620
621 typedef struct _SecPkgContext_ProtoInfoA
622 {
623 SEC_CHAR *sProtocolName;
624 ULONG majorVersion;
625 ULONG minorVersion;
626 } SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA;
627
628 typedef struct _SecPkgContext_ProtoInfoW
629 {
630 SEC_WCHAR *sProtocolName;
631 ULONG majorVersion;
632 ULONG minorVersion;
633 } SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
634
635 #define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo)
636 #define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo)
637
638 typedef struct _SecPkgContext_PasswordExpiry
639 {
640 TimeStamp tsPasswordExpires;
641 } SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry;
642
643 typedef struct _SecPkgContext_SessionKey {
644 ULONG SessionKeyLength;
645 _Field_size_bytes_(SessionKeyLength) unsigned char *SessionKey;
646 } SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
647
648 typedef struct _SecPkgContext_PackageInfoA
649 {
650 PSecPkgInfoA PackageInfo;
651 } SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA;
652
653 typedef struct _SecPkgContext_PackageInfoW
654 {
655 PSecPkgInfoW PackageInfo;
656 } SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
657
658 #define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo)
659 #define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo)
660
661 typedef struct _SecPkgContext_Flags
662 {
663 ULONG Flags;
664 } SecPkgContext_Flags, *PSecPkgContext_Flags;
665
666 typedef struct _SecPkgContext_UserFlags
667 {
668 ULONG UserFlags;
669 } SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
670
671 typedef struct _SecPkgContext_NegotiationInfoA
672 {
673 PSecPkgInfoA PackageInfo;
674 ULONG NegotiationState;
675 } SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA;
676
677 typedef struct _SecPkgContext_NegotiationInfoW
678 {
679 PSecPkgInfoW PackageInfo;
680 ULONG NegotiationState;
681 } SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW;
682
683 #define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo)
684 #define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo)
685
686 /* values for NegotiationState */
687 #define SECPKG_NEGOTIATION_COMPLETE 0
688 #define SECPKG_NEGOTIATION_OPTIMISTIC 1
689 #define SECPKG_NEGOTIATION_IN_PROGRESS 2
690 #define SECPKG_NEGOTIATION_DIRECT 3
691 #define SECPKG_NEGOTIATION_TRY_MULTICRED 4
692
693 typedef struct _SecPkgContext_NativeNamesA
694 {
695 SEC_CHAR *sClientName;
696 SEC_CHAR *sServerName;
697 } SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA;
698
699 typedef struct _SecPkgContext_NativeNamesW
700 {
701 SEC_WCHAR *sClientName;
702 SEC_WCHAR *sServerName;
703 } SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW;
704
705 #define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames)
706 #define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames)
707
708 typedef struct _SecPkgContext_CredentialNameA
709 {
710 ULONG CredentialType;
711 SEC_CHAR *sCredentialName;
712 } SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA;
713
714 typedef struct _SecPkgContext_CredentialNameW
715 {
716 ULONG CredentialType;
717 SEC_WCHAR *sCredentialName;
718 } SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
719
720 #define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName)
721 #define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName)
722
723 typedef struct _SecPkgContext_AccessToken
724 {
725 void *AccessToken;
726 } SecPkgContext_AccessToken, *PSecPkgContext_AccessToken;
727
728 typedef struct _SecPkgContext_TargetInformation
729 {
730 ULONG MarshalledTargetInfoLength;
731 unsigned char *MarshalledTargetInfo;
732 } SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation;
733
734 typedef struct _SecPkgContext_AuthzID
735 {
736 ULONG AuthzIDLength;
737 char *AuthzID;
738 } SecPkgContext_AuthzID, *PSecPkgContext_AuthzID;
739
740 typedef struct _SecPkgContext_Target
741 {
742 ULONG TargetLength;
743 char *Target;
744 } SecPkgContext_Target, *PSecPkgContext_Target;
745
746 typedef struct _SecPkgContext_Bindings
747 {
748 ULONG BindingsLength;
749 SEC_CHANNEL_BINDINGS *Bindings;
750 } SecPkgContext_Bindings, *PSecPkgContext_Bindings;
751
752 _Check_return_
753 SECURITY_STATUS
754 SEC_ENTRY
755 ImpersonateSecurityContext(
756 _In_ PCtxtHandle phContext);
757
758 typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN)
759 (PCtxtHandle);
760
761 SECURITY_STATUS SEC_ENTRY RevertSecurityContext(_In_ PCtxtHandle phContext);
762
763 typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
764
765 SECURITY_STATUS
766 SEC_ENTRY
767 MakeSignature(
768 _In_ PCtxtHandle phContext,
769 _In_ ULONG fQOP,
770 _In_ PSecBufferDesc pMessage,
771 _In_ ULONG MessageSeqNo);
772
773 typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle,
774 ULONG, PSecBufferDesc, ULONG);
775
776 SECURITY_STATUS
777 SEC_ENTRY
778 VerifySignature(
779 _In_ PCtxtHandle phContext,
780 _In_ PSecBufferDesc pMessage,
781 _In_ ULONG MessageSeqNo,
782 _Out_ PULONG pfQOP);
783
784 typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle,
785 PSecBufferDesc, ULONG, PULONG);
786
787 SECURITY_STATUS
788 SEC_ENTRY
789 QuerySecurityPackageInfoA(
790 _In_ SEC_CHAR *pszPackageName,
791 _Outptr_ PSecPkgInfoA *ppPackageInfo);
792
793 SECURITY_STATUS
794 SEC_ENTRY
795 QuerySecurityPackageInfoW(
796 _In_ SEC_WCHAR *pszPackageName,
797 _Outptr_ PSecPkgInfoW *ppPackageInfo);
798
799 #define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo)
800
801 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A)
802 (SEC_CHAR *, PSecPkgInfoA *);
803 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)
804 (SEC_WCHAR *, PSecPkgInfoW *);
805 #define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_)
806
807 SECURITY_STATUS
808 SEC_ENTRY
809 ExportSecurityContext(
810 _In_ PCtxtHandle phContext,
811 _In_ ULONG fFlags,
812 _Out_ PSecBuffer pPackedContext,
813 _Out_ void **pToken);
814
815 typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,
816 ULONG, PSecBuffer, void **);
817
818 /* values for ExportSecurityContext fFlags */
819 #define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
820 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
821
822 SECURITY_STATUS
823 SEC_ENTRY
824 ImportSecurityContextA(
825 _In_ SEC_CHAR *pszPackage,
826 _In_ PSecBuffer pPackedContext,
827 _In_ void *Token,
828 _Out_ PCtxtHandle phContext);
829
830 SECURITY_STATUS
831 SEC_ENTRY
832 ImportSecurityContextW(
833 _In_ SEC_WCHAR *pszPackage,
834 _In_ PSecBuffer pPackedContext,
835 _In_ void *Token,
836 _Out_ PCtxtHandle phContext);
837
838 #define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext)
839
840 typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,
841 PSecBuffer, void *, PCtxtHandle);
842 typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *,
843 PSecBuffer, void *, PCtxtHandle);
844 #define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_)
845
846 SECURITY_STATUS
847 SEC_ENTRY
848 AddCredentialsA(
849 _In_ PCredHandle hCredentials,
850 _In_opt_ SEC_CHAR *pszPrincipal,
851 _In_ SEC_CHAR *pszPackage,
852 _In_ ULONG fCredentialUse,
853 _In_opt_ void *pAuthData,
854 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
855 _In_opt_ void *pvGetKeyArgument,
856 _Out_opt_ PTimeStamp ptsExpiry);
857
858 SECURITY_STATUS
859 SEC_ENTRY
860 AddCredentialsW(
861 _In_ PCredHandle hCredentials,
862 _In_opt_ SEC_WCHAR *pszPrincipal,
863 _In_ SEC_WCHAR *pszPackage,
864 _In_ ULONG fCredentialUse,
865 _In_opt_ void *pAuthData,
866 _In_opt_ SEC_GET_KEY_FN pGetKeyFn,
867 _In_opt_ void *pvGetKeyArgument,
868 _Out_opt_ PTimeStamp ptsExpiry);
869
870 #define AddCredentials WINELIB_NAME_AW(AddCredentials)
871
872 typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle,
873 SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
874 PTimeStamp);
875 typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle,
876 SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *,
877 PTimeStamp);
878
879 SECURITY_STATUS
880 SEC_ENTRY
881 QuerySecurityContextToken(
882 _In_ PCtxtHandle phContext,
883 _Out_ HANDLE *phToken);
884
885 typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN)
886 (PCtxtHandle, HANDLE *);
887
888 SECURITY_STATUS
889 SEC_ENTRY
890 EncryptMessage(
891 _In_ PCtxtHandle phContext,
892 _In_ ULONG fQOP,
893 _In_ PSecBufferDesc pMessage,
894 _In_ ULONG MessageSeqNo);
895
896 SECURITY_STATUS
897 SEC_ENTRY
898 DecryptMessage(
899 _In_ PCtxtHandle phContext,
900 _In_ PSecBufferDesc pMessage,
901 _In_ ULONG MessageSeqNo,
902 _Out_opt_ PULONG pfQOP);
903
904 /* values for EncryptMessage fQOP */
905 #define SECQOP_WRAP_NO_ENCRYPT 0x80000001
906
907 typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG,
908 PSecBufferDesc, ULONG);
909 typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle,
910 PSecBufferDesc, ULONG, PULONG);
911
912 SECURITY_STATUS
913 SEC_ENTRY
914 SetContextAttributesA(
915 _In_ PCtxtHandle phContext,
916 _In_ ULONG ulAttribute,
917 _In_reads_bytes_(cbBuffer) void *pBuffer,
918 _In_ ULONG cbBuffer);
919
920 SECURITY_STATUS
921 SEC_ENTRY
922 SetContextAttributesW(
923 _In_ PCtxtHandle phContext,
924 _In_ ULONG ulAttribute,
925 _In_reads_bytes_(cbBuffer) void *pBuffer,
926 _In_ ULONG cbBuffer);
927
928 #define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes)
929
930 typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,
931 ULONG, void *, ULONG);
932 typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,
933 ULONG, void *, ULONG);
934
935 #define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
936 #define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
937 #define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
938
939 typedef struct _SECURITY_FUNCTION_TABLE_A
940 {
941 ULONG dwVersion;
942 ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
943 QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
944 ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
945 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
946 void *Reserved2;
947 INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
948 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
949 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
950 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
951 APPLY_CONTROL_TOKEN_FN ApplyControlToken;
952 QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
953 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
954 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
955 MAKE_SIGNATURE_FN MakeSignature;
956 VERIFY_SIGNATURE_FN VerifySignature;
957 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
958 QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
959 void *Reserved3;
960 void *Reserved4;
961 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
962 IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
963 ADD_CREDENTIALS_FN_A AddCredentialsA;
964 void *Reserved8;
965 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
966 ENCRYPT_MESSAGE_FN EncryptMessage;
967 DECRYPT_MESSAGE_FN DecryptMessage;
968 SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
969 } SecurityFunctionTableA, *PSecurityFunctionTableA;
970
971 /* No, it really is FreeCredentialsHandle, see the thread beginning
972 * http://sourceforge.net/mailarchive/message.php?msg_id=4321080 for a
973 * discovery discussion. */
974 typedef struct _SECURITY_FUNCTION_TABLE_W
975 {
976 ULONG dwVersion;
977 ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
978 QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
979 ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
980 FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
981 void *Reserved2;
982 INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
983 ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
984 COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
985 DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
986 APPLY_CONTROL_TOKEN_FN ApplyControlToken;
987 QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
988 IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
989 REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
990 MAKE_SIGNATURE_FN MakeSignature;
991 VERIFY_SIGNATURE_FN VerifySignature;
992 FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
993 QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
994 void *Reserved3;
995 void *Reserved4;
996 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
997 IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
998 ADD_CREDENTIALS_FN_W AddCredentialsW;
999 void *Reserved8;
1000 QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1001 ENCRYPT_MESSAGE_FN EncryptMessage;
1002 DECRYPT_MESSAGE_FN DecryptMessage;
1003 SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
1004 } SecurityFunctionTableW, *PSecurityFunctionTableW;
1005
1006 #define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable)
1007 #define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable)
1008
1009 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
1010 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
1011
1012 PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void);
1013 PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void);
1014 #define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface)
1015
1016 typedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void);
1017 typedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void);
1018 #define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_)
1019
1020 #ifdef __cplusplus
1021 }
1022 #endif
1023
1024 #endif /* ndef __WINE_SSPI_H__ */