OSDN Git Service

2012-01-06 Chris Sutcliffe <ir0nh34d@users.sf.net>
[pf3gnuchains/pf3gnuchains4x.git] / winsup / w32api / include / ntsecpkg.h
1 #ifndef _NTSECPKG_H
2 #define _NTSECPKG_H
3 #if __GNUC__ >=3
4 #pragma GCC system_header
5 #endif
6
7 #include "windef.h"
8 #include "ntsecapi.h"
9 #include "security.h"
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 #define ISC_REQ_DELEGATE 1
16 #define ISC_REQ_MUTUAL_AUTH 2
17 #define ISC_REQ_REPLAY_DETECT 4
18 #define ISC_REQ_SEQUENCE_DETECT 8
19 #define ISC_REQ_CONFIDENTIALITY  16
20 #define ISC_REQ_USE_SESSION_KEY 32
21 #define ISC_REQ_PROMPT_FOR_CREDS 64
22 #define ISC_REQ_USE_SUPPLIED_CREDS  128
23 #define ISC_REQ_ALLOCATE_MEMORY 256
24 #define ISC_REQ_USE_DCE_STYLE 512
25 #define ISC_REQ_DATAGRAM 1024
26 #define ISC_REQ_CONNECTION 2048
27 #define ISC_REQ_EXTENDED_ERROR 16384
28 #define ISC_REQ_STREAM 32768
29 #define ISC_REQ_INTEGRITY 65536
30 #define ISC_REQ_MANUAL_CRED_VALIDATION 524288
31 #define ISC_REQ_HTTP  268435456
32
33 #define ISC_RET_EXTENDED_ERROR 16384
34
35 #define ASC_REQ_DELEGATE 1
36 #define ASC_REQ_MUTUAL_AUTH 2
37 #define ASC_REQ_REPLAY_DETECT 4
38 #define ASC_REQ_SEQUENCE_DETECT 8
39 #define ASC_REQ_CONFIDENTIALITY 16
40 #define ASC_REQ_USE_SESSION_KEY 32
41 #define ASC_REQ_ALLOCATE_MEMORY 256
42 #define ASC_REQ_USE_DCE_STYLE 512
43 #define ASC_REQ_DATAGRAM 1024
44 #define ASC_REQ_CONNECTION 2048
45 #define ASC_REQ_EXTENDED_ERROR 32768
46 #define ASC_REQ_STREAM 65536
47 #define ASC_REQ_INTEGRITY 131072
48
49 #define SECURITY_NATIVE_DREP  16
50 #define SECURITY_NETWORK_DREP 0
51
52 #define SECPKG_STATE_ENCRYPTION_PERMITTED               0x01
53 #define SECPKG_STATE_STRONG_ENCRYPTION_PERMITTED        0x02
54 #define SECPKG_STATE_DOMAIN_CONTROLLER                  0x04
55 #define SECPKG_STATE_WORKSTATION                        0x08
56 #define SECPKG_STATE_STANDALONE                         0x10
57
58 /* enum definitions for Secure Service Provider/Authentication Packages */
59 typedef enum _LSA_TOKEN_INFORMATION_TYPE {
60         LsaTokenInformationNull,
61         LsaTokenInformationV1
62 } LSA_TOKEN_INFORMATION_TYPE, *PLSA_TOKEN_INFORMATION_TYPE;
63 typedef enum _SECPKG_EXTENDED_INFORMATION_CLASS
64 {
65         SecpkgGssInfo = 1,
66         SecpkgContextThunks,
67         SecpkgMutualAuthLevel,
68         SecpkgMaxInfo
69 } SECPKG_EXTENDED_INFORMATION_CLASS;
70 typedef enum _SECPKG_NAME_TYPE {
71         SecNameSamCompatible,
72         SecNameAlternateId,
73         SecNameFlat,
74         SecNameDN
75 } SECPKG_NAME_TYPE;
76
77 /* struct definitions for SSP/AP */
78 typedef struct _SECPKG_PRIMARY_CRED {
79         LUID LogonId;
80         UNICODE_STRING DownlevelName;
81         UNICODE_STRING DomainName;
82         UNICODE_STRING Password;
83         UNICODE_STRING OldPassword;
84         PSID UserSid;
85         ULONG Flags;
86         UNICODE_STRING DnsDomainName;
87         UNICODE_STRING Upn;
88         UNICODE_STRING LogonServer;
89         UNICODE_STRING Spare1;
90         UNICODE_STRING Spare2;
91         UNICODE_STRING Spare3;
92         UNICODE_STRING Spare4;
93 } SECPKG_PRIMARY_CRED, *PSECPKG_PRIMARY_CRED;
94 typedef struct _SECPKG_SUPPLEMENTAL_CRED {
95         UNICODE_STRING PackageName;
96         ULONG CredentialSize;
97         PUCHAR Credentials;
98 } SECPKG_SUPPLEMENTAL_CRED, *PSECPKG_SUPPLEMENTAL_CRED;
99 typedef struct _SECPKG_SUPPLEMENTAL_CRED_ARRAY {
100         ULONG CredentialCount;
101         SECPKG_SUPPLEMENTAL_CRED Credentials[1];
102 } SECPKG_SUPPLEMENTAL_CRED_ARRAY, *PSECPKG_SUPPLEMENTAL_CRED_ARRAY;
103 typedef struct _SECPKG_PARAMETERS {
104         ULONG Version;
105         ULONG MachineState;
106         ULONG SetupMode;
107         PSID DomainSid;
108         UNICODE_STRING DomainName;
109         UNICODE_STRING DnsDomainName;
110         GUID DomainGuid;
111 } SECPKG_PARAMETERS, *PSECPKG_PARAMETERS,
112   SECPKG_EVENT_DOMAIN_CHANGE, *PSECPKG_EVENT_DOMAIN_CHANGE;
113 typedef struct _SECPKG_CLIENT_INFO {
114   LUID LogonId;
115   ULONG ProcessID;
116   ULONG ThreadID;
117   BOOLEAN HasTcbPrivilege;
118   BOOLEAN Impersonating;
119   BOOLEAN Restricted;
120 } SECPKG_CLIENT_INFO,
121  *PSECPKG_CLIENT_INFO;
122 typedef struct _SECURITY_USER_DATA {
123         SECURITY_STRING UserName;
124         SECURITY_STRING LogonDomainName;
125         SECURITY_STRING LogonServer;
126         PSID pSid;
127 } SECURITY_USER_DATA, *PSECURITY_USER_DATA,
128   SecurityUserData, *PSecurityUserData;
129 typedef struct _SECPKG_GSS_INFO {
130         ULONG EncodedIdLength;
131         UCHAR EncodedId[4];
132 } SECPKG_GSS_INFO, *PSECPKG_GSS_INFO;
133 typedef struct _SECPKG_CONTEXT_THUNKS {
134         ULONG InfoLevelCount;
135         ULONG Levels[1];
136 } SECPKG_CONTEXT_THUNKS, *PSECPKG_CONTEXT_THUNKS;
137 typedef struct _SECPKG_MUTUAL_AUTH_LEVEL {
138         ULONG MutualAuthLevel;
139 } SECPKG_MUTUAL_AUTH_LEVEL, *PSECPKG_MUTUAL_AUTH_LEVEL;
140 typedef struct _SECPKG_CALL_INFO {
141         ULONG ProcessId;
142         ULONG ThreadId;
143         ULONG Attributes;
144         ULONG CallCount;
145 } SECPKG_CALL_INFO, *PSECPKG_CALL_INFO;
146 typedef struct _SECPKG_EXTENDED_INFORMATION {
147         SECPKG_EXTENDED_INFORMATION_CLASS Class;
148         union {
149                 SECPKG_GSS_INFO GssInfo;
150                 SECPKG_CONTEXT_THUNKS ContextThunks;
151                 SECPKG_MUTUAL_AUTH_LEVEL MutualAuthLevel;
152         } Info;
153 } SECPKG_EXTENDED_INFORMATION, *PSECPKG_EXTENDED_INFORMATION;
154
155 /* callbacks implemented by SSP/AP dlls and called by the LSA */
156 typedef VOID (NTAPI *PLSA_CALLBACK_FUNCTION)(ULONG_PTR, ULONG_PTR, PSecBuffer,
157  PSecBuffer);
158
159 /* misc typedefs used in the below prototypes */
160 typedef PVOID *PLSA_CLIENT_REQUEST;
161 typedef ULONG LSA_SEC_HANDLE, *PLSA_SEC_HANDLE;
162 typedef LPTHREAD_START_ROUTINE SEC_THREAD_START;
163 typedef PSECURITY_ATTRIBUTES SEC_ATTRS;
164
165 /* functions used by SSP/AP obtainable by dispatch tables */
166 typedef NTSTATUS (NTAPI *PLSA_REGISTER_CALLBACK)(ULONG, PLSA_CALLBACK_FUNCTION);
167 typedef NTSTATUS (NTAPI *PLSA_CREATE_LOGON_SESSION)(PLUID);
168 typedef NTSTATUS (NTAPI *PLSA_DELETE_LOGON_SESSION)(PLUID);
169 typedef NTSTATUS (NTAPI *PLSA_ADD_CREDENTIAL)(PLUID, ULONG, PLSA_STRING,
170  PLSA_STRING);
171 typedef NTSTATUS (NTAPI *PLSA_GET_CREDENTIALS)(PLUID, ULONG, PULONG, BOOLEAN,
172  PLSA_STRING, PULONG, PLSA_STRING);
173 typedef NTSTATUS (NTAPI *PLSA_DELETE_CREDENTIAL)(PLUID, ULONG, PLSA_STRING);
174 typedef PVOID (NTAPI *PLSA_ALLOCATE_LSA_HEAP)(ULONG);
175 typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
176 typedef NTSTATUS (NTAPI *PLSA_ALLOCATE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
177  ULONG, PVOID*);
178 typedef NTSTATUS (NTAPI *PLSA_FREE_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, PVOID);
179 typedef NTSTATUS (NTAPI *PLSA_COPY_TO_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST, ULONG,
180  PVOID, PVOID);
181 typedef NTSTATUS (NTAPI *PLSA_COPY_FROM_CLIENT_BUFFER)(PLSA_CLIENT_REQUEST,
182  ULONG, PVOID, PVOID);
183 typedef NTSTATUS (NTAPI *PLSA_IMPERSONATE_CLIENT)(void);
184 typedef NTSTATUS (NTAPI *PLSA_UNLOAD_PACKAGE)(void);
185 typedef NTSTATUS (NTAPI *PLSA_DUPLICATE_HANDLE)(HANDLE, PHANDLE);
186 typedef NTSTATUS (NTAPI *PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS)(PLUID, ULONG,
187  PVOID, BOOLEAN);
188 typedef HANDLE (NTAPI *PLSA_CREATE_THREAD)(SEC_ATTRS, ULONG, SEC_THREAD_START,
189  PVOID, ULONG, PULONG);
190 typedef NTSTATUS (NTAPI *PLSA_GET_CLIENT_INFO)(PSECPKG_CLIENT_INFO);
191 typedef HANDLE (NTAPI *PLSA_REGISTER_NOTIFICATION)(SEC_THREAD_START, PVOID,
192  ULONG, ULONG, ULONG, ULONG, HANDLE);
193 typedef NTSTATUS (NTAPI *PLSA_CANCEL_NOTIFICATION)(HANDLE);
194 typedef NTSTATUS (NTAPI *PLSA_MAP_BUFFER)(PSecBuffer, PSecBuffer);
195 typedef NTSTATUS (NTAPI *PLSA_CREATE_TOKEN)(PLUID, PTOKEN_SOURCE,
196  SECURITY_LOGON_TYPE, SECURITY_IMPERSONATION_LEVEL, LSA_TOKEN_INFORMATION_TYPE,
197  PVOID, PTOKEN_GROUPS, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING,
198  PUNICODE_STRING, PHANDLE, PNTSTATUS);
199 typedef VOID (NTAPI *PLSA_AUDIT_LOGON)(NTSTATUS, NTSTATUS, PUNICODE_STRING,
200  PUNICODE_STRING, PUNICODE_STRING, OPTIONAL PSID, SECURITY_LOGON_TYPE,
201  PTOKEN_SOURCE, PLUID);
202 typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
203  PVOID*, PULONG, PNTSTATUS);
204 typedef VOID (NTAPI *PLSA_FREE_LSA_HEAP)(PVOID);
205 typedef BOOLEAN (NTAPI *PLSA_GET_CALL_INFO)(PSECPKG_CALL_INFO);
206 typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGEEX)(PUNICODE_STRING, PVOID, PVOID,
207  ULONG, PVOID*, PULONG, PNTSTATUS);
208 typedef PVOID (NTAPI *PLSA_CREATE_SHARED_MEMORY)(ULONG, ULONG);
209 typedef PVOID (NTAPI *PLSA_ALLOCATE_SHARED_MEMORY)(PVOID, ULONG);
210 typedef VOID (NTAPI *PLSA_FREE_SHARED_MEMORY)(PVOID, PVOID);
211 typedef BOOLEAN (NTAPI *PLSA_DELETE_SHARED_MEMORY)(PVOID);
212 typedef NTSTATUS (NTAPI *PLSA_OPEN_SAM_USER)(PSECURITY_STRING, SECPKG_NAME_TYPE,
213  PSECURITY_STRING, BOOLEAN, ULONG, PVOID*);
214 typedef NTSTATUS (NTAPI *PLSA_GET_USER_CREDENTIALS)(PVOID, PVOID *, PULONG,
215  PVOID *, PULONG);
216 typedef NTSTATUS (NTAPI *PLSA_GET_USER_AUTH_DATA)(PVOID, PUCHAR *, PULONG);
217 typedef NTSTATUS (NTAPI *PLSA_CLOSE_SAM_USER)(PVOID);
218 typedef NTSTATUS (NTAPI *PLSA_CONVERT_AUTH_DATA_TO_TOKEN)(PVOID, ULONG,
219  SECURITY_IMPERSONATION_LEVEL, PTOKEN_SOURCE, SECURITY_LOGON_TYPE,
220  PUNICODE_STRING, PHANDLE, PLUID, PUNICODE_STRING, PNTSTATUS);
221 typedef NTSTATUS (NTAPI *PLSA_CLIENT_CALLBACK)(PCHAR, ULONG_PTR, ULONG_PTR,
222  PSecBuffer, PSecBuffer);
223 typedef NTSTATUS (NTAPI *PLSA_UPDATE_PRIMARY_CREDENTIALS)(PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY);
224 typedef NTSTATUS (NTAPI *PLSA_GET_AUTH_DATA_FOR_USER)(PSECURITY_STRING,
225  SECPKG_NAME_TYPE, PSECURITY_STRING, PUCHAR *, PULONG, PUNICODE_STRING);
226 typedef NTSTATUS (NTAPI *PLSA_CRACK_SINGLE_NAME)(ULONG, BOOLEAN,
227  PUNICODE_STRING, PUNICODE_STRING, ULONG, PUNICODE_STRING, PUNICODE_STRING,
228  PULONG);
229 typedef NTSTATUS (NTAPI *PLSA_AUDIT_ACCOUNT_LOGON)(ULONG, BOOLEAN,
230  PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, NTSTATUS);
231 typedef NTSTATUS (NTAPI *PLSA_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING, PVOID,
232  PVOID, ULONG, PVOID*, PULONG, PNTSTATUS);
233
234 /* Dispatch tables of functions used by SSP/AP */
235 typedef struct SECPKG_DLL_FUNCTIONS {
236         PLSA_ALLOCATE_LSA_HEAP AllocateHeap;
237         PLSA_FREE_LSA_HEAP FreeHeap;
238         PLSA_REGISTER_CALLBACK RegisterCallback;
239 } SECPKG_DLL_FUNCTIONS,
240  *PSECPKG_DLL_FUNCTIONS;
241 typedef struct LSA_DISPATCH_TABLE {
242         PLSA_CREATE_LOGON_SESSION CreateLogonSession;
243         PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
244         PLSA_ADD_CREDENTIAL AddCredential;
245         PLSA_GET_CREDENTIALS GetCredentials;
246         PLSA_DELETE_CREDENTIAL DeleteCredential;
247         PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
248         PLSA_FREE_LSA_HEAP FreeLsaHeap;
249         PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
250         PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
251         PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
252         PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
253 } LSA_DISPATCH_TABLE,
254  *PLSA_DISPATCH_TABLE;
255 typedef struct _LSA_SECPKG_FUNCTION_TABLE {
256         PLSA_CREATE_LOGON_SESSION CreateLogonSession;
257         PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
258         PLSA_ADD_CREDENTIAL AddCredential;
259         PLSA_GET_CREDENTIALS GetCredentials;
260         PLSA_DELETE_CREDENTIAL DeleteCredential;
261         PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
262         PLSA_FREE_LSA_HEAP FreeLsaHeap;
263         PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
264         PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
265         PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
266         PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
267         PLSA_IMPERSONATE_CLIENT ImpersonateClient;
268         PLSA_UNLOAD_PACKAGE UnloadPackage;
269         PLSA_DUPLICATE_HANDLE DuplicateHandle;
270         PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
271         PLSA_CREATE_THREAD CreateThread;
272         PLSA_GET_CLIENT_INFO GetClientInfo;
273         PLSA_REGISTER_NOTIFICATION RegisterNotification;
274         PLSA_CANCEL_NOTIFICATION CancelNotification;
275         PLSA_MAP_BUFFER MapBuffer;
276         PLSA_CREATE_TOKEN CreateToken;
277         PLSA_AUDIT_LOGON AuditLogon;
278         PLSA_CALL_PACKAGE CallPackage;
279         PLSA_FREE_LSA_HEAP FreeReturnBuffer;
280         PLSA_GET_CALL_INFO GetCallInfo;
281         PLSA_CALL_PACKAGEEX CallPackageEx;
282         PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;
283         PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;
284         PLSA_FREE_SHARED_MEMORY FreeSharedMemory;
285         PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;
286         PLSA_OPEN_SAM_USER OpenSamUser;
287         PLSA_GET_USER_CREDENTIALS GetUserCredentials;
288         PLSA_GET_USER_AUTH_DATA GetUserAuthData;
289         PLSA_CLOSE_SAM_USER CloseSamUser;
290         PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;
291         PLSA_CLIENT_CALLBACK ClientCallback;
292         PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;
293         PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;
294         PLSA_CRACK_SINGLE_NAME CrackSingleName;
295         PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;
296         PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
297 } LSA_SECPKG_FUNCTION_TABLE,
298  *PLSA_SECPKG_FUNCTION_TABLE;
299
300 /* functions implemented by SSP/AP obtainable by dispatch tables */
301 typedef NTSTATUS (NTAPI *PLSA_AP_INITIALIZE_PACKAGE)(ULONG, PLSA_DISPATCH_TABLE,
302  PLSA_STRING, PLSA_STRING, PLSA_STRING *);
303 typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER)(LPWSTR, LPWSTR, LPWSTR, LPWSTR,
304  DWORD, DWORD, PHANDLE);
305 typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE)(PUNICODE_STRING, PVOID, ULONG,
306  PVOID *, PULONG, PNTSTATUS);
307 typedef VOID (NTAPI *PLSA_AP_LOGON_TERMINATED)(PLUID);
308 typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_UNTRUSTED)(PLSA_CLIENT_REQUEST,
309  PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
310 typedef NTSTATUS (NTAPI *PLSA_AP_CALL_PACKAGE_PASSTHROUGH)(PUNICODE_STRING,
311  PVOID, PVOID, ULONG, PVOID *, PULONG, PNTSTATUS);
312 typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX)(PLSA_CLIENT_REQUEST,
313  SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
314  PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
315  PUNICODE_STRING *);
316 typedef NTSTATUS (NTAPI *PLSA_AP_LOGON_USER_EX2)(PLSA_CLIENT_REQUEST,
317  SECURITY_LOGON_TYPE, PVOID, PVOID, ULONG, PVOID *, PULONG, PLUID, PNTSTATUS,
318  PLSA_TOKEN_INFORMATION_TYPE, PVOID *, PUNICODE_STRING *, PUNICODE_STRING *,
319  PUNICODE_STRING *, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED_ARRAY *);
320 typedef NTSTATUS (SpInitializeFn)(ULONG_PTR, PSECPKG_PARAMETERS,
321  PLSA_SECPKG_FUNCTION_TABLE);
322 typedef NTSTATUS (NTAPI SpShutDownFn)(void);
323 typedef NTSTATUS (NTAPI SpGetInfoFn)(PSecPkgInfoW);
324 typedef NTSTATUS (NTAPI SpAcceptCredentialsFn)(SECURITY_LOGON_TYPE,
325  PUNICODE_STRING, PSECPKG_PRIMARY_CRED, PSECPKG_SUPPLEMENTAL_CRED);
326 typedef NTSTATUS (NTAPI SpAcquireCredentialsHandleFn)(PUNICODE_STRING, ULONG,
327  PLUID, PVOID, PVOID, PVOID, PLSA_SEC_HANDLE, PTimeStamp);
328 typedef NTSTATUS (NTAPI SpQueryCredentialsAttributesFn)(LSA_SEC_HANDLE, ULONG,
329  PVOID);
330 typedef NTSTATUS (NTAPI SpFreeCredentialsHandleFn)(LSA_SEC_HANDLE);
331 typedef NTSTATUS (NTAPI SpSaveCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
332 typedef NTSTATUS (NTAPI SpGetCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
333 typedef NTSTATUS (NTAPI SpDeleteCredentialsFn)(LSA_SEC_HANDLE, PSecBuffer);
334 typedef NTSTATUS (NTAPI SpInitLsaModeContextFn)(LSA_SEC_HANDLE, LSA_SEC_HANDLE,
335  PUNICODE_STRING, ULONG, ULONG, PSecBufferDesc, PLSA_SEC_HANDLE, PSecBufferDesc,
336  PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
337 typedef NTSTATUS (NTAPI SpAcceptLsaModeContextFn)(LSA_SEC_HANDLE,
338  LSA_SEC_HANDLE, PSecBufferDesc, ULONG, ULONG, PLSA_SEC_HANDLE, PSecBufferDesc,
339  PULONG, PTimeStamp, PBOOLEAN, PSecBuffer);
340 typedef NTSTATUS (NTAPI SpDeleteContextFn)(LSA_SEC_HANDLE);
341 typedef NTSTATUS (NTAPI SpApplyControlTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
342 typedef NTSTATUS (NTAPI SpGetUserInfoFn)(PLUID, ULONG, PSecurityUserData *);
343 typedef NTSTATUS (NTAPI SpGetExtendedInformationFn)(
344  SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION *);
345 typedef NTSTATUS (NTAPI SpQueryContextAttributesFn)(LSA_SEC_HANDLE, ULONG,
346  PVOID);
347 typedef NTSTATUS (NTAPI SpAddCredentialsFn)(LSA_SEC_HANDLE, PUNICODE_STRING,
348  PUNICODE_STRING, ULONG, PVOID, PVOID, PVOID, PTimeStamp);
349 typedef NTSTATUS (NTAPI SpSetExtendedInformationFn)(
350  SECPKG_EXTENDED_INFORMATION_CLASS, PSECPKG_EXTENDED_INFORMATION);
351 typedef NTSTATUS (NTAPI SpInstanceInitFn)(ULONG, PSECPKG_DLL_FUNCTIONS,
352  PVOID *);
353 typedef NTSTATUS (NTAPI SpInitUserModeContextFn)(LSA_SEC_HANDLE, PSecBuffer);
354 typedef NTSTATUS (NTAPI SpMakeSignatureFn)(LSA_SEC_HANDLE, ULONG,
355  PSecBufferDesc, ULONG);
356 typedef NTSTATUS (NTAPI SpVerifySignatureFn)(LSA_SEC_HANDLE, PSecBufferDesc,
357  ULONG, PULONG);
358 typedef NTSTATUS (NTAPI SpSealMessageFn)(LSA_SEC_HANDLE, ULONG, PSecBufferDesc,
359  ULONG);
360 typedef NTSTATUS (NTAPI SpUnsealMessageFn)(LSA_SEC_HANDLE, PSecBufferDesc,
361  ULONG, PULONG);
362 typedef NTSTATUS (NTAPI SpGetContextTokenFn)(LSA_SEC_HANDLE, PHANDLE);
363 typedef NTSTATUS (NTAPI SpCompleteAuthTokenFn)(LSA_SEC_HANDLE, PSecBufferDesc);
364 typedef NTSTATUS (NTAPI SpFormatCredentialsFn)(PSecBuffer, PSecBuffer);
365 typedef NTSTATUS (NTAPI SpMarshallSupplementalCredsFn)(ULONG, PUCHAR, PULONG,
366  PVOID *);
367 typedef NTSTATUS (NTAPI SpExportSecurityContextFn)(LSA_SEC_HANDLE, ULONG,
368  PSecBuffer, PHANDLE);
369 typedef NTSTATUS (NTAPI SpImportSecurityContextFn)(PSecBuffer, HANDLE,
370  PLSA_SEC_HANDLE);
371
372 /* Dispatch tables of functions implemented by SSP/AP */
373 typedef struct SECPKG_FUNCTION_TABLE {
374         PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
375         PLSA_AP_LOGON_USER LogonUser;
376         PLSA_AP_CALL_PACKAGE CallPackage;
377         PLSA_AP_LOGON_TERMINATED LogonTerminated;
378         PLSA_AP_CALL_PACKAGE_UNTRUSTED CallPackageUntrusted;
379         PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
380         PLSA_AP_LOGON_USER_EX LogonUserEx;
381         PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
382         SpInitializeFn *Initialize;
383         SpShutDownFn *Shutdown;
384         SpGetInfoFn *GetInfo;
385         SpAcceptCredentialsFn *AcceptCredentials;
386         SpAcquireCredentialsHandleFn *AcquireCredentialsHandle;
387         SpQueryCredentialsAttributesFn *QueryCredentialsAttributes;
388         SpFreeCredentialsHandleFn *FreeCredentialsHandle;
389         SpSaveCredentialsFn *SaveCredentials;
390         SpGetCredentialsFn *GetCredentials;
391         SpDeleteCredentialsFn *DeleteCredentials;
392         SpInitLsaModeContextFn *InitLsaModeContext;
393         SpAcceptLsaModeContextFn *AcceptLsaModeContext;
394         SpDeleteContextFn *DeleteContext;
395         SpApplyControlTokenFn *ApplyControlToken;
396         SpGetUserInfoFn *GetUserInfo;
397         SpGetExtendedInformationFn *GetExtendedInformation;
398         SpQueryContextAttributesFn *QueryContextAttributes;
399         SpAddCredentialsFn *AddCredentials;
400         SpSetExtendedInformationFn *SetExtendedInformation;
401 } SECPKG_FUNCTION_TABLE,
402  *PSECPKG_FUNCTION_TABLE;
403
404 typedef struct SECPKG_USER_FUNCTION_TABLE {
405         SpInstanceInitFn *InstanceInit;
406         SpInitUserModeContextFn *InitUserModeContext;
407         SpMakeSignatureFn *MakeSignature;
408         SpVerifySignatureFn *VerifySignature;
409         SpSealMessageFn *SealMessage;
410         SpUnsealMessageFn *UnsealMessage;
411         SpGetContextTokenFn *GetContextToken;
412         SpQueryContextAttributesFn *QueryContextAttributes;
413         SpCompleteAuthTokenFn *CompleteAuthToken;
414         SpDeleteContextFn *DeleteUserModeContext;
415         SpFormatCredentialsFn *FormatCredentials;
416         SpMarshallSupplementalCredsFn *MarshallSupplementalCreds;
417         SpExportSecurityContextFn *ExportContext;
418         SpImportSecurityContextFn *ImportContext;
419 } SECPKG_USER_FUNCTION_TABLE,
420  *PSECPKG_USER_FUNCTION_TABLE;
421
422 /* Entry points to SSP/AP */
423 typedef NTSTATUS (NTAPI *SpLsaModeInitializeFn)(ULONG, PULONG,
424  PSECPKG_FUNCTION_TABLE *, PULONG);
425 typedef NTSTATUS (WINAPI *SpUserModeInitializeFn)(ULONG, PULONG,
426  PSECPKG_USER_FUNCTION_TABLE *, PULONG);
427
428 #ifdef __cplusplus
429 }
430 #endif
431 #endif /* _NTSECPKG_H */