Artifact e02537c1e2b2a8a211ab79d34e6b4b963061936d
- File
src/win32/sspi.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
/***********************************************************************\ * sspi.d * * * * Windows API header module * * * * Translated from MinGW Windows headers * * by Ellery Newcomer * * * * Placed into public domain * \***********************************************************************/ module win32.sspi; import win32.windef; import win32.ntdef; import win32.w32api; import win32.security; import win32.ntsecapi; import win32.subauth; enum :ULONG{ SECPKG_CRED_INBOUND = 1, SECPKG_CRED_OUTBOUND = 2, SECPKG_CRED_BOTH = (SECPKG_CRED_OUTBOUND|SECPKG_CRED_INBOUND), SECPKG_CRED_ATTR_NAMES = 1, } enum :ULONG{ SECPKG_FLAG_INTEGRITY = 1, SECPKG_FLAG_PRIVACY = 2, SECPKG_FLAG_TOKEN_ONLY = 4, SECPKG_FLAG_DATAGRAM = 8, SECPKG_FLAG_CONNECTION = 16, SECPKG_FLAG_MULTI_REQUIRED = 32, SECPKG_FLAG_CLIENT_ONLY = 64, SECPKG_FLAG_EXTENDED_ERROR = 128, SECPKG_FLAG_IMPERSONATION = 256, SECPKG_FLAG_ACCEPT_WIN32_NAME = 512, SECPKG_FLAG_STREAM = 1024, } enum :ULONG{ SECPKG_ATTR_AUTHORITY = 6, SECPKG_ATTR_CONNECTION_INFO = 90, SECPKG_ATTR_ISSUER_LIST = 80, SECPKG_ATTR_ISSUER_LIST_EX = 89, SECPKG_ATTR_KEY_INFO = 5, SECPKG_ATTR_LIFESPAN = 2, SECPKG_ATTR_LOCAL_CERT_CONTEXT = 84, SECPKG_ATTR_LOCAL_CRED = 82, SECPKG_ATTR_NAMES = 1, SECPKG_ATTR_PROTO_INFO = 7, SECPKG_ATTR_REMOTE_CERT_CONTEXT = 83, SECPKG_ATTR_REMOTE_CRED = 81, SECPKG_ATTR_SIZES = 0, SECPKG_ATTR_STREAM_SIZES = 4, } enum :ULONG{ SECBUFFER_EMPTY = 0, SECBUFFER_DATA = 1, SECBUFFER_TOKEN = 2, SECBUFFER_PKG_PARAMS = 3, SECBUFFER_MISSING = 4, SECBUFFER_EXTRA = 5, SECBUFFER_STREAM_TRAILER = 6, SECBUFFER_STREAM_HEADER = 7, SECBUFFER_PADDING = 9, SECBUFFER_STREAM = 10, SECBUFFER_READONLY = 0x80000000, SECBUFFER_ATTRMASK = 0xf0000000, } enum UNISP_NAME_A = "Microsoft Unified Security Protocol Provider"; enum UNISP_NAME_W = "Microsoft Unified Security Protocol Provider"w; enum SECBUFFER_VERSION = 0; alias UNICODE_STRING SECURITY_STRING; alias UNICODE_STRING* PSECURITY_STRING; extern(Windows): struct SecHandle { ULONG_PTR dwLower; ULONG_PTR dwUpper; } alias SecHandle* PSecHandle; struct SecBuffer { ULONG cbBuffer; ULONG BufferType; PVOID pvBuffer; } alias SecBuffer* PSecBuffer; alias SecHandle CredHandle; alias PSecHandle PCredHandle; alias SecHandle CtxtHandle; alias PSecHandle PCtxtHandle; struct SECURITY_INTEGER { uint LowPart; int HighPart; } alias SECURITY_INTEGER TimeStamp; alias SECURITY_INTEGER* PTimeStamp; struct SecBufferDesc { ULONG ulVersion; ULONG cBuffers; PSecBuffer pBuffers; } alias SecBufferDesc* PSecBufferDesc; struct SecPkgContext_StreamSizes { ULONG cbHeader; ULONG cbTrailer; ULONG cbMaximumMessage; ULONG cBuffers; ULONG cbBlockSize; } alias SecPkgContext_StreamSizes* PSecPkgContext_StreamSizes; struct SecPkgContext_Sizes { ULONG cbMaxToken; ULONG cbMaxSignature; ULONG cbBlockSize; ULONG cbSecurityTrailer; } alias SecPkgContext_Sizes* PSecPkgContext_Sizes; struct SecPkgContext_AuthorityW { SEC_WCHAR* sAuthorityName; } alias SecPkgContext_AuthorityW* PSecPkgContext_AuthorityW; struct SecPkgContext_AuthorityA { SEC_CHAR* sAuthorityName; } alias SecPkgContext_AuthorityA* PSecPkgContext_AuthorityA; struct SecPkgContext_KeyInfoW { SEC_WCHAR* sSignatureAlgorithmName; SEC_WCHAR* sEncryptAlgorithmName; ULONG KeySize; ULONG SignatureAlgorithm; ULONG EncryptAlgorithm; } alias SecPkgContext_KeyInfoW* PSecPkgContext_KeyInfoW; struct SecPkgContext_KeyInfoA { SEC_CHAR* sSignatureAlgorithmName; SEC_CHAR* sEncryptAlgorithmName; ULONG KeySize; ULONG SignatureAlgorithm; ULONG EncryptAlgorithm; } alias SecPkgContext_KeyInfoA* PSecPkgContext_KeyInfoA; struct SecPkgContext_LifeSpan { TimeStamp tsStart; TimeStamp tsExpiry; } alias SecPkgContext_LifeSpan* PSecPkgContext_LifeSpan; struct SecPkgContext_NamesW { SEC_WCHAR* sUserName; } alias SecPkgContext_NamesW* PSecPkgContext_NamesW; struct SecPkgContext_NamesA { SEC_CHAR* sUserName; } alias SecPkgContext_NamesA* PSecPkgContext_NamesA; struct SecPkgInfoW { ULONG fCapabilities; USHORT wVersion; USHORT wRPCID; ULONG cbMaxToken; SEC_WCHAR* Name; SEC_WCHAR* Comment; } alias SecPkgInfoW* PSecPkgInfoW; struct SecPkgInfoA { ULONG fCapabilities; USHORT wVersion; USHORT wRPCID; ULONG cbMaxToken; SEC_CHAR* Name; SEC_CHAR* Comment; } alias SecPkgInfoA* PSecPkgInfoA; /* supported only in win2k+, so it should be a PSecPkgInfoW */ /* PSDK does not say it has ANSI/Unicode versions */ struct SecPkgContext_PackageInfo { PSecPkgInfoW PackageInfo; } alias SecPkgContext_PackageInfo* PSecPkgContext_PackageInfo; struct SecPkgCredentials_NamesW { SEC_WCHAR* sUserName; } alias SecPkgCredentials_NamesW* PSecPkgCredentials_NamesW; struct SecPkgCredentials_NamesA { SEC_CHAR* sUserName; } alias SecPkgCredentials_NamesA* PSecPkgCredentials_NamesA; /* TODO: missing type in SDK */ alias void function() SEC_GET_KEY_FN; alias SECURITY_STATUS function(PULONG,PSecPkgInfoW*) ENUMERATE_SECURITY_PACKAGES_FN_W; alias SECURITY_STATUS function(PULONG,PSecPkgInfoA*) ENUMERATE_SECURITY_PACKAGES_FN_A; alias SECURITY_STATUS function(PCredHandle,ULONG,PVOID) QUERY_CREDENTIALS_ATTRIBUTES_FN_W; alias SECURITY_STATUS function(PCredHandle,ULONG,PVOID) QUERY_CREDENTIALS_ATTRIBUTES_FN_A; alias SECURITY_STATUS function(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp) ACQUIRE_CREDENTIALS_HANDLE_FN_W; alias SECURITY_STATUS function(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp) ACQUIRE_CREDENTIALS_HANDLE_FN_A; alias SECURITY_STATUS function(PCredHandle) FREE_CREDENTIALS_HANDLE_FN; alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) INITIALIZE_SECURITY_CONTEXT_FN_W; alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) INITIALIZE_SECURITY_CONTEXT_FN_A; alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) ACCEPT_SECURITY_CONTEXT_FN; alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) COMPLETE_AUTH_TOKEN_FN; alias SECURITY_STATUS function(PCtxtHandle) DELETE_SECURITY_CONTEXT_FN; alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) APPLY_CONTROL_TOKEN_FN_W; alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) APPLY_CONTROL_TOKEN_FN_A; alias SECURITY_STATUS function(PCtxtHandle,ULONG,PVOID) QUERY_CONTEXT_ATTRIBUTES_FN_A; alias SECURITY_STATUS function(PCtxtHandle,ULONG,PVOID) QUERY_CONTEXT_ATTRIBUTES_FN_W; alias SECURITY_STATUS function(PCtxtHandle) IMPERSONATE_SECURITY_CONTEXT_FN; alias SECURITY_STATUS function(PCtxtHandle) REVERT_SECURITY_CONTEXT_FN; alias SECURITY_STATUS function(PCtxtHandle,ULONG,PSecBufferDesc,ULONG) MAKE_SIGNATURE_FN; alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc,ULONG,PULONG) VERIFY_SIGNATURE_FN; alias SECURITY_STATUS function(PVOID) FREE_CONTEXT_BUFFER_FN; alias SECURITY_STATUS function(SEC_CHAR*,PSecPkgInfoA*) QUERY_SECURITY_PACKAGE_INFO_FN_A; alias SECURITY_STATUS function(PCtxtHandle,HANDLE*) QUERY_SECURITY_CONTEXT_TOKEN_FN; alias SECURITY_STATUS function(SEC_WCHAR*,PSecPkgInfoW*) QUERY_SECURITY_PACKAGE_INFO_FN_W; alias SECURITY_STATUS function(PCtxtHandle,ULONG,PSecBufferDesc,ULONG) ENCRYPT_MESSAGE_FN; alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc,ULONG,PULONG) DECRYPT_MESSAGE_FN; /* No, it really is FreeCredentialsHandle, see the thread beginning * http://sourceforge.net/mailarchive/message.php?msg_id=4321080 for a * discovery discussion. */ struct SecurityFunctionTableW{ uint dwVersion; ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW; QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW; ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW; FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; void* Reserved2; INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW; ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; APPLY_CONTROL_TOKEN_FN_W ApplyControlTokenW; QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW; IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; MAKE_SIGNATURE_FN MakeSignature; VERIFY_SIGNATURE_FN VerifySignature; FREE_CONTEXT_BUFFER_FN FreeContextBuffer; QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW; void* Reserved3; void* Reserved4; void* Reserved5; void* Reserved6; void* Reserved7; void* Reserved8; QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken; ENCRYPT_MESSAGE_FN EncryptMessage; DECRYPT_MESSAGE_FN DecryptMessage; } alias SecurityFunctionTableW* PSecurityFunctionTableW; struct SecurityFunctionTableA{ uint dwVersion; ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA; QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA; ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA; FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; void* Reserved2; INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA; ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; APPLY_CONTROL_TOKEN_FN_A ApplyControlTokenA; QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA; IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; MAKE_SIGNATURE_FN MakeSignature; VERIFY_SIGNATURE_FN VerifySignature; FREE_CONTEXT_BUFFER_FN FreeContextBuffer; QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA; void* Reserved3; void* Reserved4; void* Unknown1; void* Unknown2; void* Unknown3; void* Unknown4; void* Unknown5; ENCRYPT_MESSAGE_FN EncryptMessage; DECRYPT_MESSAGE_FN DecryptMessage; } alias SecurityFunctionTableA* PSecurityFunctionTableA; alias PSecurityFunctionTableA function() INIT_SECURITY_INTERFACE_A; alias PSecurityFunctionTableW function() INIT_SECURITY_INTERFACE_W; SECURITY_STATUS FreeCredentialsHandle(PCredHandle); SECURITY_STATUS EnumerateSecurityPackagesA(PULONG,PSecPkgInfoA*); SECURITY_STATUS EnumerateSecurityPackagesW(PULONG,PSecPkgInfoW*); SECURITY_STATUS AcquireCredentialsHandleA(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); SECURITY_STATUS AcquireCredentialsHandleW(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp); SECURITY_STATUS AcceptSecurityContext(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); SECURITY_STATUS InitializeSecurityContextA(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); SECURITY_STATUS InitializeSecurityContextW(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp); SECURITY_STATUS FreeContextBuffer(PVOID); SECURITY_STATUS QueryContextAttributesA(PCtxtHandle,ULONG,PVOID); SECURITY_STATUS QueryContextAttributesW(PCtxtHandle,ULONG,PVOID); SECURITY_STATUS QueryCredentialsAttributesA(PCredHandle,ULONG,PVOID); SECURITY_STATUS QueryCredentialsAttributesW(PCredHandle,ULONG,PVOID); static if(_WIN32_WINNT >= 0x500){ SECURITY_STATUS QuerySecurityContextToken(PCtxtHandle,HANDLE*); } SECURITY_STATUS DecryptMessage(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); SECURITY_STATUS EncryptMessage(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); SECURITY_STATUS DeleteSecurityContext(PCtxtHandle); SECURITY_STATUS CompleteAuthToken(PCtxtHandle,PSecBufferDesc); SECURITY_STATUS ApplyControlTokenA(PCtxtHandle,PSecBufferDesc); SECURITY_STATUS ApplyControlTokenW(PCtxtHandle,PSecBufferDesc); SECURITY_STATUS ImpersonateSecurityContext(PCtxtHandle); SECURITY_STATUS RevertSecurityContext(PCtxtHandle); SECURITY_STATUS MakeSignature(PCtxtHandle,ULONG,PSecBufferDesc,ULONG); SECURITY_STATUS VerifySignature(PCtxtHandle,PSecBufferDesc,ULONG,PULONG); SECURITY_STATUS QuerySecurityPackageInfoA(SEC_CHAR*,PSecPkgInfoA*); SECURITY_STATUS QuerySecurityPackageInfoW(SEC_WCHAR*,PSecPkgInfoW*); PSecurityFunctionTableA InitSecurityInterfaceA(); PSecurityFunctionTableW InitSecurityInterfaceW(); version(Unicode) { alias UNISP_NAME_W UNISP_NAME; alias SecPkgInfoW SecPkgInfo; alias PSecPkgInfoW PSecPkgInfo; alias SecPkgCredentials_NamesW SecPkgCredentials_Names; alias PSecPkgCredentials_NamesW PSecPkgCredentials_Names; alias SecPkgContext_AuthorityW SecPkgContext_Authority; alias PSecPkgContext_AuthorityW PSecPkgContext_Authority; alias SecPkgContext_KeyInfoW SecPkgContext_KeyInfo; alias PSecPkgContext_KeyInfoW PSecPkgContext_KeyInfo; alias SecPkgContext_NamesW SecPkgContext_Names; alias PSecPkgContext_NamesW PSecPkgContext_Names; alias SecurityFunctionTableW SecurityFunctionTable; alias PSecurityFunctionTableW PSecurityFunctionTable; alias AcquireCredentialsHandleW AcquireCredentialsHandle; alias EnumerateSecurityPackagesW EnumerateSecurityPackages; alias InitializeSecurityContextW InitializeSecurityContext; alias QueryContextAttributesW QueryContextAttributes; alias QueryCredentialsAttributesW QueryCredentialsAttributes; alias QuerySecurityPackageInfoW QuerySecurityPackageInfo; alias ApplyControlTokenW ApplyControlToken; alias ENUMERATE_SECURITY_PACKAGES_FN_W ENUMERATE_SECURITY_PACKAGES_FN; alias QUERY_CREDENTIALS_ATTRIBUTES_FN_W QUERY_CREDENTIALS_ATTRIBUTES_FN; alias ACQUIRE_CREDENTIALS_HANDLE_FN_W ACQUIRE_CREDENTIALS_HANDLE_FN; alias INITIALIZE_SECURITY_CONTEXT_FN_W INITIALIZE_SECURITY_CONTEXT_FN; alias APPLY_CONTROL_TOKEN_FN_W APPLY_CONTROL_TOKEN_FN; alias QUERY_CONTEXT_ATTRIBUTES_FN_W QUERY_CONTEXT_ATTRIBUTES_FN; alias QUERY_SECURITY_PACKAGE_INFO_FN_W QUERY_SECURITY_PACKAGE_INFO_FN; alias INIT_SECURITY_INTERFACE_W INIT_SECURITY_INTERFACE; }else{ alias UNISP_NAME_A UNISP_NAME; alias SecPkgInfoA SecPkgInfo; alias PSecPkgInfoA PSecPkgInfo; alias SecPkgCredentials_NamesA SecPkgCredentials_Names; alias PSecPkgCredentials_NamesA PSecPkgCredentials_Names; alias SecPkgContext_AuthorityA SecPkgContext_Authority; alias PSecPkgContext_AuthorityA PSecPkgContext_Authority; alias SecPkgContext_KeyInfoA SecPkgContext_KeyInfo; alias PSecPkgContext_KeyInfoA PSecPkgContext_KeyInfo; alias SecPkgContext_NamesA SecPkgContext_Names; alias PSecPkgContext_NamesA PSecPkgContext_Names; alias SecurityFunctionTableA SecurityFunctionTable; alias PSecurityFunctionTableA PSecurityFunctionTable; alias AcquireCredentialsHandleA AcquireCredentialsHandle; alias EnumerateSecurityPackagesA EnumerateSecurityPackages; alias InitializeSecurityContextA InitializeSecurityContext; alias QueryContextAttributesA QueryContextAttributes; alias QueryCredentialsAttributesA QueryCredentialsAttributes; alias QuerySecurityPackageInfoA QuerySecurityPackageInfo; alias ApplyControlTokenA ApplyControlToken; alias ENUMERATE_SECURITY_PACKAGES_FN_A ENUMERATE_SECURITY_PACKAGES_FN; alias QUERY_CREDENTIALS_ATTRIBUTES_FN_A QUERY_CREDENTIALS_ATTRIBUTES_FN; alias ACQUIRE_CREDENTIALS_HANDLE_FN_A ACQUIRE_CREDENTIALS_HANDLE_FN; alias INITIALIZE_SECURITY_CONTEXT_FN_A INITIALIZE_SECURITY_CONTEXT_FN; alias APPLY_CONTROL_TOKEN_FN_A APPLY_CONTROL_TOKEN_FN; alias QUERY_CONTEXT_ATTRIBUTES_FN_A QUERY_CONTEXT_ATTRIBUTES_FN; alias QUERY_SECURITY_PACKAGE_INFO_FN_A QUERY_SECURITY_PACKAGE_INFO_FN; alias INIT_SECURITY_INTERFACE_A INIT_SECURITY_INTERFACE; }