Artifact 2e201cc81211b5e112603e3f2123df13a4dc48df
- File
src/win32/subauth.d
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
The problem was __gshared. Replacing it with TLS fixed the issue. Remaining problem is that "hack.d"'s CloseHandle hack is not working anymore.
(user: kinaba) [annotate]
-
2015-05-05 06:49:05
- part of checkin
[9b639cf2d6]
on branch trunk
- Working version for update to 2.067.
/***********************************************************************\ * subauth.d * * * * Windows API header module * * * * Translated from MinGW Windows headers * * * * Placed into public domain * \***********************************************************************/ module win32.subauth; private import win32.ntdef, win32.windef; /+ alias LONG NTSTATUS; alias NTSTATUS* PNTSTATUS; +/ enum : ULONG { MSV1_0_PASSTHRU = 1, MSV1_0_GUEST_LOGON = 2 } // USER_ALL_INFORMATION.WhichFields (Undocumented) const ULONG MSV1_0_VALIDATION_LOGOFF_TIME = 1, MSV1_0_VALIDATION_KICKOFF_TIME = 2, MSV1_0_VALIDATION_LOGON_SERVER = 4, MSV1_0_VALIDATION_LOGON_DOMAIN = 8, MSV1_0_VALIDATION_SESSION_KEY = 16, MSV1_0_VALIDATION_USER_FLAGS = 32, MSV1_0_VALIDATION_USER_ID = 64; // ?ActionsPerformed? (Undocumented) const MSV1_0_SUBAUTH_ACCOUNT_DISABLED = 1; const MSV1_0_SUBAUTH_PASSWORD = 2; const MSV1_0_SUBAUTH_WORKSTATIONS = 4; const MSV1_0_SUBAUTH_LOGON_HOURS = 8; const MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = 16; const MSV1_0_SUBAUTH_PASSWORD_EXPIRY = 32; const MSV1_0_SUBAUTH_ACCOUNT_TYPE = 64; const MSV1_0_SUBAUTH_LOCKOUT = 128; const NEXT_FREE_ACCOUNT_CONTROL_BIT = 131072; const SAM_DAYS_PER_WEEK = 7; const SAM_HOURS_PER_WEEK = 168; const SAM_MINUTES_PER_WEEK = 10080; enum : NTSTATUS { STATUS_SUCCESS = 0, STATUS_INVALID_INFO_CLASS = 0xC0000003, STATUS_NO_SUCH_USER = 0xC0000064, STATUS_WRONG_PASSWORD = 0xC000006A, STATUS_PASSWORD_RESTRICTION = 0xC000006C, STATUS_LOGON_FAILURE = 0xC000006D, STATUS_ACCOUNT_RESTRICTION = 0xC000006E, STATUS_INVALID_LOGON_HOURS = 0xC000006F, STATUS_INVALID_WORKSTATION = 0xC0000070, STATUS_PASSWORD_EXPIRED = 0xC0000071, STATUS_ACCOUNT_DISABLED = 0xC0000072, STATUS_INSUFFICIENT_RESOURCES = 0xC000009A, STATUS_ACCOUNT_EXPIRED = 0xC0000193, STATUS_PASSWORD_MUST_CHANGE = 0xC0000224, STATUS_ACCOUNT_LOCKED_OUT = 0xC0000234 } // Note: undocumented in MSDN // USER_ALL_INFORMATION.UserAccountControl const ULONG USER_ACCOUNT_DISABLED = 1, USER_HOME_DIRECTORY_REQUIRED = 2, USER_PASSWORD_NOT_REQUIRED = 4, USER_TEMP_DUPLICATE_ACCOUNT = 8, USER_NORMAL_ACCOUNT = 16, USER_MNS_LOGON_ACCOUNT = 32, USER_INTERDOMAIN_TRUST_ACCOUNT = 64, USER_WORKSTATION_TRUST_ACCOUNT = 128, USER_SERVER_TRUST_ACCOUNT = 256, USER_DONT_EXPIRE_PASSWORD = 512, USER_ACCOUNT_AUTO_LOCKED = 1024, USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 2048, USER_SMARTCARD_REQUIRED = 4096, USER_TRUSTED_FOR_DELEGATION = 8192, USER_NOT_DELEGATED = 16384, USER_USE_DES_KEY_ONLY = 32768, USER_DONT_REQUIRE_PREAUTH = 65536, USER_MACHINE_ACCOUNT_MASK = 448, USER_ACCOUNT_TYPE_MASK = 472, USER_ALL_PARAMETERS = 2097152; /+ struct UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } alias UNICODE_STRING* PUNICODE_STRING; struct STRING { USHORT Length; USHORT MaximumLength; PCHAR Buffer; } alias STRING* PSTRING; +/ mixin DECLARE_HANDLE!("SAM_HANDLE"); alias SAM_HANDLE* PSAM_HANDLE; struct OLD_LARGE_INTEGER { ULONG LowPart; LONG HighPart; } alias OLD_LARGE_INTEGER* POLD_LARGE_INTEGER; enum NETLOGON_LOGON_INFO_CLASS { NetlogonInteractiveInformation = 1, NetlogonNetworkInformation, NetlogonServiceInformation, NetlogonGenericInformation, NetlogonInteractiveTransitiveInformation, NetlogonNetworkTransitiveInformation, NetlogonServiceTransitiveInformation } const CYPHER_BLOCK_LENGTH = 8; const USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2; const CLEAR_BLOCK_LENGTH = 8; struct CYPHER_BLOCK { CHAR[CYPHER_BLOCK_LENGTH] data; } alias CYPHER_BLOCK* PCYPHER_BLOCK; struct CLEAR_BLOCK { CHAR[CLEAR_BLOCK_LENGTH] data; } alias CLEAR_BLOCK* PCLEAR_BLOCK; struct LM_OWF_PASSWORD { CYPHER_BLOCK[2] data; } alias LM_OWF_PASSWORD* PLM_OWF_PASSWORD; struct USER_SESSION_KEY { CYPHER_BLOCK[2] data; } alias USER_SESSION_KEY* PUSER_SESSION_KEY; alias CLEAR_BLOCK LM_CHALLENGE; alias LM_CHALLENGE* PLM_CHALLENGE; alias LM_OWF_PASSWORD NT_OWF_PASSWORD; alias NT_OWF_PASSWORD* PNT_OWF_PASSWORD; alias LM_CHALLENGE NT_CHALLENGE; alias NT_CHALLENGE* PNT_CHALLENGE; struct LOGON_HOURS { USHORT UnitsPerWeek; PUCHAR LogonHours; } alias LOGON_HOURS* PLOGON_HOURS; struct SR_SECURITY_DESCRIPTOR { ULONG Length; PUCHAR SecurityDescriptor; } alias SR_SECURITY_DESCRIPTOR* PSR_SECURITY_DESCRIPTOR; align(4): struct USER_ALL_INFORMATION { LARGE_INTEGER LastLogon; LARGE_INTEGER LastLogoff; LARGE_INTEGER PasswordLastSet; LARGE_INTEGER AccountExpires; LARGE_INTEGER PasswordCanChange; LARGE_INTEGER PasswordMustChange; UNICODE_STRING UserName; UNICODE_STRING FullName; UNICODE_STRING HomeDirectory; UNICODE_STRING HomeDirectoryDrive; UNICODE_STRING ScriptPath; UNICODE_STRING ProfilePath; UNICODE_STRING AdminComment; UNICODE_STRING WorkStations; UNICODE_STRING UserComment; UNICODE_STRING Parameters; UNICODE_STRING LmPassword; UNICODE_STRING NtPassword; UNICODE_STRING PrivateData; SR_SECURITY_DESCRIPTOR SecurityDescriptor; ULONG UserId; ULONG PrimaryGroupId; ULONG UserAccountControl; ULONG WhichFields; LOGON_HOURS LogonHours; USHORT BadPasswordCount; USHORT LogonCount; USHORT CountryCode; USHORT CodePage; BOOLEAN LmPasswordPresent; BOOLEAN NtPasswordPresent; BOOLEAN PasswordExpired; BOOLEAN PrivateDataSensitive; } alias USER_ALL_INFORMATION* PUSER_ALL_INFORMATION; align: struct MSV1_0_VALIDATION_INFO { LARGE_INTEGER LogoffTime; LARGE_INTEGER KickoffTime; UNICODE_STRING LogonServer; UNICODE_STRING LogonDomainName; USER_SESSION_KEY SessionKey; BOOLEAN Authoritative; ULONG UserFlags; ULONG WhichFields; ULONG UserId; } alias MSV1_0_VALIDATION_INFO* PMSV1_0_VALIDATION_INFO; struct NETLOGON_LOGON_IDENTITY_INFO { UNICODE_STRING LogonDomainName; ULONG ParameterControl; OLD_LARGE_INTEGER LogonId; UNICODE_STRING UserName; UNICODE_STRING Workstation; } alias NETLOGON_LOGON_IDENTITY_INFO* PNETLOGON_LOGON_IDENTITY_INFO; struct NETLOGON_INTERACTIVE_INFO { NETLOGON_LOGON_IDENTITY_INFO Identity; LM_OWF_PASSWORD LmOwfPassword; NT_OWF_PASSWORD NtOwfPassword; } alias NETLOGON_INTERACTIVE_INFO* PNETLOGON_INTERACTIVE_INFO; struct NETLOGON_GENERIC_INFO { NETLOGON_LOGON_IDENTITY_INFO Identity; UNICODE_STRING PackageName; ULONG DataLength; PUCHAR LogonData; } alias NETLOGON_GENERIC_INFO* PNETLOGON_GENERIC_INFO; struct NETLOGON_NETWORK_INFO { NETLOGON_LOGON_IDENTITY_INFO Identity; LM_CHALLENGE LmChallenge; STRING NtChallengeResponse; STRING LmChallengeResponse; } alias NETLOGON_NETWORK_INFO* PNETLOGON_NETWORK_INFO; struct NETLOGON_SERVICE_INFO { NETLOGON_LOGON_IDENTITY_INFO Identity; LM_OWF_PASSWORD LmOwfPassword; NT_OWF_PASSWORD NtOwfPassword; } alias NETLOGON_SERVICE_INFO* PNETLOGON_SERVICE_INFO; extern (Windows) { NTSTATUS Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID, ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); NTSTATUS Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID, ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); NTSTATUS Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*); NTSTATUS Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID, ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE, PMSV1_0_VALIDATION_INFO,PULONG); }