| /** |
| * Windows API header module |
| * |
| * Translated from MinGW Windows headers |
| * |
| * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) |
| * Source: $(DRUNTIMESRC core/sys/windows/_subauth.d) |
| */ |
| module core.sys.windows.subauth; |
| version (Windows): |
| |
| import core.sys.windows.ntdef, core.sys.windows.windef; |
| |
| /+ |
| alias LONG NTSTATUS; |
| alias NTSTATUS* PNTSTATUS; |
| +/ |
| |
| enum : ULONG { |
| MSV1_0_PASSTHRU = 1, |
| MSV1_0_GUEST_LOGON = 2 |
| } |
| |
| // USER_ALL_INFORMATION.WhichFields (Undocumented) |
| enum 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) |
| enum MSV1_0_SUBAUTH_ACCOUNT_DISABLED = 1; |
| enum MSV1_0_SUBAUTH_PASSWORD = 2; |
| enum MSV1_0_SUBAUTH_WORKSTATIONS = 4; |
| enum MSV1_0_SUBAUTH_LOGON_HOURS = 8; |
| enum MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = 16; |
| enum MSV1_0_SUBAUTH_PASSWORD_EXPIRY = 32; |
| enum MSV1_0_SUBAUTH_ACCOUNT_TYPE = 64; |
| enum MSV1_0_SUBAUTH_LOCKOUT = 128; |
| |
| enum NEXT_FREE_ACCOUNT_CONTROL_BIT = 131072; |
| |
| enum SAM_DAYS_PER_WEEK = 7; |
| enum SAM_HOURS_PER_WEEK = 168; |
| enum 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 |
| enum 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; |
| +/ |
| |
| alias SAM_HANDLE = HANDLE; |
| alias PSAM_HANDLE = SAM_HANDLE*; |
| |
| struct OLD_LARGE_INTEGER { |
| ULONG LowPart; |
| LONG HighPart; |
| } |
| alias POLD_LARGE_INTEGER = OLD_LARGE_INTEGER*; |
| |
| enum NETLOGON_LOGON_INFO_CLASS { |
| NetlogonInteractiveInformation = 1, |
| NetlogonNetworkInformation, |
| NetlogonServiceInformation, |
| NetlogonGenericInformation, |
| NetlogonInteractiveTransitiveInformation, |
| NetlogonNetworkTransitiveInformation, |
| NetlogonServiceTransitiveInformation |
| } |
| |
| |
| enum CYPHER_BLOCK_LENGTH = 8; |
| enum USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2; |
| enum CLEAR_BLOCK_LENGTH = 8; |
| |
| struct CYPHER_BLOCK { |
| CHAR[CYPHER_BLOCK_LENGTH] data = 0; |
| } |
| alias PCYPHER_BLOCK = CYPHER_BLOCK*; |
| |
| struct CLEAR_BLOCK { |
| CHAR[CLEAR_BLOCK_LENGTH] data = 0; |
| } |
| alias PCLEAR_BLOCK = CLEAR_BLOCK*; |
| |
| struct LM_OWF_PASSWORD { |
| CYPHER_BLOCK[2] data; |
| } |
| alias PLM_OWF_PASSWORD = LM_OWF_PASSWORD*; |
| |
| struct USER_SESSION_KEY { |
| CYPHER_BLOCK[2] data; |
| } |
| alias PUSER_SESSION_KEY = USER_SESSION_KEY*; |
| |
| alias LM_CHALLENGE = CLEAR_BLOCK; |
| alias PLM_CHALLENGE = LM_CHALLENGE*; |
| |
| alias NT_OWF_PASSWORD = LM_OWF_PASSWORD; |
| alias PNT_OWF_PASSWORD = NT_OWF_PASSWORD*; |
| alias NT_CHALLENGE = LM_CHALLENGE; |
| alias PNT_CHALLENGE = NT_CHALLENGE*; |
| |
| struct LOGON_HOURS { |
| USHORT UnitsPerWeek; |
| PUCHAR LogonHours; |
| } |
| alias PLOGON_HOURS = LOGON_HOURS*; |
| |
| struct SR_SECURITY_DESCRIPTOR { |
| ULONG Length; |
| PUCHAR SecurityDescriptor; |
| } |
| alias PSR_SECURITY_DESCRIPTOR = SR_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 PUSER_ALL_INFORMATION = USER_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 PMSV1_0_VALIDATION_INFO = MSV1_0_VALIDATION_INFO*; |
| |
| struct NETLOGON_LOGON_IDENTITY_INFO { |
| UNICODE_STRING LogonDomainName; |
| ULONG ParameterControl; |
| OLD_LARGE_INTEGER LogonId; |
| UNICODE_STRING UserName; |
| UNICODE_STRING Workstation; |
| } |
| alias PNETLOGON_LOGON_IDENTITY_INFO = NETLOGON_LOGON_IDENTITY_INFO*; |
| |
| struct NETLOGON_INTERACTIVE_INFO { |
| NETLOGON_LOGON_IDENTITY_INFO Identity; |
| LM_OWF_PASSWORD LmOwfPassword; |
| NT_OWF_PASSWORD NtOwfPassword; |
| } |
| alias PNETLOGON_INTERACTIVE_INFO = NETLOGON_INTERACTIVE_INFO*; |
| |
| struct NETLOGON_GENERIC_INFO { |
| NETLOGON_LOGON_IDENTITY_INFO Identity; |
| UNICODE_STRING PackageName; |
| ULONG DataLength; |
| PUCHAR LogonData; |
| } |
| alias PNETLOGON_GENERIC_INFO = NETLOGON_GENERIC_INFO*; |
| |
| struct NETLOGON_NETWORK_INFO { |
| NETLOGON_LOGON_IDENTITY_INFO Identity; |
| LM_CHALLENGE LmChallenge; |
| STRING NtChallengeResponse; |
| STRING LmChallengeResponse; |
| } |
| alias PNETLOGON_NETWORK_INFO = NETLOGON_NETWORK_INFO*; |
| |
| struct NETLOGON_SERVICE_INFO { |
| NETLOGON_LOGON_IDENTITY_INFO Identity; |
| LM_OWF_PASSWORD LmOwfPassword; |
| NT_OWF_PASSWORD NtOwfPassword; |
| } |
| alias PNETLOGON_SERVICE_INFO = NETLOGON_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); |
| } |