blob: cf41298a631ad4f74a22aa1af3d850df792d83ee [file] [log] [blame]
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* Authors: Ellery Newcomer
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC src/core/sys/windows/_sspi.d)
*/
module core.sys.windows.sspi;
version (Windows):
@system:
version (ANSI) {} else version = Unicode;
import core.sys.windows.windef;
import core.sys.windows.ntdef;
import core.sys.windows.w32api;
import core.sys.windows.security;
import core.sys.windows.ntsecapi;
import core.sys.windows.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;
}