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