1 /***********************************************************************\ 2 * subauth.d * 3 * * 4 * Windows API header module * 5 * * 6 * Translated from MinGW Windows headers * 7 * * 8 * Placed into public domain * 9 \***********************************************************************/ 10 module win32.subauth; 11 version(Windows): 12 13 private import win32.ntdef, win32.windef; 14 15 /+ 16 alias LONG NTSTATUS; 17 alias NTSTATUS* PNTSTATUS; 18 +/ 19 20 enum : ULONG { 21 MSV1_0_PASSTHRU = 1, 22 MSV1_0_GUEST_LOGON = 2 23 } 24 25 // USER_ALL_INFORMATION.WhichFields (Undocumented) 26 const ULONG 27 MSV1_0_VALIDATION_LOGOFF_TIME = 1, 28 MSV1_0_VALIDATION_KICKOFF_TIME = 2, 29 MSV1_0_VALIDATION_LOGON_SERVER = 4, 30 MSV1_0_VALIDATION_LOGON_DOMAIN = 8, 31 MSV1_0_VALIDATION_SESSION_KEY = 16, 32 MSV1_0_VALIDATION_USER_FLAGS = 32, 33 MSV1_0_VALIDATION_USER_ID = 64; 34 35 // ?ActionsPerformed? (Undocumented) 36 const MSV1_0_SUBAUTH_ACCOUNT_DISABLED = 1; 37 const MSV1_0_SUBAUTH_PASSWORD = 2; 38 const MSV1_0_SUBAUTH_WORKSTATIONS = 4; 39 const MSV1_0_SUBAUTH_LOGON_HOURS = 8; 40 const MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = 16; 41 const MSV1_0_SUBAUTH_PASSWORD_EXPIRY = 32; 42 const MSV1_0_SUBAUTH_ACCOUNT_TYPE = 64; 43 const MSV1_0_SUBAUTH_LOCKOUT = 128; 44 45 const NEXT_FREE_ACCOUNT_CONTROL_BIT = 131072; 46 47 const SAM_DAYS_PER_WEEK = 7; 48 const SAM_HOURS_PER_WEEK = 168; 49 const SAM_MINUTES_PER_WEEK = 10080; 50 51 enum : NTSTATUS { 52 STATUS_SUCCESS = 0, 53 STATUS_INVALID_INFO_CLASS = 0xC0000003, 54 STATUS_NO_SUCH_USER = 0xC0000064, 55 STATUS_WRONG_PASSWORD = 0xC000006A, 56 STATUS_PASSWORD_RESTRICTION = 0xC000006C, 57 STATUS_LOGON_FAILURE = 0xC000006D, 58 STATUS_ACCOUNT_RESTRICTION = 0xC000006E, 59 STATUS_INVALID_LOGON_HOURS = 0xC000006F, 60 STATUS_INVALID_WORKSTATION = 0xC0000070, 61 STATUS_PASSWORD_EXPIRED = 0xC0000071, 62 STATUS_ACCOUNT_DISABLED = 0xC0000072, 63 STATUS_INSUFFICIENT_RESOURCES = 0xC000009A, 64 STATUS_ACCOUNT_EXPIRED = 0xC0000193, 65 STATUS_PASSWORD_MUST_CHANGE = 0xC0000224, 66 STATUS_ACCOUNT_LOCKED_OUT = 0xC0000234 67 } 68 69 // Note: undocumented in MSDN 70 // USER_ALL_INFORMATION.UserAccountControl 71 const ULONG 72 USER_ACCOUNT_DISABLED = 1, 73 USER_HOME_DIRECTORY_REQUIRED = 2, 74 USER_PASSWORD_NOT_REQUIRED = 4, 75 USER_TEMP_DUPLICATE_ACCOUNT = 8, 76 USER_NORMAL_ACCOUNT = 16, 77 USER_MNS_LOGON_ACCOUNT = 32, 78 USER_INTERDOMAIN_TRUST_ACCOUNT = 64, 79 USER_WORKSTATION_TRUST_ACCOUNT = 128, 80 USER_SERVER_TRUST_ACCOUNT = 256, 81 USER_DONT_EXPIRE_PASSWORD = 512, 82 USER_ACCOUNT_AUTO_LOCKED = 1024, 83 USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 2048, 84 USER_SMARTCARD_REQUIRED = 4096, 85 USER_TRUSTED_FOR_DELEGATION = 8192, 86 USER_NOT_DELEGATED = 16384, 87 USER_USE_DES_KEY_ONLY = 32768, 88 USER_DONT_REQUIRE_PREAUTH = 65536, 89 90 USER_MACHINE_ACCOUNT_MASK = 448, 91 USER_ACCOUNT_TYPE_MASK = 472, 92 USER_ALL_PARAMETERS = 2097152; 93 94 /+ 95 struct UNICODE_STRING { 96 USHORT Length; 97 USHORT MaximumLength; 98 PWSTR Buffer; 99 } 100 alias UNICODE_STRING* PUNICODE_STRING; 101 102 struct STRING { 103 USHORT Length; 104 USHORT MaximumLength; 105 PCHAR Buffer; 106 } 107 alias STRING* PSTRING; 108 +/ 109 110 mixin DECLARE_HANDLE!("SAM_HANDLE"); 111 alias SAM_HANDLE* PSAM_HANDLE; 112 113 struct OLD_LARGE_INTEGER { 114 ULONG LowPart; 115 LONG HighPart; 116 } 117 alias OLD_LARGE_INTEGER* POLD_LARGE_INTEGER; 118 119 enum NETLOGON_LOGON_INFO_CLASS { 120 NetlogonInteractiveInformation = 1, 121 NetlogonNetworkInformation, 122 NetlogonServiceInformation, 123 NetlogonGenericInformation, 124 NetlogonInteractiveTransitiveInformation, 125 NetlogonNetworkTransitiveInformation, 126 NetlogonServiceTransitiveInformation 127 } 128 129 130 const CYPHER_BLOCK_LENGTH = 8; 131 const USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2; 132 const CLEAR_BLOCK_LENGTH = 8; 133 134 struct CYPHER_BLOCK { 135 CHAR[CYPHER_BLOCK_LENGTH] data; 136 } 137 alias CYPHER_BLOCK* PCYPHER_BLOCK; 138 139 struct CLEAR_BLOCK { 140 CHAR[CLEAR_BLOCK_LENGTH] data; 141 } 142 alias CLEAR_BLOCK* PCLEAR_BLOCK; 143 144 struct LM_OWF_PASSWORD { 145 CYPHER_BLOCK[2] data; 146 } 147 alias LM_OWF_PASSWORD* PLM_OWF_PASSWORD; 148 149 struct USER_SESSION_KEY { 150 CYPHER_BLOCK[2] data; 151 } 152 alias USER_SESSION_KEY* PUSER_SESSION_KEY; 153 154 alias CLEAR_BLOCK LM_CHALLENGE; 155 alias LM_CHALLENGE* PLM_CHALLENGE; 156 157 alias LM_OWF_PASSWORD NT_OWF_PASSWORD; 158 alias NT_OWF_PASSWORD* PNT_OWF_PASSWORD; 159 alias LM_CHALLENGE NT_CHALLENGE; 160 alias NT_CHALLENGE* PNT_CHALLENGE; 161 162 struct LOGON_HOURS { 163 USHORT UnitsPerWeek; 164 PUCHAR LogonHours; 165 } 166 alias LOGON_HOURS* PLOGON_HOURS; 167 168 struct SR_SECURITY_DESCRIPTOR { 169 ULONG Length; 170 PUCHAR SecurityDescriptor; 171 } 172 alias SR_SECURITY_DESCRIPTOR* PSR_SECURITY_DESCRIPTOR; 173 174 align(4): 175 struct USER_ALL_INFORMATION { 176 LARGE_INTEGER LastLogon; 177 LARGE_INTEGER LastLogoff; 178 LARGE_INTEGER PasswordLastSet; 179 LARGE_INTEGER AccountExpires; 180 LARGE_INTEGER PasswordCanChange; 181 LARGE_INTEGER PasswordMustChange; 182 UNICODE_STRING UserName; 183 UNICODE_STRING FullName; 184 UNICODE_STRING HomeDirectory; 185 UNICODE_STRING HomeDirectoryDrive; 186 UNICODE_STRING ScriptPath; 187 UNICODE_STRING ProfilePath; 188 UNICODE_STRING AdminComment; 189 UNICODE_STRING WorkStations; 190 UNICODE_STRING UserComment; 191 UNICODE_STRING Parameters; 192 UNICODE_STRING LmPassword; 193 UNICODE_STRING NtPassword; 194 UNICODE_STRING PrivateData; 195 SR_SECURITY_DESCRIPTOR SecurityDescriptor; 196 ULONG UserId; 197 ULONG PrimaryGroupId; 198 ULONG UserAccountControl; 199 ULONG WhichFields; 200 LOGON_HOURS LogonHours; 201 USHORT BadPasswordCount; 202 USHORT LogonCount; 203 USHORT CountryCode; 204 USHORT CodePage; 205 BOOLEAN LmPasswordPresent; 206 BOOLEAN NtPasswordPresent; 207 BOOLEAN PasswordExpired; 208 BOOLEAN PrivateDataSensitive; 209 } 210 alias USER_ALL_INFORMATION* PUSER_ALL_INFORMATION; 211 align: 212 213 struct MSV1_0_VALIDATION_INFO { 214 LARGE_INTEGER LogoffTime; 215 LARGE_INTEGER KickoffTime; 216 UNICODE_STRING LogonServer; 217 UNICODE_STRING LogonDomainName; 218 USER_SESSION_KEY SessionKey; 219 BOOLEAN Authoritative; 220 ULONG UserFlags; 221 ULONG WhichFields; 222 ULONG UserId; 223 } 224 alias MSV1_0_VALIDATION_INFO* PMSV1_0_VALIDATION_INFO; 225 226 struct NETLOGON_LOGON_IDENTITY_INFO { 227 UNICODE_STRING LogonDomainName; 228 ULONG ParameterControl; 229 OLD_LARGE_INTEGER LogonId; 230 UNICODE_STRING UserName; 231 UNICODE_STRING Workstation; 232 } 233 alias NETLOGON_LOGON_IDENTITY_INFO* PNETLOGON_LOGON_IDENTITY_INFO; 234 235 struct NETLOGON_INTERACTIVE_INFO { 236 NETLOGON_LOGON_IDENTITY_INFO Identity; 237 LM_OWF_PASSWORD LmOwfPassword; 238 NT_OWF_PASSWORD NtOwfPassword; 239 } 240 alias NETLOGON_INTERACTIVE_INFO* PNETLOGON_INTERACTIVE_INFO; 241 242 struct NETLOGON_GENERIC_INFO { 243 NETLOGON_LOGON_IDENTITY_INFO Identity; 244 UNICODE_STRING PackageName; 245 ULONG DataLength; 246 PUCHAR LogonData; 247 } 248 alias NETLOGON_GENERIC_INFO* PNETLOGON_GENERIC_INFO; 249 250 struct NETLOGON_NETWORK_INFO { 251 NETLOGON_LOGON_IDENTITY_INFO Identity; 252 LM_CHALLENGE LmChallenge; 253 STRING NtChallengeResponse; 254 STRING LmChallengeResponse; 255 } 256 alias NETLOGON_NETWORK_INFO* PNETLOGON_NETWORK_INFO; 257 258 struct NETLOGON_SERVICE_INFO { 259 NETLOGON_LOGON_IDENTITY_INFO Identity; 260 LM_OWF_PASSWORD LmOwfPassword; 261 NT_OWF_PASSWORD NtOwfPassword; 262 } 263 alias NETLOGON_SERVICE_INFO* PNETLOGON_SERVICE_INFO; 264 265 extern (Windows) { 266 NTSTATUS Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID, 267 ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, 268 PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); 269 NTSTATUS Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID, 270 ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, 271 PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); 272 NTSTATUS Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*); 273 NTSTATUS Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID, 274 ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE, 275 PMSV1_0_VALIDATION_INFO,PULONG); 276 }