/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _LMUSER_
#define _LMUSER_

#ifdef __cplusplus
extern "C" {
#endif

#include <lmcons.h>

  NET_API_STATUS WINAPI NetUserAdd(LPCWSTR servername,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetUserEnum(LPCWSTR servername,DWORD level,DWORD filter,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,LPDWORD resume_handle);
  NET_API_STATUS WINAPI NetUserGetInfo(LPCWSTR servername,LPCWSTR username,DWORD level,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetUserSetInfo(LPCWSTR servername,LPCWSTR username,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetUserDel(LPCWSTR servername,LPCWSTR username);
  NET_API_STATUS WINAPI NetUserGetGroups(LPCWSTR servername,LPCWSTR username,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries);
  NET_API_STATUS WINAPI NetUserSetGroups(LPCWSTR servername,LPCWSTR username,DWORD level,LPBYTE buf,DWORD num_entries);
  NET_API_STATUS WINAPI NetUserGetLocalGroups(LPCWSTR servername,LPCWSTR username,DWORD level,DWORD flags,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries);
  NET_API_STATUS WINAPI NetUserModalsGet(LPCWSTR servername,DWORD level,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetUserModalsSet(LPCWSTR servername,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetUserChangePassword(LPCWSTR domainname,LPCWSTR username,LPCWSTR oldpassword,LPCWSTR newpassword);

  typedef struct _USER_INFO_0 {
    LPWSTR usri0_name;
  } USER_INFO_0,*PUSER_INFO_0,*LPUSER_INFO_0;

  typedef struct _USER_INFO_1 {
    LPWSTR usri1_name;
    LPWSTR usri1_password;
    DWORD usri1_password_age;
    DWORD usri1_priv;
    LPWSTR usri1_home_dir;
    LPWSTR usri1_comment;
    DWORD usri1_flags;
    LPWSTR usri1_script_path;
  } USER_INFO_1,*PUSER_INFO_1,*LPUSER_INFO_1;

  typedef struct _USER_INFO_2 {
    LPWSTR usri2_name;
    LPWSTR usri2_password;
    DWORD usri2_password_age;
    DWORD usri2_priv;
    LPWSTR usri2_home_dir;
    LPWSTR usri2_comment;
    DWORD usri2_flags;
    LPWSTR usri2_script_path;
    DWORD usri2_auth_flags;
    LPWSTR usri2_full_name;
    LPWSTR usri2_usr_comment;
    LPWSTR usri2_parms;
    LPWSTR usri2_workstations;
    DWORD usri2_last_logon;
    DWORD usri2_last_logoff;
    DWORD usri2_acct_expires;
    DWORD usri2_max_storage;
    DWORD usri2_units_per_week;
    PBYTE usri2_logon_hours;
    DWORD usri2_bad_pw_count;
    DWORD usri2_num_logons;
    LPWSTR usri2_logon_server;
    DWORD usri2_country_code;
    DWORD usri2_code_page;
  } USER_INFO_2,*PUSER_INFO_2,*LPUSER_INFO_2;

  typedef struct _USER_INFO_3 {
    LPWSTR usri3_name;
    LPWSTR usri3_password;
    DWORD usri3_password_age;
    DWORD usri3_priv;
    LPWSTR usri3_home_dir;
    LPWSTR usri3_comment;
    DWORD usri3_flags;
    LPWSTR usri3_script_path;
    DWORD usri3_auth_flags;
    LPWSTR usri3_full_name;
    LPWSTR usri3_usr_comment;
    LPWSTR usri3_parms;
    LPWSTR usri3_workstations;
    DWORD usri3_last_logon;
    DWORD usri3_last_logoff;
    DWORD usri3_acct_expires;
    DWORD usri3_max_storage;
    DWORD usri3_units_per_week;
    PBYTE usri3_logon_hours;
    DWORD usri3_bad_pw_count;
    DWORD usri3_num_logons;
    LPWSTR usri3_logon_server;
    DWORD usri3_country_code;
    DWORD usri3_code_page;
    DWORD usri3_user_id;
    DWORD usri3_primary_group_id;
    LPWSTR usri3_profile;
    LPWSTR usri3_home_dir_drive;
    DWORD usri3_password_expired;
  } USER_INFO_3,*PUSER_INFO_3,*LPUSER_INFO_3;

  typedef struct _USER_INFO_4 {
    LPWSTR usri4_name;
    LPWSTR usri4_password;
    DWORD usri4_password_age;
    DWORD usri4_priv;
    LPWSTR usri4_home_dir;
    LPWSTR usri4_comment;
    DWORD usri4_flags;
    LPWSTR usri4_script_path;
    DWORD usri4_auth_flags;
    LPWSTR usri4_full_name;
    LPWSTR usri4_usr_comment;
    LPWSTR usri4_parms;
    LPWSTR usri4_workstations;
    DWORD usri4_last_logon;
    DWORD usri4_last_logoff;
    DWORD usri4_acct_expires;
    DWORD usri4_max_storage;
    DWORD usri4_units_per_week;
    PBYTE usri4_logon_hours;
    DWORD usri4_bad_pw_count;
    DWORD usri4_num_logons;
    LPWSTR usri4_logon_server;
    DWORD usri4_country_code;
    DWORD usri4_code_page;
    PSID usri4_user_sid;
    DWORD usri4_primary_group_id;
    LPWSTR usri4_profile;
    LPWSTR usri4_home_dir_drive;
    DWORD usri4_password_expired;
  } USER_INFO_4,*PUSER_INFO_4,*LPUSER_INFO_4;

  typedef struct _USER_INFO_10 {
    LPWSTR usri10_name;
    LPWSTR usri10_comment;
    LPWSTR usri10_usr_comment;
    LPWSTR usri10_full_name;
  }USER_INFO_10,*PUSER_INFO_10,*LPUSER_INFO_10;

  typedef struct _USER_INFO_11 {
    LPWSTR usri11_name;
    LPWSTR usri11_comment;
    LPWSTR usri11_usr_comment;
    LPWSTR usri11_full_name;
    DWORD usri11_priv;
    DWORD usri11_auth_flags;
    DWORD usri11_password_age;
    LPWSTR usri11_home_dir;
    LPWSTR usri11_parms;
    DWORD usri11_last_logon;
    DWORD usri11_last_logoff;
    DWORD usri11_bad_pw_count;
    DWORD usri11_num_logons;
    LPWSTR usri11_logon_server;
    DWORD usri11_country_code;
    LPWSTR usri11_workstations;
    DWORD usri11_max_storage;
    DWORD usri11_units_per_week;
    PBYTE usri11_logon_hours;
    DWORD usri11_code_page;
  } USER_INFO_11,*PUSER_INFO_11,*LPUSER_INFO_11;

  typedef struct _USER_INFO_20 {
    LPWSTR usri20_name;
    LPWSTR usri20_full_name;
    LPWSTR usri20_comment;
    DWORD usri20_flags;
    DWORD usri20_user_id;
  } USER_INFO_20,*PUSER_INFO_20,*LPUSER_INFO_20;

  typedef struct _USER_INFO_21 {
    BYTE usri21_password[ENCRYPTED_PWLEN];
  } USER_INFO_21,*PUSER_INFO_21,*LPUSER_INFO_21;

  typedef struct _USER_INFO_22 {
    LPWSTR usri22_name;
    BYTE usri22_password[ENCRYPTED_PWLEN];
    DWORD usri22_password_age;
    DWORD usri22_priv;
    LPWSTR usri22_home_dir;
    LPWSTR usri22_comment;
    DWORD usri22_flags;
    LPWSTR usri22_script_path;
    DWORD usri22_auth_flags;
    LPWSTR usri22_full_name;
    LPWSTR usri22_usr_comment;
    LPWSTR usri22_parms;
    LPWSTR usri22_workstations;
    DWORD usri22_last_logon;
    DWORD usri22_last_logoff;
    DWORD usri22_acct_expires;
    DWORD usri22_max_storage;
    DWORD usri22_units_per_week;
    PBYTE usri22_logon_hours;
    DWORD usri22_bad_pw_count;
    DWORD usri22_num_logons;
    LPWSTR usri22_logon_server;
    DWORD usri22_country_code;
    DWORD usri22_code_page;
  } USER_INFO_22,*PUSER_INFO_22,*LPUSER_INFO_22;

  typedef struct _USER_INFO_23 {
    LPWSTR usri23_name;
    LPWSTR usri23_full_name;
    LPWSTR usri23_comment;
    DWORD usri23_flags;
    PSID usri23_user_sid;
  } USER_INFO_23,*PUSER_INFO_23,*LPUSER_INFO_23;

  typedef struct _USER_INFO_1003 {
    LPWSTR usri1003_password;
  } USER_INFO_1003,*PUSER_INFO_1003,*LPUSER_INFO_1003;

  typedef struct _USER_INFO_1005 {
    DWORD usri1005_priv;
  } USER_INFO_1005,*PUSER_INFO_1005,*LPUSER_INFO_1005;

  typedef struct _USER_INFO_1006 {
    LPWSTR usri1006_home_dir;
  } USER_INFO_1006,*PUSER_INFO_1006,*LPUSER_INFO_1006;

  typedef struct _USER_INFO_1007 {
    LPWSTR usri1007_comment;
  } USER_INFO_1007,*PUSER_INFO_1007,*LPUSER_INFO_1007;

  typedef struct _USER_INFO_1008 {
    DWORD usri1008_flags;
  } USER_INFO_1008,*PUSER_INFO_1008,*LPUSER_INFO_1008;

  typedef struct _USER_INFO_1009 {
    LPWSTR usri1009_script_path;
  } USER_INFO_1009,*PUSER_INFO_1009,*LPUSER_INFO_1009;

  typedef struct _USER_INFO_1010 {
    DWORD usri1010_auth_flags;
  } USER_INFO_1010,*PUSER_INFO_1010,*LPUSER_INFO_1010;

  typedef struct _USER_INFO_1011 {
    LPWSTR usri1011_full_name;
  } USER_INFO_1011,*PUSER_INFO_1011,*LPUSER_INFO_1011;

  typedef struct _USER_INFO_1012 {
    LPWSTR usri1012_usr_comment;
  } USER_INFO_1012,*PUSER_INFO_1012,*LPUSER_INFO_1012;

  typedef struct _USER_INFO_1013 {
    LPWSTR usri1013_parms;
  } USER_INFO_1013,*PUSER_INFO_1013,*LPUSER_INFO_1013;

  typedef struct _USER_INFO_1014 {
    LPWSTR usri1014_workstations;
  } USER_INFO_1014,*PUSER_INFO_1014,*LPUSER_INFO_1014;

  typedef struct _USER_INFO_1017 {
    DWORD usri1017_acct_expires;
  } USER_INFO_1017,*PUSER_INFO_1017,*LPUSER_INFO_1017;

  typedef struct _USER_INFO_1018 {
    DWORD usri1018_max_storage;
  } USER_INFO_1018,*PUSER_INFO_1018,*LPUSER_INFO_1018;

  typedef struct _USER_INFO_1020 {
    DWORD usri1020_units_per_week;
    LPBYTE usri1020_logon_hours;
  } USER_INFO_1020,*PUSER_INFO_1020,*LPUSER_INFO_1020;

  typedef struct _USER_INFO_1023 {
    LPWSTR usri1023_logon_server;
  } USER_INFO_1023,*PUSER_INFO_1023,*LPUSER_INFO_1023;

  typedef struct _USER_INFO_1024 {
    DWORD usri1024_country_code;
  } USER_INFO_1024,*PUSER_INFO_1024,*LPUSER_INFO_1024;

  typedef struct _USER_INFO_1025 {
    DWORD usri1025_code_page;
  } USER_INFO_1025,*PUSER_INFO_1025,*LPUSER_INFO_1025;

  typedef struct _USER_INFO_1051 {
    DWORD usri1051_primary_group_id;
  } USER_INFO_1051,*PUSER_INFO_1051,*LPUSER_INFO_1051;

  typedef struct _USER_INFO_1052 {
    LPWSTR usri1052_profile;
  } USER_INFO_1052,*PUSER_INFO_1052,*LPUSER_INFO_1052;

  typedef struct _USER_INFO_1053 {
    LPWSTR usri1053_home_dir_drive;
  } USER_INFO_1053,*PUSER_INFO_1053,*LPUSER_INFO_1053;

  typedef struct _USER_MODALS_INFO_0 {
    DWORD usrmod0_min_passwd_len;
    DWORD usrmod0_max_passwd_age;
    DWORD usrmod0_min_passwd_age;
    DWORD usrmod0_force_logoff;
    DWORD usrmod0_password_hist_len;
  } USER_MODALS_INFO_0,*PUSER_MODALS_INFO_0,*LPUSER_MODALS_INFO_0;

  typedef struct _USER_MODALS_INFO_1 {
    DWORD usrmod1_role;
    LPWSTR usrmod1_primary;
  } USER_MODALS_INFO_1,*PUSER_MODALS_INFO_1,*LPUSER_MODALS_INFO_1;

  typedef struct _USER_MODALS_INFO_2 {
    LPWSTR usrmod2_domain_name;
    PSID usrmod2_domain_id;
  } USER_MODALS_INFO_2,*PUSER_MODALS_INFO_2,*LPUSER_MODALS_INFO_2;

  typedef struct _USER_MODALS_INFO_3 {
    DWORD usrmod3_lockout_duration;
    DWORD usrmod3_lockout_observation_window;
    DWORD usrmod3_lockout_threshold;
  } USER_MODALS_INFO_3,*PUSER_MODALS_INFO_3,*LPUSER_MODALS_INFO_3;

  typedef struct _USER_MODALS_INFO_1001 {
    DWORD usrmod1001_min_passwd_len;
  } USER_MODALS_INFO_1001,*PUSER_MODALS_INFO_1001,*LPUSER_MODALS_INFO_1001;

  typedef struct _USER_MODALS_INFO_1002 {
    DWORD usrmod1002_max_passwd_age;
  } USER_MODALS_INFO_1002,*PUSER_MODALS_INFO_1002,*LPUSER_MODALS_INFO_1002;

  typedef struct _USER_MODALS_INFO_1003 {
    DWORD usrmod1003_min_passwd_age;
  } USER_MODALS_INFO_1003,*PUSER_MODALS_INFO_1003,*LPUSER_MODALS_INFO_1003;

  typedef struct _USER_MODALS_INFO_1004 {
    DWORD usrmod1004_force_logoff;
  } USER_MODALS_INFO_1004,*PUSER_MODALS_INFO_1004,*LPUSER_MODALS_INFO_1004;

  typedef struct _USER_MODALS_INFO_1005 {
    DWORD usrmod1005_password_hist_len;
  } USER_MODALS_INFO_1005,*PUSER_MODALS_INFO_1005,*LPUSER_MODALS_INFO_1005;

  typedef struct _USER_MODALS_INFO_1006 {
    DWORD usrmod1006_role;
  } USER_MODALS_INFO_1006,*PUSER_MODALS_INFO_1006,*LPUSER_MODALS_INFO_1006;

  typedef struct _USER_MODALS_INFO_1007 {
    LPWSTR usrmod1007_primary;
  } USER_MODALS_INFO_1007,*PUSER_MODALS_INFO_1007,*LPUSER_MODALS_INFO_1007;

#define UF_SCRIPT 0x0001
#define UF_ACCOUNTDISABLE 0x0002
#define UF_HOMEDIR_REQUIRED 0x0008
#define UF_LOCKOUT 0x0010
#define UF_PASSWD_NOTREQD 0x0020
#define UF_PASSWD_CANT_CHANGE 0x0040
#define UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED 0x0080

#define UF_TEMP_DUPLICATE_ACCOUNT 0x0100
#define UF_NORMAL_ACCOUNT 0x0200
#define UF_INTERDOMAIN_TRUST_ACCOUNT 0x0800
#define UF_WORKSTATION_TRUST_ACCOUNT 0x1000
#define UF_SERVER_TRUST_ACCOUNT 0x2000

#define UF_MACHINE_ACCOUNT_MASK (UF_INTERDOMAIN_TRUST_ACCOUNT | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT)
#define UF_ACCOUNT_TYPE_MASK (UF_TEMP_DUPLICATE_ACCOUNT | UF_NORMAL_ACCOUNT | UF_INTERDOMAIN_TRUST_ACCOUNT | UF_WORKSTATION_TRUST_ACCOUNT | UF_SERVER_TRUST_ACCOUNT)

#define UF_DONT_EXPIRE_PASSWD 0x10000
#define UF_MNS_LOGON_ACCOUNT 0x20000
#define UF_SMARTCARD_REQUIRED 0x40000
#define UF_TRUSTED_FOR_DELEGATION 0x80000
#define UF_NOT_DELEGATED 0x100000
#define UF_USE_DES_KEY_ONLY 0x200000
#define UF_DONT_REQUIRE_PREAUTH 0x400000
#define UF_PASSWORD_EXPIRED 0x800000
#define UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 0x1000000
#define UF_NO_AUTH_DATA_REQUIRED 0x2000000

#define UF_SETTABLE_BITS (UF_SCRIPT | UF_ACCOUNTDISABLE | UF_LOCKOUT | UF_HOMEDIR_REQUIRED | UF_PASSWD_NOTREQD | UF_PASSWD_CANT_CHANGE | UF_ACCOUNT_TYPE_MASK | UF_DONT_EXPIRE_PASSWD | UF_MNS_LOGON_ACCOUNT | UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED | UF_SMARTCARD_REQUIRED | UF_TRUSTED_FOR_DELEGATION | UF_NOT_DELEGATED | UF_USE_DES_KEY_ONLY | UF_DONT_REQUIRE_PREAUTH | UF_PASSWORD_EXPIRED | UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION | UF_NO_AUTH_DATA_REQUIRED)

#define FILTER_TEMP_DUPLICATE_ACCOUNT (0x0001)
#define FILTER_NORMAL_ACCOUNT (0x0002)

#define FILTER_INTERDOMAIN_TRUST_ACCOUNT (0x0008)
#define FILTER_WORKSTATION_TRUST_ACCOUNT (0x0010)
#define FILTER_SERVER_TRUST_ACCOUNT (0x0020)

#define LG_INCLUDE_INDIRECT (0x0001)

#define AF_OP_PRINT 0x1
#define AF_OP_COMM 0x2
#define AF_OP_SERVER 0x4
#define AF_OP_ACCOUNTS 0x8
#define AF_SETTABLE_BITS (AF_OP_PRINT | AF_OP_COMM | AF_OP_SERVER | AF_OP_ACCOUNTS)

#define UAS_ROLE_STANDALONE 0
#define UAS_ROLE_MEMBER 1
#define UAS_ROLE_BACKUP 2
#define UAS_ROLE_PRIMARY 3

#define USER_NAME_PARMNUM 1
#define USER_PASSWORD_PARMNUM 3
#define USER_PASSWORD_AGE_PARMNUM 4
#define USER_PRIV_PARMNUM 5
#define USER_HOME_DIR_PARMNUM 6
#define USER_COMMENT_PARMNUM 7
#define USER_FLAGS_PARMNUM 8
#define USER_SCRIPT_PATH_PARMNUM 9
#define USER_AUTH_FLAGS_PARMNUM 10
#define USER_FULL_NAME_PARMNUM 11
#define USER_USR_COMMENT_PARMNUM 12
#define USER_PARMS_PARMNUM 13
#define USER_WORKSTATIONS_PARMNUM 14
#define USER_LAST_LOGON_PARMNUM 15
#define USER_LAST_LOGOFF_PARMNUM 16
#define USER_ACCT_EXPIRES_PARMNUM 17
#define USER_MAX_STORAGE_PARMNUM 18
#define USER_UNITS_PER_WEEK_PARMNUM 19
#define USER_LOGON_HOURS_PARMNUM 20
#define USER_PAD_PW_COUNT_PARMNUM 21
#define USER_NUM_LOGONS_PARMNUM 22
#define USER_LOGON_SERVER_PARMNUM 23
#define USER_COUNTRY_CODE_PARMNUM 24
#define USER_CODE_PAGE_PARMNUM 25
#define USER_PRIMARY_GROUP_PARMNUM 51
#define USER_PROFILE 52
#define USER_PROFILE_PARMNUM 52
#define USER_HOME_DIR_DRIVE_PARMNUM 53

#define USER_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM)
#define USER_PASSWORD_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM)
#define USER_PASSWORD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM)
#define USER_PRIV_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM)
#define USER_HOME_DIR_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM)
#define USER_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM)
#define USER_FLAGS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM)
#define USER_SCRIPT_PATH_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM)
#define USER_AUTH_FLAGS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM)
#define USER_FULL_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM)
#define USER_USR_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM)
#define USER_PARMS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM)
#define USER_WORKSTATIONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM)
#define USER_LAST_LOGON_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM)
#define USER_LAST_LOGOFF_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM)
#define USER_ACCT_EXPIRES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM)
#define USER_MAX_STORAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM)
#define USER_UNITS_PER_WEEK_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM)
#define USER_LOGON_HOURS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM)
#define USER_PAD_PW_COUNT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM)
#define USER_NUM_LOGONS_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM)
#define USER_LOGON_SERVER_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM)
#define USER_COUNTRY_CODE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM)
#define USER_CODE_PAGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM)
#define USER_PRIMARY_GROUP_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM)
#define USER_POSIX_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_POSIX_ID_PARMNUM)
#define USER_HOME_DIR_DRIVE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM)

#define NULL_USERSETINFO_PASSWD "              "

#define TIMEQ_FOREVER ((unsigned long) -1L)
#define USER_MAXSTORAGE_UNLIMITED ((unsigned long) -1L)
#define USER_NO_LOGOFF ((unsigned long) -1L)
#define UNITS_PER_DAY 24
#define UNITS_PER_WEEK UNITS_PER_DAY *7

#define USER_PRIV_MASK 0x3
#define USER_PRIV_GUEST 0
#define USER_PRIV_USER 1
#define USER_PRIV_ADMIN 2

#define MAX_PASSWD_LEN PWLEN
#define DEF_MIN_PWLEN 6
#define DEF_PWUNIQUENESS 5
#define DEF_MAX_PWHIST 8

#define DEF_MAX_PWAGE TIMEQ_FOREVER
#define DEF_MIN_PWAGE (unsigned long) 0L
#define DEF_FORCE_LOGOFF (unsigned long) 0xffffffff
#define DEF_MAX_BADPW 0
#define ONE_DAY (unsigned long) 01*24*3600

#define VALIDATED_LOGON 0
#define PASSWORD_EXPIRED 2
#define NON_VALIDATED_LOGON 3

#define VALID_LOGOFF 1

#define MODALS_MIN_PASSWD_LEN_PARMNUM 1
#define MODALS_MAX_PASSWD_AGE_PARMNUM 2
#define MODALS_MIN_PASSWD_AGE_PARMNUM 3
#define MODALS_FORCE_LOGOFF_PARMNUM 4
#define MODALS_PASSWD_HIST_LEN_PARMNUM 5
#define MODALS_ROLE_PARMNUM 6
#define MODALS_PRIMARY_PARMNUM 7
#define MODALS_DOMAIN_NAME_PARMNUM 8
#define MODALS_DOMAIN_ID_PARMNUM 9
#define MODALS_LOCKOUT_DURATION_PARMNUM 10
#define MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM 11
#define MODALS_LOCKOUT_THRESHOLD_PARMNUM 12

#define MODALS_MIN_PASSWD_LEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM)
#define MODALS_MAX_PASSWD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM)
#define MODALS_MIN_PASSWD_AGE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM)
#define MODALS_FORCE_LOGOFF_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM)
#define MODALS_PASSWD_HIST_LEN_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM)
#define MODALS_ROLE_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM)
#define MODALS_PRIMARY_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM)
#define MODALS_DOMAIN_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM)
#define MODALS_DOMAIN_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM)
#endif

#ifndef _LMGROUP_
#define _LMGROUP_

  NET_API_STATUS WINAPI NetGroupAdd(LPCWSTR servername,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetGroupAddUser(LPCWSTR servername,LPCWSTR GroupName,LPCWSTR username);
  NET_API_STATUS WINAPI NetGroupEnum(LPCWSTR servername,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,PDWORD_PTR resume_handle);
  NET_API_STATUS WINAPI NetGroupGetInfo(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetGroupSetInfo(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetGroupDel(LPCWSTR servername,LPCWSTR groupname);
  NET_API_STATUS WINAPI NetGroupDelUser(LPCWSTR servername,LPCWSTR GroupName,LPCWSTR Username);
  NET_API_STATUS WINAPI NetGroupGetUsers(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,PDWORD_PTR ResumeHandle);
  NET_API_STATUS WINAPI NetGroupSetUsers(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,DWORD totalentries);

  typedef struct _GROUP_INFO_0 {
    LPWSTR grpi0_name;
  } GROUP_INFO_0,*PGROUP_INFO_0,*LPGROUP_INFO_0;

  typedef struct _GROUP_INFO_1 {
    LPWSTR grpi1_name;
    LPWSTR grpi1_comment;
  } GROUP_INFO_1,*PGROUP_INFO_1,*LPGROUP_INFO_1;

  typedef struct _GROUP_INFO_2 {
    LPWSTR grpi2_name;
    LPWSTR grpi2_comment;
    DWORD grpi2_group_id;
    DWORD grpi2_attributes;
  } GROUP_INFO_2,*PGROUP_INFO_2;

  typedef struct _GROUP_INFO_3 {
    LPWSTR grpi3_name;
    LPWSTR grpi3_comment;
    PSID grpi3_group_sid;
    DWORD grpi3_attributes;
  } GROUP_INFO_3,*PGROUP_INFO_3;

  typedef struct _GROUP_INFO_1002 {
    LPWSTR grpi1002_comment;
  } GROUP_INFO_1002,*PGROUP_INFO_1002,*LPGROUP_INFO_1002;

  typedef struct _GROUP_INFO_1005 {
    DWORD grpi1005_attributes;
  } GROUP_INFO_1005,*PGROUP_INFO_1005,*LPGROUP_INFO_1005;

  typedef struct _GROUP_USERS_INFO_0 {
    LPWSTR grui0_name;
  } GROUP_USERS_INFO_0,*PGROUP_USERS_INFO_0,*LPGROUP_USERS_INFO_0;

  typedef struct _GROUP_USERS_INFO_1 {
    LPWSTR grui1_name;
    DWORD grui1_attributes;
  } GROUP_USERS_INFO_1,*PGROUP_USERS_INFO_1,*LPGROUP_USERS_INFO_1;

#define GROUPIDMASK 0x8000

#define GROUP_SPECIALGRP_USERS L"USERS"
#define GROUP_SPECIALGRP_ADMINS L"ADMINS"
#define GROUP_SPECIALGRP_GUESTS L"GUESTS"
#define GROUP_SPECIALGRP_LOCAL L"LOCAL"

#define GROUP_ALL_PARMNUM 0
#define GROUP_NAME_PARMNUM 1
#define GROUP_COMMENT_PARMNUM 2
#define GROUP_ATTRIBUTES_PARMNUM 3

#define GROUP_ALL_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM)
#define GROUP_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM)
#define GROUP_COMMENT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM)
#define GROUP_ATTRIBUTES_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM)
#define GROUP_POSIX_ID_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + GROUP_POSIX_ID_PARMNUM)
#endif

#ifndef _LMLOCALGROUP_
#define _LMLOCALGROUP_
  NET_API_STATUS WINAPI NetLocalGroupAdd(LPCWSTR servername,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetLocalGroupAddMember(LPCWSTR servername,LPCWSTR groupname,PSID membersid);
  NET_API_STATUS WINAPI NetLocalGroupEnum(LPCWSTR servername,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,PDWORD_PTR resumehandle);
  NET_API_STATUS WINAPI NetLocalGroupGetInfo(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetLocalGroupSetInfo(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetLocalGroupDel(LPCWSTR servername,LPCWSTR groupname);
  NET_API_STATUS WINAPI NetLocalGroupDelMember(LPCWSTR servername,LPCWSTR groupname,PSID membersid);
  NET_API_STATUS WINAPI NetLocalGroupGetMembers(LPCWSTR servername,LPCWSTR localgroupname,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,PDWORD_PTR resumehandle);
  NET_API_STATUS WINAPI NetLocalGroupSetMembers(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,DWORD totalentries);
  NET_API_STATUS WINAPI NetLocalGroupAddMembers(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,DWORD totalentries);
  NET_API_STATUS WINAPI NetLocalGroupDelMembers(LPCWSTR servername,LPCWSTR groupname,DWORD level,LPBYTE buf,DWORD totalentries);

  typedef struct _LOCALGROUP_INFO_0 {
    LPWSTR lgrpi0_name;
  } LOCALGROUP_INFO_0,*PLOCALGROUP_INFO_0,*LPLOCALGROUP_INFO_0;

  typedef struct _LOCALGROUP_INFO_1 {
    LPWSTR lgrpi1_name;
    LPWSTR lgrpi1_comment;
  } LOCALGROUP_INFO_1,*PLOCALGROUP_INFO_1,*LPLOCALGROUP_INFO_1;

  typedef struct _LOCALGROUP_INFO_1002 {
    LPWSTR lgrpi1002_comment;
  } LOCALGROUP_INFO_1002,*PLOCALGROUP_INFO_1002,*LPLOCALGROUP_INFO_1002;

  typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
    PSID lgrmi0_sid;
  } LOCALGROUP_MEMBERS_INFO_0,*PLOCALGROUP_MEMBERS_INFO_0,*LPLOCALGROUP_MEMBERS_INFO_0;

  typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
    PSID lgrmi1_sid;
    SID_NAME_USE lgrmi1_sidusage;
    LPWSTR lgrmi1_name;
  } LOCALGROUP_MEMBERS_INFO_1,*PLOCALGROUP_MEMBERS_INFO_1,*LPLOCALGROUP_MEMBERS_INFO_1;

  typedef struct _LOCALGROUP_MEMBERS_INFO_2 {
    PSID lgrmi2_sid;
    SID_NAME_USE lgrmi2_sidusage;
    LPWSTR lgrmi2_domainandname;
  } LOCALGROUP_MEMBERS_INFO_2,*PLOCALGROUP_MEMBERS_INFO_2,*LPLOCALGROUP_MEMBERS_INFO_2;

  typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
    LPWSTR lgrmi3_domainandname;
  } LOCALGROUP_MEMBERS_INFO_3,*PLOCALGROUP_MEMBERS_INFO_3,*LPLOCALGROUP_MEMBERS_INFO_3;

  typedef struct _LOCALGROUP_USERS_INFO_0 {
    LPWSTR lgrui0_name;
  } LOCALGROUP_USERS_INFO_0,*PLOCALGROUP_USERS_INFO_0,*LPLOCALGROUP_USERS_INFO_0;

#define LOCALGROUP_NAME_PARMNUM 1
#define LOCALGROUP_COMMENT_PARMNUM 2

  NET_API_STATUS WINAPI NetQueryDisplayInformation(LPCWSTR ServerName,DWORD Level,DWORD Index,DWORD EntriesRequested,DWORD PreferredMaximumLength,LPDWORD ReturnedEntryCount,PVOID *SortedBuffer);
  NET_API_STATUS WINAPI NetGetDisplayInformationIndex(LPCWSTR ServerName,DWORD Level,LPCWSTR Prefix,LPDWORD Index);

  typedef struct _NET_DISPLAY_USER {
    LPWSTR usri1_name;
    LPWSTR usri1_comment;
    DWORD usri1_flags;
    LPWSTR usri1_full_name;
    DWORD usri1_user_id;
    DWORD usri1_next_index;
  } NET_DISPLAY_USER,*PNET_DISPLAY_USER;

  typedef struct _NET_DISPLAY_MACHINE {
    LPWSTR usri2_name;
    LPWSTR usri2_comment;
    DWORD usri2_flags;
    DWORD usri2_user_id;
    DWORD usri2_next_index;
  } NET_DISPLAY_MACHINE,*PNET_DISPLAY_MACHINE;

  typedef struct _NET_DISPLAY_GROUP {
    LPWSTR grpi3_name;
    LPWSTR grpi3_comment;
    DWORD grpi3_group_id;
    DWORD grpi3_attributes;
    DWORD grpi3_next_index;
  } NET_DISPLAY_GROUP,*PNET_DISPLAY_GROUP;
#endif

#ifndef _LMACCESS_
#define _LMACCESS_

#define NetAccessAdd RxNetAccessAdd
#define NetAccessEnum RxNetAccessEnum
#define NetAccessGetInfo RxNetAccessGetInfo
#define NetAccessSetInfo RxNetAccessSetInfo
#define NetAccessDel RxNetAccessDel
#define NetAccessGetUserPerms RxNetAccessGetUserPerms

  NET_API_STATUS WINAPI NetAccessAdd(LPCWSTR servername,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetAccessEnum(LPCWSTR servername,LPCWSTR BasePath,DWORD Recursive,DWORD level,LPBYTE *bufptr,DWORD prefmaxlen,LPDWORD entriesread,LPDWORD totalentries,LPDWORD resume_handle);
  NET_API_STATUS WINAPI NetAccessGetInfo(LPCWSTR servername,LPCWSTR resource,DWORD level,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetAccessSetInfo(LPCWSTR servername,LPCWSTR resource,DWORD level,LPBYTE buf,LPDWORD parm_err);
  NET_API_STATUS WINAPI NetAccessDel(LPCWSTR servername,LPCWSTR resource);
  NET_API_STATUS WINAPI NetAccessGetUserPerms(LPCWSTR servername,LPCWSTR UGname,LPCWSTR resource,LPDWORD Perms);

  typedef struct _ACCESS_INFO_0 {
    LPWSTR acc0_resource_name;
  } ACCESS_INFO_0,*PACCESS_INFO_0,*LPACCESS_INFO_0;

  typedef struct _ACCESS_INFO_1 {
    LPWSTR acc1_resource_name;
    DWORD acc1_attr;
    DWORD acc1_count;
  } ACCESS_INFO_1,*PACCESS_INFO_1,*LPACCESS_INFO_1;

  typedef struct _ACCESS_INFO_1002 {
    DWORD acc1002_attr;
  } ACCESS_INFO_1002,*PACCESS_INFO_1002,*LPACCESS_INFO_1002;

  typedef struct _ACCESS_LIST {
    LPWSTR acl_ugname;
    DWORD acl_access;
  } ACCESS_LIST,*PACCESS_LIST,*LPACCESS_LIST;

#define MAXPERMENTRIES 64

#define ACCESS_NONE 0
#define ACCESS_ALL (ACCESS_READ | ACCESS_WRITE | ACCESS_CREATE | ACCESS_EXEC | ACCESS_DELETE | ACCESS_ATRIB | ACCESS_PERM)

#define ACCESS_READ 0x01
#define ACCESS_WRITE 0x02
#define ACCESS_CREATE 0x04
#define ACCESS_EXEC 0x08
#define ACCESS_DELETE 0x10
#define ACCESS_ATRIB 0x20
#define ACCESS_PERM 0x40
#define ACCESS_GROUP 0x8000
#define ACCESS_AUDIT 0x1
#define ACCESS_SUCCESS_OPEN 0x10
#define ACCESS_SUCCESS_WRITE 0x20
#define ACCESS_SUCCESS_DELETE 0x40
#define ACCESS_SUCCESS_ACL 0x80
#define ACCESS_SUCCESS_MASK 0xF0

#define ACCESS_FAIL_OPEN 0x100
#define ACCESS_FAIL_WRITE 0x200
#define ACCESS_FAIL_DELETE 0x400
#define ACCESS_FAIL_ACL 0x800
#define ACCESS_FAIL_MASK 0xF00

#define ACCESS_FAIL_SHIFT 4

#define ACCESS_RESOURCE_NAME_PARMNUM 1
#define ACCESS_ATTR_PARMNUM 2
#define ACCESS_COUNT_PARMNUM 3
#define ACCESS_ACCESS_LIST_PARMNUM 4

#define ACCESS_RESOURCE_NAME_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM)
#define ACCESS_ATTR_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM)
#define ACCESS_COUNT_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM)
#define ACCESS_ACCESS_LIST_INFOLEVEL (PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM)

#define ACCESS_LETTERS "RWCXDAP         "

  typedef enum _NET_VALIDATE_PASSWORD_TYPE {
    NetValidateAuthentication = 1,NetValidatePasswordChange,NetValidatePasswordReset
  } NET_VALIDATE_PASSWORD_TYPE,*PNET_VALIDATE_PASSWORD_TYPE;

  typedef struct _NET_VALIDATE_PASSWORD_HASH{
    ULONG Length;
    LPBYTE Hash;
  } NET_VALIDATE_PASSWORD_HASH,*PNET_VALIDATE_PASSWORD_HASH;

#define NET_VALIDATE_PASSWORD_LAST_SET 0x00000001
#define NET_VALIDATE_BAD_PASSWORD_TIME 0x00000002
#define NET_VALIDATE_LOCKOUT_TIME 0x00000004
#define NET_VALIDATE_BAD_PASSWORD_COUNT 0x00000008
#define NET_VALIDATE_PASSWORD_HISTORY_LENGTH 0x00000010
#define NET_VALIDATE_PASSWORD_HISTORY 0x00000020

#if !defined(_WINBASE_) && !defined(_FILETIME_)
#define _FILETIME_
  typedef struct _FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
  } FILETIME,*LPFILETIME,*PFILETIME;
#endif

  typedef struct _NET_VALIDATE_PERSISTED_FIELDS {
    ULONG PresentFields;
    FILETIME PasswordLastSet;
    FILETIME BadPasswordTime;
    FILETIME LockoutTime;
    ULONG BadPasswordCount;
    ULONG PasswordHistoryLength;
    PNET_VALIDATE_PASSWORD_HASH PasswordHistory;
  } NET_VALIDATE_PERSISTED_FIELDS,*PNET_VALIDATE_PERSISTED_FIELDS;

  typedef struct _NET_VALIDATE_OUTPUT_ARG {
    NET_VALIDATE_PERSISTED_FIELDS ChangedPersistedFields;
    NET_API_STATUS ValidationStatus;
  } NET_VALIDATE_OUTPUT_ARG,*PNET_VALIDATE_OUTPUT_ARG;

  typedef struct _NET_VALIDATE_AUTHENTICATION_INPUT_ARG {
    NET_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
    BOOLEAN PasswordMatched;
  } NET_VALIDATE_AUTHENTICATION_INPUT_ARG,*PNET_VALIDATE_AUTHENTICATION_INPUT_ARG;

  typedef struct _NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG {
    NET_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
    LPWSTR ClearPassword;
    LPWSTR UserAccountName;
    NET_VALIDATE_PASSWORD_HASH HashedPassword;
    BOOLEAN PasswordMatch;
  } NET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG,*PNET_VALIDATE_PASSWORD_CHANGE_INPUT_ARG;

  typedef struct _NET_VALIDATE_PASSWORD_RESET_INPUT_ARG {
    NET_VALIDATE_PERSISTED_FIELDS InputPersistedFields;
    LPWSTR ClearPassword;
    LPWSTR UserAccountName;
    NET_VALIDATE_PASSWORD_HASH HashedPassword;
    BOOLEAN PasswordMustChangeAtNextLogon;
    BOOLEAN ClearLockout;
  } NET_VALIDATE_PASSWORD_RESET_INPUT_ARG,*PNET_VALIDATE_PASSWORD_RESET_INPUT_ARG;

  NET_API_STATUS WINAPI NetValidatePasswordPolicy(LPCWSTR ServerName,LPVOID Qualifier,NET_VALIDATE_PASSWORD_TYPE ValidationType,LPVOID InputArg,LPVOID *OutputArg);
  NET_API_STATUS WINAPI NetValidatePasswordPolicyFree(LPVOID *OutputArg);
#endif

#ifndef _LMDOMAIN_
#define _LMDOMAIN_
  NET_API_STATUS WINAPI NetGetDCName(LPCWSTR servername,LPCWSTR domainname,LPBYTE *bufptr);
  NET_API_STATUS WINAPI NetGetAnyDCName(LPCWSTR servername,LPCWSTR domainname,LPBYTE *bufptr);
  NET_API_STATUS WINAPI I_NetLogonControl(LPCWSTR ServerName,DWORD FunctionCode,DWORD QueryLevel,LPBYTE *Buffer);
  NET_API_STATUS WINAPI I_NetLogonControl2(LPCWSTR ServerName,DWORD FunctionCode,DWORD QueryLevel,LPBYTE Data,LPBYTE *Buffer);

#if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
#define _NTSTATUS_PSDK
  typedef LONG NTSTATUS,*PNTSTATUS;
#endif

  NTSTATUS WINAPI NetEnumerateTrustedDomains (LPWSTR ServerName,LPWSTR *DomainNames);

#define NETLOGON_CONTROL_QUERY 1
#define NETLOGON_CONTROL_REPLICATE 2
#define NETLOGON_CONTROL_SYNCHRONIZE 3
#define NETLOGON_CONTROL_PDC_REPLICATE 4
#define NETLOGON_CONTROL_REDISCOVER 5
#define NETLOGON_CONTROL_TC_QUERY 6
#define NETLOGON_CONTROL_TRANSPORT_NOTIFY 7
#define NETLOGON_CONTROL_FIND_USER 8
#define NETLOGON_CONTROL_CHANGE_PASSWORD 9
#define NETLOGON_CONTROL_TC_VERIFY 10
#define NETLOGON_CONTROL_FORCE_DNS_REG 11
#define NETLOGON_CONTROL_QUERY_DNS_REG 12

#define NETLOGON_CONTROL_UNLOAD_NETLOGON_DLL 0xFFFB
#define NETLOGON_CONTROL_BACKUP_CHANGE_LOG 0xFFFC
#define NETLOGON_CONTROL_TRUNCATE_LOG 0xFFFD
#define NETLOGON_CONTROL_SET_DBFLAG 0xFFFE
#define NETLOGON_CONTROL_BREAKPOINT 0xFFFF

  typedef struct _NETLOGON_INFO_1 {
    DWORD netlog1_flags;
    NET_API_STATUS netlog1_pdc_connection_status;
  } NETLOGON_INFO_1,*PNETLOGON_INFO_1;

  typedef struct _NETLOGON_INFO_2 {
    DWORD netlog2_flags;

    NET_API_STATUS netlog2_pdc_connection_status;
    LPWSTR netlog2_trusted_dc_name;
    NET_API_STATUS netlog2_tc_connection_status;
  } NETLOGON_INFO_2,*PNETLOGON_INFO_2;

  typedef struct _NETLOGON_INFO_3 {
    DWORD netlog3_flags;
    DWORD netlog3_logon_attempts;
    DWORD netlog3_reserved1;
    DWORD netlog3_reserved2;
    DWORD netlog3_reserved3;
    DWORD netlog3_reserved4;
    DWORD netlog3_reserved5;
  } NETLOGON_INFO_3,*PNETLOGON_INFO_3;

  typedef struct _NETLOGON_INFO_4 {
    LPWSTR netlog4_trusted_dc_name;
    LPWSTR netlog4_trusted_domain_name;
  } NETLOGON_INFO_4,*PNETLOGON_INFO_4;

#define NETLOGON_REPLICATION_NEEDED 0x01
#define NETLOGON_REPLICATION_IN_PROGRESS 0x02
#define NETLOGON_FULL_SYNC_REPLICATION 0x04
#define NETLOGON_REDO_NEEDED 0x08
#define NETLOGON_HAS_IP 0x10
#define NETLOGON_HAS_TIMESERV 0x20
#define NETLOGON_DNS_UPDATE_FAILURE 0x40
#define NETLOGON_VERIFY_STATUS_RETURNED 0x80

#ifdef __cplusplus
}
#endif
#endif
