1use shared::minwindef::{PUCHAR, ULONG, USHORT};
8use um::winnt::{BOOLEAN, CHAR, LARGE_INTEGER, LONG, PCHAR, PVOID, PWSTR};
9STRUCT!{struct UNICODE_STRING {
10 Length: USHORT,
11 MaximumLength: USHORT,
12 Buffer: PWSTR,
13}}
14pub type PUNICODE_STRING = *mut UNICODE_STRING;
15STRUCT!{struct STRING {
16 Length: USHORT,
17 MaximumLength: USHORT,
18 Buffer: PCHAR,
19}}
20pub type PSTRING = *mut STRING;
21STRUCT!{struct OLD_LARGE_INTEGER {
22 LowPart: ULONG,
23 HighPart: LONG,
24}}
25pub type POLD_LARGE_INTEGER = *mut OLD_LARGE_INTEGER;
26pub type SAM_HANDLE = PVOID;
27pub type PSAM_HANDLE = *mut PVOID;
28pub const USER_ACCOUNT_DISABLED: ULONG = 0x00000001;
29pub const USER_HOME_DIRECTORY_REQUIRED: ULONG = 0x00000002;
30pub const USER_PASSWORD_NOT_REQUIRED: ULONG = 0x00000004;
31pub const USER_TEMP_DUPLICATE_ACCOUNT: ULONG = 0x00000008;
32pub const USER_NORMAL_ACCOUNT: ULONG = 0x00000010;
33pub const USER_MNS_LOGON_ACCOUNT: ULONG = 0x00000020;
34pub const USER_INTERDOMAIN_TRUST_ACCOUNT: ULONG = 0x00000040;
35pub const USER_WORKSTATION_TRUST_ACCOUNT: ULONG = 0x00000080;
36pub const USER_SERVER_TRUST_ACCOUNT: ULONG = 0x00000100;
37pub const USER_DONT_EXPIRE_PASSWORD: ULONG = 0x00000200;
38pub const USER_ACCOUNT_AUTO_LOCKED: ULONG = 0x00000400;
39pub const USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED: ULONG = 0x00000800;
40pub const USER_SMARTCARD_REQUIRED: ULONG = 0x00001000;
41pub const USER_TRUSTED_FOR_DELEGATION: ULONG = 0x00002000;
42pub const USER_NOT_DELEGATED: ULONG = 0x00004000;
43pub const USER_USE_DES_KEY_ONLY: ULONG = 0x00008000;
44pub const USER_DONT_REQUIRE_PREAUTH: ULONG = 0x00010000;
45pub const USER_PASSWORD_EXPIRED: ULONG = 0x00020000;
46pub const USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: ULONG = 0x00040000;
47pub const USER_NO_AUTH_DATA_REQUIRED: ULONG = 0x00080000;
48pub const USER_PARTIAL_SECRETS_ACCOUNT: ULONG = 0x00100000;
49pub const USER_USE_AES_KEYS: ULONG = 0x00200000;
50pub const NEXT_FREE_ACCOUNT_CONTROL_BIT: ULONG = USER_USE_AES_KEYS << 1;
51pub const USER_MACHINE_ACCOUNT_MASK: ULONG = USER_INTERDOMAIN_TRUST_ACCOUNT
52 | USER_WORKSTATION_TRUST_ACCOUNT | USER_SERVER_TRUST_ACCOUNT;
53pub const USER_ACCOUNT_TYPE_MASK: ULONG = USER_TEMP_DUPLICATE_ACCOUNT | USER_NORMAL_ACCOUNT
54 | USER_MACHINE_ACCOUNT_MASK;
55pub const USER_COMPUTED_ACCOUNT_CONTROL_BITS: ULONG = USER_ACCOUNT_AUTO_LOCKED
56 | USER_PASSWORD_EXPIRED;
57pub const SAM_DAYS_PER_WEEK: USHORT = 7;
58pub const SAM_HOURS_PER_WEEK: USHORT = 24 * SAM_DAYS_PER_WEEK;
59pub const SAM_MINUTES_PER_WEEK: USHORT = 60 * SAM_HOURS_PER_WEEK;
60STRUCT!{struct LOGON_HOURS {
61 UnitsPerWeek: USHORT,
62 LogonHours: PUCHAR,
63}}
64pub type PLOGON_HOURS = *mut LOGON_HOURS;
65STRUCT!{struct SR_SECURITY_DESCRIPTOR {
66 Length: ULONG,
67 SecurityDescriptor: PUCHAR,
68}}
69pub type PSR_SECURITY_DESCRIPTOR = *mut SR_SECURITY_DESCRIPTOR;
70STRUCT!{struct USER_ALL_INFORMATION {
71 LastLogon: LARGE_INTEGER,
72 LastLogoff: LARGE_INTEGER,
73 PasswordLastSet: LARGE_INTEGER,
74 AccountExpires: LARGE_INTEGER,
75 PasswordCanChange: LARGE_INTEGER,
76 PasswordMustChange: LARGE_INTEGER,
77 UserName: UNICODE_STRING,
78 FullName: UNICODE_STRING,
79 HomeDirectory: UNICODE_STRING,
80 HomeDirectoryDrive: UNICODE_STRING,
81 ScriptPath: UNICODE_STRING,
82 ProfilePath: UNICODE_STRING,
83 AdminComment: UNICODE_STRING,
84 WorkStations: UNICODE_STRING,
85 UserComment: UNICODE_STRING,
86 Parameters: UNICODE_STRING,
87 LmPassword: UNICODE_STRING,
88 NtPassword: UNICODE_STRING,
89 PrivateData: UNICODE_STRING,
90 SecurityDescriptor: SR_SECURITY_DESCRIPTOR,
91 UserId: ULONG,
92 PrimaryGroupId: ULONG,
93 UserAccountControl: ULONG,
94 WhichFields: ULONG,
95 LogonHours: LOGON_HOURS,
96 BadPasswordCount: USHORT,
97 LogonCount: USHORT,
98 CountryCode: USHORT,
99 CodePage: USHORT,
100 LmPasswordPresent: BOOLEAN,
101 NtPasswordPresent: BOOLEAN,
102 PasswordExpired: BOOLEAN,
103 PrivateDataSensitive: BOOLEAN,
104}}
105pub type PUSER_ALL_INFORMATION = *mut USER_ALL_INFORMATION;
106pub const USER_ALL_PARAMETERS: ULONG = 0x00200000;
107pub const CLEAR_BLOCK_LENGTH: usize = 8;
108STRUCT!{struct CLEAR_BLOCK {
109 data: [CHAR; CLEAR_BLOCK_LENGTH],
110}}
111pub type PCLEAR_BLOCK = *mut CLEAR_BLOCK;
112pub const CYPHER_BLOCK_LENGTH: usize = 8;
113STRUCT!{struct CYPHER_BLOCK {
114 data: [CHAR; CYPHER_BLOCK_LENGTH],
115}}
116pub type PCYPHER_BLOCK = *mut CYPHER_BLOCK;
117STRUCT!{struct LM_OWF_PASSWORD {
118 data: [CYPHER_BLOCK; 2],
119}}
120pub type PLM_OWF_PASSWORD = *mut LM_OWF_PASSWORD;
121pub type LM_CHALLENGE = CLEAR_BLOCK;
122pub type PLM_CHALLENGE = *mut LM_CHALLENGE;
123pub type NT_OWF_PASSWORD = LM_OWF_PASSWORD;
124pub type PNT_OWF_PASSWORD = *mut NT_OWF_PASSWORD;
125pub type NT_CHALLENGE = LM_CHALLENGE;
126pub type PNT_CHALLENGE = *mut NT_CHALLENGE;
127pub const USER_SESSION_KEY_LENGTH: usize = CYPHER_BLOCK_LENGTH * 2;
128STRUCT!{struct USER_SESSION_KEY {
129 data: [CYPHER_BLOCK; 2],
130}}
131pub type PUSER_SESSION_KEY = *mut USER_SESSION_KEY;
132ENUM!{enum NETLOGON_LOGON_INFO_CLASS {
133 NetlogonInteractiveInformation = 1,
134 NetlogonNetworkInformation,
135 NetlogonServiceInformation,
136 NetlogonGenericInformation,
137 NetlogonInteractiveTransitiveInformation,
138 NetlogonNetworkTransitiveInformation,
139 NetlogonServiceTransitiveInformation,
140}}
141STRUCT!{struct NETLOGON_LOGON_IDENTITY_INFO {
142 LogonDomainName: UNICODE_STRING,
143 ParameterControl: ULONG,
144 LogonId: OLD_LARGE_INTEGER,
145 UserName: UNICODE_STRING,
146 Workstation: UNICODE_STRING,
147}}
148pub type PNETLOGON_LOGON_IDENTITY_INFO = *mut NETLOGON_LOGON_IDENTITY_INFO;
149STRUCT!{struct NETLOGON_INTERACTIVE_INFO {
150 Identity: NETLOGON_LOGON_IDENTITY_INFO,
151 LmOwfPassword: LM_OWF_PASSWORD,
152 NtOwfPassword: NT_OWF_PASSWORD,
153}}
154pub type PNETLOGON_INTERACTIVE_INFO = *mut NETLOGON_INTERACTIVE_INFO;
155STRUCT!{struct NETLOGON_SERVICE_INFO {
156 Identity: NETLOGON_LOGON_IDENTITY_INFO,
157 LmOwfPassword: LM_OWF_PASSWORD,
158 NtOwfPassword: NT_OWF_PASSWORD,
159}}
160pub type PNETLOGON_SERVICE_INFO = *mut NETLOGON_SERVICE_INFO;
161STRUCT!{struct NETLOGON_NETWORK_INFO {
162 Identity: NETLOGON_LOGON_IDENTITY_INFO,
163 LmChallenge: LM_CHALLENGE,
164 NtChallengeResponse: STRING,
165 LmChallengeResponse: STRING,
166}}
167pub type PNETLOGON_NETWORK_INFO = *mut NETLOGON_NETWORK_INFO;
168STRUCT!{struct NETLOGON_GENERIC_INFO {
169 Identity: NETLOGON_LOGON_IDENTITY_INFO,
170 PackageName: UNICODE_STRING,
171 DataLength: ULONG,
172 LogonData: PUCHAR,
173}}
174pub type PNETLOGON_GENERIC_INFO = *mut NETLOGON_GENERIC_INFO;
175pub const MSV1_0_PASSTHRU: ULONG = 0x01;
176pub const MSV1_0_GUEST_LOGON: ULONG = 0x02;
177STRUCT!{struct MSV1_0_VALIDATION_INFO {
178 LogoffTime: LARGE_INTEGER,
179 KickoffTime: LARGE_INTEGER,
180 LogonServer: UNICODE_STRING,
181 LogonDomainName: UNICODE_STRING,
182 SessionKey: USER_SESSION_KEY,
183 Authoritative: BOOLEAN,
184 UserFlags: ULONG,
185 WhichFields: ULONG,
186 UserId: ULONG,
187}}
188pub type PMSV1_0_VALIDATION_INFO = *mut MSV1_0_VALIDATION_INFO;
189pub const MSV1_0_VALIDATION_LOGOFF_TIME: ULONG = 0x00000001;
190pub const MSV1_0_VALIDATION_KICKOFF_TIME: ULONG = 0x00000002;
191pub const MSV1_0_VALIDATION_LOGON_SERVER: ULONG = 0x00000004;
192pub const MSV1_0_VALIDATION_LOGON_DOMAIN: ULONG = 0x00000008;
193pub const MSV1_0_VALIDATION_SESSION_KEY: ULONG = 0x00000010;
194pub const MSV1_0_VALIDATION_USER_FLAGS: ULONG = 0x00000020;
195pub const MSV1_0_VALIDATION_USER_ID: ULONG = 0x00000040;
196pub const MSV1_0_SUBAUTH_ACCOUNT_DISABLED: ULONG = 0x00000001;
197pub const MSV1_0_SUBAUTH_PASSWORD: ULONG = 0x00000002;
198pub const MSV1_0_SUBAUTH_WORKSTATIONS: ULONG = 0x00000004;
199pub const MSV1_0_SUBAUTH_LOGON_HOURS: ULONG = 0x00000008;
200pub const MSV1_0_SUBAUTH_ACCOUNT_EXPIRY: ULONG = 0x00000010;
201pub const MSV1_0_SUBAUTH_PASSWORD_EXPIRY: ULONG = 0x00000020;
202pub const MSV1_0_SUBAUTH_ACCOUNT_TYPE: ULONG = 0x00000040;
203pub const MSV1_0_SUBAUTH_LOCKOUT: ULONG = 0x00000080;
204