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