Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _NTSUBAUTH_
      7 #define _NTSUBAUTH_
      8 
      9 #ifdef __cplusplus
     10 extern "C" {
     11 #endif
     12 
     13 #if (!defined(_NTDEF_)) && (!defined(_NTSECAPI_))
     14 
     15 #if !defined (_NTDEF_) && !defined (_NTSTATUS_PSDK)
     16 #define _NTSTATUS_PSDK
     17   typedef LONG NTSTATUS,*PNTSTATUS;
     18 #endif
     19 
     20 #ifndef __UNICODE_STRING_DEFINED
     21 #define __UNICODE_STRING_DEFINED
     22   typedef struct _UNICODE_STRING {
     23     USHORT Length;
     24     USHORT MaximumLength;
     25     PWSTR Buffer;
     26   } UNICODE_STRING,*PUNICODE_STRING;
     27 #endif
     28 
     29 #ifndef __STRING_DEFINED
     30 #define __STRING_DEFINED
     31   typedef struct _STRING {
     32     USHORT Length;
     33     USHORT MaximumLength;
     34     PCHAR Buffer;
     35   } STRING,*PSTRING;
     36 #endif
     37 #endif
     38 
     39 #ifndef _NTDEF_
     40 
     41   typedef struct _OLD_LARGE_INTEGER {
     42     ULONG LowPart;
     43     LONG HighPart;
     44   } OLD_LARGE_INTEGER,*POLD_LARGE_INTEGER;
     45 
     46 #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
     47 #endif
     48 
     49 #ifndef _NTSAM_SAM_HANDLE_
     50   typedef PVOID SAM_HANDLE,*PSAM_HANDLE;
     51 #define _NTSAM_SAM_HANDLE_
     52 #endif
     53 #ifndef _NTSAM_USER_ACCOUNT_FLAGS_
     54 
     55 #define USER_ACCOUNT_DISABLED (0x00000001)
     56 #define USER_HOME_DIRECTORY_REQUIRED (0x00000002)
     57 #define USER_PASSWORD_NOT_REQUIRED (0x00000004)
     58 #define USER_TEMP_DUPLICATE_ACCOUNT (0x00000008)
     59 #define USER_NORMAL_ACCOUNT (0x00000010)
     60 #define USER_MNS_LOGON_ACCOUNT (0x00000020)
     61 #define USER_INTERDOMAIN_TRUST_ACCOUNT (0x00000040)
     62 #define USER_WORKSTATION_TRUST_ACCOUNT (0x00000080)
     63 #define USER_SERVER_TRUST_ACCOUNT (0x00000100)
     64 #define USER_DONT_EXPIRE_PASSWORD (0x00000200)
     65 #define USER_ACCOUNT_AUTO_LOCKED (0x00000400)
     66 #define USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED (0x00000800)
     67 #define USER_SMARTCARD_REQUIRED (0x00001000)
     68 #define USER_TRUSTED_FOR_DELEGATION (0x00002000)
     69 #define USER_NOT_DELEGATED (0x00004000)
     70 #define USER_USE_DES_KEY_ONLY (0x00008000)
     71 #define USER_DONT_REQUIRE_PREAUTH (0x00010000)
     72 #define USER_PASSWORD_EXPIRED (0x00020000)
     73 #define USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION (0x00040000)
     74 #define USER_NO_AUTH_DATA_REQUIRED (0x00080000)
     75 #define NEXT_FREE_ACCOUNT_CONTROL_BIT (USER_NO_AUTH_DATA_REQUIRED << 1)
     76 
     77 #define USER_MACHINE_ACCOUNT_MASK (USER_INTERDOMAIN_TRUST_ACCOUNT | USER_WORKSTATION_TRUST_ACCOUNT | USER_SERVER_TRUST_ACCOUNT)
     78 #define USER_ACCOUNT_TYPE_MASK (USER_TEMP_DUPLICATE_ACCOUNT | USER_NORMAL_ACCOUNT | USER_MACHINE_ACCOUNT_MASK)
     79 #define USER_COMPUTED_ACCOUNT_CONTROL_BITS (USER_ACCOUNT_AUTO_LOCKED | USER_PASSWORD_EXPIRED)
     80 
     81 #define SAM_DAYS_PER_WEEK (7)
     82 #define SAM_HOURS_PER_WEEK (24*SAM_DAYS_PER_WEEK)
     83 #define SAM_MINUTES_PER_WEEK (60*SAM_HOURS_PER_WEEK)
     84 
     85   typedef struct _LOGON_HOURS {
     86     USHORT UnitsPerWeek;
     87     PUCHAR LogonHours;
     88   } LOGON_HOURS,*PLOGON_HOURS;
     89 
     90   typedef struct _SR_SECURITY_DESCRIPTOR {
     91     ULONG Length;
     92     PUCHAR SecurityDescriptor;
     93   } SR_SECURITY_DESCRIPTOR,*PSR_SECURITY_DESCRIPTOR;
     94 
     95 #define _NTSAM_USER_ACCOUNT_FLAG_
     96 #endif
     97 #ifndef _NTSAM_USER_ALL_INFO_
     98 #include "pshpack4.h"
     99   typedef struct _USER_ALL_INFORMATION {
    100     LARGE_INTEGER LastLogon;
    101     LARGE_INTEGER LastLogoff;
    102     LARGE_INTEGER PasswordLastSet;
    103     LARGE_INTEGER AccountExpires;
    104     LARGE_INTEGER PasswordCanChange;
    105     LARGE_INTEGER PasswordMustChange;
    106     UNICODE_STRING UserName;
    107     UNICODE_STRING FullName;
    108     UNICODE_STRING HomeDirectory;
    109     UNICODE_STRING HomeDirectoryDrive;
    110     UNICODE_STRING ScriptPath;
    111     UNICODE_STRING ProfilePath;
    112     UNICODE_STRING AdminComment;
    113     UNICODE_STRING WorkStations;
    114     UNICODE_STRING UserComment;
    115     UNICODE_STRING Parameters;
    116     UNICODE_STRING LmPassword;
    117     UNICODE_STRING NtPassword;
    118     UNICODE_STRING PrivateData;
    119     SR_SECURITY_DESCRIPTOR SecurityDescriptor;
    120     ULONG UserId;
    121     ULONG PrimaryGroupId;
    122     ULONG UserAccountControl;
    123     ULONG WhichFields;
    124     LOGON_HOURS LogonHours;
    125     USHORT BadPasswordCount;
    126     USHORT LogonCount;
    127     USHORT CountryCode;
    128     USHORT CodePage;
    129     BOOLEAN LmPasswordPresent;
    130     BOOLEAN NtPasswordPresent;
    131     BOOLEAN PasswordExpired;
    132     BOOLEAN PrivateDataSensitive;
    133   } USER_ALL_INFORMATION,*PUSER_ALL_INFORMATION;
    134 #include "poppack.h"
    135 #define _NTSAM_USER_ALL_INFO_
    136 #endif
    137 #ifndef _NTSAM_SAM_USER_PARMS_
    138 #define USER_ALL_PARAMETERS 0x00200000
    139 #define _NTSAM_SAM_USER_PARMS_
    140 #endif
    141 
    142 #define CLEAR_BLOCK_LENGTH 8
    143 
    144   typedef struct _CLEAR_BLOCK {
    145     CHAR data[CLEAR_BLOCK_LENGTH];
    146   } CLEAR_BLOCK;
    147 
    148   typedef CLEAR_BLOCK *PCLEAR_BLOCK;
    149 
    150 #define CYPHER_BLOCK_LENGTH 8
    151 
    152   typedef struct _CYPHER_BLOCK {
    153     CHAR data[CYPHER_BLOCK_LENGTH];
    154   } CYPHER_BLOCK;
    155   typedef CYPHER_BLOCK *PCYPHER_BLOCK;
    156   typedef struct _LM_OWF_PASSWORD {
    157     CYPHER_BLOCK data[2];
    158   } LM_OWF_PASSWORD;
    159   typedef LM_OWF_PASSWORD *PLM_OWF_PASSWORD;
    160   typedef CLEAR_BLOCK LM_CHALLENGE;
    161   typedef LM_CHALLENGE *PLM_CHALLENGE;
    162   typedef LM_OWF_PASSWORD NT_OWF_PASSWORD;
    163   typedef NT_OWF_PASSWORD *PNT_OWF_PASSWORD;
    164   typedef LM_CHALLENGE NT_CHALLENGE;
    165   typedef NT_CHALLENGE *PNT_CHALLENGE;
    166 #define USER_SESSION_KEY_LENGTH (CYPHER_BLOCK_LENGTH *2)
    167 
    168   typedef struct _USER_SESSION_KEY {
    169     CYPHER_BLOCK data[2];
    170   } USER_SESSION_KEY;
    171   typedef USER_SESSION_KEY *PUSER_SESSION_KEY;
    172 
    173   typedef enum _NETLOGON_LOGON_INFO_CLASS {
    174     NetlogonInteractiveInformation = 1,NetlogonNetworkInformation,NetlogonServiceInformation,NetlogonGenericInformation,
    175     NetlogonInteractiveTransitiveInformation,NetlogonNetworkTransitiveInformation,NetlogonServiceTransitiveInformation
    176   } NETLOGON_LOGON_INFO_CLASS;
    177 
    178   typedef struct _NETLOGON_LOGON_IDENTITY_INFO {
    179     UNICODE_STRING LogonDomainName;
    180     ULONG ParameterControl;
    181     OLD_LARGE_INTEGER LogonId;
    182     UNICODE_STRING UserName;
    183     UNICODE_STRING Workstation;
    184   } NETLOGON_LOGON_IDENTITY_INFO,*PNETLOGON_LOGON_IDENTITY_INFO;
    185 
    186   typedef struct _NETLOGON_INTERACTIVE_INFO {
    187     NETLOGON_LOGON_IDENTITY_INFO Identity;
    188     LM_OWF_PASSWORD LmOwfPassword;
    189     NT_OWF_PASSWORD NtOwfPassword;
    190   } NETLOGON_INTERACTIVE_INFO,*PNETLOGON_INTERACTIVE_INFO;
    191 
    192   typedef struct _NETLOGON_SERVICE_INFO {
    193     NETLOGON_LOGON_IDENTITY_INFO Identity;
    194     LM_OWF_PASSWORD LmOwfPassword;
    195     NT_OWF_PASSWORD NtOwfPassword;
    196   } NETLOGON_SERVICE_INFO,*PNETLOGON_SERVICE_INFO;
    197 
    198   typedef struct _NETLOGON_NETWORK_INFO {
    199     NETLOGON_LOGON_IDENTITY_INFO Identity;
    200     LM_CHALLENGE LmChallenge;
    201     STRING NtChallengeResponse;
    202     STRING LmChallengeResponse;
    203   } NETLOGON_NETWORK_INFO,*PNETLOGON_NETWORK_INFO;
    204 
    205   typedef struct _NETLOGON_GENERIC_INFO {
    206     NETLOGON_LOGON_IDENTITY_INFO Identity;
    207     UNICODE_STRING PackageName;
    208     ULONG DataLength;
    209     PUCHAR LogonData;
    210   } NETLOGON_GENERIC_INFO,*PNETLOGON_GENERIC_INFO;
    211 
    212 #define MSV1_0_PASSTHRU 0x01
    213 #define MSV1_0_GUEST_LOGON 0x02
    214 
    215   NTSTATUS NTAPI Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS LogonLevel,PVOID LogonInformation,ULONG Flags,PUSER_ALL_INFORMATION UserAll,PULONG WhichFields,PULONG UserFlags,PBOOLEAN Authoritative,PLARGE_INTEGER LogoffTime,PLARGE_INTEGER KickoffTime);
    216 
    217   typedef struct _MSV1_0_VALIDATION_INFO {
    218     LARGE_INTEGER LogoffTime;
    219     LARGE_INTEGER KickoffTime;
    220     UNICODE_STRING LogonServer;
    221     UNICODE_STRING LogonDomainName;
    222     USER_SESSION_KEY SessionKey;
    223     BOOLEAN Authoritative;
    224     ULONG UserFlags;
    225     ULONG WhichFields;
    226     ULONG UserId;
    227   } MSV1_0_VALIDATION_INFO,*PMSV1_0_VALIDATION_INFO;
    228 
    229 #define MSV1_0_VALIDATION_LOGOFF_TIME 0x00000001
    230 #define MSV1_0_VALIDATION_KICKOFF_TIME 0x00000002
    231 #define MSV1_0_VALIDATION_LOGON_SERVER 0x00000004
    232 #define MSV1_0_VALIDATION_LOGON_DOMAIN 0x00000008
    233 #define MSV1_0_VALIDATION_SESSION_KEY 0x00000010
    234 #define MSV1_0_VALIDATION_USER_FLAGS 0x00000020
    235 #define MSV1_0_VALIDATION_USER_ID 0x00000040
    236 
    237 #define MSV1_0_SUBAUTH_ACCOUNT_DISABLED 0x00000001
    238 #define MSV1_0_SUBAUTH_PASSWORD 0x00000002
    239 #define MSV1_0_SUBAUTH_WORKSTATIONS 0x00000004
    240 #define MSV1_0_SUBAUTH_LOGON_HOURS 0x00000008
    241 #define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY 0x00000010
    242 #define MSV1_0_SUBAUTH_PASSWORD_EXPIRY 0x00000020
    243 #define MSV1_0_SUBAUTH_ACCOUNT_TYPE 0x00000040
    244 #define MSV1_0_SUBAUTH_LOCKOUT 0x00000080
    245 
    246   NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS LogonLevel,PVOID LogonInformation,ULONG Flags,PUSER_ALL_INFORMATION UserAll,SAM_HANDLE UserHandle,PMSV1_0_VALIDATION_INFO ValidationInfo,PULONG ActionsPerformed);
    247   NTSTATUS NTAPI Msv1_0SubAuthenticationRoutineGeneric(PVOID SubmitBuffer,ULONG SubmitBufferLength,PULONG ReturnBufferLength,PVOID *ReturnBuffer);
    248   NTSTATUS NTAPI Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS LogonLevel,PVOID LogonInformation,ULONG Flags,PUSER_ALL_INFORMATION UserAll,PULONG WhichFields,PULONG UserFlags,PBOOLEAN Authoritative,PLARGE_INTEGER LogoffTime,PLARGE_INTEGER KickoffTime);
    249 
    250 #define STATUS_SUCCESS ((NTSTATUS)0x00000000)
    251 #define STATUS_INVALID_INFO_CLASS ((NTSTATUS)0xC0000003)
    252 #define STATUS_NO_SUCH_USER ((NTSTATUS)0xC0000064)
    253 #define STATUS_WRONG_PASSWORD ((NTSTATUS)0xC000006A)
    254 #define STATUS_PASSWORD_RESTRICTION ((NTSTATUS)0xC000006C)
    255 #define STATUS_LOGON_FAILURE ((NTSTATUS)0xC000006D)
    256 #define STATUS_ACCOUNT_RESTRICTION ((NTSTATUS)0xC000006E)
    257 #define STATUS_INVALID_LOGON_HOURS ((NTSTATUS)0xC000006F)
    258 #define STATUS_INVALID_WORKSTATION ((NTSTATUS)0xC0000070)
    259 #define STATUS_PASSWORD_EXPIRED ((NTSTATUS)0xC0000071)
    260 #define STATUS_ACCOUNT_DISABLED ((NTSTATUS)0xC0000072)
    261 #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
    262 #define STATUS_ACCOUNT_EXPIRED ((NTSTATUS)0xC0000193)
    263 #define STATUS_PASSWORD_MUST_CHANGE ((NTSTATUS)0xC0000224)
    264 #define STATUS_ACCOUNT_LOCKED_OUT ((NTSTATUS)0xC0000234)
    265 #ifdef __cplusplus
    266 }
    267 #endif
    268 #endif
    269