2 * Copyright (C) 2004 Juan Lang
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.
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.
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
18 #ifndef __WINE_SSPI_H__
19 #define __WINE_SSPI_H__
27 #define SEC_ENTRY WINAPI
29 typedef WCHAR SEC_WCHAR
;
30 typedef CHAR SEC_CHAR
;
32 #ifndef __SECSTATUS_DEFINED__
33 #define __SECSTATUS_DEFINED__
34 typedef LONG SECURITY_STATUS
;
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_)
42 typedef SEC_WCHAR
* SECURITY_PSTR
;
43 typedef CONST SEC_WCHAR
* SECURITY_PCSTR
;
45 typedef SEC_CHAR
* SECURITY_PSTR
;
46 typedef CONST SEC_CHAR
* SECURITY_PCSTR
;
49 #ifndef __SECHANDLE_DEFINED__
50 #define __SECHANDLE_DEFINED__
51 typedef struct _SecHandle
55 } SecHandle
, *PSecHandle
;
58 #define SecInvalidateHandle(x) do { \
59 ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \
60 ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \
63 #define SecIsValidHandle(x) \
64 ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \
65 (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1)))
67 typedef SecHandle CredHandle
;
68 typedef PSecHandle PCredHandle
;
70 typedef SecHandle CtxtHandle
;
71 typedef PSecHandle PCtxtHandle
;
73 typedef struct _SECURITY_INTEGER
77 } SECURITY_INTEGER
, *PSECURITY_INTEGER
;
78 typedef SECURITY_INTEGER TimeStamp
, *PTimeStamp
;
80 #define SSPIPFC_CREDPROV_DO_NOT_SAVE 0x00000001
81 #define SSPIPFC_NO_CHECKBOX 0x00000002
83 typedef void *PSEC_WINNT_AUTH_IDENTITY_OPAQUE
;
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
);
89 typedef struct _SecPkgInfoA
92 unsigned short wVersion
;
93 unsigned short wRPCID
;
97 } SecPkgInfoA
, *PSecPkgInfoA
;
99 typedef struct _SecPkgInfoW
102 unsigned short wVersion
;
103 unsigned short wRPCID
;
107 } SecPkgInfoW
, *PSecPkgInfoW
;
109 #define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo)
110 #define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo)
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
138 typedef struct _SecBuffer
{
141 _Field_size_bytes_(cbBuffer
) void *pvBuffer
;
142 } SecBuffer
, *PSecBuffer
;
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
161 #define SECBUFFER_ATTRMASK 0xf0000000
162 #define SECBUFFER_READONLY 0x80000000
163 #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
164 #define SECBUFFER_RESERVED 0x60000000
166 typedef struct _SecBufferDesc
{
169 _Field_size_(cBuffers
) PSecBuffer pBuffers
;
170 } SecBufferDesc
, *PSecBufferDesc
;
172 /* values for ulVersion */
173 #define SECBUFFER_VERSION 0
175 typedef void (SEC_ENTRY
*SEC_GET_KEY_FN
)(void *Arg
, void *Principal
,
176 ULONG KeyVer
, void **Key
, SECURITY_STATUS
*Status
);
180 EnumerateSecurityPackagesA(
181 _Out_ PULONG pcPackages
,
182 _Outptr_ PSecPkgInfoA
*ppPackageInfo
);
186 EnumerateSecurityPackagesW(
187 _Out_ PULONG pcPackages
,
188 _Outptr_ PSecPkgInfoW
*ppPackageInfo
);
190 #define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages)
192 typedef SECURITY_STATUS (SEC_ENTRY
*ENUMERATE_SECURITY_PACKAGES_FN_A
)(PULONG
,
194 typedef SECURITY_STATUS (SEC_ENTRY
*ENUMERATE_SECURITY_PACKAGES_FN_W
)(PULONG
,
196 #define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_)
200 QueryCredentialsAttributesA(
201 _In_ PCredHandle phCredential
,
202 _In_ ULONG ulAttribute
,
203 _Inout_
void *pBuffer
);
207 QueryCredentialsAttributesW(
208 _In_ PCredHandle phCredential
,
209 _In_ ULONG ulAttribute
,
210 _Inout_
void *pBuffer
);
212 #define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes)
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_)
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
;
231 /* values for QueryCredentialsAttributes ulAttribute */
232 #define SECPKG_CRED_ATTR_NAMES 1
234 /* types for QueryCredentialsAttributes */
235 typedef struct _SecPkgCredentials_NamesA
238 } SecPkgCredentials_NamesA
, *PSecPkgCredentials_NamesA
;
240 typedef struct _SecPkgCredentials_NamesW
242 SEC_WCHAR
*sUserName
;
243 } SecPkgCredentials_NamesW
, *PSecPkgCredentials_NamesW
;
245 #define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names)
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
);
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
);
273 #define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle)
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
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_)
290 SECURITY_STATUS SEC_ENTRY
FreeContextBuffer(_Inout_ PVOID pv
);
292 typedef SECURITY_STATUS (SEC_ENTRY
*FREE_CONTEXT_BUFFER_FN
)(_Inout_ PVOID
);
296 FreeCredentialsHandle(
297 _In_ PCredHandle phCredential
);
299 #define FreeCredentialHandle FreeCredentialsHandle
301 typedef SECURITY_STATUS (SEC_ENTRY
*FREE_CREDENTIALS_HANDLE_FN
)(PCredHandle
);
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
);
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
);
335 #define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext)
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_)
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
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
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
);
407 typedef SECURITY_STATUS (SEC_ENTRY
*ACCEPT_SECURITY_CONTEXT_FN
)(PCredHandle
,
408 PCtxtHandle
, PSecBufferDesc
, ULONG
, ULONG
, PCtxtHandle
,
409 PSecBufferDesc
, ULONG
*, PTimeStamp
);
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
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
458 /*Vvalues for TargetDataRep */
459 #define SECURITY_NATIVE_DREP 0x00000010
460 #define SECURITY_NETWORK_DREP 0x00000000
465 _In_ PCtxtHandle phContext
,
466 _In_ PSecBufferDesc pToken
);
468 typedef SECURITY_STATUS (SEC_ENTRY
*COMPLETE_AUTH_TOKEN_FN
)(PCtxtHandle
,
471 SECURITY_STATUS SEC_ENTRY
DeleteSecurityContext(_In_ PCtxtHandle phContext
);
473 typedef SECURITY_STATUS (SEC_ENTRY
*DELETE_SECURITY_CONTEXT_FN
)(PCtxtHandle
);
478 _In_ PCtxtHandle phContext
,
479 _In_ PSecBufferDesc pInput
);
481 typedef SECURITY_STATUS (SEC_ENTRY
*APPLY_CONTROL_TOKEN_FN
)(PCtxtHandle
,
486 QueryContextAttributesA(
487 _In_ PCtxtHandle phContext
,
488 _In_ ULONG ulAttribute
,
489 _Out_
void *pBuffer
);
493 QueryContextAttributesW(
494 _In_ PCtxtHandle phContext
,
495 _In_ ULONG ulAttribute
,
496 _Out_
void *pBuffer
);
498 #define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes)
500 typedef SECURITY_STATUS (SEC_ENTRY
*QUERY_CONTEXT_ATTRIBUTES_FN_A
)(PCtxtHandle
,
502 typedef SECURITY_STATUS (SEC_ENTRY
*QUERY_CONTEXT_ATTRIBUTES_FN_W
)(PCtxtHandle
,
504 #define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_)
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
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
543 /* types for QueryContextAttributes/SetContextAttributes */
545 typedef struct _SecPkgContext_Sizes
548 ULONG cbMaxSignature
;
550 ULONG cbSecurityTrailer
;
551 } SecPkgContext_Sizes
, *PSecPkgContext_Sizes
;
553 typedef struct _SecPkgContext_StreamSizes
557 ULONG cbMaximumMessage
;
560 } SecPkgContext_StreamSizes
, *PSecPkgContext_StreamSizes
;
562 typedef struct _SecPkgContext_NamesA
565 } SecPkgContext_NamesA
, *PSecPkgContext_NamesA
;
567 typedef struct _SecPkgContext_NamesW
569 SEC_WCHAR
*sUserName
;
570 } SecPkgContext_NamesW
, *PSecPkgContext_NamesW
;
572 #define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names)
573 #define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names)
575 typedef struct _SecPkgContext_Lifespan
579 } SecPkgContext_Lifespan
, *PSecPkgContext_Lifespan
;
581 typedef struct _SecPkgContext_DceInfo
585 } SecPkgContext_DceInfo
, *PSecPkgContext_DceInfo
;
587 typedef struct _SecPkgContext_KeyInfoA
589 SEC_CHAR
*sSignatureAlgorithmName
;
590 SEC_CHAR
*sEncryptAlgorithmName
;
592 ULONG SignatureAlgorithm
;
593 ULONG EncryptAlgorithm
;
594 } SecPkgContext_KeyInfoA
, *PSecPkgContext_KeyInfoA
;
596 typedef struct _SecPkgContext_KeyInfoW
598 SEC_WCHAR
*sSignatureAlgorithmName
;
599 SEC_WCHAR
*sEncryptAlgorithmName
;
601 ULONG SignatureAlgorithm
;
602 ULONG EncryptAlgorithm
;
603 } SecPkgContext_KeyInfoW
, *PSecPkgContext_KeyInfoW
;
605 #define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo)
606 #define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo)
608 typedef struct _SecPkgContext_AuthorityA
610 SEC_CHAR
*sAuthorityName
;
611 } SecPkgContext_AuthorityA
, *PSecPkgContext_AuthorityA
;
613 typedef struct _SecPkgContext_AuthorityW
615 SEC_WCHAR
*sAuthorityName
;
616 } SecPkgContext_AuthorityW
, *PSecPkgContext_AuthorityW
;
618 #define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority)
619 #define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority)
621 typedef struct _SecPkgContext_ProtoInfoA
623 SEC_CHAR
*sProtocolName
;
626 } SecPkgContext_ProtoInfoA
, *PSecPkgContext_ProtoInfoA
;
628 typedef struct _SecPkgContext_ProtoInfoW
630 SEC_WCHAR
*sProtocolName
;
633 } SecPkgContext_ProtoInfoW
, *PSecPkgContext_ProtoInfoW
;
635 #define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo)
636 #define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo)
638 typedef struct _SecPkgContext_PasswordExpiry
640 TimeStamp tsPasswordExpires
;
641 } SecPkgContext_PasswordExpiry
, *PSecPkgContext_PasswordExpiry
;
643 typedef struct _SecPkgContext_SessionKey
{
644 ULONG SessionKeyLength
;
645 _Field_size_bytes_(SessionKeyLength
) unsigned char *SessionKey
;
646 } SecPkgContext_SessionKey
, *PSecPkgContext_SessionKey
;
648 typedef struct _SecPkgContext_PackageInfoA
650 PSecPkgInfoA PackageInfo
;
651 } SecPkgContext_PackageInfoA
, *PSecPkgContext_PackageInfoA
;
653 typedef struct _SecPkgContext_PackageInfoW
655 PSecPkgInfoW PackageInfo
;
656 } SecPkgContext_PackageInfoW
, *PSecPkgContext_PackageInfoW
;
658 #define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo)
659 #define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo)
661 typedef struct _SecPkgContext_Flags
664 } SecPkgContext_Flags
, *PSecPkgContext_Flags
;
666 typedef struct _SecPkgContext_UserFlags
669 } SecPkgContext_UserFlags
, *PSecPkgContext_UserFlags
;
671 typedef struct _SecPkgContext_NegotiationInfoA
673 PSecPkgInfoA PackageInfo
;
674 ULONG NegotiationState
;
675 } SecPkgContext_NegotiationInfoA
, *PSecPkgContext_NegotiationInfoA
;
677 typedef struct _SecPkgContext_NegotiationInfoW
679 PSecPkgInfoW PackageInfo
;
680 ULONG NegotiationState
;
681 } SecPkgContext_NegotiationInfoW
, *PSecPkgContext_NegotiationInfoW
;
683 #define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo)
684 #define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo)
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
693 typedef struct _SecPkgContext_NativeNamesA
695 SEC_CHAR
*sClientName
;
696 SEC_CHAR
*sServerName
;
697 } SecPkgContext_NativeNamesA
, *PSecPkgContext_NativeNamesA
;
699 typedef struct _SecPkgContext_NativeNamesW
701 SEC_WCHAR
*sClientName
;
702 SEC_WCHAR
*sServerName
;
703 } SecPkgContext_NativeNamesW
, *PSecPkgContext_NativeNamesW
;
705 #define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames)
706 #define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames)
708 typedef struct _SecPkgContext_CredentialNameA
710 ULONG CredentialType
;
711 SEC_CHAR
*sCredentialName
;
712 } SecPkgContext_CredentialNameA
, *PSecPkgContext_CredentialNameA
;
714 typedef struct _SecPkgContext_CredentialNameW
716 ULONG CredentialType
;
717 SEC_WCHAR
*sCredentialName
;
718 } SecPkgContext_CredentialNameW
, *PSecPkgContext_CredentialNameW
;
720 #define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName)
721 #define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName)
723 typedef struct _SecPkgContext_AccessToken
726 } SecPkgContext_AccessToken
, *PSecPkgContext_AccessToken
;
728 typedef struct _SecPkgContext_TargetInformation
730 ULONG MarshalledTargetInfoLength
;
731 unsigned char *MarshalledTargetInfo
;
732 } SecPkgContext_TargetInformation
, *PSecPkgContext_TargetInformation
;
734 typedef struct _SecPkgContext_AuthzID
738 } SecPkgContext_AuthzID
, *PSecPkgContext_AuthzID
;
740 typedef struct _SecPkgContext_Target
744 } SecPkgContext_Target
, *PSecPkgContext_Target
;
746 typedef struct _SecPkgContext_Bindings
748 ULONG BindingsLength
;
749 SEC_CHANNEL_BINDINGS
*Bindings
;
750 } SecPkgContext_Bindings
, *PSecPkgContext_Bindings
;
755 ImpersonateSecurityContext(
756 _In_ PCtxtHandle phContext
);
758 typedef SECURITY_STATUS (SEC_ENTRY
*IMPERSONATE_SECURITY_CONTEXT_FN
)
761 SECURITY_STATUS SEC_ENTRY
RevertSecurityContext(_In_ PCtxtHandle phContext
);
763 typedef SECURITY_STATUS (SEC_ENTRY
*REVERT_SECURITY_CONTEXT_FN
)(PCtxtHandle
);
768 _In_ PCtxtHandle phContext
,
770 _In_ PSecBufferDesc pMessage
,
771 _In_ ULONG MessageSeqNo
);
773 typedef SECURITY_STATUS (SEC_ENTRY
*MAKE_SIGNATURE_FN
)(PCtxtHandle
,
774 ULONG
, PSecBufferDesc
, ULONG
);
779 _In_ PCtxtHandle phContext
,
780 _In_ PSecBufferDesc pMessage
,
781 _In_ ULONG MessageSeqNo
,
784 typedef SECURITY_STATUS (SEC_ENTRY
*VERIFY_SIGNATURE_FN
)(PCtxtHandle
,
785 PSecBufferDesc
, ULONG
, PULONG
);
789 QuerySecurityPackageInfoA(
790 _In_ SEC_CHAR
*pszPackageName
,
791 _Outptr_ PSecPkgInfoA
*ppPackageInfo
);
795 QuerySecurityPackageInfoW(
796 _In_ SEC_WCHAR
*pszPackageName
,
797 _Outptr_ PSecPkgInfoW
*ppPackageInfo
);
799 #define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo)
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_)
809 ExportSecurityContext(
810 _In_ PCtxtHandle phContext
,
812 _Out_ PSecBuffer pPackedContext
,
813 _Out_
void **pToken
);
815 typedef SECURITY_STATUS (SEC_ENTRY
*EXPORT_SECURITY_CONTEXT_FN
)(PCtxtHandle
,
816 ULONG
, PSecBuffer
, void **);
818 /* values for ExportSecurityContext fFlags */
819 #define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
820 #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
824 ImportSecurityContextA(
825 _In_ SEC_CHAR
*pszPackage
,
826 _In_ PSecBuffer pPackedContext
,
828 _Out_ PCtxtHandle phContext
);
832 ImportSecurityContextW(
833 _In_ SEC_WCHAR
*pszPackage
,
834 _In_ PSecBuffer pPackedContext
,
836 _Out_ PCtxtHandle phContext
);
838 #define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext)
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_)
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
);
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
);
870 #define AddCredentials WINELIB_NAME_AW(AddCredentials)
872 typedef SECURITY_STATUS (SEC_ENTRY
*ADD_CREDENTIALS_FN_A
)(PCredHandle
,
873 SEC_CHAR
*, SEC_CHAR
*, ULONG
, void *, SEC_GET_KEY_FN
, void *,
875 typedef SECURITY_STATUS (SEC_ENTRY
*ADD_CREDENTIALS_FN_W
)(PCredHandle
,
876 SEC_WCHAR
*, SEC_WCHAR
*, ULONG
, void *, SEC_GET_KEY_FN
, void *,
881 QuerySecurityContextToken(
882 _In_ PCtxtHandle phContext
,
883 _Out_ HANDLE
*phToken
);
885 typedef SECURITY_STATUS (SEC_ENTRY
*QUERY_SECURITY_CONTEXT_TOKEN_FN
)
886 (PCtxtHandle
, HANDLE
*);
891 _In_ PCtxtHandle phContext
,
893 _In_ PSecBufferDesc pMessage
,
894 _In_ ULONG MessageSeqNo
);
899 _In_ PCtxtHandle phContext
,
900 _In_ PSecBufferDesc pMessage
,
901 _In_ ULONG MessageSeqNo
,
902 _Out_opt_ PULONG pfQOP
);
904 /* values for EncryptMessage fQOP */
905 #define SECQOP_WRAP_NO_ENCRYPT 0x80000001
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
);
914 SetContextAttributesA(
915 _In_ PCtxtHandle phContext
,
916 _In_ ULONG ulAttribute
,
917 _In_reads_bytes_(cbBuffer
) void *pBuffer
,
918 _In_ ULONG cbBuffer
);
922 SetContextAttributesW(
923 _In_ PCtxtHandle phContext
,
924 _In_ ULONG ulAttribute
,
925 _In_reads_bytes_(cbBuffer
) void *pBuffer
,
926 _In_ ULONG cbBuffer
);
928 #define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes)
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
);
935 #define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
936 #define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
937 #define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
939 typedef struct _SECURITY_FUNCTION_TABLE_A
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
;
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
;
961 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext
;
962 IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA
;
963 ADD_CREDENTIALS_FN_A AddCredentialsA
;
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
;
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
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
;
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
;
996 EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext
;
997 IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW
;
998 ADD_CREDENTIALS_FN_W AddCredentialsW
;
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
;
1006 #define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable)
1007 #define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable)
1009 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
1010 #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
1012 PSecurityFunctionTableA SEC_ENTRY
InitSecurityInterfaceA(void);
1013 PSecurityFunctionTableW SEC_ENTRY
InitSecurityInterfaceW(void);
1014 #define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface)
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_)
1024 #endif /* ndef __WINE_SSPI_H__ */