jwasubauth.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. {******************************************************************************}
  2. { }
  3. { Subauthentication packages API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: subauth.h, released June 2000. The original Pascal }
  9. { code is: SubAuth.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaSubAuth.pas,v 1.8 2007/09/05 11:58:52 dezipaitor Exp $
  43. {$IFNDEF JWA_OMIT_SECTIONS}
  44. {$IFNDEF FPC_DOTTEDUNITS}
  45. unit JwaSubAuth;
  46. {$ENDIF FPC_DOTTEDUNITS}
  47. {$WEAKPACKAGEUNIT}
  48. {$ENDIF JWA_OMIT_SECTIONS}
  49. {$HPPEMIT ''}
  50. {$HPPEMIT '#include "subauth.h"'}
  51. {$HPPEMIT ''}
  52. {$IFNDEF JWA_OMIT_SECTIONS}
  53. {$I jediapilib.inc}
  54. interface
  55. {$IFDEF FPC_DOTTEDUNITS}
  56. uses
  57. WinApi.Jedi.Wintype;
  58. {$ELSE FPC_DOTTEDUNITS}
  59. uses
  60. JwaWinType;
  61. {$ENDIF FPC_DOTTEDUNITS}
  62. {$ENDIF JWA_OMIT_SECTIONS}
  63. {$IFNDEF JWA_IMPLEMENTATIONSECTION}
  64. type
  65. SAM_HANDLE = PVOID;
  66. {$EXTERNALSYM SAM_HANDLE}
  67. PSAM_HANDLE = ^SAM_HANDLE;
  68. {$EXTERNALSYM PSAM_HANDLE}
  69. POLD_LARGE_INTEGER = ^OLD_LARGE_INTEGER;
  70. {$EXTERNALSYM POLD_LARGE_INTEGER}
  71. _OLD_LARGE_INTEGER = record
  72. LowPart: ULONG;
  73. HighPart: LONG;
  74. end;
  75. {$EXTERNALSYM _OLD_LARGE_INTEGER}
  76. OLD_LARGE_INTEGER = _OLD_LARGE_INTEGER;
  77. {$EXTERNALSYM OLD_LARGE_INTEGER}
  78. TOldLargeInteger = OLD_LARGE_INTEGER;
  79. POldLargeInteger = POLD_LARGE_INTEGER;
  80. //
  81. // User account control flags...
  82. //
  83. const
  84. USER_ACCOUNT_DISABLED = $00000001;
  85. {$EXTERNALSYM USER_ACCOUNT_DISABLED}
  86. USER_HOME_DIRECTORY_REQUIRED = $00000002;
  87. {$EXTERNALSYM USER_HOME_DIRECTORY_REQUIRED}
  88. USER_PASSWORD_NOT_REQUIRED = $00000004;
  89. {$EXTERNALSYM USER_PASSWORD_NOT_REQUIRED}
  90. USER_TEMP_DUPLICATE_ACCOUNT = $00000008;
  91. {$EXTERNALSYM USER_TEMP_DUPLICATE_ACCOUNT}
  92. USER_NORMAL_ACCOUNT = $00000010;
  93. {$EXTERNALSYM USER_NORMAL_ACCOUNT}
  94. USER_MNS_LOGON_ACCOUNT = $00000020;
  95. {$EXTERNALSYM USER_MNS_LOGON_ACCOUNT}
  96. USER_INTERDOMAIN_TRUST_ACCOUNT = $00000040;
  97. {$EXTERNALSYM USER_INTERDOMAIN_TRUST_ACCOUNT}
  98. USER_WORKSTATION_TRUST_ACCOUNT = $00000080;
  99. {$EXTERNALSYM USER_WORKSTATION_TRUST_ACCOUNT}
  100. USER_SERVER_TRUST_ACCOUNT = $00000100;
  101. {$EXTERNALSYM USER_SERVER_TRUST_ACCOUNT}
  102. USER_DONT_EXPIRE_PASSWORD = $00000200;
  103. {$EXTERNALSYM USER_DONT_EXPIRE_PASSWORD}
  104. USER_ACCOUNT_AUTO_LOCKED = $00000400;
  105. {$EXTERNALSYM USER_ACCOUNT_AUTO_LOCKED}
  106. USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED = $00000800;
  107. {$EXTERNALSYM USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED}
  108. USER_SMARTCARD_REQUIRED = $00001000;
  109. {$EXTERNALSYM USER_SMARTCARD_REQUIRED}
  110. USER_TRUSTED_FOR_DELEGATION = $00002000;
  111. {$EXTERNALSYM USER_TRUSTED_FOR_DELEGATION}
  112. USER_NOT_DELEGATED = $00004000;
  113. {$EXTERNALSYM USER_NOT_DELEGATED}
  114. USER_USE_DES_KEY_ONLY = $00008000;
  115. {$EXTERNALSYM USER_USE_DES_KEY_ONLY}
  116. USER_DONT_REQUIRE_PREAUTH = $00010000;
  117. {$EXTERNALSYM USER_DONT_REQUIRE_PREAUTH}
  118. USER_PASSWORD_EXPIRED = $00020000;
  119. {$EXTERNALSYM USER_PASSWORD_EXPIRED}
  120. USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = $00040000;
  121. {$EXTERNALSYM USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION}
  122. NEXT_FREE_ACCOUNT_CONTROL_BIT = USER_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION shl 1;
  123. {$EXTERNALSYM NEXT_FREE_ACCOUNT_CONTROL_BIT}
  124. USER_MACHINE_ACCOUNT_MASK = USER_INTERDOMAIN_TRUST_ACCOUNT or USER_WORKSTATION_TRUST_ACCOUNT or USER_SERVER_TRUST_ACCOUNT;
  125. {$EXTERNALSYM USER_MACHINE_ACCOUNT_MASK}
  126. USER_ACCOUNT_TYPE_MASK = USER_TEMP_DUPLICATE_ACCOUNT or USER_NORMAL_ACCOUNT or USER_MACHINE_ACCOUNT_MASK;
  127. {$EXTERNALSYM USER_ACCOUNT_TYPE_MASK}
  128. USER_COMPUTED_ACCOUNT_CONTROL_BITS = USER_ACCOUNT_AUTO_LOCKED or USER_PASSWORD_EXPIRED;
  129. {$EXTERNALSYM USER_COMPUTED_ACCOUNT_CONTROL_BITS}
  130. //
  131. // Logon times may be expressed in day, hour, or minute granularity.
  132. //
  133. // Days per week = 7
  134. // Hours per week = 168
  135. // Minutes per week = 10080
  136. //
  137. SAM_DAYS_PER_WEEK = 7;
  138. {$EXTERNALSYM SAM_DAYS_PER_WEEK}
  139. SAM_HOURS_PER_WEEK = 24 * SAM_DAYS_PER_WEEK;
  140. {$EXTERNALSYM SAM_HOURS_PER_WEEK}
  141. SAM_MINUTES_PER_WEEK = 60 * SAM_HOURS_PER_WEEK;
  142. {$EXTERNALSYM SAM_MINUTES_PER_WEEK}
  143. type
  144. PLOGON_HOURS = ^LOGON_HOURS;
  145. {$EXTERNALSYM PLOGON_HOURS}
  146. _LOGON_HOURS = record
  147. UnitsPerWeek: USHORT;
  148. //
  149. // UnitsPerWeek is the number of equal length time units the week is
  150. // divided into. This value is used to compute the length of the bit
  151. // string in logon_hours. Must be less than or equal to
  152. // SAM_UNITS_PER_WEEK (10080) for this release.
  153. //
  154. // LogonHours is a bit map of valid logon times. Each bit represents
  155. // a unique division in a week. The largest bit map supported is 1260
  156. // bytes (10080 bits), which represents minutes per week. In this case
  157. // the first bit (bit 0, byte 0) is Sunday, 00:00:00 - 00-00:59; bit 1,
  158. // byte 0 is Sunday, 00:01:00 - 00:01:59, etc. A NULL pointer means
  159. // DONT_CHANGE for SamSetInformationUser() calls.
  160. //
  161. LogonHours: PUCHAR;
  162. end;
  163. {$EXTERNALSYM _LOGON_HOURS}
  164. LOGON_HOURS = _LOGON_HOURS;
  165. {$EXTERNALSYM LOGON_HOURS}
  166. TLogonHours = LOGON_HOURS;
  167. PLogonHours = PLOGON_HOURS;
  168. PSR_SECURITY_DESCRIPTOR = ^SR_SECURITY_DESCRIPTOR;
  169. {$EXTERNALSYM PSR_SECURITY_DESCRIPTOR}
  170. _SR_SECURITY_DESCRIPTOR = record
  171. Length: ULONG;
  172. SecurityDescriptor: PUCHAR;
  173. end;
  174. {$EXTERNALSYM _SR_SECURITY_DESCRIPTOR}
  175. SR_SECURITY_DESCRIPTOR = _SR_SECURITY_DESCRIPTOR;
  176. {$EXTERNALSYM SR_SECURITY_DESCRIPTOR}
  177. TSrSecurityDescriptor = SR_SECURITY_DESCRIPTOR;
  178. PSrSecurityDescriptor = PSR_SECURITY_DESCRIPTOR;
  179. // #include "pshpack4.h"
  180. PUSER_ALL_INFORMATION = ^USER_ALL_INFORMATION;
  181. {$EXTERNALSYM PUSER_ALL_INFORMATION}
  182. _USER_ALL_INFORMATION = record
  183. LastLogon: LARGE_INTEGER;
  184. LastLogoff: LARGE_INTEGER;
  185. PasswordLastSet: LARGE_INTEGER;
  186. AccountExpires: LARGE_INTEGER;
  187. PasswordCanChange: LARGE_INTEGER;
  188. PasswordMustChange: LARGE_INTEGER;
  189. UserName: UNICODE_STRING;
  190. FullName: UNICODE_STRING;
  191. HomeDirectory: UNICODE_STRING;
  192. HomeDirectoryDrive: UNICODE_STRING;
  193. ScriptPath: UNICODE_STRING;
  194. ProfilePath: UNICODE_STRING;
  195. AdminComment: UNICODE_STRING;
  196. WorkStations: UNICODE_STRING;
  197. UserComment: UNICODE_STRING;
  198. Parameters: UNICODE_STRING;
  199. LmPassword: UNICODE_STRING;
  200. NtPassword: UNICODE_STRING;
  201. PrivateData: UNICODE_STRING;
  202. SecurityDescriptor: SR_SECURITY_DESCRIPTOR;
  203. UserId: ULONG;
  204. PrimaryGroupId: ULONG;
  205. UserAccountControl: ULONG;
  206. WhichFields: ULONG;
  207. LogonHours: LOGON_HOURS;
  208. BadPasswordCount: USHORT;
  209. LogonCount: USHORT;
  210. CountryCode: USHORT;
  211. CodePage: USHORT;
  212. LmPasswordPresent: ByteBool;
  213. NtPasswordPresent: ByteBool;
  214. PasswordExpired: ByteBool;
  215. PrivateDataSensitive: ByteBool;
  216. end;
  217. {$EXTERNALSYM _USER_ALL_INFORMATION}
  218. USER_ALL_INFORMATION = _USER_ALL_INFORMATION;
  219. {$EXTERNALSYM USER_ALL_INFORMATION}
  220. TUserAllInformation = USER_ALL_INFORMATION;
  221. PUserAllInformation = PUSER_ALL_INFORMATION;
  222. // #include "poppack.h"
  223. const
  224. USER_ALL_PARAMETERS = $00200000;
  225. {$EXTERNALSYM USER_ALL_PARAMETERS}
  226. CLEAR_BLOCK_LENGTH = 8;
  227. {$EXTERNALSYM CLEAR_BLOCK_LENGTH}
  228. type
  229. PCLEAR_BLOCK = ^CLEAR_BLOCK;
  230. {$EXTERNALSYM PCLEAR_BLOCK}
  231. _CLEAR_BLOCK = record
  232. data: array [0..CLEAR_BLOCK_LENGTH - 1] of AnsiChar;
  233. end;
  234. {$EXTERNALSYM _CLEAR_BLOCK}
  235. CLEAR_BLOCK = _CLEAR_BLOCK;
  236. {$EXTERNALSYM CLEAR_BLOCK}
  237. TClearBlock = CLEAR_BLOCK;
  238. PClearBlock = PCLEAR_BLOCK;
  239. const
  240. CYPHER_BLOCK_LENGTH = 8;
  241. {$EXTERNALSYM CYPHER_BLOCK_LENGTH}
  242. type
  243. PCYPHER_BLOCK = ^CYPHER_BLOCK;
  244. {$EXTERNALSYM PCYPHER_BLOCK}
  245. _CYPHER_BLOCK = record
  246. data: array [0..CYPHER_BLOCK_LENGTH - 1] of AnsiChar;
  247. end;
  248. {$EXTERNALSYM _CYPHER_BLOCK}
  249. CYPHER_BLOCK = _CYPHER_BLOCK;
  250. {$EXTERNALSYM CYPHER_BLOCK}
  251. TCypherBlock = CYPHER_BLOCK;
  252. PCypherBlock = PCYPHER_BLOCK;
  253. PLM_OWF_PASSWORD = ^LM_OWF_PASSWORD;
  254. {$EXTERNALSYM PLM_OWF_PASSWORD}
  255. _LM_OWF_PASSWORD = record
  256. data: array [0..1] of CYPHER_BLOCK;
  257. end;
  258. {$EXTERNALSYM _LM_OWF_PASSWORD}
  259. LM_OWF_PASSWORD = _LM_OWF_PASSWORD;
  260. {$EXTERNALSYM LM_OWF_PASSWORD}
  261. TLmOwfPassword = LM_OWF_PASSWORD;
  262. PLmOwfPassword = PLM_OWF_PASSWORD;
  263. LM_CHALLENGE = CLEAR_BLOCK;
  264. {$EXTERNALSYM LM_CHALLENGE}
  265. PLM_CHALLENGE = ^LM_CHALLENGE;
  266. {$EXTERNALSYM PLM_CHALLENGE}
  267. NT_OWF_PASSWORD = LM_OWF_PASSWORD;
  268. {$EXTERNALSYM NT_OWF_PASSWORD}
  269. PNT_OWF_PASSWORD = ^NT_OWF_PASSWORD;
  270. {$EXTERNALSYM PNT_OWF_PASSWORD}
  271. NT_CHALLENGE = LM_CHALLENGE;
  272. {$EXTERNALSYM NT_CHALLENGE}
  273. PNT_CHALLENGE = ^NT_CHALLENGE;
  274. {$EXTERNALSYM PNT_CHALLENGE}
  275. const
  276. USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2;
  277. {$EXTERNALSYM USER_SESSION_KEY_LENGTH}
  278. type
  279. PUSER_SESSION_KEY = ^USER_SESSION_KEY;
  280. {$EXTERNALSYM PUSER_SESSION_KEY}
  281. _USER_SESSION_KEY = record
  282. data: array [0..1] of CYPHER_BLOCK;
  283. end;
  284. {$EXTERNALSYM _USER_SESSION_KEY}
  285. USER_SESSION_KEY = _USER_SESSION_KEY;
  286. {$EXTERNALSYM USER_SESSION_KEY}
  287. TUserSessionKey = USER_SESSION_KEY;
  288. PUserSessionKey = PUSER_SESSION_KEY;
  289. _NETLOGON_LOGON_INFO_CLASS = (
  290. NetlogonFiller0,
  291. NetlogonInteractiveInformation,
  292. NetlogonNetworkInformation,
  293. NetlogonServiceInformation,
  294. NetlogonGenericInformation,
  295. NetlogonInteractiveTransitiveInformation,
  296. NetlogonNetworkTransitiveInformation,
  297. NetlogonServiceTransitiveInformation);
  298. {$EXTERNALSYM _NETLOGON_LOGON_INFO_CLASS}
  299. NETLOGON_LOGON_INFO_CLASS = _NETLOGON_LOGON_INFO_CLASS;
  300. {$EXTERNALSYM NETLOGON_LOGON_INFO_CLASS}
  301. PNETLOGON_LOGON_IDENTITY_INFO = ^NETLOGON_LOGON_IDENTITY_INFO;
  302. {$EXTERNALSYM PNETLOGON_LOGON_IDENTITY_INFO}
  303. _NETLOGON_LOGON_IDENTITY_INFO = record
  304. LogonDomainName: UNICODE_STRING;
  305. ParameterControl: ULONG;
  306. LogonId: OLD_LARGE_INTEGER;
  307. UserName: UNICODE_STRING;
  308. Workstation: UNICODE_STRING;
  309. end;
  310. {$EXTERNALSYM _NETLOGON_LOGON_IDENTITY_INFO}
  311. NETLOGON_LOGON_IDENTITY_INFO = _NETLOGON_LOGON_IDENTITY_INFO;
  312. {$EXTERNALSYM NETLOGON_LOGON_IDENTITY_INFO}
  313. TNetlogonLogonIdentityInfo = NETLOGON_LOGON_IDENTITY_INFO;
  314. PNetlogonLogonIdentityInfo = PNETLOGON_LOGON_IDENTITY_INFO;
  315. PNETLOGON_INTERACTIVE_INFO = ^NETLOGON_INTERACTIVE_INFO;
  316. {$EXTERNALSYM PNETLOGON_INTERACTIVE_INFO}
  317. _NETLOGON_INTERACTIVE_INFO = record
  318. Identity: NETLOGON_LOGON_IDENTITY_INFO;
  319. LmOwfPassword: LM_OWF_PASSWORD;
  320. NtOwfPassword: NT_OWF_PASSWORD;
  321. end;
  322. {$EXTERNALSYM _NETLOGON_INTERACTIVE_INFO}
  323. NETLOGON_INTERACTIVE_INFO = _NETLOGON_INTERACTIVE_INFO;
  324. {$EXTERNALSYM NETLOGON_INTERACTIVE_INFO}
  325. TNetlogonInteractiveInfo = NETLOGON_INTERACTIVE_INFO;
  326. PNetlogonInteractiveInfo = PNETLOGON_INTERACTIVE_INFO;
  327. PNETLOGON_SERVICE_INFO = ^NETLOGON_SERVICE_INFO;
  328. {$EXTERNALSYM PNETLOGON_SERVICE_INFO}
  329. _NETLOGON_SERVICE_INFO = record
  330. Identity: NETLOGON_LOGON_IDENTITY_INFO;
  331. LmOwfPassword: LM_OWF_PASSWORD;
  332. NtOwfPassword: NT_OWF_PASSWORD;
  333. end;
  334. {$EXTERNALSYM _NETLOGON_SERVICE_INFO}
  335. NETLOGON_SERVICE_INFO = _NETLOGON_SERVICE_INFO;
  336. {$EXTERNALSYM NETLOGON_SERVICE_INFO}
  337. TNetlogonServiceInfo = NETLOGON_SERVICE_INFO;
  338. PNetlogonServiceInfo = PNETLOGON_SERVICE_INFO;
  339. PNETLOGON_NETWORK_INFO = ^NETLOGON_NETWORK_INFO;
  340. {$EXTERNALSYM PNETLOGON_NETWORK_INFO}
  341. _NETLOGON_NETWORK_INFO = record
  342. Identity: NETLOGON_LOGON_IDENTITY_INFO;
  343. LmChallenge: LM_CHALLENGE;
  344. NtChallengeResponse: _STRING;
  345. LmChallengeResponse: _STRING;
  346. end;
  347. {$EXTERNALSYM _NETLOGON_NETWORK_INFO}
  348. NETLOGON_NETWORK_INFO = _NETLOGON_NETWORK_INFO;
  349. {$EXTERNALSYM NETLOGON_NETWORK_INFO}
  350. TNetlogonNetworkInfo = NETLOGON_NETWORK_INFO;
  351. PNetlogonNetworkInfo = PNETLOGON_NETWORK_INFO;
  352. PNETLOGON_GENERIC_INFO = ^NETLOGON_GENERIC_INFO;
  353. {$EXTERNALSYM PNETLOGON_GENERIC_INFO}
  354. _NETLOGON_GENERIC_INFO = record
  355. Identity: NETLOGON_LOGON_IDENTITY_INFO;
  356. PackageName: UNICODE_STRING;
  357. DataLength: ULONG;
  358. LogonData: PUCHAR;
  359. end;
  360. {$EXTERNALSYM _NETLOGON_GENERIC_INFO}
  361. NETLOGON_GENERIC_INFO = _NETLOGON_GENERIC_INFO;
  362. {$EXTERNALSYM NETLOGON_GENERIC_INFO}
  363. TNetlogonGenericInfo = NETLOGON_GENERIC_INFO;
  364. PNetlogonGenericInfo = PNETLOGON_GENERIC_INFO;
  365. // Values for Flags
  366. const
  367. MSV1_0_PASSTHRU = $01;
  368. {$EXTERNALSYM MSV1_0_PASSTHRU}
  369. MSV1_0_GUEST_LOGON = $02;
  370. {$EXTERNALSYM MSV1_0_GUEST_LOGON}
  371. //function Msv1_0SubAuthenticationRoutine(LogonLevel: NETLOGON_LOGON_INFO_CLASS;
  372. // LogonInformation: PVOID; Flags: ULONG; UserAll: PUSER_ALL_INFORMATION;
  373. // WhichFields, UserFlags: PULONG; Authoritative: PBOOLEAN; LogoffTime,
  374. // KickoffTime: PLARGE_INTEGER): NTSTATUS; stdcall;
  375. //{$EXTERNALSYM Msv1_0SubAuthenticationRoutine}
  376. type
  377. PMSV1_0_VALIDATION_INFO = ^MSV1_0_VALIDATION_INFO;
  378. {$EXTERNALSYM PMSV1_0_VALIDATION_INFO}
  379. _MSV1_0_VALIDATION_INFO = record
  380. LogoffTime: LARGE_INTEGER;
  381. KickoffTime: LARGE_INTEGER;
  382. LogonServer: UNICODE_STRING;
  383. LogonDomainName: UNICODE_STRING;
  384. SessionKey: USER_SESSION_KEY;
  385. Authoritative: ByteBool;
  386. UserFlags: ULONG;
  387. WhichFields: ULONG;
  388. UserId: ULONG;
  389. end;
  390. {$EXTERNALSYM _MSV1_0_VALIDATION_INFO}
  391. MSV1_0_VALIDATION_INFO = _MSV1_0_VALIDATION_INFO;
  392. {$EXTERNALSYM MSV1_0_VALIDATION_INFO}
  393. TMsv10ValidationInfo = MSV1_0_VALIDATION_INFO;
  394. PMsv10ValidationInfo = PMSV1_0_VALIDATION_INFO;
  395. // values for WhichFields
  396. const
  397. MSV1_0_VALIDATION_LOGOFF_TIME = $00000001;
  398. {$EXTERNALSYM MSV1_0_VALIDATION_LOGOFF_TIME}
  399. MSV1_0_VALIDATION_KICKOFF_TIME = $00000002;
  400. {$EXTERNALSYM MSV1_0_VALIDATION_KICKOFF_TIME}
  401. MSV1_0_VALIDATION_LOGON_SERVER = $00000004;
  402. {$EXTERNALSYM MSV1_0_VALIDATION_LOGON_SERVER}
  403. MSV1_0_VALIDATION_LOGON_DOMAIN = $00000008;
  404. {$EXTERNALSYM MSV1_0_VALIDATION_LOGON_DOMAIN}
  405. MSV1_0_VALIDATION_SESSION_KEY = $00000010;
  406. {$EXTERNALSYM MSV1_0_VALIDATION_SESSION_KEY}
  407. MSV1_0_VALIDATION_USER_FLAGS = $00000020;
  408. {$EXTERNALSYM MSV1_0_VALIDATION_USER_FLAGS}
  409. MSV1_0_VALIDATION_USER_ID = $00000040;
  410. {$EXTERNALSYM MSV1_0_VALIDATION_USER_ID}
  411. // legal values for ActionsPerformed
  412. MSV1_0_SUBAUTH_ACCOUNT_DISABLED = $00000001;
  413. {$EXTERNALSYM MSV1_0_SUBAUTH_ACCOUNT_DISABLED}
  414. MSV1_0_SUBAUTH_PASSWORD = $00000002;
  415. {$EXTERNALSYM MSV1_0_SUBAUTH_PASSWORD}
  416. MSV1_0_SUBAUTH_WORKSTATIONS = $00000004;
  417. {$EXTERNALSYM MSV1_0_SUBAUTH_WORKSTATIONS}
  418. MSV1_0_SUBAUTH_LOGON_HOURS = $00000008;
  419. {$EXTERNALSYM MSV1_0_SUBAUTH_LOGON_HOURS}
  420. MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = $00000010;
  421. {$EXTERNALSYM MSV1_0_SUBAUTH_ACCOUNT_EXPIRY}
  422. MSV1_0_SUBAUTH_PASSWORD_EXPIRY = $00000020;
  423. {$EXTERNALSYM MSV1_0_SUBAUTH_PASSWORD_EXPIRY}
  424. MSV1_0_SUBAUTH_ACCOUNT_TYPE = $00000040;
  425. {$EXTERNALSYM MSV1_0_SUBAUTH_ACCOUNT_TYPE}
  426. MSV1_0_SUBAUTH_LOCKOUT = $00000080;
  427. {$EXTERNALSYM MSV1_0_SUBAUTH_LOCKOUT}
  428. //function Msv1_0SubAuthenticationRoutineEx(LogonLevel: NETLOGON_LOGON_INFO_CLASS;
  429. // LogonInformation: PVOID; Flags: ULONG; UserAll: PUSER_ALL_INFORMATION;
  430. // UserHandle: SAM_HANDLE; ValidationInfo: PMSV1_0_VALIDATION_INFO;
  431. // ActionsPerformed: PULONG): NTSTATUS; stdcall;
  432. //{$EXTERNALSYM Msv1_0SubAuthenticationRoutineEx}
  433. //function Msv1_0SubAuthenticationRoutineGeneric(SubmitBuffer: PVOID;
  434. // SubmitBufferLength: ULONG; ReturnBufferLength: PULONG;
  435. // ReturnBuffer: PPVOID): NTSTATUS; stdcall;
  436. //{$EXTERNALSYM Msv1_0SubAuthenticationRoutineGeneric}
  437. //function Msv1_0SubAuthenticationFilter(LogonLevel: NETLOGON_LOGON_INFO_CLASS;
  438. // LogonInformation: PVOID; Flags: ULONG; UserAll: PUSER_ALL_INFORMATION;
  439. // WhichFields, UserFlags: PULONG; Authoritative: PBOOLEAN; LogoffTime,
  440. // KickoffTime: PLARGE_INTEGER): NTSTATUS; stdcall;
  441. //{$EXTERNALSYM Msv1_0SubAuthenticationFilter}
  442. {$IFNDEF JWA_INCLUDEMODE}
  443. const
  444. STATUS_SUCCESS = NTSTATUS($00000000);
  445. {$EXTERNALSYM STATUS_SUCCESS}
  446. STATUS_INVALID_INFO_CLASS = NTSTATUS($C0000003);
  447. {$EXTERNALSYM STATUS_INVALID_INFO_CLASS}
  448. STATUS_NO_SUCH_USER = NTSTATUS($C0000064);
  449. {$EXTERNALSYM STATUS_NO_SUCH_USER}
  450. STATUS_WRONG_PASSWORD = NTSTATUS($C000006A);
  451. {$EXTERNALSYM STATUS_WRONG_PASSWORD}
  452. STATUS_PASSWORD_RESTRICTION = NTSTATUS($C000006C);
  453. {$EXTERNALSYM STATUS_PASSWORD_RESTRICTION}
  454. STATUS_LOGON_FAILURE = NTSTATUS($C000006D);
  455. {$EXTERNALSYM STATUS_LOGON_FAILURE}
  456. STATUS_ACCOUNT_RESTRICTION = NTSTATUS($C000006E);
  457. {$EXTERNALSYM STATUS_ACCOUNT_RESTRICTION}
  458. STATUS_INVALID_LOGON_HOURS = NTSTATUS($C000006F);
  459. {$EXTERNALSYM STATUS_INVALID_LOGON_HOURS}
  460. STATUS_INVALID_WORKSTATION = NTSTATUS($C0000070);
  461. {$EXTERNALSYM STATUS_INVALID_WORKSTATION}
  462. STATUS_PASSWORD_EXPIRED = NTSTATUS($C0000071);
  463. {$EXTERNALSYM STATUS_PASSWORD_EXPIRED}
  464. STATUS_ACCOUNT_DISABLED = NTSTATUS($C0000072);
  465. {$EXTERNALSYM STATUS_ACCOUNT_DISABLED}
  466. STATUS_INSUFFICIENT_RESOURCES = NTSTATUS($C000009A);
  467. {$EXTERNALSYM STATUS_INSUFFICIENT_RESOURCES}
  468. STATUS_ACCOUNT_EXPIRED = NTSTATUS($C0000193);
  469. {$EXTERNALSYM STATUS_ACCOUNT_EXPIRED}
  470. STATUS_PASSWORD_MUST_CHANGE = NTSTATUS($C0000224);
  471. {$EXTERNALSYM STATUS_PASSWORD_MUST_CHANGE}
  472. STATUS_ACCOUNT_LOCKED_OUT = NTSTATUS($C0000234);
  473. {$EXTERNALSYM STATUS_ACCOUNT_LOCKED_OUT}
  474. {$ENDIF JWA_INCLUDEMODE}
  475. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  476. {$IFNDEF JWA_OMIT_SECTIONS}
  477. implementation
  478. //uses ...
  479. {$ENDIF JWA_OMIT_SECTIONS}
  480. {$IFNDEF JWA_INTERFACESECTION}
  481. //your implementation here
  482. {$ENDIF JWA_INTERFACESECTION}
  483. {$IFNDEF JWA_OMIT_SECTIONS}
  484. end.
  485. {$ENDIF JWA_OMIT_SECTIONS}