3 * @copy 2012 MinGW.org project
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:
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
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.
26 #pragma GCC system_header
34 #define NT_SUCCESS(x) ((x)>=0)
35 #define STATUS_SUCCESS 0
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
97 #if !defined(_NTDEF_H) && !defined(_NTSECAPI_H)
98 typedef LONG NTSTATUS, *PNTSTATUS;
99 typedef struct _UNICODE_STRING {
101 USHORT MaximumLength;
103 } UNICODE_STRING, *PUNICODE_STRING;
104 typedef struct _STRING {
106 USHORT MaximumLength;
110 typedef PVOID SAM_HANDLE, *PSAM_HANDLE;
111 typedef struct _OLD_LARGE_INTEGER {
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 {
139 } LOGON_HOURS, *PLOGON_HOURS;
140 typedef struct _SR_SECURITY_DESCRIPTOR {
142 PUCHAR SecurityDescriptor;
143 } SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR;
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;
167 ULONG PrimaryGroupId;
168 ULONG UserAccountControl;
170 LOGON_HOURS LogonHours;
171 USHORT BadPasswordCount;
175 BOOLEAN LmPasswordPresent;
176 BOOLEAN NtPasswordPresent;
177 BOOLEAN PasswordExpired;
178 BOOLEAN PrivateDataSensitive;
179 } USER_ALL_INFORMATION, *PUSER_ALL_INFORMATION;
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;
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;
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);
235 #endif /* _SUBAUTH_H */