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