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