1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
|
/**
* Windows API header module
*
* Translated from MinGW Windows headers
*
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
* Source: $(DRUNTIMESRC core/sys/windows/_subauth.d)
*/
module core.sys.windows.subauth;
version (Windows):
import core.sys.windows.ntdef, core.sys.windows.windef;
/+
alias LONG NTSTATUS;
alias NTSTATUS* PNTSTATUS;
+/
enum : ULONG {
MSV1_0_PASSTHRU = 1,
MSV1_0_GUEST_LOGON = 2
}
// USER_ALL_INFORMATION.WhichFields (Undocumented)
enum ULONG
MSV1_0_VALIDATION_LOGOFF_TIME = 1,
MSV1_0_VALIDATION_KICKOFF_TIME = 2,
MSV1_0_VALIDATION_LOGON_SERVER = 4,
MSV1_0_VALIDATION_LOGON_DOMAIN = 8,
MSV1_0_VALIDATION_SESSION_KEY = 16,
MSV1_0_VALIDATION_USER_FLAGS = 32,
MSV1_0_VALIDATION_USER_ID = 64;
// ?ActionsPerformed? (Undocumented)
enum MSV1_0_SUBAUTH_ACCOUNT_DISABLED = 1;
enum MSV1_0_SUBAUTH_PASSWORD = 2;
enum MSV1_0_SUBAUTH_WORKSTATIONS = 4;
enum MSV1_0_SUBAUTH_LOGON_HOURS = 8;
enum MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = 16;
enum MSV1_0_SUBAUTH_PASSWORD_EXPIRY = 32;
enum MSV1_0_SUBAUTH_ACCOUNT_TYPE = 64;
enum MSV1_0_SUBAUTH_LOCKOUT = 128;
enum NEXT_FREE_ACCOUNT_CONTROL_BIT = 131072;
enum SAM_DAYS_PER_WEEK = 7;
enum SAM_HOURS_PER_WEEK = 168;
enum SAM_MINUTES_PER_WEEK = 10080;
enum : NTSTATUS {
STATUS_SUCCESS = 0,
STATUS_INVALID_INFO_CLASS = 0xC0000003,
STATUS_NO_SUCH_USER = 0xC0000064,
STATUS_WRONG_PASSWORD = 0xC000006A,
STATUS_PASSWORD_RESTRICTION = 0xC000006C,
STATUS_LOGON_FAILURE = 0xC000006D,
STATUS_ACCOUNT_RESTRICTION = 0xC000006E,
STATUS_INVALID_LOGON_HOURS = 0xC000006F,
STATUS_INVALID_WORKSTATION = 0xC0000070,
STATUS_PASSWORD_EXPIRED = 0xC0000071,
STATUS_ACCOUNT_DISABLED = 0xC0000072,
STATUS_INSUFFICIENT_RESOURCES = 0xC000009A,
STATUS_ACCOUNT_EXPIRED = 0xC0000193,
STATUS_PASSWORD_MUST_CHANGE = 0xC0000224,
STATUS_ACCOUNT_LOCKED_OUT = 0xC0000234
}
// Note: undocumented in MSDN
// USER_ALL_INFORMATION.UserAccountControl
enum ULONG
USER_ACCOUNT_DISABLED = 1,
USER_HOME_DIRECTORY_REQUIRED = 2,
USER_PASSWORD_NOT_REQUIRED = 4,
USER_TEMP_DUPLICATE_ACCOUNT = 8,
USER_NORMAL_ACCOUNT = 16,
USER_MNS_LOGON_ACCOUNT = 32,
USER_INTERDOMAIN_TRUST_ACCOUNT = 64,
USER_WORKSTATION_TRUST_ACCOUNT = 128,
USER_SERVER_TRUST_ACCOUNT = 256,
USER_DONT_EXPIRE_PASSWORD = 512,
USER_ACCOUNT_AUTO_LOCKED = 1024,
USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 2048,
USER_SMARTCARD_REQUIRED = 4096,
USER_TRUSTED_FOR_DELEGATION = 8192,
USER_NOT_DELEGATED = 16384,
USER_USE_DES_KEY_ONLY = 32768,
USER_DONT_REQUIRE_PREAUTH = 65536,
USER_MACHINE_ACCOUNT_MASK = 448,
USER_ACCOUNT_TYPE_MASK = 472,
USER_ALL_PARAMETERS = 2097152;
/+
struct UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
}
alias UNICODE_STRING* PUNICODE_STRING;
struct STRING {
USHORT Length;
USHORT MaximumLength;
PCHAR Buffer;
}
alias STRING* PSTRING;
+/
mixin DECLARE_HANDLE!("SAM_HANDLE");
alias SAM_HANDLE* PSAM_HANDLE;
struct OLD_LARGE_INTEGER {
ULONG LowPart;
LONG HighPart;
}
alias OLD_LARGE_INTEGER* POLD_LARGE_INTEGER;
enum NETLOGON_LOGON_INFO_CLASS {
NetlogonInteractiveInformation = 1,
NetlogonNetworkInformation,
NetlogonServiceInformation,
NetlogonGenericInformation,
NetlogonInteractiveTransitiveInformation,
NetlogonNetworkTransitiveInformation,
NetlogonServiceTransitiveInformation
}
enum CYPHER_BLOCK_LENGTH = 8;
enum USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2;
enum CLEAR_BLOCK_LENGTH = 8;
struct CYPHER_BLOCK {
CHAR[CYPHER_BLOCK_LENGTH] data = 0;
}
alias CYPHER_BLOCK* PCYPHER_BLOCK;
struct CLEAR_BLOCK {
CHAR[CLEAR_BLOCK_LENGTH] data = 0;
}
alias CLEAR_BLOCK* PCLEAR_BLOCK;
struct LM_OWF_PASSWORD {
CYPHER_BLOCK[2] data;
}
alias LM_OWF_PASSWORD* PLM_OWF_PASSWORD;
struct USER_SESSION_KEY {
CYPHER_BLOCK[2] data;
}
alias USER_SESSION_KEY* PUSER_SESSION_KEY;
alias CLEAR_BLOCK LM_CHALLENGE;
alias LM_CHALLENGE* PLM_CHALLENGE;
alias LM_OWF_PASSWORD NT_OWF_PASSWORD;
alias NT_OWF_PASSWORD* PNT_OWF_PASSWORD;
alias LM_CHALLENGE NT_CHALLENGE;
alias NT_CHALLENGE* PNT_CHALLENGE;
struct LOGON_HOURS {
USHORT UnitsPerWeek;
PUCHAR LogonHours;
}
alias LOGON_HOURS* PLOGON_HOURS;
struct SR_SECURITY_DESCRIPTOR {
ULONG Length;
PUCHAR SecurityDescriptor;
}
alias SR_SECURITY_DESCRIPTOR* PSR_SECURITY_DESCRIPTOR;
align(4):
struct USER_ALL_INFORMATION {
LARGE_INTEGER LastLogon;
LARGE_INTEGER LastLogoff;
LARGE_INTEGER PasswordLastSet;
LARGE_INTEGER AccountExpires;
LARGE_INTEGER PasswordCanChange;
LARGE_INTEGER PasswordMustChange;
UNICODE_STRING UserName;
UNICODE_STRING FullName;
UNICODE_STRING HomeDirectory;
UNICODE_STRING HomeDirectoryDrive;
UNICODE_STRING ScriptPath;
UNICODE_STRING ProfilePath;
UNICODE_STRING AdminComment;
UNICODE_STRING WorkStations;
UNICODE_STRING UserComment;
UNICODE_STRING Parameters;
UNICODE_STRING LmPassword;
UNICODE_STRING NtPassword;
UNICODE_STRING PrivateData;
SR_SECURITY_DESCRIPTOR SecurityDescriptor;
ULONG UserId;
ULONG PrimaryGroupId;
ULONG UserAccountControl;
ULONG WhichFields;
LOGON_HOURS LogonHours;
USHORT BadPasswordCount;
USHORT LogonCount;
USHORT CountryCode;
USHORT CodePage;
BOOLEAN LmPasswordPresent;
BOOLEAN NtPasswordPresent;
BOOLEAN PasswordExpired;
BOOLEAN PrivateDataSensitive;
}
alias USER_ALL_INFORMATION* PUSER_ALL_INFORMATION;
align:
struct MSV1_0_VALIDATION_INFO {
LARGE_INTEGER LogoffTime;
LARGE_INTEGER KickoffTime;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
USER_SESSION_KEY SessionKey;
BOOLEAN Authoritative;
ULONG UserFlags;
ULONG WhichFields;
ULONG UserId;
}
alias MSV1_0_VALIDATION_INFO* PMSV1_0_VALIDATION_INFO;
struct NETLOGON_LOGON_IDENTITY_INFO {
UNICODE_STRING LogonDomainName;
ULONG ParameterControl;
OLD_LARGE_INTEGER LogonId;
UNICODE_STRING UserName;
UNICODE_STRING Workstation;
}
alias NETLOGON_LOGON_IDENTITY_INFO* PNETLOGON_LOGON_IDENTITY_INFO;
struct NETLOGON_INTERACTIVE_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_OWF_PASSWORD LmOwfPassword;
NT_OWF_PASSWORD NtOwfPassword;
}
alias NETLOGON_INTERACTIVE_INFO* PNETLOGON_INTERACTIVE_INFO;
struct NETLOGON_GENERIC_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
UNICODE_STRING PackageName;
ULONG DataLength;
PUCHAR LogonData;
}
alias NETLOGON_GENERIC_INFO* PNETLOGON_GENERIC_INFO;
struct NETLOGON_NETWORK_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_CHALLENGE LmChallenge;
STRING NtChallengeResponse;
STRING LmChallengeResponse;
}
alias NETLOGON_NETWORK_INFO* PNETLOGON_NETWORK_INFO;
struct NETLOGON_SERVICE_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_OWF_PASSWORD LmOwfPassword;
NT_OWF_PASSWORD NtOwfPassword;
}
alias NETLOGON_SERVICE_INFO* PNETLOGON_SERVICE_INFO;
extern (Windows) {
NTSTATUS Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID,
ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
NTSTATUS Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID,
ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG,
PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER);
NTSTATUS Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*);
NTSTATUS Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID,
ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE,
PMSV1_0_VALIDATION_INFO,PULONG);
}
|