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