1 /** 2 * @file subauth.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 #ifndef _SUBAUTH_H 25 #define _SUBAUTH_H 26 #pragma GCC system_header 27 #include <_mingw.h> 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #ifndef NT_SUCCESS 34 #define NT_SUCCESS(x) ((x)>=0) 35 #define STATUS_SUCCESS 0 36 #endif 37 38 #define CYPHER_BLOCK_LENGTH 8 39 #define USER_SESSION_KEY_LENGTH (CYPHER_BLOCK_LENGTH*2) 40 #define CLEAR_BLOCK_LENGTH 8 41 #define MSV1_0_PASSTHRU 1 42 #define MSV1_0_GUEST_LOGON 2 43 #define MSV1_0_VALIDATION_LOGOFF_TIME 1 44 #define MSV1_0_VALIDATION_KICKOFF_TIME 2 45 #define MSV1_0_VALIDATION_LOGON_SERVER 4 46 #define MSV1_0_VALIDATION_LOGON_DOMAIN 8 47 #define MSV1_0_VALIDATION_SESSION_KEY 16 48 #define MSV1_0_VALIDATION_USER_FLAGS 32 49 #define MSV1_0_VALIDATION_USER_ID 64 50 #define MSV1_0_SUBAUTH_ACCOUNT_DISABLED 1 51 #define MSV1_0_SUBAUTH_PASSWORD 2 52 #define MSV1_0_SUBAUTH_WORKSTATIONS 4 53 #define MSV1_0_SUBAUTH_LOGON_HOURS 8 54 #define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY 16 55 #define MSV1_0_SUBAUTH_PASSWORD_EXPIRY 32 56 #define MSV1_0_SUBAUTH_ACCOUNT_TYPE 64 57 #define MSV1_0_SUBAUTH_LOCKOUT 128 58 #define NEXT_FREE_ACCOUNT_CONTROL_BIT 131072 59 #define SAM_DAYS_PER_WEEK 7 60 #define SAM_HOURS_PER_WEEK 168 61 #define SAM_MINUTES_PER_WEEK 10080 62 #define STATUS_INVALID_INFO_CLASS 0xC0000003L 63 #define STATUS_NO_SUCH_USER 0xC0000064L 64 #define STATUS_WRONG_PASSWORD 0xC000006AL 65 #define STATUS_PASSWORD_RESTRICTION 0xC000006CL 66 #define STATUS_LOGON_FAILURE 0xC000006DL 67 #define STATUS_ACCOUNT_RESTRICTION 0xC000006EL 68 #define STATUS_INVALID_LOGON_HOURS 0xC000006FL 69 #define STATUS_INVALID_WORKSTATION 0xC0000070L 70 #define STATUS_PASSWORD_EXPIRED 0xC0000071L 71 #define STATUS_ACCOUNT_DISABLED 0xC0000072L 72 #define STATUS_INSUFFICIENT_RESOURCES 0xC000009AL 73 #define STATUS_ACCOUNT_EXPIRED 0xC0000193L 74 #define STATUS_PASSWORD_MUST_CHANGE 0xC0000224L 75 #define STATUS_ACCOUNT_LOCKED_OUT 0xC0000234L 76 #define USER_ACCOUNT_DISABLED 1 77 #define USER_HOME_DIRECTORY_REQUIRED 2 78 #define USER_PASSWORD_NOT_REQUIRED 4 79 #define USER_TEMP_DUPLICATE_ACCOUNT 8 80 #define USER_NORMAL_ACCOUNT 16 81 #define USER_MNS_LOGON_ACCOUNT 32 82 #define USER_INTERDOMAIN_TRUST_ACCOUNT 64 83 #define USER_WORKSTATION_TRUST_ACCOUNT 128 84 #define USER_SERVER_TRUST_ACCOUNT 256 85 #define USER_DONT_EXPIRE_PASSWORD 512 86 #define USER_ACCOUNT_AUTO_LOCKED 1024 87 #define USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED 2048 88 #define USER_SMARTCARD_REQUIRED 4096 89 #define USER_TRUSTED_FOR_DELEGATION 8192 90 #define USER_NOT_DELEGATED 16384 91 #define USER_USE_DES_KEY_ONLY 32768 92 #define USER_DONT_REQUIRE_PREAUTH 65536 93 #define USER_MACHINE_ACCOUNT_MASK 448 94 #define USER_ACCOUNT_TYPE_MASK 472 95 #define USER_ALL_PARAMETERS 2097152 96 97 #if !defined(_NTDEF_H) && !defined(_NTSECAPI_H) 98 typedef LONG NTSTATUS, *PNTSTATUS; 99 typedef struct _UNICODE_STRING { 100 USHORT Length; 101 USHORT MaximumLength; 102 PWSTR Buffer; 103 } UNICODE_STRING, *PUNICODE_STRING; 104 typedef struct _STRING { 105 USHORT Length; 106 USHORT MaximumLength; 107 PCHAR Buffer; 108 } STRING, *PSTRING; 109 #endif 110 typedef PVOID SAM_HANDLE, *PSAM_HANDLE; 111 typedef struct _OLD_LARGE_INTEGER { 112 ULONG LowPart; 113 LONG HighPart; 114 } OLD_LARGE_INTEGER, *POLD_LARGE_INTEGER; 115 typedef enum _NETLOGON_LOGON_INFO_CLASS { 116 NetlogonInteractiveInformation = 1,NetlogonNetworkInformation, 117 NetlogonServiceInformation,NetlogonGenericInformation, 118 NetlogonInteractiveTransitiveInformation,NetlogonNetworkTransitiveInformation, 119 NetlogonServiceTransitiveInformation 120 } NETLOGON_LOGON_INFO_CLASS; 121 typedef struct _CYPHER_BLOCK { 122 CHAR data[CYPHER_BLOCK_LENGTH]; 123 } CYPHER_BLOCK, *PCYPHER_BLOCK; 124 typedef struct _CLEAR_BLOCK { 125 CHAR data[CLEAR_BLOCK_LENGTH]; 126 } CLEAR_BLOCK, *PCLEAR_BLOCK; 127 typedef struct _LM_OWF_PASSWORD { 128 CYPHER_BLOCK data[2]; 129 } LM_OWF_PASSWORD, *PLM_OWF_PASSWORD; 130 typedef struct _USER_SESSION_KEY { 131 CYPHER_BLOCK data[2]; 132 } USER_SESSION_KEY, *PUSER_SESSION_KEY; 133 typedef CLEAR_BLOCK LM_CHALLENGE, *PLM_CHALLENGE; 134 typedef LM_OWF_PASSWORD NT_OWF_PASSWORD, *PNT_OWF_PASSWORD; 135 typedef LM_CHALLENGE NT_CHALLENGE, *PNT_CHALLENGE; 136 typedef struct _LOGON_HOURS { 137 USHORT UnitsPerWeek; 138 PUCHAR LogonHours; 139 } LOGON_HOURS, *PLOGON_HOURS; 140 typedef struct _SR_SECURITY_DESCRIPTOR { 141 ULONG Length; 142 PUCHAR SecurityDescriptor; 143 } SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR; 144 #pragma pack(push,4) 145 typedef struct _USER_ALL_INFORMATION { 146 LARGE_INTEGER LastLogon; 147 LARGE_INTEGER LastLogoff; 148 LARGE_INTEGER PasswordLastSet; 149 LARGE_INTEGER AccountExpires; 150 LARGE_INTEGER PasswordCanChange; 151 LARGE_INTEGER PasswordMustChange; 152 UNICODE_STRING UserName; 153 UNICODE_STRING FullName; 154 UNICODE_STRING HomeDirectory; 155 UNICODE_STRING HomeDirectoryDrive; 156 UNICODE_STRING ScriptPath; 157 UNICODE_STRING ProfilePath; 158 UNICODE_STRING AdminComment; 159 UNICODE_STRING WorkStations; 160 UNICODE_STRING UserComment; 161 UNICODE_STRING Parameters; 162 UNICODE_STRING LmPassword; 163 UNICODE_STRING NtPassword; 164 UNICODE_STRING PrivateData; 165 SR_SECURITY_DESCRIPTOR SecurityDescriptor; 166 ULONG UserId; 167 ULONG PrimaryGroupId; 168 ULONG UserAccountControl; 169 ULONG WhichFields; 170 LOGON_HOURS LogonHours; 171 USHORT BadPasswordCount; 172 USHORT LogonCount; 173 USHORT CountryCode; 174 USHORT CodePage; 175 BOOLEAN LmPasswordPresent; 176 BOOLEAN NtPasswordPresent; 177 BOOLEAN PasswordExpired; 178 BOOLEAN PrivateDataSensitive; 179 } USER_ALL_INFORMATION, *PUSER_ALL_INFORMATION; 180 #pragma pack(pop) 181 typedef struct _MSV1_0_VALIDATION_INFO { 182 LARGE_INTEGER LogoffTime; 183 LARGE_INTEGER KickoffTime; 184 UNICODE_STRING LogonServer; 185 UNICODE_STRING LogonDomainName; 186 USER_SESSION_KEY SessionKey; 187 BOOLEAN Authoritative; 188 ULONG UserFlags; 189 ULONG WhichFields; 190 ULONG UserId; 191 } MSV1_0_VALIDATION_INFO, *PMSV1_0_VALIDATION_INFO; 192 typedef struct _NETLOGON_LOGON_IDENTITY_INFO { 193 UNICODE_STRING LogonDomainName; 194 ULONG ParameterControl; 195 OLD_LARGE_INTEGER LogonId; 196 UNICODE_STRING UserName; 197 UNICODE_STRING Workstation; 198 } NETLOGON_LOGON_IDENTITY_INFO, *PNETLOGON_LOGON_IDENTITY_INFO; 199 typedef struct _NETLOGON_INTERACTIVE_INFO { 200 NETLOGON_LOGON_IDENTITY_INFO Identity; 201 LM_OWF_PASSWORD LmOwfPassword; 202 NT_OWF_PASSWORD NtOwfPassword; 203 } NETLOGON_INTERACTIVE_INFO, *PNETLOGON_INTERACTIVE_INFO; 204 typedef struct _NETLOGON_GENERIC_INFO { 205 NETLOGON_LOGON_IDENTITY_INFO Identity; 206 UNICODE_STRING PackageName; 207 ULONG DataLength; 208 PUCHAR LogonData; 209 } NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO; 210 typedef struct _NETLOGON_NETWORK_INFO { 211 NETLOGON_LOGON_IDENTITY_INFO Identity; 212 LM_CHALLENGE LmChallenge; 213 STRING NtChallengeResponse; 214 STRING LmChallengeResponse; 215 } NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO; 216 typedef struct _NETLOGON_SERVICE_INFO { 217 NETLOGON_LOGON_IDENTITY_INFO Identity; 218 LM_OWF_PASSWORD LmOwfPassword; 219 NT_OWF_PASSWORD NtOwfPassword; 220 } NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO; 221 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID, 222 ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, 223 PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); 224 NTSTATUS NTAPI Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID, 225 ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, 226 PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); 227 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*); 228 NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID, 229 ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE, 230 PMSV1_0_VALIDATION_INFO,PULONG); 231 #ifdef __cplusplus 232 } 233 #endif 234 235 #endif /* _SUBAUTH_H */ 236