1 // Copyright © 2015, skdltmxn
2 // Licensed under the MIT License <LICENSE.md>
3 //! Types and macros for Subauthentication Packages.
4 STRUCT
!{struct UNICODE_STRING
{
6 MaximumLength
: ::USHORT
,
9 pub type PUNICODE_STRING
= *mut UNICODE_STRING
;
10 STRUCT
!{struct STRING
{
12 MaximumLength
: ::USHORT
,
15 pub type PSTRING
= *mut STRING
;
16 STRUCT
!{struct OLD_LARGE_INTEGER
{
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
,
59 pub type PLOGON_HOURS
= *mut LOGON_HOURS
;
60 STRUCT
!{struct SR_SECURITY_DESCRIPTOR
{
62 SecurityDescriptor
: ::PUCHAR
,
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
,
87 PrimaryGroupId
: ::ULONG
,
88 UserAccountControl
: ::ULONG
,
90 LogonHours
: LOGON_HOURS
,
91 BadPasswordCount
: ::USHORT
,
93 CountryCode
: ::USHORT
,
95 LmPasswordPresent
: ::BOOLEAN
,
96 NtPasswordPresent
: ::BOOLEAN
,
97 PasswordExpired
: ::BOOLEAN
,
98 PrivateDataSensitive
: ::BOOLEAN
,
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
],
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
],
111 pub type PCYPHER_BLOCK
= *mut CYPHER_BLOCK
;
112 STRUCT
!{struct LM_OWF_PASSWORD
{
113 data
: [CYPHER_BLOCK
; 2],
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],
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
,
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
,
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
,
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
,
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
,
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
,
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
,
180 WhichFields
: ::ULONG
,
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;