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