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