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__ */ 1025