1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms
6 // This file contains structures, function prototypes, and definitions
7 // for the NetUser, NetUserModals, NetGroup, NetAccess, and NetLogon API.
8 use shared::basetsd::PDWORD_PTR;
9 use shared::lmcons::{ENCRYPTED_PWLEN, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL, PWLEN};
10 use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, LPBYTE, LPDWORD, LPVOID, PBYTE, ULONG};
11 use um::winnt::{BOOLEAN, LONG, LPCWSTR, LPWSTR, PSID, PVOID, PZPWSTR, SID_NAME_USE};
12 extern "system" {
NetUserAdd( servername: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS13     pub fn NetUserAdd(
14         servername: LPCWSTR,
15         level: DWORD,
16         buf: LPBYTE,
17         parm_err: LPDWORD,
18     ) -> NET_API_STATUS;
NetUserEnum( servername: LPCWSTR, level: DWORD, filter: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, resumehandle: LPDWORD, ) -> NET_API_STATUS19     pub fn NetUserEnum(
20         servername: LPCWSTR,
21         level: DWORD,
22         filter: DWORD,
23         bufptr: *mut LPBYTE,
24         prefmaxlen: DWORD,
25         entriesread: LPDWORD,
26         totalentries: LPDWORD,
27         resumehandle: LPDWORD,
28     ) -> NET_API_STATUS;
NetUserGetInfo( servername: LPCWSTR, username: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, ) -> NET_API_STATUS29     pub fn NetUserGetInfo(
30         servername: LPCWSTR,
31         username: LPCWSTR,
32         level: DWORD,
33         bufptr: *mut LPBYTE,
34     ) -> NET_API_STATUS;
NetUserSetInfo( servername: LPCWSTR, username: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS35     pub fn NetUserSetInfo(
36         servername: LPCWSTR,
37         username: LPCWSTR,
38         level: DWORD,
39         buf: LPBYTE,
40         parm_err: LPDWORD,
41     ) -> NET_API_STATUS;
NetUserDel( servername: LPCWSTR, username: LPCWSTR, ) -> NET_API_STATUS42     pub fn NetUserDel(
43         servername: LPCWSTR,
44         username: LPCWSTR,
45     ) -> NET_API_STATUS;
NetUserGetGroups( servername: LPCWSTR, username: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, ) -> NET_API_STATUS46     pub fn NetUserGetGroups(
47         servername: LPCWSTR,
48         username: LPCWSTR,
49         level: DWORD,
50         bufptr: *mut LPBYTE,
51         prefmaxlen: DWORD,
52         entriesread: LPDWORD,
53         totalentries: LPDWORD,
54     ) -> NET_API_STATUS;
NetUserSetGroups( servername: LPCWSTR, username: LPCWSTR, level: DWORD, buf: LPBYTE, num_entries: DWORD, ) -> NET_API_STATUS55     pub fn NetUserSetGroups(
56         servername: LPCWSTR,
57         username: LPCWSTR,
58         level: DWORD,
59         buf: LPBYTE,
60         num_entries: DWORD,
61     ) -> NET_API_STATUS;
NetUserGetLocalGroups( servername: LPCWSTR, level: DWORD, flags: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, ) -> NET_API_STATUS62     pub fn NetUserGetLocalGroups(
63         servername: LPCWSTR,
64         level: DWORD,
65         flags: DWORD,
66         bufptr: *mut LPBYTE,
67         prefmaxlen: DWORD,
68         entriesread: LPDWORD,
69         totalentries: LPDWORD,
70     ) -> NET_API_STATUS;
NetUserModalsGet( servername: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, ) -> NET_API_STATUS71     pub fn NetUserModalsGet(
72         servername: LPCWSTR,
73         level: DWORD,
74         bufptr: *mut LPBYTE,
75     ) -> NET_API_STATUS;
NetUserModalsSet( servername: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS76     pub fn NetUserModalsSet(
77         servername: LPCWSTR,
78         level: DWORD,
79         buf: LPBYTE,
80         parm_err: LPDWORD,
81     ) -> NET_API_STATUS;
NetUserChangePassword( domainname: LPCWSTR, username: LPCWSTR, oldpassword: LPCWSTR, newpassword: LPCWSTR, ) -> NET_API_STATUS82     pub fn NetUserChangePassword(
83         domainname: LPCWSTR,
84         username: LPCWSTR,
85         oldpassword: LPCWSTR,
86         newpassword: LPCWSTR,
87     ) -> NET_API_STATUS;
88 }
89 STRUCT!{struct USER_INFO_0 {
90     usri0_name: LPWSTR,
91 }}
92 pub type PUSER_INFO_0 = *mut USER_INFO_0;
93 pub type LPUSER_INFO_0 = *mut USER_INFO_0;
94 STRUCT!{struct USER_INFO_1 {
95     usri1_name: LPWSTR,
96     usri1_password: LPWSTR,
97     usri1_password_age: DWORD,
98     usri1_priv: DWORD,
99     usri1_home_dir: LPWSTR,
100     usri1_comment: LPWSTR,
101     usri1_flags: DWORD,
102     usri1_script_path: LPWSTR,
103 }}
104 pub type PUSER_INFO_1 = *mut USER_INFO_1;
105 pub type LPUSER_INFO_1 = *mut USER_INFO_1;
106 STRUCT!{struct USER_INFO_2 {
107     usri2_name: LPWSTR,
108     usri2_password: LPWSTR,
109     usri2_password_age: DWORD,
110     usri2_priv: DWORD,
111     usri2_home_dir: LPWSTR,
112     usri2_comment: LPWSTR,
113     usri2_flags: DWORD,
114     usri2_script_path: LPWSTR,
115     usri2_auth_flags: DWORD,
116     usri2_full_name: LPWSTR,
117     usri2_usr_comment: LPWSTR,
118     usri2_parms: LPWSTR,
119     usri2_workstations: LPWSTR,
120     usri2_last_logon: DWORD,
121     usri2_last_logoff: DWORD,
122     usri2_acct_expires: DWORD,
123     usri2_max_storage: DWORD,
124     usri2_units_per_week: DWORD,
125     usri2_logon_hours: PBYTE,
126     usri2_bad_pw_count: DWORD,
127     usri2_num_logons: DWORD,
128     usri2_logon_server: LPWSTR,
129     usri2_country_code: DWORD,
130     usri2_code_page: DWORD,
131 }}
132 pub type PUSER_INFO_2 = *mut USER_INFO_2;
133 pub type LPUSER_INFO_2 = *mut USER_INFO_2;
134 STRUCT!{struct USER_INFO_3 {
135     usri3_name: LPWSTR,
136     usri3_password: LPWSTR,
137     usri3_password_age: DWORD,
138     usri3_priv: DWORD,
139     usri3_home_dir: LPWSTR,
140     usri3_comment: LPWSTR,
141     usri3_flags: DWORD,
142     usri3_script_path: LPWSTR,
143     usri3_auth_flags: DWORD,
144     usri3_full_name: LPWSTR,
145     usri3_usr_comment: LPWSTR,
146     usri3_parms: LPWSTR,
147     usri3_workstations: LPWSTR,
148     usri3_last_logon: DWORD,
149     usri3_last_logoff: DWORD,
150     usri3_acct_expires: DWORD,
151     usri3_max_storage: DWORD,
152     usri3_units_per_week: DWORD,
153     usri3_logon_hours: PBYTE,
154     usri3_bad_pw_count: DWORD,
155     usri3_num_logons: DWORD,
156     usri3_logon_server: LPWSTR,
157     usri3_country_code: DWORD,
158     usri3_code_page: DWORD,
159     usri3_user_id: DWORD,
160     usri3_primary_group_id: DWORD,
161     usri3_profile: LPWSTR,
162     usri3_home_dir_drive: LPWSTR,
163     usri3_password_expired: DWORD,
164 }}
165 pub type PUSER_INFO_3 = *mut USER_INFO_3;
166 pub type LPUSER_INFO_3 = *mut USER_INFO_3;
167 STRUCT!{struct USER_INFO_4 {
168     usri4_name: LPWSTR,
169     usri4_password: LPWSTR,
170     usri4_password_age: DWORD,
171     usri4_priv: DWORD,
172     usri4_home_dir: LPWSTR,
173     usri4_comment: LPWSTR,
174     usri4_flags: DWORD,
175     usri4_script_path: LPWSTR,
176     usri4_auth_flags: DWORD,
177     usri4_full_name: LPWSTR,
178     usri4_usr_comment: LPWSTR,
179     usri4_parms: LPWSTR,
180     usri4_workstations: LPWSTR,
181     usri4_last_logon: DWORD,
182     usri4_last_logoff: DWORD,
183     usri4_acct_expires: DWORD,
184     usri4_max_storage: DWORD,
185     usri4_units_per_week: DWORD,
186     usri4_logon_hours: PBYTE,
187     usri4_bad_pw_count: DWORD,
188     usri4_num_logons: DWORD,
189     usri4_logon_server: LPWSTR,
190     usri4_country_code: DWORD,
191     usri4_code_page: DWORD,
192     usri4_user_sid: PSID,
193     usri4_primary_group_id: DWORD,
194     usri4_profile: LPWSTR,
195     usri4_home_dir_drive: LPWSTR,
196     usri4_password_expired: DWORD,
197 }}
198 pub type PUSER_INFO_4 = *mut USER_INFO_4;
199 pub type LPUSER_INFO_4 = *mut USER_INFO_4;
200 STRUCT!{struct USER_INFO_10 {
201     usri10_name: LPWSTR,
202     usri10_comment: LPWSTR,
203     usri10_usr_comment: LPWSTR,
204     usri10_full_name: LPWSTR,
205 }}
206 pub type PUSER_INFO_10 = *mut USER_INFO_10;
207 pub type LPUSER_INFO_10 = *mut USER_INFO_10;
208 STRUCT!{struct USER_INFO_11 {
209     usri11_name: LPWSTR,
210     usri11_comment: LPWSTR,
211     usri11_usr_comment: LPWSTR,
212     usri11_full_name: LPWSTR,
213     usri11_priv: DWORD,
214     usri11_auth_flags: DWORD,
215     usri11_password_age: DWORD,
216     usri11_home_dir: LPWSTR,
217     usri11_parms: LPWSTR,
218     usri11_last_logon: DWORD,
219     usri11_last_logoff: DWORD,
220     usri11_bad_pw_count: DWORD,
221     usri11_num_logons: DWORD,
222     usri11_logon_server: LPWSTR,
223     usri11_country_code: DWORD,
224     usri11_workstations: LPWSTR,
225     usri11_max_storage: DWORD,
226     usri11_units_per_week: DWORD,
227     usri11_logon_hours: PBYTE,
228     usri11_code_page: DWORD,
229 }}
230 pub type PUSER_INFO_11 = *mut USER_INFO_11;
231 pub type LPUSER_INFO_11 = *mut USER_INFO_11;
232 STRUCT!{struct USER_INFO_20 {
233     usri20_name: LPWSTR,
234     usri20_full_name: LPWSTR,
235     usri20_comment: LPWSTR,
236     usri20_flags: DWORD,
237     usri20_user_id: DWORD,
238 }}
239 pub type PUSER_INFO_20 = *mut USER_INFO_20;
240 pub type LPUSER_INFO_20 = *mut USER_INFO_20;
241 STRUCT!{struct USER_INFO_21 {
242     usri21_password: [BYTE; ENCRYPTED_PWLEN],
243 }}
244 pub type PUSER_INFO_21 = *mut USER_INFO_21;
245 pub type LPUSER_INFO_21 = *mut USER_INFO_21;
246 STRUCT!{struct USER_INFO_22 {
247     usri22_name: LPWSTR,
248     usri22_password: [BYTE; ENCRYPTED_PWLEN],
249     usri22_password_age: DWORD,
250     usri22_priv: DWORD,
251     usri22_home_dir: LPWSTR,
252     usri22_comment: LPWSTR,
253     usri22_flags: DWORD,
254     usri22_script_path: LPWSTR,
255     usri22_auth_flags: DWORD,
256     usri22_full_name: LPWSTR,
257     usri22_usr_comment: LPWSTR,
258     usri22_parms: LPWSTR,
259     usri22_workstations: LPWSTR,
260     usri22_last_logon: DWORD,
261     usri22_last_logoff: DWORD,
262     usri22_acct_expires: DWORD,
263     usri22_max_storage: DWORD,
264     usri22_units_per_week: DWORD,
265     usri22_logon_hours: PBYTE,
266     usri22_bad_pw_count: DWORD,
267     usri22_num_logons: DWORD,
268     usri22_logon_server: LPWSTR,
269     usri22_country_code: DWORD,
270     usri22_code_page: DWORD,
271 }}
272 pub type PUSER_INFO_22 = *mut USER_INFO_22;
273 pub type LPUSER_INFO_22 = *mut USER_INFO_22;
274 STRUCT!{struct USER_INFO_23 {
275     usri23_name: LPWSTR,
276     usri23_full_name: LPWSTR,
277     usri23_comment: LPWSTR,
278     usri23_flags: DWORD,
279     usri23_user_sid: PSID,
280 }}
281 pub type PUSER_INFO_23 = *mut USER_INFO_23;
282 pub type LPUSER_INFO_23 = *mut USER_INFO_23;
283 STRUCT!{struct USER_INFO_24 {
284     usri24_internet_identity: BOOL,
285     usri24_flags: DWORD,
286     usri24_internet_provider_name: LPWSTR,
287     usri24_internet_principal_name: LPWSTR,
288     usri24_user_sid: PSID,
289 }}
290 pub type PUSER_INFO_24 = *mut USER_INFO_24;
291 pub type LPUSER_INFO_24 = *mut USER_INFO_24;
292 STRUCT!{struct USER_INFO_1003 {
293     usri1003_password: LPWSTR,
294 }}
295 pub type PUSER_INFO_1003 = *mut USER_INFO_1003;
296 pub type LPUSER_INFO_1003 = *mut USER_INFO_1003;
297 STRUCT!{struct USER_INFO_1005 {
298     usri1005_priv: DWORD,
299 }}
300 pub type PUSER_INFO_1005 = *mut USER_INFO_1005;
301 pub type LPUSER_INFO_1005 = *mut USER_INFO_1005;
302 STRUCT!{struct USER_INFO_1006 {
303     usri1006_home_dir: LPWSTR,
304 }}
305 pub type PUSER_INFO_1006 = *mut USER_INFO_1006;
306 pub type LPUSER_INFO_1006 = *mut USER_INFO_1006;
307 STRUCT!{struct USER_INFO_1007 {
308     usri1007_comment: LPWSTR,
309 }}
310 pub type PUSER_INFO_1007 = *mut USER_INFO_1007;
311 pub type LPUSER_INFO_1007 = *mut USER_INFO_1007;
312 STRUCT!{struct USER_INFO_1008 {
313     usri1008_flags: DWORD,
314 }}
315 pub type PUSER_INFO_1008 = *mut USER_INFO_1008;
316 pub type LPUSER_INFO_1008 = *mut USER_INFO_1008;
317 STRUCT!{struct USER_INFO_1009 {
318     usri1009_script_path: LPWSTR,
319 }}
320 pub type PUSER_INFO_1009 = *mut USER_INFO_1009;
321 pub type LPUSER_INFO_1009 = *mut USER_INFO_1009;
322 STRUCT!{struct USER_INFO_1010 {
323     usri1010_auth_flags: DWORD,
324 }}
325 pub type PUSER_INFO_1010 = *mut USER_INFO_1010;
326 pub type LPUSER_INFO_1010 = *mut USER_INFO_1010;
327 STRUCT!{struct USER_INFO_1011 {
328     usri1011_full_name: LPWSTR,
329 }}
330 pub type PUSER_INFO_1011 = *mut USER_INFO_1011;
331 pub type LPUSER_INFO_1011 = *mut USER_INFO_1011;
332 STRUCT!{struct USER_INFO_1012 {
333     usri1012_usr_comment: LPWSTR,
334 }}
335 pub type PUSER_INFO_1012 = *mut USER_INFO_1012;
336 pub type LPUSER_INFO_1012 = *mut USER_INFO_1012;
337 STRUCT!{struct USER_INFO_1013 {
338     usri1013_parms: LPWSTR,
339 }}
340 pub type PUSER_INFO_1013 = *mut USER_INFO_1013;
341 pub type LPUSER_INFO_1013 = *mut USER_INFO_1013;
342 STRUCT!{struct USER_INFO_1014 {
343     usri1014_workstations: LPWSTR,
344 }}
345 pub type PUSER_INFO_1014 = *mut USER_INFO_1014;
346 pub type LPUSER_INFO_1014 = *mut USER_INFO_1014;
347 STRUCT!{struct USER_INFO_1017 {
348     usri1017_acct_expires: DWORD,
349 }}
350 pub type PUSER_INFO_1017 = *mut USER_INFO_1017;
351 pub type LPUSER_INFO_1017 = *mut USER_INFO_1017;
352 STRUCT!{struct USER_INFO_1018 {
353     usri1018_max_storage: DWORD,
354 }}
355 pub type PUSER_INFO_1018 = *mut USER_INFO_1018;
356 pub type LPUSER_INFO_1018 = *mut USER_INFO_1018;
357 STRUCT!{struct USER_INFO_1020 {
358     usri1020_units_per_week: DWORD,
359     usri1020_logon_hours: LPBYTE,
360 }}
361 pub type PUSER_INFO_1020 = *mut USER_INFO_1020;
362 pub type LPUSER_INFO_1020 = *mut USER_INFO_1020;
363 STRUCT!{struct USER_INFO_1023 {
364     usri1023_logon_server: LPWSTR,
365 }}
366 pub type PUSER_INFO_1023 = *mut USER_INFO_1023;
367 pub type LPUSER_INFO_1023 = *mut USER_INFO_1023;
368 STRUCT!{struct USER_INFO_1024 {
369     usri1024_country_code: DWORD,
370 }}
371 pub type PUSER_INFO_1024 = *mut USER_INFO_1024;
372 pub type LPUSER_INFO_1024 = *mut USER_INFO_1024;
373 STRUCT!{struct USER_INFO_1025 {
374     usri1025_code_page: DWORD,
375 }}
376 pub type PUSER_INFO_1025 = *mut USER_INFO_1025;
377 pub type LPUSER_INFO_1025 = *mut USER_INFO_1025;
378 STRUCT!{struct USER_INFO_1051 {
379     usri1051_primary_group_id: DWORD,
380 }}
381 pub type PUSER_INFO_1051 = *mut USER_INFO_1051;
382 pub type LPUSER_INFO_1051 = *mut USER_INFO_1051;
383 STRUCT!{struct USER_INFO_1052 {
384     usri1052_profile: LPWSTR,
385 }}
386 pub type PUSER_INFO_1052 = *mut USER_INFO_1052;
387 pub type LPUSER_INFO_1052 = *mut USER_INFO_1052;
388 STRUCT!{struct USER_INFO_1053 {
389     usri1053_home_dir_drive: LPWSTR,
390 }}
391 pub type PUSER_INFO_1053 = *mut USER_INFO_1053;
392 pub type LPUSER_INFO_1053 = *mut USER_INFO_1053;
393 STRUCT!{struct USER_MODALS_INFO_0 {
394     usrmod0_min_passwd_len: DWORD,
395     usrmod0_max_passwd_age: DWORD,
396     usrmod0_min_passwd_age: DWORD,
397     usrmod0_force_logoff: DWORD,
398     usrmod0_password_hist_len: DWORD,
399 }}
400 pub type PUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
401 pub type LPUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
402 STRUCT!{struct USER_MODALS_INFO_1 {
403     usrmod1_role: DWORD,
404     usrmod1_primary: LPWSTR,
405 }}
406 pub type PUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
407 pub type LPUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
408 STRUCT!{struct USER_MODALS_INFO_2 {
409     usrmod2_domain_name: LPWSTR,
410     usrmod2_domain_id: PSID,
411 }}
412 pub type PUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
413 pub type LPUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
414 STRUCT!{struct USER_MODALS_INFO_3 {
415     usrmod3_lockout_duration: DWORD,
416     usrmod3_lockout_observation_window: DWORD,
417     usrmod3_lockout_threshold: DWORD,
418 }}
419 pub type PUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
420 pub type LPUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
421 STRUCT!{struct USER_MODALS_INFO_1001 {
422     usrmod1001_min_passwd_len: DWORD,
423 }}
424 pub type PUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
425 pub type LPUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
426 STRUCT!{struct USER_MODALS_INFO_1002 {
427     usrmod1002_max_passwd_age: DWORD,
428 }}
429 pub type PUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
430 pub type LPUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
431 STRUCT!{struct USER_MODALS_INFO_1003 {
432     usrmod1003_min_passwd_age: DWORD,
433 }}
434 pub type PUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
435 pub type LPUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
436 STRUCT!{struct USER_MODALS_INFO_1004 {
437     usrmod1004_force_logoff: DWORD,
438 }}
439 pub type PUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
440 pub type LPUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
441 STRUCT!{struct USER_MODALS_INFO_1005 {
442     usrmod1005_password_hist_len: DWORD,
443 }}
444 pub type PUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
445 pub type LPUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
446 STRUCT!{struct USER_MODALS_INFO_1006 {
447     usrmod1006_role: DWORD,
448 }}
449 pub type PUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
450 pub type LPUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
451 STRUCT!{struct USER_MODALS_INFO_1007 {
452     usrmod1007_primary: LPWSTR,
453 }}
454 pub type PUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
455 pub type LPUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
456 pub const UF_SCRIPT: DWORD = 0x0001;
457 pub const UF_ACCOUNTDISABLE: DWORD = 0x0002;
458 pub const UF_HOMEDIR_REQUIRED: DWORD = 0x0008;
459 pub const UF_LOCKOUT: DWORD = 0x0010;
460 pub const UF_PASSWD_NOTREQD: DWORD = 0x0020;
461 pub const UF_PASSWD_CANT_CHANGE: DWORD = 0x0040;
462 pub const UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: DWORD = 0x0080;
463 pub const UF_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0100;
464 pub const UF_NORMAL_ACCOUNT: DWORD = 0x0200;
465 pub const UF_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0800;
466 pub const UF_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x1000;
467 pub const UF_SERVER_TRUST_ACCOUNT: DWORD = 0x2000;
468 pub const UF_MACHINE_ACCOUNT_MASK: DWORD = UF_INTERDOMAIN_TRUST_ACCOUNT
469     | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT;
470 pub const UF_ACCOUNT_TYPE_MASK: DWORD = UF_TEMP_DUPLICATE_ACCOUNT | UF_NORMAL_ACCOUNT
471     | UF_INTERDOMAIN_TRUST_ACCOUNT | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT;
472 pub const UF_DONT_EXPIRE_PASSWD: DWORD = 0x10000;
473 pub const UF_MNS_LOGON_ACCOUNT: DWORD = 0x20000;
474 pub const UF_SMARTCARD_REQUIRED: DWORD = 0x40000;
475 pub const UF_TRUSTED_FOR_DELEGATION: DWORD = 0x80000;
476 pub const UF_NOT_DELEGATED: DWORD = 0x100000;
477 pub const UF_USE_DES_KEY_ONLY: DWORD = 0x200000;
478 pub const UF_DONT_REQUIRE_PREAUTH: DWORD = 0x400000;
479 pub const UF_PASSWORD_EXPIRED: DWORD = 0x800000;
480 pub const UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: DWORD = 0x1000000;
481 pub const UF_NO_AUTH_DATA_REQUIRED: DWORD = 0x2000000;
482 pub const UF_PARTIAL_SECRETS_ACCOUNT: DWORD = 0x4000000;
483 pub const UF_USE_AES_KEYS: DWORD = 0x8000000;
484 pub const UF_SETTABLE_BITS: DWORD = UF_SCRIPT | UF_ACCOUNTDISABLE | UF_LOCKOUT
485     | UF_HOMEDIR_REQUIRED | UF_PASSWD_NOTREQD | UF_PASSWD_CANT_CHANGE | UF_ACCOUNT_TYPE_MASK
486     | UF_DONT_EXPIRE_PASSWD | UF_MNS_LOGON_ACCOUNT | UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED
487     | UF_SMARTCARD_REQUIRED | UF_TRUSTED_FOR_DELEGATION | UF_NOT_DELEGATED | UF_USE_DES_KEY_ONLY
488     | UF_DONT_REQUIRE_PREAUTH | UF_PASSWORD_EXPIRED | UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
489     | UF_NO_AUTH_DATA_REQUIRED | UF_USE_AES_KEYS | UF_PARTIAL_SECRETS_ACCOUNT;
490 pub const FILTER_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0001;
491 pub const FILTER_NORMAL_ACCOUNT: DWORD = 0x0002;
492 pub const FILTER_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0008;
493 pub const FILTER_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x0010;
494 pub const FILTER_SERVER_TRUST_ACCOUNT: DWORD = 0x0020;
495 pub const LG_INCLUDE_INDIRECT: DWORD = 0x0001;
496 pub const AF_OP_PRINT: DWORD = 0x1;
497 pub const AF_OP_COMM: DWORD = 0x2;
498 pub const AF_OP_SERVER: DWORD = 0x4;
499 pub const AF_OP_ACCOUNTS: DWORD = 0x8;
500 pub const AF_SETTABLE_BITS: DWORD = AF_OP_PRINT | AF_OP_COMM | AF_OP_SERVER | AF_OP_ACCOUNTS;
501 pub const UAS_ROLE_STANDALONE: DWORD = 0;
502 pub const UAS_ROLE_MEMBER: DWORD = 1;
503 pub const UAS_ROLE_BACKUP: DWORD = 2;
504 pub const UAS_ROLE_PRIMARY: DWORD = 3;
505 pub const USER_NAME_PARMNUM: DWORD = 1;
506 pub const USER_PASSWORD_PARMNUM: DWORD = 3;
507 pub const USER_PASSWORD_AGE_PARMNUM: DWORD = 4;
508 pub const USER_PRIV_PARMNUM: DWORD = 5;
509 pub const USER_HOME_DIR_PARMNUM: DWORD = 6;
510 pub const USER_COMMENT_PARMNUM: DWORD = 7;
511 pub const USER_FLAGS_PARMNUM: DWORD = 8;
512 pub const USER_SCRIPT_PATH_PARMNUM: DWORD = 9;
513 pub const USER_AUTH_FLAGS_PARMNUM: DWORD = 10;
514 pub const USER_FULL_NAME_PARMNUM: DWORD = 11;
515 pub const USER_USR_COMMENT_PARMNUM: DWORD = 12;
516 pub const USER_PARMS_PARMNUM: DWORD = 13;
517 pub const USER_WORKSTATIONS_PARMNUM: DWORD = 14;
518 pub const USER_LAST_LOGON_PARMNUM: DWORD = 15;
519 pub const USER_LAST_LOGOFF_PARMNUM: DWORD = 16;
520 pub const USER_ACCT_EXPIRES_PARMNUM: DWORD = 17;
521 pub const USER_MAX_STORAGE_PARMNUM: DWORD = 18;
522 pub const USER_UNITS_PER_WEEK_PARMNUM: DWORD = 19;
523 pub const USER_LOGON_HOURS_PARMNUM: DWORD = 20;
524 pub const USER_PAD_PW_COUNT_PARMNUM: DWORD = 21;
525 pub const USER_NUM_LOGONS_PARMNUM: DWORD = 22;
526 pub const USER_LOGON_SERVER_PARMNUM: DWORD = 23;
527 pub const USER_COUNTRY_CODE_PARMNUM: DWORD = 24;
528 pub const USER_CODE_PAGE_PARMNUM: DWORD = 25;
529 pub const USER_PRIMARY_GROUP_PARMNUM: DWORD = 51;
530 pub const USER_PROFILE: DWORD = 52;
531 pub const USER_PROFILE_PARMNUM: DWORD = 52;
532 pub const USER_HOME_DIR_DRIVE_PARMNUM: DWORD = 53;
533 pub const USER_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM;
534 pub const USER_PASSWORD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM;
535 pub const USER_PASSWORD_AGE_INFOLEVEL: DWORD =
536     PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM;
537 pub const USER_PRIV_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM;
538 pub const USER_HOME_DIR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM;
539 pub const USER_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM;
540 pub const USER_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM;
541 pub const USER_SCRIPT_PATH_INFOLEVEL: DWORD =
542     PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM;
543 pub const USER_AUTH_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM;
544 pub const USER_FULL_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM;
545 pub const USER_USR_COMMENT_INFOLEVEL: DWORD =
546     PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM;
547 pub const USER_PARMS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM;
548 pub const USER_WORKSTATIONS_INFOLEVEL: DWORD =
549     PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM;
550 pub const USER_LAST_LOGON_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM;
551 pub const USER_LAST_LOGOFF_INFOLEVEL: DWORD =
552     PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM;
553 pub const USER_ACCT_EXPIRES_INFOLEVEL: DWORD =
554     PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM;
555 pub const USER_MAX_STORAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM;
556 pub const USER_UNITS_PER_WEEK_INFOLEVEL: DWORD =
557     PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM;
558 pub const USER_LOGON_HOURS_INFOLEVEL: DWORD =
559     PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM;
560 pub const USER_PAD_PW_COUNT_INFOLEVEL: DWORD =
561     PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM;
562 pub const USER_NUM_LOGONS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM;
563 pub const USER_LOGON_SERVER_INFOLEVEL: DWORD =
564     PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM;
565 pub const USER_COUNTRY_CODE_INFOLEVEL: DWORD =
566     PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM;
567 pub const USER_CODE_PAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM;
568 pub const USER_PRIMARY_GROUP_INFOLEVEL: DWORD =
569     PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM;
570 pub const USER_HOME_DIR_DRIVE_INFOLEVEL: DWORD =
571     PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM;
572 pub const NULL_USERSETINFO_PASSWD: &'static str = "              ";
573 pub const TIMEQ_FOREVER: DWORD = -1i32 as u32;
574 pub const USER_MAXSTORAGE_UNLIMITED: DWORD = -1i32 as u32;
575 pub const USER_NO_LOGOFF: DWORD = -1i32 as u32;
576 pub const UNITS_PER_DAY: DWORD = 24;
577 pub const UNITS_PER_WEEK: DWORD = UNITS_PER_DAY * 7;
578 pub const USER_PRIV_MASK: DWORD = 0x3;
579 pub const USER_PRIV_GUEST: DWORD = 0;
580 pub const USER_PRIV_USER: DWORD = 1;
581 pub const USER_PRIV_ADMIN: DWORD = 2;
582 pub const MAX_PASSWD_LEN: DWORD = PWLEN;
583 pub const DEF_MIN_PWLEN: DWORD = 6;
584 pub const DEF_PWUNIQUENESS: DWORD = 5;
585 pub const DEF_MAX_PWHIST: DWORD = 8;
586 pub const DEF_MAX_PWAGE: DWORD = TIMEQ_FOREVER;
587 pub const DEF_MIN_PWAGE: DWORD = 0;
588 pub const DEF_FORCE_LOGOFF: DWORD = 0xffffffff;
589 pub const DEF_MAX_BADPW: DWORD = 0;
590 pub const ONE_DAY: DWORD = 1 * 24 * 3600;
591 pub const VALIDATED_LOGON: DWORD = 0;
592 pub const PASSWORD_EXPIRED: DWORD = 2;
593 pub const NON_VALIDATED_LOGON: DWORD = 3;
594 pub const VALID_LOGOFF: DWORD = 1;
595 pub const MODALS_MIN_PASSWD_LEN_PARMNUM: DWORD = 1;
596 pub const MODALS_MAX_PASSWD_AGE_PARMNUM: DWORD = 2;
597 pub const MODALS_MIN_PASSWD_AGE_PARMNUM: DWORD = 3;
598 pub const MODALS_FORCE_LOGOFF_PARMNUM: DWORD = 4;
599 pub const MODALS_PASSWD_HIST_LEN_PARMNUM: DWORD = 5;
600 pub const MODALS_ROLE_PARMNUM: DWORD = 6;
601 pub const MODALS_PRIMARY_PARMNUM: DWORD = 7;
602 pub const MODALS_DOMAIN_NAME_PARMNUM: DWORD = 8;
603 pub const MODALS_DOMAIN_ID_PARMNUM: DWORD = 9;
604 pub const MODALS_LOCKOUT_DURATION_PARMNUM: DWORD = 10;
605 pub const MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM: DWORD = 11;
606 pub const MODALS_LOCKOUT_THRESHOLD_PARMNUM: DWORD = 12;
607 pub const MODALS_MIN_PASSWD_LEN_INFOLEVEL: DWORD =
608     PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM;
609 pub const MODALS_MAX_PASSWD_AGE_INFOLEVEL: DWORD =
610     PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM;
611 pub const MODALS_MIN_PASSWD_AGE_INFOLEVEL: DWORD =
612     PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM;
613 pub const MODALS_FORCE_LOGOFF_INFOLEVEL: DWORD =
614     PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM;
615 pub const MODALS_PASSWD_HIST_LEN_INFOLEVEL: DWORD =
616     PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM;
617 pub const MODALS_ROLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM;
618 pub const MODALS_PRIMARY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM;
619 pub const MODALS_DOMAIN_NAME_INFOLEVEL: DWORD =
620     PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM;
621 pub const MODALS_DOMAIN_ID_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM;
622 extern "system" {
NetGroupAdd( servername: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS623     pub fn NetGroupAdd(
624         servername: LPCWSTR,
625         level: DWORD,
626         buf: LPBYTE,
627         parm_err: LPDWORD,
628     ) -> NET_API_STATUS;
NetGroupAddUser( servername: LPCWSTR, GroupName: LPCWSTR, username: LPCWSTR, ) -> NET_API_STATUS629     pub fn NetGroupAddUser(
630         servername: LPCWSTR,
631         GroupName: LPCWSTR,
632         username: LPCWSTR,
633     ) -> NET_API_STATUS;
NetGroupEnum( servername: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, resume_handle: PDWORD_PTR, ) -> NET_API_STATUS634     pub fn NetGroupEnum(
635         servername: LPCWSTR,
636         level: DWORD,
637         bufptr: *mut LPBYTE,
638         prefmaxlen: DWORD,
639         entriesread: LPDWORD,
640         totalentries: LPDWORD,
641         resume_handle: PDWORD_PTR,
642     ) -> NET_API_STATUS;
NetGroupGetInfo( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, ) -> NET_API_STATUS643     pub fn NetGroupGetInfo(
644         servername: LPCWSTR,
645         groupname: LPCWSTR,
646         level: DWORD,
647         bufptr: *mut LPBYTE,
648     ) -> NET_API_STATUS;
NetGroupSetInfo( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS649     pub fn NetGroupSetInfo(
650         servername: LPCWSTR,
651         groupname: LPCWSTR,
652         level: DWORD,
653         buf: LPBYTE,
654         parm_err: LPDWORD,
655     ) -> NET_API_STATUS;
NetGroupDel( servername: LPCWSTR, groupname: LPCWSTR, ) -> NET_API_STATUS656     pub fn NetGroupDel(
657         servername: LPCWSTR,
658         groupname: LPCWSTR,
659     ) -> NET_API_STATUS;
NetGroupDelUser( servername: LPCWSTR, GroupName: LPCWSTR, Username: LPCWSTR, ) -> NET_API_STATUS660     pub fn NetGroupDelUser(
661         servername: LPCWSTR,
662         GroupName: LPCWSTR,
663         Username: LPCWSTR,
664     ) -> NET_API_STATUS;
NetGroupGetUsers( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, ResumeHandle: PDWORD_PTR, ) -> NET_API_STATUS665     pub fn NetGroupGetUsers(
666         servername: LPCWSTR,
667         groupname: LPCWSTR,
668         level: DWORD,
669         bufptr: *mut LPBYTE,
670         prefmaxlen: DWORD,
671         entriesread: LPDWORD,
672         totalentries: LPDWORD,
673         ResumeHandle: PDWORD_PTR,
674     ) -> NET_API_STATUS;
NetGroupSetUsers( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, totalentries: DWORD, ) -> NET_API_STATUS675     pub fn NetGroupSetUsers(
676         servername: LPCWSTR,
677         groupname: LPCWSTR,
678         level: DWORD,
679         buf: LPBYTE,
680         totalentries: DWORD,
681     ) -> NET_API_STATUS;
682 }
683 STRUCT!{struct GROUP_INFO_0 {
684     grpi0_name: LPWSTR,
685 }}
686 pub type PGROUP_INFO_0 = *mut GROUP_INFO_0;
687 pub type LPGROUP_INFO_0 = *mut GROUP_INFO_0;
688 STRUCT!{struct GROUP_INFO_1 {
689     grpi1_name: LPWSTR,
690     grpi1_comment: LPWSTR,
691 }}
692 pub type PGROUP_INFO_1 = *mut GROUP_INFO_1;
693 pub type LPGROUP_INFO_1 = *mut GROUP_INFO_1;
694 STRUCT!{struct GROUP_INFO_2 {
695     grpi2_name: LPWSTR,
696     grpi2_comment: LPWSTR,
697     grpi2_group_id: DWORD,
698     grpi2_attributes: DWORD,
699 }}
700 pub type PGROUP_INFO_2 = *mut GROUP_INFO_2;
701 STRUCT!{struct GROUP_INFO_3 {
702     grpi3_name: LPWSTR,
703     grpi3_comment: LPWSTR,
704     grpi3_group_sid: PSID,
705     grpi3_attributes: DWORD,
706 }}
707 pub type PGROUP_INFO_3 = *mut GROUP_INFO_3;
708 STRUCT!{struct GROUP_INFO_1002 {
709     grpi1002_comment: LPWSTR,
710 }}
711 pub type PGROUP_INFO_1002 = *mut GROUP_INFO_1002;
712 pub type LPGROUP_INFO_1002 = *mut GROUP_INFO_1002;
713 STRUCT!{struct GROUP_INFO_1005 {
714     grpi1005_attributes: DWORD,
715 }}
716 pub type PGROUP_INFO_1005 = *mut GROUP_INFO_1005;
717 pub type LPGROUP_INFO_1005 = *mut GROUP_INFO_1005;
718 STRUCT!{struct GROUP_USERS_INFO_0 {
719     grui0_name: LPWSTR,
720 }}
721 pub type PGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
722 pub type LPGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
723 STRUCT!{struct GROUP_USERS_INFO_1 {
724     grui1_name: LPWSTR,
725     grui1_attributes: DWORD,
726 }}
727 pub type PGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
728 pub type LPGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
729 pub const GROUPIDMASK: DWORD = 0x8000;
730 pub const GROUP_SPECIALGRP_USERS: &'static str = "USERS";
731 pub const GROUP_SPECIALGRP_ADMINS: &'static str = "ADMINS";
732 pub const GROUP_SPECIALGRP_GUESTS: &'static str = "GUESTS";
733 pub const GROUP_SPECIALGRP_LOCAL: &'static str = "LOCAL";
734 pub const GROUP_ALL_PARMNUM: DWORD = 0;
735 pub const GROUP_NAME_PARMNUM: DWORD = 1;
736 pub const GROUP_COMMENT_PARMNUM: DWORD = 2;
737 pub const GROUP_ATTRIBUTES_PARMNUM: DWORD = 3;
738 pub const GROUP_ALL_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM;
739 pub const GROUP_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM;
740 pub const GROUP_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM;
741 pub const GROUP_ATTRIBUTES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM;
742 extern "system" {
NetLocalGroupAdd( servername: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS743     pub fn NetLocalGroupAdd(
744         servername: LPCWSTR,
745         level: DWORD,
746         buf: LPBYTE,
747         parm_err: LPDWORD,
748     ) -> NET_API_STATUS;
NetLocalGroupAddMember( servername: LPCWSTR, groupname: LPCWSTR, membersid: PSID, ) -> NET_API_STATUS749     pub fn NetLocalGroupAddMember(
750         servername: LPCWSTR,
751         groupname: LPCWSTR,
752         membersid: PSID,
753     ) -> NET_API_STATUS;
NetLocalGroupEnum( servername: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, resumehandle: PDWORD_PTR, ) -> NET_API_STATUS754     pub fn NetLocalGroupEnum(
755         servername: LPCWSTR,
756         level: DWORD,
757         bufptr: *mut LPBYTE,
758         prefmaxlen: DWORD,
759         entriesread: LPDWORD,
760         totalentries: LPDWORD,
761         resumehandle: PDWORD_PTR,
762     ) -> NET_API_STATUS;
NetLocalGroupGetInfo( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, ) -> NET_API_STATUS763     pub fn NetLocalGroupGetInfo(
764         servername: LPCWSTR,
765         groupname: LPCWSTR,
766         level: DWORD,
767         bufptr: *mut LPBYTE,
768     ) -> NET_API_STATUS;
NetLocalGroupSetInfo( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS769     pub fn NetLocalGroupSetInfo(
770         servername: LPCWSTR,
771         groupname: LPCWSTR,
772         level: DWORD,
773         buf: LPBYTE,
774         parm_err: LPDWORD,
775     ) -> NET_API_STATUS;
NetLocalGroupDel( servername: LPCWSTR, groupname: LPCWSTR, ) -> NET_API_STATUS776     pub fn NetLocalGroupDel(
777         servername: LPCWSTR,
778         groupname: LPCWSTR,
779     ) -> NET_API_STATUS;
NetLocalGroupDelMember( servername: LPCWSTR, groupname: LPCWSTR, membersid: PSID, ) -> NET_API_STATUS780     pub fn NetLocalGroupDelMember(
781         servername: LPCWSTR,
782         groupname: LPCWSTR,
783         membersid: PSID,
784     ) -> NET_API_STATUS;
NetLocalGroupGetMembers( servername: LPCWSTR, localgroupname: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, resumehandle: PDWORD_PTR, ) -> NET_API_STATUS785     pub fn NetLocalGroupGetMembers(
786         servername: LPCWSTR,
787         localgroupname: LPCWSTR,
788         level: DWORD,
789         bufptr: *mut LPBYTE,
790         prefmaxlen: DWORD,
791         entriesread: LPDWORD,
792         totalentries: LPDWORD,
793         resumehandle: PDWORD_PTR,
794     ) -> NET_API_STATUS;
NetLocalGroupSetMembers( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, totalentries: DWORD, ) -> NET_API_STATUS795     pub fn NetLocalGroupSetMembers(
796         servername: LPCWSTR,
797         groupname: LPCWSTR,
798         level: DWORD,
799         buf: LPBYTE,
800         totalentries: DWORD,
801     ) -> NET_API_STATUS;
NetLocalGroupAddMembers( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, totalentries: DWORD, ) -> NET_API_STATUS802     pub fn NetLocalGroupAddMembers(
803         servername: LPCWSTR,
804         groupname: LPCWSTR,
805         level: DWORD,
806         buf: LPBYTE,
807         totalentries: DWORD,
808     ) -> NET_API_STATUS;
NetLocalGroupDelMembers( servername: LPCWSTR, groupname: LPCWSTR, level: DWORD, buf: LPBYTE, totalentries: DWORD, ) -> NET_API_STATUS809     pub fn NetLocalGroupDelMembers(
810         servername: LPCWSTR,
811         groupname: LPCWSTR,
812         level: DWORD,
813         buf: LPBYTE,
814         totalentries: DWORD,
815     ) -> NET_API_STATUS;
816 }
817 STRUCT!{struct LOCALGROUP_INFO_0 {
818     lgrpi0_name: LPWSTR,
819 }}
820 pub type PLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
821 pub type LPLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
822 STRUCT!{struct LOCALGROUP_INFO_1 {
823     lgrpi1_name: LPWSTR,
824     lgrpi1_comment: LPWSTR,
825 }}
826 pub type PLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
827 pub type LPLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
828 STRUCT!{struct LOCALGROUP_INFO_1002 {
829     lgrpi1002_comment: LPWSTR,
830 }}
831 pub type PLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
832 pub type LPLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
833 STRUCT!{struct LOCALGROUP_MEMBERS_INFO_0 {
834     lgrmi0_sid: PSID,
835 }}
836 pub type PLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
837 pub type LPLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
838 STRUCT!{struct LOCALGROUP_MEMBERS_INFO_1 {
839     lgrmi1_sid: PSID,
840     lgrmi1_sidusage: SID_NAME_USE,
841     lgrmi1_name: LPWSTR,
842 }}
843 pub type PLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
844 pub type LPLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
845 STRUCT!{struct LOCALGROUP_MEMBERS_INFO_2 {
846     lgrmi2_sid: PSID,
847     lgrmi2_sidusage: SID_NAME_USE,
848     lgrmi2_domainandname: LPWSTR,
849 }}
850 pub type PLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
851 pub type LPLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
852 STRUCT!{struct LOCALGROUP_MEMBERS_INFO_3 {
853     lgrmi3_domainandname: LPWSTR,
854 }}
855 pub type PLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
856 pub type LPLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
857 STRUCT!{struct LOCALGROUP_USERS_INFO_0 {
858     lgrui0_name: LPWSTR,
859 }}
860 pub type PLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
861 pub type LPLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
862 pub const LOCALGROUP_NAME_PARMNUM: DWORD = 1;
863 pub const LOCALGROUP_COMMENT_PARMNUM: DWORD = 2;
864 extern "system" {
NetQueryDisplayInformation( ServerName: LPCWSTR, Level: DWORD, Index: DWORD, EntriesRequested: DWORD, PreferredMaximumLength: DWORD, ReturnedEntryCount: LPDWORD, SortedBuffer: *mut PVOID, ) -> NET_API_STATUS865     pub fn NetQueryDisplayInformation(
866         ServerName: LPCWSTR,
867         Level: DWORD,
868         Index: DWORD,
869         EntriesRequested: DWORD,
870         PreferredMaximumLength: DWORD,
871         ReturnedEntryCount: LPDWORD,
872         SortedBuffer: *mut PVOID,
873     ) -> NET_API_STATUS;
NetGetDisplayInformationIndex( ServerName: LPCWSTR, Level: DWORD, Prefix: LPCWSTR, Index: LPDWORD, ) -> NET_API_STATUS874     pub fn NetGetDisplayInformationIndex(
875         ServerName: LPCWSTR,
876         Level: DWORD,
877         Prefix: LPCWSTR,
878         Index: LPDWORD,
879     ) -> NET_API_STATUS;
880 }
881 STRUCT!{struct NET_DISPLAY_USER {
882     usri1_name: LPWSTR,
883     usri1_comment: LPWSTR,
884     usri1_flags: DWORD,
885     usri1_full_name: LPWSTR,
886     usri1_user_id: DWORD,
887     usri1_next_index: DWORD,
888 }}
889 pub type PNET_DISPLAY_USER = *mut NET_DISPLAY_USER;
890 STRUCT!{struct NET_DISPLAY_MACHINE {
891     usri2_name: LPWSTR,
892     usri2_comment: LPWSTR,
893     usri2_flags: DWORD,
894     usri2_user_id: DWORD,
895     usri2_next_index: DWORD,
896 }}
897 pub type PNET_DISPLAY_MACHINE = *mut NET_DISPLAY_MACHINE;
898 STRUCT!{struct NET_DISPLAY_GROUP {
899     usri3_name: LPWSTR,
900     usri3_comment: LPWSTR,
901     grpi3_group_id: DWORD,
902     grpi3_attributes: DWORD,
903     grpi3_next_index: DWORD,
904 }}
905 pub type PNET_DISPLAY_GROUP = *mut NET_DISPLAY_GROUP;
906 extern "system" {
NetAccessAdd( servername: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS907     pub fn NetAccessAdd(
908         servername: LPCWSTR,
909         level: DWORD,
910         buf: LPBYTE,
911         parm_err: LPDWORD,
912     ) -> NET_API_STATUS;
NetAccessEnum( servername: LPCWSTR, BasePath: LPCWSTR, Recursive: DWORD, level: DWORD, bufptr: *mut LPBYTE, prefmaxlen: DWORD, entriesread: LPDWORD, totalentries: LPDWORD, resume_handle: LPDWORD, ) -> NET_API_STATUS913     pub fn NetAccessEnum(
914         servername: LPCWSTR,
915         BasePath: LPCWSTR,
916         Recursive: DWORD,
917         level: DWORD,
918         bufptr: *mut LPBYTE,
919         prefmaxlen: DWORD,
920         entriesread: LPDWORD,
921         totalentries: LPDWORD,
922         resume_handle: LPDWORD,
923     ) -> NET_API_STATUS;
NetAccessGetInfo( servername: LPCWSTR, resource: LPCWSTR, level: DWORD, bufptr: *mut LPBYTE, ) -> NET_API_STATUS924     pub fn NetAccessGetInfo(
925         servername: LPCWSTR,
926         resource: LPCWSTR,
927         level: DWORD,
928         bufptr: *mut LPBYTE,
929     ) -> NET_API_STATUS;
NetAccessSetInfo( servername: LPCWSTR, resource: LPCWSTR, level: DWORD, buf: LPBYTE, parm_err: LPDWORD, ) -> NET_API_STATUS930     pub fn NetAccessSetInfo(
931         servername: LPCWSTR,
932         resource: LPCWSTR,
933         level: DWORD,
934         buf: LPBYTE,
935         parm_err: LPDWORD,
936     ) -> NET_API_STATUS;
NetAccessDel( servername: LPCWSTR, resource: LPCWSTR, ) -> NET_API_STATUS937     pub fn NetAccessDel(
938         servername: LPCWSTR,
939         resource: LPCWSTR,
940     ) -> NET_API_STATUS;
NetAccessGetUserPerms( servername: LPCWSTR, UGname: LPCWSTR, resource: LPCWSTR, Perms: LPDWORD, ) -> NET_API_STATUS941     pub fn NetAccessGetUserPerms(
942         servername: LPCWSTR,
943         UGname: LPCWSTR,
944         resource: LPCWSTR,
945         Perms: LPDWORD,
946     ) -> NET_API_STATUS;
947 }
948 STRUCT!{struct ACCESS_INFO_0 {
949     acc0_resource_name: LPWSTR,
950 }}
951 pub type PACCESS_INFO_0 = *mut ACCESS_INFO_0;
952 pub type LPACCESS_INFO_0 = *mut ACCESS_INFO_0;
953 STRUCT!{struct ACCESS_INFO_1 {
954     acc1_resource_name: LPWSTR,
955     acc1_attr: DWORD,
956     acc1_count: DWORD,
957 }}
958 pub type PACCESS_INFO_1 = *mut ACCESS_INFO_1;
959 pub type LPACCESS_INFO_1 = *mut ACCESS_INFO_1;
960 STRUCT!{struct ACCESS_INFO_1002 {
961     acc1002_attr: DWORD,
962 }}
963 pub type PACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
964 pub type LPACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
965 STRUCT!{struct ACCESS_LIST {
966     acl_ugname: LPWSTR,
967     acl_access: DWORD,
968 }}
969 pub type PACCESS_LIST = *mut ACCESS_LIST;
970 pub type LPACCESS_LIST = *mut ACCESS_LIST;
971 pub const MAXPERMENTRIES: DWORD = 64;
972 pub const ACCESS_NONE: DWORD = 0;
973 pub const ACCESS_ALL: DWORD = ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC
974     | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM;
975 pub const ACCESS_READ: DWORD = 0x01;
976 pub const ACCESS_WRITE: DWORD = 0x02;
977 pub const ACCESS_CREATE: DWORD = 0x04;
978 pub const ACCESS_EXEC: DWORD = 0x08;
979 pub const ACCESS_DELETE: DWORD = 0x10;
980 pub const ACCESS_ATRIB: DWORD = 0x20;
981 pub const ACCESS_PERM: DWORD = 0x40;
982 pub const ACCESS_GROUP: DWORD = 0x8000;
983 pub const ACCESS_AUDIT: DWORD = 0x1;
984 pub const ACCESS_SUCCESS_OPEN: DWORD = 0x10;
985 pub const ACCESS_SUCCESS_WRITE: DWORD = 0x20;
986 pub const ACCESS_SUCCESS_DELETE: DWORD = 0x40;
987 pub const ACCESS_SUCCESS_ACL: DWORD = 0x80;
988 pub const ACCESS_SUCCESS_MASK: DWORD = 0xF0;
989 pub const ACCESS_FAIL_OPEN: DWORD = 0x100;
990 pub const ACCESS_FAIL_WRITE: DWORD = 0x200;
991 pub const ACCESS_FAIL_DELETE: DWORD = 0x400;
992 pub const ACCESS_FAIL_ACL: DWORD = 0x800;
993 pub const ACCESS_FAIL_MASK: DWORD = 0xF00;
994 pub const ACCESS_FAIL_SHIFT: DWORD = 4;
995 pub const ACCESS_RESOURCE_NAME_PARMNUM: DWORD = 1;
996 pub const ACCESS_ATTR_PARMNUM: DWORD = 2;
997 pub const ACCESS_COUNT_PARMNUM: DWORD = 3;
998 pub const ACCESS_ACCESS_LIST_PARMNUM: DWORD = 4;
999 pub const ACCESS_RESOURCE_NAME_INFOLEVEL: DWORD =
1000     PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM;
1001 pub const ACCESS_ATTR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM;
1002 pub const ACCESS_COUNT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM;
1003 pub const ACCESS_ACCESS_LIST_INFOLEVEL: DWORD =
1004     PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM;
1005 pub const ACCESS_LETTERS: &'static str = "RWCXDAP         ";
1006 ENUM!{enum NET_VALIDATE_PASSWORD_TYPE {
1007     NetValidateAuthentication = 1,
1008     NetValidatePasswordChange,
1009     NetValidatePasswordReset,
1010 }}
1011 pub type PNET_VALIDATE_PASSWORD_TYPE = *mut NET_VALIDATE_PASSWORD_TYPE;
1012 STRUCT!{struct NET_VALIDATE_PASSWORD_HASH {
1013     Length: ULONG,
1014     Hash: LPBYTE,
1015 }}
1016 pub type PNET_VALIDATE_PASSWORD_HASH = *mut NET_VALIDATE_PASSWORD_HASH;
1017 pub const NET_VALIDATE_PASSWORD_LAST_SET: ULONG = 0x00000001;
1018 pub const NET_VALIDATE_BAD_PASSWORD_TIME: ULONG = 0x00000002;
1019 pub const NET_VALIDATE_LOCKOUT_TIME: ULONG = 0x00000004;
1020 pub const NET_VALIDATE_BAD_PASSWORD_COUNT: ULONG = 0x00000008;
1021 pub const NET_VALIDATE_PASSWORD_HISTORY_LENGTH: ULONG = 0x00000010;
1022 pub const NET_VALIDATE_PASSWORD_HISTORY: ULONG = 0x00000020;
1023 STRUCT!{struct NET_VALIDATE_PERSISTED_FIELDS {
1024     PresentFields: ULONG,
1025     PasswordLastSet: FILETIME,
1026     BadPasswordTime: FILETIME,
1027     LockoutTime: FILETIME,
1028     BadPasswordCount: ULONG,
1029     PasswordHistoryLength: ULONG,
1030     PasswordHistory: PNET_VALIDATE_PASSWORD_HASH,
1031 }}
1032 pub type PNET_VALIDATE_PERSISTED_FIELDS = *mut NET_VALIDATE_PERSISTED_FIELDS;
1033 STRUCT!{struct NET_VALIDATE_OUTPUT_ARG {
1034     ChangedPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1035     ValidationStatus: NET_API_STATUS,
1036 }}
1037 pub type PNET_VALIDATE_OUTPUT_ARG = *mut NET_VALIDATE_OUTPUT_ARG;
1038 STRUCT!{struct NET_VALIDATE_AUTHENTICATION_INPUT_ARG {
1039     InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1040     PasswordMatched: BOOLEAN,
1041 }}
1042 pub type PNET_VALIDATE_AUTHENTICATION_INPUT_ARG = *mut NET_VALIDATE_AUTHENTICATION_INPUT_ARG;
1043 STRUCT!{struct NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG {
1044     InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1045     ClearPassword: LPWSTR,
1046     UserAccountName: LPWSTR,
1047     HashedPassword: NET_VALIDATE_PASSWORD_HASH,
1048     PasswordMatch: BOOLEAN,
1049 }}
1050 pub type PNET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG;
1051 STRUCT!{struct NET_VALIDATE_PASSWORD_RESET_INPUT_ARG {
1052     InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1053     ClearPassword: LPWSTR,
1054     UserAccountName: LPWSTR,
1055     HashedPassword: NET_VALIDATE_PASSWORD_HASH,
1056     PasswordMustChangeAtNextLogon: BOOLEAN,
1057     ClearLockout: BOOLEAN,
1058 }}
1059 pub type PNET_VALIDATE_PASSWORD_RESET_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_RESET_INPUT_ARG;
1060 extern "system" {
NetValidatePasswordPolicy( ServerName: LPCWSTR, Qualifier: LPVOID, ValidationType: NET_VALIDATE_PASSWORD_TYPE, InputArg: LPVOID, OutputArg: *mut LPVOID, ) -> NET_API_STATUS1061     pub fn NetValidatePasswordPolicy(
1062         ServerName: LPCWSTR,
1063         Qualifier: LPVOID,
1064         ValidationType: NET_VALIDATE_PASSWORD_TYPE,
1065         InputArg: LPVOID,
1066         OutputArg: *mut LPVOID,
1067     ) -> NET_API_STATUS;
NetValidatePasswordPolicyFree( OutputArg: *mut LPVOID, ) -> NET_API_STATUS1068     pub fn NetValidatePasswordPolicyFree(
1069         OutputArg: *mut LPVOID,
1070     ) -> NET_API_STATUS;
NetGetDCName( servername: LPCWSTR, domainname: LPCWSTR, bufptr: *mut LPBYTE, ) -> NET_API_STATUS1071     pub fn NetGetDCName(
1072         servername: LPCWSTR,
1073         domainname: LPCWSTR,
1074         bufptr: *mut LPBYTE,
1075     ) -> NET_API_STATUS;
NetGetAnyDCName( servername: LPCWSTR, domainname: LPCWSTR, bufptr: *mut LPBYTE, ) -> NET_API_STATUS1076     pub fn NetGetAnyDCName(
1077         servername: LPCWSTR,
1078         domainname: LPCWSTR,
1079         bufptr: *mut LPBYTE,
1080     ) -> NET_API_STATUS;
I_NetLogonControl( ServerName: LPCWSTR, FunctionCode: DWORD, QueryLevel: DWORD, Buffer: *mut LPBYTE, ) -> NET_API_STATUS1081     pub fn I_NetLogonControl(
1082         ServerName: LPCWSTR,
1083         FunctionCode: DWORD,
1084         QueryLevel: DWORD,
1085         Buffer: *mut LPBYTE,
1086     ) -> NET_API_STATUS;
I_NetLogonControl2( ServerName: LPCWSTR, FunctionCode: DWORD, QueryLevel: DWORD, Data: LPBYTE, Buffer: *mut LPBYTE, ) -> NET_API_STATUS1087     pub fn I_NetLogonControl2(
1088         ServerName: LPCWSTR,
1089         FunctionCode: DWORD,
1090         QueryLevel: DWORD,
1091         Data: LPBYTE,
1092         Buffer: *mut LPBYTE,
1093     ) -> NET_API_STATUS;
1094 }
1095 pub type NTSTATUS = LONG;
1096 pub type PNTSTATUS = *mut LONG;
1097 extern "system" {
NetEnumerateTrustedDomains( ServerName: LPWSTR, DomainNames: *mut LPWSTR, ) -> NTSTATUS1098     pub fn NetEnumerateTrustedDomains(
1099         ServerName: LPWSTR,
1100         DomainNames: *mut LPWSTR,
1101     ) -> NTSTATUS;
1102 }
1103 pub const NETLOGON_CONTROL_QUERY: DWORD = 1;
1104 pub const NETLOGON_CONTROL_REPLICATE: DWORD = 2;
1105 pub const NETLOGON_CONTROL_SYNCHRONIZE: DWORD = 3;
1106 pub const NETLOGON_CONTROL_PDC_REPLICATE: DWORD = 4;
1107 pub const NETLOGON_CONTROL_REDISCOVER: DWORD = 5;
1108 pub const NETLOGON_CONTROL_TC_QUERY: DWORD = 6;
1109 pub const NETLOGON_CONTROL_TRANSPORT_NOTIFY: DWORD = 7;
1110 pub const NETLOGON_CONTROL_FIND_USER: DWORD = 8;
1111 pub const NETLOGON_CONTROL_CHANGE_PASSWORD: DWORD = 9;
1112 pub const NETLOGON_CONTROL_TC_VERIFY: DWORD = 10;
1113 pub const NETLOGON_CONTROL_FORCE_DNS_REG: DWORD = 11;
1114 pub const NETLOGON_CONTROL_QUERY_DNS_REG: DWORD = 12;
1115 pub const NETLOGON_CONTROL_QUERY_ENC_TYPES: DWORD = 13;
1116 pub const NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL: DWORD = 0xFFFB;
1117 pub const NETLOGON_CONTROL_BACKUP_CHANGE_LOG: DWORD = 0xFFFC;
1118 pub const NETLOGON_CONTROL_TRUNCATE_LOG: DWORD = 0xFFFD;
1119 pub const NETLOGON_CONTROL_SET_DBFLAG: DWORD = 0xFFFE;
1120 pub const NETLOGON_CONTROL_BREAKPOINT: DWORD = 0xFFFF;
1121 STRUCT!{struct NETLOGON_INFO_1 {
1122     netlog1_flags: DWORD,
1123     netlog1_pdc_connection_status: NET_API_STATUS,
1124 }}
1125 pub type PNETLOGON_INFO_1 = *mut NETLOGON_INFO_1;
1126 STRUCT!{struct NETLOGON_INFO_2 {
1127     netlog2_flags: DWORD,
1128     netlog2_pdc_connection_status: NET_API_STATUS,
1129     netlog2_trusted_dc_name: LPWSTR,
1130     netlog2_tc_connection_status: NET_API_STATUS,
1131 }}
1132 pub type PNETLOGON_INFO_2 = *mut NETLOGON_INFO_2;
1133 STRUCT!{struct NETLOGON_INFO_3 {
1134     netlog3_flags: DWORD,
1135     netlog3_logon_attempts: DWORD,
1136     netlog3_reserved1: DWORD,
1137     netlog3_reserved2: DWORD,
1138     netlog3_reserved3: DWORD,
1139     netlog3_reserved4: DWORD,
1140     netlog3_reserved5: DWORD,
1141 }}
1142 pub type PNETLOGON_INFO_3 = *mut NETLOGON_INFO_3;
1143 STRUCT!{struct NETLOGON_INFO_4 {
1144     netlog4_trusted_dc_name: LPWSTR,
1145     netlog4_trusted_domain_name: LPWSTR,
1146 }}
1147 pub type PNETLOGON_INFO_4 = *mut NETLOGON_INFO_4;
1148 pub const NETLOGON_REPLICATION_NEEDED: DWORD = 0x01;
1149 pub const NETLOGON_REPLICATION_IN_PROGRESS: DWORD = 0x02;
1150 pub const NETLOGON_FULL_SYNC_REPLICATION: DWORD = 0x04;
1151 pub const NETLOGON_REDO_NEEDED: DWORD = 0x08;
1152 pub const NETLOGON_HAS_IP: DWORD = 0x10;
1153 pub const NETLOGON_HAS_TIMESERV: DWORD = 0x20;
1154 pub const NETLOGON_DNS_UPDATE_FAILURE: DWORD = 0x40;
1155 pub const NETLOGON_VERIFY_STATUS_RETURNED: DWORD = 0x80;
1156 pub const SERVICE_ACCOUNT_PASSWORD: &'static str = "_SA_{262E99C9-6160-4871-ACEC-4E61736B6F21}";
1157 pub const SERVICE_ACCOUNT_SECRET_PREFIX: &'static str
1158     = "_SC_{262E99C9-6160-4871-ACEC-4E61736B6F21}_";
1159 DEFINE_GUID!{ServiceAccountPasswordGUID,
1160     0x262E99C9, 0x6160, 0x4871, 0xAC, 0xEC, 0x4E, 0x61, 0x73, 0x6B, 0x6F, 0x21}
1161 extern "system" {
NetAddServiceAccount( ServerName: LPWSTR, AccountName: LPWSTR, Password: LPWSTR, Flags: DWORD, ) -> NTSTATUS1162     pub fn NetAddServiceAccount(
1163         ServerName: LPWSTR,
1164         AccountName: LPWSTR,
1165         Password: LPWSTR,
1166         Flags: DWORD,
1167     ) -> NTSTATUS;
1168 }
1169 pub const SERVICE_ACCOUNT_FLAG_LINK_TO_HOST_ONLY: DWORD = 0x00000001;
1170 pub const SERVICE_ACCOUNT_FLAG_ADD_AGAINST_RODC: DWORD = 0x00000002;
1171 pub const SERVICE_ACCOUNT_FLAG_UNLINK_FROM_HOST_ONLY: DWORD = 0x00000001;
1172 pub const SERVICE_ACCOUNT_FLAG_REMOVE_OFFLINE: DWORD = 0x00000002;
1173 extern "system" {
NetRemoveServiceAccount( ServerName: LPWSTR, AccountName: LPWSTR, Flags: DWORD, ) -> NTSTATUS1174     pub fn NetRemoveServiceAccount(
1175         ServerName: LPWSTR,
1176         AccountName: LPWSTR,
1177         Flags: DWORD,
1178     ) -> NTSTATUS;
NetEnumerateServiceAccounts( ServerName: LPWSTR, Flags: DWORD, AccountsCount: *mut DWORD, Accounts: *mut PZPWSTR, ) -> NTSTATUS1179     pub fn NetEnumerateServiceAccounts(
1180         ServerName: LPWSTR,
1181         Flags: DWORD,
1182         AccountsCount: *mut DWORD,
1183         Accounts: *mut PZPWSTR,
1184     ) -> NTSTATUS;
NetIsServiceAccount( ServerName: LPWSTR, AccountName: LPWSTR, IsService: *mut BOOL, ) -> NTSTATUS1185     pub fn NetIsServiceAccount(
1186         ServerName: LPWSTR,
1187         AccountName: LPWSTR,
1188         IsService: *mut BOOL,
1189     ) -> NTSTATUS;
NetQueryServiceAccount( ServerName: LPWSTR, AccountName: LPWSTR, InfoLevel: DWORD, Buffer: *mut PBYTE, ) -> NTSTATUS1190     pub fn NetQueryServiceAccount(
1191         ServerName: LPWSTR,
1192         AccountName: LPWSTR,
1193         InfoLevel: DWORD,
1194         Buffer: *mut PBYTE,
1195     ) -> NTSTATUS;
1196 }
1197 ENUM!{enum MSA_INFO_LEVEL {
1198     MsaInfoLevel0 = 0,
1199     MsaInfoLevelMax,
1200 }}
1201 pub type PMSA_INFO_LEVEL = *mut MSA_INFO_LEVEL;
1202 ENUM!{enum MSA_INFO_STATE {
1203     MsaInfoNotExist = 1,
1204     MsaInfoNotService,
1205     MsaInfoCannotInstall,
1206     MsaInfoCanInstall,
1207     MsaInfoInstalled,
1208 }}
1209 pub type PMSA_INFO_STATE = *mut MSA_INFO_STATE;
1210 STRUCT!{struct MSA_INFO_0 {
1211     State: MSA_INFO_STATE,
1212 }}
1213 pub type PMSA_INFO_0 = *mut MSA_INFO_0;
1214 pub type LPMSA_INFO_0 = *mut MSA_INFO_0;
1215