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