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