1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW Windows headers
5  *
6  * Authors: Ellery Newcomer
7  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8  * Source: $(DRUNTIMESRC src/core/sys/windows/_sspi.d)
9  */
10 module core.sys.windows.sspi;
version(Windows)11 version (Windows):
12 @system:
13 
14 version (ANSI) {} else version = Unicode;
15 
16 import core.sys.windows.windef;
17 import core.sys.windows.ntdef;
18 import core.sys.windows.w32api;
19 import core.sys.windows.security;
20 import core.sys.windows.ntsecapi;
21 import core.sys.windows.subauth;
22 
23 enum :ULONG{
24     SECPKG_CRED_INBOUND = 1,
25     SECPKG_CRED_OUTBOUND = 2,
26     SECPKG_CRED_BOTH = (SECPKG_CRED_OUTBOUND|SECPKG_CRED_INBOUND),
27     SECPKG_CRED_ATTR_NAMES = 1,
28 }
29 
30 enum :ULONG{
31     SECPKG_FLAG_INTEGRITY = 1,
32     SECPKG_FLAG_PRIVACY = 2,
33     SECPKG_FLAG_TOKEN_ONLY = 4,
34     SECPKG_FLAG_DATAGRAM = 8,
35     SECPKG_FLAG_CONNECTION = 16,
36     SECPKG_FLAG_MULTI_REQUIRED = 32,
37     SECPKG_FLAG_CLIENT_ONLY = 64,
38     SECPKG_FLAG_EXTENDED_ERROR = 128,
39     SECPKG_FLAG_IMPERSONATION = 256,
40     SECPKG_FLAG_ACCEPT_WIN32_NAME = 512,
41     SECPKG_FLAG_STREAM = 1024,
42 }
43 
44 enum :ULONG{
45     SECPKG_ATTR_AUTHORITY = 6,
46     SECPKG_ATTR_CONNECTION_INFO = 90,
47     SECPKG_ATTR_ISSUER_LIST = 80,
48     SECPKG_ATTR_ISSUER_LIST_EX = 89,
49     SECPKG_ATTR_KEY_INFO = 5,
50     SECPKG_ATTR_LIFESPAN = 2,
51     SECPKG_ATTR_LOCAL_CERT_CONTEXT = 84,
52     SECPKG_ATTR_LOCAL_CRED = 82,
53     SECPKG_ATTR_NAMES = 1,
54     SECPKG_ATTR_PROTO_INFO = 7,
55     SECPKG_ATTR_REMOTE_CERT_CONTEXT = 83,
56     SECPKG_ATTR_REMOTE_CRED = 81,
57     SECPKG_ATTR_SIZES = 0,
58     SECPKG_ATTR_STREAM_SIZES = 4,
59 }
60 
61 enum :ULONG{
62     SECBUFFER_EMPTY = 0,
63     SECBUFFER_DATA = 1,
64     SECBUFFER_TOKEN = 2,
65     SECBUFFER_PKG_PARAMS = 3,
66     SECBUFFER_MISSING = 4,
67     SECBUFFER_EXTRA = 5,
68     SECBUFFER_STREAM_TRAILER = 6,
69     SECBUFFER_STREAM_HEADER = 7,
70     SECBUFFER_PADDING = 9,
71     SECBUFFER_STREAM = 10,
72     SECBUFFER_READONLY = 0x80000000,
73     SECBUFFER_ATTRMASK = 0xf0000000,
74 }
75 
76 enum UNISP_NAME_A = "Microsoft Unified Security Protocol Provider";
77 enum UNISP_NAME_W = "Microsoft Unified Security Protocol Provider"w;
78 enum SECBUFFER_VERSION = 0;
79 
80 alias UNICODE_STRING SECURITY_STRING;
81 alias UNICODE_STRING* PSECURITY_STRING;
82 
83 extern(Windows):
84 
85 struct SecHandle {
86     ULONG_PTR dwLower;
87     ULONG_PTR dwUpper;
88 }
89 alias SecHandle* PSecHandle;
90 struct SecBuffer {
91     ULONG cbBuffer;
92     ULONG BufferType;
93     PVOID pvBuffer;
94 }
95 alias SecBuffer* PSecBuffer;
96 alias SecHandle CredHandle;
97 alias PSecHandle PCredHandle;
98 alias SecHandle CtxtHandle;
99 alias PSecHandle PCtxtHandle;
100 struct SECURITY_INTEGER {
101     uint LowPart;
102     int HighPart;
103 }
104 alias SECURITY_INTEGER TimeStamp;
105 alias SECURITY_INTEGER* PTimeStamp;
106 struct SecBufferDesc {
107     ULONG ulVersion;
108     ULONG cBuffers;
109     PSecBuffer pBuffers;
110 }
111 alias SecBufferDesc* PSecBufferDesc;
112 struct SecPkgContext_StreamSizes {
113     ULONG cbHeader;
114     ULONG cbTrailer;
115     ULONG cbMaximumMessage;
116     ULONG cBuffers;
117     ULONG cbBlockSize;
118 }
119 alias SecPkgContext_StreamSizes* PSecPkgContext_StreamSizes;
120 struct SecPkgContext_Sizes {
121     ULONG cbMaxToken;
122     ULONG cbMaxSignature;
123     ULONG cbBlockSize;
124     ULONG cbSecurityTrailer;
125 }
126 alias SecPkgContext_Sizes* PSecPkgContext_Sizes;
127 struct SecPkgContext_AuthorityW {
128     SEC_WCHAR* sAuthorityName;
129 }
130 alias SecPkgContext_AuthorityW* PSecPkgContext_AuthorityW;
131 struct SecPkgContext_AuthorityA {
132     SEC_CHAR* sAuthorityName;
133 }
134 alias SecPkgContext_AuthorityA* PSecPkgContext_AuthorityA;
135 struct SecPkgContext_KeyInfoW {
136     SEC_WCHAR* sSignatureAlgorithmName;
137     SEC_WCHAR* sEncryptAlgorithmName;
138     ULONG KeySize;
139     ULONG SignatureAlgorithm;
140     ULONG EncryptAlgorithm;
141 }
142 alias SecPkgContext_KeyInfoW* PSecPkgContext_KeyInfoW;
143 struct SecPkgContext_KeyInfoA {
144     SEC_CHAR* sSignatureAlgorithmName;
145     SEC_CHAR* sEncryptAlgorithmName;
146     ULONG KeySize;
147     ULONG SignatureAlgorithm;
148     ULONG EncryptAlgorithm;
149 }
150 alias SecPkgContext_KeyInfoA* PSecPkgContext_KeyInfoA;
151 struct SecPkgContext_LifeSpan {
152     TimeStamp tsStart;
153     TimeStamp tsExpiry;
154 }
155 alias SecPkgContext_LifeSpan* PSecPkgContext_LifeSpan;
156 struct SecPkgContext_NamesW {
157     SEC_WCHAR* sUserName;
158 }
159 alias SecPkgContext_NamesW* PSecPkgContext_NamesW;
160 struct SecPkgContext_NamesA {
161     SEC_CHAR* sUserName;
162 }
163 alias SecPkgContext_NamesA* PSecPkgContext_NamesA;
164 struct SecPkgInfoW {
165     ULONG fCapabilities;
166     USHORT wVersion;
167     USHORT wRPCID;
168     ULONG cbMaxToken;
169     SEC_WCHAR* Name;
170     SEC_WCHAR* Comment;
171 }
172 alias SecPkgInfoW* PSecPkgInfoW;
173 struct SecPkgInfoA {
174     ULONG fCapabilities;
175     USHORT wVersion;
176     USHORT wRPCID;
177     ULONG cbMaxToken;
178     SEC_CHAR* Name;
179     SEC_CHAR* Comment;
180 }
181 alias SecPkgInfoA* PSecPkgInfoA;
182 /* supported only in win2k+, so it should be a PSecPkgInfoW */
183 /* PSDK does not say it has ANSI/Unicode versions */
184 struct SecPkgContext_PackageInfo {
185     PSecPkgInfoW PackageInfo;
186 }
187 alias SecPkgContext_PackageInfo* PSecPkgContext_PackageInfo;
188 struct SecPkgCredentials_NamesW {
189     SEC_WCHAR* sUserName;
190 }
191 alias SecPkgCredentials_NamesW* PSecPkgCredentials_NamesW;
192 struct SecPkgCredentials_NamesA {
193     SEC_CHAR* sUserName;
194 }
195 alias SecPkgCredentials_NamesA* PSecPkgCredentials_NamesA;
196 
197 /* TODO: missing type in SDK */
198 alias void function() SEC_GET_KEY_FN;
199 
200 alias SECURITY_STATUS function(PULONG,PSecPkgInfoW*) ENUMERATE_SECURITY_PACKAGES_FN_W;
201 alias SECURITY_STATUS function(PULONG,PSecPkgInfoA*) ENUMERATE_SECURITY_PACKAGES_FN_A;
202 alias SECURITY_STATUS function(PCredHandle,ULONG,PVOID) QUERY_CREDENTIALS_ATTRIBUTES_FN_W;
203 alias SECURITY_STATUS function(PCredHandle,ULONG,PVOID) QUERY_CREDENTIALS_ATTRIBUTES_FN_A;
204 alias SECURITY_STATUS function(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp) ACQUIRE_CREDENTIALS_HANDLE_FN_W;
205 alias SECURITY_STATUS function(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp) ACQUIRE_CREDENTIALS_HANDLE_FN_A;
206 alias SECURITY_STATUS function(PCredHandle) FREE_CREDENTIALS_HANDLE_FN;
207 alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) INITIALIZE_SECURITY_CONTEXT_FN_W;
208 alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) INITIALIZE_SECURITY_CONTEXT_FN_A;
209 alias SECURITY_STATUS function(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp) ACCEPT_SECURITY_CONTEXT_FN;
210 alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) COMPLETE_AUTH_TOKEN_FN;
211 alias SECURITY_STATUS function(PCtxtHandle) DELETE_SECURITY_CONTEXT_FN;
212 alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) APPLY_CONTROL_TOKEN_FN_W;
213 alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc) APPLY_CONTROL_TOKEN_FN_A;
214 alias SECURITY_STATUS function(PCtxtHandle,ULONG,PVOID) QUERY_CONTEXT_ATTRIBUTES_FN_A;
215 alias SECURITY_STATUS function(PCtxtHandle,ULONG,PVOID) QUERY_CONTEXT_ATTRIBUTES_FN_W;
216 alias SECURITY_STATUS function(PCtxtHandle) IMPERSONATE_SECURITY_CONTEXT_FN;
217 alias SECURITY_STATUS function(PCtxtHandle) REVERT_SECURITY_CONTEXT_FN;
218 alias SECURITY_STATUS function(PCtxtHandle,ULONG,PSecBufferDesc,ULONG) MAKE_SIGNATURE_FN;
219 alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc,ULONG,PULONG) VERIFY_SIGNATURE_FN;
220 alias SECURITY_STATUS function(PVOID) FREE_CONTEXT_BUFFER_FN;
221 alias SECURITY_STATUS function(SEC_CHAR*,PSecPkgInfoA*) QUERY_SECURITY_PACKAGE_INFO_FN_A;
222 alias SECURITY_STATUS function(PCtxtHandle,HANDLE*) QUERY_SECURITY_CONTEXT_TOKEN_FN;
223 alias SECURITY_STATUS function(SEC_WCHAR*,PSecPkgInfoW*) QUERY_SECURITY_PACKAGE_INFO_FN_W;
224 alias SECURITY_STATUS function(PCtxtHandle,ULONG,PSecBufferDesc,ULONG) ENCRYPT_MESSAGE_FN;
225 alias SECURITY_STATUS function(PCtxtHandle,PSecBufferDesc,ULONG,PULONG) DECRYPT_MESSAGE_FN;
226 
227 /* No, it really is FreeCredentialsHandle, see the thread beginning
228  * http://sourceforge.net/mailarchive/message.php?msg_id=4321080 for a
229  * discovery discussion. */
230 struct SecurityFunctionTableW{
231     uint dwVersion;
232     ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
233     QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
234     ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
235     FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
236     void* Reserved2;
237     INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
238     ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
239     COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
240     DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
241     APPLY_CONTROL_TOKEN_FN_W ApplyControlTokenW;
242     QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
243     IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
244     REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
245     MAKE_SIGNATURE_FN MakeSignature;
246     VERIFY_SIGNATURE_FN VerifySignature;
247     FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
248     QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
249     void* Reserved3;
250     void* Reserved4;
251     void* Reserved5;
252     void* Reserved6;
253     void* Reserved7;
254     void* Reserved8;
255     QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
256     ENCRYPT_MESSAGE_FN EncryptMessage;
257     DECRYPT_MESSAGE_FN DecryptMessage;
258 }
259 alias SecurityFunctionTableW* PSecurityFunctionTableW;
260 struct SecurityFunctionTableA{
261     uint dwVersion;
262     ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
263     QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
264     ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
265     FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
266     void* Reserved2;
267     INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
268     ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
269     COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
270     DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
271     APPLY_CONTROL_TOKEN_FN_A ApplyControlTokenA;
272     QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
273     IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
274     REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
275     MAKE_SIGNATURE_FN MakeSignature;
276     VERIFY_SIGNATURE_FN VerifySignature;
277     FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
278     QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
279     void* Reserved3;
280     void* Reserved4;
281     void* Unknown1;
282     void* Unknown2;
283     void* Unknown3;
284     void* Unknown4;
285     void* Unknown5;
286     ENCRYPT_MESSAGE_FN EncryptMessage;
287     DECRYPT_MESSAGE_FN DecryptMessage;
288 }
289 alias SecurityFunctionTableA* PSecurityFunctionTableA;
290 alias PSecurityFunctionTableA function() INIT_SECURITY_INTERFACE_A;
291 alias PSecurityFunctionTableW function() INIT_SECURITY_INTERFACE_W;
292 
293 SECURITY_STATUS FreeCredentialsHandle(PCredHandle);
294 SECURITY_STATUS EnumerateSecurityPackagesA(PULONG,PSecPkgInfoA*);
295 SECURITY_STATUS EnumerateSecurityPackagesW(PULONG,PSecPkgInfoW*);
296 SECURITY_STATUS AcquireCredentialsHandleA(SEC_CHAR*,SEC_CHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
297 SECURITY_STATUS AcquireCredentialsHandleW(SEC_WCHAR*,SEC_WCHAR*,ULONG,PLUID,PVOID,SEC_GET_KEY_FN,PVOID,PCredHandle,PTimeStamp);
298 SECURITY_STATUS AcceptSecurityContext(PCredHandle,PCtxtHandle,PSecBufferDesc,ULONG,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
299 SECURITY_STATUS InitializeSecurityContextA(PCredHandle,PCtxtHandle,SEC_CHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
300 SECURITY_STATUS InitializeSecurityContextW(PCredHandle,PCtxtHandle,SEC_WCHAR*,ULONG,ULONG,ULONG,PSecBufferDesc,ULONG,PCtxtHandle,PSecBufferDesc,PULONG,PTimeStamp);
301 SECURITY_STATUS FreeContextBuffer(PVOID);
302 SECURITY_STATUS QueryContextAttributesA(PCtxtHandle,ULONG,PVOID);
303 SECURITY_STATUS QueryContextAttributesW(PCtxtHandle,ULONG,PVOID);
304 SECURITY_STATUS QueryCredentialsAttributesA(PCredHandle,ULONG,PVOID);
305 SECURITY_STATUS QueryCredentialsAttributesW(PCredHandle,ULONG,PVOID);
306 static if (_WIN32_WINNT >= 0x500){
307     SECURITY_STATUS QuerySecurityContextToken(PCtxtHandle,HANDLE*);
308 }
309 SECURITY_STATUS DecryptMessage(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
310 SECURITY_STATUS EncryptMessage(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
311 SECURITY_STATUS DeleteSecurityContext(PCtxtHandle);
312 SECURITY_STATUS CompleteAuthToken(PCtxtHandle,PSecBufferDesc);
313 SECURITY_STATUS ApplyControlTokenA(PCtxtHandle,PSecBufferDesc);
314 SECURITY_STATUS ApplyControlTokenW(PCtxtHandle,PSecBufferDesc);
315 SECURITY_STATUS ImpersonateSecurityContext(PCtxtHandle);
316 SECURITY_STATUS RevertSecurityContext(PCtxtHandle);
317 SECURITY_STATUS MakeSignature(PCtxtHandle,ULONG,PSecBufferDesc,ULONG);
318 SECURITY_STATUS VerifySignature(PCtxtHandle,PSecBufferDesc,ULONG,PULONG);
319 SECURITY_STATUS QuerySecurityPackageInfoA(SEC_CHAR*,PSecPkgInfoA*);
320 SECURITY_STATUS QuerySecurityPackageInfoW(SEC_WCHAR*,PSecPkgInfoW*);
321 PSecurityFunctionTableA InitSecurityInterfaceA();
322 PSecurityFunctionTableW InitSecurityInterfaceW();
323 
version(Unicode)324 version (Unicode) {
325     alias UNISP_NAME_W UNISP_NAME;
326     alias SecPkgInfoW SecPkgInfo;
327     alias PSecPkgInfoW PSecPkgInfo;
328     alias SecPkgCredentials_NamesW SecPkgCredentials_Names;
329     alias PSecPkgCredentials_NamesW PSecPkgCredentials_Names;
330     alias SecPkgContext_AuthorityW SecPkgContext_Authority;
331     alias PSecPkgContext_AuthorityW PSecPkgContext_Authority;
332     alias SecPkgContext_KeyInfoW SecPkgContext_KeyInfo;
333     alias PSecPkgContext_KeyInfoW PSecPkgContext_KeyInfo;
334     alias SecPkgContext_NamesW SecPkgContext_Names;
335     alias PSecPkgContext_NamesW PSecPkgContext_Names;
336     alias SecurityFunctionTableW SecurityFunctionTable;
337     alias PSecurityFunctionTableW PSecurityFunctionTable;
338     alias AcquireCredentialsHandleW AcquireCredentialsHandle;
339     alias EnumerateSecurityPackagesW EnumerateSecurityPackages;
340     alias InitializeSecurityContextW InitializeSecurityContext;
341     alias QueryContextAttributesW QueryContextAttributes;
342     alias QueryCredentialsAttributesW QueryCredentialsAttributes;
343     alias QuerySecurityPackageInfoW QuerySecurityPackageInfo;
344     alias ApplyControlTokenW ApplyControlToken;
345     alias ENUMERATE_SECURITY_PACKAGES_FN_W ENUMERATE_SECURITY_PACKAGES_FN;
346     alias QUERY_CREDENTIALS_ATTRIBUTES_FN_W QUERY_CREDENTIALS_ATTRIBUTES_FN;
347     alias ACQUIRE_CREDENTIALS_HANDLE_FN_W ACQUIRE_CREDENTIALS_HANDLE_FN;
348     alias INITIALIZE_SECURITY_CONTEXT_FN_W INITIALIZE_SECURITY_CONTEXT_FN;
349     alias APPLY_CONTROL_TOKEN_FN_W APPLY_CONTROL_TOKEN_FN;
350     alias QUERY_CONTEXT_ATTRIBUTES_FN_W QUERY_CONTEXT_ATTRIBUTES_FN;
351     alias QUERY_SECURITY_PACKAGE_INFO_FN_W QUERY_SECURITY_PACKAGE_INFO_FN;
352     alias INIT_SECURITY_INTERFACE_W INIT_SECURITY_INTERFACE;
353 }else{
354     alias UNISP_NAME_A UNISP_NAME;
355     alias SecPkgInfoA SecPkgInfo;
356     alias PSecPkgInfoA PSecPkgInfo;
357     alias SecPkgCredentials_NamesA SecPkgCredentials_Names;
358     alias PSecPkgCredentials_NamesA PSecPkgCredentials_Names;
359     alias SecPkgContext_AuthorityA SecPkgContext_Authority;
360     alias PSecPkgContext_AuthorityA PSecPkgContext_Authority;
361     alias SecPkgContext_KeyInfoA SecPkgContext_KeyInfo;
362     alias PSecPkgContext_KeyInfoA PSecPkgContext_KeyInfo;
363     alias SecPkgContext_NamesA SecPkgContext_Names;
364     alias PSecPkgContext_NamesA PSecPkgContext_Names;
365     alias SecurityFunctionTableA SecurityFunctionTable;
366     alias PSecurityFunctionTableA PSecurityFunctionTable;
367     alias AcquireCredentialsHandleA AcquireCredentialsHandle;
368     alias EnumerateSecurityPackagesA EnumerateSecurityPackages;
369     alias InitializeSecurityContextA InitializeSecurityContext;
370     alias QueryContextAttributesA QueryContextAttributes;
371     alias QueryCredentialsAttributesA QueryCredentialsAttributes;
372     alias QuerySecurityPackageInfoA QuerySecurityPackageInfo;
373     alias ApplyControlTokenA ApplyControlToken;
374     alias ENUMERATE_SECURITY_PACKAGES_FN_A ENUMERATE_SECURITY_PACKAGES_FN;
375     alias QUERY_CREDENTIALS_ATTRIBUTES_FN_A QUERY_CREDENTIALS_ATTRIBUTES_FN;
376     alias ACQUIRE_CREDENTIALS_HANDLE_FN_A ACQUIRE_CREDENTIALS_HANDLE_FN;
377     alias INITIALIZE_SECURITY_CONTEXT_FN_A INITIALIZE_SECURITY_CONTEXT_FN;
378     alias APPLY_CONTROL_TOKEN_FN_A APPLY_CONTROL_TOKEN_FN;
379     alias QUERY_CONTEXT_ATTRIBUTES_FN_A QUERY_CONTEXT_ATTRIBUTES_FN;
380     alias QUERY_SECURITY_PACKAGE_INFO_FN_A QUERY_SECURITY_PACKAGE_INFO_FN;
381     alias INIT_SECURITY_INTERFACE_A INIT_SECURITY_INTERFACE;
382 }
383 
384