jwantsecapi.pas 142 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111
  1. {******************************************************************************}
  2. { }
  3. { LSA 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: ntsecapi.h, released June 2000. The original Pascal }
  9. { code is: NtSecApi.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: JwaNtSecApi.pas,v 1.13 2005/09/08 07:49:25 marquardt Exp $
  43. unit JwaNtSecApi;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "ntsecapi.h"'}
  47. {$HPPEMIT ''}
  48. {$I jediapilib.inc}
  49. interface
  50. uses
  51. JwaWindows;
  52. //
  53. // Security operation mode of the system is held in a control
  54. // longword.
  55. //
  56. type
  57. LSA_OPERATIONAL_MODE = ULONG;
  58. {$EXTERNALSYM LSA_OPERATIONAL_MODE}
  59. PLSA_OPERATIONAL_MODE = ^LSA_OPERATIONAL_MODE;
  60. {$EXTERNALSYM PLSA_OPERATIONAL_MODE}
  61. //
  62. // The flags in the security operational mode are defined
  63. // as:
  64. //
  65. // PasswordProtected - Some level of authentication (such as
  66. // a password) must be provided by users before they are
  67. // allowed to use the system. Once set, this value will
  68. // not be cleared without re-booting the system.
  69. //
  70. // IndividualAccounts - Each user must identify an account to
  71. // logon to. This flag is only meaningful if the
  72. // PasswordProtected flag is also set. If this flag is
  73. // not set and the PasswordProtected flag is set, then all
  74. // users may logon to the same account. Once set, this value
  75. // will not be cleared without re-booting the system.
  76. //
  77. // MandatoryAccess - Indicates the system is running in a mandatory
  78. // access control mode (e.g., B-level as defined by the U.S.A's
  79. // Department of Defense's "Orange Book"). This is not utilized
  80. // in the current release of NT. This flag is only meaningful
  81. // if both the PasswordProtected and IndividualAccounts flags are
  82. // set. Once set, this value will not be cleared without
  83. // re-booting the system.
  84. //
  85. // LogFull - Indicates the system has been brought up in a mode in
  86. // which if must perform security auditing, but its audit log
  87. // is full. This may (should) restrict the operations that
  88. // can occur until the audit log is made not-full again. THIS
  89. // VALUE MAY BE CLEARED WHILE THE SYSTEM IS RUNNING (I.E., WITHOUT
  90. // REBOOTING).
  91. //
  92. // If the PasswordProtected flag is not set, then the system is running
  93. // without security, and user interface should be adjusted appropriately.
  94. //
  95. const
  96. LSA_MODE_PASSWORD_PROTECTED = $00000001;
  97. {$EXTERNALSYM LSA_MODE_PASSWORD_PROTECTED}
  98. LSA_MODE_INDIVIDUAL_ACCOUNTS = $00000002;
  99. {$EXTERNALSYM LSA_MODE_INDIVIDUAL_ACCOUNTS}
  100. LSA_MODE_MANDATORY_ACCESS = $00000004;
  101. {$EXTERNALSYM LSA_MODE_MANDATORY_ACCESS}
  102. LSA_MODE_LOG_FULL = $00000008;
  103. {$EXTERNALSYM LSA_MODE_LOG_FULL}
  104. //
  105. // Used by a logon process to indicate what type of logon is being
  106. // requested.
  107. //
  108. type
  109. _SECURITY_LOGON_TYPE = (
  110. seltFiller0, seltFiller1,
  111. Interactive, // Interactively logged on (locally or remotely)
  112. Network, // Accessing system via network
  113. Batch, // Started via a batch queue
  114. Service, // Service started by service controller
  115. Proxy, // Proxy logon
  116. Unlock, // Unlock workstation
  117. NetworkCleartext, // Network logon with cleartext credentials
  118. NewCredentials, // Clone caller, new default credentials
  119. RemoteInteractive, // Remote, yet interactive. Terminal server
  120. CachedInteractive, // Try cached credentials without hitting the net.
  121. CachedRemoteInteractive, // Same as RemoteInteractive, this is used internally for auditing purpose
  122. CachedUnlock); // Cached Unlock workstation
  123. {$EXTERNALSYM _SECURITY_LOGON_TYPE}
  124. SECURITY_LOGON_TYPE = _SECURITY_LOGON_TYPE;
  125. {$EXTERNALSYM SECURITY_LOGON_TYPE}
  126. PSECURITY_LOGON_TYPE = ^SECURITY_LOGON_TYPE;
  127. {$EXTERNALSYM PSECURITY_LOGON_TYPE}
  128. TSecurityLogonType = SECURITY_LOGON_TYPE;
  129. PSecurityLogonType = PSECURITY_LOGON_TYPE;
  130. //
  131. // Audit Event Categories
  132. //
  133. // The following are the built-in types or Categories of audit event.
  134. // WARNING! This structure is subject to expansion. The user should not
  135. // compute the number of elements of this type directly, but instead
  136. // should obtain the count of elements by calling LsaQueryInformationPolicy()
  137. // for the PolicyAuditEventsInformation class and extracting the count from
  138. // the MaximumAuditEventCount field of the returned structure.
  139. //
  140. _POLICY_AUDIT_EVENT_TYPE = (
  141. AuditCategorySystem,
  142. AuditCategoryLogon,
  143. AuditCategoryObjectAccess,
  144. AuditCategoryPrivilegeUse,
  145. AuditCategoryDetailedTracking,
  146. AuditCategoryPolicyChange,
  147. AuditCategoryAccountManagement,
  148. AuditCategoryDirectoryServiceAccess,
  149. AuditCategoryAccountLogon);
  150. {$EXTERNALSYM _POLICY_AUDIT_EVENT_TYPE}
  151. POLICY_AUDIT_EVENT_TYPE = _POLICY_AUDIT_EVENT_TYPE;
  152. {$EXTERNALSYM POLICY_AUDIT_EVENT_TYPE}
  153. PPOLICY_AUDIT_EVENT_TYPE = ^POLICY_AUDIT_EVENT_TYPE;
  154. {$EXTERNALSYM PPOLICY_AUDIT_EVENT_TYPE}
  155. TPolicyAuditEventType = POLICY_AUDIT_EVENT_TYPE;
  156. PPolicyAuditEventType = PPOLICY_AUDIT_EVENT_TYPE;
  157. //
  158. // The following defines describe the auditing options for each
  159. // event type
  160. //
  161. const
  162. // Leave options specified for this event unchanged
  163. POLICY_AUDIT_EVENT_UNCHANGED = $00000000;
  164. {$EXTERNALSYM POLICY_AUDIT_EVENT_UNCHANGED}
  165. // Audit successful occurrences of events of this type
  166. POLICY_AUDIT_EVENT_SUCCESS = $00000001;
  167. {$EXTERNALSYM POLICY_AUDIT_EVENT_SUCCESS}
  168. // Audit failed attempts to cause an event of this type to occur
  169. POLICY_AUDIT_EVENT_FAILURE = $00000002;
  170. {$EXTERNALSYM POLICY_AUDIT_EVENT_FAILURE}
  171. POLICY_AUDIT_EVENT_NONE = $00000004;
  172. {$EXTERNALSYM POLICY_AUDIT_EVENT_NONE}
  173. // Mask of valid event auditing options
  174. POLICY_AUDIT_EVENT_MASK = (POLICY_AUDIT_EVENT_SUCCESS or POLICY_AUDIT_EVENT_FAILURE or
  175. POLICY_AUDIT_EVENT_UNCHANGED or POLICY_AUDIT_EVENT_NONE);
  176. {$EXTERNALSYM POLICY_AUDIT_EVENT_MASK}
  177. TPolicyAuditEventMask = POLICY_AUDIT_EVENT_MASK;
  178. type
  179. PLSA_UNICODE_STRING = ^LSA_UNICODE_STRING;
  180. {$EXTERNALSYM PLSA_UNICODE_STRING}
  181. _LSA_UNICODE_STRING = record
  182. Length: USHORT;
  183. MaximumLength: USHORT;
  184. Buffer: PWSTR;
  185. end;
  186. {$EXTERNALSYM _LSA_UNICODE_STRING}
  187. LSA_UNICODE_STRING = _LSA_UNICODE_STRING;
  188. {$EXTERNALSYM LSA_UNICODE_STRING}
  189. TLsaUnicodeString = LSA_UNICODE_STRING;
  190. PLsaUnicodeString = PLSA_UNICODE_STRING;
  191. PLSA_STRING = ^LSA_STRING;
  192. {$EXTERNALSYM PLSA_STRING}
  193. _LSA_STRING = record
  194. Length: USHORT;
  195. MaximumLength: USHORT;
  196. Buffer: PCHAR;
  197. end;
  198. {$EXTERNALSYM _LSA_STRING}
  199. LSA_STRING = _LSA_STRING;
  200. {$EXTERNALSYM LSA_STRING}
  201. TLsaString = LSA_STRING;
  202. PLsaString = PLSA_STRING;
  203. PLSA_OBJECT_ATTRIBUTES = ^LSA_OBJECT_ATTRIBUTES;
  204. {$EXTERNALSYM PLSA_OBJECT_ATTRIBUTES}
  205. _LSA_OBJECT_ATTRIBUTES = record
  206. Length: ULONG;
  207. RootDirectory: HANDLE;
  208. ObjectName: PLSA_UNICODE_STRING;
  209. Attributes: ULONG;
  210. SecurityDescriptor: PVOID; // Points to type SECURITY_DESCRIPTOR
  211. SecurityQualityOfService: PVOID; // Points to type SECURITY_QUALITY_OF_SERVICE
  212. end;
  213. {$EXTERNALSYM _LSA_OBJECT_ATTRIBUTES}
  214. LSA_OBJECT_ATTRIBUTES = _LSA_OBJECT_ATTRIBUTES;
  215. {$EXTERNALSYM LSA_OBJECT_ATTRIBUTES}
  216. TLsaObjectAttributes = LSA_OBJECT_ATTRIBUTES;
  217. PLsaObjectAttributes = PLSA_OBJECT_ATTRIBUTES;
  218. //
  219. // Macro for determining whether an API succeeded.
  220. //
  221. function LSA_SUCCESS(Error: NTSTATUS): BOOL;
  222. {$EXTERNALSYM LSA_SUCCESS}
  223. function LsaRegisterLogonProcess(const LogonProcessName: LSA_STRING;
  224. var LsaHandle: HANDLE; SecurityMode: PLSA_OPERATIONAL_MODE): NTSTATUS; stdcall;
  225. {$EXTERNALSYM LsaRegisterLogonProcess}
  226. function LsaLogonUser(LsaHandle: HANDLE; const OriginName: LSA_STRING;
  227. LogonType: SECURITY_LOGON_TYPE; AuthenticationPackage: ULONG;
  228. AuthenticationInformation: PVOID; AuthenticationInformationLength: ULONG;
  229. LocalGroups: PTOKEN_GROUPS; SourceContext: PTOKEN_SOURCE;
  230. var ProfileBuffer: PVOID; var ProfileBufferLength: ULONG; var LogonId: LUID;
  231. var Token: HANDLE; var Quotas: QUOTA_LIMITS; var SubStatus: NTSTATUS): NTSTATUS; stdcall;
  232. {$EXTERNALSYM LsaLogonUser}
  233. function LsaLookupAuthenticationPackage(LsaHandle: HANDLE;
  234. const PackageName: LSA_STRING; var AuthenticationPackage: ULONG): NTSTATUS; stdcall;
  235. {$EXTERNALSYM LsaLookupAuthenticationPackage}
  236. function LsaFreeReturnBuffer(Buffer: PVOID): NTSTATUS; stdcall;
  237. {$EXTERNALSYM LsaFreeReturnBuffer}
  238. function LsaCallAuthenticationPackage(LsaHandle: HANDLE;
  239. AuthenticationPackage: ULONG; ProtocolSubmitBuffer: PVOID;
  240. SubmitBufferLength: ULONG; var ProtocolReturnBuffer: PVOID;
  241. var ReturnBufferLength: ULONG; var ProtocolStatus: NTSTATUS): NTSTATUS; stdcall;
  242. {$EXTERNALSYM LsaCallAuthenticationPackage}
  243. function LsaDeregisterLogonProcess(LsaHandle: HANDLE): NTSTATUS; stdcall;
  244. {$EXTERNALSYM LsaDeregisterLogonProcess}
  245. function LsaConnectUntrusted(var LsaHandle: HANDLE): NTSTATUS; stdcall;
  246. {$EXTERNALSYM LsaConnectUntrusted}
  247. ////////////////////////////////////////////////////////////////////////////
  248. // //
  249. // Local Security Policy Administration API datatypes and defines //
  250. // //
  251. ////////////////////////////////////////////////////////////////////////////
  252. //
  253. // Access types for the Policy object
  254. //
  255. const
  256. POLICY_VIEW_LOCAL_INFORMATION = $00000001;
  257. {$EXTERNALSYM POLICY_VIEW_LOCAL_INFORMATION}
  258. POLICY_VIEW_AUDIT_INFORMATION = $00000002;
  259. {$EXTERNALSYM POLICY_VIEW_AUDIT_INFORMATION}
  260. POLICY_GET_PRIVATE_INFORMATION = $00000004;
  261. {$EXTERNALSYM POLICY_GET_PRIVATE_INFORMATION}
  262. POLICY_TRUST_ADMIN = $00000008;
  263. {$EXTERNALSYM POLICY_TRUST_ADMIN}
  264. POLICY_CREATE_ACCOUNT = $00000010;
  265. {$EXTERNALSYM POLICY_CREATE_ACCOUNT}
  266. POLICY_CREATE_SECRET = $00000020;
  267. {$EXTERNALSYM POLICY_CREATE_SECRET}
  268. POLICY_CREATE_PRIVILEGE = $00000040;
  269. {$EXTERNALSYM POLICY_CREATE_PRIVILEGE}
  270. POLICY_SET_DEFAULT_QUOTA_LIMITS = $00000080;
  271. {$EXTERNALSYM POLICY_SET_DEFAULT_QUOTA_LIMITS}
  272. POLICY_SET_AUDIT_REQUIREMENTS = $00000100;
  273. {$EXTERNALSYM POLICY_SET_AUDIT_REQUIREMENTS}
  274. POLICY_AUDIT_LOG_ADMIN = $00000200;
  275. {$EXTERNALSYM POLICY_AUDIT_LOG_ADMIN}
  276. POLICY_SERVER_ADMIN = $00000400;
  277. {$EXTERNALSYM POLICY_SERVER_ADMIN}
  278. POLICY_LOOKUP_NAMES = $00000800;
  279. {$EXTERNALSYM POLICY_LOOKUP_NAMES}
  280. POLICY_NOTIFICATION = $00001000;
  281. {$EXTERNALSYM POLICY_NOTIFICATION}
  282. POLICY_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or
  283. POLICY_VIEW_LOCAL_INFORMATION or
  284. POLICY_VIEW_AUDIT_INFORMATION or
  285. POLICY_GET_PRIVATE_INFORMATION or
  286. POLICY_TRUST_ADMIN or
  287. POLICY_CREATE_ACCOUNT or
  288. POLICY_CREATE_SECRET or
  289. POLICY_CREATE_PRIVILEGE or
  290. POLICY_SET_DEFAULT_QUOTA_LIMITS or
  291. POLICY_SET_AUDIT_REQUIREMENTS or
  292. POLICY_AUDIT_LOG_ADMIN or
  293. POLICY_SERVER_ADMIN or
  294. POLICY_LOOKUP_NAMES);
  295. {$EXTERNALSYM POLICY_ALL_ACCESS}
  296. POLICY_READ = (STANDARD_RIGHTS_READ or
  297. POLICY_VIEW_AUDIT_INFORMATION or
  298. POLICY_GET_PRIVATE_INFORMATION);
  299. {$EXTERNALSYM POLICY_READ}
  300. POLICY_WRITE = (STANDARD_RIGHTS_WRITE or
  301. POLICY_TRUST_ADMIN or
  302. POLICY_CREATE_ACCOUNT or
  303. POLICY_CREATE_SECRET or
  304. POLICY_CREATE_PRIVILEGE or
  305. POLICY_SET_DEFAULT_QUOTA_LIMITS or
  306. POLICY_SET_AUDIT_REQUIREMENTS or
  307. POLICY_AUDIT_LOG_ADMIN or
  308. POLICY_SERVER_ADMIN);
  309. {$EXTERNALSYM POLICY_WRITE}
  310. POLICY_EXECUTE = (STANDARD_RIGHTS_EXECUTE or
  311. POLICY_VIEW_LOCAL_INFORMATION or
  312. POLICY_LOOKUP_NAMES);
  313. {$EXTERNALSYM POLICY_EXECUTE}
  314. //
  315. // Policy object specific data types.
  316. //
  317. //
  318. // The following data type is used to identify a domain
  319. //
  320. type
  321. PLSA_TRUST_INFORMATION = ^LSA_TRUST_INFORMATION;
  322. {$EXTERNALSYM PLSA_TRUST_INFORMATION}
  323. _LSA_TRUST_INFORMATION = record
  324. Name: LSA_UNICODE_STRING;
  325. Sid: PSID;
  326. end;
  327. {$EXTERNALSYM _LSA_TRUST_INFORMATION}
  328. LSA_TRUST_INFORMATION = _LSA_TRUST_INFORMATION;
  329. {$EXTERNALSYM LSA_TRUST_INFORMATION}
  330. TLsaTrustInformation = LSA_TRUST_INFORMATION;
  331. PLsaTrustInformation = PLSA_TRUST_INFORMATION;
  332. // where members have the following usage:
  333. //
  334. // Name - The name of the domain.
  335. //
  336. // Sid - A pointer to the Sid of the Domain
  337. //
  338. //
  339. // The following data type is used in name and SID lookup services to
  340. // describe the domains referenced in the lookup operation.
  341. //
  342. PLSA_REFERENCED_DOMAIN_LIST = ^LSA_REFERENCED_DOMAIN_LIST;
  343. {$EXTERNALSYM PLSA_REFERENCED_DOMAIN_LIST}
  344. _LSA_REFERENCED_DOMAIN_LIST = record
  345. Entries: ULONG;
  346. Domains: PLSA_TRUST_INFORMATION;
  347. end;
  348. {$EXTERNALSYM _LSA_REFERENCED_DOMAIN_LIST}
  349. LSA_REFERENCED_DOMAIN_LIST = _LSA_REFERENCED_DOMAIN_LIST;
  350. {$EXTERNALSYM LSA_REFERENCED_DOMAIN_LIST}
  351. TLsaReferencedDomainList = LSA_REFERENCED_DOMAIN_LIST;
  352. PLsaReferencedDomainList = PLSA_REFERENCED_DOMAIN_LIST;
  353. // where members have the following usage:
  354. //
  355. // Entries - Is a count of the number of domains described in the
  356. // Domains array.
  357. //
  358. // Domains - Is a pointer to an array of Entries LSA_TRUST_INFORMATION data
  359. // structures.
  360. //
  361. //
  362. // The following data type is used in name to SID lookup services to describe
  363. // the domains referenced in the lookup operation.
  364. //
  365. PLSA_TRANSLATED_SID = ^LSA_TRANSLATED_SID;
  366. {$EXTERNALSYM PLSA_TRANSLATED_SID}
  367. _LSA_TRANSLATED_SID = record
  368. Use: SID_NAME_USE;
  369. RelativeId: ULONG;
  370. DomainIndex: LONG;
  371. end;
  372. {$EXTERNALSYM _LSA_TRANSLATED_SID}
  373. LSA_TRANSLATED_SID = _LSA_TRANSLATED_SID;
  374. {$EXTERNALSYM LSA_TRANSLATED_SID}
  375. TLsaTranslatedSid = LSA_TRANSLATED_SID;
  376. PLsaTranslatedSid = PLSA_TRANSLATED_SID;
  377. // where members have the following usage:
  378. //
  379. // Use - identifies the use of the SID. If this value is SidUnknown or
  380. // SidInvalid, then the remainder of the record is not set and
  381. // should be ignored.
  382. //
  383. // RelativeId - Contains the relative ID of the translated SID. The
  384. // remainder of the SID (the prefix) is obtained using the
  385. // DomainIndex field.
  386. //
  387. // DomainIndex - Is the index of an entry in a related
  388. // LSA_REFERENCED_DOMAIN_LIST data structure describing the
  389. // domain in which the account was found.
  390. //
  391. // If there is no corresponding reference domain for an entry, then
  392. // this field will contain a negative value.
  393. //
  394. _LSA_TRANSLATED_SID2 = record
  395. Use: SID_NAME_USE;
  396. Sid: PSID;
  397. DomainIndex: LONG;
  398. Flags: ULONG;
  399. end;
  400. {$EXTERNALSYM _LSA_TRANSLATED_SID2}
  401. LSA_TRANSLATED_SID2 = _LSA_TRANSLATED_SID2;
  402. {$EXTERNALSYM LSA_TRANSLATED_SID2}
  403. PLSA_TRANSLATED_SID2 = ^LSA_TRANSLATED_SID2;
  404. {$EXTERNALSYM PLSA_TRANSLATED_SID2}
  405. TLsaTranslatedSid2 = LSA_TRANSLATED_SID2;
  406. PLsaTranslatedSid2 = PLSA_TRANSLATED_SID2;
  407. // where members have the following usage:
  408. //
  409. // Use - identifies the use of the SID. If this value is SidUnknown or
  410. // SidInvalid, then the remainder of the record is not set and
  411. // should be ignored.
  412. //
  413. // Sid - Contains the complete Sid of the tranlated SID
  414. //
  415. // DomainIndex - Is the index of an entry in a related
  416. // LSA_REFERENCED_DOMAIN_LIST data structure describing the
  417. // domain in which the account was found.
  418. //
  419. // If there is no corresponding reference domain for an entry, then
  420. // this field will contain a negative value.
  421. //
  422. //
  423. // The following data type is used in SID to name lookup services to
  424. // describe the domains referenced in the lookup operation.
  425. //
  426. PLSA_TRANSLATED_NAME = ^LSA_TRANSLATED_NAME;
  427. {$EXTERNALSYM PLSA_TRANSLATED_NAME}
  428. _LSA_TRANSLATED_NAME = record
  429. Use: SID_NAME_USE;
  430. Name: LSA_UNICODE_STRING;
  431. DomainIndex: LONG;
  432. end;
  433. {$EXTERNALSYM _LSA_TRANSLATED_NAME}
  434. LSA_TRANSLATED_NAME = _LSA_TRANSLATED_NAME;
  435. {$EXTERNALSYM LSA_TRANSLATED_NAME}
  436. TLsaTranslatedName = LSA_TRANSLATED_NAME;
  437. PLsaTranslatedName = PLSA_TRANSLATED_NAME;
  438. // where the members have the following usage:
  439. //
  440. // Use - Identifies the use of the name. If this value is SidUnknown
  441. // or SidInvalid, then the remainder of the record is not set and
  442. // should be ignored. If this value is SidWellKnownGroup then the
  443. // Name field is invalid, but the DomainIndex field is not.
  444. //
  445. // Name - Contains the isolated name of the translated SID.
  446. //
  447. // DomainIndex - Is the index of an entry in a related
  448. // LSA_REFERENCED_DOMAIN_LIST data structure describing the domain
  449. // in which the account was found.
  450. //
  451. // If there is no corresponding reference domain for an entry, then
  452. // this field will contain a negative value.
  453. //
  454. //
  455. // The following data type is used to represent the role of the LSA
  456. // server (primary or backup).
  457. //
  458. _POLICY_LSA_SERVER_ROLE = (plsrFiller0, plsrFiller1, PolicyServerRoleBackup,
  459. PolicyServerRolePrimary);
  460. {$EXTERNALSYM _POLICY_LSA_SERVER_ROLE}
  461. POLICY_LSA_SERVER_ROLE = _POLICY_LSA_SERVER_ROLE;
  462. {$EXTERNALSYM POLICY_LSA_SERVER_ROLE}
  463. PPOLICY_LSA_SERVER_ROLE = ^POLICY_LSA_SERVER_ROLE;
  464. {$EXTERNALSYM PPOLICY_LSA_SERVER_ROLE}
  465. TPolicyLsaServerRole = POLICY_LSA_SERVER_ROLE;
  466. PPolicyLsaServerRole = PPOLICY_LSA_SERVER_ROLE;
  467. //
  468. // The following data type is used to specify the auditing options for
  469. // an Audit Event Type.
  470. //
  471. POLICY_AUDIT_EVENT_OPTIONS = ULONG;
  472. {$EXTERNALSYM POLICY_AUDIT_EVENT_OPTIONS}
  473. PPOLICY_AUDIT_EVENT_OPTIONS = ^POLICY_AUDIT_EVENT_OPTIONS;
  474. {$EXTERNALSYM PPOLICY_AUDIT_EVENT_OPTIONS}
  475. // where the following flags can be set:
  476. //
  477. // POLICY_AUDIT_EVENT_UNCHANGED - Leave existing auditing options
  478. // unchanged for events of this type. This flag is only used for
  479. // set operations. If this flag is set, then all other flags
  480. // are ignored.
  481. //
  482. // POLICY_AUDIT_EVENT_NONE - Cancel all auditing options for events
  483. // of this type. If this flag is set, the success/failure flags
  484. // are ignored.
  485. //
  486. // POLICY_AUDIT_EVENT_SUCCESS - When auditing is enabled, audit all
  487. // successful occurrences of events of the given type.
  488. //
  489. // POLICY_AUDIT_EVENT_FAILURE - When auditing is enabled, audit all
  490. // unsuccessful occurrences of events of the given type.
  491. //
  492. //
  493. // The following data type defines the classes of Policy Information
  494. // that may be queried/set.
  495. //
  496. type
  497. _POLICY_INFORMATION_CLASS = (
  498. picFiller0,
  499. PolicyAuditLogInformation,
  500. PolicyAuditEventsInformation,
  501. PolicyPrimaryDomainInformation,
  502. PolicyPdAccountInformation,
  503. PolicyAccountDomainInformation,
  504. PolicyLsaServerRoleInformation,
  505. PolicyReplicaSourceInformation,
  506. PolicyDefaultQuotaInformation,
  507. PolicyModificationInformation,
  508. PolicyAuditFullSetInformation,
  509. PolicyAuditFullQueryInformation,
  510. PolicyDnsDomainInformation,
  511. PolicyDnsDomainInformationInt);
  512. {$EXTERNALSYM _POLICY_INFORMATION_CLASS}
  513. POLICY_INFORMATION_CLASS = _POLICY_INFORMATION_CLASS;
  514. {$EXTERNALSYM POLICY_INFORMATION_CLASS}
  515. PPOLICY_INFORMATION_CLASS = ^POLICY_INFORMATION_CLASS;
  516. {$EXTERNALSYM PPOLICY_INFORMATION_CLASS}
  517. TPolicyInformationClass = POLICY_INFORMATION_CLASS;
  518. PPolicyInformationClass = PPOLICY_INFORMATION_CLASS;
  519. //
  520. // The following data type corresponds to the PolicyAuditLogInformation
  521. // information class. It is used to represent information relating to
  522. // the Audit Log.
  523. //
  524. // This structure may be used in both query and set operations. However,
  525. // when used in set operations, some fields are ignored.
  526. //
  527. PPOLICY_AUDIT_LOG_INFO = ^POLICY_AUDIT_LOG_INFO;
  528. {$EXTERNALSYM PPOLICY_AUDIT_LOG_INFO}
  529. _POLICY_AUDIT_LOG_INFO = record
  530. AuditLogPercentFull: ULONG;
  531. MaximumLogSize: ULONG;
  532. AuditRetentionPeriod: LARGE_INTEGER;
  533. AuditLogFullShutdownInProgress: ByteBool;
  534. TimeToShutdown: LARGE_INTEGER;
  535. NextAuditRecordId: ULONG;
  536. end;
  537. {$EXTERNALSYM _POLICY_AUDIT_LOG_INFO}
  538. POLICY_AUDIT_LOG_INFO = _POLICY_AUDIT_LOG_INFO;
  539. {$EXTERNALSYM POLICY_AUDIT_LOG_INFO}
  540. TPolicyAuditLogInfo = POLICY_AUDIT_LOG_INFO;
  541. PPolicyAuditLogInfo = PPOLICY_AUDIT_LOG_INFO;
  542. // where the members have the following usage:
  543. //
  544. // AuditLogPercentFull - Indicates the percentage of the Audit Log
  545. // currently being used.
  546. //
  547. // MaximumLogSize - Specifies the maximum size of the Audit Log in
  548. // kilobytes.
  549. //
  550. // AuditRetentionPeriod - Indicates the length of time that Audit
  551. // Records are to be retained. Audit Records are discardable
  552. // if their timestamp predates the current time minus the
  553. // retention period.
  554. //
  555. // AuditLogFullShutdownInProgress - Indicates whether or not a system
  556. // shutdown is being initiated due to the security Audit Log becoming
  557. // full. This condition will only occur if the system is configured
  558. // to shutdown when the log becomes full.
  559. //
  560. // TRUE indicates that a shutdown is in progress
  561. // FALSE indicates that a shutdown is not in progress.
  562. //
  563. // Once a shutdown has been initiated, this flag will be set to
  564. // TRUE. If an administrator is able to currect the situation
  565. // before the shutdown becomes irreversible, then this flag will
  566. // be reset to false.
  567. //
  568. // This field is ignored for set operations.
  569. //
  570. // TimeToShutdown - If the AuditLogFullShutdownInProgress flag is set,
  571. // then this field contains the time left before the shutdown
  572. // becomes irreversible.
  573. //
  574. // This field is ignored for set operations.
  575. //
  576. //
  577. // The following data type corresponds to the PolicyAuditEventsInformation
  578. // information class. It is used to represent information relating to
  579. // the audit requirements.
  580. //
  581. PPOLICY_AUDIT_EVENTS_INFO = ^POLICY_AUDIT_EVENTS_INFO;
  582. {$EXTERNALSYM PPOLICY_AUDIT_EVENTS_INFO}
  583. _POLICY_AUDIT_EVENTS_INFO = record
  584. AuditingMode: ByteBool;
  585. EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS;
  586. MaximumAuditEventCount: ULONG;
  587. end;
  588. {$EXTERNALSYM _POLICY_AUDIT_EVENTS_INFO}
  589. POLICY_AUDIT_EVENTS_INFO = _POLICY_AUDIT_EVENTS_INFO;
  590. {$EXTERNALSYM POLICY_AUDIT_EVENTS_INFO}
  591. TPolicyAuditEventsInfo = POLICY_AUDIT_EVENTS_INFO;
  592. PPolicyAuditEventsInfo = PPOLICY_AUDIT_EVENTS_INFO;
  593. // where the members have the following usage:
  594. //
  595. // AuditingMode - A Boolean variable specifying the Auditing Mode value.
  596. // This value is interpreted as follows:
  597. //
  598. // TRUE - Auditing is to be enabled (set operations) or is enabled
  599. // (query operations). Audit Records will be generated according
  600. // to the Event Auditing Options in effect (see the
  601. // EventAuditingOptions field.
  602. //
  603. // FALSE - Auditing is to be disabled (set operations) or is
  604. // disabled (query operations). No Audit Records will be
  605. // generated. Note that for set operations the Event Auditing
  606. // Options in effect will still be updated as specified by the
  607. // EventAuditingOptions field whether Auditing is enabled or
  608. // disabled.
  609. //
  610. // EventAuditingOptions - Pointer to an array of Auditing Options
  611. // indexed by Audit Event Type.
  612. //
  613. // MaximumAuditEventCount - Specifiesa count of the number of Audit
  614. // Event Types specified by the EventAuditingOptions parameter. If
  615. // this count is less than the number of Audit Event Types supported
  616. // by the system, the Auditing Options for Event Types with IDs
  617. // higher than (MaximumAuditEventCount + 1) are left unchanged.
  618. //
  619. //
  620. // The following structure corresponds to the PolicyAccountDomainInformation
  621. // information class.
  622. //
  623. PPOLICY_ACCOUNT_DOMAIN_INFO = ^POLICY_ACCOUNT_DOMAIN_INFO;
  624. {$EXTERNALSYM PPOLICY_ACCOUNT_DOMAIN_INFO}
  625. _POLICY_ACCOUNT_DOMAIN_INFO = record
  626. DomainName: LSA_UNICODE_STRING;
  627. DomainSid: PSID;
  628. end;
  629. {$EXTERNALSYM _POLICY_ACCOUNT_DOMAIN_INFO}
  630. POLICY_ACCOUNT_DOMAIN_INFO = _POLICY_ACCOUNT_DOMAIN_INFO;
  631. {$EXTERNALSYM POLICY_ACCOUNT_DOMAIN_INFO}
  632. TPolicyAccountDomainInfo = POLICY_ACCOUNT_DOMAIN_INFO;
  633. PPolicyAccountDomainInfo = PPOLICY_ACCOUNT_DOMAIN_INFO;
  634. // where the members have the following usage:
  635. //
  636. // DomainName - Is the name of the domain
  637. //
  638. // DomainSid - Is the Sid of the domain
  639. //
  640. //
  641. // The following structure corresponds to the PolicyPrimaryDomainInformation
  642. // information class.
  643. //
  644. PPOLICY_PRIMARY_DOMAIN_INFO = ^POLICY_PRIMARY_DOMAIN_INFO;
  645. {$EXTERNALSYM PPOLICY_PRIMARY_DOMAIN_INFO}
  646. _POLICY_PRIMARY_DOMAIN_INFO = record
  647. Name: LSA_UNICODE_STRING;
  648. Sid: PSID;
  649. end;
  650. {$EXTERNALSYM _POLICY_PRIMARY_DOMAIN_INFO}
  651. POLICY_PRIMARY_DOMAIN_INFO = _POLICY_PRIMARY_DOMAIN_INFO;
  652. {$EXTERNALSYM POLICY_PRIMARY_DOMAIN_INFO}
  653. TPolicyPrimaryDomainInfo = POLICY_PRIMARY_DOMAIN_INFO;
  654. PPolicyPrimaryDomainInfo = PPOLICY_PRIMARY_DOMAIN_INFO;
  655. // where the members have the following usage:
  656. //
  657. // Name - Is the name of the domain
  658. //
  659. // Sid - Is the Sid of the domain
  660. //
  661. //
  662. // The following structure corresponds to the PolicyDnsDomainInformation
  663. // information class
  664. //
  665. PPOLICY_DNS_DOMAIN_INFO = ^POLICY_DNS_DOMAIN_INFO;
  666. {$EXTERNALSYM PPOLICY_DNS_DOMAIN_INFO}
  667. _POLICY_DNS_DOMAIN_INFO = record
  668. Name: LSA_UNICODE_STRING;
  669. DnsDomainName: LSA_UNICODE_STRING;
  670. DnsForestName: LSA_UNICODE_STRING;
  671. DomainGuid: GUID;
  672. Sid: PSID;
  673. end;
  674. {$EXTERNALSYM _POLICY_DNS_DOMAIN_INFO}
  675. POLICY_DNS_DOMAIN_INFO = _POLICY_DNS_DOMAIN_INFO;
  676. {$EXTERNALSYM POLICY_DNS_DOMAIN_INFO}
  677. TPolicyDnsDomainInfo = POLICY_DNS_DOMAIN_INFO;
  678. PPolicyDnsDomainInfo = PPOLICY_DNS_DOMAIN_INFO;
  679. // where the members have the following usage:
  680. //
  681. // Name - Is the name of the Domain
  682. //
  683. // DnsDomainName - Is the DNS name of the domain
  684. //
  685. // DnsForestName - Is the DNS forest name of the domain
  686. //
  687. // DomainGuid - Is the GUID of the domain
  688. //
  689. // Sid - Is the Sid of the domain
  690. //
  691. // The following structure corresponds to the PolicyPdAccountInformation
  692. // information class. This structure may be used in Query operations
  693. // only.
  694. //
  695. PPOLICY_PD_ACCOUNT_INFO = ^POLICY_PD_ACCOUNT_INFO;
  696. {$EXTERNALSYM PPOLICY_PD_ACCOUNT_INFO}
  697. _POLICY_PD_ACCOUNT_INFO = record
  698. Name: LSA_UNICODE_STRING;
  699. end;
  700. {$EXTERNALSYM _POLICY_PD_ACCOUNT_INFO}
  701. POLICY_PD_ACCOUNT_INFO = _POLICY_PD_ACCOUNT_INFO;
  702. {$EXTERNALSYM POLICY_PD_ACCOUNT_INFO}
  703. TPolicyPdAccountInfo = POLICY_PD_ACCOUNT_INFO;
  704. PPolicyPdAccountInfo = PPOLICY_PD_ACCOUNT_INFO;
  705. // where the members have the following usage:
  706. //
  707. // Name - Is the name of an account in the domain that should be used
  708. // for authentication and name/ID lookup requests.
  709. //
  710. //
  711. // The following structure corresponds to the PolicyLsaServerRoleInformation
  712. // information class.
  713. //
  714. PPOLICY_LSA_SERVER_ROLE_INFO = ^POLICY_LSA_SERVER_ROLE_INFO;
  715. {$EXTERNALSYM PPOLICY_LSA_SERVER_ROLE_INFO}
  716. _POLICY_LSA_SERVER_ROLE_INFO = record
  717. LsaServerRole: POLICY_LSA_SERVER_ROLE;
  718. end;
  719. {$EXTERNALSYM _POLICY_LSA_SERVER_ROLE_INFO}
  720. POLICY_LSA_SERVER_ROLE_INFO = _POLICY_LSA_SERVER_ROLE_INFO;
  721. {$EXTERNALSYM POLICY_LSA_SERVER_ROLE_INFO}
  722. TPolicyLsaServerRoleInfo = POLICY_LSA_SERVER_ROLE_INFO;
  723. PPolicyLsaServerRoleInfo = PPOLICY_LSA_SERVER_ROLE_INFO;
  724. // where the fields have the following usage:
  725. //
  726. // TBS
  727. //
  728. //
  729. // The following structure corresponds to the PolicyReplicaSourceInformation
  730. // information class.
  731. //
  732. PPOLICY_REPLICA_SOURCE_INFO = ^POLICY_REPLICA_SOURCE_INFO;
  733. {$EXTERNALSYM PPOLICY_REPLICA_SOURCE_INFO}
  734. _POLICY_REPLICA_SOURCE_INFO = record
  735. ReplicaSource: LSA_UNICODE_STRING;
  736. ReplicaAccountName: LSA_UNICODE_STRING;
  737. end;
  738. {$EXTERNALSYM _POLICY_REPLICA_SOURCE_INFO}
  739. POLICY_REPLICA_SOURCE_INFO = _POLICY_REPLICA_SOURCE_INFO;
  740. {$EXTERNALSYM POLICY_REPLICA_SOURCE_INFO}
  741. TPolicyReplicaSourceInfo = POLICY_REPLICA_SOURCE_INFO;
  742. PPolicyReplicaSourceInfo = PPOLICY_REPLICA_SOURCE_INFO;
  743. //
  744. // The following structure corresponds to the PolicyDefaultQuotaInformation
  745. // information class.
  746. //
  747. PPOLICY_DEFAULT_QUOTA_INFO = ^POLICY_DEFAULT_QUOTA_INFO;
  748. {$EXTERNALSYM PPOLICY_DEFAULT_QUOTA_INFO}
  749. _POLICY_DEFAULT_QUOTA_INFO = record
  750. QuotaLimits: QUOTA_LIMITS;
  751. end;
  752. {$EXTERNALSYM _POLICY_DEFAULT_QUOTA_INFO}
  753. POLICY_DEFAULT_QUOTA_INFO = _POLICY_DEFAULT_QUOTA_INFO;
  754. {$EXTERNALSYM POLICY_DEFAULT_QUOTA_INFO}
  755. TPolicyDefaultQuotaInfo = POLICY_DEFAULT_QUOTA_INFO;
  756. PPolicyDefaultQuotaInfo = PPOLICY_DEFAULT_QUOTA_INFO;
  757. //
  758. // The following structure corresponds to the PolicyModificationInformation
  759. // information class.
  760. //
  761. PPOLICY_MODIFICATION_INFO = ^POLICY_MODIFICATION_INFO;
  762. {$EXTERNALSYM PPOLICY_MODIFICATION_INFO}
  763. _POLICY_MODIFICATION_INFO = record
  764. ModifiedId: LARGE_INTEGER;
  765. DatabaseCreationTime: LARGE_INTEGER;
  766. end;
  767. {$EXTERNALSYM _POLICY_MODIFICATION_INFO}
  768. POLICY_MODIFICATION_INFO = _POLICY_MODIFICATION_INFO;
  769. {$EXTERNALSYM POLICY_MODIFICATION_INFO}
  770. TPolicyModificationInfo = POLICY_MODIFICATION_INFO;
  771. PPolicyModificationInfo = PPOLICY_MODIFICATION_INFO;
  772. // where the members have the following usage:
  773. //
  774. // ModifiedId - Is a 64-bit unsigned integer that is incremented each
  775. // time anything in the LSA database is modified. This value is
  776. // only modified on Primary Domain Controllers.
  777. //
  778. // DatabaseCreationTime - Is the date/time that the LSA Database was
  779. // created. On Backup Domain Controllers, this value is replicated
  780. // from the Primary Domain Controller.
  781. //
  782. //
  783. // The following structure type corresponds to the PolicyAuditFullSetInformation
  784. // Information Class.
  785. //
  786. PPOLICY_AUDIT_FULL_SET_INFO = ^POLICY_AUDIT_FULL_SET_INFO;
  787. {$EXTERNALSYM PPOLICY_AUDIT_FULL_SET_INFO}
  788. _POLICY_AUDIT_FULL_SET_INFO = record
  789. ShutDownOnFull: ByteBool;
  790. end;
  791. {$EXTERNALSYM _POLICY_AUDIT_FULL_SET_INFO}
  792. POLICY_AUDIT_FULL_SET_INFO = _POLICY_AUDIT_FULL_SET_INFO;
  793. {$EXTERNALSYM POLICY_AUDIT_FULL_SET_INFO}
  794. TPolicyAuditFullSetInfo = POLICY_AUDIT_FULL_SET_INFO;
  795. PPolicyAuditFullSetInfo = PPOLICY_AUDIT_FULL_SET_INFO;
  796. //
  797. // The following structure type corresponds to the PolicyAuditFullQueryInformation
  798. // Information Class.
  799. //
  800. PPOLICY_AUDIT_FULL_QUERY_INFO = ^POLICY_AUDIT_FULL_QUERY_INFO;
  801. {$EXTERNALSYM PPOLICY_AUDIT_FULL_QUERY_INFO}
  802. _POLICY_AUDIT_FULL_QUERY_INFO = record
  803. ShutDownOnFull: ByteBool;
  804. LogIsFull: ByteBool;
  805. end;
  806. {$EXTERNALSYM _POLICY_AUDIT_FULL_QUERY_INFO}
  807. POLICY_AUDIT_FULL_QUERY_INFO = _POLICY_AUDIT_FULL_QUERY_INFO;
  808. {$EXTERNALSYM POLICY_AUDIT_FULL_QUERY_INFO}
  809. TPolicyAuditFullQueryInfo = POLICY_AUDIT_FULL_QUERY_INFO;
  810. PPolicyAuditFullQueryInfo = PPOLICY_AUDIT_FULL_QUERY_INFO;
  811. //
  812. // The following data type defines the classes of Policy Information
  813. // that may be queried/set that has domain wide effect.
  814. //
  815. _POLICY_DOMAIN_INFORMATION_CLASS = (
  816. pdicFiller0,
  817. PolicyDomainQualityOfServiceInformation, // value was used in W2K; no longer supported
  818. PolicyDomainEfsInformation,
  819. PolicyDomainKerberosTicketInformation);
  820. {$EXTERNALSYM _POLICY_DOMAIN_INFORMATION_CLASS}
  821. POLICY_DOMAIN_INFORMATION_CLASS = _POLICY_DOMAIN_INFORMATION_CLASS;
  822. {$EXTERNALSYM POLICY_DOMAIN_INFORMATION_CLASS}
  823. PPOLICY_DOMAIN_INFORMATION_CLASS = ^POLICY_DOMAIN_INFORMATION_CLASS;
  824. {$EXTERNALSYM PPOLICY_DOMAIN_INFORMATION_CLASS}
  825. TPolicyDomainInformationClass = POLICY_DOMAIN_INFORMATION_CLASS;
  826. PPolicyDomainInformationClass = PPOLICY_DOMAIN_INFORMATION_CLASS;
  827. type
  828. // mvb has dissapeared in november 2002 release!
  829. PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = ^POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
  830. {$EXTERNALSYM PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
  831. _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = record
  832. QualityOfService: ULONG;
  833. end;
  834. {$EXTERNALSYM _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
  835. POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
  836. {$EXTERNALSYM POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
  837. TPolicyDomainQualityOfServiceInfo = POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
  838. PPolicyDomainQualityOfServiceInfo = PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
  839. //
  840. // where the members have the following usage:
  841. //
  842. // QualityOfService - Determines what specific QOS actions a machine should take
  843. //
  844. //
  845. // The following structure corresponds to the PolicyEfsInformation
  846. // information class
  847. //
  848. PPOLICY_DOMAIN_EFS_INFO = ^POLICY_DOMAIN_EFS_INFO;
  849. {$EXTERNALSYM PPOLICY_DOMAIN_EFS_INFO}
  850. _POLICY_DOMAIN_EFS_INFO = record
  851. InfoLength: ULONG;
  852. EfsBlob: PUCHAR;
  853. end;
  854. {$EXTERNALSYM _POLICY_DOMAIN_EFS_INFO}
  855. POLICY_DOMAIN_EFS_INFO = _POLICY_DOMAIN_EFS_INFO;
  856. {$EXTERNALSYM POLICY_DOMAIN_EFS_INFO}
  857. TPolicyDomainEfsInfo = POLICY_DOMAIN_EFS_INFO;
  858. PPolicyDomainEfsInfo = PPOLICY_DOMAIN_EFS_INFO;
  859. // where the members have the following usage:
  860. //
  861. // InfoLength - Length of the EFS Information blob
  862. //
  863. // EfsBlob - Efs blob data
  864. //
  865. //
  866. // The following structure corresponds to the PolicyDomainKerberosTicketInformation
  867. // information class
  868. const
  869. POLICY_KERBEROS_VALIDATE_CLIENT = $00000080;
  870. {$EXTERNALSYM POLICY_KERBEROS_VALIDATE_CLIENT}
  871. type
  872. PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = ^POLICY_DOMAIN_KERBEROS_TICKET_INFO;
  873. {$EXTERNALSYM PPOLICY_DOMAIN_KERBEROS_TICKET_INFO}
  874. _POLICY_DOMAIN_KERBEROS_TICKET_INFO = record
  875. AuthenticationOptions: ULONG;
  876. MaxServiceTicketAge: LARGE_INTEGER;
  877. MaxTicketAge: LARGE_INTEGER;
  878. MaxRenewAge: LARGE_INTEGER;
  879. MaxClockSkew: LARGE_INTEGER;
  880. Reserved: LARGE_INTEGER;
  881. end;
  882. {$EXTERNALSYM _POLICY_DOMAIN_KERBEROS_TICKET_INFO}
  883. POLICY_DOMAIN_KERBEROS_TICKET_INFO = _POLICY_DOMAIN_KERBEROS_TICKET_INFO;
  884. {$EXTERNALSYM POLICY_DOMAIN_KERBEROS_TICKET_INFO}
  885. TPolicyDomainKerberosTicketInfo = POLICY_DOMAIN_KERBEROS_TICKET_INFO;
  886. PPolicyDomainKerberosTicketInfo = PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
  887. //
  888. // where the members have the following usage
  889. //
  890. // AuthenticationOptions -- allowed ticket options (POLICY_KERBEROS_* flags )
  891. //
  892. // MaxServiceTicketAge -- Maximum lifetime for a service ticket
  893. //
  894. // MaxTicketAge -- Maximum lifetime for the initial ticket
  895. //
  896. // MaxRenewAge -- Maximum cumulative age a renewable ticket can be with
  897. // requring authentication
  898. //
  899. // MaxClockSkew -- Maximum tolerance for synchronization of computer clocks
  900. //
  901. // Reserved -- Reserved
  902. //
  903. // The following data type defines the classes of Policy Information / Policy Domain Information
  904. // that may be used to request notification
  905. //
  906. _POLICY_NOTIFICATION_INFORMATION_CLASS = (
  907. pnicFiller0,
  908. PolicyNotifyAuditEventsInformation,
  909. PolicyNotifyAccountDomainInformation,
  910. PolicyNotifyServerRoleInformation,
  911. PolicyNotifyDnsDomainInformation,
  912. PolicyNotifyDomainEfsInformation,
  913. PolicyNotifyDomainKerberosTicketInformation,
  914. PolicyNotifyMachineAccountPasswordInformation);
  915. {$EXTERNALSYM _POLICY_NOTIFICATION_INFORMATION_CLASS}
  916. POLICY_NOTIFICATION_INFORMATION_CLASS = _POLICY_NOTIFICATION_INFORMATION_CLASS;
  917. {$EXTERNALSYM POLICY_NOTIFICATION_INFORMATION_CLASS}
  918. PPOLICY_NOTIFICATION_INFORMATION_CLASS = ^POLICY_NOTIFICATION_INFORMATION_CLASS;
  919. {$EXTERNALSYM PPOLICY_NOTIFICATION_INFORMATION_CLASS}
  920. TPolicyNotificationInformationClass = POLICY_NOTIFICATION_INFORMATION_CLASS;
  921. PPolicyNotificationInformationClass = PPOLICY_NOTIFICATION_INFORMATION_CLASS;
  922. //
  923. // LSA RPC Context Handle (Opaque form). Note that a Context Handle is
  924. // always a pointer type unlike regular handles.
  925. //
  926. LSA_HANDLE = PVOID;
  927. {$EXTERNALSYM LSA_HANDLE}
  928. PLSA_HANDLE = ^LSA_HANDLE;
  929. {$EXTERNALSYM PLSA_HANDLE}
  930. TLsaHandle = LSA_HANDLE;
  931. //
  932. // Trusted Domain Object specific data types
  933. //
  934. //
  935. // This data type defines the following information classes that may be
  936. // queried or set.
  937. //
  938. _TRUSTED_INFORMATION_CLASS = (
  939. ticFiller0,
  940. TrustedDomainNameInformation,
  941. TrustedControllersInformation,
  942. TrustedPosixOffsetInformation,
  943. TrustedPasswordInformation,
  944. TrustedDomainInformationBasic,
  945. TrustedDomainInformationEx,
  946. TrustedDomainAuthInformation,
  947. TrustedDomainFullInformation,
  948. TrustedDomainAuthInformationInternal,
  949. TrustedDomainFullInformationInternal,
  950. TrustedDomainInformationEx2Internal,
  951. TrustedDomainFullInformation2Internal);
  952. {$EXTERNALSYM _TRUSTED_INFORMATION_CLASS}
  953. TRUSTED_INFORMATION_CLASS = _TRUSTED_INFORMATION_CLASS;
  954. {$EXTERNALSYM TRUSTED_INFORMATION_CLASS}
  955. PTRUSTED_INFORMATION_CLASS = ^TRUSTED_INFORMATION_CLASS;
  956. {$EXTERNALSYM PTRUSTED_INFORMATION_CLASS}
  957. TTrustedInfomationClass = TRUSTED_INFORMATION_CLASS;
  958. PTrustedInfomationClass = PTRUSTED_INFORMATION_CLASS;
  959. //
  960. // The following data type corresponds to the TrustedDomainNameInformation
  961. // information class.
  962. //
  963. PTRUSTED_DOMAIN_NAME_INFO = ^TRUSTED_DOMAIN_NAME_INFO;
  964. {$EXTERNALSYM PTRUSTED_DOMAIN_NAME_INFO}
  965. _TRUSTED_DOMAIN_NAME_INFO = record
  966. Name: LSA_UNICODE_STRING;
  967. end;
  968. {$EXTERNALSYM _TRUSTED_DOMAIN_NAME_INFO}
  969. TRUSTED_DOMAIN_NAME_INFO = _TRUSTED_DOMAIN_NAME_INFO;
  970. {$EXTERNALSYM TRUSTED_DOMAIN_NAME_INFO}
  971. TTrustedDomainNameInfo = TRUSTED_DOMAIN_NAME_INFO;
  972. PTrustedDomainNameInfo = PTRUSTED_DOMAIN_NAME_INFO;
  973. // where members have the following meaning:
  974. //
  975. // Name - The name of the Trusted Domain.
  976. //
  977. //
  978. // The following data type corresponds to the TrustedControllersInformation
  979. // information class.
  980. //
  981. PTRUSTED_CONTROLLERS_INFO = ^TRUSTED_CONTROLLERS_INFO;
  982. {$EXTERNALSYM PTRUSTED_CONTROLLERS_INFO}
  983. _TRUSTED_CONTROLLERS_INFO = record
  984. Entries: ULONG;
  985. Names: PLSA_UNICODE_STRING;
  986. end;
  987. {$EXTERNALSYM _TRUSTED_CONTROLLERS_INFO}
  988. TRUSTED_CONTROLLERS_INFO = _TRUSTED_CONTROLLERS_INFO;
  989. {$EXTERNALSYM TRUSTED_CONTROLLERS_INFO}
  990. TTrustedControllersInfo = TRUSTED_CONTROLLERS_INFO;
  991. PTrustedControllersInfo = PTRUSTED_CONTROLLERS_INFO;
  992. // where members have the following meaning:
  993. //
  994. // Entries - Indicate how mamy entries there are in the Names array.
  995. //
  996. // Names - Pointer to an array of LSA_UNICODE_STRING structures containing the
  997. // names of domain controllers of the domain. This information may not
  998. // be accurate and should be used only as a hint. The order of this
  999. // list is considered significant and will be maintained.
  1000. //
  1001. // By convention, the first name in this list is assumed to be the
  1002. // Primary Domain Controller of the domain. If the Primary Domain
  1003. // Controller is not known, the first name should be set to the NULL
  1004. // string.
  1005. //
  1006. //
  1007. // The following data type corresponds to the TrustedPosixOffsetInformation
  1008. // information class.
  1009. //
  1010. PTRUSTED_POSIX_OFFSET_INFO = ^TRUSTED_POSIX_OFFSET_INFO;
  1011. {$EXTERNALSYM PTRUSTED_POSIX_OFFSET_INFO}
  1012. _TRUSTED_POSIX_OFFSET_INFO = record
  1013. Offset: ULONG;
  1014. end;
  1015. {$EXTERNALSYM _TRUSTED_POSIX_OFFSET_INFO}
  1016. TRUSTED_POSIX_OFFSET_INFO = _TRUSTED_POSIX_OFFSET_INFO;
  1017. {$EXTERNALSYM TRUSTED_POSIX_OFFSET_INFO}
  1018. TTrustedPosixOffsetInfo = TRUSTED_POSIX_OFFSET_INFO;
  1019. PTrustedPosixOffsetInfo = PTRUSTED_POSIX_OFFSET_INFO;
  1020. // where members have the following meaning:
  1021. //
  1022. // Offset - Is an offset to use for the generation of Posix user and group
  1023. // IDs from SIDs. The Posix ID corresponding to any particular SID is
  1024. // generated by adding the RID of that SID to the Offset of the SID's
  1025. // corresponding TrustedDomain object.
  1026. //
  1027. //
  1028. // The following data type corresponds to the TrustedPasswordInformation
  1029. // information class.
  1030. //
  1031. PTRUSTED_PASSWORD_INFO = ^TRUSTED_PASSWORD_INFO;
  1032. {$EXTERNALSYM PTRUSTED_PASSWORD_INFO}
  1033. _TRUSTED_PASSWORD_INFO = record
  1034. Password: LSA_UNICODE_STRING;
  1035. OldPassword: LSA_UNICODE_STRING;
  1036. end;
  1037. {$EXTERNALSYM _TRUSTED_PASSWORD_INFO}
  1038. TRUSTED_PASSWORD_INFO = _TRUSTED_PASSWORD_INFO;
  1039. {$EXTERNALSYM TRUSTED_PASSWORD_INFO}
  1040. TTrustedPasswordInfo = TRUSTED_PASSWORD_INFO;
  1041. PTrustedPasswordInfo = PTRUSTED_PASSWORD_INFO;
  1042. TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
  1043. {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_BASIC}
  1044. PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
  1045. {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_BASIC}
  1046. TTrustedDomainInformationBasic = TRUSTED_DOMAIN_INFORMATION_BASIC;
  1047. PTrustedDomainInformationBasic = PTRUSTED_DOMAIN_INFORMATION_BASIC;
  1048. //
  1049. // Direction of the trust
  1050. //
  1051. const
  1052. TRUST_DIRECTION_DISABLED = $00000000;
  1053. {$EXTERNALSYM TRUST_DIRECTION_DISABLED}
  1054. TRUST_DIRECTION_INBOUND = $00000001;
  1055. {$EXTERNALSYM TRUST_DIRECTION_INBOUND}
  1056. TRUST_DIRECTION_OUTBOUND = $00000002;
  1057. {$EXTERNALSYM TRUST_DIRECTION_OUTBOUND}
  1058. TRUST_DIRECTION_BIDIRECTIONAL = TRUST_DIRECTION_INBOUND or TRUST_DIRECTION_OUTBOUND;
  1059. {$EXTERNALSYM TRUST_DIRECTION_BIDIRECTIONAL}
  1060. TRUST_TYPE_DOWNLEVEL = $00000001; // NT4 and before
  1061. {$EXTERNALSYM TRUST_TYPE_DOWNLEVEL}
  1062. TRUST_TYPE_UPLEVEL = $00000002; // NT5
  1063. {$EXTERNALSYM TRUST_TYPE_UPLEVEL}
  1064. TRUST_TYPE_MIT = $00000003; // Trust with a MIT Kerberos realm
  1065. {$EXTERNALSYM TRUST_TYPE_MIT}
  1066. // TRUST_TYPE_DCE = $00000004; // Trust with a DCE realm
  1067. // {$EXTERNALSYM TRUST_TYPE_DCE}
  1068. // Levels 0x5 - 0x000FFFFF reserved for future use
  1069. // Provider specific trust levels are from 0x00100000 to 0xFFF00000
  1070. TRUST_ATTRIBUTE_NON_TRANSITIVE = $00000001; // Disallow transitivity
  1071. {$EXTERNALSYM TRUST_ATTRIBUTE_NON_TRANSITIVE}
  1072. TRUST_ATTRIBUTE_UPLEVEL_ONLY = $00000002; // Trust link only valid for uplevel client
  1073. {$EXTERNALSYM TRUST_ATTRIBUTE_UPLEVEL_ONLY}
  1074. TRUST_ATTRIBUTE_QUARANTINED_DOMAIN = $00000004; // Used to quarantine domains
  1075. {$EXTERNALSYM TRUST_ATTRIBUTE_QUARANTINED_DOMAIN}
  1076. TRUST_ATTRIBUTE_FOREST_TRANSITIVE = $00000008; // This link may contain forest trust information
  1077. {$EXTERNALSYM TRUST_ATTRIBUTE_FOREST_TRANSITIVE}
  1078. TRUST_ATTRIBUTE_CROSS_ORGANIZATION = $00000010; // This trust is to a domain/forest which is not part of this enterprise
  1079. {$EXTERNALSYM TRUST_ATTRIBUTE_CROSS_ORGANIZATION}
  1080. TRUST_ATTRIBUTE_WITHIN_FOREST = $00000020; // Trust is internal to this forest
  1081. {$EXTERNALSYM TRUST_ATTRIBUTE_WITHIN_FOREST}
  1082. TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL = $00000040; // Trust is to be treated as external for trust boundary purposes
  1083. {$EXTERNALSYM TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL}
  1084. // Trust attributes 0x00000040 through 0x00200000 are reserved for future use
  1085. // Trust attributes 0x00400000 through 0x00800000 were used previously (up to W2K) and should not be re-used
  1086. // Trust attributes 0x01000000 through 0x80000000 are reserved for user
  1087. TRUST_ATTRIBUTES_VALID = DWORD($FF03FFFF);
  1088. {$EXTERNALSYM TRUST_ATTRIBUTES_VALID}
  1089. TRUST_ATTRIBUTES_USER = DWORD($FF000000);
  1090. {$EXTERNALSYM TRUST_ATTRIBUTES_USER}
  1091. type
  1092. PTRUSTED_DOMAIN_INFORMATION_EX = ^TRUSTED_DOMAIN_INFORMATION_EX;
  1093. {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_EX}
  1094. _TRUSTED_DOMAIN_INFORMATION_EX = record
  1095. Name: LSA_UNICODE_STRING;
  1096. FlatName: LSA_UNICODE_STRING;
  1097. Sid: PSID;
  1098. TrustDirection: ULONG;
  1099. TrustType: ULONG;
  1100. TrustAttributes: ULONG;
  1101. end;
  1102. {$EXTERNALSYM _TRUSTED_DOMAIN_INFORMATION_EX}
  1103. TRUSTED_DOMAIN_INFORMATION_EX = _TRUSTED_DOMAIN_INFORMATION_EX;
  1104. {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_EX}
  1105. TTrustedDomainInformationEx = TRUSTED_DOMAIN_INFORMATION_EX;
  1106. PTrustedDomainInformationEx = PTRUSTED_DOMAIN_INFORMATION_EX;
  1107. _TRUSTED_DOMAIN_INFORMATION_EX2 = record
  1108. Name: LSA_UNICODE_STRING;
  1109. FlatName: LSA_UNICODE_STRING;
  1110. Sid: PSID;
  1111. TrustDirection: ULONG;
  1112. TrustType: ULONG;
  1113. TrustAttributes: ULONG;
  1114. ForestTrustLength: ULONG;
  1115. ForestTrustInfo: PUCHAR;
  1116. end;
  1117. {$EXTERNALSYM _TRUSTED_DOMAIN_INFORMATION_EX2}
  1118. TRUSTED_DOMAIN_INFORMATION_EX2 = _TRUSTED_DOMAIN_INFORMATION_EX2;
  1119. {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_EX2}
  1120. PTRUSTED_DOMAIN_INFORMATION_EX2 = ^TRUSTED_DOMAIN_INFORMATION_EX2;
  1121. {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_EX2}
  1122. TTrustedDomainInformationEx2 = TRUSTED_DOMAIN_INFORMATION_EX2;
  1123. PTrustedDomainInformationEx2 = PTRUSTED_DOMAIN_INFORMATION_EX2;
  1124. //
  1125. // Type of authentication information
  1126. //
  1127. const
  1128. TRUST_AUTH_TYPE_NONE = 0; // Ignore this entry
  1129. {$EXTERNALSYM TRUST_AUTH_TYPE_NONE}
  1130. TRUST_AUTH_TYPE_NT4OWF = 1; // NT4 OWF password
  1131. {$EXTERNALSYM TRUST_AUTH_TYPE_NT4OWF}
  1132. TRUST_AUTH_TYPE_CLEAR = 2; // Cleartext password
  1133. {$EXTERNALSYM TRUST_AUTH_TYPE_CLEAR}
  1134. TRUST_AUTH_TYPE_VERSION = 3; // Cleartext password version number
  1135. {$EXTERNALSYM TRUST_AUTH_TYPE_VERSION}
  1136. type
  1137. PLSA_AUTH_INFORMATION = ^LSA_AUTH_INFORMATION;
  1138. {$EXTERNALSYM PLSA_AUTH_INFORMATION}
  1139. _LSA_AUTH_INFORMATION = record
  1140. LastUpdateTime: LARGE_INTEGER;
  1141. AuthType: ULONG;
  1142. AuthInfoLength: ULONG;
  1143. AuthInfo: PUCHAR;
  1144. end;
  1145. {$EXTERNALSYM _LSA_AUTH_INFORMATION}
  1146. LSA_AUTH_INFORMATION = _LSA_AUTH_INFORMATION;
  1147. {$EXTERNALSYM LSA_AUTH_INFORMATION}
  1148. TLsaAuthInformation = LSA_AUTH_INFORMATION;
  1149. PLsaAuthInformation = PLSA_AUTH_INFORMATION;
  1150. PTRUSTED_DOMAIN_AUTH_INFORMATION = ^TRUSTED_DOMAIN_AUTH_INFORMATION;
  1151. {$EXTERNALSYM PTRUSTED_DOMAIN_AUTH_INFORMATION}
  1152. _TRUSTED_DOMAIN_AUTH_INFORMATION = record
  1153. IncomingAuthInfos: ULONG;
  1154. IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION;
  1155. IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION;
  1156. OutgoingAuthInfos: ULONG;
  1157. OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION;
  1158. OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION;
  1159. end;
  1160. {$EXTERNALSYM _TRUSTED_DOMAIN_AUTH_INFORMATION}
  1161. TRUSTED_DOMAIN_AUTH_INFORMATION = _TRUSTED_DOMAIN_AUTH_INFORMATION;
  1162. {$EXTERNALSYM TRUSTED_DOMAIN_AUTH_INFORMATION}
  1163. TTrustedDomainAuthInformation = TRUSTED_DOMAIN_AUTH_INFORMATION;
  1164. PTrustedDomainAuthInformation = PTRUSTED_DOMAIN_AUTH_INFORMATION;
  1165. PTRUSTED_DOMAIN_FULL_INFORMATION = ^TRUSTED_DOMAIN_FULL_INFORMATION;
  1166. {$EXTERNALSYM PTRUSTED_DOMAIN_FULL_INFORMATION}
  1167. _TRUSTED_DOMAIN_FULL_INFORMATION = record
  1168. Information: TRUSTED_DOMAIN_INFORMATION_EX;
  1169. PosixOffset: TRUSTED_POSIX_OFFSET_INFO;
  1170. AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
  1171. end;
  1172. {$EXTERNALSYM _TRUSTED_DOMAIN_FULL_INFORMATION}
  1173. TRUSTED_DOMAIN_FULL_INFORMATION = _TRUSTED_DOMAIN_FULL_INFORMATION;
  1174. {$EXTERNALSYM TRUSTED_DOMAIN_FULL_INFORMATION}
  1175. TTrustedDomainFullInformation = TRUSTED_DOMAIN_FULL_INFORMATION;
  1176. PTrustedDomainFullInformation = PTRUSTED_DOMAIN_FULL_INFORMATION;
  1177. PTRUSTED_DOMAIN_FULL_INFORMATION2 = ^TRUSTED_DOMAIN_FULL_INFORMATION2;
  1178. {$EXTERNALSYM PTRUSTED_DOMAIN_FULL_INFORMATION2}
  1179. _TRUSTED_DOMAIN_FULL_INFORMATION2 = record
  1180. Information: TRUSTED_DOMAIN_INFORMATION_EX2;
  1181. PosixOffset: TRUSTED_POSIX_OFFSET_INFO;
  1182. AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
  1183. end;
  1184. {$EXTERNALSYM _TRUSTED_DOMAIN_FULL_INFORMATION2}
  1185. TRUSTED_DOMAIN_FULL_INFORMATION2 = _TRUSTED_DOMAIN_FULL_INFORMATION2;
  1186. {$EXTERNALSYM TRUSTED_DOMAIN_FULL_INFORMATION2}
  1187. TTrustedDomainFullInformation2 = TRUSTED_DOMAIN_FULL_INFORMATION2;
  1188. PTrustedDomainFullInformation2 = PTRUSTED_DOMAIN_FULL_INFORMATION2;
  1189. LSA_FOREST_TRUST_RECORD_TYPE = (
  1190. ForestTrustTopLevelName,
  1191. ForestTrustTopLevelNameEx,
  1192. ForestTrustDomainInfo);
  1193. {$EXTERNALSYM LSA_FOREST_TRUST_RECORD_TYPE}
  1194. TLsaForestTrustRecordType = LSA_FOREST_TRUST_RECORD_TYPE;
  1195. const
  1196. ForestTrustRecordTypeLast = ForestTrustDomainInfo;
  1197. {$EXTERNALSYM ForestTrustRecordTypeLast}
  1198. //
  1199. // Bottom 16 bits of the flags are reserved for disablement reasons
  1200. //
  1201. LSA_FTRECORD_DISABLED_REASONS = $0000FFFF;
  1202. {$EXTERNALSYM LSA_FTRECORD_DISABLED_REASONS}
  1203. //
  1204. // Reasons for a top-level name forest trust record to be disabled
  1205. //
  1206. LSA_TLN_DISABLED_NEW = $00000001;
  1207. {$EXTERNALSYM LSA_TLN_DISABLED_NEW}
  1208. LSA_TLN_DISABLED_ADMIN = $00000002;
  1209. {$EXTERNALSYM LSA_TLN_DISABLED_ADMIN}
  1210. LSA_TLN_DISABLED_CONFLICT = $00000004;
  1211. {$EXTERNALSYM LSA_TLN_DISABLED_CONFLICT}
  1212. //
  1213. // Reasons for a domain information forest trust record to be disabled
  1214. //
  1215. LSA_SID_DISABLED_ADMIN = $00000001;
  1216. {$EXTERNALSYM LSA_SID_DISABLED_ADMIN}
  1217. LSA_SID_DISABLED_CONFLICT = $00000002;
  1218. {$EXTERNALSYM LSA_SID_DISABLED_CONFLICT}
  1219. LSA_NB_DISABLED_ADMIN = $00000004;
  1220. {$EXTERNALSYM LSA_NB_DISABLED_ADMIN}
  1221. LSA_NB_DISABLED_CONFLICT = $00000008;
  1222. {$EXTERNALSYM LSA_NB_DISABLED_CONFLICT}
  1223. type
  1224. PLSA_FOREST_TRUST_DOMAIN_INFO = ^LSA_FOREST_TRUST_DOMAIN_INFO;
  1225. {$EXTERNALSYM PLSA_FOREST_TRUST_DOMAIN_INFO}
  1226. _LSA_FOREST_TRUST_DOMAIN_INFO = record
  1227. Sid: PSID;
  1228. DnsName: LSA_UNICODE_STRING;
  1229. NetbiosName: LSA_UNICODE_STRING;
  1230. end;
  1231. {$EXTERNALSYM _LSA_FOREST_TRUST_DOMAIN_INFO}
  1232. LSA_FOREST_TRUST_DOMAIN_INFO = _LSA_FOREST_TRUST_DOMAIN_INFO;
  1233. {$EXTERNALSYM LSA_FOREST_TRUST_DOMAIN_INFO}
  1234. TLsaForestTrustDomainInfo = LSA_FOREST_TRUST_DOMAIN_INFO;
  1235. PLsaForestTrustDomainInfo = PLSA_FOREST_TRUST_DOMAIN_INFO;
  1236. //
  1237. // To prevent huge data to be passed in, we should put a limit on LSA_FOREST_TRUST_BINARY_DATA.
  1238. // 128K is large enough that can't be reached in the near future, and small enough not to
  1239. // cause memory problems.
  1240. const
  1241. MAX_FOREST_TRUST_BINARY_DATA_SIZE = 128 * 1024;
  1242. {$EXTERNALSYM MAX_FOREST_TRUST_BINARY_DATA_SIZE}
  1243. type
  1244. PLSA_FOREST_TRUST_BINARY_DATA = ^LSA_FOREST_TRUST_BINARY_DATA;
  1245. {$EXTERNALSYM PLSA_FOREST_TRUST_BINARY_DATA}
  1246. _LSA_FOREST_TRUST_BINARY_DATA = record
  1247. Length: ULONG;
  1248. Buffer: PUCHAR;
  1249. end;
  1250. {$EXTERNALSYM _LSA_FOREST_TRUST_BINARY_DATA}
  1251. LSA_FOREST_TRUST_BINARY_DATA = _LSA_FOREST_TRUST_BINARY_DATA;
  1252. {$EXTERNALSYM LSA_FOREST_TRUST_BINARY_DATA}
  1253. TLsaForestTrustBinaryData = LSA_FOREST_TRUST_BINARY_DATA;
  1254. PLsaForestTrustBinaryData = PLSA_FOREST_TRUST_BINARY_DATA;
  1255. PLSA_FOREST_TRUST_RECORD = ^LSA_FOREST_TRUST_RECORD;
  1256. {$EXTERNALSYM PLSA_FOREST_TRUST_RECORD}
  1257. _LSA_FOREST_TRUST_RECORD = record
  1258. Flags: ULONG;
  1259. ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE; // type of record
  1260. Time: LARGE_INTEGER;
  1261. case Integer of // actual data
  1262. 0: (TopLevelName: LSA_UNICODE_STRING);
  1263. 1: (DomainInfo: LSA_FOREST_TRUST_DOMAIN_INFO);
  1264. 2: (Data: LSA_FOREST_TRUST_BINARY_DATA); // used for unrecognized types
  1265. // } ForestTrustData;
  1266. end;
  1267. {$EXTERNALSYM _LSA_FOREST_TRUST_RECORD}
  1268. LSA_FOREST_TRUST_RECORD = _LSA_FOREST_TRUST_RECORD;
  1269. {$EXTERNALSYM LSA_FOREST_TRUST_RECORD}
  1270. TLsaForestTrustRecord = LSA_FOREST_TRUST_RECORD;
  1271. PLsaForestTrustRecord = PLSA_FOREST_TRUST_RECORD;
  1272. //
  1273. // To prevent forest trust blobs of large size, number of records must be
  1274. // smaller than MAX_RECORDS_IN_FOREST_TRUST_INFO
  1275. //
  1276. const
  1277. MAX_RECORDS_IN_FOREST_TRUST_INFO = 4000;
  1278. {$EXTERNALSYM MAX_RECORDS_IN_FOREST_TRUST_INFO}
  1279. type
  1280. PLSA_FOREST_TRUST_INFORMATION = ^LSA_FOREST_TRUST_INFORMATION;
  1281. {$EXTERNALSYM PLSA_FOREST_TRUST_INFORMATION}
  1282. _LSA_FOREST_TRUST_INFORMATION = record
  1283. RecordCount: ULONG;
  1284. Entries: ^PLSA_FOREST_TRUST_RECORD;
  1285. end;
  1286. {$EXTERNALSYM _LSA_FOREST_TRUST_INFORMATION}
  1287. LSA_FOREST_TRUST_INFORMATION = _LSA_FOREST_TRUST_INFORMATION;
  1288. {$EXTERNALSYM LSA_FOREST_TRUST_INFORMATION}
  1289. TLsaForestTrustInformation = LSA_FOREST_TRUST_INFORMATION;
  1290. PLsaForestTrustInformation = PLSA_FOREST_TRUST_INFORMATION;
  1291. LSA_FOREST_TRUST_COLLISION_RECORD_TYPE = (
  1292. CollisionTdo,
  1293. CollisionXref,
  1294. CollisionOther);
  1295. {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_RECORD_TYPE}
  1296. TLsaForestTrustCollisionRecordType = LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
  1297. PLSA_FOREST_TRUST_COLLISION_RECORD = ^LSA_FOREST_TRUST_COLLISION_RECORD;
  1298. {$EXTERNALSYM PLSA_FOREST_TRUST_COLLISION_RECORD}
  1299. _LSA_FOREST_TRUST_COLLISION_RECORD = record
  1300. Index: ULONG;
  1301. Type_: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
  1302. Flags: ULONG;
  1303. Name: LSA_UNICODE_STRING;
  1304. end;
  1305. {$EXTERNALSYM _LSA_FOREST_TRUST_COLLISION_RECORD}
  1306. LSA_FOREST_TRUST_COLLISION_RECORD = _LSA_FOREST_TRUST_COLLISION_RECORD;
  1307. {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_RECORD}
  1308. TLsaForestTrustCollisionRecord = LSA_FOREST_TRUST_COLLISION_RECORD;
  1309. PLsaForestTrustCollisionRecord = PLSA_FOREST_TRUST_COLLISION_RECORD;
  1310. PLSA_FOREST_TRUST_COLLISION_INFORMATION = ^LSA_FOREST_TRUST_COLLISION_INFORMATION;
  1311. {$EXTERNALSYM PLSA_FOREST_TRUST_COLLISION_INFORMATION}
  1312. _LSA_FOREST_TRUST_COLLISION_INFORMATION = record
  1313. RecordCount: ULONG;
  1314. Entries: ^PLSA_FOREST_TRUST_COLLISION_RECORD;
  1315. end;
  1316. {$EXTERNALSYM _LSA_FOREST_TRUST_COLLISION_INFORMATION}
  1317. LSA_FOREST_TRUST_COLLISION_INFORMATION = _LSA_FOREST_TRUST_COLLISION_INFORMATION;
  1318. {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_INFORMATION}
  1319. TLsaForestTrustCollisionInformation = LSA_FOREST_TRUST_COLLISION_INFORMATION;
  1320. PLsaForestTrustCollisionInformation = PLSA_FOREST_TRUST_COLLISION_INFORMATION;
  1321. //
  1322. // LSA Enumeration Context
  1323. //
  1324. LSA_ENUMERATION_HANDLE = ULONG;
  1325. {$EXTERNALSYM LSA_ENUMERATION_HANDLE}
  1326. PLSA_ENUMERATION_HANDLE = LSA_ENUMERATION_HANDLE;
  1327. {$EXTERNALSYM PLSA_ENUMERATION_HANDLE}
  1328. //
  1329. // LSA Enumeration Information
  1330. //
  1331. PLSA_ENUMERATION_INFORMATION = ^LSA_ENUMERATION_INFORMATION;
  1332. {$EXTERNALSYM PLSA_ENUMERATION_INFORMATION}
  1333. _LSA_ENUMERATION_INFORMATION = record
  1334. Sid: PSID;
  1335. end;
  1336. {$EXTERNALSYM _LSA_ENUMERATION_INFORMATION}
  1337. LSA_ENUMERATION_INFORMATION = _LSA_ENUMERATION_INFORMATION;
  1338. {$EXTERNALSYM LSA_ENUMERATION_INFORMATION}
  1339. TLsaEnumerationInformation = LSA_ENUMERATION_INFORMATION;
  1340. PLsaEnumerationInformation = PLSA_ENUMERATION_INFORMATION;
  1341. ////////////////////////////////////////////////////////////////////////////
  1342. // //
  1343. // Local Security Policy - Miscellaneous API function prototypes //
  1344. // //
  1345. ////////////////////////////////////////////////////////////////////////////
  1346. function LsaFreeMemory(Buffer: PVOID): NTSTATUS; stdcall;
  1347. {$EXTERNALSYM LsaFreeMemory}
  1348. function LsaClose(ObjectHandle: LSA_HANDLE): NTSTATUS; stdcall;
  1349. {$EXTERNALSYM LsaClose}
  1350. type
  1351. _SECURITY_LOGON_SESSION_DATA = record
  1352. Size: ULONG;
  1353. LogonId: LUID;
  1354. UserName: LSA_UNICODE_STRING;
  1355. LogonDomain: LSA_UNICODE_STRING;
  1356. AuthenticationPackage: LSA_UNICODE_STRING;
  1357. LogonType: SECURITY_LOGON_TYPE;
  1358. Session: ULONG;
  1359. Sid: PSID;
  1360. LogonTime: LARGE_INTEGER;
  1361. //
  1362. // new for whistler:
  1363. //
  1364. LogonServer: LSA_UNICODE_STRING;
  1365. DnsDomainName: LSA_UNICODE_STRING;
  1366. Upn: LSA_UNICODE_STRING;
  1367. end;
  1368. {$EXTERNALSYM _SECURITY_LOGON_SESSION_DATA}
  1369. SECURITY_LOGON_SESSION_DATA = _SECURITY_LOGON_SESSION_DATA;
  1370. {$EXTERNALSYM SECURITY_LOGON_SESSION_DATA}
  1371. PSECURITY_LOGON_SESSION_DATA = ^SECURITY_LOGON_SESSION_DATA;
  1372. {$EXTERNALSYM PSECURITY_LOGON_SESSION_DATA}
  1373. TSecurityLogonSessionData = SECURITY_LOGON_SESSION_DATA;
  1374. PSecurityLogonSessionData = PSECURITY_LOGON_SESSION_DATA;
  1375. function LsaEnumerateLogonSessions(LogonSessionCount: PULONG; var LogonSessionList: PLUID): NTSTATUS; stdcall;
  1376. {$EXTERNALSYM LsaEnumerateLogonSessions}
  1377. function LsaGetLogonSessionData(LogonId: PLUID; var ppLogonSessionData: PSECURITY_LOGON_SESSION_DATA): NTSTATUS; stdcall;
  1378. {$EXTERNALSYM LsaGetLogonSessionData}
  1379. function LsaOpenPolicy(SystemName: PLSA_UNICODE_STRING;
  1380. var ObjectAttributes: LSA_OBJECT_ATTRIBUTES; DesiredAccess: ACCESS_MASK;
  1381. var PolicyHandle: LSA_HANDLE): NTSTATUS; stdcall;
  1382. {$EXTERNALSYM LsaOpenPolicy}
  1383. function LsaQueryInformationPolicy(PolicyHandle: LSA_HANDLE;
  1384. InformationClass: POLICY_INFORMATION_CLASS; var Buffer: PVOID): NTSTATUS; stdcall;
  1385. {$EXTERNALSYM LsaQueryInformationPolicy}
  1386. function LsaSetInformationPolicy(PolicyHandle: LSA_HANDLE;
  1387. InformationClass: POLICY_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
  1388. {$EXTERNALSYM LsaSetInformationPolicy}
  1389. function LsaQueryDomainInformationPolicy(PolicyHandle: LSA_HANDLE;
  1390. InformationClass: POLICY_DOMAIN_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
  1391. {$EXTERNALSYM LsaQueryDomainInformationPolicy}
  1392. function LsaSetDomainInformationPolicy(PolicyHandle: LSA_HANDLE;
  1393. InformationClass: POLICY_DOMAIN_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
  1394. {$EXTERNALSYM LsaSetDomainInformationPolicy}
  1395. function LsaRegisterPolicyChangeNotification(InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS;
  1396. NotificationEventHandle: HANDLE): NTSTATUS; stdcall;
  1397. {$EXTERNALSYM LsaRegisterPolicyChangeNotification}
  1398. function LsaUnregisterPolicyChangeNotification(InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS;
  1399. NotificationEventHandle: HANDLE): NTSTATUS; stdcall;
  1400. {$EXTERNALSYM LsaUnregisterPolicyChangeNotification}
  1401. function LsaEnumerateTrustedDomains(PolicyHandle: LSA_HANDLE;
  1402. var EnumerationContext: LSA_ENUMERATION_HANDLE; Buffer: PPVOID;
  1403. PreferedMaximumLength: ULONG; var CountReturned: ULONG): NTSTATUS; stdcall;
  1404. {$EXTERNALSYM LsaEnumerateTrustedDomains}
  1405. function LsaLookupNames(PolicyHandle: LSA_HANDLE; Count: ULONG;
  1406. Names: PLSA_UNICODE_STRING; var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST;
  1407. var Sids: PLSA_TRANSLATED_SID): NTSTATUS; stdcall;
  1408. {$EXTERNALSYM LsaLookupNames}
  1409. function LsaLookupNames2(PolicyHandle: LSA_HANDLE; Flags, Count: ULONG; Names: PLSA_UNICODE_STRING;
  1410. var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST; var Sids: PLSA_TRANSLATED_SID2): NTSTATUS; stdcall;
  1411. {$EXTERNALSYM LsaLookupNames2}
  1412. function LsaLookupSids(PolicyHandle: LSA_HANDLE; Count: ULONG; Sids: PPSID;
  1413. var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST;
  1414. var Names: PLSA_TRANSLATED_NAME): NTSTATUS; stdcall;
  1415. {$EXTERNALSYM LsaLookupSids}
  1416. const
  1417. SE_INTERACTIVE_LOGON_NAME = 'SeInteractiveLogonRight';
  1418. {$EXTERNALSYM SE_INTERACTIVE_LOGON_NAME}
  1419. SE_NETWORK_LOGON_NAME = 'SeNetworkLogonRight';
  1420. {$EXTERNALSYM SE_NETWORK_LOGON_NAME}
  1421. SE_BATCH_LOGON_NAME = 'SeBatchLogonRight';
  1422. {$EXTERNALSYM SE_BATCH_LOGON_NAME}
  1423. SE_SERVICE_LOGON_NAME = 'SeServiceLogonRight';
  1424. {$EXTERNALSYM SE_SERVICE_LOGON_NAME}
  1425. SE_DENY_INTERACTIVE_LOGON_NAME = 'SeDenyInteractiveLogonRight';
  1426. {$EXTERNALSYM SE_DENY_INTERACTIVE_LOGON_NAME}
  1427. SE_DENY_NETWORK_LOGON_NAME = 'SeDenyNetworkLogonRight';
  1428. {$EXTERNALSYM SE_DENY_NETWORK_LOGON_NAME}
  1429. SE_DENY_BATCH_LOGON_NAME = 'SeDenyBatchLogonRight';
  1430. {$EXTERNALSYM SE_DENY_BATCH_LOGON_NAME}
  1431. SE_DENY_SERVICE_LOGON_NAME = 'SeDenyServiceLogonRight';
  1432. {$EXTERNALSYM SE_DENY_SERVICE_LOGON_NAME}
  1433. SE_REMOTE_INTERACTIVE_LOGON_NAME = 'SeRemoteInteractiveLogonRight';
  1434. {$EXTERNALSYM SE_REMOTE_INTERACTIVE_LOGON_NAME}
  1435. SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME = 'SeDenyRemoteInteractiveLogonRight';
  1436. {$EXTERNALSYM SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME}
  1437. //
  1438. // This new API returns all the accounts with a certain privilege
  1439. //
  1440. function LsaEnumerateAccountsWithUserRight(PolicyHandle: LSA_HANDLE;
  1441. UserRights: PLSA_UNICODE_STRING; var EnumerationBuffer: PLSA_ENUMERATION_INFORMATION;
  1442. var CountReturned: ULONG): NTSTATUS; stdcall;
  1443. {$EXTERNALSYM LsaEnumerateAccountsWithUserRight}
  1444. //
  1445. // These new APIs differ by taking a SID instead of requiring the caller
  1446. // to open the account first and passing in an account handle
  1447. //
  1448. function LsaEnumerateAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
  1449. var UserRights: PLSA_UNICODE_STRING; var CountOfRights: ULONG): NTSTATUS; stdcall;
  1450. {$EXTERNALSYM LsaEnumerateAccountRights}
  1451. function LsaAddAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
  1452. UserRights: PLSA_UNICODE_STRING; CountOfRights: ULONG): NTSTATUS; stdcall;
  1453. {$EXTERNALSYM LsaAddAccountRights}
  1454. function LsaRemoveAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
  1455. AllRights: ByteBool; UserRights: PLSA_UNICODE_STRING; CountOfRights: ULONG): NTSTATUS; stdcall;
  1456. {$EXTERNALSYM LsaRemoveAccountRights}
  1457. ///////////////////////////////////////////////////////////////////////////////
  1458. // //
  1459. // Local Security Policy - Trusted Domain Object API function prototypes //
  1460. // //
  1461. ///////////////////////////////////////////////////////////////////////////////
  1462. function LsaOpenTrustedDomainByName(PolicyHandle: LSA_HANDLE;
  1463. const TrustedDomainName: LSA_UNICODE_STRING; DesiredAccess: ACCESS_MASK;
  1464. var TrustedDomainHandle: LSA_HANDLE): NTSTATUS; stdcall;
  1465. {$EXTERNALSYM LsaOpenTrustedDomainByName}
  1466. function LsaQueryTrustedDomainInfo(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID;
  1467. InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
  1468. {$EXTERNALSYM LsaQueryTrustedDomainInfo}
  1469. function LsaSetTrustedDomainInformation(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID;
  1470. InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
  1471. {$EXTERNALSYM LsaSetTrustedDomainInformation}
  1472. function LsaDeleteTrustedDomain(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID): NTSTATUS; stdcall;
  1473. {$EXTERNALSYM LsaDeleteTrustedDomain}
  1474. function LsaQueryTrustedDomainInfoByName(PolicyHandle: LSA_HANDLE;
  1475. const TrustedDomainName: LSA_UNICODE_STRING;
  1476. InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
  1477. {$EXTERNALSYM LsaQueryTrustedDomainInfoByName}
  1478. function LsaSetTrustedDomainInfoByName(PolicyHandle: LSA_HANDLE;
  1479. const TrustedDomainName: LSA_UNICODE_STRING;
  1480. InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
  1481. {$EXTERNALSYM LsaSetTrustedDomainInfoByName}
  1482. function LsaEnumerateTrustedDomainsEx(PolicyHandle: LSA_HANDLE;
  1483. var EnumerationContext: LSA_ENUMERATION_HANDLE; Buffer: PPVOID;
  1484. PreferedMaximumLength: ULONG; var CountReturned: ULONG): NTSTATUS; stdcall;
  1485. {$EXTERNALSYM LsaEnumerateTrustedDomainsEx}
  1486. function LsaCreateTrustedDomainEx(PolicyHandle: LSA_HANDLE;
  1487. const TrustedDomainInformation: TRUSTED_DOMAIN_INFORMATION_EX;
  1488. const AuthenticationInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
  1489. DesiredAccess: ACCESS_MASK; var TrustedDomainHandle: LSA_HANDLE): NTSTATUS; stdcall;
  1490. {$EXTERNALSYM LsaCreateTrustedDomainEx}
  1491. function LsaQueryForestTrustInformation(PolicyHandle: LSA_HANDLE; TrustedDomainName: PLSA_UNICODE_STRING;
  1492. var ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): NTSTATUS; stdcall;
  1493. {$EXTERNALSYM LsaQueryForestTrustInformation}
  1494. function LsaSetForestTrustInformation(PolicyHandle: LSA_HANDLE; TrustedDomainName: PLSA_UNICODE_STRING;
  1495. ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION; CheckOnly: BOOLEAN; var CollisionInfo: PLSA_FOREST_TRUST_COLLISION_INFORMATION): NTSTATUS; stdcall;
  1496. {$EXTERNALSYM LsaSetForestTrustInformation}
  1497. {.DEFINE TESTING_MATCHING_ROUTINE}
  1498. {$IFDEF TESTING_MATCHING_ROUTINE}
  1499. function LsaForestTrustFindMatch(PolicyHandle: LSA_HANDLE; Type_: ULONG; Name: PLSA_UNICODE_STRING; var Match: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
  1500. {$EXTERNALSYM LsaForestTrustFindMatch}
  1501. {$ENDIF TESTING_MATCHING_ROUTINE}
  1502. //
  1503. // This API sets the workstation password (equivalent of setting/getting
  1504. // the SSI_SECRET_NAME secret)
  1505. //
  1506. function LsaStorePrivateData(PolicyHandle: LSA_HANDLE;
  1507. const KeyName: LSA_UNICODE_STRING; PrivateData: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
  1508. {$EXTERNALSYM LsaStorePrivateData}
  1509. function LsaRetrievePrivateData(PolicyHandle: LSA_HANDLE;
  1510. const KeyName: LSA_UNICODE_STRING; var PrivateData: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
  1511. {$EXTERNALSYM LsaRetrievePrivateData}
  1512. function LsaNtStatusToWinError(Status: NTSTATUS): ULONG; stdcall;
  1513. {$EXTERNALSYM LsaNtStatusToWinError}
  1514. (*#if 0
  1515. NTSTATUS
  1516. NTAPI
  1517. LsaLookupNamesEx(
  1518. IN LSA_HANDLE PolicyHandle,
  1519. IN ULONG Count,
  1520. IN PLSA_NAME_LOOKUP_EX Names,
  1521. OUT PLSA_TRANSLATED_SID_EX *TranslatedSids,
  1522. IN ULONG LookupOptions,
  1523. IN OUT PULONG MappedCount
  1524. );
  1525. NTSTATUS
  1526. NTAPI
  1527. LsaLookupSidsEx(
  1528. IN LSA_HANDLE PolicyHandle,
  1529. IN ULONG Count,
  1530. IN PLSA_SID_LOOKUP_EX Sids,
  1531. OUT PLSA_TRANSLATED_NAME_EX *TranslatedNames,
  1532. IN ULONG LookupOptions,
  1533. IN OUT PULONG MappedCount
  1534. );
  1535. #endif*)
  1536. //
  1537. // SPNEGO package stuff
  1538. //
  1539. type
  1540. NEGOTIATE_MESSAGES = (NegEnumPackagePrefixes, NegGetCallerName, NegCallPackageMax);
  1541. {$EXTERNALSYM NEGOTIATE_MESSAGES}
  1542. const
  1543. NEGOTIATE_MAX_PREFIX = 32;
  1544. {$EXTERNALSYM NEGOTIATE_MAX_PREFIX}
  1545. type
  1546. PNEGOTIATE_PACKAGE_PREFIX = ^NEGOTIATE_PACKAGE_PREFIX;
  1547. {$EXTERNALSYM PNEGOTIATE_PACKAGE_PREFIX}
  1548. _NEGOTIATE_PACKAGE_PREFIX = record
  1549. PackageId: ULONG_PTR;
  1550. PackageDataA: PVOID;
  1551. PackageDataW: PVOID;
  1552. PrefixLen: ULONG_PTR;
  1553. Prefix: array [0..NEGOTIATE_MAX_PREFIX - 1] of UCHAR;
  1554. end;
  1555. {$EXTERNALSYM _NEGOTIATE_PACKAGE_PREFIX}
  1556. NEGOTIATE_PACKAGE_PREFIX = _NEGOTIATE_PACKAGE_PREFIX;
  1557. {$EXTERNALSYM NEGOTIATE_PACKAGE_PREFIX}
  1558. TNegotiatePackagePrefix = NEGOTIATE_PACKAGE_PREFIX;
  1559. PNegotiatePackagePrefix = PNEGOTIATE_PACKAGE_PREFIX;
  1560. PNEGOTIATE_PACKAGE_PREFIXES = ^NEGOTIATE_PACKAGE_PREFIXES;
  1561. {$EXTERNALSYM PNEGOTIATE_PACKAGE_PREFIXES}
  1562. _NEGOTIATE_PACKAGE_PREFIXES = record
  1563. MessageType: ULONG;
  1564. PrefixCount: ULONG;
  1565. Offset: ULONG; // Offset to array of _PREFIX above
  1566. Pad: ULONG; // Align structure for 64-bit
  1567. end;
  1568. {$EXTERNALSYM _NEGOTIATE_PACKAGE_PREFIXES}
  1569. NEGOTIATE_PACKAGE_PREFIXES = _NEGOTIATE_PACKAGE_PREFIXES;
  1570. {$EXTERNALSYM NEGOTIATE_PACKAGE_PREFIXES}
  1571. TNegotiatePackagePrefixes = NEGOTIATE_PACKAGE_PREFIXES;
  1572. PNegotiatePackagePrefixes = PNEGOTIATE_PACKAGE_PREFIXES;
  1573. PNEGOTIATE_CALLER_NAME_REQUEST = ^NEGOTIATE_CALLER_NAME_REQUEST;
  1574. {$EXTERNALSYM PNEGOTIATE_CALLER_NAME_REQUEST}
  1575. _NEGOTIATE_CALLER_NAME_REQUEST = record
  1576. MessageType: ULONG;
  1577. LogonId: LUID;
  1578. end;
  1579. {$EXTERNALSYM _NEGOTIATE_CALLER_NAME_REQUEST}
  1580. NEGOTIATE_CALLER_NAME_REQUEST = _NEGOTIATE_CALLER_NAME_REQUEST;
  1581. {$EXTERNALSYM NEGOTIATE_CALLER_NAME_REQUEST}
  1582. TNegotiateCallerNameRequest = NEGOTIATE_CALLER_NAME_REQUEST;
  1583. PNegotiateCallerNameRequest = PNEGOTIATE_CALLER_NAME_REQUEST;
  1584. PNEGOTIATE_CALLER_NAME_RESPONSE = ^NEGOTIATE_CALLER_NAME_RESPONSE;
  1585. {$EXTERNALSYM PNEGOTIATE_CALLER_NAME_RESPONSE}
  1586. _NEGOTIATE_CALLER_NAME_RESPONSE = record
  1587. MessageType: ULONG;
  1588. CallerName: PWSTR;
  1589. end;
  1590. {$EXTERNALSYM _NEGOTIATE_CALLER_NAME_RESPONSE}
  1591. NEGOTIATE_CALLER_NAME_RESPONSE = _NEGOTIATE_CALLER_NAME_RESPONSE;
  1592. {$EXTERNALSYM NEGOTIATE_CALLER_NAME_RESPONSE}
  1593. TNegotiateCallerNameResponse = NEGOTIATE_CALLER_NAME_RESPONSE;
  1594. PNegotiateCallerNameResponse = PNEGOTIATE_CALLER_NAME_RESPONSE;
  1595. type
  1596. PDOMAIN_PASSWORD_INFORMATION = ^DOMAIN_PASSWORD_INFORMATION;
  1597. {$EXTERNALSYM PDOMAIN_PASSWORD_INFORMATION}
  1598. _DOMAIN_PASSWORD_INFORMATION = record
  1599. MinPasswordLength: USHORT;
  1600. PasswordHistoryLength: USHORT;
  1601. PasswordProperties: ULONG;
  1602. MaxPasswordAge: LARGE_INTEGER;
  1603. MinPasswordAge: LARGE_INTEGER;
  1604. end;
  1605. {$EXTERNALSYM _DOMAIN_PASSWORD_INFORMATION}
  1606. DOMAIN_PASSWORD_INFORMATION = _DOMAIN_PASSWORD_INFORMATION;
  1607. {$EXTERNALSYM DOMAIN_PASSWORD_INFORMATION}
  1608. TDomainPasswordInformation = DOMAIN_PASSWORD_INFORMATION;
  1609. PDomainPasswordInformation = PDOMAIN_PASSWORD_INFORMATION;
  1610. //
  1611. // PasswordProperties flags
  1612. //
  1613. const
  1614. DOMAIN_PASSWORD_COMPLEX = $00000001;
  1615. {$EXTERNALSYM DOMAIN_PASSWORD_COMPLEX}
  1616. DOMAIN_PASSWORD_NO_ANON_CHANGE = $00000002;
  1617. {$EXTERNALSYM DOMAIN_PASSWORD_NO_ANON_CHANGE}
  1618. DOMAIN_PASSWORD_NO_CLEAR_CHANGE = $00000004;
  1619. {$EXTERNALSYM DOMAIN_PASSWORD_NO_CLEAR_CHANGE}
  1620. DOMAIN_LOCKOUT_ADMINS = $00000008;
  1621. {$EXTERNALSYM DOMAIN_LOCKOUT_ADMINS}
  1622. DOMAIN_PASSWORD_STORE_CLEARTEXT = $00000010;
  1623. {$EXTERNALSYM DOMAIN_PASSWORD_STORE_CLEARTEXT}
  1624. DOMAIN_REFUSE_PASSWORD_CHANGE = $00000020;
  1625. {$EXTERNALSYM DOMAIN_REFUSE_PASSWORD_CHANGE}
  1626. type
  1627. PSAM_PASSWORD_NOTIFICATION_ROUTINE = function(UserName: PUNICODE_STRING;
  1628. RelativeId: ULONG; NewPassword: PUNICODE_STRING): NTSTATUS; stdcall;
  1629. {$EXTERNALSYM PSAM_PASSWORD_NOTIFICATION_ROUTINE}
  1630. TSamPasswordNotificationRoutine = PSAM_PASSWORD_NOTIFICATION_ROUTINE;
  1631. const
  1632. SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE = 'PasswordChangeNotify';
  1633. {$EXTERNALSYM SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE}
  1634. type
  1635. PSAM_INIT_NOTIFICATION_ROUTINE = function : ByteBool; stdcall;
  1636. {$EXTERNALSYM PSAM_INIT_NOTIFICATION_ROUTINE}
  1637. TSamInitNotificationRoutine = PSAM_INIT_NOTIFICATION_ROUTINE;
  1638. const
  1639. SAM_INIT_NOTIFICATION_ROUTINE = 'InitializeChangeNotify';
  1640. {$EXTERNALSYM SAM_INIT_NOTIFICATION_ROUTINE}
  1641. SAM_PASSWORD_FILTER_ROUTINE = 'PasswordFilter';
  1642. {$EXTERNALSYM SAM_PASSWORD_FILTER_ROUTINE}
  1643. type
  1644. PSAM_PASSWORD_FILTER_ROUTINE = function(AccountName, FullName,
  1645. Password: PUNICODE_STRING; SetOperation: ByteBool): ByteBool; stdcall;
  1646. {$EXTERNALSYM PSAM_PASSWORD_FILTER_ROUTINE}
  1647. TSamPasswordFilterRoutine = PSAM_PASSWORD_FILTER_ROUTINE;
  1648. /////////////////////////////////////////////////////////////////////////
  1649. // //
  1650. // Name of the MSV1_0 authentication package //
  1651. // //
  1652. /////////////////////////////////////////////////////////////////////////
  1653. const
  1654. MSV1_0_PACKAGE_NAME = 'MICROSOFT_AUTHENTICATION_PACKAGE_V1_0';
  1655. {$EXTERNALSYM MSV1_0_PACKAGE_NAME}
  1656. MSV1_0_PACKAGE_NAMEW = WideString('MICROSOFT_AUTHENTICATION_PACKAGE_V1_0');
  1657. {$EXTERNALSYM MSV1_0_PACKAGE_NAMEW}
  1658. MSV1_0_PACKAGE_NAMEW_LENGTH = SizeOf(MSV1_0_PACKAGE_NAMEW) - SizeOf(WCHAR);
  1659. {$EXTERNALSYM MSV1_0_PACKAGE_NAMEW_LENGTH}
  1660. //
  1661. // Location of MSV authentication package data
  1662. //
  1663. MSV1_0_SUBAUTHENTICATION_KEY = 'SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0';
  1664. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_KEY}
  1665. MSV1_0_SUBAUTHENTICATION_VALUE = 'Auth';
  1666. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_VALUE}
  1667. /////////////////////////////////////////////////////////////////////////
  1668. // //
  1669. // Widely used MSV1_0 data types //
  1670. // //
  1671. /////////////////////////////////////////////////////////////////////////
  1672. ///////////////////////////////////////////////////////////////////////////////
  1673. // //
  1674. // LOGON Related Data Structures
  1675. //
  1676. // //
  1677. ///////////////////////////////////////////////////////////////////////////////
  1678. //
  1679. // When a LsaLogonUser() call is dispatched to the MsV1_0 authentication
  1680. // package, the beginning of the AuthenticationInformation buffer is
  1681. // cast to a MSV1_0_LOGON_SUBMIT_TYPE to determine the type of logon
  1682. // being requested. Similarly, upon return, the type of profile buffer
  1683. // can be determined by typecasting it to a MSV_1_0_PROFILE_BUFFER_TYPE.
  1684. //
  1685. //
  1686. // MSV1.0 LsaLogonUser() submission message types.
  1687. //
  1688. type
  1689. _MSV1_0_LOGON_SUBMIT_TYPE = (
  1690. mlstFiller0, mlstFiller1,
  1691. MsV1_0InteractiveLogon,
  1692. MsV1_0Lm20Logon,
  1693. MsV1_0NetworkLogon,
  1694. MsV1_0SubAuthLogon,
  1695. mlstFiller6,
  1696. MsV1_0WorkstationUnlockLogon);
  1697. {$EXTERNALSYM _MSV1_0_LOGON_SUBMIT_TYPE}
  1698. MSV1_0_LOGON_SUBMIT_TYPE = _MSV1_0_LOGON_SUBMIT_TYPE;
  1699. {$EXTERNALSYM MSV1_0_LOGON_SUBMIT_TYPE}
  1700. PMSV1_0_LOGON_SUBMIT_TYPE = ^MSV1_0_LOGON_SUBMIT_TYPE;
  1701. {$EXTERNALSYM PMSV1_0_LOGON_SUBMIT_TYPE}
  1702. TMsv1_0LogonSubmitType = MSV1_0_LOGON_SUBMIT_TYPE;
  1703. PMsv1_0LogonSubmitType = PMSV1_0_LOGON_SUBMIT_TYPE;
  1704. //
  1705. // MSV1.0 LsaLogonUser() profile buffer types.
  1706. //
  1707. _MSV1_0_PROFILE_BUFFER_TYPE = (
  1708. mpbtFiller0, mpbtFiller1,
  1709. MsV1_0InteractiveProfile,
  1710. MsV1_0Lm20LogonProfile,
  1711. MsV1_0SmartCardProfile);
  1712. {$EXTERNALSYM _MSV1_0_PROFILE_BUFFER_TYPE}
  1713. MSV1_0_PROFILE_BUFFER_TYPE = _MSV1_0_PROFILE_BUFFER_TYPE;
  1714. {$EXTERNALSYM MSV1_0_PROFILE_BUFFER_TYPE}
  1715. PMSV1_0_PROFILE_BUFFER_TYPE = ^MSV1_0_PROFILE_BUFFER_TYPE;
  1716. {$EXTERNALSYM PMSV1_0_PROFILE_BUFFER_TYPE}
  1717. TMsv1_0ProfileBufferType = MSV1_0_PROFILE_BUFFER_TYPE;
  1718. PMsv1_0ProfileBufferType = PMSV1_0_PROFILE_BUFFER_TYPE;
  1719. //
  1720. // MsV1_0InteractiveLogon
  1721. //
  1722. // The AuthenticationInformation buffer of an LsaLogonUser() call to
  1723. // perform an interactive logon contains the following data structure:
  1724. //
  1725. PMSV1_0_INTERACTIVE_LOGON = ^MSV1_0_INTERACTIVE_LOGON;
  1726. {$EXTERNALSYM PMSV1_0_INTERACTIVE_LOGON}
  1727. _MSV1_0_INTERACTIVE_LOGON = record
  1728. MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
  1729. LogonDomainName: UNICODE_STRING;
  1730. UserName: UNICODE_STRING;
  1731. Password: UNICODE_STRING;
  1732. end;
  1733. {$EXTERNALSYM _MSV1_0_INTERACTIVE_LOGON}
  1734. MSV1_0_INTERACTIVE_LOGON = _MSV1_0_INTERACTIVE_LOGON;
  1735. {$EXTERNALSYM MSV1_0_INTERACTIVE_LOGON}
  1736. TMsv10InteractiveLogon = MSV1_0_INTERACTIVE_LOGON;
  1737. PMsv10InteractiveLogon = PMSV1_0_INTERACTIVE_LOGON;
  1738. //
  1739. // Where:
  1740. //
  1741. // MessageType - Contains the type of logon being requested. This
  1742. // field must be set to MsV1_0InteractiveLogon.
  1743. //
  1744. // UserName - Is a string representing the user's account name. The
  1745. // name may be up to 255 characters long. The name is treated case
  1746. // insensitive.
  1747. //
  1748. // Password - Is a string containing the user's cleartext password.
  1749. // The password may be up to 255 characters long and contain any
  1750. // UNICODE value.
  1751. //
  1752. //
  1753. //
  1754. // The ProfileBuffer returned upon a successful logon of this type
  1755. // contains the following data structure:
  1756. //
  1757. PMSV1_0_INTERACTIVE_PROFILE = ^MSV1_0_INTERACTIVE_PROFILE;
  1758. {$EXTERNALSYM PMSV1_0_INTERACTIVE_PROFILE}
  1759. _MSV1_0_INTERACTIVE_PROFILE = record
  1760. MessageType: MSV1_0_PROFILE_BUFFER_TYPE;
  1761. LogonCount: USHORT;
  1762. BadPasswordCount: USHORT;
  1763. LogonTime: LARGE_INTEGER;
  1764. LogoffTime: LARGE_INTEGER;
  1765. KickOffTime: LARGE_INTEGER;
  1766. PasswordLastSet: LARGE_INTEGER;
  1767. PasswordCanChange: LARGE_INTEGER;
  1768. PasswordMustChange: LARGE_INTEGER;
  1769. LogonScript: UNICODE_STRING;
  1770. HomeDirectory: UNICODE_STRING;
  1771. FullName: UNICODE_STRING;
  1772. ProfilePath: UNICODE_STRING;
  1773. HomeDirectoryDrive: UNICODE_STRING;
  1774. LogonServer: UNICODE_STRING;
  1775. UserFlags: ULONG;
  1776. end;
  1777. {$EXTERNALSYM _MSV1_0_INTERACTIVE_PROFILE}
  1778. MSV1_0_INTERACTIVE_PROFILE = _MSV1_0_INTERACTIVE_PROFILE;
  1779. {$EXTERNALSYM MSV1_0_INTERACTIVE_PROFILE}
  1780. TMsv10InteractiveProfile = MSV1_0_INTERACTIVE_PROFILE;
  1781. PMsv10InteractiveProfile = PMSV1_0_INTERACTIVE_PROFILE;
  1782. //
  1783. // where:
  1784. //
  1785. // MessageType - Identifies the type of profile data being returned.
  1786. // Contains the type of logon being requested. This field must
  1787. // be set to MsV1_0InteractiveProfile.
  1788. //
  1789. // LogonCount - Number of times the user is currently logged on.
  1790. //
  1791. // BadPasswordCount - Number of times a bad password was applied to
  1792. // the account since last successful logon.
  1793. //
  1794. // LogonTime - Time when user last logged on. This is an absolute
  1795. // format NT standard time value.
  1796. //
  1797. // LogoffTime - Time when user should log off. This is an absolute
  1798. // format NT standard time value.
  1799. //
  1800. // KickOffTime - Time when system should force user logoff. This is
  1801. // an absolute format NT standard time value.
  1802. //
  1803. // PasswordLastChanged - Time and date the password was last
  1804. // changed. This is an absolute format NT standard time
  1805. // value.
  1806. //
  1807. // PasswordCanChange - Time and date when the user can change the
  1808. // password. This is an absolute format NT time value. To
  1809. // prevent a password from ever changing, set this field to a
  1810. // date very far into the future.
  1811. //
  1812. // PasswordMustChange - Time and date when the user must change the
  1813. // password. If the user can never change the password, this
  1814. // field is undefined. This is an absolute format NT time
  1815. // value.
  1816. //
  1817. // LogonScript - The (relative) path to the account's logon
  1818. // script.
  1819. //
  1820. // HomeDirectory - The home directory for the user.
  1821. //
  1822. //
  1823. // MsV1_0Lm20Logon and MsV1_0NetworkLogon
  1824. //
  1825. // The AuthenticationInformation buffer of an LsaLogonUser() call to
  1826. // perform an network logon contains the following data structure:
  1827. //
  1828. // MsV1_0NetworkLogon logon differs from MsV1_0Lm20Logon in that the
  1829. // ParameterControl field exists.
  1830. //
  1831. const
  1832. MSV1_0_CHALLENGE_LENGTH = 8;
  1833. {$EXTERNALSYM MSV1_0_CHALLENGE_LENGTH}
  1834. MSV1_0_USER_SESSION_KEY_LENGTH = 16;
  1835. {$EXTERNALSYM MSV1_0_USER_SESSION_KEY_LENGTH}
  1836. MSV1_0_LANMAN_SESSION_KEY_LENGTH = 8;
  1837. {$EXTERNALSYM MSV1_0_LANMAN_SESSION_KEY_LENGTH}
  1838. //
  1839. // Values for ParameterControl.
  1840. //
  1841. MSV1_0_CLEARTEXT_PASSWORD_ALLOWED = $02;
  1842. {$EXTERNALSYM MSV1_0_CLEARTEXT_PASSWORD_ALLOWED}
  1843. MSV1_0_UPDATE_LOGON_STATISTICS = $04;
  1844. {$EXTERNALSYM MSV1_0_UPDATE_LOGON_STATISTICS}
  1845. MSV1_0_RETURN_USER_PARAMETERS = $08;
  1846. {$EXTERNALSYM MSV1_0_RETURN_USER_PARAMETERS}
  1847. MSV1_0_DONT_TRY_GUEST_ACCOUNT = $10;
  1848. {$EXTERNALSYM MSV1_0_DONT_TRY_GUEST_ACCOUNT}
  1849. MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT = $20;
  1850. {$EXTERNALSYM MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT}
  1851. MSV1_0_RETURN_PASSWORD_EXPIRY = $40;
  1852. {$EXTERNALSYM MSV1_0_RETURN_PASSWORD_EXPIRY}
  1853. // this next flag says that CaseInsensitiveChallengeResponse
  1854. // (aka LmResponse) contains a client challenge in the first 8 bytes
  1855. MSV1_0_USE_CLIENT_CHALLENGE = $80;
  1856. {$EXTERNALSYM MSV1_0_USE_CLIENT_CHALLENGE}
  1857. MSV1_0_TRY_GUEST_ACCOUNT_ONLY = $100;
  1858. {$EXTERNALSYM MSV1_0_TRY_GUEST_ACCOUNT_ONLY}
  1859. MSV1_0_RETURN_PROFILE_PATH = $200;
  1860. {$EXTERNALSYM MSV1_0_RETURN_PROFILE_PATH}
  1861. MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY = $400;
  1862. {$EXTERNALSYM MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY}
  1863. MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT = $800;
  1864. {$EXTERNALSYM MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT}
  1865. MSV1_0_DISABLE_PERSONAL_FALLBACK = $00001000;
  1866. {$EXTERNALSYM MSV1_0_DISABLE_PERSONAL_FALLBACK}
  1867. MSV1_0_ALLOW_FORCE_GUEST = $00002000;
  1868. {$EXTERNALSYM MSV1_0_ALLOW_FORCE_GUEST}
  1869. MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED = $00004000;
  1870. {$EXTERNALSYM MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED}
  1871. MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY = $00008000;
  1872. {$EXTERNALSYM MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY}
  1873. MSV1_0_SUBAUTHENTICATION_DLL_EX = $00100000;
  1874. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_EX}
  1875. //
  1876. // The high order byte is a value indicating the SubAuthentication DLL.
  1877. // Zero indicates no SubAuthentication DLL.
  1878. //
  1879. MSV1_0_SUBAUTHENTICATION_DLL = DWORD($FF000000);
  1880. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL}
  1881. MSV1_0_SUBAUTHENTICATION_DLL_SHIFT = 24;
  1882. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_SHIFT}
  1883. MSV1_0_MNS_LOGON = $01000000;
  1884. {$EXTERNALSYM MSV1_0_MNS_LOGON}
  1885. //
  1886. // This is the list of subauthentication dlls used in MS
  1887. //
  1888. MSV1_0_SUBAUTHENTICATION_DLL_RAS = 2;
  1889. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_RAS}
  1890. MSV1_0_SUBAUTHENTICATION_DLL_IIS = 132;
  1891. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_IIS}
  1892. type
  1893. PMSV1_0_LM20_LOGON = ^MSV1_0_LM20_LOGON;
  1894. {$EXTERNALSYM PMSV1_0_LM20_LOGON}
  1895. _MSV1_0_LM20_LOGON = record
  1896. MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
  1897. LogonDomainName: UNICODE_STRING;
  1898. UserName: UNICODE_STRING;
  1899. Workstation: UNICODE_STRING;
  1900. ChallengeToClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
  1901. CaseSensitiveChallengeResponse: STRING;
  1902. CaseInsensitiveChallengeResponse: STRING;
  1903. ParameterControl: ULONG;
  1904. end;
  1905. {$EXTERNALSYM _MSV1_0_LM20_LOGON}
  1906. MSV1_0_LM20_LOGON = _MSV1_0_LM20_LOGON;
  1907. {$EXTERNALSYM MSV1_0_LM20_LOGON}
  1908. TMsv10Lm20Logon = MSV1_0_LM20_LOGON;
  1909. PMsv10Lm20Logon = PMSV1_0_LM20_LOGON;
  1910. //
  1911. // NT 5.0 SubAuth dlls can use this struct
  1912. //
  1913. PMSV1_0_SUBAUTH_LOGON = ^MSV1_0_SUBAUTH_LOGON;
  1914. {$EXTERNALSYM PMSV1_0_SUBAUTH_LOGON}
  1915. _MSV1_0_SUBAUTH_LOGON = record
  1916. MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
  1917. LogonDomainName: UNICODE_STRING;
  1918. UserName: UNICODE_STRING;
  1919. Workstation: UNICODE_STRING;
  1920. ChallengeToClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
  1921. AuthenticationInfo1: STRING;
  1922. AuthenticationInfo2: STRING;
  1923. ParameterControl: ULONG;
  1924. SubAuthPackageId: ULONG;
  1925. end;
  1926. {$EXTERNALSYM _MSV1_0_SUBAUTH_LOGON}
  1927. MSV1_0_SUBAUTH_LOGON = _MSV1_0_SUBAUTH_LOGON;
  1928. {$EXTERNALSYM MSV1_0_SUBAUTH_LOGON}
  1929. TMsv10SubauthLogon = MSV1_0_SUBAUTH_LOGON;
  1930. PMsv10SubauthLogon = PMSV1_0_SUBAUTH_LOGON;
  1931. //
  1932. // Values for UserFlags.
  1933. //
  1934. const
  1935. LOGON_GUEST = $01;
  1936. {$EXTERNALSYM LOGON_GUEST}
  1937. LOGON_NOENCRYPTION = $02;
  1938. {$EXTERNALSYM LOGON_NOENCRYPTION}
  1939. LOGON_CACHED_ACCOUNT = $04;
  1940. {$EXTERNALSYM LOGON_CACHED_ACCOUNT}
  1941. LOGON_USED_LM_PASSWORD = $08;
  1942. {$EXTERNALSYM LOGON_USED_LM_PASSWORD}
  1943. LOGON_EXTRA_SIDS = $20;
  1944. {$EXTERNALSYM LOGON_EXTRA_SIDS}
  1945. LOGON_SUBAUTH_SESSION_KEY = $40;
  1946. {$EXTERNALSYM LOGON_SUBAUTH_SESSION_KEY}
  1947. LOGON_SERVER_TRUST_ACCOUNT = $80;
  1948. {$EXTERNALSYM LOGON_SERVER_TRUST_ACCOUNT}
  1949. LOGON_NTLMV2_ENABLED = $100; // says DC understands NTLMv2
  1950. {$EXTERNALSYM LOGON_NTLMV2_ENABLED}
  1951. LOGON_RESOURCE_GROUPS = $200;
  1952. {$EXTERNALSYM LOGON_RESOURCE_GROUPS}
  1953. LOGON_PROFILE_PATH_RETURNED = $400;
  1954. {$EXTERNALSYM LOGON_PROFILE_PATH_RETURNED}
  1955. //
  1956. // The high order byte is reserved for return by SubAuthentication DLLs.
  1957. //
  1958. MSV1_0_SUBAUTHENTICATION_FLAGS = DWORD($FF000000);
  1959. {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_FLAGS}
  1960. // Values returned by the MSV1_0_MNS_LOGON SubAuthentication DLL
  1961. LOGON_GRACE_LOGON = $01000000;
  1962. {$EXTERNALSYM LOGON_GRACE_LOGON}
  1963. type
  1964. PMSV1_0_LM20_LOGON_PROFILE = ^MSV1_0_LM20_LOGON_PROFILE;
  1965. {$EXTERNALSYM PMSV1_0_LM20_LOGON_PROFILE}
  1966. _MSV1_0_LM20_LOGON_PROFILE = record
  1967. MessageType: MSV1_0_PROFILE_BUFFER_TYPE;
  1968. KickOffTime: LARGE_INTEGER;
  1969. LogoffTime: LARGE_INTEGER;
  1970. UserFlags: ULONG;
  1971. UserSessionKey: array [0..MSV1_0_USER_SESSION_KEY_LENGTH - 1] of UCHAR;
  1972. LogonDomainName: UNICODE_STRING;
  1973. LanmanSessionKey: array [0..MSV1_0_LANMAN_SESSION_KEY_LENGTH - 1] of UCHAR;
  1974. LogonServer: UNICODE_STRING;
  1975. UserParameters: UNICODE_STRING;
  1976. end;
  1977. {$EXTERNALSYM _MSV1_0_LM20_LOGON_PROFILE}
  1978. MSV1_0_LM20_LOGON_PROFILE = _MSV1_0_LM20_LOGON_PROFILE;
  1979. {$EXTERNALSYM MSV1_0_LM20_LOGON_PROFILE}
  1980. TMsv10Lm20LogonProfile = MSV1_0_LM20_LOGON_PROFILE;
  1981. PMsv10Lm20LogonProfile = PMSV1_0_LM20_LOGON_PROFILE;
  1982. //
  1983. // Supplemental credentials structure used for passing credentials into
  1984. // MSV1_0 from other packages
  1985. //
  1986. const
  1987. MSV1_0_OWF_PASSWORD_LENGTH = 16;
  1988. {$EXTERNALSYM MSV1_0_OWF_PASSWORD_LENGTH}
  1989. MSV1_0_CRED_LM_PRESENT = $1;
  1990. {$EXTERNALSYM MSV1_0_CRED_LM_PRESENT}
  1991. MSV1_0_CRED_NT_PRESENT = $2;
  1992. {$EXTERNALSYM MSV1_0_CRED_NT_PRESENT}
  1993. MSV1_0_CRED_VERSION = 0;
  1994. {$EXTERNALSYM MSV1_0_CRED_VERSION}
  1995. type
  1996. PMSV1_0_SUPPLEMENTAL_CREDENTIAL = ^MSV1_0_SUPPLEMENTAL_CREDENTIAL;
  1997. {$EXTERNALSYM PMSV1_0_SUPPLEMENTAL_CREDENTIAL}
  1998. _MSV1_0_SUPPLEMENTAL_CREDENTIAL = record
  1999. Version: ULONG;
  2000. Flags: ULONG;
  2001. LmPassword: array [0..MSV1_0_OWF_PASSWORD_LENGTH - 1] of UCHAR;
  2002. NtPassword: array [0..MSV1_0_OWF_PASSWORD_LENGTH - 1] of UCHAR;
  2003. end;
  2004. {$EXTERNALSYM _MSV1_0_SUPPLEMENTAL_CREDENTIAL}
  2005. MSV1_0_SUPPLEMENTAL_CREDENTIAL = _MSV1_0_SUPPLEMENTAL_CREDENTIAL;
  2006. {$EXTERNALSYM MSV1_0_SUPPLEMENTAL_CREDENTIAL}
  2007. TMsv10SupplementalCredential = MSV1_0_SUPPLEMENTAL_CREDENTIAL;
  2008. PMsv10SupplementalCredential = PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
  2009. //
  2010. // NTLM3 definitions.
  2011. //
  2012. const
  2013. MSV1_0_NTLM3_RESPONSE_LENGTH = 16;
  2014. {$EXTERNALSYM MSV1_0_NTLM3_RESPONSE_LENGTH}
  2015. MSV1_0_NTLM3_OWF_LENGTH = 16;
  2016. {$EXTERNALSYM MSV1_0_NTLM3_OWF_LENGTH}
  2017. //
  2018. // this is the longest amount of time we'll allow challenge response
  2019. // pairs to be used. Note that this also has to allow for worst case clock skew
  2020. //
  2021. MSV1_0_MAX_NTLM3_LIFE = 129600; // 36 hours (in seconds)
  2022. {$EXTERNALSYM MSV1_0_MAX_NTLM3_LIFE}
  2023. MSV1_0_MAX_AVL_SIZE = 64000;
  2024. {$EXTERNALSYM MSV1_0_MAX_AVL_SIZE}
  2025. //
  2026. // MsvAvFlags bit values
  2027. //
  2028. MSV1_0_AV_FLAG_FORCE_GUEST = $00000001;
  2029. {$EXTERNALSYM MSV1_0_AV_FLAG_FORCE_GUEST}
  2030. // this is an MSV1_0 private data structure, defining the layout of an NTLM3 response, as sent by a
  2031. // client in the NtChallengeResponse field of the NETLOGON_NETWORK_INFO structure. If can be differentiated
  2032. // from an old style NT response by its length. This is crude, but it needs to pass through servers and
  2033. // the servers' DCs that do not understand NTLM3 but that are willing to pass longer responses.
  2034. type
  2035. PMSV1_0_NTLM3_RESPONSE = ^MSV1_0_NTLM3_RESPONSE;
  2036. {$EXTERNALSYM PMSV1_0_NTLM3_RESPONSE}
  2037. _MSV1_0_NTLM3_RESPONSE = record
  2038. Response: array [0..MSV1_0_NTLM3_RESPONSE_LENGTH - 1] of UCHAR; // hash of OWF of password with all the following fields
  2039. RespType: UCHAR; // id number of response; current is 1
  2040. HiRespType: UCHAR; // highest id number understood by client
  2041. Flags: USHORT; // reserved; must be sent as zero at this version
  2042. MsgWord: ULONG; // 32 bit message from client to server (for use by auth protocol)
  2043. TimeStamp: ULONGLONG; // time stamp when client generated response -- NT system time, quad part
  2044. ChallengeFromClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
  2045. AvPairsOff: ULONG; // offset to start of AvPairs (to allow future expansion)
  2046. Buffer: array [0..0] of UCHAR; // start of buffer with AV pairs (or future stuff -- so use the offset)
  2047. end;
  2048. {$EXTERNALSYM _MSV1_0_NTLM3_RESPONSE}
  2049. MSV1_0_NTLM3_RESPONSE = _MSV1_0_NTLM3_RESPONSE;
  2050. {$EXTERNALSYM MSV1_0_NTLM3_RESPONSE}
  2051. TMsv10Ntlm3Response = MSV1_0_NTLM3_RESPONSE;
  2052. PMsv10Ntlm3Response = PMSV1_0_NTLM3_RESPONSE;
  2053. const
  2054. MSV1_0_NTLM3_INPUT_LENGTH = SizeOf(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH;
  2055. {$EXTERNALSYM MSV1_0_NTLM3_INPUT_LENGTH}
  2056. //todo MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH = RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
  2057. //{$EXTERNALSYM MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH}
  2058. type
  2059. MSV1_0_AVID = (
  2060. MsvAvEOL, // end of list
  2061. MsvAvNbComputerName, // server's computer name -- NetBIOS
  2062. MsvAvNbDomainName, // server's domain name -- NetBIOS
  2063. MsvAvDnsComputerName, // server's computer name -- DNS
  2064. MsvAvDnsDomainName, // server's domain name -- DNS
  2065. MsvAvDnsTreeName, // server's tree name -- DNS
  2066. MsvAvFlags); // server's extended flags -- DWORD mask
  2067. {$EXTERNALSYM MSV1_0_AVID}
  2068. PMSV1_0_AV_PAIR = ^MSV1_0_AV_PAIR;
  2069. {$EXTERNALSYM PMSV1_0_AV_PAIR}
  2070. _MSV1_0_AV_PAIR = record
  2071. AvId: USHORT;
  2072. AvLen: USHORT;
  2073. // Data is treated as byte array following structure
  2074. end;
  2075. {$EXTERNALSYM _MSV1_0_AV_PAIR}
  2076. MSV1_0_AV_PAIR = _MSV1_0_AV_PAIR;
  2077. {$EXTERNALSYM MSV1_0_AV_PAIR}
  2078. TMsv10AvPair = MSV1_0_AV_PAIR;
  2079. PMsv10AvPair = PMSV1_0_AV_PAIR;
  2080. ///////////////////////////////////////////////////////////////////////////////
  2081. // //
  2082. // CALL PACKAGE Related Data Structures //
  2083. // //
  2084. ///////////////////////////////////////////////////////////////////////////////
  2085. //
  2086. // MSV1.0 LsaCallAuthenticationPackage() submission and response
  2087. // message types.
  2088. //
  2089. _MSV1_0_PROTOCOL_MESSAGE_TYPE = (
  2090. MsV1_0Lm20ChallengeRequest, // Both submission and response
  2091. MsV1_0Lm20GetChallengeResponse, // Both submission and response
  2092. MsV1_0EnumerateUsers, // Both submission and response
  2093. MsV1_0GetUserInfo, // Both submission and response
  2094. MsV1_0ReLogonUsers, // Submission only
  2095. MsV1_0ChangePassword, // Both submission and response
  2096. MsV1_0ChangeCachedPassword, // Both submission and response
  2097. MsV1_0GenericPassthrough, // Both submission and response
  2098. MsV1_0CacheLogon, // Submission only, no response
  2099. MsV1_0SubAuth, // Both submission and response
  2100. MsV1_0DeriveCredential, // Both submission and response
  2101. MsV1_0CacheLookup, // Both submission and response
  2102. MsV1_0SetProcessOption); // Submission only, no response
  2103. {$EXTERNALSYM _MSV1_0_PROTOCOL_MESSAGE_TYPE}
  2104. MSV1_0_PROTOCOL_MESSAGE_TYPE = _MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2105. {$EXTERNALSYM MSV1_0_PROTOCOL_MESSAGE_TYPE}
  2106. PMSV1_0_PROTOCOL_MESSAGE_TYPE = ^MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2107. {$EXTERNALSYM PMSV1_0_PROTOCOL_MESSAGE_TYPE}
  2108. TMsv1_0ProtocolMessageType = MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2109. PMsv1_0ProtocolMessageType = PMSV1_0_PROTOCOL_MESSAGE_TYPE;
  2110. PMSV1_0_CHANGEPASSWORD_REQUEST = ^MSV1_0_CHANGEPASSWORD_REQUEST;
  2111. {$EXTERNALSYM PMSV1_0_CHANGEPASSWORD_REQUEST}
  2112. _MSV1_0_CHANGEPASSWORD_REQUEST = record
  2113. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2114. DomainName: UNICODE_STRING;
  2115. AccountName: UNICODE_STRING;
  2116. OldPassword: UNICODE_STRING;
  2117. NewPassword: UNICODE_STRING;
  2118. Impersonating: ByteBool;
  2119. end;
  2120. {$EXTERNALSYM _MSV1_0_CHANGEPASSWORD_REQUEST}
  2121. MSV1_0_CHANGEPASSWORD_REQUEST = _MSV1_0_CHANGEPASSWORD_REQUEST;
  2122. {$EXTERNALSYM MSV1_0_CHANGEPASSWORD_REQUEST}
  2123. TMsv10ChangepasswordRequest = MSV1_0_CHANGEPASSWORD_REQUEST;
  2124. PMsv10ChangepasswordRequest = PMSV1_0_CHANGEPASSWORD_REQUEST;
  2125. PMSV1_0_CHANGEPASSWORD_RESPONSE = ^MSV1_0_CHANGEPASSWORD_RESPONSE;
  2126. {$EXTERNALSYM PMSV1_0_CHANGEPASSWORD_RESPONSE}
  2127. _MSV1_0_CHANGEPASSWORD_RESPONSE = record
  2128. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2129. PasswordInfoValid: ByteBool;
  2130. DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION;
  2131. end;
  2132. {$EXTERNALSYM _MSV1_0_CHANGEPASSWORD_RESPONSE}
  2133. MSV1_0_CHANGEPASSWORD_RESPONSE = _MSV1_0_CHANGEPASSWORD_RESPONSE;
  2134. {$EXTERNALSYM MSV1_0_CHANGEPASSWORD_RESPONSE}
  2135. TMsv10ChangepasswordResponse = MSV1_0_CHANGEPASSWORD_RESPONSE;
  2136. PMsv10ChangepasswordResponse = PMSV1_0_CHANGEPASSWORD_RESPONSE;
  2137. //
  2138. // MsV1_0GenericPassthrough - for remoting a CallPackage to
  2139. // a domain controller on the specified domain
  2140. //
  2141. _MSV1_0_PASSTHROUGH_REQUEST = record
  2142. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2143. DomainName: UNICODE_STRING;
  2144. PackageName: UNICODE_STRING;
  2145. DataLength: ULONG;
  2146. LogonData: PUCHAR;
  2147. Pad: ULONG;
  2148. end;
  2149. {$EXTERNALSYM _MSV1_0_PASSTHROUGH_REQUEST}
  2150. MSV1_0_PASSTHROUGH_REQUEST = _MSV1_0_PASSTHROUGH_REQUEST;
  2151. {$EXTERNALSYM MSV1_0_PASSTHROUGH_REQUEST}
  2152. PMSV1_0_PASSTHROUGH_REQUEST = ^MSV1_0_PASSTHROUGH_REQUEST;
  2153. {$EXTERNALSYM PMSV1_0_PASSTHROUGH_REQUEST}
  2154. TMsv10PassThroughRequest = MSV1_0_PASSTHROUGH_REQUEST;
  2155. PMsv10PassThroughRequest = PMSV1_0_PASSTHROUGH_REQUEST;
  2156. _MSV1_0_PASSTHROUGH_RESPONSE = record
  2157. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2158. Pad: ULONG;
  2159. DataLength: ULONG;
  2160. ValidationData: PUCHAR;
  2161. end;
  2162. {$EXTERNALSYM _MSV1_0_PASSTHROUGH_RESPONSE}
  2163. MSV1_0_PASSTHROUGH_RESPONSE = _MSV1_0_PASSTHROUGH_RESPONSE;
  2164. {$EXTERNALSYM MSV1_0_PASSTHROUGH_RESPONSE}
  2165. PMSV1_0_PASSTHROUGH_RESPONSE = ^MSV1_0_PASSTHROUGH_RESPONSE;
  2166. {$EXTERNALSYM PMSV1_0_PASSTHROUGH_RESPONSE}
  2167. TMsv10PassThroughResponse = MSV1_0_PASSTHROUGH_RESPONSE;
  2168. PMsv10PassThroughResponse = PMSV1_0_PASSTHROUGH_RESPONSE;
  2169. //
  2170. // MsV1_0SubAuthInfo submit buffer and response - for submitting a buffer to a
  2171. // specified Subauthentication Package during an LsaCallAuthenticationPackage().
  2172. // If this Subauthentication is to be done locally, then package this message
  2173. // in LsaCallAuthenticationPackage(). If this SubAuthentication needs to be done
  2174. // on the domain controller, then call LsaCallauthenticationPackage with the
  2175. // message type being MsV1_0GenericPassThrough and the LogonData in this struct
  2176. // should be a PMSV1_0_SUBAUTH_REQUEST
  2177. //
  2178. PMSV1_0_SUBAUTH_REQUEST = ^MSV1_0_SUBAUTH_REQUEST;
  2179. {$EXTERNALSYM PMSV1_0_SUBAUTH_REQUEST}
  2180. _MSV1_0_SUBAUTH_REQUEST = record
  2181. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2182. SubAuthPackageId: ULONG;
  2183. SubAuthInfoLength: ULONG;
  2184. SubAuthSubmitBuffer: PUCHAR;
  2185. end;
  2186. {$EXTERNALSYM _MSV1_0_SUBAUTH_REQUEST}
  2187. MSV1_0_SUBAUTH_REQUEST = _MSV1_0_SUBAUTH_REQUEST;
  2188. {$EXTERNALSYM MSV1_0_SUBAUTH_REQUEST}
  2189. TMsv10SubauthRequest = MSV1_0_SUBAUTH_REQUEST;
  2190. PMsv10SubauthRequest = PMSV1_0_SUBAUTH_REQUEST;
  2191. PMSV1_0_SUBAUTH_RESPONSE = ^MSV1_0_SUBAUTH_RESPONSE;
  2192. {$EXTERNALSYM PMSV1_0_SUBAUTH_RESPONSE}
  2193. _MSV1_0_SUBAUTH_RESPONSE = record
  2194. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2195. SubAuthInfoLength: ULONG;
  2196. SubAuthReturnBuffer: PUCHAR;
  2197. end;
  2198. {$EXTERNALSYM _MSV1_0_SUBAUTH_RESPONSE}
  2199. MSV1_0_SUBAUTH_RESPONSE = _MSV1_0_SUBAUTH_RESPONSE;
  2200. {$EXTERNALSYM MSV1_0_SUBAUTH_RESPONSE}
  2201. TMsv10SubauthResponse = MSV1_0_SUBAUTH_RESPONSE;
  2202. PMsv10SubauthResponse = PMSV1_0_SUBAUTH_RESPONSE;
  2203. //
  2204. // Credential Derivation types for MsV1_0DeriveCredential Submit DeriveCredType
  2205. //
  2206. //
  2207. // Derive Credential using SHA-1 and Request buffer DeriveCredSubmitBuffer of
  2208. // length DeriveCredInfoLength mixing bytes.
  2209. // Response buffer DeriveCredReturnBuffer will contain SHA-1 hash of size
  2210. // A_SHA_DIGEST_LEN (20)
  2211. //
  2212. const
  2213. MSV1_0_DERIVECRED_TYPE_SHA1 = 0;
  2214. {$EXTERNALSYM MSV1_0_DERIVECRED_TYPE_SHA1}
  2215. //
  2216. // MsV1_0DeriveCredential submit buffer and response - for submitting a buffer
  2217. // an call to LsaCallAuthenticationPackage().
  2218. //
  2219. type
  2220. PMSV1_0_DERIVECRED_REQUEST = ^MSV1_0_DERIVECRED_REQUEST;
  2221. {$EXTERNALSYM PMSV1_0_DERIVECRED_REQUEST}
  2222. _MSV1_0_DERIVECRED_REQUEST = record
  2223. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2224. LogonId: LUID;
  2225. DeriveCredType: ULONG;
  2226. DeriveCredInfoLength: ULONG;
  2227. DeriveCredSubmitBuffer: array [0..0] of UCHAR; // in-place array of length DeriveCredInfoLength
  2228. end;
  2229. {$EXTERNALSYM _MSV1_0_DERIVECRED_REQUEST}
  2230. MSV1_0_DERIVECRED_REQUEST = _MSV1_0_DERIVECRED_REQUEST;
  2231. {$EXTERNALSYM MSV1_0_DERIVECRED_REQUEST}
  2232. TMsv10DeriveCredRequest = MSV1_0_DERIVECRED_REQUEST;
  2233. PMsv10DeriveCredRequest = PMSV1_0_DERIVECRED_REQUEST;
  2234. PMSV1_0_DERIVECRED_RESPONSE = ^MSV1_0_DERIVECRED_RESPONSE;
  2235. {$EXTERNALSYM PMSV1_0_DERIVECRED_RESPONSE}
  2236. _MSV1_0_DERIVECRED_RESPONSE = record
  2237. MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
  2238. DeriveCredInfoLength: ULONG;
  2239. DeriveCredReturnBuffer: array [0..0] of UCHAR; // in-place array of length DeriveCredInfoLength
  2240. end;
  2241. {$EXTERNALSYM _MSV1_0_DERIVECRED_RESPONSE}
  2242. MSV1_0_DERIVECRED_RESPONSE = _MSV1_0_DERIVECRED_RESPONSE;
  2243. {$EXTERNALSYM MSV1_0_DERIVECRED_RESPONSE}
  2244. TMsv10DeriveCredResponse = MSV1_0_DERIVECRED_RESPONSE;
  2245. PMsv10DeriveCredResponse = PMSV1_0_DERIVECRED_RESPONSE;
  2246. // Revision of the Kerberos Protocol. MS uses Version 5, Revision 6
  2247. const
  2248. KERBEROS_VERSION = 5;
  2249. {$EXTERNALSYM KERBEROS_VERSION}
  2250. KERBEROS_REVISION = 6;
  2251. {$EXTERNALSYM KERBEROS_REVISION}
  2252. // Encryption Types:
  2253. // These encryption types are supported by the default MS KERBSUPP DLL
  2254. // as crypto systems. Values over 127 are local values, and may be changed
  2255. // without notice.
  2256. KERB_ETYPE_NULL = 0;
  2257. {$EXTERNALSYM KERB_ETYPE_NULL}
  2258. KERB_ETYPE_DES_CBC_CRC = 1;
  2259. {$EXTERNALSYM KERB_ETYPE_DES_CBC_CRC}
  2260. KERB_ETYPE_DES_CBC_MD4 = 2;
  2261. {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD4}
  2262. KERB_ETYPE_DES_CBC_MD5 = 3;
  2263. {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD5}
  2264. KERB_ETYPE_RC4_MD4 = -128;
  2265. {$EXTERNALSYM KERB_ETYPE_RC4_MD4}
  2266. KERB_ETYPE_RC4_PLAIN2 = -129;
  2267. {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN2}
  2268. KERB_ETYPE_RC4_LM = -130;
  2269. {$EXTERNALSYM KERB_ETYPE_RC4_LM}
  2270. KERB_ETYPE_RC4_SHA = -131;
  2271. {$EXTERNALSYM KERB_ETYPE_RC4_SHA}
  2272. KERB_ETYPE_DES_PLAIN = -132;
  2273. {$EXTERNALSYM KERB_ETYPE_DES_PLAIN}
  2274. KERB_ETYPE_RC4_HMAC_OLD = -133;
  2275. {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_OLD}
  2276. KERB_ETYPE_RC4_PLAIN_OLD = -134;
  2277. {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_OLD}
  2278. KERB_ETYPE_RC4_HMAC_OLD_EXP = -135;
  2279. {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_OLD_EXP}
  2280. KERB_ETYPE_RC4_PLAIN_OLD_EXP = -136;
  2281. {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_OLD_EXP}
  2282. KERB_ETYPE_RC4_PLAIN = -140;
  2283. {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN}
  2284. KERB_ETYPE_RC4_PLAIN_EXP = -141;
  2285. {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_EXP}
  2286. //
  2287. // Pkinit encryption types
  2288. //
  2289. KERB_ETYPE_DSA_SHA1_CMS = 9;
  2290. {$EXTERNALSYM KERB_ETYPE_DSA_SHA1_CMS}
  2291. KERB_ETYPE_RSA_MD5_CMS = 10;
  2292. {$EXTERNALSYM KERB_ETYPE_RSA_MD5_CMS}
  2293. KERB_ETYPE_RSA_SHA1_CMS = 11;
  2294. {$EXTERNALSYM KERB_ETYPE_RSA_SHA1_CMS}
  2295. KERB_ETYPE_RC2_CBC_ENV = 12;
  2296. {$EXTERNALSYM KERB_ETYPE_RC2_CBC_ENV}
  2297. KERB_ETYPE_RSA_ENV = 13;
  2298. {$EXTERNALSYM KERB_ETYPE_RSA_ENV}
  2299. KERB_ETYPE_RSA_ES_OEAP_ENV = 14;
  2300. {$EXTERNALSYM KERB_ETYPE_RSA_ES_OEAP_ENV}
  2301. KERB_ETYPE_DES_EDE3_CBC_ENV = 15;
  2302. {$EXTERNALSYM KERB_ETYPE_DES_EDE3_CBC_ENV}
  2303. //
  2304. // Deprecated
  2305. //
  2306. KERB_ETYPE_DSA_SIGN = 8;
  2307. {$EXTERNALSYM KERB_ETYPE_DSA_SIGN}
  2308. KERB_ETYPE_RSA_PRIV = 9;
  2309. {$EXTERNALSYM KERB_ETYPE_RSA_PRIV}
  2310. KERB_ETYPE_RSA_PUB = 10;
  2311. {$EXTERNALSYM KERB_ETYPE_RSA_PUB}
  2312. KERB_ETYPE_RSA_PUB_MD5 = 11;
  2313. {$EXTERNALSYM KERB_ETYPE_RSA_PUB_MD5}
  2314. KERB_ETYPE_RSA_PUB_SHA1 = 12;
  2315. {$EXTERNALSYM KERB_ETYPE_RSA_PUB_SHA1}
  2316. KERB_ETYPE_PKCS7_PUB = 13;
  2317. {$EXTERNALSYM KERB_ETYPE_PKCS7_PUB}
  2318. //
  2319. // Unsupported but defined types
  2320. //
  2321. KERB_ETYPE_DES3_CBC_MD5 = 5;
  2322. {$EXTERNALSYM KERB_ETYPE_DES3_CBC_MD5}
  2323. KERB_ETYPE_DES3_CBC_SHA1 = 7;
  2324. {$EXTERNALSYM KERB_ETYPE_DES3_CBC_SHA1}
  2325. KERB_ETYPE_DES3_CBC_SHA1_KD = 16;
  2326. {$EXTERNALSYM KERB_ETYPE_DES3_CBC_SHA1_KD}
  2327. //
  2328. // In use types
  2329. //
  2330. KERB_ETYPE_DES_CBC_MD5_NT = 20;
  2331. {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD5_NT}
  2332. KERB_ETYPE_RC4_HMAC_NT = 23;
  2333. {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_NT}
  2334. KERB_ETYPE_RC4_HMAC_NT_EXP = 24;
  2335. {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_NT_EXP}
  2336. // Checksum algorithms.
  2337. // These algorithms are keyed internally for our use.
  2338. KERB_CHECKSUM_NONE = 0;
  2339. {$EXTERNALSYM KERB_CHECKSUM_NONE}
  2340. KERB_CHECKSUM_CRC32 = 1;
  2341. {$EXTERNALSYM KERB_CHECKSUM_CRC32}
  2342. KERB_CHECKSUM_MD4 = 2;
  2343. {$EXTERNALSYM KERB_CHECKSUM_MD4}
  2344. KERB_CHECKSUM_KRB_DES_MAC = 4;
  2345. {$EXTERNALSYM KERB_CHECKSUM_KRB_DES_MAC}
  2346. KERB_CHECKSUM_KRB_DES_MAC_K = 5;
  2347. {$EXTERNALSYM KERB_CHECKSUM_KRB_DES_MAC_K}
  2348. KERB_CHECKSUM_MD5 = 7;
  2349. {$EXTERNALSYM KERB_CHECKSUM_MD5}
  2350. KERB_CHECKSUM_MD5_DES = 8;
  2351. {$EXTERNALSYM KERB_CHECKSUM_MD5_DES}
  2352. KERB_CHECKSUM_LM = -130;
  2353. {$EXTERNALSYM KERB_CHECKSUM_LM}
  2354. KERB_CHECKSUM_SHA1 = -131;
  2355. {$EXTERNALSYM KERB_CHECKSUM_SHA1}
  2356. KERB_CHECKSUM_REAL_CRC32 = -132;
  2357. {$EXTERNALSYM KERB_CHECKSUM_REAL_CRC32}
  2358. KERB_CHECKSUM_DES_MAC = -133;
  2359. {$EXTERNALSYM KERB_CHECKSUM_DES_MAC}
  2360. KERB_CHECKSUM_DES_MAC_MD5 = -134;
  2361. {$EXTERNALSYM KERB_CHECKSUM_DES_MAC_MD5}
  2362. KERB_CHECKSUM_MD25 = -135;
  2363. {$EXTERNALSYM KERB_CHECKSUM_MD25}
  2364. KERB_CHECKSUM_RC4_MD5 = -136;
  2365. {$EXTERNALSYM KERB_CHECKSUM_RC4_MD5}
  2366. KERB_CHECKSUM_MD5_HMAC = -137; // used by netlogon
  2367. {$EXTERNALSYM KERB_CHECKSUM_MD5_HMAC}
  2368. KERB_CHECKSUM_HMAC_MD5 = -138; // used by Kerberos
  2369. {$EXTERNALSYM KERB_CHECKSUM_HMAC_MD5}
  2370. AUTH_REQ_ALLOW_FORWARDABLE = $00000001;
  2371. {$EXTERNALSYM AUTH_REQ_ALLOW_FORWARDABLE}
  2372. AUTH_REQ_ALLOW_PROXIABLE = $00000002;
  2373. {$EXTERNALSYM AUTH_REQ_ALLOW_PROXIABLE}
  2374. AUTH_REQ_ALLOW_POSTDATE = $00000004;
  2375. {$EXTERNALSYM AUTH_REQ_ALLOW_POSTDATE}
  2376. AUTH_REQ_ALLOW_RENEWABLE = $00000008;
  2377. {$EXTERNALSYM AUTH_REQ_ALLOW_RENEWABLE}
  2378. AUTH_REQ_ALLOW_NOADDRESS = $00000010;
  2379. {$EXTERNALSYM AUTH_REQ_ALLOW_NOADDRESS}
  2380. AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY = $00000020;
  2381. {$EXTERNALSYM AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY}
  2382. AUTH_REQ_ALLOW_VALIDATE = $00000040;
  2383. {$EXTERNALSYM AUTH_REQ_ALLOW_VALIDATE}
  2384. AUTH_REQ_VALIDATE_CLIENT = $00000080;
  2385. {$EXTERNALSYM AUTH_REQ_VALIDATE_CLIENT}
  2386. AUTH_REQ_OK_AS_DELEGATE = $00000100;
  2387. {$EXTERNALSYM AUTH_REQ_OK_AS_DELEGATE}
  2388. AUTH_REQ_PREAUTH_REQUIRED = $00000200;
  2389. {$EXTERNALSYM AUTH_REQ_PREAUTH_REQUIRED}
  2390. AUTH_REQ_TRANSITIVE_TRUST = $00000400;
  2391. {$EXTERNALSYM AUTH_REQ_TRANSITIVE_TRUST}
  2392. AUTH_REQ_ALLOW_S4U_DELEGATE = $00000800;
  2393. {$EXTERNALSYM AUTH_REQ_ALLOW_S4U_DELEGATE}
  2394. AUTH_REQ_PER_USER_FLAGS = (AUTH_REQ_ALLOW_FORWARDABLE or
  2395. AUTH_REQ_ALLOW_PROXIABLE or
  2396. AUTH_REQ_ALLOW_POSTDATE or
  2397. AUTH_REQ_ALLOW_RENEWABLE or
  2398. AUTH_REQ_ALLOW_VALIDATE);
  2399. {$EXTERNALSYM AUTH_REQ_PER_USER_FLAGS}
  2400. //
  2401. // Ticket Flags:
  2402. //
  2403. KERB_TICKET_FLAGS_reserved = DWORD($80000000);
  2404. {$EXTERNALSYM KERB_TICKET_FLAGS_reserved}
  2405. KERB_TICKET_FLAGS_forwardable = $40000000;
  2406. {$EXTERNALSYM KERB_TICKET_FLAGS_forwardable}
  2407. KERB_TICKET_FLAGS_forwarded = $20000000;
  2408. {$EXTERNALSYM KERB_TICKET_FLAGS_forwarded}
  2409. KERB_TICKET_FLAGS_proxiable = $10000000;
  2410. {$EXTERNALSYM KERB_TICKET_FLAGS_proxiable}
  2411. KERB_TICKET_FLAGS_proxy = $08000000;
  2412. {$EXTERNALSYM KERB_TICKET_FLAGS_proxy}
  2413. KERB_TICKET_FLAGS_may_postdate = $04000000;
  2414. {$EXTERNALSYM KERB_TICKET_FLAGS_may_postdate}
  2415. KERB_TICKET_FLAGS_postdated = $02000000;
  2416. {$EXTERNALSYM KERB_TICKET_FLAGS_postdated}
  2417. KERB_TICKET_FLAGS_invalid = $01000000;
  2418. {$EXTERNALSYM KERB_TICKET_FLAGS_invalid}
  2419. KERB_TICKET_FLAGS_renewable = $00800000;
  2420. {$EXTERNALSYM KERB_TICKET_FLAGS_renewable}
  2421. KERB_TICKET_FLAGS_initial = $00400000;
  2422. {$EXTERNALSYM KERB_TICKET_FLAGS_initial}
  2423. KERB_TICKET_FLAGS_pre_authent = $00200000;
  2424. {$EXTERNALSYM KERB_TICKET_FLAGS_pre_authent}
  2425. KERB_TICKET_FLAGS_hw_authent = $00100000;
  2426. {$EXTERNALSYM KERB_TICKET_FLAGS_hw_authent}
  2427. KERB_TICKET_FLAGS_ok_as_delegate = $00040000;
  2428. {$EXTERNALSYM KERB_TICKET_FLAGS_ok_as_delegate}
  2429. KERB_TICKET_FLAGS_name_canonicalize = $00010000;
  2430. {$EXTERNALSYM KERB_TICKET_FLAGS_name_canonicalize}
  2431. KERB_TICKET_FLAGS_reserved1 = $00000001;
  2432. {$EXTERNALSYM KERB_TICKET_FLAGS_reserved1}
  2433. //
  2434. // Name types
  2435. //
  2436. KRB_NT_UNKNOWN = 0; // Name type not known
  2437. {$EXTERNALSYM KRB_NT_UNKNOWN}
  2438. KRB_NT_PRINCIPAL = 1; // Just the name of the principal as in DCE, or for users
  2439. {$EXTERNALSYM KRB_NT_PRINCIPAL}
  2440. KRB_NT_PRINCIPAL_AND_ID = -131; // Name of the principal and its SID.
  2441. {$EXTERNALSYM KRB_NT_PRINCIPAL_AND_ID}
  2442. KRB_NT_SRV_INST = 2; // Service and other unique instance (krbtgt)
  2443. {$EXTERNALSYM KRB_NT_SRV_INST}
  2444. KRB_NT_SRV_INST_AND_ID = -132; // SPN and SID
  2445. {$EXTERNALSYM KRB_NT_SRV_INST_AND_ID}
  2446. KRB_NT_SRV_HST = 3; // Service with host name as instance (telnet, rcommands)
  2447. {$EXTERNALSYM KRB_NT_SRV_HST}
  2448. KRB_NT_SRV_XHST = 4; // Service with host as remaining components
  2449. {$EXTERNALSYM KRB_NT_SRV_XHST}
  2450. KRB_NT_UID = 5; // Unique ID
  2451. {$EXTERNALSYM KRB_NT_UID}
  2452. KRB_NT_ENTERPRISE_PRINCIPAL = 10; // UPN or SPN
  2453. {$EXTERNALSYM KRB_NT_ENTERPRISE_PRINCIPAL}
  2454. KRB_NT_ENT_PRINCIPAL_AND_ID = -130; // UPN and SID
  2455. {$EXTERNALSYM KRB_NT_ENT_PRINCIPAL_AND_ID}
  2456. //
  2457. // MS extensions, negative according to the RFC
  2458. //
  2459. KRB_NT_MS_PRINCIPAL = -128; // NT4 style name
  2460. {$EXTERNALSYM KRB_NT_MS_PRINCIPAL}
  2461. KRB_NT_MS_PRINCIPAL_AND_ID = -129; // nt4 style name with sid
  2462. {$EXTERNALSYM KRB_NT_MS_PRINCIPAL_AND_ID}
  2463. MICROSOFT_KERBEROS_NAME_A = 'Kerberos';
  2464. {$EXTERNALSYM MICROSOFT_KERBEROS_NAME_A}
  2465. MICROSOFT_KERBEROS_NAME_W = WideString('Kerberos');
  2466. {$EXTERNALSYM MICROSOFT_KERBEROS_NAME_W}
  2467. {$IFDEF UNICODE}
  2468. MICROSOFT_KERBEROS_NAME = MICROSOFT_KERBEROS_NAME_W;
  2469. {$EXTERNALSYM MICROSOFT_KERBEROS_NAME}
  2470. {$ELSE}
  2471. MICROSOFT_KERBEROS_NAME = MICROSOFT_KERBEROS_NAME_A;
  2472. {$EXTERNALSYM MICROSOFT_KERBEROS_NAME}
  2473. {$ENDIF UNICODE}
  2474. function KERB_IS_MS_PRINCIPAL(X: Integer): BOOL;
  2475. /////////////////////////////////////////////////////////////////////////
  2476. //
  2477. // Quality of protection parameters for MakeSignature / EncryptMessage
  2478. //
  2479. /////////////////////////////////////////////////////////////////////////
  2480. //
  2481. // This flag indicates to EncryptMessage that the message is not to actually
  2482. // be encrypted, but a header/trailer are to be produced.
  2483. //
  2484. const
  2485. KERB_WRAP_NO_ENCRYPT = DWORD($80000001);
  2486. {$EXTERNALSYM KERB_WRAP_NO_ENCRYPT}
  2487. /////////////////////////////////////////////////////////////////////////
  2488. //
  2489. // LsaLogonUser parameters
  2490. //
  2491. /////////////////////////////////////////////////////////////////////////
  2492. const
  2493. KerbInteractiveLogon = 2;
  2494. KerbSmartCardLogon = 6;
  2495. KerbWorkstationUnlockLogon = 7;
  2496. KerbSmartCardUnlockLogon = 8;
  2497. KerbProxyLogon = 9;
  2498. KerbTicketLogon = 10;
  2499. KerbTicketUnlockLogon = 11;
  2500. KerbS4ULogon = 12;
  2501. type
  2502. KERB_LOGON_SUBMIT_TYPE = DWORD;
  2503. {$EXTERNALSYM KERB_LOGON_SUBMIT_TYPE}
  2504. PKERB_LOGON_SUBMIT_TYPE = ^KERB_LOGON_SUBMIT_TYPE;
  2505. {$EXTERNALSYM PKERB_LOGON_SUBMIT_TYPE}
  2506. PKERB_INTERACTIVE_LOGON = ^KERB_INTERACTIVE_LOGON;
  2507. {$EXTERNALSYM PKERB_INTERACTIVE_LOGON}
  2508. _KERB_INTERACTIVE_LOGON = record
  2509. MessageType: KERB_LOGON_SUBMIT_TYPE;
  2510. LogonDomainName: UNICODE_STRING;
  2511. UserName: UNICODE_STRING;
  2512. Password: UNICODE_STRING;
  2513. end;
  2514. {$EXTERNALSYM _KERB_INTERACTIVE_LOGON}
  2515. KERB_INTERACTIVE_LOGON = _KERB_INTERACTIVE_LOGON;
  2516. {$EXTERNALSYM KERB_INTERACTIVE_LOGON}
  2517. TKerbInteractiveLogon = KERB_INTERACTIVE_LOGON;
  2518. PKerbInteractiveLogon = PKERB_INTERACTIVE_LOGON;
  2519. PKERB_INTERACTIVE_UNLOCK_LOGON = ^KERB_INTERACTIVE_UNLOCK_LOGON;
  2520. {$EXTERNALSYM PKERB_INTERACTIVE_UNLOCK_LOGON}
  2521. _KERB_INTERACTIVE_UNLOCK_LOGON = record
  2522. Logon: KERB_INTERACTIVE_LOGON;
  2523. LogonId: LUID;
  2524. end;
  2525. {$EXTERNALSYM _KERB_INTERACTIVE_UNLOCK_LOGON}
  2526. KERB_INTERACTIVE_UNLOCK_LOGON = _KERB_INTERACTIVE_UNLOCK_LOGON;
  2527. {$EXTERNALSYM KERB_INTERACTIVE_UNLOCK_LOGON}
  2528. TKerbInteractiveUnlockLogon = KERB_INTERACTIVE_UNLOCK_LOGON;
  2529. PKerbInteractiveUnlockLogon = PKERB_INTERACTIVE_UNLOCK_LOGON;
  2530. PKERB_SMART_CARD_LOGON = ^KERB_SMART_CARD_LOGON;
  2531. {$EXTERNALSYM PKERB_SMART_CARD_LOGON}
  2532. _KERB_SMART_CARD_LOGON = record
  2533. MessageType: KERB_LOGON_SUBMIT_TYPE;
  2534. Pin: UNICODE_STRING;
  2535. CspDataLength: ULONG;
  2536. CspData: PUCHAR;
  2537. end;
  2538. {$EXTERNALSYM _KERB_SMART_CARD_LOGON}
  2539. KERB_SMART_CARD_LOGON = _KERB_SMART_CARD_LOGON;
  2540. {$EXTERNALSYM KERB_SMART_CARD_LOGON}
  2541. TKerbSmartCardLogon = KERB_SMART_CARD_LOGON;
  2542. PKerbSmartCardLogon = PKERB_SMART_CARD_LOGON;
  2543. PKERB_SMART_CARD_UNLOCK_LOGON = ^KERB_SMART_CARD_UNLOCK_LOGON;
  2544. {$EXTERNALSYM PKERB_SMART_CARD_UNLOCK_LOGON}
  2545. _KERB_SMART_CARD_UNLOCK_LOGON = record
  2546. Logon: KERB_SMART_CARD_LOGON;
  2547. LogonId: LUID;
  2548. end;
  2549. {$EXTERNALSYM _KERB_SMART_CARD_UNLOCK_LOGON}
  2550. KERB_SMART_CARD_UNLOCK_LOGON = _KERB_SMART_CARD_UNLOCK_LOGON;
  2551. {$EXTERNALSYM KERB_SMART_CARD_UNLOCK_LOGON}
  2552. TKerbSmartCardUnlockLogon = KERB_SMART_CARD_UNLOCK_LOGON;
  2553. PKerbSmartCardUnlockLogon = PKERB_SMART_CARD_UNLOCK_LOGON;
  2554. //
  2555. // Structure used for a ticket-only logon
  2556. //
  2557. PKERB_TICKET_LOGON = ^KERB_TICKET_LOGON;
  2558. {$EXTERNALSYM PKERB_TICKET_LOGON}
  2559. _KERB_TICKET_LOGON = record
  2560. MessageType: KERB_LOGON_SUBMIT_TYPE;
  2561. Flags: ULONG;
  2562. ServiceTicketLength: ULONG;
  2563. TicketGrantingTicketLength: ULONG;
  2564. ServiceTicket: PUCHAR; // REQUIRED: Service ticket "host"
  2565. TicketGrantingTicket: PUCHAR; // OPTIONAL: User's encdoded in a KERB_CRED message, encrypted with session key from service ticket
  2566. end;
  2567. {$EXTERNALSYM _KERB_TICKET_LOGON}
  2568. KERB_TICKET_LOGON = _KERB_TICKET_LOGON;
  2569. {$EXTERNALSYM KERB_TICKET_LOGON}
  2570. TKerbTicketLogon = KERB_TICKET_LOGON;
  2571. PKerbTicketLogon = PKERB_TICKET_LOGON;
  2572. //
  2573. // Flags for the ticket logon flags field
  2574. //
  2575. const
  2576. KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET = $1;
  2577. {$EXTERNALSYM KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET}
  2578. type
  2579. PKERB_TICKET_UNLOCK_LOGON = ^KERB_TICKET_UNLOCK_LOGON;
  2580. {$EXTERNALSYM PKERB_TICKET_UNLOCK_LOGON}
  2581. _KERB_TICKET_UNLOCK_LOGON = record
  2582. Logon: KERB_TICKET_LOGON;
  2583. LogonId: LUID;
  2584. end;
  2585. {$EXTERNALSYM _KERB_TICKET_UNLOCK_LOGON}
  2586. KERB_TICKET_UNLOCK_LOGON = _KERB_TICKET_UNLOCK_LOGON;
  2587. {$EXTERNALSYM KERB_TICKET_UNLOCK_LOGON}
  2588. TKerbTicketUnlockLogon = KERB_TICKET_UNLOCK_LOGON;
  2589. PKerbTicketUnlockLogon = PKERB_TICKET_UNLOCK_LOGON;
  2590. //
  2591. // Used for S4U Client requests
  2592. //
  2593. //
  2594. _KERB_S4U_LOGON = record
  2595. MessageType: KERB_LOGON_SUBMIT_TYPE;
  2596. Flags: ULONG;
  2597. ClientUpn: UNICODE_STRING; // REQUIRED: UPN for client
  2598. ClientRealm: UNICODE_STRING; // Optional: Client Realm, if known
  2599. end;
  2600. {$EXTERNALSYM _KERB_S4U_LOGON}
  2601. KERB_S4U_LOGON = _KERB_S4U_LOGON;
  2602. {$EXTERNALSYM KERB_S4U_LOGON}
  2603. PKERB_S4U_LOGON = ^KERB_S4U_LOGON;
  2604. {$EXTERNALSYM PKERB_S4U_LOGON}
  2605. TKerbS4ULogon = KERB_S4U_LOGON;
  2606. PKerbS4ULogon = PKERB_S4U_LOGON;
  2607. //
  2608. // Use the same profile structure as MSV1_0
  2609. //
  2610. type
  2611. _KERB_PROFILE_BUFFER_TYPE = (
  2612. kpbtFiller0, kpbtFiller1,
  2613. KerbInteractiveProfile,
  2614. kpbtFiller3,
  2615. KerbSmartCardProfile,
  2616. kpbtFiller5,
  2617. KerbTicketProfile);
  2618. {$EXTERNALSYM _KERB_PROFILE_BUFFER_TYPE}
  2619. KERB_PROFILE_BUFFER_TYPE = _KERB_PROFILE_BUFFER_TYPE;
  2620. {$EXTERNALSYM KERB_PROFILE_BUFFER_TYPE}
  2621. PKERB_PROFILE_BUFFER_TYPE = ^KERB_PROFILE_BUFFER_TYPE;
  2622. {$EXTERNALSYM PKERB_PROFILE_BUFFER_TYPE}
  2623. TKerbProfileBufferType = KERB_PROFILE_BUFFER_TYPE;
  2624. PKerbProfileBufferType = PKERB_PROFILE_BUFFER_TYPE;
  2625. PKERB_INTERACTIVE_PROFILE = ^KERB_INTERACTIVE_PROFILE;
  2626. {$EXTERNALSYM PKERB_INTERACTIVE_PROFILE}
  2627. _KERB_INTERACTIVE_PROFILE = record
  2628. MessageType: KERB_PROFILE_BUFFER_TYPE;
  2629. LogonCount: USHORT;
  2630. BadPasswordCount: USHORT;
  2631. LogonTime: LARGE_INTEGER;
  2632. LogoffTime: LARGE_INTEGER;
  2633. KickOffTime: LARGE_INTEGER;
  2634. PasswordLastSet: LARGE_INTEGER;
  2635. PasswordCanChange: LARGE_INTEGER;
  2636. PasswordMustChange: LARGE_INTEGER;
  2637. LogonScript: UNICODE_STRING;
  2638. HomeDirectory: UNICODE_STRING;
  2639. FullName: UNICODE_STRING;
  2640. ProfilePath: UNICODE_STRING;
  2641. HomeDirectoryDrive: UNICODE_STRING;
  2642. LogonServer: UNICODE_STRING;
  2643. UserFlags: ULONG;
  2644. end;
  2645. {$EXTERNALSYM _KERB_INTERACTIVE_PROFILE}
  2646. KERB_INTERACTIVE_PROFILE = _KERB_INTERACTIVE_PROFILE;
  2647. {$EXTERNALSYM KERB_INTERACTIVE_PROFILE}
  2648. TKerbInteractiveProfile = KERB_INTERACTIVE_PROFILE;
  2649. PKerbInteractiveProfile = PKERB_INTERACTIVE_PROFILE;
  2650. //
  2651. // For smart card, we return a smart card profile, which is an interactive
  2652. // profile plus a certificate
  2653. //
  2654. PKERB_SMART_CARD_PROFILE = ^KERB_SMART_CARD_PROFILE;
  2655. {$EXTERNALSYM PKERB_SMART_CARD_PROFILE}
  2656. _KERB_SMART_CARD_PROFILE = record
  2657. Profile: KERB_INTERACTIVE_PROFILE;
  2658. CertificateSize: ULONG;
  2659. CertificateData: PUCHAR;
  2660. end;
  2661. {$EXTERNALSYM _KERB_SMART_CARD_PROFILE}
  2662. KERB_SMART_CARD_PROFILE = _KERB_SMART_CARD_PROFILE;
  2663. {$EXTERNALSYM KERB_SMART_CARD_PROFILE}
  2664. TKerbSmartCardProfile = KERB_SMART_CARD_PROFILE;
  2665. PKerbSmartCardProfile = PKERB_SMART_CARD_PROFILE;
  2666. //
  2667. // For a ticket logon profile, we return the session key from the ticket
  2668. //
  2669. PKERB_CRYPTO_KEY = ^KERB_CRYPTO_KEY;
  2670. {$EXTERNALSYM PKERB_CRYPTO_KEY}
  2671. KERB_CRYPTO_KEY = record
  2672. KeyType: LONG;
  2673. Length: ULONG;
  2674. Value: PUCHAR;
  2675. end;
  2676. {$EXTERNALSYM KERB_CRYPTO_KEY}
  2677. TKerbCryptoKey = KERB_CRYPTO_KEY;
  2678. PKerbCryptoKey = PKERB_CRYPTO_KEY;
  2679. PKERB_TICKET_PROFILE = ^KERB_TICKET_PROFILE;
  2680. {$EXTERNALSYM PKERB_TICKET_PROFILE}
  2681. _KERB_TICKET_PROFILE = record
  2682. Profile: KERB_INTERACTIVE_PROFILE;
  2683. SessionKey: KERB_CRYPTO_KEY;
  2684. end;
  2685. {$EXTERNALSYM _KERB_TICKET_PROFILE}
  2686. KERB_TICKET_PROFILE = _KERB_TICKET_PROFILE;
  2687. {$EXTERNALSYM KERB_TICKET_PROFILE}
  2688. TKerbTicketProfile = KERB_TICKET_PROFILE;
  2689. PKerbTicketProfile = PKERB_TICKET_PROFILE;
  2690. _KERB_PROTOCOL_MESSAGE_TYPE = (
  2691. KerbDebugRequestMessage,
  2692. KerbQueryTicketCacheMessage,
  2693. KerbChangeMachinePasswordMessage,
  2694. KerbVerifyPacMessage,
  2695. KerbRetrieveTicketMessage,
  2696. KerbUpdateAddressesMessage,
  2697. KerbPurgeTicketCacheMessage,
  2698. KerbChangePasswordMessage,
  2699. KerbRetrieveEncodedTicketMessage,
  2700. KerbDecryptDataMessage,
  2701. KerbAddBindingCacheEntryMessage,
  2702. KerbSetPasswordMessage,
  2703. KerbSetPasswordExMessage,
  2704. KerbVerifyCredentialsMessage,
  2705. KerbQueryTicketCacheExMessage,
  2706. KerbPurgeTicketCacheExMessage,
  2707. KerbRefreshSmartcardCredentialsMessage,
  2708. KerbAddExtraCredentialsMessage,
  2709. KerbQuerySupplementalCredentialsMessage);
  2710. {$EXTERNALSYM _KERB_PROTOCOL_MESSAGE_TYPE}
  2711. KERB_PROTOCOL_MESSAGE_TYPE = _KERB_PROTOCOL_MESSAGE_TYPE;
  2712. {$EXTERNALSYM KERB_PROTOCOL_MESSAGE_TYPE}
  2713. PKERB_PROTOCOL_MESSAGE_TYPE = ^KERB_PROTOCOL_MESSAGE_TYPE;
  2714. {$EXTERNALSYM PKERB_PROTOCOL_MESSAGE_TYPE}
  2715. TKerbProtocolMessageType = KERB_PROTOCOL_MESSAGE_TYPE;
  2716. PKerbProtocolMessageType = PKERB_PROTOCOL_MESSAGE_TYPE;
  2717. //
  2718. // Used both for retrieving tickets and for querying ticket cache
  2719. //
  2720. PKERB_QUERY_TKT_CACHE_REQUEST = ^KERB_QUERY_TKT_CACHE_REQUEST;
  2721. {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_REQUEST}
  2722. _KERB_QUERY_TKT_CACHE_REQUEST = record
  2723. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2724. LogonId: LUID;
  2725. end;
  2726. {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_REQUEST}
  2727. KERB_QUERY_TKT_CACHE_REQUEST = _KERB_QUERY_TKT_CACHE_REQUEST;
  2728. {$EXTERNALSYM KERB_QUERY_TKT_CACHE_REQUEST}
  2729. TKerbQueryTktCacheRequest = KERB_QUERY_TKT_CACHE_REQUEST;
  2730. PKerbQueryTktCacheRequest = PKERB_QUERY_TKT_CACHE_REQUEST;
  2731. PKERB_TICKET_CACHE_INFO = ^KERB_TICKET_CACHE_INFO;
  2732. {$EXTERNALSYM PKERB_TICKET_CACHE_INFO}
  2733. _KERB_TICKET_CACHE_INFO = record
  2734. ServerName: UNICODE_STRING;
  2735. RealmName: UNICODE_STRING;
  2736. StartTime: LARGE_INTEGER;
  2737. EndTime: LARGE_INTEGER;
  2738. RenewTime: LARGE_INTEGER;
  2739. EncryptionType: LONG;
  2740. TicketFlags: ULONG;
  2741. end;
  2742. {$EXTERNALSYM _KERB_TICKET_CACHE_INFO}
  2743. KERB_TICKET_CACHE_INFO = _KERB_TICKET_CACHE_INFO;
  2744. {$EXTERNALSYM KERB_TICKET_CACHE_INFO}
  2745. TKerbTicketCacheInfo = KERB_TICKET_CACHE_INFO;
  2746. PKerbTicketCacheInfo = PKERB_TICKET_CACHE_INFO;
  2747. _KERB_TICKET_CACHE_INFO_EX = record
  2748. ClientName: UNICODE_STRING;
  2749. ClientRealm: UNICODE_STRING;
  2750. ServerName: UNICODE_STRING;
  2751. ServerRealm: UNICODE_STRING;
  2752. StartTime: LARGE_INTEGER;
  2753. EndTime: LARGE_INTEGER;
  2754. RenewTime: LARGE_INTEGER;
  2755. EncryptionType: LONG;
  2756. TicketFlags: ULONG;
  2757. end;
  2758. {$EXTERNALSYM _KERB_TICKET_CACHE_INFO_EX}
  2759. KERB_TICKET_CACHE_INFO_EX = _KERB_TICKET_CACHE_INFO_EX;
  2760. {$EXTERNALSYM KERB_TICKET_CACHE_INFO_EX}
  2761. PKERB_TICKET_CACHE_INFO_EX = ^KERB_TICKET_CACHE_INFO_EX;
  2762. {$EXTERNALSYM PKERB_TICKET_CACHE_INFO_EX}
  2763. TKerbTicketCacheInfoEx = KERB_TICKET_CACHE_INFO_EX;
  2764. PKerbTicketCacheInfoEx = PKERB_TICKET_CACHE_INFO_EX;
  2765. PKERB_QUERY_TKT_CACHE_RESPONSE = ^KERB_QUERY_TKT_CACHE_RESPONSE;
  2766. {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_RESPONSE}
  2767. _KERB_QUERY_TKT_CACHE_RESPONSE = record
  2768. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2769. CountOfTickets: ULONG;
  2770. Tickets: array [0..ANYSIZE_ARRAY - 1] of KERB_TICKET_CACHE_INFO;
  2771. end;
  2772. {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_RESPONSE}
  2773. KERB_QUERY_TKT_CACHE_RESPONSE = _KERB_QUERY_TKT_CACHE_RESPONSE;
  2774. {$EXTERNALSYM KERB_QUERY_TKT_CACHE_RESPONSE}
  2775. TKerbQueryTktCacheResponse = KERB_QUERY_TKT_CACHE_RESPONSE;
  2776. PKerbQueryTktCacheResponse = PKERB_QUERY_TKT_CACHE_RESPONSE;
  2777. _KERB_QUERY_TKT_CACHE_EX_RESPONSE = record
  2778. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2779. CountOfTickets: ULONG;
  2780. Tickets: array [0..ANYSIZE_ARRAY - 1] of KERB_TICKET_CACHE_INFO_EX;
  2781. end;
  2782. {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_EX_RESPONSE}
  2783. KERB_QUERY_TKT_CACHE_EX_RESPONSE = _KERB_QUERY_TKT_CACHE_EX_RESPONSE;
  2784. {$EXTERNALSYM KERB_QUERY_TKT_CACHE_EX_RESPONSE}
  2785. PKERB_QUERY_TKT_CACHE_EX_RESPONSE = ^KERB_QUERY_TKT_CACHE_EX_RESPONSE;
  2786. {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_EX_RESPONSE}
  2787. TKerbQueryTktCacheExResponse = KERB_QUERY_TKT_CACHE_EX_RESPONSE;
  2788. PKerbQueryTktCacheExResponse = PKERB_QUERY_TKT_CACHE_EX_RESPONSE;
  2789. //
  2790. // Types for retrieving encoded ticket from the cache
  2791. //
  2792. _SecHandle = record
  2793. dwLower: ULONG_PTR;
  2794. dwUpper: ULONG_PTR;
  2795. end;
  2796. {$EXTERNALSYM _SecHandle}
  2797. SecHandle = _SecHandle;
  2798. {$EXTERNALSYM SecHandle}
  2799. PSecHandle = ^SecHandle;
  2800. {$EXTERNALSYM PSecHandle}
  2801. // Ticket Flags
  2802. const
  2803. KERB_USE_DEFAULT_TICKET_FLAGS = $0;
  2804. {$EXTERNALSYM KERB_USE_DEFAULT_TICKET_FLAGS}
  2805. // CacheOptions
  2806. KERB_RETRIEVE_TICKET_DEFAULT = $0;
  2807. {$EXTERNALSYM KERB_RETRIEVE_TICKET_DEFAULT}
  2808. KERB_RETRIEVE_TICKET_DONT_USE_CACHE = $1;
  2809. {$EXTERNALSYM KERB_RETRIEVE_TICKET_DONT_USE_CACHE}
  2810. KERB_RETRIEVE_TICKET_USE_CACHE_ONLY = $2;
  2811. {$EXTERNALSYM KERB_RETRIEVE_TICKET_USE_CACHE_ONLY}
  2812. KERB_RETRIEVE_TICKET_USE_CREDHANDLE = $4;
  2813. {$EXTERNALSYM KERB_RETRIEVE_TICKET_USE_CREDHANDLE}
  2814. KERB_RETRIEVE_TICKET_AS_KERB_CRED = $8;
  2815. {$EXTERNALSYM KERB_RETRIEVE_TICKET_AS_KERB_CRED}
  2816. KERB_RETRIEVE_TICKET_WITH_SEC_CRED = $10;
  2817. {$EXTERNALSYM KERB_RETRIEVE_TICKET_WITH_SEC_CRED}
  2818. // Encryption Type options
  2819. KERB_ETYPE_DEFAULT = $0; // don't specify etype in tkt req.
  2820. {$EXTERNALSYM KERB_ETYPE_DEFAULT}
  2821. type
  2822. _KERB_AUTH_DATA = record
  2823. Type_: ULONG;
  2824. Length: ULONG;
  2825. Data: PUCHAR;
  2826. end;
  2827. {$EXTERNALSYM _KERB_AUTH_DATA}
  2828. KERB_AUTH_DATA = _KERB_AUTH_DATA;
  2829. {$EXTERNALSYM KERB_AUTH_DATA}
  2830. PKERB_AUTH_DATA = ^KERB_AUTH_DATA;
  2831. {$EXTERNALSYM PKERB_AUTH_DATA}
  2832. TKerbAuthData = KERB_AUTH_DATA;
  2833. PKerbAuthData = PKERB_AUTH_DATA;
  2834. _KERB_NET_ADDRESS = record
  2835. Family: ULONG;
  2836. Length: ULONG;
  2837. Address: PCHAR;
  2838. end;
  2839. {$EXTERNALSYM _KERB_NET_ADDRESS}
  2840. KERB_NET_ADDRESS = _KERB_NET_ADDRESS;
  2841. {$EXTERNALSYM KERB_NET_ADDRESS}
  2842. PKERB_NET_ADDRESS = ^KERB_NET_ADDRESS;
  2843. {$EXTERNALSYM PKERB_NET_ADDRESS}
  2844. TKerbNetAddress = KERB_NET_ADDRESS;
  2845. PKerbNetAddress = PKERB_NET_ADDRESS;
  2846. _KERB_NET_ADDRESSES = record
  2847. Number: ULONG;
  2848. Addresses: array [0..ANYSIZE_ARRAY - 1] of KERB_NET_ADDRESS;
  2849. end;
  2850. {$EXTERNALSYM _KERB_NET_ADDRESSES}
  2851. KERB_NET_ADDRESSES = _KERB_NET_ADDRESSES;
  2852. {$EXTERNALSYM KERB_NET_ADDRESSES}
  2853. PKERB_NET_ADDRESSES = ^KERB_NET_ADDRESSES;
  2854. {$EXTERNALSYM PKERB_NET_ADDRESSES}
  2855. TKerbNetAddresses = KERB_NET_ADDRESSES;
  2856. PKerbNetAddresses = PKERB_NET_ADDRESSES;
  2857. //
  2858. // Types for the information about a ticket
  2859. //
  2860. type
  2861. PKERB_EXTERNAL_NAME = ^KERB_EXTERNAL_NAME;
  2862. {$EXTERNALSYM PKERB_EXTERNAL_NAME}
  2863. _KERB_EXTERNAL_NAME = record
  2864. NameType: SHORT;
  2865. NameCount: USHORT;
  2866. Names: array [0..ANYSIZE_ARRAY - 1] of UNICODE_STRING;
  2867. end;
  2868. {$EXTERNALSYM _KERB_EXTERNAL_NAME}
  2869. KERB_EXTERNAL_NAME = _KERB_EXTERNAL_NAME;
  2870. {$EXTERNALSYM KERB_EXTERNAL_NAME}
  2871. TKerbExternalName = KERB_EXTERNAL_NAME;
  2872. PKerbExternalName = PKERB_EXTERNAL_NAME;
  2873. PKERB_EXTERNAL_TICKET = ^KERB_EXTERNAL_TICKET;
  2874. {$EXTERNALSYM PKERB_EXTERNAL_TICKET}
  2875. _KERB_EXTERNAL_TICKET = record
  2876. ServiceName: PKERB_EXTERNAL_NAME;
  2877. TargetName: PKERB_EXTERNAL_NAME;
  2878. ClientName: PKERB_EXTERNAL_NAME;
  2879. DomainName: UNICODE_STRING;
  2880. TargetDomainName: UNICODE_STRING; // contains ClientDomainName
  2881. AltTargetDomainName: UNICODE_STRING;
  2882. SessionKey: KERB_CRYPTO_KEY;
  2883. TicketFlags: ULONG;
  2884. Flags: ULONG;
  2885. KeyExpirationTime: LARGE_INTEGER;
  2886. StartTime: LARGE_INTEGER;
  2887. EndTime: LARGE_INTEGER;
  2888. RenewUntil: LARGE_INTEGER;
  2889. TimeSkew: LARGE_INTEGER;
  2890. EncodedTicketSize: ULONG;
  2891. EncodedTicket: PUCHAR;
  2892. end;
  2893. {$EXTERNALSYM _KERB_EXTERNAL_TICKET}
  2894. KERB_EXTERNAL_TICKET = _KERB_EXTERNAL_TICKET;
  2895. {$EXTERNALSYM KERB_EXTERNAL_TICKET}
  2896. TKerbExternalTicket = KERB_EXTERNAL_TICKET;
  2897. PKerbExternalTicket = PKERB_EXTERNAL_TICKET;
  2898. _KERB_RETRIEVE_TKT_REQUEST = record
  2899. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2900. LogonId: LUID;
  2901. TargetName: UNICODE_STRING;
  2902. TicketFlags: ULONG;
  2903. CacheOptions: ULONG;
  2904. EncryptionType: LONG;
  2905. CredentialsHandle: SecHandle;
  2906. end;
  2907. {$EXTERNALSYM _KERB_RETRIEVE_TKT_REQUEST}
  2908. KERB_RETRIEVE_TKT_REQUEST = _KERB_RETRIEVE_TKT_REQUEST;
  2909. {$EXTERNALSYM KERB_RETRIEVE_TKT_REQUEST}
  2910. PKERB_RETRIEVE_TKT_REQUEST = ^KERB_RETRIEVE_TKT_REQUEST;
  2911. {$EXTERNALSYM PKERB_RETRIEVE_TKT_REQUEST}
  2912. TKerbRetrieveTktRequest = KERB_RETRIEVE_TKT_REQUEST;
  2913. PKerbRetrieveTktRequest = PKERB_RETRIEVE_TKT_REQUEST;
  2914. PKERB_RETRIEVE_TKT_RESPONSE = ^KERB_RETRIEVE_TKT_RESPONSE;
  2915. {$EXTERNALSYM PKERB_RETRIEVE_TKT_RESPONSE}
  2916. _KERB_RETRIEVE_TKT_RESPONSE = record
  2917. Ticket: KERB_EXTERNAL_TICKET;
  2918. end;
  2919. {$EXTERNALSYM _KERB_RETRIEVE_TKT_RESPONSE}
  2920. KERB_RETRIEVE_TKT_RESPONSE = _KERB_RETRIEVE_TKT_RESPONSE;
  2921. {$EXTERNALSYM KERB_RETRIEVE_TKT_RESPONSE}
  2922. TKerbRetrieveTktResponse = KERB_RETRIEVE_TKT_RESPONSE;
  2923. PKerbRetrieveTktResponse = PKERB_RETRIEVE_TKT_RESPONSE;
  2924. //
  2925. // Used to purge entries from the ticket cache
  2926. //
  2927. PKERB_PURGE_TKT_CACHE_REQUEST = ^KERB_PURGE_TKT_CACHE_REQUEST;
  2928. {$EXTERNALSYM PKERB_PURGE_TKT_CACHE_REQUEST}
  2929. _KERB_PURGE_TKT_CACHE_REQUEST = record
  2930. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2931. LogonId: LUID;
  2932. ServerName: UNICODE_STRING;
  2933. RealmName: UNICODE_STRING;
  2934. end;
  2935. {$EXTERNALSYM _KERB_PURGE_TKT_CACHE_REQUEST}
  2936. KERB_PURGE_TKT_CACHE_REQUEST = _KERB_PURGE_TKT_CACHE_REQUEST;
  2937. {$EXTERNALSYM KERB_PURGE_TKT_CACHE_REQUEST}
  2938. TKerbPurgeTktCacheRequest = KERB_PURGE_TKT_CACHE_REQUEST;
  2939. PKerbPurgeTktCacheRequest = PKERB_PURGE_TKT_CACHE_REQUEST;
  2940. //
  2941. // Flags for purge requests
  2942. //
  2943. const
  2944. KERB_PURGE_ALL_TICKETS = 1;
  2945. {$EXTERNALSYM KERB_PURGE_ALL_TICKETS}
  2946. type
  2947. _KERB_PURGE_TKT_CACHE_EX_REQUEST = record
  2948. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2949. LogonId: LUID;
  2950. Flags: ULONG;
  2951. TicketTemplate: KERB_TICKET_CACHE_INFO_EX;
  2952. end;
  2953. {$EXTERNALSYM _KERB_PURGE_TKT_CACHE_EX_REQUEST}
  2954. KERB_PURGE_TKT_CACHE_EX_REQUEST = _KERB_PURGE_TKT_CACHE_EX_REQUEST;
  2955. {$EXTERNALSYM KERB_PURGE_TKT_CACHE_EX_REQUEST}
  2956. PKERB_PURGE_TKT_CACHE_EX_REQUEST = ^KERB_PURGE_TKT_CACHE_EX_REQUEST;
  2957. {$EXTERNALSYM PKERB_PURGE_TKT_CACHE_EX_REQUEST}
  2958. TKerbPurgeTktCacheExRequest = KERB_PURGE_TKT_CACHE_EX_REQUEST;
  2959. PKerbPurgeTktCacheExRequest = PKERB_PURGE_TKT_CACHE_EX_REQUEST;
  2960. //
  2961. // KerbChangePassword
  2962. //
  2963. // KerbChangePassword changes the password on the KDC account plus
  2964. // the password cache and logon credentials if applicable.
  2965. //
  2966. //
  2967. PKERB_CHANGEPASSWORD_REQUEST = ^KERB_CHANGEPASSWORD_REQUEST;
  2968. {$EXTERNALSYM PKERB_CHANGEPASSWORD_REQUEST}
  2969. _KERB_CHANGEPASSWORD_REQUEST = record
  2970. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2971. DomainName: UNICODE_STRING;
  2972. AccountName: UNICODE_STRING;
  2973. OldPassword: UNICODE_STRING;
  2974. NewPassword: UNICODE_STRING;
  2975. Impersonating: ByteBool;
  2976. end;
  2977. {$EXTERNALSYM _KERB_CHANGEPASSWORD_REQUEST}
  2978. KERB_CHANGEPASSWORD_REQUEST = _KERB_CHANGEPASSWORD_REQUEST;
  2979. {$EXTERNALSYM KERB_CHANGEPASSWORD_REQUEST}
  2980. TKerbChangepasswordRequest = KERB_CHANGEPASSWORD_REQUEST;
  2981. PKerbChangepasswordRequest = PKERB_CHANGEPASSWORD_REQUEST;
  2982. //
  2983. // KerbSetPassword
  2984. //
  2985. // KerbSetPassword changes the password on the KDC account plus
  2986. // the password cache and logon credentials if applicable.
  2987. //
  2988. //
  2989. PKERB_SETPASSWORD_REQUEST = ^KERB_SETPASSWORD_REQUEST;
  2990. {$EXTERNALSYM PKERB_SETPASSWORD_REQUEST}
  2991. _KERB_SETPASSWORD_REQUEST = record
  2992. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  2993. LogonId: LUID;
  2994. CredentialsHandle: SecHandle;
  2995. Flags: ULONG;
  2996. DomainName: UNICODE_STRING;
  2997. AccountName: UNICODE_STRING;
  2998. Password: UNICODE_STRING;
  2999. end;
  3000. {$EXTERNALSYM _KERB_SETPASSWORD_REQUEST}
  3001. KERB_SETPASSWORD_REQUEST = _KERB_SETPASSWORD_REQUEST;
  3002. {$EXTERNALSYM KERB_SETPASSWORD_REQUEST}
  3003. TKerbSetpasswordRequest = KERB_SETPASSWORD_REQUEST;
  3004. PKerbSetpasswordRequest = PKERB_SETPASSWORD_REQUEST;
  3005. _KERB_SETPASSWORD_EX_REQUEST = record
  3006. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  3007. LogonId: LUID;
  3008. CredentialsHandle: SecHandle;
  3009. Flags: ULONG;
  3010. AccountRealm: UNICODE_STRING;
  3011. AccountName: UNICODE_STRING;
  3012. Password: UNICODE_STRING;
  3013. ClientRealm: UNICODE_STRING;
  3014. ClientName: UNICODE_STRING;
  3015. Impersonating: BOOLEAN;
  3016. KdcAddress: UNICODE_STRING;
  3017. KdcAddressType: ULONG;
  3018. end;
  3019. {$EXTERNALSYM _KERB_SETPASSWORD_EX_REQUEST}
  3020. KERB_SETPASSWORD_EX_REQUEST = _KERB_SETPASSWORD_EX_REQUEST;
  3021. {$EXTERNALSYM KERB_SETPASSWORD_EX_REQUEST}
  3022. PKERB_SETPASSWORD_EX_REQUEST = ^KERB_SETPASSWORD_EX_REQUEST;
  3023. {$EXTERNALSYM PKERB_SETPASSWORD_EX_REQUEST}
  3024. TKerbSetPasswordExRequest = KERB_SETPASSWORD_EX_REQUEST;
  3025. PKerbSetPasswordExRequest = PKERB_SETPASSWORD_EX_REQUEST;
  3026. const
  3027. DS_UNKNOWN_ADDRESS_TYPE = 0; // anything *but* IP
  3028. {$EXTERNALSYM DS_UNKNOWN_ADDRESS_TYPE}
  3029. KERB_SETPASS_USE_LOGONID = 1;
  3030. {$EXTERNALSYM KERB_SETPASS_USE_LOGONID}
  3031. KERB_SETPASS_USE_CREDHANDLE = 2;
  3032. {$EXTERNALSYM KERB_SETPASS_USE_CREDHANDLE}
  3033. type
  3034. PKERB_DECRYPT_REQUEST = ^KERB_DECRYPT_REQUEST;
  3035. {$EXTERNALSYM PKERB_DECRYPT_REQUEST}
  3036. _KERB_DECRYPT_REQUEST = record
  3037. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  3038. LogonId: LUID;
  3039. Flags: ULONG;
  3040. CryptoType: LONG;
  3041. KeyUsage: LONG;
  3042. Key: KERB_CRYPTO_KEY; // optional
  3043. EncryptedDataSize: ULONG;
  3044. InitialVectorSize: ULONG;
  3045. InitialVector: PUCHAR;
  3046. EncryptedData: PUCHAR;
  3047. end;
  3048. {$EXTERNALSYM _KERB_DECRYPT_REQUEST}
  3049. KERB_DECRYPT_REQUEST = _KERB_DECRYPT_REQUEST;
  3050. {$EXTERNALSYM KERB_DECRYPT_REQUEST}
  3051. TKerbDecryptRequest = KERB_DECRYPT_REQUEST;
  3052. PKerbDecryptRequest = PKERB_DECRYPT_REQUEST;
  3053. //
  3054. // If set, use the primary key from the current logon session of the one provided in the LogonId field.
  3055. // Otherwise, use the Key in the KERB_DECRYPT_MESSAGE.
  3056. const
  3057. KERB_DECRYPT_FLAG_DEFAULT_KEY = $00000001;
  3058. {$EXTERNALSYM KERB_DECRYPT_FLAG_DEFAULT_KEY}
  3059. type
  3060. PKERB_DECRYPT_RESPONSE = ^KERB_DECRYPT_RESPONSE;
  3061. {$EXTERNALSYM PKERB_DECRYPT_RESPONSE}
  3062. _KERB_DECRYPT_RESPONSE = record
  3063. DecryptedData: array [0..ANYSIZE_ARRAY - 1] of UCHAR;
  3064. end;
  3065. {$EXTERNALSYM _KERB_DECRYPT_RESPONSE}
  3066. KERB_DECRYPT_RESPONSE = _KERB_DECRYPT_RESPONSE;
  3067. {$EXTERNALSYM KERB_DECRYPT_RESPONSE}
  3068. TKerbDecryptResponse = KERB_DECRYPT_RESPONSE;
  3069. PKerbDecryptResponse = PKERB_DECRYPT_RESPONSE;
  3070. //
  3071. // Request structure for adding a binding cache entry. TCB privilege
  3072. // is required for this operation.
  3073. //
  3074. PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST = ^KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
  3075. {$EXTERNALSYM PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
  3076. _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST = record
  3077. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  3078. RealmName: UNICODE_STRING;
  3079. KdcAddress: UNICODE_STRING;
  3080. AddressType: ULONG; //dsgetdc.h DS_NETBIOS_ADDRESS||DS_INET_ADDRESS
  3081. end;
  3082. {$EXTERNALSYM _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
  3083. KERB_ADD_BINDING_CACHE_ENTRY_REQUEST = _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
  3084. {$EXTERNALSYM KERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
  3085. TKerbAddBindingCacheEntryRequest = KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
  3086. PKerbAddBindingCacheEntryRequest = PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
  3087. //
  3088. // Request structure for reacquiring smartcard credentials for a
  3089. // given LUID.
  3090. // Requires TCB.
  3091. //
  3092. _KERB_REFRESH_SCCRED_REQUEST = record
  3093. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  3094. CredentialBlob: UNICODE_STRING; // optional
  3095. LogonId: LUID;
  3096. Flags: ULONG;
  3097. end;
  3098. {$EXTERNALSYM _KERB_REFRESH_SCCRED_REQUEST}
  3099. KERB_REFRESH_SCCRED_REQUEST = _KERB_REFRESH_SCCRED_REQUEST;
  3100. {$EXTERNALSYM KERB_REFRESH_SCCRED_REQUEST}
  3101. PKERB_REFRESH_SCCRED_REQUEST = ^KERB_REFRESH_SCCRED_REQUEST;
  3102. {$EXTERNALSYM PKERB_REFRESH_SCCRED_REQUEST}
  3103. TKerbRefreshScCredRequest = KERB_REFRESH_SCCRED_REQUEST;
  3104. PKerbRefreshScCredRequest = PKERB_REFRESH_SCCRED_REQUEST;
  3105. //
  3106. // Flags for KERB_REFRESH_SCCRED_REQUEST
  3107. //
  3108. // KERB_REFRESH_SCCRED_RELEASE
  3109. // Release the smartcard handle for LUID
  3110. //
  3111. // KERB_REFRESH_SCCRED_GETTGT
  3112. // Use the certificate hash in the blob to get a TGT for the logon
  3113. // session.
  3114. //
  3115. const
  3116. KERB_REFRESH_SCCRED_RELEASE = $0;
  3117. {$EXTERNALSYM KERB_REFRESH_SCCRED_RELEASE}
  3118. KERB_REFRESH_SCCRED_GETTGT = $1;
  3119. {$EXTERNALSYM KERB_REFRESH_SCCRED_GETTGT}
  3120. //
  3121. // Request structure for adding extra Server credentials to a given
  3122. // logon session. Only applicable during AcceptSecurityContext, and
  3123. // requires TCB to alter "other" creds
  3124. //
  3125. type
  3126. _KERB_ADD_CREDENTIALS_REQUEST = record
  3127. MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
  3128. UserName: UNICODE_STRING;
  3129. DomainName: UNICODE_STRING;
  3130. Password: UNICODE_STRING;
  3131. LogonId: LUID; // optional
  3132. Flags: ULONG;
  3133. end;
  3134. {$EXTERNALSYM _KERB_ADD_CREDENTIALS_REQUEST}
  3135. KERB_ADD_CREDENTIALS_REQUEST = _KERB_ADD_CREDENTIALS_REQUEST;
  3136. {$EXTERNALSYM KERB_ADD_CREDENTIALS_REQUEST}
  3137. PKERB_ADD_CREDENTIALS_REQUEST = ^KERB_ADD_CREDENTIALS_REQUEST;
  3138. {$EXTERNALSYM PKERB_ADD_CREDENTIALS_REQUEST}
  3139. TKerbAddCredentialsRequest = KERB_ADD_CREDENTIALS_REQUEST;
  3140. PKerbAddCredentialsRequest = PKERB_ADD_CREDENTIALS_REQUEST;
  3141. const
  3142. KERB_REQUEST_ADD_CREDENTIAL = 1;
  3143. {$EXTERNALSYM KERB_REQUEST_ADD_CREDENTIAL}
  3144. KERB_REQUEST_REPLACE_CREDENTIAL = 2;
  3145. {$EXTERNALSYM KERB_REQUEST_REPLACE_CREDENTIAL}
  3146. KERB_REQUEST_REMOVE_CREDENTIAL = 4;
  3147. {$EXTERNALSYM KERB_REQUEST_REMOVE_CREDENTIAL}
  3148. implementation
  3149. uses
  3150. JwaWinDLLNames;
  3151. function LSA_SUCCESS(Error: NTSTATUS): BOOL;
  3152. begin
  3153. Result := LONG(Error) > 0;
  3154. end;
  3155. function KERB_IS_MS_PRINCIPAL(X: Integer): BOOL;
  3156. begin
  3157. Result := (X <= KRB_NT_MS_PRINCIPAL) or (X >= KRB_NT_ENTERPRISE_PRINCIPAL);
  3158. end;
  3159. {$IFDEF DYNAMIC_LINK}
  3160. var
  3161. _LsaRegisterLogonProcess: Pointer;
  3162. function LsaRegisterLogonProcess;
  3163. begin
  3164. GetProcedureAddress(_LsaRegisterLogonProcess, secur32, 'LsaRegisterLogonProcess');
  3165. asm
  3166. MOV ESP, EBP
  3167. POP EBP
  3168. JMP [_LsaRegisterLogonProcess]
  3169. end;
  3170. end;
  3171. var
  3172. _LsaLogonUser: Pointer;
  3173. function LsaLogonUser;
  3174. begin
  3175. GetProcedureAddress(_LsaLogonUser, secur32, 'LsaLogonUser');
  3176. asm
  3177. MOV ESP, EBP
  3178. POP EBP
  3179. JMP [_LsaLogonUser]
  3180. end;
  3181. end;
  3182. var
  3183. _LsaLookupAuthenticationPackage: Pointer;
  3184. function LsaLookupAuthenticationPackage;
  3185. begin
  3186. GetProcedureAddress(_LsaLookupAuthenticationPackage, secur32, 'LsaLookupAuthenticationPackage');
  3187. asm
  3188. MOV ESP, EBP
  3189. POP EBP
  3190. JMP [_LsaLookupAuthenticationPackage]
  3191. end;
  3192. end;
  3193. var
  3194. _LsaFreeReturnBuffer: Pointer;
  3195. function LsaFreeReturnBuffer;
  3196. begin
  3197. GetProcedureAddress(_LsaFreeReturnBuffer, secur32, 'LsaFreeReturnBuffer');
  3198. asm
  3199. MOV ESP, EBP
  3200. POP EBP
  3201. JMP [_LsaFreeReturnBuffer]
  3202. end;
  3203. end;
  3204. var
  3205. _LsaCallAuthenticationPackage: Pointer;
  3206. function LsaCallAuthenticationPackage;
  3207. begin
  3208. GetProcedureAddress(_LsaCallAuthenticationPackage, secur32, 'LsaCallAuthenticationPackage');
  3209. asm
  3210. MOV ESP, EBP
  3211. POP EBP
  3212. JMP [_LsaCallAuthenticationPackage]
  3213. end;
  3214. end;
  3215. var
  3216. _LsaDeregisterLogonProcess: Pointer;
  3217. function LsaDeregisterLogonProcess;
  3218. begin
  3219. GetProcedureAddress(_LsaDeregisterLogonProcess, secur32, 'LsaDeregisterLogonProcess');
  3220. asm
  3221. MOV ESP, EBP
  3222. POP EBP
  3223. JMP [_LsaDeregisterLogonProcess]
  3224. end;
  3225. end;
  3226. var
  3227. _LsaConnectUntrusted: Pointer;
  3228. function LsaConnectUntrusted;
  3229. begin
  3230. GetProcedureAddress(_LsaConnectUntrusted, secur32, 'LsaConnectUntrusted');
  3231. asm
  3232. MOV ESP, EBP
  3233. POP EBP
  3234. JMP [_LsaConnectUntrusted]
  3235. end;
  3236. end;
  3237. var
  3238. _LsaFreeMemory: Pointer;
  3239. function LsaFreeMemory;
  3240. begin
  3241. GetProcedureAddress(_LsaFreeMemory, advapi32, 'LsaFreeMemory');
  3242. asm
  3243. MOV ESP, EBP
  3244. POP EBP
  3245. JMP [_LsaFreeMemory]
  3246. end;
  3247. end;
  3248. var
  3249. _LsaClose: Pointer;
  3250. function LsaClose;
  3251. begin
  3252. GetProcedureAddress(_LsaClose, advapi32, 'LsaClose');
  3253. asm
  3254. MOV ESP, EBP
  3255. POP EBP
  3256. JMP [_LsaClose]
  3257. end;
  3258. end;
  3259. var
  3260. _LsaOpenPolicy: Pointer;
  3261. function LsaOpenPolicy;
  3262. begin
  3263. GetProcedureAddress(_LsaOpenPolicy, advapi32, 'LsaOpenPolicy');
  3264. asm
  3265. MOV ESP, EBP
  3266. POP EBP
  3267. JMP [_LsaOpenPolicy]
  3268. end;
  3269. end;
  3270. var
  3271. _LsaEnumerateLogonSessions: Pointer;
  3272. function LsaEnumerateLogonSessions;
  3273. begin
  3274. GetProcedureAddress(_LsaEnumerateLogonSessions, secur32, 'LsaEnumerateLogonSessions');
  3275. asm
  3276. MOV ESP, EBP
  3277. POP EBP
  3278. JMP [_LsaEnumerateLogonSessions]
  3279. end;
  3280. end;
  3281. var
  3282. _LsaGetLogonSessionData: Pointer;
  3283. function LsaGetLogonSessionData;
  3284. begin
  3285. GetProcedureAddress(_LsaGetLogonSessionData, secur32, 'LsaGetLogonSessionData');
  3286. asm
  3287. MOV ESP, EBP
  3288. POP EBP
  3289. JMP [_LsaGetLogonSessionData]
  3290. end;
  3291. end;
  3292. var
  3293. _LsaQueryInformationPolicy: Pointer;
  3294. function LsaQueryInformationPolicy;
  3295. begin
  3296. GetProcedureAddress(_LsaQueryInformationPolicy, advapi32, 'LsaQueryInformationPolicy');
  3297. asm
  3298. MOV ESP, EBP
  3299. POP EBP
  3300. JMP [_LsaQueryInformationPolicy]
  3301. end;
  3302. end;
  3303. var
  3304. _LsaSetInformationPolicy: Pointer;
  3305. function LsaSetInformationPolicy;
  3306. begin
  3307. GetProcedureAddress(_LsaSetInformationPolicy, advapi32, 'LsaSetInformationPolicy');
  3308. asm
  3309. MOV ESP, EBP
  3310. POP EBP
  3311. JMP [_LsaSetInformationPolicy]
  3312. end;
  3313. end;
  3314. var
  3315. _LsaQueryDomainInformationPolicy: Pointer;
  3316. function LsaQueryDomainInformationPolicy;
  3317. begin
  3318. GetProcedureAddress(_LsaQueryDomainInformationPolicy, advapi32, 'LsaQueryDomainInformationPolicy');
  3319. asm
  3320. MOV ESP, EBP
  3321. POP EBP
  3322. JMP [_LsaQueryDomainInformationPolicy]
  3323. end;
  3324. end;
  3325. var
  3326. _LsaSetDomainInformationPolicy: Pointer;
  3327. function LsaSetDomainInformationPolicy;
  3328. begin
  3329. GetProcedureAddress(_LsaSetDomainInformationPolicy, advapi32, 'LsaSetDomainInformationPolicy');
  3330. asm
  3331. MOV ESP, EBP
  3332. POP EBP
  3333. JMP [_LsaSetDomainInformationPolicy]
  3334. end;
  3335. end;
  3336. var
  3337. _LsaRegisterPolicyChangeNot: Pointer;
  3338. function LsaRegisterPolicyChangeNotification;
  3339. begin
  3340. GetProcedureAddress(_LsaRegisterPolicyChangeNot, secur32, 'LsaRegisterPolicyChangeNotification');
  3341. asm
  3342. MOV ESP, EBP
  3343. POP EBP
  3344. JMP [_LsaRegisterPolicyChangeNot]
  3345. end;
  3346. end;
  3347. var
  3348. _LsaUnregisterPolicyChangeNot: Pointer;
  3349. function LsaUnregisterPolicyChangeNotification;
  3350. begin
  3351. GetProcedureAddress(_LsaUnregisterPolicyChangeNot, secur32, 'LsaUnregisterPolicyChangeNotification');
  3352. asm
  3353. MOV ESP, EBP
  3354. POP EBP
  3355. JMP [_LsaUnregisterPolicyChangeNot]
  3356. end;
  3357. end;
  3358. var
  3359. _LsaEnumerateTrustedDomains: Pointer;
  3360. function LsaEnumerateTrustedDomains;
  3361. begin
  3362. GetProcedureAddress(_LsaEnumerateTrustedDomains, advapi32, 'LsaEnumerateTrustedDomains');
  3363. asm
  3364. MOV ESP, EBP
  3365. POP EBP
  3366. JMP [_LsaEnumerateTrustedDomains]
  3367. end;
  3368. end;
  3369. var
  3370. _LsaLookupNames: Pointer;
  3371. function LsaLookupNames;
  3372. begin
  3373. GetProcedureAddress(_LsaLookupNames, advapi32, 'LsaLookupNames');
  3374. asm
  3375. MOV ESP, EBP
  3376. POP EBP
  3377. JMP [_LsaLookupNames]
  3378. end;
  3379. end;
  3380. var
  3381. _LsaLookupNames2: Pointer;
  3382. function LsaLookupNames2;
  3383. begin
  3384. GetProcedureAddress(_LsaLookupNames2, advapi32, 'LsaLookupNames2');
  3385. asm
  3386. MOV ESP, EBP
  3387. POP EBP
  3388. JMP [_LsaLookupNames2]
  3389. end;
  3390. end;
  3391. var
  3392. _LsaLookupSids: Pointer;
  3393. function LsaLookupSids;
  3394. begin
  3395. GetProcedureAddress(_LsaLookupSids, advapi32, 'LsaLookupSids');
  3396. asm
  3397. MOV ESP, EBP
  3398. POP EBP
  3399. JMP [_LsaLookupSids]
  3400. end;
  3401. end;
  3402. var
  3403. _LsaEnumAccountsWithUserRight: Pointer;
  3404. function LsaEnumerateAccountsWithUserRight;
  3405. begin
  3406. GetProcedureAddress(_LsaEnumAccountsWithUserRight, advapi32, 'LsaEnumerateAccountsWithUserRight');
  3407. asm
  3408. MOV ESP, EBP
  3409. POP EBP
  3410. JMP [_LsaEnumAccountsWithUserRight]
  3411. end;
  3412. end;
  3413. var
  3414. _LsaEnumerateAccountRights: Pointer;
  3415. function LsaEnumerateAccountRights;
  3416. begin
  3417. GetProcedureAddress(_LsaEnumerateAccountRights, advapi32, 'LsaEnumerateAccountRights');
  3418. asm
  3419. MOV ESP, EBP
  3420. POP EBP
  3421. JMP [_LsaEnumerateAccountRights]
  3422. end;
  3423. end;
  3424. var
  3425. _LsaAddAccountRights: Pointer;
  3426. function LsaAddAccountRights;
  3427. begin
  3428. GetProcedureAddress(_LsaAddAccountRights, advapi32, 'LsaAddAccountRights');
  3429. asm
  3430. MOV ESP, EBP
  3431. POP EBP
  3432. JMP [_LsaAddAccountRights]
  3433. end;
  3434. end;
  3435. var
  3436. _LsaRemoveAccountRights: Pointer;
  3437. function LsaRemoveAccountRights;
  3438. begin
  3439. GetProcedureAddress(_LsaRemoveAccountRights, advapi32, 'LsaRemoveAccountRights');
  3440. asm
  3441. MOV ESP, EBP
  3442. POP EBP
  3443. JMP [_LsaRemoveAccountRights]
  3444. end;
  3445. end;
  3446. var
  3447. _LsaOpenTrustedDomainByName: Pointer;
  3448. function LsaOpenTrustedDomainByName;
  3449. begin
  3450. GetProcedureAddress(_LsaOpenTrustedDomainByName, advapi32, 'LsaOpenTrustedDomainByName');
  3451. asm
  3452. MOV ESP, EBP
  3453. POP EBP
  3454. JMP [_LsaOpenTrustedDomainByName]
  3455. end;
  3456. end;
  3457. var
  3458. _LsaQueryTrustedDomainInfo: Pointer;
  3459. function LsaQueryTrustedDomainInfo;
  3460. begin
  3461. GetProcedureAddress(_LsaQueryTrustedDomainInfo, advapi32, 'LsaQueryTrustedDomainInfo');
  3462. asm
  3463. MOV ESP, EBP
  3464. POP EBP
  3465. JMP [_LsaQueryTrustedDomainInfo]
  3466. end;
  3467. end;
  3468. var
  3469. _LsaSetTrustedDomainInformation: Pointer;
  3470. function LsaSetTrustedDomainInformation;
  3471. begin
  3472. GetProcedureAddress(_LsaSetTrustedDomainInformation, advapi32, 'LsaSetTrustedDomainInformation');
  3473. asm
  3474. MOV ESP, EBP
  3475. POP EBP
  3476. JMP [_LsaSetTrustedDomainInformation]
  3477. end;
  3478. end;
  3479. var
  3480. _LsaDeleteTrustedDomain: Pointer;
  3481. function LsaDeleteTrustedDomain;
  3482. begin
  3483. GetProcedureAddress(_LsaDeleteTrustedDomain, advapi32, 'LsaDeleteTrustedDomain');
  3484. asm
  3485. MOV ESP, EBP
  3486. POP EBP
  3487. JMP [_LsaDeleteTrustedDomain]
  3488. end;
  3489. end;
  3490. var
  3491. _LsaQueryTrustedDomainInfoByName: Pointer;
  3492. function LsaQueryTrustedDomainInfoByName;
  3493. begin
  3494. GetProcedureAddress(_LsaQueryTrustedDomainInfoByName, advapi32, 'LsaQueryTrustedDomainInfoByName');
  3495. asm
  3496. MOV ESP, EBP
  3497. POP EBP
  3498. JMP [_LsaQueryTrustedDomainInfoByName]
  3499. end;
  3500. end;
  3501. var
  3502. _LsaSetTrustedDomainInfoByName: Pointer;
  3503. function LsaSetTrustedDomainInfoByName;
  3504. begin
  3505. GetProcedureAddress(_LsaSetTrustedDomainInfoByName, advapi32, 'LsaSetTrustedDomainInfoByName');
  3506. asm
  3507. MOV ESP, EBP
  3508. POP EBP
  3509. JMP [_LsaSetTrustedDomainInfoByName]
  3510. end;
  3511. end;
  3512. var
  3513. _LsaEnumerateTrustedDomainsEx: Pointer;
  3514. function LsaEnumerateTrustedDomainsEx;
  3515. begin
  3516. GetProcedureAddress(_LsaEnumerateTrustedDomainsEx, advapi32, 'LsaEnumerateTrustedDomainsEx');
  3517. asm
  3518. MOV ESP, EBP
  3519. POP EBP
  3520. JMP [_LsaEnumerateTrustedDomainsEx]
  3521. end;
  3522. end;
  3523. var
  3524. _LsaCreateTrustedDomainEx: Pointer;
  3525. function LsaCreateTrustedDomainEx;
  3526. begin
  3527. GetProcedureAddress(_LsaCreateTrustedDomainEx, advapi32, 'LsaCreateTrustedDomainEx');
  3528. asm
  3529. MOV ESP, EBP
  3530. POP EBP
  3531. JMP [_LsaCreateTrustedDomainEx]
  3532. end;
  3533. end;
  3534. var
  3535. _LsaQueryForestTrustInformation: Pointer;
  3536. function LsaQueryForestTrustInformation;
  3537. begin
  3538. GetProcedureAddress(_LsaQueryForestTrustInformation, advapi32, 'LsaQueryForestTrustInformation');
  3539. asm
  3540. MOV ESP, EBP
  3541. POP EBP
  3542. JMP [_LsaQueryForestTrustInformation]
  3543. end;
  3544. end;
  3545. var
  3546. _LsaSetForestTrustInformation: Pointer;
  3547. function LsaSetForestTrustInformation;
  3548. begin
  3549. GetProcedureAddress(_LsaSetForestTrustInformation, advapi32, 'LsaSetForestTrustInformation');
  3550. asm
  3551. MOV ESP, EBP
  3552. POP EBP
  3553. JMP [_LsaSetForestTrustInformation]
  3554. end;
  3555. end;
  3556. var
  3557. _LsaStorePrivateData: Pointer;
  3558. function LsaStorePrivateData;
  3559. begin
  3560. GetProcedureAddress(_LsaStorePrivateData, advapi32, 'LsaStorePrivateData');
  3561. asm
  3562. MOV ESP, EBP
  3563. POP EBP
  3564. JMP [_LsaStorePrivateData]
  3565. end;
  3566. end;
  3567. var
  3568. _LsaRetrievePrivateData: Pointer;
  3569. function LsaRetrievePrivateData;
  3570. begin
  3571. GetProcedureAddress(_LsaRetrievePrivateData, advapi32, 'LsaRetrievePrivateData');
  3572. asm
  3573. MOV ESP, EBP
  3574. POP EBP
  3575. JMP [_LsaRetrievePrivateData]
  3576. end;
  3577. end;
  3578. var
  3579. _LsaNtStatusToWinError: Pointer;
  3580. function LsaNtStatusToWinError;
  3581. begin
  3582. GetProcedureAddress(_LsaNtStatusToWinError, advapi32, 'LsaNtStatusToWinError');
  3583. asm
  3584. MOV ESP, EBP
  3585. POP EBP
  3586. JMP [_LsaNtStatusToWinError]
  3587. end;
  3588. end;
  3589. {$ELSE}
  3590. function LsaRegisterLogonProcess; external secur32 name 'LsaRegisterLogonProcess';
  3591. function LsaLogonUser; external secur32 name 'LsaLogonUser';
  3592. function LsaLookupAuthenticationPackage; external secur32 name 'LsaLookupAuthenticationPackage';
  3593. function LsaFreeReturnBuffer; external secur32 name 'LsaFreeReturnBuffer';
  3594. function LsaCallAuthenticationPackage; external secur32 name 'LsaCallAuthenticationPackage';
  3595. function LsaDeregisterLogonProcess; external secur32 name 'LsaDeregisterLogonProcess';
  3596. function LsaConnectUntrusted; external secur32 name 'LsaConnectUntrusted';
  3597. function LsaFreeMemory; external advapi32 name 'LsaFreeMemory';
  3598. function LsaClose; external advapi32 name 'LsaClose';
  3599. function LsaOpenPolicy; external advapi32 name 'LsaOpenPolicy';
  3600. function LsaEnumerateLogonSessions; external secur32 name 'LsaEnumerateLogonSessions';
  3601. function LsaGetLogonSessionData; external secur32 name 'LsaGetLogonSessionData';
  3602. function LsaQueryInformationPolicy; external advapi32 name 'LsaQueryInformationPolicy';
  3603. function LsaSetInformationPolicy; external advapi32 name 'LsaSetInformationPolicy';
  3604. function LsaQueryDomainInformationPolicy; external advapi32 name 'LsaQueryDomainInformationPolicy';
  3605. function LsaSetDomainInformationPolicy; external advapi32 name 'LsaSetDomainInformationPolicy';
  3606. function LsaRegisterPolicyChangeNotification; external secur32 name 'LsaRegisterPolicyChangeNotification';
  3607. function LsaUnregisterPolicyChangeNotification; external secur32 name 'LsaUnregisterPolicyChangeNotification';
  3608. function LsaEnumerateTrustedDomains; external advapi32 name 'LsaEnumerateTrustedDomains';
  3609. function LsaLookupNames; external advapi32 name 'LsaLookupNames';
  3610. function LsaLookupNames2; external advapi32 name 'LsaLookupNames2';
  3611. function LsaLookupSids; external advapi32 name 'LsaLookupSids';
  3612. function LsaEnumerateAccountsWithUserRight; external advapi32 name 'LsaEnumerateAccountsWithUserRight';
  3613. function LsaEnumerateAccountRights; external advapi32 name 'LsaEnumerateAccountRights';
  3614. function LsaAddAccountRights; external advapi32 name 'LsaAddAccountRights';
  3615. function LsaRemoveAccountRights; external advapi32 name 'LsaRemoveAccountRights';
  3616. function LsaOpenTrustedDomainByName; external advapi32 name 'LsaOpenTrustedDomainByName';
  3617. function LsaQueryTrustedDomainInfo; external advapi32 name 'LsaQueryTrustedDomainInfo';
  3618. function LsaSetTrustedDomainInformation; external advapi32 name 'LsaSetTrustedDomainInformation';
  3619. function LsaDeleteTrustedDomain; external advapi32 name 'LsaDeleteTrustedDomain';
  3620. function LsaQueryTrustedDomainInfoByName; external advapi32 name 'LsaQueryTrustedDomainInfoByName';
  3621. function LsaSetTrustedDomainInfoByName; external advapi32 name 'LsaSetTrustedDomainInfoByName';
  3622. function LsaEnumerateTrustedDomainsEx; external advapi32 name 'LsaEnumerateTrustedDomainsEx';
  3623. function LsaCreateTrustedDomainEx; external advapi32 name 'LsaCreateTrustedDomainEx';
  3624. function LsaQueryForestTrustInformation; external advapi32 name 'LsaQueryForestTrustInformation';
  3625. function LsaSetForestTrustInformation; external advapi32 name 'LsaSetForestTrustInformation';
  3626. function LsaStorePrivateData; external advapi32 name 'LsaStorePrivateData';
  3627. function LsaRetrievePrivateData; external advapi32 name 'LsaRetrievePrivateData';
  3628. function LsaNtStatusToWinError; external advapi32 name 'LsaNtStatusToWinError';
  3629. {$ENDIF DYNAMIC_LINK}
  3630. end.