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