OSDN Git Service

Redo the filters based on assumptions discussed in mingw-dvlpr list.
[mingw/mingw-org-wsl.git] / include / subauth.h
1 /**
2  * @file subauth.h
3  * @copy 2012 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  * 
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  * 
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _SUBAUTH_H
25 #define _SUBAUTH_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #ifndef NT_SUCCESS
34 #define NT_SUCCESS(x) ((x)>=0)
35 #define STATUS_SUCCESS 0 
36 #endif
37
38 #define CYPHER_BLOCK_LENGTH 8
39 #define USER_SESSION_KEY_LENGTH (CYPHER_BLOCK_LENGTH*2)
40 #define CLEAR_BLOCK_LENGTH 8
41 #define MSV1_0_PASSTHRU 1
42 #define MSV1_0_GUEST_LOGON 2
43 #define MSV1_0_VALIDATION_LOGOFF_TIME 1
44 #define MSV1_0_VALIDATION_KICKOFF_TIME 2
45 #define MSV1_0_VALIDATION_LOGON_SERVER 4
46 #define MSV1_0_VALIDATION_LOGON_DOMAIN 8
47 #define MSV1_0_VALIDATION_SESSION_KEY 16
48 #define MSV1_0_VALIDATION_USER_FLAGS 32
49 #define MSV1_0_VALIDATION_USER_ID 64
50 #define MSV1_0_SUBAUTH_ACCOUNT_DISABLED 1
51 #define MSV1_0_SUBAUTH_PASSWORD 2
52 #define MSV1_0_SUBAUTH_WORKSTATIONS 4
53 #define MSV1_0_SUBAUTH_LOGON_HOURS 8
54 #define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY 16
55 #define MSV1_0_SUBAUTH_PASSWORD_EXPIRY 32
56 #define MSV1_0_SUBAUTH_ACCOUNT_TYPE 64
57 #define MSV1_0_SUBAUTH_LOCKOUT 128
58 #define NEXT_FREE_ACCOUNT_CONTROL_BIT 131072
59 #define SAM_DAYS_PER_WEEK 7
60 #define SAM_HOURS_PER_WEEK 168
61 #define SAM_MINUTES_PER_WEEK 10080
62 #define STATUS_INVALID_INFO_CLASS 0xC0000003L
63 #define STATUS_NO_SUCH_USER 0xC0000064L
64 #define STATUS_WRONG_PASSWORD 0xC000006AL
65 #define STATUS_PASSWORD_RESTRICTION 0xC000006CL
66 #define STATUS_LOGON_FAILURE 0xC000006DL
67 #define STATUS_ACCOUNT_RESTRICTION 0xC000006EL
68 #define STATUS_INVALID_LOGON_HOURS 0xC000006FL
69 #define STATUS_INVALID_WORKSTATION 0xC0000070L
70 #define STATUS_PASSWORD_EXPIRED 0xC0000071L
71 #define STATUS_ACCOUNT_DISABLED 0xC0000072L
72 #define STATUS_INSUFFICIENT_RESOURCES 0xC000009AL
73 #define STATUS_ACCOUNT_EXPIRED 0xC0000193L
74 #define STATUS_PASSWORD_MUST_CHANGE 0xC0000224L
75 #define STATUS_ACCOUNT_LOCKED_OUT 0xC0000234L
76 #define USER_ACCOUNT_DISABLED 1
77 #define USER_HOME_DIRECTORY_REQUIRED 2
78 #define USER_PASSWORD_NOT_REQUIRED 4
79 #define USER_TEMP_DUPLICATE_ACCOUNT 8
80 #define USER_NORMAL_ACCOUNT 16
81 #define USER_MNS_LOGON_ACCOUNT 32
82 #define USER_INTERDOMAIN_TRUST_ACCOUNT 64
83 #define USER_WORKSTATION_TRUST_ACCOUNT 128
84 #define USER_SERVER_TRUST_ACCOUNT 256
85 #define USER_DONT_EXPIRE_PASSWORD 512
86 #define USER_ACCOUNT_AUTO_LOCKED 1024
87 #define USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED 2048
88 #define USER_SMARTCARD_REQUIRED 4096
89 #define USER_TRUSTED_FOR_DELEGATION 8192
90 #define USER_NOT_DELEGATED 16384
91 #define USER_USE_DES_KEY_ONLY 32768
92 #define USER_DONT_REQUIRE_PREAUTH 65536
93 #define USER_MACHINE_ACCOUNT_MASK 448
94 #define USER_ACCOUNT_TYPE_MASK 472
95 #define USER_ALL_PARAMETERS 2097152
96
97 #if !defined(_NTDEF_H) && !defined(_NTSECAPI_H)
98 typedef LONG NTSTATUS, *PNTSTATUS;
99 typedef struct _UNICODE_STRING {
100   USHORT Length;
101   USHORT MaximumLength;
102   PWSTR Buffer;
103 } UNICODE_STRING, *PUNICODE_STRING;
104 typedef struct _STRING {
105   USHORT Length;
106   USHORT MaximumLength;
107   PCHAR Buffer;
108 } STRING, *PSTRING;
109 #endif
110 typedef PVOID SAM_HANDLE, *PSAM_HANDLE;  
111 typedef struct _OLD_LARGE_INTEGER {
112   ULONG LowPart;
113   LONG HighPart;
114 } OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER;
115 typedef enum _NETLOGON_LOGON_INFO_CLASS {
116   NetlogonInteractiveInformation = 1,NetlogonNetworkInformation,
117   NetlogonServiceInformation,NetlogonGenericInformation,
118   NetlogonInteractiveTransitiveInformation,NetlogonNetworkTransitiveInformation,
119   NetlogonServiceTransitiveInformation
120 } NETLOGON_LOGON_INFO_CLASS;
121 typedef struct _CYPHER_BLOCK {
122   CHAR data[CYPHER_BLOCK_LENGTH];
123 } CYPHER_BLOCK, *PCYPHER_BLOCK;
124 typedef struct _CLEAR_BLOCK {
125   CHAR data[CLEAR_BLOCK_LENGTH];
126 } CLEAR_BLOCK, *PCLEAR_BLOCK;
127 typedef struct _LM_OWF_PASSWORD {
128   CYPHER_BLOCK data[2];
129 } LM_OWF_PASSWORD, *PLM_OWF_PASSWORD;
130 typedef struct _USER_SESSION_KEY {
131   CYPHER_BLOCK data[2];
132 } USER_SESSION_KEY, *PUSER_SESSION_KEY;
133 typedef CLEAR_BLOCK LM_CHALLENGE, *PLM_CHALLENGE;
134 typedef LM_OWF_PASSWORD NT_OWF_PASSWORD, *PNT_OWF_PASSWORD;
135 typedef LM_CHALLENGE NT_CHALLENGE, *PNT_CHALLENGE;
136 typedef struct _LOGON_HOURS {
137   USHORT UnitsPerWeek;
138   PUCHAR LogonHours;
139 } LOGON_HOURS, *PLOGON_HOURS;
140 typedef struct _SR_SECURITY_DESCRIPTOR {
141   ULONG Length;
142   PUCHAR SecurityDescriptor;
143 } SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR;
144 #pragma pack(push,4)
145 typedef struct _USER_ALL_INFORMATION {
146   LARGE_INTEGER LastLogon;
147   LARGE_INTEGER LastLogoff;
148   LARGE_INTEGER PasswordLastSet;
149   LARGE_INTEGER AccountExpires;
150   LARGE_INTEGER PasswordCanChange;
151   LARGE_INTEGER PasswordMustChange;
152   UNICODE_STRING UserName;
153   UNICODE_STRING FullName;
154   UNICODE_STRING HomeDirectory;
155   UNICODE_STRING HomeDirectoryDrive;
156   UNICODE_STRING ScriptPath;
157   UNICODE_STRING ProfilePath;
158   UNICODE_STRING AdminComment;
159   UNICODE_STRING WorkStations;
160   UNICODE_STRING UserComment;
161   UNICODE_STRING Parameters;
162   UNICODE_STRING LmPassword;
163   UNICODE_STRING NtPassword;
164   UNICODE_STRING PrivateData;
165   SR_SECURITY_DESCRIPTOR SecurityDescriptor;
166   ULONG UserId;
167   ULONG PrimaryGroupId;
168   ULONG UserAccountControl;
169   ULONG WhichFields;
170   LOGON_HOURS LogonHours;
171   USHORT BadPasswordCount;
172   USHORT LogonCount;
173   USHORT CountryCode;
174   USHORT CodePage;
175   BOOLEAN LmPasswordPresent;
176   BOOLEAN NtPasswordPresent;
177   BOOLEAN PasswordExpired;
178   BOOLEAN PrivateDataSensitive;
179 } USER_ALL_INFORMATION, *PUSER_ALL_INFORMATION;
180 #pragma pack(pop)
181 typedef struct _MSV1_0_VALIDATION_INFO {
182   LARGE_INTEGER LogoffTime;
183   LARGE_INTEGER KickoffTime;
184   UNICODE_STRING LogonServer;
185   UNICODE_STRING LogonDomainName;
186   USER_SESSION_KEY SessionKey;
187   BOOLEAN Authoritative;
188   ULONG UserFlags;
189   ULONG WhichFields;
190   ULONG UserId;
191 } MSV1_0_VALIDATION_INFO, *PMSV1_0_VALIDATION_INFO;
192 typedef struct _NETLOGON_LOGON_IDENTITY_INFO {
193   UNICODE_STRING LogonDomainName;
194   ULONG ParameterControl;
195   OLD_LARGE_INTEGER LogonId;
196   UNICODE_STRING UserName;
197   UNICODE_STRING Workstation;
198 } NETLOGON_LOGON_IDENTITY_INFO, *PNETLOGON_LOGON_IDENTITY_INFO;
199 typedef struct _NETLOGON_INTERACTIVE_INFO {
200   NETLOGON_LOGON_IDENTITY_INFO Identity;
201   LM_OWF_PASSWORD LmOwfPassword;
202   NT_OWF_PASSWORD NtOwfPassword;
203 } NETLOGON_INTERACTIVE_INFO, *PNETLOGON_INTERACTIVE_INFO;
204 typedef struct _NETLOGON_GENERIC_INFO {
205   NETLOGON_LOGON_IDENTITY_INFO Identity;
206   UNICODE_STRING PackageName;
207   ULONG DataLength;
208   PUCHAR LogonData;
209 } NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO;
210 typedef struct _NETLOGON_NETWORK_INFO {
211   NETLOGON_LOGON_IDENTITY_INFO Identity;
212   LM_CHALLENGE LmChallenge;
213   STRING NtChallengeResponse;
214   STRING LmChallengeResponse;
215 } NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO;
216 typedef struct _NETLOGON_SERVICE_INFO {
217   NETLOGON_LOGON_IDENTITY_INFO Identity;
218   LM_OWF_PASSWORD LmOwfPassword;
219   NT_OWF_PASSWORD NtOwfPassword;
220 } NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO;
221 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID,
222                               ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
223                               PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
224 NTSTATUS NTAPI Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID,
225                               ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
226                               PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
227 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*);
228 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID,
229                               ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE,
230                               PMSV1_0_VALIDATION_INFO,PULONG);
231 #ifdef __cplusplus
232 }
233 #endif
234
235 #endif /* _SUBAUTH_H */