1use shared::basetsd::PDWORD_PTR;
9use shared::lmcons::{ENCRYPTED_PWLEN, NET_API_STATUS, PARMNUM_BASE_INFOLEVEL, PWLEN};
10use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, LPBYTE, LPDWORD, LPVOID, PBYTE, ULONG};
11use um::winnt::{BOOLEAN, LONG, LPCWSTR, LPWSTR, PSID, PVOID, PZPWSTR, SID_NAME_USE};
12extern "system" {
13 pub fn NetUserAdd(
14 servername: LPCWSTR,
15 level: DWORD,
16 buf: LPBYTE,
17 parm_err: LPDWORD,
18 ) -> NET_API_STATUS;
19 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;
29 pub fn NetUserGetInfo(
30 servername: LPCWSTR,
31 username: LPCWSTR,
32 level: DWORD,
33 bufptr: *mut LPBYTE,
34 ) -> NET_API_STATUS;
35 pub fn NetUserSetInfo(
36 servername: LPCWSTR,
37 username: LPCWSTR,
38 level: DWORD,
39 buf: LPBYTE,
40 parm_err: LPDWORD,
41 ) -> NET_API_STATUS;
42 pub fn NetUserDel(
43 servername: LPCWSTR,
44 username: LPCWSTR,
45 ) -> NET_API_STATUS;
46 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;
55 pub fn NetUserSetGroups(
56 servername: LPCWSTR,
57 username: LPCWSTR,
58 level: DWORD,
59 buf: LPBYTE,
60 num_entries: DWORD,
61 ) -> NET_API_STATUS;
62 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;
71 pub fn NetUserModalsGet(
72 servername: LPCWSTR,
73 level: DWORD,
74 bufptr: *mut LPBYTE,
75 ) -> NET_API_STATUS;
76 pub fn NetUserModalsSet(
77 servername: LPCWSTR,
78 level: DWORD,
79 buf: LPBYTE,
80 parm_err: LPDWORD,
81 ) -> NET_API_STATUS;
82 pub fn NetUserChangePassword(
83 domainname: LPCWSTR,
84 username: LPCWSTR,
85 oldpassword: LPCWSTR,
86 newpassword: LPCWSTR,
87 ) -> NET_API_STATUS;
88}
89STRUCT!{struct USER_INFO_0 {
90 usri0_name: LPWSTR,
91}}
92pub type PUSER_INFO_0 = *mut USER_INFO_0;
93pub type LPUSER_INFO_0 = *mut USER_INFO_0;
94STRUCT!{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}}
104pub type PUSER_INFO_1 = *mut USER_INFO_1;
105pub type LPUSER_INFO_1 = *mut USER_INFO_1;
106STRUCT!{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}}
132pub type PUSER_INFO_2 = *mut USER_INFO_2;
133pub type LPUSER_INFO_2 = *mut USER_INFO_2;
134STRUCT!{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}}
165pub type PUSER_INFO_3 = *mut USER_INFO_3;
166pub type LPUSER_INFO_3 = *mut USER_INFO_3;
167STRUCT!{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}}
198pub type PUSER_INFO_4 = *mut USER_INFO_4;
199pub type LPUSER_INFO_4 = *mut USER_INFO_4;
200STRUCT!{struct USER_INFO_10 {
201 usri10_name: LPWSTR,
202 usri10_comment: LPWSTR,
203 usri10_usr_comment: LPWSTR,
204 usri10_full_name: LPWSTR,
205}}
206pub type PUSER_INFO_10 = *mut USER_INFO_10;
207pub type LPUSER_INFO_10 = *mut USER_INFO_10;
208STRUCT!{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}}
230pub type PUSER_INFO_11 = *mut USER_INFO_11;
231pub type LPUSER_INFO_11 = *mut USER_INFO_11;
232STRUCT!{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}}
239pub type PUSER_INFO_20 = *mut USER_INFO_20;
240pub type LPUSER_INFO_20 = *mut USER_INFO_20;
241STRUCT!{struct USER_INFO_21 {
242 usri21_password: [BYTE; ENCRYPTED_PWLEN],
243}}
244pub type PUSER_INFO_21 = *mut USER_INFO_21;
245pub type LPUSER_INFO_21 = *mut USER_INFO_21;
246STRUCT!{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}}
272pub type PUSER_INFO_22 = *mut USER_INFO_22;
273pub type LPUSER_INFO_22 = *mut USER_INFO_22;
274STRUCT!{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}}
281pub type PUSER_INFO_23 = *mut USER_INFO_23;
282pub type LPUSER_INFO_23 = *mut USER_INFO_23;
283STRUCT!{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}}
290pub type PUSER_INFO_24 = *mut USER_INFO_24;
291pub type LPUSER_INFO_24 = *mut USER_INFO_24;
292STRUCT!{struct USER_INFO_1003 {
293 usri1003_password: LPWSTR,
294}}
295pub type PUSER_INFO_1003 = *mut USER_INFO_1003;
296pub type LPUSER_INFO_1003 = *mut USER_INFO_1003;
297STRUCT!{struct USER_INFO_1005 {
298 usri1005_priv: DWORD,
299}}
300pub type PUSER_INFO_1005 = *mut USER_INFO_1005;
301pub type LPUSER_INFO_1005 = *mut USER_INFO_1005;
302STRUCT!{struct USER_INFO_1006 {
303 usri1006_home_dir: LPWSTR,
304}}
305pub type PUSER_INFO_1006 = *mut USER_INFO_1006;
306pub type LPUSER_INFO_1006 = *mut USER_INFO_1006;
307STRUCT!{struct USER_INFO_1007 {
308 usri1007_comment: LPWSTR,
309}}
310pub type PUSER_INFO_1007 = *mut USER_INFO_1007;
311pub type LPUSER_INFO_1007 = *mut USER_INFO_1007;
312STRUCT!{struct USER_INFO_1008 {
313 usri1008_flags: DWORD,
314}}
315pub type PUSER_INFO_1008 = *mut USER_INFO_1008;
316pub type LPUSER_INFO_1008 = *mut USER_INFO_1008;
317STRUCT!{struct USER_INFO_1009 {
318 usri1009_script_path: LPWSTR,
319}}
320pub type PUSER_INFO_1009 = *mut USER_INFO_1009;
321pub type LPUSER_INFO_1009 = *mut USER_INFO_1009;
322STRUCT!{struct USER_INFO_1010 {
323 usri1010_auth_flags: DWORD,
324}}
325pub type PUSER_INFO_1010 = *mut USER_INFO_1010;
326pub type LPUSER_INFO_1010 = *mut USER_INFO_1010;
327STRUCT!{struct USER_INFO_1011 {
328 usri1011_full_name: LPWSTR,
329}}
330pub type PUSER_INFO_1011 = *mut USER_INFO_1011;
331pub type LPUSER_INFO_1011 = *mut USER_INFO_1011;
332STRUCT!{struct USER_INFO_1012 {
333 usri1012_usr_comment: LPWSTR,
334}}
335pub type PUSER_INFO_1012 = *mut USER_INFO_1012;
336pub type LPUSER_INFO_1012 = *mut USER_INFO_1012;
337STRUCT!{struct USER_INFO_1013 {
338 usri1013_parms: LPWSTR,
339}}
340pub type PUSER_INFO_1013 = *mut USER_INFO_1013;
341pub type LPUSER_INFO_1013 = *mut USER_INFO_1013;
342STRUCT!{struct USER_INFO_1014 {
343 usri1014_workstations: LPWSTR,
344}}
345pub type PUSER_INFO_1014 = *mut USER_INFO_1014;
346pub type LPUSER_INFO_1014 = *mut USER_INFO_1014;
347STRUCT!{struct USER_INFO_1017 {
348 usri1017_acct_expires: DWORD,
349}}
350pub type PUSER_INFO_1017 = *mut USER_INFO_1017;
351pub type LPUSER_INFO_1017 = *mut USER_INFO_1017;
352STRUCT!{struct USER_INFO_1018 {
353 usri1018_max_storage: DWORD,
354}}
355pub type PUSER_INFO_1018 = *mut USER_INFO_1018;
356pub type LPUSER_INFO_1018 = *mut USER_INFO_1018;
357STRUCT!{struct USER_INFO_1020 {
358 usri1020_units_per_week: DWORD,
359 usri1020_logon_hours: LPBYTE,
360}}
361pub type PUSER_INFO_1020 = *mut USER_INFO_1020;
362pub type LPUSER_INFO_1020 = *mut USER_INFO_1020;
363STRUCT!{struct USER_INFO_1023 {
364 usri1023_logon_server: LPWSTR,
365}}
366pub type PUSER_INFO_1023 = *mut USER_INFO_1023;
367pub type LPUSER_INFO_1023 = *mut USER_INFO_1023;
368STRUCT!{struct USER_INFO_1024 {
369 usri1024_country_code: DWORD,
370}}
371pub type PUSER_INFO_1024 = *mut USER_INFO_1024;
372pub type LPUSER_INFO_1024 = *mut USER_INFO_1024;
373STRUCT!{struct USER_INFO_1025 {
374 usri1025_code_page: DWORD,
375}}
376pub type PUSER_INFO_1025 = *mut USER_INFO_1025;
377pub type LPUSER_INFO_1025 = *mut USER_INFO_1025;
378STRUCT!{struct USER_INFO_1051 {
379 usri1051_primary_group_id: DWORD,
380}}
381pub type PUSER_INFO_1051 = *mut USER_INFO_1051;
382pub type LPUSER_INFO_1051 = *mut USER_INFO_1051;
383STRUCT!{struct USER_INFO_1052 {
384 usri1052_profile: LPWSTR,
385}}
386pub type PUSER_INFO_1052 = *mut USER_INFO_1052;
387pub type LPUSER_INFO_1052 = *mut USER_INFO_1052;
388STRUCT!{struct USER_INFO_1053 {
389 usri1053_home_dir_drive: LPWSTR,
390}}
391pub type PUSER_INFO_1053 = *mut USER_INFO_1053;
392pub type LPUSER_INFO_1053 = *mut USER_INFO_1053;
393STRUCT!{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}}
400pub type PUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
401pub type LPUSER_MODALS_INFO_0 = *mut USER_MODALS_INFO_0;
402STRUCT!{struct USER_MODALS_INFO_1 {
403 usrmod1_role: DWORD,
404 usrmod1_primary: LPWSTR,
405}}
406pub type PUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
407pub type LPUSER_MODALS_INFO_1 = *mut USER_MODALS_INFO_1;
408STRUCT!{struct USER_MODALS_INFO_2 {
409 usrmod2_domain_name: LPWSTR,
410 usrmod2_domain_id: PSID,
411}}
412pub type PUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
413pub type LPUSER_MODALS_INFO_2 = *mut USER_MODALS_INFO_2;
414STRUCT!{struct USER_MODALS_INFO_3 {
415 usrmod3_lockout_duration: DWORD,
416 usrmod3_lockout_observation_window: DWORD,
417 usrmod3_lockout_threshold: DWORD,
418}}
419pub type PUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
420pub type LPUSER_MODALS_INFO_3 = *mut USER_MODALS_INFO_3;
421STRUCT!{struct USER_MODALS_INFO_1001 {
422 usrmod1001_min_passwd_len: DWORD,
423}}
424pub type PUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
425pub type LPUSER_MODALS_INFO_1001 = *mut USER_MODALS_INFO_1001;
426STRUCT!{struct USER_MODALS_INFO_1002 {
427 usrmod1002_max_passwd_age: DWORD,
428}}
429pub type PUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
430pub type LPUSER_MODALS_INFO_1002 = *mut USER_MODALS_INFO_1002;
431STRUCT!{struct USER_MODALS_INFO_1003 {
432 usrmod1003_min_passwd_age: DWORD,
433}}
434pub type PUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
435pub type LPUSER_MODALS_INFO_1003 = *mut USER_MODALS_INFO_1003;
436STRUCT!{struct USER_MODALS_INFO_1004 {
437 usrmod1004_force_logoff: DWORD,
438}}
439pub type PUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
440pub type LPUSER_MODALS_INFO_1004 = *mut USER_MODALS_INFO_1004;
441STRUCT!{struct USER_MODALS_INFO_1005 {
442 usrmod1005_password_hist_len: DWORD,
443}}
444pub type PUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
445pub type LPUSER_MODALS_INFO_1005 = *mut USER_MODALS_INFO_1005;
446STRUCT!{struct USER_MODALS_INFO_1006 {
447 usrmod1006_role: DWORD,
448}}
449pub type PUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
450pub type LPUSER_MODALS_INFO_1006 = *mut USER_MODALS_INFO_1006;
451STRUCT!{struct USER_MODALS_INFO_1007 {
452 usrmod1007_primary: LPWSTR,
453}}
454pub type PUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
455pub type LPUSER_MODALS_INFO_1007 = *mut USER_MODALS_INFO_1007;
456pub const UF_SCRIPT: DWORD = 0x0001;
457pub const UF_ACCOUNTDISABLE: DWORD = 0x0002;
458pub const UF_HOMEDIR_REQUIRED: DWORD = 0x0008;
459pub const UF_LOCKOUT: DWORD = 0x0010;
460pub const UF_PASSWD_NOTREQD: DWORD = 0x0020;
461pub const UF_PASSWD_CANT_CHANGE: DWORD = 0x0040;
462pub const UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: DWORD = 0x0080;
463pub const UF_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0100;
464pub const UF_NORMAL_ACCOUNT: DWORD = 0x0200;
465pub const UF_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0800;
466pub const UF_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x1000;
467pub const UF_SERVER_TRUST_ACCOUNT: DWORD = 0x2000;
468pub const UF_MACHINE_ACCOUNT_MASK: DWORD = UF_INTERDOMAIN_TRUST_ACCOUNT
469 | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT;
470pub 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;
472pub const UF_DONT_EXPIRE_PASSWD: DWORD = 0x10000;
473pub const UF_MNS_LOGON_ACCOUNT: DWORD = 0x20000;
474pub const UF_SMARTCARD_REQUIRED: DWORD = 0x40000;
475pub const UF_TRUSTED_FOR_DELEGATION: DWORD = 0x80000;
476pub const UF_NOT_DELEGATED: DWORD = 0x100000;
477pub const UF_USE_DES_KEY_ONLY: DWORD = 0x200000;
478pub const UF_DONT_REQUIRE_PREAUTH: DWORD = 0x400000;
479pub const UF_PASSWORD_EXPIRED: DWORD = 0x800000;
480pub const UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: DWORD = 0x1000000;
481pub const UF_NO_AUTH_DATA_REQUIRED: DWORD = 0x2000000;
482pub const UF_PARTIAL_SECRETS_ACCOUNT: DWORD = 0x4000000;
483pub const UF_USE_AES_KEYS: DWORD = 0x8000000;
484pub 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;
490pub const FILTER_TEMP_DUPLICATE_ACCOUNT: DWORD = 0x0001;
491pub const FILTER_NORMAL_ACCOUNT: DWORD = 0x0002;
492pub const FILTER_INTERDOMAIN_TRUST_ACCOUNT: DWORD = 0x0008;
493pub const FILTER_WORKSTATION_TRUST_ACCOUNT: DWORD = 0x0010;
494pub const FILTER_SERVER_TRUST_ACCOUNT: DWORD = 0x0020;
495pub const LG_INCLUDE_INDIRECT: DWORD = 0x0001;
496pub const AF_OP_PRINT: DWORD = 0x1;
497pub const AF_OP_COMM: DWORD = 0x2;
498pub const AF_OP_SERVER: DWORD = 0x4;
499pub const AF_OP_ACCOUNTS: DWORD = 0x8;
500pub const AF_SETTABLE_BITS: DWORD = AF_OP_PRINT | AF_OP_COMM | AF_OP_SERVER | AF_OP_ACCOUNTS;
501pub const UAS_ROLE_STANDALONE: DWORD = 0;
502pub const UAS_ROLE_MEMBER: DWORD = 1;
503pub const UAS_ROLE_BACKUP: DWORD = 2;
504pub const UAS_ROLE_PRIMARY: DWORD = 3;
505pub const USER_NAME_PARMNUM: DWORD = 1;
506pub const USER_PASSWORD_PARMNUM: DWORD = 3;
507pub const USER_PASSWORD_AGE_PARMNUM: DWORD = 4;
508pub const USER_PRIV_PARMNUM: DWORD = 5;
509pub const USER_HOME_DIR_PARMNUM: DWORD = 6;
510pub const USER_COMMENT_PARMNUM: DWORD = 7;
511pub const USER_FLAGS_PARMNUM: DWORD = 8;
512pub const USER_SCRIPT_PATH_PARMNUM: DWORD = 9;
513pub const USER_AUTH_FLAGS_PARMNUM: DWORD = 10;
514pub const USER_FULL_NAME_PARMNUM: DWORD = 11;
515pub const USER_USR_COMMENT_PARMNUM: DWORD = 12;
516pub const USER_PARMS_PARMNUM: DWORD = 13;
517pub const USER_WORKSTATIONS_PARMNUM: DWORD = 14;
518pub const USER_LAST_LOGON_PARMNUM: DWORD = 15;
519pub const USER_LAST_LOGOFF_PARMNUM: DWORD = 16;
520pub const USER_ACCT_EXPIRES_PARMNUM: DWORD = 17;
521pub const USER_MAX_STORAGE_PARMNUM: DWORD = 18;
522pub const USER_UNITS_PER_WEEK_PARMNUM: DWORD = 19;
523pub const USER_LOGON_HOURS_PARMNUM: DWORD = 20;
524pub const USER_PAD_PW_COUNT_PARMNUM: DWORD = 21;
525pub const USER_NUM_LOGONS_PARMNUM: DWORD = 22;
526pub const USER_LOGON_SERVER_PARMNUM: DWORD = 23;
527pub const USER_COUNTRY_CODE_PARMNUM: DWORD = 24;
528pub const USER_CODE_PAGE_PARMNUM: DWORD = 25;
529pub const USER_PRIMARY_GROUP_PARMNUM: DWORD = 51;
530pub const USER_PROFILE: DWORD = 52;
531pub const USER_PROFILE_PARMNUM: DWORD = 52;
532pub const USER_HOME_DIR_DRIVE_PARMNUM: DWORD = 53;
533pub const USER_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM;
534pub const USER_PASSWORD_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM;
535pub const USER_PASSWORD_AGE_INFOLEVEL: DWORD =
536 PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM;
537pub const USER_PRIV_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM;
538pub const USER_HOME_DIR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM;
539pub const USER_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM;
540pub const USER_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM;
541pub const USER_SCRIPT_PATH_INFOLEVEL: DWORD =
542 PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM;
543pub const USER_AUTH_FLAGS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM;
544pub const USER_FULL_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM;
545pub const USER_USR_COMMENT_INFOLEVEL: DWORD =
546 PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM;
547pub const USER_PARMS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM;
548pub const USER_WORKSTATIONS_INFOLEVEL: DWORD =
549 PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM;
550pub const USER_LAST_LOGON_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM;
551pub const USER_LAST_LOGOFF_INFOLEVEL: DWORD =
552 PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM;
553pub const USER_ACCT_EXPIRES_INFOLEVEL: DWORD =
554 PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM;
555pub const USER_MAX_STORAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM;
556pub const USER_UNITS_PER_WEEK_INFOLEVEL: DWORD =
557 PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM;
558pub const USER_LOGON_HOURS_INFOLEVEL: DWORD =
559 PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM;
560pub const USER_PAD_PW_COUNT_INFOLEVEL: DWORD =
561 PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM;
562pub const USER_NUM_LOGONS_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM;
563pub const USER_LOGON_SERVER_INFOLEVEL: DWORD =
564 PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM;
565pub const USER_COUNTRY_CODE_INFOLEVEL: DWORD =
566 PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM;
567pub const USER_CODE_PAGE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM;
568pub const USER_PRIMARY_GROUP_INFOLEVEL: DWORD =
569 PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM;
570pub const USER_HOME_DIR_DRIVE_INFOLEVEL: DWORD =
571 PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM;
572pub const NULL_USERSETINFO_PASSWD: &'static str = " ";
573pub const TIMEQ_FOREVER: DWORD = -1i32 as u32;
574pub const USER_MAXSTORAGE_UNLIMITED: DWORD = -1i32 as u32;
575pub const USER_NO_LOGOFF: DWORD = -1i32 as u32;
576pub const UNITS_PER_DAY: DWORD = 24;
577pub const UNITS_PER_WEEK: DWORD = UNITS_PER_DAY * 7;
578pub const USER_PRIV_MASK: DWORD = 0x3;
579pub const USER_PRIV_GUEST: DWORD = 0;
580pub const USER_PRIV_USER: DWORD = 1;
581pub const USER_PRIV_ADMIN: DWORD = 2;
582pub const MAX_PASSWD_LEN: DWORD = PWLEN;
583pub const DEF_MIN_PWLEN: DWORD = 6;
584pub const DEF_PWUNIQUENESS: DWORD = 5;
585pub const DEF_MAX_PWHIST: DWORD = 8;
586pub const DEF_MAX_PWAGE: DWORD = TIMEQ_FOREVER;
587pub const DEF_MIN_PWAGE: DWORD = 0;
588pub const DEF_FORCE_LOGOFF: DWORD = 0xffffffff;
589pub const DEF_MAX_BADPW: DWORD = 0;
590pub const ONE_DAY: DWORD = 1 * 24 * 3600;
591pub const VALIDATED_LOGON: DWORD = 0;
592pub const PASSWORD_EXPIRED: DWORD = 2;
593pub const NON_VALIDATED_LOGON: DWORD = 3;
594pub const VALID_LOGOFF: DWORD = 1;
595pub const MODALS_MIN_PASSWD_LEN_PARMNUM: DWORD = 1;
596pub const MODALS_MAX_PASSWD_AGE_PARMNUM: DWORD = 2;
597pub const MODALS_MIN_PASSWD_AGE_PARMNUM: DWORD = 3;
598pub const MODALS_FORCE_LOGOFF_PARMNUM: DWORD = 4;
599pub const MODALS_PASSWD_HIST_LEN_PARMNUM: DWORD = 5;
600pub const MODALS_ROLE_PARMNUM: DWORD = 6;
601pub const MODALS_PRIMARY_PARMNUM: DWORD = 7;
602pub const MODALS_DOMAIN_NAME_PARMNUM: DWORD = 8;
603pub const MODALS_DOMAIN_ID_PARMNUM: DWORD = 9;
604pub const MODALS_LOCKOUT_DURATION_PARMNUM: DWORD = 10;
605pub const MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM: DWORD = 11;
606pub const MODALS_LOCKOUT_THRESHOLD_PARMNUM: DWORD = 12;
607pub const MODALS_MIN_PASSWD_LEN_INFOLEVEL: DWORD =
608 PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM;
609pub const MODALS_MAX_PASSWD_AGE_INFOLEVEL: DWORD =
610 PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM;
611pub const MODALS_MIN_PASSWD_AGE_INFOLEVEL: DWORD =
612 PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM;
613pub const MODALS_FORCE_LOGOFF_INFOLEVEL: DWORD =
614 PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM;
615pub const MODALS_PASSWD_HIST_LEN_INFOLEVEL: DWORD =
616 PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM;
617pub const MODALS_ROLE_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM;
618pub const MODALS_PRIMARY_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM;
619pub const MODALS_DOMAIN_NAME_INFOLEVEL: DWORD =
620 PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM;
621pub const MODALS_DOMAIN_ID_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM;
622extern "system" {
623 pub fn NetGroupAdd(
624 servername: LPCWSTR,
625 level: DWORD,
626 buf: LPBYTE,
627 parm_err: LPDWORD,
628 ) -> NET_API_STATUS;
629 pub fn NetGroupAddUser(
630 servername: LPCWSTR,
631 GroupName: LPCWSTR,
632 username: LPCWSTR,
633 ) -> NET_API_STATUS;
634 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;
643 pub fn NetGroupGetInfo(
644 servername: LPCWSTR,
645 groupname: LPCWSTR,
646 level: DWORD,
647 bufptr: *mut LPBYTE,
648 ) -> NET_API_STATUS;
649 pub fn NetGroupSetInfo(
650 servername: LPCWSTR,
651 groupname: LPCWSTR,
652 level: DWORD,
653 buf: LPBYTE,
654 parm_err: LPDWORD,
655 ) -> NET_API_STATUS;
656 pub fn NetGroupDel(
657 servername: LPCWSTR,
658 groupname: LPCWSTR,
659 ) -> NET_API_STATUS;
660 pub fn NetGroupDelUser(
661 servername: LPCWSTR,
662 GroupName: LPCWSTR,
663 Username: LPCWSTR,
664 ) -> NET_API_STATUS;
665 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;
675 pub fn NetGroupSetUsers(
676 servername: LPCWSTR,
677 groupname: LPCWSTR,
678 level: DWORD,
679 buf: LPBYTE,
680 totalentries: DWORD,
681 ) -> NET_API_STATUS;
682}
683STRUCT!{struct GROUP_INFO_0 {
684 grpi0_name: LPWSTR,
685}}
686pub type PGROUP_INFO_0 = *mut GROUP_INFO_0;
687pub type LPGROUP_INFO_0 = *mut GROUP_INFO_0;
688STRUCT!{struct GROUP_INFO_1 {
689 grpi1_name: LPWSTR,
690 grpi1_comment: LPWSTR,
691}}
692pub type PGROUP_INFO_1 = *mut GROUP_INFO_1;
693pub type LPGROUP_INFO_1 = *mut GROUP_INFO_1;
694STRUCT!{struct GROUP_INFO_2 {
695 grpi2_name: LPWSTR,
696 grpi2_comment: LPWSTR,
697 grpi2_group_id: DWORD,
698 grpi2_attributes: DWORD,
699}}
700pub type PGROUP_INFO_2 = *mut GROUP_INFO_2;
701STRUCT!{struct GROUP_INFO_3 {
702 grpi3_name: LPWSTR,
703 grpi3_comment: LPWSTR,
704 grpi3_group_sid: PSID,
705 grpi3_attributes: DWORD,
706}}
707pub type PGROUP_INFO_3 = *mut GROUP_INFO_3;
708STRUCT!{struct GROUP_INFO_1002 {
709 grpi1002_comment: LPWSTR,
710}}
711pub type PGROUP_INFO_1002 = *mut GROUP_INFO_1002;
712pub type LPGROUP_INFO_1002 = *mut GROUP_INFO_1002;
713STRUCT!{struct GROUP_INFO_1005 {
714 grpi1005_attributes: DWORD,
715}}
716pub type PGROUP_INFO_1005 = *mut GROUP_INFO_1005;
717pub type LPGROUP_INFO_1005 = *mut GROUP_INFO_1005;
718STRUCT!{struct GROUP_USERS_INFO_0 {
719 grui0_name: LPWSTR,
720}}
721pub type PGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
722pub type LPGROUP_USERS_INFO_0 = *mut GROUP_USERS_INFO_0;
723STRUCT!{struct GROUP_USERS_INFO_1 {
724 grui1_name: LPWSTR,
725 grui1_attributes: DWORD,
726}}
727pub type PGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
728pub type LPGROUP_USERS_INFO_1 = *mut GROUP_USERS_INFO_1;
729pub const GROUPIDMASK: DWORD = 0x8000;
730pub const GROUP_SPECIALGRP_USERS: &'static str = "USERS";
731pub const GROUP_SPECIALGRP_ADMINS: &'static str = "ADMINS";
732pub const GROUP_SPECIALGRP_GUESTS: &'static str = "GUESTS";
733pub const GROUP_SPECIALGRP_LOCAL: &'static str = "LOCAL";
734pub const GROUP_ALL_PARMNUM: DWORD = 0;
735pub const GROUP_NAME_PARMNUM: DWORD = 1;
736pub const GROUP_COMMENT_PARMNUM: DWORD = 2;
737pub const GROUP_ATTRIBUTES_PARMNUM: DWORD = 3;
738pub const GROUP_ALL_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM;
739pub const GROUP_NAME_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM;
740pub const GROUP_COMMENT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM;
741pub const GROUP_ATTRIBUTES_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM;
742extern "system" {
743 pub fn NetLocalGroupAdd(
744 servername: LPCWSTR,
745 level: DWORD,
746 buf: LPBYTE,
747 parm_err: LPDWORD,
748 ) -> NET_API_STATUS;
749 pub fn NetLocalGroupAddMember(
750 servername: LPCWSTR,
751 groupname: LPCWSTR,
752 membersid: PSID,
753 ) -> NET_API_STATUS;
754 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;
763 pub fn NetLocalGroupGetInfo(
764 servername: LPCWSTR,
765 groupname: LPCWSTR,
766 level: DWORD,
767 bufptr: *mut LPBYTE,
768 ) -> NET_API_STATUS;
769 pub fn NetLocalGroupSetInfo(
770 servername: LPCWSTR,
771 groupname: LPCWSTR,
772 level: DWORD,
773 buf: LPBYTE,
774 parm_err: LPDWORD,
775 ) -> NET_API_STATUS;
776 pub fn NetLocalGroupDel(
777 servername: LPCWSTR,
778 groupname: LPCWSTR,
779 ) -> NET_API_STATUS;
780 pub fn NetLocalGroupDelMember(
781 servername: LPCWSTR,
782 groupname: LPCWSTR,
783 membersid: PSID,
784 ) -> NET_API_STATUS;
785 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;
795 pub fn NetLocalGroupSetMembers(
796 servername: LPCWSTR,
797 groupname: LPCWSTR,
798 level: DWORD,
799 buf: LPBYTE,
800 totalentries: DWORD,
801 ) -> NET_API_STATUS;
802 pub fn NetLocalGroupAddMembers(
803 servername: LPCWSTR,
804 groupname: LPCWSTR,
805 level: DWORD,
806 buf: LPBYTE,
807 totalentries: DWORD,
808 ) -> NET_API_STATUS;
809 pub fn NetLocalGroupDelMembers(
810 servername: LPCWSTR,
811 groupname: LPCWSTR,
812 level: DWORD,
813 buf: LPBYTE,
814 totalentries: DWORD,
815 ) -> NET_API_STATUS;
816}
817STRUCT!{struct LOCALGROUP_INFO_0 {
818 lgrpi0_name: LPWSTR,
819}}
820pub type PLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
821pub type LPLOCALGROUP_INFO_0 = *mut LOCALGROUP_INFO_0;
822STRUCT!{struct LOCALGROUP_INFO_1 {
823 lgrpi1_name: LPWSTR,
824 lgrpi1_comment: LPWSTR,
825}}
826pub type PLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
827pub type LPLOCALGROUP_INFO_1 = *mut LOCALGROUP_INFO_1;
828STRUCT!{struct LOCALGROUP_INFO_1002 {
829 lgrpi1002_comment: LPWSTR,
830}}
831pub type PLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
832pub type LPLOCALGROUP_INFO_1002 = *mut LOCALGROUP_INFO_1002;
833STRUCT!{struct LOCALGROUP_MEMBERS_INFO_0 {
834 lgrmi0_sid: PSID,
835}}
836pub type PLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
837pub type LPLOCALGROUP_MEMBERS_INFO_0 = *mut LOCALGROUP_MEMBERS_INFO_0;
838STRUCT!{struct LOCALGROUP_MEMBERS_INFO_1 {
839 lgrmi1_sid: PSID,
840 lgrmi1_sidusage: SID_NAME_USE,
841 lgrmi1_name: LPWSTR,
842}}
843pub type PLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
844pub type LPLOCALGROUP_MEMBERS_INFO_1 = *mut LOCALGROUP_MEMBERS_INFO_1;
845STRUCT!{struct LOCALGROUP_MEMBERS_INFO_2 {
846 lgrmi2_sid: PSID,
847 lgrmi2_sidusage: SID_NAME_USE,
848 lgrmi2_domainandname: LPWSTR,
849}}
850pub type PLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
851pub type LPLOCALGROUP_MEMBERS_INFO_2 = *mut LOCALGROUP_MEMBERS_INFO_2;
852STRUCT!{struct LOCALGROUP_MEMBERS_INFO_3 {
853 lgrmi3_domainandname: LPWSTR,
854}}
855pub type PLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
856pub type LPLOCALGROUP_MEMBERS_INFO_3 = *mut LOCALGROUP_MEMBERS_INFO_3;
857STRUCT!{struct LOCALGROUP_USERS_INFO_0 {
858 lgrui0_name: LPWSTR,
859}}
860pub type PLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
861pub type LPLOCALGROUP_USERS_INFO_0 = *mut LOCALGROUP_USERS_INFO_0;
862pub const LOCALGROUP_NAME_PARMNUM: DWORD = 1;
863pub const LOCALGROUP_COMMENT_PARMNUM: DWORD = 2;
864extern "system" {
865 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;
874 pub fn NetGetDisplayInformationIndex(
875 ServerName: LPCWSTR,
876 Level: DWORD,
877 Prefix: LPCWSTR,
878 Index: LPDWORD,
879 ) -> NET_API_STATUS;
880}
881STRUCT!{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}}
889pub type PNET_DISPLAY_USER = *mut NET_DISPLAY_USER;
890STRUCT!{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}}
897pub type PNET_DISPLAY_MACHINE = *mut NET_DISPLAY_MACHINE;
898STRUCT!{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}}
905pub type PNET_DISPLAY_GROUP = *mut NET_DISPLAY_GROUP;
906extern "system" {
907 pub fn NetAccessAdd(
908 servername: LPCWSTR,
909 level: DWORD,
910 buf: LPBYTE,
911 parm_err: LPDWORD,
912 ) -> NET_API_STATUS;
913 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;
924 pub fn NetAccessGetInfo(
925 servername: LPCWSTR,
926 resource: LPCWSTR,
927 level: DWORD,
928 bufptr: *mut LPBYTE,
929 ) -> NET_API_STATUS;
930 pub fn NetAccessSetInfo(
931 servername: LPCWSTR,
932 resource: LPCWSTR,
933 level: DWORD,
934 buf: LPBYTE,
935 parm_err: LPDWORD,
936 ) -> NET_API_STATUS;
937 pub fn NetAccessDel(
938 servername: LPCWSTR,
939 resource: LPCWSTR,
940 ) -> NET_API_STATUS;
941 pub fn NetAccessGetUserPerms(
942 servername: LPCWSTR,
943 UGname: LPCWSTR,
944 resource: LPCWSTR,
945 Perms: LPDWORD,
946 ) -> NET_API_STATUS;
947}
948STRUCT!{struct ACCESS_INFO_0 {
949 acc0_resource_name: LPWSTR,
950}}
951pub type PACCESS_INFO_0 = *mut ACCESS_INFO_0;
952pub type LPACCESS_INFO_0 = *mut ACCESS_INFO_0;
953STRUCT!{struct ACCESS_INFO_1 {
954 acc1_resource_name: LPWSTR,
955 acc1_attr: DWORD,
956 acc1_count: DWORD,
957}}
958pub type PACCESS_INFO_1 = *mut ACCESS_INFO_1;
959pub type LPACCESS_INFO_1 = *mut ACCESS_INFO_1;
960STRUCT!{struct ACCESS_INFO_1002 {
961 acc1002_attr: DWORD,
962}}
963pub type PACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
964pub type LPACCESS_INFO_1002 = *mut ACCESS_INFO_1002;
965STRUCT!{struct ACCESS_LIST {
966 acl_ugname: LPWSTR,
967 acl_access: DWORD,
968}}
969pub type PACCESS_LIST = *mut ACCESS_LIST;
970pub type LPACCESS_LIST = *mut ACCESS_LIST;
971pub const MAXPERMENTRIES: DWORD = 64;
972pub const ACCESS_NONE: DWORD = 0;
973pub const ACCESS_ALL: DWORD = ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC
974 | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM;
975pub const ACCESS_READ: DWORD = 0x01;
976pub const ACCESS_WRITE: DWORD = 0x02;
977pub const ACCESS_CREATE: DWORD = 0x04;
978pub const ACCESS_EXEC: DWORD = 0x08;
979pub const ACCESS_DELETE: DWORD = 0x10;
980pub const ACCESS_ATRIB: DWORD = 0x20;
981pub const ACCESS_PERM: DWORD = 0x40;
982pub const ACCESS_GROUP: DWORD = 0x8000;
983pub const ACCESS_AUDIT: DWORD = 0x1;
984pub const ACCESS_SUCCESS_OPEN: DWORD = 0x10;
985pub const ACCESS_SUCCESS_WRITE: DWORD = 0x20;
986pub const ACCESS_SUCCESS_DELETE: DWORD = 0x40;
987pub const ACCESS_SUCCESS_ACL: DWORD = 0x80;
988pub const ACCESS_SUCCESS_MASK: DWORD = 0xF0;
989pub const ACCESS_FAIL_OPEN: DWORD = 0x100;
990pub const ACCESS_FAIL_WRITE: DWORD = 0x200;
991pub const ACCESS_FAIL_DELETE: DWORD = 0x400;
992pub const ACCESS_FAIL_ACL: DWORD = 0x800;
993pub const ACCESS_FAIL_MASK: DWORD = 0xF00;
994pub const ACCESS_FAIL_SHIFT: DWORD = 4;
995pub const ACCESS_RESOURCE_NAME_PARMNUM: DWORD = 1;
996pub const ACCESS_ATTR_PARMNUM: DWORD = 2;
997pub const ACCESS_COUNT_PARMNUM: DWORD = 3;
998pub const ACCESS_ACCESS_LIST_PARMNUM: DWORD = 4;
999pub const ACCESS_RESOURCE_NAME_INFOLEVEL: DWORD =
1000 PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM;
1001pub const ACCESS_ATTR_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM;
1002pub const ACCESS_COUNT_INFOLEVEL: DWORD = PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM;
1003pub const ACCESS_ACCESS_LIST_INFOLEVEL: DWORD =
1004 PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM;
1005pub const ACCESS_LETTERS: &'static str = "RWCXDAP ";
1006ENUM!{enum NET_VALIDATE_PASSWORD_TYPE {
1007 NetValidateAuthentication = 1,
1008 NetValidatePasswordChange,
1009 NetValidatePasswordReset,
1010}}
1011pub type PNET_VALIDATE_PASSWORD_TYPE = *mut NET_VALIDATE_PASSWORD_TYPE;
1012STRUCT!{struct NET_VALIDATE_PASSWORD_HASH {
1013 Length: ULONG,
1014 Hash: LPBYTE,
1015}}
1016pub type PNET_VALIDATE_PASSWORD_HASH = *mut NET_VALIDATE_PASSWORD_HASH;
1017pub const NET_VALIDATE_PASSWORD_LAST_SET: ULONG = 0x00000001;
1018pub const NET_VALIDATE_BAD_PASSWORD_TIME: ULONG = 0x00000002;
1019pub const NET_VALIDATE_LOCKOUT_TIME: ULONG = 0x00000004;
1020pub const NET_VALIDATE_BAD_PASSWORD_COUNT: ULONG = 0x00000008;
1021pub const NET_VALIDATE_PASSWORD_HISTORY_LENGTH: ULONG = 0x00000010;
1022pub const NET_VALIDATE_PASSWORD_HISTORY: ULONG = 0x00000020;
1023STRUCT!{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}}
1032pub type PNET_VALIDATE_PERSISTED_FIELDS = *mut NET_VALIDATE_PERSISTED_FIELDS;
1033STRUCT!{struct NET_VALIDATE_OUTPUT_ARG {
1034 ChangedPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1035 ValidationStatus: NET_API_STATUS,
1036}}
1037pub type PNET_VALIDATE_OUTPUT_ARG = *mut NET_VALIDATE_OUTPUT_ARG;
1038STRUCT!{struct NET_VALIDATE_AUTHENTICATION_INPUT_ARG {
1039 InputPersistedFields: NET_VALIDATE_PERSISTED_FIELDS,
1040 PasswordMatched: BOOLEAN,
1041}}
1042pub type PNET_VALIDATE_AUTHENTICATION_INPUT_ARG = *mut NET_VALIDATE_AUTHENTICATION_INPUT_ARG;
1043STRUCT!{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}}
1050pub type PNET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG;
1051STRUCT!{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}}
1059pub type PNET_VALIDATE_PASSWORD_RESET_INPUT_ARG = *mut NET_VALIDATE_PASSWORD_RESET_INPUT_ARG;
1060extern "system" {
1061 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;
1068 pub fn NetValidatePasswordPolicyFree(
1069 OutputArg: *mut LPVOID,
1070 ) -> NET_API_STATUS;
1071 pub fn NetGetDCName(
1072 servername: LPCWSTR,
1073 domainname: LPCWSTR,
1074 bufptr: *mut LPBYTE,
1075 ) -> NET_API_STATUS;
1076 pub fn NetGetAnyDCName(
1077 servername: LPCWSTR,
1078 domainname: LPCWSTR,
1079 bufptr: *mut LPBYTE,
1080 ) -> NET_API_STATUS;
1081 pub fn I_NetLogonControl(
1082 ServerName: LPCWSTR,
1083 FunctionCode: DWORD,
1084 QueryLevel: DWORD,
1085 Buffer: *mut LPBYTE,
1086 ) -> NET_API_STATUS;
1087 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}
1095pub type NTSTATUS = LONG;
1096pub type PNTSTATUS = *mut LONG;
1097extern "system" {
1098 pub fn NetEnumerateTrustedDomains(
1099 ServerName: LPWSTR,
1100 DomainNames: *mut LPWSTR,
1101 ) -> NTSTATUS;
1102}
1103pub const NETLOGON_CONTROL_QUERY: DWORD = 1;
1104pub const NETLOGON_CONTROL_REPLICATE: DWORD = 2;
1105pub const NETLOGON_CONTROL_SYNCHRONIZE: DWORD = 3;
1106pub const NETLOGON_CONTROL_PDC_REPLICATE: DWORD = 4;
1107pub const NETLOGON_CONTROL_REDISCOVER: DWORD = 5;
1108pub const NETLOGON_CONTROL_TC_QUERY: DWORD = 6;
1109pub const NETLOGON_CONTROL_TRANSPORT_NOTIFY: DWORD = 7;
1110pub const NETLOGON_CONTROL_FIND_USER: DWORD = 8;
1111pub const NETLOGON_CONTROL_CHANGE_PASSWORD: DWORD = 9;
1112pub const NETLOGON_CONTROL_TC_VERIFY: DWORD = 10;
1113pub const NETLOGON_CONTROL_FORCE_DNS_REG: DWORD = 11;
1114pub const NETLOGON_CONTROL_QUERY_DNS_REG: DWORD = 12;
1115pub const NETLOGON_CONTROL_QUERY_ENC_TYPES: DWORD = 13;
1116pub const NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL: DWORD = 0xFFFB;
1117pub const NETLOGON_CONTROL_BACKUP_CHANGE_LOG: DWORD = 0xFFFC;
1118pub const NETLOGON_CONTROL_TRUNCATE_LOG: DWORD = 0xFFFD;
1119pub const NETLOGON_CONTROL_SET_DBFLAG: DWORD = 0xFFFE;
1120pub const NETLOGON_CONTROL_BREAKPOINT: DWORD = 0xFFFF;
1121STRUCT!{struct NETLOGON_INFO_1 {
1122 netlog1_flags: DWORD,
1123 netlog1_pdc_connection_status: NET_API_STATUS,
1124}}
1125pub type PNETLOGON_INFO_1 = *mut NETLOGON_INFO_1;
1126STRUCT!{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}}
1132pub type PNETLOGON_INFO_2 = *mut NETLOGON_INFO_2;
1133STRUCT!{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}}
1142pub type PNETLOGON_INFO_3 = *mut NETLOGON_INFO_3;
1143STRUCT!{struct NETLOGON_INFO_4 {
1144 netlog4_trusted_dc_name: LPWSTR,
1145 netlog4_trusted_domain_name: LPWSTR,
1146}}
1147pub type PNETLOGON_INFO_4 = *mut NETLOGON_INFO_4;
1148pub const NETLOGON_REPLICATION_NEEDED: DWORD = 0x01;
1149pub const NETLOGON_REPLICATION_IN_PROGRESS: DWORD = 0x02;
1150pub const NETLOGON_FULL_SYNC_REPLICATION: DWORD = 0x04;
1151pub const NETLOGON_REDO_NEEDED: DWORD = 0x08;
1152pub const NETLOGON_HAS_IP: DWORD = 0x10;
1153pub const NETLOGON_HAS_TIMESERV: DWORD = 0x20;
1154pub const NETLOGON_DNS_UPDATE_FAILURE: DWORD = 0x40;
1155pub const NETLOGON_VERIFY_STATUS_RETURNED: DWORD = 0x80;
1156pub const SERVICE_ACCOUNT_PASSWORD: &'static str = "_SA_{262E99C9-6160-4871-ACEC-4E61736B6F21}";
1157pub const SERVICE_ACCOUNT_SECRET_PREFIX: &'static str
1158 = "_SC_{262E99C9-6160-4871-ACEC-4E61736B6F21}_";
1159DEFINE_GUID!{ServiceAccountPasswordGUID,
1160 0x262E99C9, 0x6160, 0x4871, 0xAC, 0xEC, 0x4E, 0x61, 0x73, 0x6B, 0x6F, 0x21}
1161extern "system" {
1162 pub fn NetAddServiceAccount(
1163 ServerName: LPWSTR,
1164 AccountName: LPWSTR,
1165 Password: LPWSTR,
1166 Flags: DWORD,
1167 ) -> NTSTATUS;
1168}
1169pub const SERVICE_ACCOUNT_FLAG_LINK_TO_HOST_ONLY: DWORD = 0x00000001;
1170pub const SERVICE_ACCOUNT_FLAG_ADD_AGAINST_RODC: DWORD = 0x00000002;
1171pub const SERVICE_ACCOUNT_FLAG_UNLINK_FROM_HOST_ONLY: DWORD = 0x00000001;
1172pub const SERVICE_ACCOUNT_FLAG_REMOVE_OFFLINE: DWORD = 0x00000002;
1173extern "system" {
1174 pub fn NetRemoveServiceAccount(
1175 ServerName: LPWSTR,
1176 AccountName: LPWSTR,
1177 Flags: DWORD,
1178 ) -> NTSTATUS;
1179 pub fn NetEnumerateServiceAccounts(
1180 ServerName: LPWSTR,
1181 Flags: DWORD,
1182 AccountsCount: *mut DWORD,
1183 Accounts: *mut PZPWSTR,
1184 ) -> NTSTATUS;
1185 pub fn NetIsServiceAccount(
1186 ServerName: LPWSTR,
1187 AccountName: LPWSTR,
1188 IsService: *mut BOOL,
1189 ) -> NTSTATUS;
1190 pub fn NetQueryServiceAccount(
1191 ServerName: LPWSTR,
1192 AccountName: LPWSTR,
1193 InfoLevel: DWORD,
1194 Buffer: *mut PBYTE,
1195 ) -> NTSTATUS;
1196}
1197ENUM!{enum MSA_INFO_LEVEL {
1198 MsaInfoLevel0 = 0,
1199 MsaInfoLevelMax,
1200}}
1201pub type PMSA_INFO_LEVEL = *mut MSA_INFO_LEVEL;
1202ENUM!{enum MSA_INFO_STATE {
1203 MsaInfoNotExist = 1,
1204 MsaInfoNotService,
1205 MsaInfoCannotInstall,
1206 MsaInfoCanInstall,
1207 MsaInfoInstalled,
1208}}
1209pub type PMSA_INFO_STATE = *mut MSA_INFO_STATE;
1210STRUCT!{struct MSA_INFO_0 {
1211 State: MSA_INFO_STATE,
1212}}
1213pub type PMSA_INFO_0 = *mut MSA_INFO_0;
1214pub type LPMSA_INFO_0 = *mut MSA_INFO_0;