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