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