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