1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111 |
- {******************************************************************************}
- { }
- { LSA API interface Unit for Object Pascal }
- { }
- { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
- { Corporation. All Rights Reserved. }
- { }
- { The original file is: ntsecapi.h, released June 2000. The original Pascal }
- { code is: NtSecApi.pas, released December 2000. The initial developer of the }
- { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
- { }
- { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
- { Marcel van Brakel. All Rights Reserved. }
- { }
- { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
- { }
- { You may retrieve the latest version of this file at the Project JEDI }
- { APILIB home page, located at http://jedi-apilib.sourceforge.net }
- { }
- { The contents of this file are used with permission, subject to the Mozilla }
- { Public License Version 1.1 (the "License"); you may not use this file except }
- { in compliance with the License. You may obtain a copy of the License at }
- { http://www.mozilla.org/MPL/MPL-1.1.html }
- { }
- { Software distributed under the License is distributed on an "AS IS" basis, }
- { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
- { the specific language governing rights and limitations under the License. }
- { }
- { Alternatively, the contents of this file may be used under the terms of the }
- { GNU Lesser General Public License (the "LGPL License"), in which case the }
- { provisions of the LGPL License are applicable instead of those above. }
- { If you wish to allow use of your version of this file only under the terms }
- { of the LGPL License and not to allow others to use your version of this file }
- { under the MPL, indicate your decision by deleting the provisions above and }
- { replace them with the notice and other provisions required by the LGPL }
- { License. If you do not delete the provisions above, a recipient may use }
- { your version of this file under either the MPL or the LGPL License. }
- { }
- { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
- { }
- {******************************************************************************}
- // $Id: JwaNtSecApi.pas,v 1.13 2005/09/08 07:49:25 marquardt Exp $
- unit JwaNtSecApi;
- {$WEAKPACKAGEUNIT}
- {$HPPEMIT ''}
- {$HPPEMIT '#include "ntsecapi.h"'}
- {$HPPEMIT ''}
- {$I jediapilib.inc}
- interface
- uses
- JwaWindows;
- //
- // Security operation mode of the system is held in a control
- // longword.
- //
- type
- LSA_OPERATIONAL_MODE = ULONG;
- {$EXTERNALSYM LSA_OPERATIONAL_MODE}
- PLSA_OPERATIONAL_MODE = ^LSA_OPERATIONAL_MODE;
- {$EXTERNALSYM PLSA_OPERATIONAL_MODE}
- //
- // The flags in the security operational mode are defined
- // as:
- //
- // PasswordProtected - Some level of authentication (such as
- // a password) must be provided by users before they are
- // allowed to use the system. Once set, this value will
- // not be cleared without re-booting the system.
- //
- // IndividualAccounts - Each user must identify an account to
- // logon to. This flag is only meaningful if the
- // PasswordProtected flag is also set. If this flag is
- // not set and the PasswordProtected flag is set, then all
- // users may logon to the same account. Once set, this value
- // will not be cleared without re-booting the system.
- //
- // MandatoryAccess - Indicates the system is running in a mandatory
- // access control mode (e.g., B-level as defined by the U.S.A's
- // Department of Defense's "Orange Book"). This is not utilized
- // in the current release of NT. This flag is only meaningful
- // if both the PasswordProtected and IndividualAccounts flags are
- // set. Once set, this value will not be cleared without
- // re-booting the system.
- //
- // LogFull - Indicates the system has been brought up in a mode in
- // which if must perform security auditing, but its audit log
- // is full. This may (should) restrict the operations that
- // can occur until the audit log is made not-full again. THIS
- // VALUE MAY BE CLEARED WHILE THE SYSTEM IS RUNNING (I.E., WITHOUT
- // REBOOTING).
- //
- // If the PasswordProtected flag is not set, then the system is running
- // without security, and user interface should be adjusted appropriately.
- //
- const
- LSA_MODE_PASSWORD_PROTECTED = $00000001;
- {$EXTERNALSYM LSA_MODE_PASSWORD_PROTECTED}
- LSA_MODE_INDIVIDUAL_ACCOUNTS = $00000002;
- {$EXTERNALSYM LSA_MODE_INDIVIDUAL_ACCOUNTS}
- LSA_MODE_MANDATORY_ACCESS = $00000004;
- {$EXTERNALSYM LSA_MODE_MANDATORY_ACCESS}
- LSA_MODE_LOG_FULL = $00000008;
- {$EXTERNALSYM LSA_MODE_LOG_FULL}
- //
- // Used by a logon process to indicate what type of logon is being
- // requested.
- //
- type
- _SECURITY_LOGON_TYPE = (
- seltFiller0, seltFiller1,
- Interactive, // Interactively logged on (locally or remotely)
- Network, // Accessing system via network
- Batch, // Started via a batch queue
- Service, // Service started by service controller
- Proxy, // Proxy logon
- Unlock, // Unlock workstation
- NetworkCleartext, // Network logon with cleartext credentials
- NewCredentials, // Clone caller, new default credentials
- RemoteInteractive, // Remote, yet interactive. Terminal server
- CachedInteractive, // Try cached credentials without hitting the net.
- CachedRemoteInteractive, // Same as RemoteInteractive, this is used internally for auditing purpose
- CachedUnlock); // Cached Unlock workstation
- {$EXTERNALSYM _SECURITY_LOGON_TYPE}
- SECURITY_LOGON_TYPE = _SECURITY_LOGON_TYPE;
- {$EXTERNALSYM SECURITY_LOGON_TYPE}
- PSECURITY_LOGON_TYPE = ^SECURITY_LOGON_TYPE;
- {$EXTERNALSYM PSECURITY_LOGON_TYPE}
- TSecurityLogonType = SECURITY_LOGON_TYPE;
- PSecurityLogonType = PSECURITY_LOGON_TYPE;
- //
- // Audit Event Categories
- //
- // The following are the built-in types or Categories of audit event.
- // WARNING! This structure is subject to expansion. The user should not
- // compute the number of elements of this type directly, but instead
- // should obtain the count of elements by calling LsaQueryInformationPolicy()
- // for the PolicyAuditEventsInformation class and extracting the count from
- // the MaximumAuditEventCount field of the returned structure.
- //
- _POLICY_AUDIT_EVENT_TYPE = (
- AuditCategorySystem,
- AuditCategoryLogon,
- AuditCategoryObjectAccess,
- AuditCategoryPrivilegeUse,
- AuditCategoryDetailedTracking,
- AuditCategoryPolicyChange,
- AuditCategoryAccountManagement,
- AuditCategoryDirectoryServiceAccess,
- AuditCategoryAccountLogon);
- {$EXTERNALSYM _POLICY_AUDIT_EVENT_TYPE}
- POLICY_AUDIT_EVENT_TYPE = _POLICY_AUDIT_EVENT_TYPE;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_TYPE}
- PPOLICY_AUDIT_EVENT_TYPE = ^POLICY_AUDIT_EVENT_TYPE;
- {$EXTERNALSYM PPOLICY_AUDIT_EVENT_TYPE}
- TPolicyAuditEventType = POLICY_AUDIT_EVENT_TYPE;
- PPolicyAuditEventType = PPOLICY_AUDIT_EVENT_TYPE;
- //
- // The following defines describe the auditing options for each
- // event type
- //
- const
- // Leave options specified for this event unchanged
- POLICY_AUDIT_EVENT_UNCHANGED = $00000000;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_UNCHANGED}
- // Audit successful occurrences of events of this type
- POLICY_AUDIT_EVENT_SUCCESS = $00000001;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_SUCCESS}
- // Audit failed attempts to cause an event of this type to occur
- POLICY_AUDIT_EVENT_FAILURE = $00000002;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_FAILURE}
- POLICY_AUDIT_EVENT_NONE = $00000004;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_NONE}
- // Mask of valid event auditing options
- POLICY_AUDIT_EVENT_MASK = (POLICY_AUDIT_EVENT_SUCCESS or POLICY_AUDIT_EVENT_FAILURE or
- POLICY_AUDIT_EVENT_UNCHANGED or POLICY_AUDIT_EVENT_NONE);
- {$EXTERNALSYM POLICY_AUDIT_EVENT_MASK}
- TPolicyAuditEventMask = POLICY_AUDIT_EVENT_MASK;
- type
- PLSA_UNICODE_STRING = ^LSA_UNICODE_STRING;
- {$EXTERNALSYM PLSA_UNICODE_STRING}
- _LSA_UNICODE_STRING = record
- Length: USHORT;
- MaximumLength: USHORT;
- Buffer: PWSTR;
- end;
- {$EXTERNALSYM _LSA_UNICODE_STRING}
- LSA_UNICODE_STRING = _LSA_UNICODE_STRING;
- {$EXTERNALSYM LSA_UNICODE_STRING}
- TLsaUnicodeString = LSA_UNICODE_STRING;
- PLsaUnicodeString = PLSA_UNICODE_STRING;
- PLSA_STRING = ^LSA_STRING;
- {$EXTERNALSYM PLSA_STRING}
- _LSA_STRING = record
- Length: USHORT;
- MaximumLength: USHORT;
- Buffer: PCHAR;
- end;
- {$EXTERNALSYM _LSA_STRING}
- LSA_STRING = _LSA_STRING;
- {$EXTERNALSYM LSA_STRING}
- TLsaString = LSA_STRING;
- PLsaString = PLSA_STRING;
- PLSA_OBJECT_ATTRIBUTES = ^LSA_OBJECT_ATTRIBUTES;
- {$EXTERNALSYM PLSA_OBJECT_ATTRIBUTES}
- _LSA_OBJECT_ATTRIBUTES = record
- Length: ULONG;
- RootDirectory: HANDLE;
- ObjectName: PLSA_UNICODE_STRING;
- Attributes: ULONG;
- SecurityDescriptor: PVOID; // Points to type SECURITY_DESCRIPTOR
- SecurityQualityOfService: PVOID; // Points to type SECURITY_QUALITY_OF_SERVICE
- end;
- {$EXTERNALSYM _LSA_OBJECT_ATTRIBUTES}
- LSA_OBJECT_ATTRIBUTES = _LSA_OBJECT_ATTRIBUTES;
- {$EXTERNALSYM LSA_OBJECT_ATTRIBUTES}
- TLsaObjectAttributes = LSA_OBJECT_ATTRIBUTES;
- PLsaObjectAttributes = PLSA_OBJECT_ATTRIBUTES;
- //
- // Macro for determining whether an API succeeded.
- //
- function LSA_SUCCESS(Error: NTSTATUS): BOOL;
- {$EXTERNALSYM LSA_SUCCESS}
- function LsaRegisterLogonProcess(const LogonProcessName: LSA_STRING;
- var LsaHandle: HANDLE; SecurityMode: PLSA_OPERATIONAL_MODE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaRegisterLogonProcess}
- function LsaLogonUser(LsaHandle: HANDLE; const OriginName: LSA_STRING;
- LogonType: SECURITY_LOGON_TYPE; AuthenticationPackage: ULONG;
- AuthenticationInformation: PVOID; AuthenticationInformationLength: ULONG;
- LocalGroups: PTOKEN_GROUPS; SourceContext: PTOKEN_SOURCE;
- var ProfileBuffer: PVOID; var ProfileBufferLength: ULONG; var LogonId: LUID;
- var Token: HANDLE; var Quotas: QUOTA_LIMITS; var SubStatus: NTSTATUS): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaLogonUser}
- function LsaLookupAuthenticationPackage(LsaHandle: HANDLE;
- const PackageName: LSA_STRING; var AuthenticationPackage: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaLookupAuthenticationPackage}
- function LsaFreeReturnBuffer(Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaFreeReturnBuffer}
- function LsaCallAuthenticationPackage(LsaHandle: HANDLE;
- AuthenticationPackage: ULONG; ProtocolSubmitBuffer: PVOID;
- SubmitBufferLength: ULONG; var ProtocolReturnBuffer: PVOID;
- var ReturnBufferLength: ULONG; var ProtocolStatus: NTSTATUS): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaCallAuthenticationPackage}
- function LsaDeregisterLogonProcess(LsaHandle: HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaDeregisterLogonProcess}
- function LsaConnectUntrusted(var LsaHandle: HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaConnectUntrusted}
- ////////////////////////////////////////////////////////////////////////////
- // //
- // Local Security Policy Administration API datatypes and defines //
- // //
- ////////////////////////////////////////////////////////////////////////////
- //
- // Access types for the Policy object
- //
- const
- POLICY_VIEW_LOCAL_INFORMATION = $00000001;
- {$EXTERNALSYM POLICY_VIEW_LOCAL_INFORMATION}
- POLICY_VIEW_AUDIT_INFORMATION = $00000002;
- {$EXTERNALSYM POLICY_VIEW_AUDIT_INFORMATION}
- POLICY_GET_PRIVATE_INFORMATION = $00000004;
- {$EXTERNALSYM POLICY_GET_PRIVATE_INFORMATION}
- POLICY_TRUST_ADMIN = $00000008;
- {$EXTERNALSYM POLICY_TRUST_ADMIN}
- POLICY_CREATE_ACCOUNT = $00000010;
- {$EXTERNALSYM POLICY_CREATE_ACCOUNT}
- POLICY_CREATE_SECRET = $00000020;
- {$EXTERNALSYM POLICY_CREATE_SECRET}
- POLICY_CREATE_PRIVILEGE = $00000040;
- {$EXTERNALSYM POLICY_CREATE_PRIVILEGE}
- POLICY_SET_DEFAULT_QUOTA_LIMITS = $00000080;
- {$EXTERNALSYM POLICY_SET_DEFAULT_QUOTA_LIMITS}
- POLICY_SET_AUDIT_REQUIREMENTS = $00000100;
- {$EXTERNALSYM POLICY_SET_AUDIT_REQUIREMENTS}
- POLICY_AUDIT_LOG_ADMIN = $00000200;
- {$EXTERNALSYM POLICY_AUDIT_LOG_ADMIN}
- POLICY_SERVER_ADMIN = $00000400;
- {$EXTERNALSYM POLICY_SERVER_ADMIN}
- POLICY_LOOKUP_NAMES = $00000800;
- {$EXTERNALSYM POLICY_LOOKUP_NAMES}
- POLICY_NOTIFICATION = $00001000;
- {$EXTERNALSYM POLICY_NOTIFICATION}
- POLICY_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or
- POLICY_VIEW_LOCAL_INFORMATION or
- POLICY_VIEW_AUDIT_INFORMATION or
- POLICY_GET_PRIVATE_INFORMATION or
- POLICY_TRUST_ADMIN or
- POLICY_CREATE_ACCOUNT or
- POLICY_CREATE_SECRET or
- POLICY_CREATE_PRIVILEGE or
- POLICY_SET_DEFAULT_QUOTA_LIMITS or
- POLICY_SET_AUDIT_REQUIREMENTS or
- POLICY_AUDIT_LOG_ADMIN or
- POLICY_SERVER_ADMIN or
- POLICY_LOOKUP_NAMES);
- {$EXTERNALSYM POLICY_ALL_ACCESS}
- POLICY_READ = (STANDARD_RIGHTS_READ or
- POLICY_VIEW_AUDIT_INFORMATION or
- POLICY_GET_PRIVATE_INFORMATION);
- {$EXTERNALSYM POLICY_READ}
- POLICY_WRITE = (STANDARD_RIGHTS_WRITE or
- POLICY_TRUST_ADMIN or
- POLICY_CREATE_ACCOUNT or
- POLICY_CREATE_SECRET or
- POLICY_CREATE_PRIVILEGE or
- POLICY_SET_DEFAULT_QUOTA_LIMITS or
- POLICY_SET_AUDIT_REQUIREMENTS or
- POLICY_AUDIT_LOG_ADMIN or
- POLICY_SERVER_ADMIN);
- {$EXTERNALSYM POLICY_WRITE}
- POLICY_EXECUTE = (STANDARD_RIGHTS_EXECUTE or
- POLICY_VIEW_LOCAL_INFORMATION or
- POLICY_LOOKUP_NAMES);
- {$EXTERNALSYM POLICY_EXECUTE}
- //
- // Policy object specific data types.
- //
- //
- // The following data type is used to identify a domain
- //
- type
- PLSA_TRUST_INFORMATION = ^LSA_TRUST_INFORMATION;
- {$EXTERNALSYM PLSA_TRUST_INFORMATION}
- _LSA_TRUST_INFORMATION = record
- Name: LSA_UNICODE_STRING;
- Sid: PSID;
- end;
- {$EXTERNALSYM _LSA_TRUST_INFORMATION}
- LSA_TRUST_INFORMATION = _LSA_TRUST_INFORMATION;
- {$EXTERNALSYM LSA_TRUST_INFORMATION}
- TLsaTrustInformation = LSA_TRUST_INFORMATION;
- PLsaTrustInformation = PLSA_TRUST_INFORMATION;
- // where members have the following usage:
- //
- // Name - The name of the domain.
- //
- // Sid - A pointer to the Sid of the Domain
- //
- //
- // The following data type is used in name and SID lookup services to
- // describe the domains referenced in the lookup operation.
- //
- PLSA_REFERENCED_DOMAIN_LIST = ^LSA_REFERENCED_DOMAIN_LIST;
- {$EXTERNALSYM PLSA_REFERENCED_DOMAIN_LIST}
- _LSA_REFERENCED_DOMAIN_LIST = record
- Entries: ULONG;
- Domains: PLSA_TRUST_INFORMATION;
- end;
- {$EXTERNALSYM _LSA_REFERENCED_DOMAIN_LIST}
- LSA_REFERENCED_DOMAIN_LIST = _LSA_REFERENCED_DOMAIN_LIST;
- {$EXTERNALSYM LSA_REFERENCED_DOMAIN_LIST}
- TLsaReferencedDomainList = LSA_REFERENCED_DOMAIN_LIST;
- PLsaReferencedDomainList = PLSA_REFERENCED_DOMAIN_LIST;
- // where members have the following usage:
- //
- // Entries - Is a count of the number of domains described in the
- // Domains array.
- //
- // Domains - Is a pointer to an array of Entries LSA_TRUST_INFORMATION data
- // structures.
- //
- //
- // The following data type is used in name to SID lookup services to describe
- // the domains referenced in the lookup operation.
- //
- PLSA_TRANSLATED_SID = ^LSA_TRANSLATED_SID;
- {$EXTERNALSYM PLSA_TRANSLATED_SID}
- _LSA_TRANSLATED_SID = record
- Use: SID_NAME_USE;
- RelativeId: ULONG;
- DomainIndex: LONG;
- end;
- {$EXTERNALSYM _LSA_TRANSLATED_SID}
- LSA_TRANSLATED_SID = _LSA_TRANSLATED_SID;
- {$EXTERNALSYM LSA_TRANSLATED_SID}
- TLsaTranslatedSid = LSA_TRANSLATED_SID;
- PLsaTranslatedSid = PLSA_TRANSLATED_SID;
- // where members have the following usage:
- //
- // Use - identifies the use of the SID. If this value is SidUnknown or
- // SidInvalid, then the remainder of the record is not set and
- // should be ignored.
- //
- // RelativeId - Contains the relative ID of the translated SID. The
- // remainder of the SID (the prefix) is obtained using the
- // DomainIndex field.
- //
- // DomainIndex - Is the index of an entry in a related
- // LSA_REFERENCED_DOMAIN_LIST data structure describing the
- // domain in which the account was found.
- //
- // If there is no corresponding reference domain for an entry, then
- // this field will contain a negative value.
- //
- _LSA_TRANSLATED_SID2 = record
- Use: SID_NAME_USE;
- Sid: PSID;
- DomainIndex: LONG;
- Flags: ULONG;
- end;
- {$EXTERNALSYM _LSA_TRANSLATED_SID2}
- LSA_TRANSLATED_SID2 = _LSA_TRANSLATED_SID2;
- {$EXTERNALSYM LSA_TRANSLATED_SID2}
- PLSA_TRANSLATED_SID2 = ^LSA_TRANSLATED_SID2;
- {$EXTERNALSYM PLSA_TRANSLATED_SID2}
- TLsaTranslatedSid2 = LSA_TRANSLATED_SID2;
- PLsaTranslatedSid2 = PLSA_TRANSLATED_SID2;
- // where members have the following usage:
- //
- // Use - identifies the use of the SID. If this value is SidUnknown or
- // SidInvalid, then the remainder of the record is not set and
- // should be ignored.
- //
- // Sid - Contains the complete Sid of the tranlated SID
- //
- // DomainIndex - Is the index of an entry in a related
- // LSA_REFERENCED_DOMAIN_LIST data structure describing the
- // domain in which the account was found.
- //
- // If there is no corresponding reference domain for an entry, then
- // this field will contain a negative value.
- //
- //
- // The following data type is used in SID to name lookup services to
- // describe the domains referenced in the lookup operation.
- //
- PLSA_TRANSLATED_NAME = ^LSA_TRANSLATED_NAME;
- {$EXTERNALSYM PLSA_TRANSLATED_NAME}
- _LSA_TRANSLATED_NAME = record
- Use: SID_NAME_USE;
- Name: LSA_UNICODE_STRING;
- DomainIndex: LONG;
- end;
- {$EXTERNALSYM _LSA_TRANSLATED_NAME}
- LSA_TRANSLATED_NAME = _LSA_TRANSLATED_NAME;
- {$EXTERNALSYM LSA_TRANSLATED_NAME}
- TLsaTranslatedName = LSA_TRANSLATED_NAME;
- PLsaTranslatedName = PLSA_TRANSLATED_NAME;
- // where the members have the following usage:
- //
- // Use - Identifies the use of the name. If this value is SidUnknown
- // or SidInvalid, then the remainder of the record is not set and
- // should be ignored. If this value is SidWellKnownGroup then the
- // Name field is invalid, but the DomainIndex field is not.
- //
- // Name - Contains the isolated name of the translated SID.
- //
- // DomainIndex - Is the index of an entry in a related
- // LSA_REFERENCED_DOMAIN_LIST data structure describing the domain
- // in which the account was found.
- //
- // If there is no corresponding reference domain for an entry, then
- // this field will contain a negative value.
- //
- //
- // The following data type is used to represent the role of the LSA
- // server (primary or backup).
- //
- _POLICY_LSA_SERVER_ROLE = (plsrFiller0, plsrFiller1, PolicyServerRoleBackup,
- PolicyServerRolePrimary);
- {$EXTERNALSYM _POLICY_LSA_SERVER_ROLE}
- POLICY_LSA_SERVER_ROLE = _POLICY_LSA_SERVER_ROLE;
- {$EXTERNALSYM POLICY_LSA_SERVER_ROLE}
- PPOLICY_LSA_SERVER_ROLE = ^POLICY_LSA_SERVER_ROLE;
- {$EXTERNALSYM PPOLICY_LSA_SERVER_ROLE}
- TPolicyLsaServerRole = POLICY_LSA_SERVER_ROLE;
- PPolicyLsaServerRole = PPOLICY_LSA_SERVER_ROLE;
- //
- // The following data type is used to specify the auditing options for
- // an Audit Event Type.
- //
- POLICY_AUDIT_EVENT_OPTIONS = ULONG;
- {$EXTERNALSYM POLICY_AUDIT_EVENT_OPTIONS}
- PPOLICY_AUDIT_EVENT_OPTIONS = ^POLICY_AUDIT_EVENT_OPTIONS;
- {$EXTERNALSYM PPOLICY_AUDIT_EVENT_OPTIONS}
- // where the following flags can be set:
- //
- // POLICY_AUDIT_EVENT_UNCHANGED - Leave existing auditing options
- // unchanged for events of this type. This flag is only used for
- // set operations. If this flag is set, then all other flags
- // are ignored.
- //
- // POLICY_AUDIT_EVENT_NONE - Cancel all auditing options for events
- // of this type. If this flag is set, the success/failure flags
- // are ignored.
- //
- // POLICY_AUDIT_EVENT_SUCCESS - When auditing is enabled, audit all
- // successful occurrences of events of the given type.
- //
- // POLICY_AUDIT_EVENT_FAILURE - When auditing is enabled, audit all
- // unsuccessful occurrences of events of the given type.
- //
- //
- // The following data type defines the classes of Policy Information
- // that may be queried/set.
- //
- type
- _POLICY_INFORMATION_CLASS = (
- picFiller0,
- PolicyAuditLogInformation,
- PolicyAuditEventsInformation,
- PolicyPrimaryDomainInformation,
- PolicyPdAccountInformation,
- PolicyAccountDomainInformation,
- PolicyLsaServerRoleInformation,
- PolicyReplicaSourceInformation,
- PolicyDefaultQuotaInformation,
- PolicyModificationInformation,
- PolicyAuditFullSetInformation,
- PolicyAuditFullQueryInformation,
- PolicyDnsDomainInformation,
- PolicyDnsDomainInformationInt);
- {$EXTERNALSYM _POLICY_INFORMATION_CLASS}
- POLICY_INFORMATION_CLASS = _POLICY_INFORMATION_CLASS;
- {$EXTERNALSYM POLICY_INFORMATION_CLASS}
- PPOLICY_INFORMATION_CLASS = ^POLICY_INFORMATION_CLASS;
- {$EXTERNALSYM PPOLICY_INFORMATION_CLASS}
- TPolicyInformationClass = POLICY_INFORMATION_CLASS;
- PPolicyInformationClass = PPOLICY_INFORMATION_CLASS;
- //
- // The following data type corresponds to the PolicyAuditLogInformation
- // information class. It is used to represent information relating to
- // the Audit Log.
- //
- // This structure may be used in both query and set operations. However,
- // when used in set operations, some fields are ignored.
- //
- PPOLICY_AUDIT_LOG_INFO = ^POLICY_AUDIT_LOG_INFO;
- {$EXTERNALSYM PPOLICY_AUDIT_LOG_INFO}
- _POLICY_AUDIT_LOG_INFO = record
- AuditLogPercentFull: ULONG;
- MaximumLogSize: ULONG;
- AuditRetentionPeriod: LARGE_INTEGER;
- AuditLogFullShutdownInProgress: ByteBool;
- TimeToShutdown: LARGE_INTEGER;
- NextAuditRecordId: ULONG;
- end;
- {$EXTERNALSYM _POLICY_AUDIT_LOG_INFO}
- POLICY_AUDIT_LOG_INFO = _POLICY_AUDIT_LOG_INFO;
- {$EXTERNALSYM POLICY_AUDIT_LOG_INFO}
- TPolicyAuditLogInfo = POLICY_AUDIT_LOG_INFO;
- PPolicyAuditLogInfo = PPOLICY_AUDIT_LOG_INFO;
- // where the members have the following usage:
- //
- // AuditLogPercentFull - Indicates the percentage of the Audit Log
- // currently being used.
- //
- // MaximumLogSize - Specifies the maximum size of the Audit Log in
- // kilobytes.
- //
- // AuditRetentionPeriod - Indicates the length of time that Audit
- // Records are to be retained. Audit Records are discardable
- // if their timestamp predates the current time minus the
- // retention period.
- //
- // AuditLogFullShutdownInProgress - Indicates whether or not a system
- // shutdown is being initiated due to the security Audit Log becoming
- // full. This condition will only occur if the system is configured
- // to shutdown when the log becomes full.
- //
- // TRUE indicates that a shutdown is in progress
- // FALSE indicates that a shutdown is not in progress.
- //
- // Once a shutdown has been initiated, this flag will be set to
- // TRUE. If an administrator is able to currect the situation
- // before the shutdown becomes irreversible, then this flag will
- // be reset to false.
- //
- // This field is ignored for set operations.
- //
- // TimeToShutdown - If the AuditLogFullShutdownInProgress flag is set,
- // then this field contains the time left before the shutdown
- // becomes irreversible.
- //
- // This field is ignored for set operations.
- //
- //
- // The following data type corresponds to the PolicyAuditEventsInformation
- // information class. It is used to represent information relating to
- // the audit requirements.
- //
- PPOLICY_AUDIT_EVENTS_INFO = ^POLICY_AUDIT_EVENTS_INFO;
- {$EXTERNALSYM PPOLICY_AUDIT_EVENTS_INFO}
- _POLICY_AUDIT_EVENTS_INFO = record
- AuditingMode: ByteBool;
- EventAuditingOptions: PPOLICY_AUDIT_EVENT_OPTIONS;
- MaximumAuditEventCount: ULONG;
- end;
- {$EXTERNALSYM _POLICY_AUDIT_EVENTS_INFO}
- POLICY_AUDIT_EVENTS_INFO = _POLICY_AUDIT_EVENTS_INFO;
- {$EXTERNALSYM POLICY_AUDIT_EVENTS_INFO}
- TPolicyAuditEventsInfo = POLICY_AUDIT_EVENTS_INFO;
- PPolicyAuditEventsInfo = PPOLICY_AUDIT_EVENTS_INFO;
- // where the members have the following usage:
- //
- // AuditingMode - A Boolean variable specifying the Auditing Mode value.
- // This value is interpreted as follows:
- //
- // TRUE - Auditing is to be enabled (set operations) or is enabled
- // (query operations). Audit Records will be generated according
- // to the Event Auditing Options in effect (see the
- // EventAuditingOptions field.
- //
- // FALSE - Auditing is to be disabled (set operations) or is
- // disabled (query operations). No Audit Records will be
- // generated. Note that for set operations the Event Auditing
- // Options in effect will still be updated as specified by the
- // EventAuditingOptions field whether Auditing is enabled or
- // disabled.
- //
- // EventAuditingOptions - Pointer to an array of Auditing Options
- // indexed by Audit Event Type.
- //
- // MaximumAuditEventCount - Specifiesa count of the number of Audit
- // Event Types specified by the EventAuditingOptions parameter. If
- // this count is less than the number of Audit Event Types supported
- // by the system, the Auditing Options for Event Types with IDs
- // higher than (MaximumAuditEventCount + 1) are left unchanged.
- //
- //
- // The following structure corresponds to the PolicyAccountDomainInformation
- // information class.
- //
- PPOLICY_ACCOUNT_DOMAIN_INFO = ^POLICY_ACCOUNT_DOMAIN_INFO;
- {$EXTERNALSYM PPOLICY_ACCOUNT_DOMAIN_INFO}
- _POLICY_ACCOUNT_DOMAIN_INFO = record
- DomainName: LSA_UNICODE_STRING;
- DomainSid: PSID;
- end;
- {$EXTERNALSYM _POLICY_ACCOUNT_DOMAIN_INFO}
- POLICY_ACCOUNT_DOMAIN_INFO = _POLICY_ACCOUNT_DOMAIN_INFO;
- {$EXTERNALSYM POLICY_ACCOUNT_DOMAIN_INFO}
- TPolicyAccountDomainInfo = POLICY_ACCOUNT_DOMAIN_INFO;
- PPolicyAccountDomainInfo = PPOLICY_ACCOUNT_DOMAIN_INFO;
- // where the members have the following usage:
- //
- // DomainName - Is the name of the domain
- //
- // DomainSid - Is the Sid of the domain
- //
- //
- // The following structure corresponds to the PolicyPrimaryDomainInformation
- // information class.
- //
- PPOLICY_PRIMARY_DOMAIN_INFO = ^POLICY_PRIMARY_DOMAIN_INFO;
- {$EXTERNALSYM PPOLICY_PRIMARY_DOMAIN_INFO}
- _POLICY_PRIMARY_DOMAIN_INFO = record
- Name: LSA_UNICODE_STRING;
- Sid: PSID;
- end;
- {$EXTERNALSYM _POLICY_PRIMARY_DOMAIN_INFO}
- POLICY_PRIMARY_DOMAIN_INFO = _POLICY_PRIMARY_DOMAIN_INFO;
- {$EXTERNALSYM POLICY_PRIMARY_DOMAIN_INFO}
- TPolicyPrimaryDomainInfo = POLICY_PRIMARY_DOMAIN_INFO;
- PPolicyPrimaryDomainInfo = PPOLICY_PRIMARY_DOMAIN_INFO;
- // where the members have the following usage:
- //
- // Name - Is the name of the domain
- //
- // Sid - Is the Sid of the domain
- //
- //
- // The following structure corresponds to the PolicyDnsDomainInformation
- // information class
- //
- PPOLICY_DNS_DOMAIN_INFO = ^POLICY_DNS_DOMAIN_INFO;
- {$EXTERNALSYM PPOLICY_DNS_DOMAIN_INFO}
- _POLICY_DNS_DOMAIN_INFO = record
- Name: LSA_UNICODE_STRING;
- DnsDomainName: LSA_UNICODE_STRING;
- DnsForestName: LSA_UNICODE_STRING;
- DomainGuid: GUID;
- Sid: PSID;
- end;
- {$EXTERNALSYM _POLICY_DNS_DOMAIN_INFO}
- POLICY_DNS_DOMAIN_INFO = _POLICY_DNS_DOMAIN_INFO;
- {$EXTERNALSYM POLICY_DNS_DOMAIN_INFO}
- TPolicyDnsDomainInfo = POLICY_DNS_DOMAIN_INFO;
- PPolicyDnsDomainInfo = PPOLICY_DNS_DOMAIN_INFO;
- // where the members have the following usage:
- //
- // Name - Is the name of the Domain
- //
- // DnsDomainName - Is the DNS name of the domain
- //
- // DnsForestName - Is the DNS forest name of the domain
- //
- // DomainGuid - Is the GUID of the domain
- //
- // Sid - Is the Sid of the domain
- //
- // The following structure corresponds to the PolicyPdAccountInformation
- // information class. This structure may be used in Query operations
- // only.
- //
- PPOLICY_PD_ACCOUNT_INFO = ^POLICY_PD_ACCOUNT_INFO;
- {$EXTERNALSYM PPOLICY_PD_ACCOUNT_INFO}
- _POLICY_PD_ACCOUNT_INFO = record
- Name: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _POLICY_PD_ACCOUNT_INFO}
- POLICY_PD_ACCOUNT_INFO = _POLICY_PD_ACCOUNT_INFO;
- {$EXTERNALSYM POLICY_PD_ACCOUNT_INFO}
- TPolicyPdAccountInfo = POLICY_PD_ACCOUNT_INFO;
- PPolicyPdAccountInfo = PPOLICY_PD_ACCOUNT_INFO;
- // where the members have the following usage:
- //
- // Name - Is the name of an account in the domain that should be used
- // for authentication and name/ID lookup requests.
- //
- //
- // The following structure corresponds to the PolicyLsaServerRoleInformation
- // information class.
- //
- PPOLICY_LSA_SERVER_ROLE_INFO = ^POLICY_LSA_SERVER_ROLE_INFO;
- {$EXTERNALSYM PPOLICY_LSA_SERVER_ROLE_INFO}
- _POLICY_LSA_SERVER_ROLE_INFO = record
- LsaServerRole: POLICY_LSA_SERVER_ROLE;
- end;
- {$EXTERNALSYM _POLICY_LSA_SERVER_ROLE_INFO}
- POLICY_LSA_SERVER_ROLE_INFO = _POLICY_LSA_SERVER_ROLE_INFO;
- {$EXTERNALSYM POLICY_LSA_SERVER_ROLE_INFO}
- TPolicyLsaServerRoleInfo = POLICY_LSA_SERVER_ROLE_INFO;
- PPolicyLsaServerRoleInfo = PPOLICY_LSA_SERVER_ROLE_INFO;
- // where the fields have the following usage:
- //
- // TBS
- //
- //
- // The following structure corresponds to the PolicyReplicaSourceInformation
- // information class.
- //
- PPOLICY_REPLICA_SOURCE_INFO = ^POLICY_REPLICA_SOURCE_INFO;
- {$EXTERNALSYM PPOLICY_REPLICA_SOURCE_INFO}
- _POLICY_REPLICA_SOURCE_INFO = record
- ReplicaSource: LSA_UNICODE_STRING;
- ReplicaAccountName: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _POLICY_REPLICA_SOURCE_INFO}
- POLICY_REPLICA_SOURCE_INFO = _POLICY_REPLICA_SOURCE_INFO;
- {$EXTERNALSYM POLICY_REPLICA_SOURCE_INFO}
- TPolicyReplicaSourceInfo = POLICY_REPLICA_SOURCE_INFO;
- PPolicyReplicaSourceInfo = PPOLICY_REPLICA_SOURCE_INFO;
- //
- // The following structure corresponds to the PolicyDefaultQuotaInformation
- // information class.
- //
- PPOLICY_DEFAULT_QUOTA_INFO = ^POLICY_DEFAULT_QUOTA_INFO;
- {$EXTERNALSYM PPOLICY_DEFAULT_QUOTA_INFO}
- _POLICY_DEFAULT_QUOTA_INFO = record
- QuotaLimits: QUOTA_LIMITS;
- end;
- {$EXTERNALSYM _POLICY_DEFAULT_QUOTA_INFO}
- POLICY_DEFAULT_QUOTA_INFO = _POLICY_DEFAULT_QUOTA_INFO;
- {$EXTERNALSYM POLICY_DEFAULT_QUOTA_INFO}
- TPolicyDefaultQuotaInfo = POLICY_DEFAULT_QUOTA_INFO;
- PPolicyDefaultQuotaInfo = PPOLICY_DEFAULT_QUOTA_INFO;
- //
- // The following structure corresponds to the PolicyModificationInformation
- // information class.
- //
- PPOLICY_MODIFICATION_INFO = ^POLICY_MODIFICATION_INFO;
- {$EXTERNALSYM PPOLICY_MODIFICATION_INFO}
- _POLICY_MODIFICATION_INFO = record
- ModifiedId: LARGE_INTEGER;
- DatabaseCreationTime: LARGE_INTEGER;
- end;
- {$EXTERNALSYM _POLICY_MODIFICATION_INFO}
- POLICY_MODIFICATION_INFO = _POLICY_MODIFICATION_INFO;
- {$EXTERNALSYM POLICY_MODIFICATION_INFO}
- TPolicyModificationInfo = POLICY_MODIFICATION_INFO;
- PPolicyModificationInfo = PPOLICY_MODIFICATION_INFO;
- // where the members have the following usage:
- //
- // ModifiedId - Is a 64-bit unsigned integer that is incremented each
- // time anything in the LSA database is modified. This value is
- // only modified on Primary Domain Controllers.
- //
- // DatabaseCreationTime - Is the date/time that the LSA Database was
- // created. On Backup Domain Controllers, this value is replicated
- // from the Primary Domain Controller.
- //
- //
- // The following structure type corresponds to the PolicyAuditFullSetInformation
- // Information Class.
- //
- PPOLICY_AUDIT_FULL_SET_INFO = ^POLICY_AUDIT_FULL_SET_INFO;
- {$EXTERNALSYM PPOLICY_AUDIT_FULL_SET_INFO}
- _POLICY_AUDIT_FULL_SET_INFO = record
- ShutDownOnFull: ByteBool;
- end;
- {$EXTERNALSYM _POLICY_AUDIT_FULL_SET_INFO}
- POLICY_AUDIT_FULL_SET_INFO = _POLICY_AUDIT_FULL_SET_INFO;
- {$EXTERNALSYM POLICY_AUDIT_FULL_SET_INFO}
- TPolicyAuditFullSetInfo = POLICY_AUDIT_FULL_SET_INFO;
- PPolicyAuditFullSetInfo = PPOLICY_AUDIT_FULL_SET_INFO;
- //
- // The following structure type corresponds to the PolicyAuditFullQueryInformation
- // Information Class.
- //
- PPOLICY_AUDIT_FULL_QUERY_INFO = ^POLICY_AUDIT_FULL_QUERY_INFO;
- {$EXTERNALSYM PPOLICY_AUDIT_FULL_QUERY_INFO}
- _POLICY_AUDIT_FULL_QUERY_INFO = record
- ShutDownOnFull: ByteBool;
- LogIsFull: ByteBool;
- end;
- {$EXTERNALSYM _POLICY_AUDIT_FULL_QUERY_INFO}
- POLICY_AUDIT_FULL_QUERY_INFO = _POLICY_AUDIT_FULL_QUERY_INFO;
- {$EXTERNALSYM POLICY_AUDIT_FULL_QUERY_INFO}
- TPolicyAuditFullQueryInfo = POLICY_AUDIT_FULL_QUERY_INFO;
- PPolicyAuditFullQueryInfo = PPOLICY_AUDIT_FULL_QUERY_INFO;
- //
- // The following data type defines the classes of Policy Information
- // that may be queried/set that has domain wide effect.
- //
- _POLICY_DOMAIN_INFORMATION_CLASS = (
- pdicFiller0,
- PolicyDomainQualityOfServiceInformation, // value was used in W2K; no longer supported
- PolicyDomainEfsInformation,
- PolicyDomainKerberosTicketInformation);
- {$EXTERNALSYM _POLICY_DOMAIN_INFORMATION_CLASS}
- POLICY_DOMAIN_INFORMATION_CLASS = _POLICY_DOMAIN_INFORMATION_CLASS;
- {$EXTERNALSYM POLICY_DOMAIN_INFORMATION_CLASS}
- PPOLICY_DOMAIN_INFORMATION_CLASS = ^POLICY_DOMAIN_INFORMATION_CLASS;
- {$EXTERNALSYM PPOLICY_DOMAIN_INFORMATION_CLASS}
- TPolicyDomainInformationClass = POLICY_DOMAIN_INFORMATION_CLASS;
- PPolicyDomainInformationClass = PPOLICY_DOMAIN_INFORMATION_CLASS;
- type
- // mvb has dissapeared in november 2002 release!
- PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = ^POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
- {$EXTERNALSYM PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
- _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = record
- QualityOfService: ULONG;
- end;
- {$EXTERNALSYM _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
- POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO = _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
- {$EXTERNALSYM POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO}
- TPolicyDomainQualityOfServiceInfo = POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
- PPolicyDomainQualityOfServiceInfo = PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO;
- //
- // where the members have the following usage:
- //
- // QualityOfService - Determines what specific QOS actions a machine should take
- //
- //
- // The following structure corresponds to the PolicyEfsInformation
- // information class
- //
- PPOLICY_DOMAIN_EFS_INFO = ^POLICY_DOMAIN_EFS_INFO;
- {$EXTERNALSYM PPOLICY_DOMAIN_EFS_INFO}
- _POLICY_DOMAIN_EFS_INFO = record
- InfoLength: ULONG;
- EfsBlob: PUCHAR;
- end;
- {$EXTERNALSYM _POLICY_DOMAIN_EFS_INFO}
- POLICY_DOMAIN_EFS_INFO = _POLICY_DOMAIN_EFS_INFO;
- {$EXTERNALSYM POLICY_DOMAIN_EFS_INFO}
- TPolicyDomainEfsInfo = POLICY_DOMAIN_EFS_INFO;
- PPolicyDomainEfsInfo = PPOLICY_DOMAIN_EFS_INFO;
- // where the members have the following usage:
- //
- // InfoLength - Length of the EFS Information blob
- //
- // EfsBlob - Efs blob data
- //
- //
- // The following structure corresponds to the PolicyDomainKerberosTicketInformation
- // information class
- const
- POLICY_KERBEROS_VALIDATE_CLIENT = $00000080;
- {$EXTERNALSYM POLICY_KERBEROS_VALIDATE_CLIENT}
- type
- PPOLICY_DOMAIN_KERBEROS_TICKET_INFO = ^POLICY_DOMAIN_KERBEROS_TICKET_INFO;
- {$EXTERNALSYM PPOLICY_DOMAIN_KERBEROS_TICKET_INFO}
- _POLICY_DOMAIN_KERBEROS_TICKET_INFO = record
- AuthenticationOptions: ULONG;
- MaxServiceTicketAge: LARGE_INTEGER;
- MaxTicketAge: LARGE_INTEGER;
- MaxRenewAge: LARGE_INTEGER;
- MaxClockSkew: LARGE_INTEGER;
- Reserved: LARGE_INTEGER;
- end;
- {$EXTERNALSYM _POLICY_DOMAIN_KERBEROS_TICKET_INFO}
- POLICY_DOMAIN_KERBEROS_TICKET_INFO = _POLICY_DOMAIN_KERBEROS_TICKET_INFO;
- {$EXTERNALSYM POLICY_DOMAIN_KERBEROS_TICKET_INFO}
- TPolicyDomainKerberosTicketInfo = POLICY_DOMAIN_KERBEROS_TICKET_INFO;
- PPolicyDomainKerberosTicketInfo = PPOLICY_DOMAIN_KERBEROS_TICKET_INFO;
- //
- // where the members have the following usage
- //
- // AuthenticationOptions -- allowed ticket options (POLICY_KERBEROS_* flags )
- //
- // MaxServiceTicketAge -- Maximum lifetime for a service ticket
- //
- // MaxTicketAge -- Maximum lifetime for the initial ticket
- //
- // MaxRenewAge -- Maximum cumulative age a renewable ticket can be with
- // requring authentication
- //
- // MaxClockSkew -- Maximum tolerance for synchronization of computer clocks
- //
- // Reserved -- Reserved
- //
- // The following data type defines the classes of Policy Information / Policy Domain Information
- // that may be used to request notification
- //
- _POLICY_NOTIFICATION_INFORMATION_CLASS = (
- pnicFiller0,
- PolicyNotifyAuditEventsInformation,
- PolicyNotifyAccountDomainInformation,
- PolicyNotifyServerRoleInformation,
- PolicyNotifyDnsDomainInformation,
- PolicyNotifyDomainEfsInformation,
- PolicyNotifyDomainKerberosTicketInformation,
- PolicyNotifyMachineAccountPasswordInformation);
- {$EXTERNALSYM _POLICY_NOTIFICATION_INFORMATION_CLASS}
- POLICY_NOTIFICATION_INFORMATION_CLASS = _POLICY_NOTIFICATION_INFORMATION_CLASS;
- {$EXTERNALSYM POLICY_NOTIFICATION_INFORMATION_CLASS}
- PPOLICY_NOTIFICATION_INFORMATION_CLASS = ^POLICY_NOTIFICATION_INFORMATION_CLASS;
- {$EXTERNALSYM PPOLICY_NOTIFICATION_INFORMATION_CLASS}
- TPolicyNotificationInformationClass = POLICY_NOTIFICATION_INFORMATION_CLASS;
- PPolicyNotificationInformationClass = PPOLICY_NOTIFICATION_INFORMATION_CLASS;
- //
- // LSA RPC Context Handle (Opaque form). Note that a Context Handle is
- // always a pointer type unlike regular handles.
- //
- LSA_HANDLE = PVOID;
- {$EXTERNALSYM LSA_HANDLE}
- PLSA_HANDLE = ^LSA_HANDLE;
- {$EXTERNALSYM PLSA_HANDLE}
- TLsaHandle = LSA_HANDLE;
- //
- // Trusted Domain Object specific data types
- //
- //
- // This data type defines the following information classes that may be
- // queried or set.
- //
- _TRUSTED_INFORMATION_CLASS = (
- ticFiller0,
- TrustedDomainNameInformation,
- TrustedControllersInformation,
- TrustedPosixOffsetInformation,
- TrustedPasswordInformation,
- TrustedDomainInformationBasic,
- TrustedDomainInformationEx,
- TrustedDomainAuthInformation,
- TrustedDomainFullInformation,
- TrustedDomainAuthInformationInternal,
- TrustedDomainFullInformationInternal,
- TrustedDomainInformationEx2Internal,
- TrustedDomainFullInformation2Internal);
- {$EXTERNALSYM _TRUSTED_INFORMATION_CLASS}
- TRUSTED_INFORMATION_CLASS = _TRUSTED_INFORMATION_CLASS;
- {$EXTERNALSYM TRUSTED_INFORMATION_CLASS}
- PTRUSTED_INFORMATION_CLASS = ^TRUSTED_INFORMATION_CLASS;
- {$EXTERNALSYM PTRUSTED_INFORMATION_CLASS}
- TTrustedInfomationClass = TRUSTED_INFORMATION_CLASS;
- PTrustedInfomationClass = PTRUSTED_INFORMATION_CLASS;
- //
- // The following data type corresponds to the TrustedDomainNameInformation
- // information class.
- //
- PTRUSTED_DOMAIN_NAME_INFO = ^TRUSTED_DOMAIN_NAME_INFO;
- {$EXTERNALSYM PTRUSTED_DOMAIN_NAME_INFO}
- _TRUSTED_DOMAIN_NAME_INFO = record
- Name: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_NAME_INFO}
- TRUSTED_DOMAIN_NAME_INFO = _TRUSTED_DOMAIN_NAME_INFO;
- {$EXTERNALSYM TRUSTED_DOMAIN_NAME_INFO}
- TTrustedDomainNameInfo = TRUSTED_DOMAIN_NAME_INFO;
- PTrustedDomainNameInfo = PTRUSTED_DOMAIN_NAME_INFO;
- // where members have the following meaning:
- //
- // Name - The name of the Trusted Domain.
- //
- //
- // The following data type corresponds to the TrustedControllersInformation
- // information class.
- //
- PTRUSTED_CONTROLLERS_INFO = ^TRUSTED_CONTROLLERS_INFO;
- {$EXTERNALSYM PTRUSTED_CONTROLLERS_INFO}
- _TRUSTED_CONTROLLERS_INFO = record
- Entries: ULONG;
- Names: PLSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _TRUSTED_CONTROLLERS_INFO}
- TRUSTED_CONTROLLERS_INFO = _TRUSTED_CONTROLLERS_INFO;
- {$EXTERNALSYM TRUSTED_CONTROLLERS_INFO}
- TTrustedControllersInfo = TRUSTED_CONTROLLERS_INFO;
- PTrustedControllersInfo = PTRUSTED_CONTROLLERS_INFO;
- // where members have the following meaning:
- //
- // Entries - Indicate how mamy entries there are in the Names array.
- //
- // Names - Pointer to an array of LSA_UNICODE_STRING structures containing the
- // names of domain controllers of the domain. This information may not
- // be accurate and should be used only as a hint. The order of this
- // list is considered significant and will be maintained.
- //
- // By convention, the first name in this list is assumed to be the
- // Primary Domain Controller of the domain. If the Primary Domain
- // Controller is not known, the first name should be set to the NULL
- // string.
- //
- //
- // The following data type corresponds to the TrustedPosixOffsetInformation
- // information class.
- //
- PTRUSTED_POSIX_OFFSET_INFO = ^TRUSTED_POSIX_OFFSET_INFO;
- {$EXTERNALSYM PTRUSTED_POSIX_OFFSET_INFO}
- _TRUSTED_POSIX_OFFSET_INFO = record
- Offset: ULONG;
- end;
- {$EXTERNALSYM _TRUSTED_POSIX_OFFSET_INFO}
- TRUSTED_POSIX_OFFSET_INFO = _TRUSTED_POSIX_OFFSET_INFO;
- {$EXTERNALSYM TRUSTED_POSIX_OFFSET_INFO}
- TTrustedPosixOffsetInfo = TRUSTED_POSIX_OFFSET_INFO;
- PTrustedPosixOffsetInfo = PTRUSTED_POSIX_OFFSET_INFO;
- // where members have the following meaning:
- //
- // Offset - Is an offset to use for the generation of Posix user and group
- // IDs from SIDs. The Posix ID corresponding to any particular SID is
- // generated by adding the RID of that SID to the Offset of the SID's
- // corresponding TrustedDomain object.
- //
- //
- // The following data type corresponds to the TrustedPasswordInformation
- // information class.
- //
- PTRUSTED_PASSWORD_INFO = ^TRUSTED_PASSWORD_INFO;
- {$EXTERNALSYM PTRUSTED_PASSWORD_INFO}
- _TRUSTED_PASSWORD_INFO = record
- Password: LSA_UNICODE_STRING;
- OldPassword: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _TRUSTED_PASSWORD_INFO}
- TRUSTED_PASSWORD_INFO = _TRUSTED_PASSWORD_INFO;
- {$EXTERNALSYM TRUSTED_PASSWORD_INFO}
- TTrustedPasswordInfo = TRUSTED_PASSWORD_INFO;
- PTrustedPasswordInfo = PTRUSTED_PASSWORD_INFO;
- TRUSTED_DOMAIN_INFORMATION_BASIC = LSA_TRUST_INFORMATION;
- {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_BASIC}
- PTRUSTED_DOMAIN_INFORMATION_BASIC = PLSA_TRUST_INFORMATION;
- {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_BASIC}
- TTrustedDomainInformationBasic = TRUSTED_DOMAIN_INFORMATION_BASIC;
- PTrustedDomainInformationBasic = PTRUSTED_DOMAIN_INFORMATION_BASIC;
- //
- // Direction of the trust
- //
- const
- TRUST_DIRECTION_DISABLED = $00000000;
- {$EXTERNALSYM TRUST_DIRECTION_DISABLED}
- TRUST_DIRECTION_INBOUND = $00000001;
- {$EXTERNALSYM TRUST_DIRECTION_INBOUND}
- TRUST_DIRECTION_OUTBOUND = $00000002;
- {$EXTERNALSYM TRUST_DIRECTION_OUTBOUND}
- TRUST_DIRECTION_BIDIRECTIONAL = TRUST_DIRECTION_INBOUND or TRUST_DIRECTION_OUTBOUND;
- {$EXTERNALSYM TRUST_DIRECTION_BIDIRECTIONAL}
- TRUST_TYPE_DOWNLEVEL = $00000001; // NT4 and before
- {$EXTERNALSYM TRUST_TYPE_DOWNLEVEL}
- TRUST_TYPE_UPLEVEL = $00000002; // NT5
- {$EXTERNALSYM TRUST_TYPE_UPLEVEL}
- TRUST_TYPE_MIT = $00000003; // Trust with a MIT Kerberos realm
- {$EXTERNALSYM TRUST_TYPE_MIT}
- // TRUST_TYPE_DCE = $00000004; // Trust with a DCE realm
- // {$EXTERNALSYM TRUST_TYPE_DCE}
- // Levels 0x5 - 0x000FFFFF reserved for future use
- // Provider specific trust levels are from 0x00100000 to 0xFFF00000
- TRUST_ATTRIBUTE_NON_TRANSITIVE = $00000001; // Disallow transitivity
- {$EXTERNALSYM TRUST_ATTRIBUTE_NON_TRANSITIVE}
- TRUST_ATTRIBUTE_UPLEVEL_ONLY = $00000002; // Trust link only valid for uplevel client
- {$EXTERNALSYM TRUST_ATTRIBUTE_UPLEVEL_ONLY}
- TRUST_ATTRIBUTE_QUARANTINED_DOMAIN = $00000004; // Used to quarantine domains
- {$EXTERNALSYM TRUST_ATTRIBUTE_QUARANTINED_DOMAIN}
- TRUST_ATTRIBUTE_FOREST_TRANSITIVE = $00000008; // This link may contain forest trust information
- {$EXTERNALSYM TRUST_ATTRIBUTE_FOREST_TRANSITIVE}
- TRUST_ATTRIBUTE_CROSS_ORGANIZATION = $00000010; // This trust is to a domain/forest which is not part of this enterprise
- {$EXTERNALSYM TRUST_ATTRIBUTE_CROSS_ORGANIZATION}
- TRUST_ATTRIBUTE_WITHIN_FOREST = $00000020; // Trust is internal to this forest
- {$EXTERNALSYM TRUST_ATTRIBUTE_WITHIN_FOREST}
- TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL = $00000040; // Trust is to be treated as external for trust boundary purposes
- {$EXTERNALSYM TRUST_ATTRIBUTE_TREAT_AS_EXTERNAL}
- // Trust attributes 0x00000040 through 0x00200000 are reserved for future use
- // Trust attributes 0x00400000 through 0x00800000 were used previously (up to W2K) and should not be re-used
- // Trust attributes 0x01000000 through 0x80000000 are reserved for user
- TRUST_ATTRIBUTES_VALID = DWORD($FF03FFFF);
- {$EXTERNALSYM TRUST_ATTRIBUTES_VALID}
- TRUST_ATTRIBUTES_USER = DWORD($FF000000);
- {$EXTERNALSYM TRUST_ATTRIBUTES_USER}
- type
- PTRUSTED_DOMAIN_INFORMATION_EX = ^TRUSTED_DOMAIN_INFORMATION_EX;
- {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_EX}
- _TRUSTED_DOMAIN_INFORMATION_EX = record
- Name: LSA_UNICODE_STRING;
- FlatName: LSA_UNICODE_STRING;
- Sid: PSID;
- TrustDirection: ULONG;
- TrustType: ULONG;
- TrustAttributes: ULONG;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_INFORMATION_EX}
- TRUSTED_DOMAIN_INFORMATION_EX = _TRUSTED_DOMAIN_INFORMATION_EX;
- {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_EX}
- TTrustedDomainInformationEx = TRUSTED_DOMAIN_INFORMATION_EX;
- PTrustedDomainInformationEx = PTRUSTED_DOMAIN_INFORMATION_EX;
- _TRUSTED_DOMAIN_INFORMATION_EX2 = record
- Name: LSA_UNICODE_STRING;
- FlatName: LSA_UNICODE_STRING;
- Sid: PSID;
- TrustDirection: ULONG;
- TrustType: ULONG;
- TrustAttributes: ULONG;
- ForestTrustLength: ULONG;
- ForestTrustInfo: PUCHAR;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_INFORMATION_EX2}
- TRUSTED_DOMAIN_INFORMATION_EX2 = _TRUSTED_DOMAIN_INFORMATION_EX2;
- {$EXTERNALSYM TRUSTED_DOMAIN_INFORMATION_EX2}
- PTRUSTED_DOMAIN_INFORMATION_EX2 = ^TRUSTED_DOMAIN_INFORMATION_EX2;
- {$EXTERNALSYM PTRUSTED_DOMAIN_INFORMATION_EX2}
- TTrustedDomainInformationEx2 = TRUSTED_DOMAIN_INFORMATION_EX2;
- PTrustedDomainInformationEx2 = PTRUSTED_DOMAIN_INFORMATION_EX2;
- //
- // Type of authentication information
- //
- const
- TRUST_AUTH_TYPE_NONE = 0; // Ignore this entry
- {$EXTERNALSYM TRUST_AUTH_TYPE_NONE}
- TRUST_AUTH_TYPE_NT4OWF = 1; // NT4 OWF password
- {$EXTERNALSYM TRUST_AUTH_TYPE_NT4OWF}
- TRUST_AUTH_TYPE_CLEAR = 2; // Cleartext password
- {$EXTERNALSYM TRUST_AUTH_TYPE_CLEAR}
- TRUST_AUTH_TYPE_VERSION = 3; // Cleartext password version number
- {$EXTERNALSYM TRUST_AUTH_TYPE_VERSION}
- type
- PLSA_AUTH_INFORMATION = ^LSA_AUTH_INFORMATION;
- {$EXTERNALSYM PLSA_AUTH_INFORMATION}
- _LSA_AUTH_INFORMATION = record
- LastUpdateTime: LARGE_INTEGER;
- AuthType: ULONG;
- AuthInfoLength: ULONG;
- AuthInfo: PUCHAR;
- end;
- {$EXTERNALSYM _LSA_AUTH_INFORMATION}
- LSA_AUTH_INFORMATION = _LSA_AUTH_INFORMATION;
- {$EXTERNALSYM LSA_AUTH_INFORMATION}
- TLsaAuthInformation = LSA_AUTH_INFORMATION;
- PLsaAuthInformation = PLSA_AUTH_INFORMATION;
- PTRUSTED_DOMAIN_AUTH_INFORMATION = ^TRUSTED_DOMAIN_AUTH_INFORMATION;
- {$EXTERNALSYM PTRUSTED_DOMAIN_AUTH_INFORMATION}
- _TRUSTED_DOMAIN_AUTH_INFORMATION = record
- IncomingAuthInfos: ULONG;
- IncomingAuthenticationInformation: PLSA_AUTH_INFORMATION;
- IncomingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION;
- OutgoingAuthInfos: ULONG;
- OutgoingAuthenticationInformation: PLSA_AUTH_INFORMATION;
- OutgoingPreviousAuthenticationInformation: PLSA_AUTH_INFORMATION;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_AUTH_INFORMATION}
- TRUSTED_DOMAIN_AUTH_INFORMATION = _TRUSTED_DOMAIN_AUTH_INFORMATION;
- {$EXTERNALSYM TRUSTED_DOMAIN_AUTH_INFORMATION}
- TTrustedDomainAuthInformation = TRUSTED_DOMAIN_AUTH_INFORMATION;
- PTrustedDomainAuthInformation = PTRUSTED_DOMAIN_AUTH_INFORMATION;
- PTRUSTED_DOMAIN_FULL_INFORMATION = ^TRUSTED_DOMAIN_FULL_INFORMATION;
- {$EXTERNALSYM PTRUSTED_DOMAIN_FULL_INFORMATION}
- _TRUSTED_DOMAIN_FULL_INFORMATION = record
- Information: TRUSTED_DOMAIN_INFORMATION_EX;
- PosixOffset: TRUSTED_POSIX_OFFSET_INFO;
- AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_FULL_INFORMATION}
- TRUSTED_DOMAIN_FULL_INFORMATION = _TRUSTED_DOMAIN_FULL_INFORMATION;
- {$EXTERNALSYM TRUSTED_DOMAIN_FULL_INFORMATION}
- TTrustedDomainFullInformation = TRUSTED_DOMAIN_FULL_INFORMATION;
- PTrustedDomainFullInformation = PTRUSTED_DOMAIN_FULL_INFORMATION;
- PTRUSTED_DOMAIN_FULL_INFORMATION2 = ^TRUSTED_DOMAIN_FULL_INFORMATION2;
- {$EXTERNALSYM PTRUSTED_DOMAIN_FULL_INFORMATION2}
- _TRUSTED_DOMAIN_FULL_INFORMATION2 = record
- Information: TRUSTED_DOMAIN_INFORMATION_EX2;
- PosixOffset: TRUSTED_POSIX_OFFSET_INFO;
- AuthInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
- end;
- {$EXTERNALSYM _TRUSTED_DOMAIN_FULL_INFORMATION2}
- TRUSTED_DOMAIN_FULL_INFORMATION2 = _TRUSTED_DOMAIN_FULL_INFORMATION2;
- {$EXTERNALSYM TRUSTED_DOMAIN_FULL_INFORMATION2}
- TTrustedDomainFullInformation2 = TRUSTED_DOMAIN_FULL_INFORMATION2;
- PTrustedDomainFullInformation2 = PTRUSTED_DOMAIN_FULL_INFORMATION2;
- LSA_FOREST_TRUST_RECORD_TYPE = (
- ForestTrustTopLevelName,
- ForestTrustTopLevelNameEx,
- ForestTrustDomainInfo);
- {$EXTERNALSYM LSA_FOREST_TRUST_RECORD_TYPE}
- TLsaForestTrustRecordType = LSA_FOREST_TRUST_RECORD_TYPE;
- const
- ForestTrustRecordTypeLast = ForestTrustDomainInfo;
- {$EXTERNALSYM ForestTrustRecordTypeLast}
- //
- // Bottom 16 bits of the flags are reserved for disablement reasons
- //
- LSA_FTRECORD_DISABLED_REASONS = $0000FFFF;
- {$EXTERNALSYM LSA_FTRECORD_DISABLED_REASONS}
- //
- // Reasons for a top-level name forest trust record to be disabled
- //
- LSA_TLN_DISABLED_NEW = $00000001;
- {$EXTERNALSYM LSA_TLN_DISABLED_NEW}
- LSA_TLN_DISABLED_ADMIN = $00000002;
- {$EXTERNALSYM LSA_TLN_DISABLED_ADMIN}
- LSA_TLN_DISABLED_CONFLICT = $00000004;
- {$EXTERNALSYM LSA_TLN_DISABLED_CONFLICT}
- //
- // Reasons for a domain information forest trust record to be disabled
- //
- LSA_SID_DISABLED_ADMIN = $00000001;
- {$EXTERNALSYM LSA_SID_DISABLED_ADMIN}
- LSA_SID_DISABLED_CONFLICT = $00000002;
- {$EXTERNALSYM LSA_SID_DISABLED_CONFLICT}
- LSA_NB_DISABLED_ADMIN = $00000004;
- {$EXTERNALSYM LSA_NB_DISABLED_ADMIN}
- LSA_NB_DISABLED_CONFLICT = $00000008;
- {$EXTERNALSYM LSA_NB_DISABLED_CONFLICT}
- type
- PLSA_FOREST_TRUST_DOMAIN_INFO = ^LSA_FOREST_TRUST_DOMAIN_INFO;
- {$EXTERNALSYM PLSA_FOREST_TRUST_DOMAIN_INFO}
- _LSA_FOREST_TRUST_DOMAIN_INFO = record
- Sid: PSID;
- DnsName: LSA_UNICODE_STRING;
- NetbiosName: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_DOMAIN_INFO}
- LSA_FOREST_TRUST_DOMAIN_INFO = _LSA_FOREST_TRUST_DOMAIN_INFO;
- {$EXTERNALSYM LSA_FOREST_TRUST_DOMAIN_INFO}
- TLsaForestTrustDomainInfo = LSA_FOREST_TRUST_DOMAIN_INFO;
- PLsaForestTrustDomainInfo = PLSA_FOREST_TRUST_DOMAIN_INFO;
- //
- // To prevent huge data to be passed in, we should put a limit on LSA_FOREST_TRUST_BINARY_DATA.
- // 128K is large enough that can't be reached in the near future, and small enough not to
- // cause memory problems.
- const
- MAX_FOREST_TRUST_BINARY_DATA_SIZE = 128 * 1024;
- {$EXTERNALSYM MAX_FOREST_TRUST_BINARY_DATA_SIZE}
- type
- PLSA_FOREST_TRUST_BINARY_DATA = ^LSA_FOREST_TRUST_BINARY_DATA;
- {$EXTERNALSYM PLSA_FOREST_TRUST_BINARY_DATA}
- _LSA_FOREST_TRUST_BINARY_DATA = record
- Length: ULONG;
- Buffer: PUCHAR;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_BINARY_DATA}
- LSA_FOREST_TRUST_BINARY_DATA = _LSA_FOREST_TRUST_BINARY_DATA;
- {$EXTERNALSYM LSA_FOREST_TRUST_BINARY_DATA}
- TLsaForestTrustBinaryData = LSA_FOREST_TRUST_BINARY_DATA;
- PLsaForestTrustBinaryData = PLSA_FOREST_TRUST_BINARY_DATA;
- PLSA_FOREST_TRUST_RECORD = ^LSA_FOREST_TRUST_RECORD;
- {$EXTERNALSYM PLSA_FOREST_TRUST_RECORD}
- _LSA_FOREST_TRUST_RECORD = record
- Flags: ULONG;
- ForestTrustType: LSA_FOREST_TRUST_RECORD_TYPE; // type of record
- Time: LARGE_INTEGER;
- case Integer of // actual data
- 0: (TopLevelName: LSA_UNICODE_STRING);
- 1: (DomainInfo: LSA_FOREST_TRUST_DOMAIN_INFO);
- 2: (Data: LSA_FOREST_TRUST_BINARY_DATA); // used for unrecognized types
- // } ForestTrustData;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_RECORD}
- LSA_FOREST_TRUST_RECORD = _LSA_FOREST_TRUST_RECORD;
- {$EXTERNALSYM LSA_FOREST_TRUST_RECORD}
- TLsaForestTrustRecord = LSA_FOREST_TRUST_RECORD;
- PLsaForestTrustRecord = PLSA_FOREST_TRUST_RECORD;
- //
- // To prevent forest trust blobs of large size, number of records must be
- // smaller than MAX_RECORDS_IN_FOREST_TRUST_INFO
- //
- const
- MAX_RECORDS_IN_FOREST_TRUST_INFO = 4000;
- {$EXTERNALSYM MAX_RECORDS_IN_FOREST_TRUST_INFO}
- type
- PLSA_FOREST_TRUST_INFORMATION = ^LSA_FOREST_TRUST_INFORMATION;
- {$EXTERNALSYM PLSA_FOREST_TRUST_INFORMATION}
- _LSA_FOREST_TRUST_INFORMATION = record
- RecordCount: ULONG;
- Entries: ^PLSA_FOREST_TRUST_RECORD;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_INFORMATION}
- LSA_FOREST_TRUST_INFORMATION = _LSA_FOREST_TRUST_INFORMATION;
- {$EXTERNALSYM LSA_FOREST_TRUST_INFORMATION}
- TLsaForestTrustInformation = LSA_FOREST_TRUST_INFORMATION;
- PLsaForestTrustInformation = PLSA_FOREST_TRUST_INFORMATION;
- LSA_FOREST_TRUST_COLLISION_RECORD_TYPE = (
- CollisionTdo,
- CollisionXref,
- CollisionOther);
- {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_RECORD_TYPE}
- TLsaForestTrustCollisionRecordType = LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
- PLSA_FOREST_TRUST_COLLISION_RECORD = ^LSA_FOREST_TRUST_COLLISION_RECORD;
- {$EXTERNALSYM PLSA_FOREST_TRUST_COLLISION_RECORD}
- _LSA_FOREST_TRUST_COLLISION_RECORD = record
- Index: ULONG;
- Type_: LSA_FOREST_TRUST_COLLISION_RECORD_TYPE;
- Flags: ULONG;
- Name: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_COLLISION_RECORD}
- LSA_FOREST_TRUST_COLLISION_RECORD = _LSA_FOREST_TRUST_COLLISION_RECORD;
- {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_RECORD}
- TLsaForestTrustCollisionRecord = LSA_FOREST_TRUST_COLLISION_RECORD;
- PLsaForestTrustCollisionRecord = PLSA_FOREST_TRUST_COLLISION_RECORD;
- PLSA_FOREST_TRUST_COLLISION_INFORMATION = ^LSA_FOREST_TRUST_COLLISION_INFORMATION;
- {$EXTERNALSYM PLSA_FOREST_TRUST_COLLISION_INFORMATION}
- _LSA_FOREST_TRUST_COLLISION_INFORMATION = record
- RecordCount: ULONG;
- Entries: ^PLSA_FOREST_TRUST_COLLISION_RECORD;
- end;
- {$EXTERNALSYM _LSA_FOREST_TRUST_COLLISION_INFORMATION}
- LSA_FOREST_TRUST_COLLISION_INFORMATION = _LSA_FOREST_TRUST_COLLISION_INFORMATION;
- {$EXTERNALSYM LSA_FOREST_TRUST_COLLISION_INFORMATION}
- TLsaForestTrustCollisionInformation = LSA_FOREST_TRUST_COLLISION_INFORMATION;
- PLsaForestTrustCollisionInformation = PLSA_FOREST_TRUST_COLLISION_INFORMATION;
- //
- // LSA Enumeration Context
- //
- LSA_ENUMERATION_HANDLE = ULONG;
- {$EXTERNALSYM LSA_ENUMERATION_HANDLE}
- PLSA_ENUMERATION_HANDLE = LSA_ENUMERATION_HANDLE;
- {$EXTERNALSYM PLSA_ENUMERATION_HANDLE}
- //
- // LSA Enumeration Information
- //
- PLSA_ENUMERATION_INFORMATION = ^LSA_ENUMERATION_INFORMATION;
- {$EXTERNALSYM PLSA_ENUMERATION_INFORMATION}
- _LSA_ENUMERATION_INFORMATION = record
- Sid: PSID;
- end;
- {$EXTERNALSYM _LSA_ENUMERATION_INFORMATION}
- LSA_ENUMERATION_INFORMATION = _LSA_ENUMERATION_INFORMATION;
- {$EXTERNALSYM LSA_ENUMERATION_INFORMATION}
- TLsaEnumerationInformation = LSA_ENUMERATION_INFORMATION;
- PLsaEnumerationInformation = PLSA_ENUMERATION_INFORMATION;
- ////////////////////////////////////////////////////////////////////////////
- // //
- // Local Security Policy - Miscellaneous API function prototypes //
- // //
- ////////////////////////////////////////////////////////////////////////////
- function LsaFreeMemory(Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaFreeMemory}
- function LsaClose(ObjectHandle: LSA_HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaClose}
- type
- _SECURITY_LOGON_SESSION_DATA = record
- Size: ULONG;
- LogonId: LUID;
- UserName: LSA_UNICODE_STRING;
- LogonDomain: LSA_UNICODE_STRING;
- AuthenticationPackage: LSA_UNICODE_STRING;
- LogonType: SECURITY_LOGON_TYPE;
- Session: ULONG;
- Sid: PSID;
- LogonTime: LARGE_INTEGER;
- //
- // new for whistler:
- //
- LogonServer: LSA_UNICODE_STRING;
- DnsDomainName: LSA_UNICODE_STRING;
- Upn: LSA_UNICODE_STRING;
- end;
- {$EXTERNALSYM _SECURITY_LOGON_SESSION_DATA}
- SECURITY_LOGON_SESSION_DATA = _SECURITY_LOGON_SESSION_DATA;
- {$EXTERNALSYM SECURITY_LOGON_SESSION_DATA}
- PSECURITY_LOGON_SESSION_DATA = ^SECURITY_LOGON_SESSION_DATA;
- {$EXTERNALSYM PSECURITY_LOGON_SESSION_DATA}
- TSecurityLogonSessionData = SECURITY_LOGON_SESSION_DATA;
- PSecurityLogonSessionData = PSECURITY_LOGON_SESSION_DATA;
- function LsaEnumerateLogonSessions(LogonSessionCount: PULONG; var LogonSessionList: PLUID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaEnumerateLogonSessions}
- function LsaGetLogonSessionData(LogonId: PLUID; var ppLogonSessionData: PSECURITY_LOGON_SESSION_DATA): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaGetLogonSessionData}
- function LsaOpenPolicy(SystemName: PLSA_UNICODE_STRING;
- var ObjectAttributes: LSA_OBJECT_ATTRIBUTES; DesiredAccess: ACCESS_MASK;
- var PolicyHandle: LSA_HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaOpenPolicy}
- function LsaQueryInformationPolicy(PolicyHandle: LSA_HANDLE;
- InformationClass: POLICY_INFORMATION_CLASS; var Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaQueryInformationPolicy}
- function LsaSetInformationPolicy(PolicyHandle: LSA_HANDLE;
- InformationClass: POLICY_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaSetInformationPolicy}
- function LsaQueryDomainInformationPolicy(PolicyHandle: LSA_HANDLE;
- InformationClass: POLICY_DOMAIN_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaQueryDomainInformationPolicy}
- function LsaSetDomainInformationPolicy(PolicyHandle: LSA_HANDLE;
- InformationClass: POLICY_DOMAIN_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaSetDomainInformationPolicy}
- function LsaRegisterPolicyChangeNotification(InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS;
- NotificationEventHandle: HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaRegisterPolicyChangeNotification}
- function LsaUnregisterPolicyChangeNotification(InformationClass: POLICY_NOTIFICATION_INFORMATION_CLASS;
- NotificationEventHandle: HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaUnregisterPolicyChangeNotification}
- function LsaEnumerateTrustedDomains(PolicyHandle: LSA_HANDLE;
- var EnumerationContext: LSA_ENUMERATION_HANDLE; Buffer: PPVOID;
- PreferedMaximumLength: ULONG; var CountReturned: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaEnumerateTrustedDomains}
- function LsaLookupNames(PolicyHandle: LSA_HANDLE; Count: ULONG;
- Names: PLSA_UNICODE_STRING; var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST;
- var Sids: PLSA_TRANSLATED_SID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaLookupNames}
- function LsaLookupNames2(PolicyHandle: LSA_HANDLE; Flags, Count: ULONG; Names: PLSA_UNICODE_STRING;
- var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST; var Sids: PLSA_TRANSLATED_SID2): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaLookupNames2}
- function LsaLookupSids(PolicyHandle: LSA_HANDLE; Count: ULONG; Sids: PPSID;
- var ReferencedDomains: PLSA_REFERENCED_DOMAIN_LIST;
- var Names: PLSA_TRANSLATED_NAME): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaLookupSids}
- const
- SE_INTERACTIVE_LOGON_NAME = 'SeInteractiveLogonRight';
- {$EXTERNALSYM SE_INTERACTIVE_LOGON_NAME}
- SE_NETWORK_LOGON_NAME = 'SeNetworkLogonRight';
- {$EXTERNALSYM SE_NETWORK_LOGON_NAME}
- SE_BATCH_LOGON_NAME = 'SeBatchLogonRight';
- {$EXTERNALSYM SE_BATCH_LOGON_NAME}
- SE_SERVICE_LOGON_NAME = 'SeServiceLogonRight';
- {$EXTERNALSYM SE_SERVICE_LOGON_NAME}
- SE_DENY_INTERACTIVE_LOGON_NAME = 'SeDenyInteractiveLogonRight';
- {$EXTERNALSYM SE_DENY_INTERACTIVE_LOGON_NAME}
- SE_DENY_NETWORK_LOGON_NAME = 'SeDenyNetworkLogonRight';
- {$EXTERNALSYM SE_DENY_NETWORK_LOGON_NAME}
- SE_DENY_BATCH_LOGON_NAME = 'SeDenyBatchLogonRight';
- {$EXTERNALSYM SE_DENY_BATCH_LOGON_NAME}
- SE_DENY_SERVICE_LOGON_NAME = 'SeDenyServiceLogonRight';
- {$EXTERNALSYM SE_DENY_SERVICE_LOGON_NAME}
- SE_REMOTE_INTERACTIVE_LOGON_NAME = 'SeRemoteInteractiveLogonRight';
- {$EXTERNALSYM SE_REMOTE_INTERACTIVE_LOGON_NAME}
- SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME = 'SeDenyRemoteInteractiveLogonRight';
- {$EXTERNALSYM SE_DENY_REMOTE_INTERACTIVE_LOGON_NAME}
- //
- // This new API returns all the accounts with a certain privilege
- //
- function LsaEnumerateAccountsWithUserRight(PolicyHandle: LSA_HANDLE;
- UserRights: PLSA_UNICODE_STRING; var EnumerationBuffer: PLSA_ENUMERATION_INFORMATION;
- var CountReturned: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaEnumerateAccountsWithUserRight}
- //
- // These new APIs differ by taking a SID instead of requiring the caller
- // to open the account first and passing in an account handle
- //
- function LsaEnumerateAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
- var UserRights: PLSA_UNICODE_STRING; var CountOfRights: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaEnumerateAccountRights}
- function LsaAddAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
- UserRights: PLSA_UNICODE_STRING; CountOfRights: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaAddAccountRights}
- function LsaRemoveAccountRights(PolicyHandle: LSA_HANDLE; AccountSid: PSID;
- AllRights: ByteBool; UserRights: PLSA_UNICODE_STRING; CountOfRights: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaRemoveAccountRights}
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // Local Security Policy - Trusted Domain Object API function prototypes //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- function LsaOpenTrustedDomainByName(PolicyHandle: LSA_HANDLE;
- const TrustedDomainName: LSA_UNICODE_STRING; DesiredAccess: ACCESS_MASK;
- var TrustedDomainHandle: LSA_HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaOpenTrustedDomainByName}
- function LsaQueryTrustedDomainInfo(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID;
- InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaQueryTrustedDomainInfo}
- function LsaSetTrustedDomainInformation(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID;
- InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaSetTrustedDomainInformation}
- function LsaDeleteTrustedDomain(PolicyHandle: LSA_HANDLE; TrustedDomainSid: PSID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaDeleteTrustedDomain}
- function LsaQueryTrustedDomainInfoByName(PolicyHandle: LSA_HANDLE;
- const TrustedDomainName: LSA_UNICODE_STRING;
- InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PPVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaQueryTrustedDomainInfoByName}
- function LsaSetTrustedDomainInfoByName(PolicyHandle: LSA_HANDLE;
- const TrustedDomainName: LSA_UNICODE_STRING;
- InformationClass: TRUSTED_INFORMATION_CLASS; Buffer: PVOID): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaSetTrustedDomainInfoByName}
- function LsaEnumerateTrustedDomainsEx(PolicyHandle: LSA_HANDLE;
- var EnumerationContext: LSA_ENUMERATION_HANDLE; Buffer: PPVOID;
- PreferedMaximumLength: ULONG; var CountReturned: ULONG): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaEnumerateTrustedDomainsEx}
- function LsaCreateTrustedDomainEx(PolicyHandle: LSA_HANDLE;
- const TrustedDomainInformation: TRUSTED_DOMAIN_INFORMATION_EX;
- const AuthenticationInformation: TRUSTED_DOMAIN_AUTH_INFORMATION;
- DesiredAccess: ACCESS_MASK; var TrustedDomainHandle: LSA_HANDLE): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaCreateTrustedDomainEx}
- function LsaQueryForestTrustInformation(PolicyHandle: LSA_HANDLE; TrustedDomainName: PLSA_UNICODE_STRING;
- var ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaQueryForestTrustInformation}
- function LsaSetForestTrustInformation(PolicyHandle: LSA_HANDLE; TrustedDomainName: PLSA_UNICODE_STRING;
- ForestTrustInfo: PLSA_FOREST_TRUST_INFORMATION; CheckOnly: BOOLEAN; var CollisionInfo: PLSA_FOREST_TRUST_COLLISION_INFORMATION): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaSetForestTrustInformation}
- {.DEFINE TESTING_MATCHING_ROUTINE}
- {$IFDEF TESTING_MATCHING_ROUTINE}
- function LsaForestTrustFindMatch(PolicyHandle: LSA_HANDLE; Type_: ULONG; Name: PLSA_UNICODE_STRING; var Match: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaForestTrustFindMatch}
- {$ENDIF TESTING_MATCHING_ROUTINE}
- //
- // This API sets the workstation password (equivalent of setting/getting
- // the SSI_SECRET_NAME secret)
- //
- function LsaStorePrivateData(PolicyHandle: LSA_HANDLE;
- const KeyName: LSA_UNICODE_STRING; PrivateData: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaStorePrivateData}
- function LsaRetrievePrivateData(PolicyHandle: LSA_HANDLE;
- const KeyName: LSA_UNICODE_STRING; var PrivateData: PLSA_UNICODE_STRING): NTSTATUS; stdcall;
- {$EXTERNALSYM LsaRetrievePrivateData}
- function LsaNtStatusToWinError(Status: NTSTATUS): ULONG; stdcall;
- {$EXTERNALSYM LsaNtStatusToWinError}
- (*#if 0
- NTSTATUS
- NTAPI
- LsaLookupNamesEx(
- IN LSA_HANDLE PolicyHandle,
- IN ULONG Count,
- IN PLSA_NAME_LOOKUP_EX Names,
- OUT PLSA_TRANSLATED_SID_EX *TranslatedSids,
- IN ULONG LookupOptions,
- IN OUT PULONG MappedCount
- );
- NTSTATUS
- NTAPI
- LsaLookupSidsEx(
- IN LSA_HANDLE PolicyHandle,
- IN ULONG Count,
- IN PLSA_SID_LOOKUP_EX Sids,
- OUT PLSA_TRANSLATED_NAME_EX *TranslatedNames,
- IN ULONG LookupOptions,
- IN OUT PULONG MappedCount
- );
- #endif*)
- //
- // SPNEGO package stuff
- //
- type
- NEGOTIATE_MESSAGES = (NegEnumPackagePrefixes, NegGetCallerName, NegCallPackageMax);
- {$EXTERNALSYM NEGOTIATE_MESSAGES}
- const
- NEGOTIATE_MAX_PREFIX = 32;
- {$EXTERNALSYM NEGOTIATE_MAX_PREFIX}
- type
- PNEGOTIATE_PACKAGE_PREFIX = ^NEGOTIATE_PACKAGE_PREFIX;
- {$EXTERNALSYM PNEGOTIATE_PACKAGE_PREFIX}
- _NEGOTIATE_PACKAGE_PREFIX = record
- PackageId: ULONG_PTR;
- PackageDataA: PVOID;
- PackageDataW: PVOID;
- PrefixLen: ULONG_PTR;
- Prefix: array [0..NEGOTIATE_MAX_PREFIX - 1] of UCHAR;
- end;
- {$EXTERNALSYM _NEGOTIATE_PACKAGE_PREFIX}
- NEGOTIATE_PACKAGE_PREFIX = _NEGOTIATE_PACKAGE_PREFIX;
- {$EXTERNALSYM NEGOTIATE_PACKAGE_PREFIX}
- TNegotiatePackagePrefix = NEGOTIATE_PACKAGE_PREFIX;
- PNegotiatePackagePrefix = PNEGOTIATE_PACKAGE_PREFIX;
- PNEGOTIATE_PACKAGE_PREFIXES = ^NEGOTIATE_PACKAGE_PREFIXES;
- {$EXTERNALSYM PNEGOTIATE_PACKAGE_PREFIXES}
- _NEGOTIATE_PACKAGE_PREFIXES = record
- MessageType: ULONG;
- PrefixCount: ULONG;
- Offset: ULONG; // Offset to array of _PREFIX above
- Pad: ULONG; // Align structure for 64-bit
- end;
- {$EXTERNALSYM _NEGOTIATE_PACKAGE_PREFIXES}
- NEGOTIATE_PACKAGE_PREFIXES = _NEGOTIATE_PACKAGE_PREFIXES;
- {$EXTERNALSYM NEGOTIATE_PACKAGE_PREFIXES}
- TNegotiatePackagePrefixes = NEGOTIATE_PACKAGE_PREFIXES;
- PNegotiatePackagePrefixes = PNEGOTIATE_PACKAGE_PREFIXES;
- PNEGOTIATE_CALLER_NAME_REQUEST = ^NEGOTIATE_CALLER_NAME_REQUEST;
- {$EXTERNALSYM PNEGOTIATE_CALLER_NAME_REQUEST}
- _NEGOTIATE_CALLER_NAME_REQUEST = record
- MessageType: ULONG;
- LogonId: LUID;
- end;
- {$EXTERNALSYM _NEGOTIATE_CALLER_NAME_REQUEST}
- NEGOTIATE_CALLER_NAME_REQUEST = _NEGOTIATE_CALLER_NAME_REQUEST;
- {$EXTERNALSYM NEGOTIATE_CALLER_NAME_REQUEST}
- TNegotiateCallerNameRequest = NEGOTIATE_CALLER_NAME_REQUEST;
- PNegotiateCallerNameRequest = PNEGOTIATE_CALLER_NAME_REQUEST;
- PNEGOTIATE_CALLER_NAME_RESPONSE = ^NEGOTIATE_CALLER_NAME_RESPONSE;
- {$EXTERNALSYM PNEGOTIATE_CALLER_NAME_RESPONSE}
- _NEGOTIATE_CALLER_NAME_RESPONSE = record
- MessageType: ULONG;
- CallerName: PWSTR;
- end;
- {$EXTERNALSYM _NEGOTIATE_CALLER_NAME_RESPONSE}
- NEGOTIATE_CALLER_NAME_RESPONSE = _NEGOTIATE_CALLER_NAME_RESPONSE;
- {$EXTERNALSYM NEGOTIATE_CALLER_NAME_RESPONSE}
- TNegotiateCallerNameResponse = NEGOTIATE_CALLER_NAME_RESPONSE;
- PNegotiateCallerNameResponse = PNEGOTIATE_CALLER_NAME_RESPONSE;
- type
- PDOMAIN_PASSWORD_INFORMATION = ^DOMAIN_PASSWORD_INFORMATION;
- {$EXTERNALSYM PDOMAIN_PASSWORD_INFORMATION}
- _DOMAIN_PASSWORD_INFORMATION = record
- MinPasswordLength: USHORT;
- PasswordHistoryLength: USHORT;
- PasswordProperties: ULONG;
- MaxPasswordAge: LARGE_INTEGER;
- MinPasswordAge: LARGE_INTEGER;
- end;
- {$EXTERNALSYM _DOMAIN_PASSWORD_INFORMATION}
- DOMAIN_PASSWORD_INFORMATION = _DOMAIN_PASSWORD_INFORMATION;
- {$EXTERNALSYM DOMAIN_PASSWORD_INFORMATION}
- TDomainPasswordInformation = DOMAIN_PASSWORD_INFORMATION;
- PDomainPasswordInformation = PDOMAIN_PASSWORD_INFORMATION;
- //
- // PasswordProperties flags
- //
- const
- DOMAIN_PASSWORD_COMPLEX = $00000001;
- {$EXTERNALSYM DOMAIN_PASSWORD_COMPLEX}
- DOMAIN_PASSWORD_NO_ANON_CHANGE = $00000002;
- {$EXTERNALSYM DOMAIN_PASSWORD_NO_ANON_CHANGE}
- DOMAIN_PASSWORD_NO_CLEAR_CHANGE = $00000004;
- {$EXTERNALSYM DOMAIN_PASSWORD_NO_CLEAR_CHANGE}
- DOMAIN_LOCKOUT_ADMINS = $00000008;
- {$EXTERNALSYM DOMAIN_LOCKOUT_ADMINS}
- DOMAIN_PASSWORD_STORE_CLEARTEXT = $00000010;
- {$EXTERNALSYM DOMAIN_PASSWORD_STORE_CLEARTEXT}
- DOMAIN_REFUSE_PASSWORD_CHANGE = $00000020;
- {$EXTERNALSYM DOMAIN_REFUSE_PASSWORD_CHANGE}
- type
- PSAM_PASSWORD_NOTIFICATION_ROUTINE = function(UserName: PUNICODE_STRING;
- RelativeId: ULONG; NewPassword: PUNICODE_STRING): NTSTATUS; stdcall;
- {$EXTERNALSYM PSAM_PASSWORD_NOTIFICATION_ROUTINE}
- TSamPasswordNotificationRoutine = PSAM_PASSWORD_NOTIFICATION_ROUTINE;
- const
- SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE = 'PasswordChangeNotify';
- {$EXTERNALSYM SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE}
- type
- PSAM_INIT_NOTIFICATION_ROUTINE = function : ByteBool; stdcall;
- {$EXTERNALSYM PSAM_INIT_NOTIFICATION_ROUTINE}
- TSamInitNotificationRoutine = PSAM_INIT_NOTIFICATION_ROUTINE;
- const
- SAM_INIT_NOTIFICATION_ROUTINE = 'InitializeChangeNotify';
- {$EXTERNALSYM SAM_INIT_NOTIFICATION_ROUTINE}
- SAM_PASSWORD_FILTER_ROUTINE = 'PasswordFilter';
- {$EXTERNALSYM SAM_PASSWORD_FILTER_ROUTINE}
- type
- PSAM_PASSWORD_FILTER_ROUTINE = function(AccountName, FullName,
- Password: PUNICODE_STRING; SetOperation: ByteBool): ByteBool; stdcall;
- {$EXTERNALSYM PSAM_PASSWORD_FILTER_ROUTINE}
- TSamPasswordFilterRoutine = PSAM_PASSWORD_FILTER_ROUTINE;
- /////////////////////////////////////////////////////////////////////////
- // //
- // Name of the MSV1_0 authentication package //
- // //
- /////////////////////////////////////////////////////////////////////////
- const
- MSV1_0_PACKAGE_NAME = 'MICROSOFT_AUTHENTICATION_PACKAGE_V1_0';
- {$EXTERNALSYM MSV1_0_PACKAGE_NAME}
- MSV1_0_PACKAGE_NAMEW = WideString('MICROSOFT_AUTHENTICATION_PACKAGE_V1_0');
- {$EXTERNALSYM MSV1_0_PACKAGE_NAMEW}
- MSV1_0_PACKAGE_NAMEW_LENGTH = SizeOf(MSV1_0_PACKAGE_NAMEW) - SizeOf(WCHAR);
- {$EXTERNALSYM MSV1_0_PACKAGE_NAMEW_LENGTH}
- //
- // Location of MSV authentication package data
- //
- MSV1_0_SUBAUTHENTICATION_KEY = 'SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0';
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_KEY}
- MSV1_0_SUBAUTHENTICATION_VALUE = 'Auth';
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_VALUE}
- /////////////////////////////////////////////////////////////////////////
- // //
- // Widely used MSV1_0 data types //
- // //
- /////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // LOGON Related Data Structures
- //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- //
- // When a LsaLogonUser() call is dispatched to the MsV1_0 authentication
- // package, the beginning of the AuthenticationInformation buffer is
- // cast to a MSV1_0_LOGON_SUBMIT_TYPE to determine the type of logon
- // being requested. Similarly, upon return, the type of profile buffer
- // can be determined by typecasting it to a MSV_1_0_PROFILE_BUFFER_TYPE.
- //
- //
- // MSV1.0 LsaLogonUser() submission message types.
- //
- type
- _MSV1_0_LOGON_SUBMIT_TYPE = (
- mlstFiller0, mlstFiller1,
- MsV1_0InteractiveLogon,
- MsV1_0Lm20Logon,
- MsV1_0NetworkLogon,
- MsV1_0SubAuthLogon,
- mlstFiller6,
- MsV1_0WorkstationUnlockLogon);
- {$EXTERNALSYM _MSV1_0_LOGON_SUBMIT_TYPE}
- MSV1_0_LOGON_SUBMIT_TYPE = _MSV1_0_LOGON_SUBMIT_TYPE;
- {$EXTERNALSYM MSV1_0_LOGON_SUBMIT_TYPE}
- PMSV1_0_LOGON_SUBMIT_TYPE = ^MSV1_0_LOGON_SUBMIT_TYPE;
- {$EXTERNALSYM PMSV1_0_LOGON_SUBMIT_TYPE}
- TMsv1_0LogonSubmitType = MSV1_0_LOGON_SUBMIT_TYPE;
- PMsv1_0LogonSubmitType = PMSV1_0_LOGON_SUBMIT_TYPE;
- //
- // MSV1.0 LsaLogonUser() profile buffer types.
- //
- _MSV1_0_PROFILE_BUFFER_TYPE = (
- mpbtFiller0, mpbtFiller1,
- MsV1_0InteractiveProfile,
- MsV1_0Lm20LogonProfile,
- MsV1_0SmartCardProfile);
- {$EXTERNALSYM _MSV1_0_PROFILE_BUFFER_TYPE}
- MSV1_0_PROFILE_BUFFER_TYPE = _MSV1_0_PROFILE_BUFFER_TYPE;
- {$EXTERNALSYM MSV1_0_PROFILE_BUFFER_TYPE}
- PMSV1_0_PROFILE_BUFFER_TYPE = ^MSV1_0_PROFILE_BUFFER_TYPE;
- {$EXTERNALSYM PMSV1_0_PROFILE_BUFFER_TYPE}
- TMsv1_0ProfileBufferType = MSV1_0_PROFILE_BUFFER_TYPE;
- PMsv1_0ProfileBufferType = PMSV1_0_PROFILE_BUFFER_TYPE;
- //
- // MsV1_0InteractiveLogon
- //
- // The AuthenticationInformation buffer of an LsaLogonUser() call to
- // perform an interactive logon contains the following data structure:
- //
- PMSV1_0_INTERACTIVE_LOGON = ^MSV1_0_INTERACTIVE_LOGON;
- {$EXTERNALSYM PMSV1_0_INTERACTIVE_LOGON}
- _MSV1_0_INTERACTIVE_LOGON = record
- MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
- LogonDomainName: UNICODE_STRING;
- UserName: UNICODE_STRING;
- Password: UNICODE_STRING;
- end;
- {$EXTERNALSYM _MSV1_0_INTERACTIVE_LOGON}
- MSV1_0_INTERACTIVE_LOGON = _MSV1_0_INTERACTIVE_LOGON;
- {$EXTERNALSYM MSV1_0_INTERACTIVE_LOGON}
- TMsv10InteractiveLogon = MSV1_0_INTERACTIVE_LOGON;
- PMsv10InteractiveLogon = PMSV1_0_INTERACTIVE_LOGON;
- //
- // Where:
- //
- // MessageType - Contains the type of logon being requested. This
- // field must be set to MsV1_0InteractiveLogon.
- //
- // UserName - Is a string representing the user's account name. The
- // name may be up to 255 characters long. The name is treated case
- // insensitive.
- //
- // Password - Is a string containing the user's cleartext password.
- // The password may be up to 255 characters long and contain any
- // UNICODE value.
- //
- //
- //
- // The ProfileBuffer returned upon a successful logon of this type
- // contains the following data structure:
- //
- PMSV1_0_INTERACTIVE_PROFILE = ^MSV1_0_INTERACTIVE_PROFILE;
- {$EXTERNALSYM PMSV1_0_INTERACTIVE_PROFILE}
- _MSV1_0_INTERACTIVE_PROFILE = record
- MessageType: MSV1_0_PROFILE_BUFFER_TYPE;
- LogonCount: USHORT;
- BadPasswordCount: USHORT;
- LogonTime: LARGE_INTEGER;
- LogoffTime: LARGE_INTEGER;
- KickOffTime: LARGE_INTEGER;
- PasswordLastSet: LARGE_INTEGER;
- PasswordCanChange: LARGE_INTEGER;
- PasswordMustChange: LARGE_INTEGER;
- LogonScript: UNICODE_STRING;
- HomeDirectory: UNICODE_STRING;
- FullName: UNICODE_STRING;
- ProfilePath: UNICODE_STRING;
- HomeDirectoryDrive: UNICODE_STRING;
- LogonServer: UNICODE_STRING;
- UserFlags: ULONG;
- end;
- {$EXTERNALSYM _MSV1_0_INTERACTIVE_PROFILE}
- MSV1_0_INTERACTIVE_PROFILE = _MSV1_0_INTERACTIVE_PROFILE;
- {$EXTERNALSYM MSV1_0_INTERACTIVE_PROFILE}
- TMsv10InteractiveProfile = MSV1_0_INTERACTIVE_PROFILE;
- PMsv10InteractiveProfile = PMSV1_0_INTERACTIVE_PROFILE;
- //
- // where:
- //
- // MessageType - Identifies the type of profile data being returned.
- // Contains the type of logon being requested. This field must
- // be set to MsV1_0InteractiveProfile.
- //
- // LogonCount - Number of times the user is currently logged on.
- //
- // BadPasswordCount - Number of times a bad password was applied to
- // the account since last successful logon.
- //
- // LogonTime - Time when user last logged on. This is an absolute
- // format NT standard time value.
- //
- // LogoffTime - Time when user should log off. This is an absolute
- // format NT standard time value.
- //
- // KickOffTime - Time when system should force user logoff. This is
- // an absolute format NT standard time value.
- //
- // PasswordLastChanged - Time and date the password was last
- // changed. This is an absolute format NT standard time
- // value.
- //
- // PasswordCanChange - Time and date when the user can change the
- // password. This is an absolute format NT time value. To
- // prevent a password from ever changing, set this field to a
- // date very far into the future.
- //
- // PasswordMustChange - Time and date when the user must change the
- // password. If the user can never change the password, this
- // field is undefined. This is an absolute format NT time
- // value.
- //
- // LogonScript - The (relative) path to the account's logon
- // script.
- //
- // HomeDirectory - The home directory for the user.
- //
- //
- // MsV1_0Lm20Logon and MsV1_0NetworkLogon
- //
- // The AuthenticationInformation buffer of an LsaLogonUser() call to
- // perform an network logon contains the following data structure:
- //
- // MsV1_0NetworkLogon logon differs from MsV1_0Lm20Logon in that the
- // ParameterControl field exists.
- //
- const
- MSV1_0_CHALLENGE_LENGTH = 8;
- {$EXTERNALSYM MSV1_0_CHALLENGE_LENGTH}
- MSV1_0_USER_SESSION_KEY_LENGTH = 16;
- {$EXTERNALSYM MSV1_0_USER_SESSION_KEY_LENGTH}
- MSV1_0_LANMAN_SESSION_KEY_LENGTH = 8;
- {$EXTERNALSYM MSV1_0_LANMAN_SESSION_KEY_LENGTH}
- //
- // Values for ParameterControl.
- //
- MSV1_0_CLEARTEXT_PASSWORD_ALLOWED = $02;
- {$EXTERNALSYM MSV1_0_CLEARTEXT_PASSWORD_ALLOWED}
- MSV1_0_UPDATE_LOGON_STATISTICS = $04;
- {$EXTERNALSYM MSV1_0_UPDATE_LOGON_STATISTICS}
- MSV1_0_RETURN_USER_PARAMETERS = $08;
- {$EXTERNALSYM MSV1_0_RETURN_USER_PARAMETERS}
- MSV1_0_DONT_TRY_GUEST_ACCOUNT = $10;
- {$EXTERNALSYM MSV1_0_DONT_TRY_GUEST_ACCOUNT}
- MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT = $20;
- {$EXTERNALSYM MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT}
- MSV1_0_RETURN_PASSWORD_EXPIRY = $40;
- {$EXTERNALSYM MSV1_0_RETURN_PASSWORD_EXPIRY}
- // this next flag says that CaseInsensitiveChallengeResponse
- // (aka LmResponse) contains a client challenge in the first 8 bytes
- MSV1_0_USE_CLIENT_CHALLENGE = $80;
- {$EXTERNALSYM MSV1_0_USE_CLIENT_CHALLENGE}
- MSV1_0_TRY_GUEST_ACCOUNT_ONLY = $100;
- {$EXTERNALSYM MSV1_0_TRY_GUEST_ACCOUNT_ONLY}
- MSV1_0_RETURN_PROFILE_PATH = $200;
- {$EXTERNALSYM MSV1_0_RETURN_PROFILE_PATH}
- MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY = $400;
- {$EXTERNALSYM MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY}
- MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT = $800;
- {$EXTERNALSYM MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT}
- MSV1_0_DISABLE_PERSONAL_FALLBACK = $00001000;
- {$EXTERNALSYM MSV1_0_DISABLE_PERSONAL_FALLBACK}
- MSV1_0_ALLOW_FORCE_GUEST = $00002000;
- {$EXTERNALSYM MSV1_0_ALLOW_FORCE_GUEST}
- MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED = $00004000;
- {$EXTERNALSYM MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED}
- MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY = $00008000;
- {$EXTERNALSYM MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY}
- MSV1_0_SUBAUTHENTICATION_DLL_EX = $00100000;
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_EX}
- //
- // The high order byte is a value indicating the SubAuthentication DLL.
- // Zero indicates no SubAuthentication DLL.
- //
- MSV1_0_SUBAUTHENTICATION_DLL = DWORD($FF000000);
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL}
- MSV1_0_SUBAUTHENTICATION_DLL_SHIFT = 24;
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_SHIFT}
- MSV1_0_MNS_LOGON = $01000000;
- {$EXTERNALSYM MSV1_0_MNS_LOGON}
- //
- // This is the list of subauthentication dlls used in MS
- //
- MSV1_0_SUBAUTHENTICATION_DLL_RAS = 2;
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_RAS}
- MSV1_0_SUBAUTHENTICATION_DLL_IIS = 132;
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_DLL_IIS}
- type
- PMSV1_0_LM20_LOGON = ^MSV1_0_LM20_LOGON;
- {$EXTERNALSYM PMSV1_0_LM20_LOGON}
- _MSV1_0_LM20_LOGON = record
- MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
- LogonDomainName: UNICODE_STRING;
- UserName: UNICODE_STRING;
- Workstation: UNICODE_STRING;
- ChallengeToClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
- CaseSensitiveChallengeResponse: STRING;
- CaseInsensitiveChallengeResponse: STRING;
- ParameterControl: ULONG;
- end;
- {$EXTERNALSYM _MSV1_0_LM20_LOGON}
- MSV1_0_LM20_LOGON = _MSV1_0_LM20_LOGON;
- {$EXTERNALSYM MSV1_0_LM20_LOGON}
- TMsv10Lm20Logon = MSV1_0_LM20_LOGON;
- PMsv10Lm20Logon = PMSV1_0_LM20_LOGON;
- //
- // NT 5.0 SubAuth dlls can use this struct
- //
- PMSV1_0_SUBAUTH_LOGON = ^MSV1_0_SUBAUTH_LOGON;
- {$EXTERNALSYM PMSV1_0_SUBAUTH_LOGON}
- _MSV1_0_SUBAUTH_LOGON = record
- MessageType: MSV1_0_LOGON_SUBMIT_TYPE;
- LogonDomainName: UNICODE_STRING;
- UserName: UNICODE_STRING;
- Workstation: UNICODE_STRING;
- ChallengeToClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
- AuthenticationInfo1: STRING;
- AuthenticationInfo2: STRING;
- ParameterControl: ULONG;
- SubAuthPackageId: ULONG;
- end;
- {$EXTERNALSYM _MSV1_0_SUBAUTH_LOGON}
- MSV1_0_SUBAUTH_LOGON = _MSV1_0_SUBAUTH_LOGON;
- {$EXTERNALSYM MSV1_0_SUBAUTH_LOGON}
- TMsv10SubauthLogon = MSV1_0_SUBAUTH_LOGON;
- PMsv10SubauthLogon = PMSV1_0_SUBAUTH_LOGON;
- //
- // Values for UserFlags.
- //
- const
- LOGON_GUEST = $01;
- {$EXTERNALSYM LOGON_GUEST}
- LOGON_NOENCRYPTION = $02;
- {$EXTERNALSYM LOGON_NOENCRYPTION}
- LOGON_CACHED_ACCOUNT = $04;
- {$EXTERNALSYM LOGON_CACHED_ACCOUNT}
- LOGON_USED_LM_PASSWORD = $08;
- {$EXTERNALSYM LOGON_USED_LM_PASSWORD}
- LOGON_EXTRA_SIDS = $20;
- {$EXTERNALSYM LOGON_EXTRA_SIDS}
- LOGON_SUBAUTH_SESSION_KEY = $40;
- {$EXTERNALSYM LOGON_SUBAUTH_SESSION_KEY}
- LOGON_SERVER_TRUST_ACCOUNT = $80;
- {$EXTERNALSYM LOGON_SERVER_TRUST_ACCOUNT}
- LOGON_NTLMV2_ENABLED = $100; // says DC understands NTLMv2
- {$EXTERNALSYM LOGON_NTLMV2_ENABLED}
- LOGON_RESOURCE_GROUPS = $200;
- {$EXTERNALSYM LOGON_RESOURCE_GROUPS}
- LOGON_PROFILE_PATH_RETURNED = $400;
- {$EXTERNALSYM LOGON_PROFILE_PATH_RETURNED}
- //
- // The high order byte is reserved for return by SubAuthentication DLLs.
- //
- MSV1_0_SUBAUTHENTICATION_FLAGS = DWORD($FF000000);
- {$EXTERNALSYM MSV1_0_SUBAUTHENTICATION_FLAGS}
- // Values returned by the MSV1_0_MNS_LOGON SubAuthentication DLL
- LOGON_GRACE_LOGON = $01000000;
- {$EXTERNALSYM LOGON_GRACE_LOGON}
- type
- PMSV1_0_LM20_LOGON_PROFILE = ^MSV1_0_LM20_LOGON_PROFILE;
- {$EXTERNALSYM PMSV1_0_LM20_LOGON_PROFILE}
- _MSV1_0_LM20_LOGON_PROFILE = record
- MessageType: MSV1_0_PROFILE_BUFFER_TYPE;
- KickOffTime: LARGE_INTEGER;
- LogoffTime: LARGE_INTEGER;
- UserFlags: ULONG;
- UserSessionKey: array [0..MSV1_0_USER_SESSION_KEY_LENGTH - 1] of UCHAR;
- LogonDomainName: UNICODE_STRING;
- LanmanSessionKey: array [0..MSV1_0_LANMAN_SESSION_KEY_LENGTH - 1] of UCHAR;
- LogonServer: UNICODE_STRING;
- UserParameters: UNICODE_STRING;
- end;
- {$EXTERNALSYM _MSV1_0_LM20_LOGON_PROFILE}
- MSV1_0_LM20_LOGON_PROFILE = _MSV1_0_LM20_LOGON_PROFILE;
- {$EXTERNALSYM MSV1_0_LM20_LOGON_PROFILE}
- TMsv10Lm20LogonProfile = MSV1_0_LM20_LOGON_PROFILE;
- PMsv10Lm20LogonProfile = PMSV1_0_LM20_LOGON_PROFILE;
- //
- // Supplemental credentials structure used for passing credentials into
- // MSV1_0 from other packages
- //
- const
- MSV1_0_OWF_PASSWORD_LENGTH = 16;
- {$EXTERNALSYM MSV1_0_OWF_PASSWORD_LENGTH}
- MSV1_0_CRED_LM_PRESENT = $1;
- {$EXTERNALSYM MSV1_0_CRED_LM_PRESENT}
- MSV1_0_CRED_NT_PRESENT = $2;
- {$EXTERNALSYM MSV1_0_CRED_NT_PRESENT}
- MSV1_0_CRED_VERSION = 0;
- {$EXTERNALSYM MSV1_0_CRED_VERSION}
- type
- PMSV1_0_SUPPLEMENTAL_CREDENTIAL = ^MSV1_0_SUPPLEMENTAL_CREDENTIAL;
- {$EXTERNALSYM PMSV1_0_SUPPLEMENTAL_CREDENTIAL}
- _MSV1_0_SUPPLEMENTAL_CREDENTIAL = record
- Version: ULONG;
- Flags: ULONG;
- LmPassword: array [0..MSV1_0_OWF_PASSWORD_LENGTH - 1] of UCHAR;
- NtPassword: array [0..MSV1_0_OWF_PASSWORD_LENGTH - 1] of UCHAR;
- end;
- {$EXTERNALSYM _MSV1_0_SUPPLEMENTAL_CREDENTIAL}
- MSV1_0_SUPPLEMENTAL_CREDENTIAL = _MSV1_0_SUPPLEMENTAL_CREDENTIAL;
- {$EXTERNALSYM MSV1_0_SUPPLEMENTAL_CREDENTIAL}
- TMsv10SupplementalCredential = MSV1_0_SUPPLEMENTAL_CREDENTIAL;
- PMsv10SupplementalCredential = PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
- //
- // NTLM3 definitions.
- //
- const
- MSV1_0_NTLM3_RESPONSE_LENGTH = 16;
- {$EXTERNALSYM MSV1_0_NTLM3_RESPONSE_LENGTH}
- MSV1_0_NTLM3_OWF_LENGTH = 16;
- {$EXTERNALSYM MSV1_0_NTLM3_OWF_LENGTH}
- //
- // this is the longest amount of time we'll allow challenge response
- // pairs to be used. Note that this also has to allow for worst case clock skew
- //
- MSV1_0_MAX_NTLM3_LIFE = 129600; // 36 hours (in seconds)
- {$EXTERNALSYM MSV1_0_MAX_NTLM3_LIFE}
- MSV1_0_MAX_AVL_SIZE = 64000;
- {$EXTERNALSYM MSV1_0_MAX_AVL_SIZE}
- //
- // MsvAvFlags bit values
- //
- MSV1_0_AV_FLAG_FORCE_GUEST = $00000001;
- {$EXTERNALSYM MSV1_0_AV_FLAG_FORCE_GUEST}
- // this is an MSV1_0 private data structure, defining the layout of an NTLM3 response, as sent by a
- // client in the NtChallengeResponse field of the NETLOGON_NETWORK_INFO structure. If can be differentiated
- // from an old style NT response by its length. This is crude, but it needs to pass through servers and
- // the servers' DCs that do not understand NTLM3 but that are willing to pass longer responses.
- type
- PMSV1_0_NTLM3_RESPONSE = ^MSV1_0_NTLM3_RESPONSE;
- {$EXTERNALSYM PMSV1_0_NTLM3_RESPONSE}
- _MSV1_0_NTLM3_RESPONSE = record
- Response: array [0..MSV1_0_NTLM3_RESPONSE_LENGTH - 1] of UCHAR; // hash of OWF of password with all the following fields
- RespType: UCHAR; // id number of response; current is 1
- HiRespType: UCHAR; // highest id number understood by client
- Flags: USHORT; // reserved; must be sent as zero at this version
- MsgWord: ULONG; // 32 bit message from client to server (for use by auth protocol)
- TimeStamp: ULONGLONG; // time stamp when client generated response -- NT system time, quad part
- ChallengeFromClient: array [0..MSV1_0_CHALLENGE_LENGTH - 1] of UCHAR;
- AvPairsOff: ULONG; // offset to start of AvPairs (to allow future expansion)
- Buffer: array [0..0] of UCHAR; // start of buffer with AV pairs (or future stuff -- so use the offset)
- end;
- {$EXTERNALSYM _MSV1_0_NTLM3_RESPONSE}
- MSV1_0_NTLM3_RESPONSE = _MSV1_0_NTLM3_RESPONSE;
- {$EXTERNALSYM MSV1_0_NTLM3_RESPONSE}
- TMsv10Ntlm3Response = MSV1_0_NTLM3_RESPONSE;
- PMsv10Ntlm3Response = PMSV1_0_NTLM3_RESPONSE;
- const
- MSV1_0_NTLM3_INPUT_LENGTH = SizeOf(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH;
- {$EXTERNALSYM MSV1_0_NTLM3_INPUT_LENGTH}
- //todo MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH = RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
- //{$EXTERNALSYM MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH}
- type
- MSV1_0_AVID = (
- MsvAvEOL, // end of list
- MsvAvNbComputerName, // server's computer name -- NetBIOS
- MsvAvNbDomainName, // server's domain name -- NetBIOS
- MsvAvDnsComputerName, // server's computer name -- DNS
- MsvAvDnsDomainName, // server's domain name -- DNS
- MsvAvDnsTreeName, // server's tree name -- DNS
- MsvAvFlags); // server's extended flags -- DWORD mask
- {$EXTERNALSYM MSV1_0_AVID}
- PMSV1_0_AV_PAIR = ^MSV1_0_AV_PAIR;
- {$EXTERNALSYM PMSV1_0_AV_PAIR}
- _MSV1_0_AV_PAIR = record
- AvId: USHORT;
- AvLen: USHORT;
- // Data is treated as byte array following structure
- end;
- {$EXTERNALSYM _MSV1_0_AV_PAIR}
- MSV1_0_AV_PAIR = _MSV1_0_AV_PAIR;
- {$EXTERNALSYM MSV1_0_AV_PAIR}
- TMsv10AvPair = MSV1_0_AV_PAIR;
- PMsv10AvPair = PMSV1_0_AV_PAIR;
- ///////////////////////////////////////////////////////////////////////////////
- // //
- // CALL PACKAGE Related Data Structures //
- // //
- ///////////////////////////////////////////////////////////////////////////////
- //
- // MSV1.0 LsaCallAuthenticationPackage() submission and response
- // message types.
- //
- _MSV1_0_PROTOCOL_MESSAGE_TYPE = (
- MsV1_0Lm20ChallengeRequest, // Both submission and response
- MsV1_0Lm20GetChallengeResponse, // Both submission and response
- MsV1_0EnumerateUsers, // Both submission and response
- MsV1_0GetUserInfo, // Both submission and response
- MsV1_0ReLogonUsers, // Submission only
- MsV1_0ChangePassword, // Both submission and response
- MsV1_0ChangeCachedPassword, // Both submission and response
- MsV1_0GenericPassthrough, // Both submission and response
- MsV1_0CacheLogon, // Submission only, no response
- MsV1_0SubAuth, // Both submission and response
- MsV1_0DeriveCredential, // Both submission and response
- MsV1_0CacheLookup, // Both submission and response
- MsV1_0SetProcessOption); // Submission only, no response
- {$EXTERNALSYM _MSV1_0_PROTOCOL_MESSAGE_TYPE}
- MSV1_0_PROTOCOL_MESSAGE_TYPE = _MSV1_0_PROTOCOL_MESSAGE_TYPE;
- {$EXTERNALSYM MSV1_0_PROTOCOL_MESSAGE_TYPE}
- PMSV1_0_PROTOCOL_MESSAGE_TYPE = ^MSV1_0_PROTOCOL_MESSAGE_TYPE;
- {$EXTERNALSYM PMSV1_0_PROTOCOL_MESSAGE_TYPE}
- TMsv1_0ProtocolMessageType = MSV1_0_PROTOCOL_MESSAGE_TYPE;
- PMsv1_0ProtocolMessageType = PMSV1_0_PROTOCOL_MESSAGE_TYPE;
- PMSV1_0_CHANGEPASSWORD_REQUEST = ^MSV1_0_CHANGEPASSWORD_REQUEST;
- {$EXTERNALSYM PMSV1_0_CHANGEPASSWORD_REQUEST}
- _MSV1_0_CHANGEPASSWORD_REQUEST = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- DomainName: UNICODE_STRING;
- AccountName: UNICODE_STRING;
- OldPassword: UNICODE_STRING;
- NewPassword: UNICODE_STRING;
- Impersonating: ByteBool;
- end;
- {$EXTERNALSYM _MSV1_0_CHANGEPASSWORD_REQUEST}
- MSV1_0_CHANGEPASSWORD_REQUEST = _MSV1_0_CHANGEPASSWORD_REQUEST;
- {$EXTERNALSYM MSV1_0_CHANGEPASSWORD_REQUEST}
- TMsv10ChangepasswordRequest = MSV1_0_CHANGEPASSWORD_REQUEST;
- PMsv10ChangepasswordRequest = PMSV1_0_CHANGEPASSWORD_REQUEST;
- PMSV1_0_CHANGEPASSWORD_RESPONSE = ^MSV1_0_CHANGEPASSWORD_RESPONSE;
- {$EXTERNALSYM PMSV1_0_CHANGEPASSWORD_RESPONSE}
- _MSV1_0_CHANGEPASSWORD_RESPONSE = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- PasswordInfoValid: ByteBool;
- DomainPasswordInfo: DOMAIN_PASSWORD_INFORMATION;
- end;
- {$EXTERNALSYM _MSV1_0_CHANGEPASSWORD_RESPONSE}
- MSV1_0_CHANGEPASSWORD_RESPONSE = _MSV1_0_CHANGEPASSWORD_RESPONSE;
- {$EXTERNALSYM MSV1_0_CHANGEPASSWORD_RESPONSE}
- TMsv10ChangepasswordResponse = MSV1_0_CHANGEPASSWORD_RESPONSE;
- PMsv10ChangepasswordResponse = PMSV1_0_CHANGEPASSWORD_RESPONSE;
- //
- // MsV1_0GenericPassthrough - for remoting a CallPackage to
- // a domain controller on the specified domain
- //
- _MSV1_0_PASSTHROUGH_REQUEST = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- DomainName: UNICODE_STRING;
- PackageName: UNICODE_STRING;
- DataLength: ULONG;
- LogonData: PUCHAR;
- Pad: ULONG;
- end;
- {$EXTERNALSYM _MSV1_0_PASSTHROUGH_REQUEST}
- MSV1_0_PASSTHROUGH_REQUEST = _MSV1_0_PASSTHROUGH_REQUEST;
- {$EXTERNALSYM MSV1_0_PASSTHROUGH_REQUEST}
- PMSV1_0_PASSTHROUGH_REQUEST = ^MSV1_0_PASSTHROUGH_REQUEST;
- {$EXTERNALSYM PMSV1_0_PASSTHROUGH_REQUEST}
- TMsv10PassThroughRequest = MSV1_0_PASSTHROUGH_REQUEST;
- PMsv10PassThroughRequest = PMSV1_0_PASSTHROUGH_REQUEST;
- _MSV1_0_PASSTHROUGH_RESPONSE = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- Pad: ULONG;
- DataLength: ULONG;
- ValidationData: PUCHAR;
- end;
- {$EXTERNALSYM _MSV1_0_PASSTHROUGH_RESPONSE}
- MSV1_0_PASSTHROUGH_RESPONSE = _MSV1_0_PASSTHROUGH_RESPONSE;
- {$EXTERNALSYM MSV1_0_PASSTHROUGH_RESPONSE}
- PMSV1_0_PASSTHROUGH_RESPONSE = ^MSV1_0_PASSTHROUGH_RESPONSE;
- {$EXTERNALSYM PMSV1_0_PASSTHROUGH_RESPONSE}
- TMsv10PassThroughResponse = MSV1_0_PASSTHROUGH_RESPONSE;
- PMsv10PassThroughResponse = PMSV1_0_PASSTHROUGH_RESPONSE;
- //
- // MsV1_0SubAuthInfo submit buffer and response - for submitting a buffer to a
- // specified Subauthentication Package during an LsaCallAuthenticationPackage().
- // If this Subauthentication is to be done locally, then package this message
- // in LsaCallAuthenticationPackage(). If this SubAuthentication needs to be done
- // on the domain controller, then call LsaCallauthenticationPackage with the
- // message type being MsV1_0GenericPassThrough and the LogonData in this struct
- // should be a PMSV1_0_SUBAUTH_REQUEST
- //
- PMSV1_0_SUBAUTH_REQUEST = ^MSV1_0_SUBAUTH_REQUEST;
- {$EXTERNALSYM PMSV1_0_SUBAUTH_REQUEST}
- _MSV1_0_SUBAUTH_REQUEST = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- SubAuthPackageId: ULONG;
- SubAuthInfoLength: ULONG;
- SubAuthSubmitBuffer: PUCHAR;
- end;
- {$EXTERNALSYM _MSV1_0_SUBAUTH_REQUEST}
- MSV1_0_SUBAUTH_REQUEST = _MSV1_0_SUBAUTH_REQUEST;
- {$EXTERNALSYM MSV1_0_SUBAUTH_REQUEST}
- TMsv10SubauthRequest = MSV1_0_SUBAUTH_REQUEST;
- PMsv10SubauthRequest = PMSV1_0_SUBAUTH_REQUEST;
- PMSV1_0_SUBAUTH_RESPONSE = ^MSV1_0_SUBAUTH_RESPONSE;
- {$EXTERNALSYM PMSV1_0_SUBAUTH_RESPONSE}
- _MSV1_0_SUBAUTH_RESPONSE = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- SubAuthInfoLength: ULONG;
- SubAuthReturnBuffer: PUCHAR;
- end;
- {$EXTERNALSYM _MSV1_0_SUBAUTH_RESPONSE}
- MSV1_0_SUBAUTH_RESPONSE = _MSV1_0_SUBAUTH_RESPONSE;
- {$EXTERNALSYM MSV1_0_SUBAUTH_RESPONSE}
- TMsv10SubauthResponse = MSV1_0_SUBAUTH_RESPONSE;
- PMsv10SubauthResponse = PMSV1_0_SUBAUTH_RESPONSE;
- //
- // Credential Derivation types for MsV1_0DeriveCredential Submit DeriveCredType
- //
- //
- // Derive Credential using SHA-1 and Request buffer DeriveCredSubmitBuffer of
- // length DeriveCredInfoLength mixing bytes.
- // Response buffer DeriveCredReturnBuffer will contain SHA-1 hash of size
- // A_SHA_DIGEST_LEN (20)
- //
- const
- MSV1_0_DERIVECRED_TYPE_SHA1 = 0;
- {$EXTERNALSYM MSV1_0_DERIVECRED_TYPE_SHA1}
- //
- // MsV1_0DeriveCredential submit buffer and response - for submitting a buffer
- // an call to LsaCallAuthenticationPackage().
- //
- type
- PMSV1_0_DERIVECRED_REQUEST = ^MSV1_0_DERIVECRED_REQUEST;
- {$EXTERNALSYM PMSV1_0_DERIVECRED_REQUEST}
- _MSV1_0_DERIVECRED_REQUEST = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- DeriveCredType: ULONG;
- DeriveCredInfoLength: ULONG;
- DeriveCredSubmitBuffer: array [0..0] of UCHAR; // in-place array of length DeriveCredInfoLength
- end;
- {$EXTERNALSYM _MSV1_0_DERIVECRED_REQUEST}
- MSV1_0_DERIVECRED_REQUEST = _MSV1_0_DERIVECRED_REQUEST;
- {$EXTERNALSYM MSV1_0_DERIVECRED_REQUEST}
- TMsv10DeriveCredRequest = MSV1_0_DERIVECRED_REQUEST;
- PMsv10DeriveCredRequest = PMSV1_0_DERIVECRED_REQUEST;
- PMSV1_0_DERIVECRED_RESPONSE = ^MSV1_0_DERIVECRED_RESPONSE;
- {$EXTERNALSYM PMSV1_0_DERIVECRED_RESPONSE}
- _MSV1_0_DERIVECRED_RESPONSE = record
- MessageType: MSV1_0_PROTOCOL_MESSAGE_TYPE;
- DeriveCredInfoLength: ULONG;
- DeriveCredReturnBuffer: array [0..0] of UCHAR; // in-place array of length DeriveCredInfoLength
- end;
- {$EXTERNALSYM _MSV1_0_DERIVECRED_RESPONSE}
- MSV1_0_DERIVECRED_RESPONSE = _MSV1_0_DERIVECRED_RESPONSE;
- {$EXTERNALSYM MSV1_0_DERIVECRED_RESPONSE}
- TMsv10DeriveCredResponse = MSV1_0_DERIVECRED_RESPONSE;
- PMsv10DeriveCredResponse = PMSV1_0_DERIVECRED_RESPONSE;
- // Revision of the Kerberos Protocol. MS uses Version 5, Revision 6
- const
- KERBEROS_VERSION = 5;
- {$EXTERNALSYM KERBEROS_VERSION}
- KERBEROS_REVISION = 6;
- {$EXTERNALSYM KERBEROS_REVISION}
- // Encryption Types:
- // These encryption types are supported by the default MS KERBSUPP DLL
- // as crypto systems. Values over 127 are local values, and may be changed
- // without notice.
- KERB_ETYPE_NULL = 0;
- {$EXTERNALSYM KERB_ETYPE_NULL}
- KERB_ETYPE_DES_CBC_CRC = 1;
- {$EXTERNALSYM KERB_ETYPE_DES_CBC_CRC}
- KERB_ETYPE_DES_CBC_MD4 = 2;
- {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD4}
- KERB_ETYPE_DES_CBC_MD5 = 3;
- {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD5}
- KERB_ETYPE_RC4_MD4 = -128;
- {$EXTERNALSYM KERB_ETYPE_RC4_MD4}
- KERB_ETYPE_RC4_PLAIN2 = -129;
- {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN2}
- KERB_ETYPE_RC4_LM = -130;
- {$EXTERNALSYM KERB_ETYPE_RC4_LM}
- KERB_ETYPE_RC4_SHA = -131;
- {$EXTERNALSYM KERB_ETYPE_RC4_SHA}
- KERB_ETYPE_DES_PLAIN = -132;
- {$EXTERNALSYM KERB_ETYPE_DES_PLAIN}
- KERB_ETYPE_RC4_HMAC_OLD = -133;
- {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_OLD}
- KERB_ETYPE_RC4_PLAIN_OLD = -134;
- {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_OLD}
- KERB_ETYPE_RC4_HMAC_OLD_EXP = -135;
- {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_OLD_EXP}
- KERB_ETYPE_RC4_PLAIN_OLD_EXP = -136;
- {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_OLD_EXP}
- KERB_ETYPE_RC4_PLAIN = -140;
- {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN}
- KERB_ETYPE_RC4_PLAIN_EXP = -141;
- {$EXTERNALSYM KERB_ETYPE_RC4_PLAIN_EXP}
- //
- // Pkinit encryption types
- //
- KERB_ETYPE_DSA_SHA1_CMS = 9;
- {$EXTERNALSYM KERB_ETYPE_DSA_SHA1_CMS}
- KERB_ETYPE_RSA_MD5_CMS = 10;
- {$EXTERNALSYM KERB_ETYPE_RSA_MD5_CMS}
- KERB_ETYPE_RSA_SHA1_CMS = 11;
- {$EXTERNALSYM KERB_ETYPE_RSA_SHA1_CMS}
- KERB_ETYPE_RC2_CBC_ENV = 12;
- {$EXTERNALSYM KERB_ETYPE_RC2_CBC_ENV}
- KERB_ETYPE_RSA_ENV = 13;
- {$EXTERNALSYM KERB_ETYPE_RSA_ENV}
- KERB_ETYPE_RSA_ES_OEAP_ENV = 14;
- {$EXTERNALSYM KERB_ETYPE_RSA_ES_OEAP_ENV}
- KERB_ETYPE_DES_EDE3_CBC_ENV = 15;
- {$EXTERNALSYM KERB_ETYPE_DES_EDE3_CBC_ENV}
- //
- // Deprecated
- //
- KERB_ETYPE_DSA_SIGN = 8;
- {$EXTERNALSYM KERB_ETYPE_DSA_SIGN}
- KERB_ETYPE_RSA_PRIV = 9;
- {$EXTERNALSYM KERB_ETYPE_RSA_PRIV}
- KERB_ETYPE_RSA_PUB = 10;
- {$EXTERNALSYM KERB_ETYPE_RSA_PUB}
- KERB_ETYPE_RSA_PUB_MD5 = 11;
- {$EXTERNALSYM KERB_ETYPE_RSA_PUB_MD5}
- KERB_ETYPE_RSA_PUB_SHA1 = 12;
- {$EXTERNALSYM KERB_ETYPE_RSA_PUB_SHA1}
- KERB_ETYPE_PKCS7_PUB = 13;
- {$EXTERNALSYM KERB_ETYPE_PKCS7_PUB}
- //
- // Unsupported but defined types
- //
- KERB_ETYPE_DES3_CBC_MD5 = 5;
- {$EXTERNALSYM KERB_ETYPE_DES3_CBC_MD5}
- KERB_ETYPE_DES3_CBC_SHA1 = 7;
- {$EXTERNALSYM KERB_ETYPE_DES3_CBC_SHA1}
- KERB_ETYPE_DES3_CBC_SHA1_KD = 16;
- {$EXTERNALSYM KERB_ETYPE_DES3_CBC_SHA1_KD}
- //
- // In use types
- //
- KERB_ETYPE_DES_CBC_MD5_NT = 20;
- {$EXTERNALSYM KERB_ETYPE_DES_CBC_MD5_NT}
- KERB_ETYPE_RC4_HMAC_NT = 23;
- {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_NT}
- KERB_ETYPE_RC4_HMAC_NT_EXP = 24;
- {$EXTERNALSYM KERB_ETYPE_RC4_HMAC_NT_EXP}
- // Checksum algorithms.
- // These algorithms are keyed internally for our use.
- KERB_CHECKSUM_NONE = 0;
- {$EXTERNALSYM KERB_CHECKSUM_NONE}
- KERB_CHECKSUM_CRC32 = 1;
- {$EXTERNALSYM KERB_CHECKSUM_CRC32}
- KERB_CHECKSUM_MD4 = 2;
- {$EXTERNALSYM KERB_CHECKSUM_MD4}
- KERB_CHECKSUM_KRB_DES_MAC = 4;
- {$EXTERNALSYM KERB_CHECKSUM_KRB_DES_MAC}
- KERB_CHECKSUM_KRB_DES_MAC_K = 5;
- {$EXTERNALSYM KERB_CHECKSUM_KRB_DES_MAC_K}
- KERB_CHECKSUM_MD5 = 7;
- {$EXTERNALSYM KERB_CHECKSUM_MD5}
- KERB_CHECKSUM_MD5_DES = 8;
- {$EXTERNALSYM KERB_CHECKSUM_MD5_DES}
- KERB_CHECKSUM_LM = -130;
- {$EXTERNALSYM KERB_CHECKSUM_LM}
- KERB_CHECKSUM_SHA1 = -131;
- {$EXTERNALSYM KERB_CHECKSUM_SHA1}
- KERB_CHECKSUM_REAL_CRC32 = -132;
- {$EXTERNALSYM KERB_CHECKSUM_REAL_CRC32}
- KERB_CHECKSUM_DES_MAC = -133;
- {$EXTERNALSYM KERB_CHECKSUM_DES_MAC}
- KERB_CHECKSUM_DES_MAC_MD5 = -134;
- {$EXTERNALSYM KERB_CHECKSUM_DES_MAC_MD5}
- KERB_CHECKSUM_MD25 = -135;
- {$EXTERNALSYM KERB_CHECKSUM_MD25}
- KERB_CHECKSUM_RC4_MD5 = -136;
- {$EXTERNALSYM KERB_CHECKSUM_RC4_MD5}
- KERB_CHECKSUM_MD5_HMAC = -137; // used by netlogon
- {$EXTERNALSYM KERB_CHECKSUM_MD5_HMAC}
- KERB_CHECKSUM_HMAC_MD5 = -138; // used by Kerberos
- {$EXTERNALSYM KERB_CHECKSUM_HMAC_MD5}
- AUTH_REQ_ALLOW_FORWARDABLE = $00000001;
- {$EXTERNALSYM AUTH_REQ_ALLOW_FORWARDABLE}
- AUTH_REQ_ALLOW_PROXIABLE = $00000002;
- {$EXTERNALSYM AUTH_REQ_ALLOW_PROXIABLE}
- AUTH_REQ_ALLOW_POSTDATE = $00000004;
- {$EXTERNALSYM AUTH_REQ_ALLOW_POSTDATE}
- AUTH_REQ_ALLOW_RENEWABLE = $00000008;
- {$EXTERNALSYM AUTH_REQ_ALLOW_RENEWABLE}
- AUTH_REQ_ALLOW_NOADDRESS = $00000010;
- {$EXTERNALSYM AUTH_REQ_ALLOW_NOADDRESS}
- AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY = $00000020;
- {$EXTERNALSYM AUTH_REQ_ALLOW_ENC_TKT_IN_SKEY}
- AUTH_REQ_ALLOW_VALIDATE = $00000040;
- {$EXTERNALSYM AUTH_REQ_ALLOW_VALIDATE}
- AUTH_REQ_VALIDATE_CLIENT = $00000080;
- {$EXTERNALSYM AUTH_REQ_VALIDATE_CLIENT}
- AUTH_REQ_OK_AS_DELEGATE = $00000100;
- {$EXTERNALSYM AUTH_REQ_OK_AS_DELEGATE}
- AUTH_REQ_PREAUTH_REQUIRED = $00000200;
- {$EXTERNALSYM AUTH_REQ_PREAUTH_REQUIRED}
- AUTH_REQ_TRANSITIVE_TRUST = $00000400;
- {$EXTERNALSYM AUTH_REQ_TRANSITIVE_TRUST}
- AUTH_REQ_ALLOW_S4U_DELEGATE = $00000800;
- {$EXTERNALSYM AUTH_REQ_ALLOW_S4U_DELEGATE}
- AUTH_REQ_PER_USER_FLAGS = (AUTH_REQ_ALLOW_FORWARDABLE or
- AUTH_REQ_ALLOW_PROXIABLE or
- AUTH_REQ_ALLOW_POSTDATE or
- AUTH_REQ_ALLOW_RENEWABLE or
- AUTH_REQ_ALLOW_VALIDATE);
- {$EXTERNALSYM AUTH_REQ_PER_USER_FLAGS}
- //
- // Ticket Flags:
- //
- KERB_TICKET_FLAGS_reserved = DWORD($80000000);
- {$EXTERNALSYM KERB_TICKET_FLAGS_reserved}
- KERB_TICKET_FLAGS_forwardable = $40000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_forwardable}
- KERB_TICKET_FLAGS_forwarded = $20000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_forwarded}
- KERB_TICKET_FLAGS_proxiable = $10000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_proxiable}
- KERB_TICKET_FLAGS_proxy = $08000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_proxy}
- KERB_TICKET_FLAGS_may_postdate = $04000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_may_postdate}
- KERB_TICKET_FLAGS_postdated = $02000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_postdated}
- KERB_TICKET_FLAGS_invalid = $01000000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_invalid}
- KERB_TICKET_FLAGS_renewable = $00800000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_renewable}
- KERB_TICKET_FLAGS_initial = $00400000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_initial}
- KERB_TICKET_FLAGS_pre_authent = $00200000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_pre_authent}
- KERB_TICKET_FLAGS_hw_authent = $00100000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_hw_authent}
- KERB_TICKET_FLAGS_ok_as_delegate = $00040000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_ok_as_delegate}
- KERB_TICKET_FLAGS_name_canonicalize = $00010000;
- {$EXTERNALSYM KERB_TICKET_FLAGS_name_canonicalize}
- KERB_TICKET_FLAGS_reserved1 = $00000001;
- {$EXTERNALSYM KERB_TICKET_FLAGS_reserved1}
- //
- // Name types
- //
- KRB_NT_UNKNOWN = 0; // Name type not known
- {$EXTERNALSYM KRB_NT_UNKNOWN}
- KRB_NT_PRINCIPAL = 1; // Just the name of the principal as in DCE, or for users
- {$EXTERNALSYM KRB_NT_PRINCIPAL}
- KRB_NT_PRINCIPAL_AND_ID = -131; // Name of the principal and its SID.
- {$EXTERNALSYM KRB_NT_PRINCIPAL_AND_ID}
- KRB_NT_SRV_INST = 2; // Service and other unique instance (krbtgt)
- {$EXTERNALSYM KRB_NT_SRV_INST}
- KRB_NT_SRV_INST_AND_ID = -132; // SPN and SID
- {$EXTERNALSYM KRB_NT_SRV_INST_AND_ID}
- KRB_NT_SRV_HST = 3; // Service with host name as instance (telnet, rcommands)
- {$EXTERNALSYM KRB_NT_SRV_HST}
- KRB_NT_SRV_XHST = 4; // Service with host as remaining components
- {$EXTERNALSYM KRB_NT_SRV_XHST}
- KRB_NT_UID = 5; // Unique ID
- {$EXTERNALSYM KRB_NT_UID}
- KRB_NT_ENTERPRISE_PRINCIPAL = 10; // UPN or SPN
- {$EXTERNALSYM KRB_NT_ENTERPRISE_PRINCIPAL}
- KRB_NT_ENT_PRINCIPAL_AND_ID = -130; // UPN and SID
- {$EXTERNALSYM KRB_NT_ENT_PRINCIPAL_AND_ID}
- //
- // MS extensions, negative according to the RFC
- //
- KRB_NT_MS_PRINCIPAL = -128; // NT4 style name
- {$EXTERNALSYM KRB_NT_MS_PRINCIPAL}
- KRB_NT_MS_PRINCIPAL_AND_ID = -129; // nt4 style name with sid
- {$EXTERNALSYM KRB_NT_MS_PRINCIPAL_AND_ID}
- MICROSOFT_KERBEROS_NAME_A = 'Kerberos';
- {$EXTERNALSYM MICROSOFT_KERBEROS_NAME_A}
- MICROSOFT_KERBEROS_NAME_W = WideString('Kerberos');
- {$EXTERNALSYM MICROSOFT_KERBEROS_NAME_W}
- {$IFDEF UNICODE}
- MICROSOFT_KERBEROS_NAME = MICROSOFT_KERBEROS_NAME_W;
- {$EXTERNALSYM MICROSOFT_KERBEROS_NAME}
- {$ELSE}
- MICROSOFT_KERBEROS_NAME = MICROSOFT_KERBEROS_NAME_A;
- {$EXTERNALSYM MICROSOFT_KERBEROS_NAME}
- {$ENDIF UNICODE}
- function KERB_IS_MS_PRINCIPAL(X: Integer): BOOL;
- /////////////////////////////////////////////////////////////////////////
- //
- // Quality of protection parameters for MakeSignature / EncryptMessage
- //
- /////////////////////////////////////////////////////////////////////////
- //
- // This flag indicates to EncryptMessage that the message is not to actually
- // be encrypted, but a header/trailer are to be produced.
- //
- const
- KERB_WRAP_NO_ENCRYPT = DWORD($80000001);
- {$EXTERNALSYM KERB_WRAP_NO_ENCRYPT}
- /////////////////////////////////////////////////////////////////////////
- //
- // LsaLogonUser parameters
- //
- /////////////////////////////////////////////////////////////////////////
- const
- KerbInteractiveLogon = 2;
- KerbSmartCardLogon = 6;
- KerbWorkstationUnlockLogon = 7;
- KerbSmartCardUnlockLogon = 8;
- KerbProxyLogon = 9;
- KerbTicketLogon = 10;
- KerbTicketUnlockLogon = 11;
- KerbS4ULogon = 12;
- type
- KERB_LOGON_SUBMIT_TYPE = DWORD;
- {$EXTERNALSYM KERB_LOGON_SUBMIT_TYPE}
- PKERB_LOGON_SUBMIT_TYPE = ^KERB_LOGON_SUBMIT_TYPE;
- {$EXTERNALSYM PKERB_LOGON_SUBMIT_TYPE}
- PKERB_INTERACTIVE_LOGON = ^KERB_INTERACTIVE_LOGON;
- {$EXTERNALSYM PKERB_INTERACTIVE_LOGON}
- _KERB_INTERACTIVE_LOGON = record
- MessageType: KERB_LOGON_SUBMIT_TYPE;
- LogonDomainName: UNICODE_STRING;
- UserName: UNICODE_STRING;
- Password: UNICODE_STRING;
- end;
- {$EXTERNALSYM _KERB_INTERACTIVE_LOGON}
- KERB_INTERACTIVE_LOGON = _KERB_INTERACTIVE_LOGON;
- {$EXTERNALSYM KERB_INTERACTIVE_LOGON}
- TKerbInteractiveLogon = KERB_INTERACTIVE_LOGON;
- PKerbInteractiveLogon = PKERB_INTERACTIVE_LOGON;
- PKERB_INTERACTIVE_UNLOCK_LOGON = ^KERB_INTERACTIVE_UNLOCK_LOGON;
- {$EXTERNALSYM PKERB_INTERACTIVE_UNLOCK_LOGON}
- _KERB_INTERACTIVE_UNLOCK_LOGON = record
- Logon: KERB_INTERACTIVE_LOGON;
- LogonId: LUID;
- end;
- {$EXTERNALSYM _KERB_INTERACTIVE_UNLOCK_LOGON}
- KERB_INTERACTIVE_UNLOCK_LOGON = _KERB_INTERACTIVE_UNLOCK_LOGON;
- {$EXTERNALSYM KERB_INTERACTIVE_UNLOCK_LOGON}
- TKerbInteractiveUnlockLogon = KERB_INTERACTIVE_UNLOCK_LOGON;
- PKerbInteractiveUnlockLogon = PKERB_INTERACTIVE_UNLOCK_LOGON;
- PKERB_SMART_CARD_LOGON = ^KERB_SMART_CARD_LOGON;
- {$EXTERNALSYM PKERB_SMART_CARD_LOGON}
- _KERB_SMART_CARD_LOGON = record
- MessageType: KERB_LOGON_SUBMIT_TYPE;
- Pin: UNICODE_STRING;
- CspDataLength: ULONG;
- CspData: PUCHAR;
- end;
- {$EXTERNALSYM _KERB_SMART_CARD_LOGON}
- KERB_SMART_CARD_LOGON = _KERB_SMART_CARD_LOGON;
- {$EXTERNALSYM KERB_SMART_CARD_LOGON}
- TKerbSmartCardLogon = KERB_SMART_CARD_LOGON;
- PKerbSmartCardLogon = PKERB_SMART_CARD_LOGON;
- PKERB_SMART_CARD_UNLOCK_LOGON = ^KERB_SMART_CARD_UNLOCK_LOGON;
- {$EXTERNALSYM PKERB_SMART_CARD_UNLOCK_LOGON}
- _KERB_SMART_CARD_UNLOCK_LOGON = record
- Logon: KERB_SMART_CARD_LOGON;
- LogonId: LUID;
- end;
- {$EXTERNALSYM _KERB_SMART_CARD_UNLOCK_LOGON}
- KERB_SMART_CARD_UNLOCK_LOGON = _KERB_SMART_CARD_UNLOCK_LOGON;
- {$EXTERNALSYM KERB_SMART_CARD_UNLOCK_LOGON}
- TKerbSmartCardUnlockLogon = KERB_SMART_CARD_UNLOCK_LOGON;
- PKerbSmartCardUnlockLogon = PKERB_SMART_CARD_UNLOCK_LOGON;
- //
- // Structure used for a ticket-only logon
- //
- PKERB_TICKET_LOGON = ^KERB_TICKET_LOGON;
- {$EXTERNALSYM PKERB_TICKET_LOGON}
- _KERB_TICKET_LOGON = record
- MessageType: KERB_LOGON_SUBMIT_TYPE;
- Flags: ULONG;
- ServiceTicketLength: ULONG;
- TicketGrantingTicketLength: ULONG;
- ServiceTicket: PUCHAR; // REQUIRED: Service ticket "host"
- TicketGrantingTicket: PUCHAR; // OPTIONAL: User's encdoded in a KERB_CRED message, encrypted with session key from service ticket
- end;
- {$EXTERNALSYM _KERB_TICKET_LOGON}
- KERB_TICKET_LOGON = _KERB_TICKET_LOGON;
- {$EXTERNALSYM KERB_TICKET_LOGON}
- TKerbTicketLogon = KERB_TICKET_LOGON;
- PKerbTicketLogon = PKERB_TICKET_LOGON;
- //
- // Flags for the ticket logon flags field
- //
- const
- KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET = $1;
- {$EXTERNALSYM KERB_LOGON_FLAG_ALLOW_EXPIRED_TICKET}
- type
- PKERB_TICKET_UNLOCK_LOGON = ^KERB_TICKET_UNLOCK_LOGON;
- {$EXTERNALSYM PKERB_TICKET_UNLOCK_LOGON}
- _KERB_TICKET_UNLOCK_LOGON = record
- Logon: KERB_TICKET_LOGON;
- LogonId: LUID;
- end;
- {$EXTERNALSYM _KERB_TICKET_UNLOCK_LOGON}
- KERB_TICKET_UNLOCK_LOGON = _KERB_TICKET_UNLOCK_LOGON;
- {$EXTERNALSYM KERB_TICKET_UNLOCK_LOGON}
- TKerbTicketUnlockLogon = KERB_TICKET_UNLOCK_LOGON;
- PKerbTicketUnlockLogon = PKERB_TICKET_UNLOCK_LOGON;
- //
- // Used for S4U Client requests
- //
- //
- _KERB_S4U_LOGON = record
- MessageType: KERB_LOGON_SUBMIT_TYPE;
- Flags: ULONG;
- ClientUpn: UNICODE_STRING; // REQUIRED: UPN for client
- ClientRealm: UNICODE_STRING; // Optional: Client Realm, if known
- end;
- {$EXTERNALSYM _KERB_S4U_LOGON}
- KERB_S4U_LOGON = _KERB_S4U_LOGON;
- {$EXTERNALSYM KERB_S4U_LOGON}
- PKERB_S4U_LOGON = ^KERB_S4U_LOGON;
- {$EXTERNALSYM PKERB_S4U_LOGON}
- TKerbS4ULogon = KERB_S4U_LOGON;
- PKerbS4ULogon = PKERB_S4U_LOGON;
- //
- // Use the same profile structure as MSV1_0
- //
- type
- _KERB_PROFILE_BUFFER_TYPE = (
- kpbtFiller0, kpbtFiller1,
- KerbInteractiveProfile,
- kpbtFiller3,
- KerbSmartCardProfile,
- kpbtFiller5,
- KerbTicketProfile);
- {$EXTERNALSYM _KERB_PROFILE_BUFFER_TYPE}
- KERB_PROFILE_BUFFER_TYPE = _KERB_PROFILE_BUFFER_TYPE;
- {$EXTERNALSYM KERB_PROFILE_BUFFER_TYPE}
- PKERB_PROFILE_BUFFER_TYPE = ^KERB_PROFILE_BUFFER_TYPE;
- {$EXTERNALSYM PKERB_PROFILE_BUFFER_TYPE}
- TKerbProfileBufferType = KERB_PROFILE_BUFFER_TYPE;
- PKerbProfileBufferType = PKERB_PROFILE_BUFFER_TYPE;
- PKERB_INTERACTIVE_PROFILE = ^KERB_INTERACTIVE_PROFILE;
- {$EXTERNALSYM PKERB_INTERACTIVE_PROFILE}
- _KERB_INTERACTIVE_PROFILE = record
- MessageType: KERB_PROFILE_BUFFER_TYPE;
- LogonCount: USHORT;
- BadPasswordCount: USHORT;
- LogonTime: LARGE_INTEGER;
- LogoffTime: LARGE_INTEGER;
- KickOffTime: LARGE_INTEGER;
- PasswordLastSet: LARGE_INTEGER;
- PasswordCanChange: LARGE_INTEGER;
- PasswordMustChange: LARGE_INTEGER;
- LogonScript: UNICODE_STRING;
- HomeDirectory: UNICODE_STRING;
- FullName: UNICODE_STRING;
- ProfilePath: UNICODE_STRING;
- HomeDirectoryDrive: UNICODE_STRING;
- LogonServer: UNICODE_STRING;
- UserFlags: ULONG;
- end;
- {$EXTERNALSYM _KERB_INTERACTIVE_PROFILE}
- KERB_INTERACTIVE_PROFILE = _KERB_INTERACTIVE_PROFILE;
- {$EXTERNALSYM KERB_INTERACTIVE_PROFILE}
- TKerbInteractiveProfile = KERB_INTERACTIVE_PROFILE;
- PKerbInteractiveProfile = PKERB_INTERACTIVE_PROFILE;
- //
- // For smart card, we return a smart card profile, which is an interactive
- // profile plus a certificate
- //
- PKERB_SMART_CARD_PROFILE = ^KERB_SMART_CARD_PROFILE;
- {$EXTERNALSYM PKERB_SMART_CARD_PROFILE}
- _KERB_SMART_CARD_PROFILE = record
- Profile: KERB_INTERACTIVE_PROFILE;
- CertificateSize: ULONG;
- CertificateData: PUCHAR;
- end;
- {$EXTERNALSYM _KERB_SMART_CARD_PROFILE}
- KERB_SMART_CARD_PROFILE = _KERB_SMART_CARD_PROFILE;
- {$EXTERNALSYM KERB_SMART_CARD_PROFILE}
- TKerbSmartCardProfile = KERB_SMART_CARD_PROFILE;
- PKerbSmartCardProfile = PKERB_SMART_CARD_PROFILE;
- //
- // For a ticket logon profile, we return the session key from the ticket
- //
- PKERB_CRYPTO_KEY = ^KERB_CRYPTO_KEY;
- {$EXTERNALSYM PKERB_CRYPTO_KEY}
- KERB_CRYPTO_KEY = record
- KeyType: LONG;
- Length: ULONG;
- Value: PUCHAR;
- end;
- {$EXTERNALSYM KERB_CRYPTO_KEY}
- TKerbCryptoKey = KERB_CRYPTO_KEY;
- PKerbCryptoKey = PKERB_CRYPTO_KEY;
- PKERB_TICKET_PROFILE = ^KERB_TICKET_PROFILE;
- {$EXTERNALSYM PKERB_TICKET_PROFILE}
- _KERB_TICKET_PROFILE = record
- Profile: KERB_INTERACTIVE_PROFILE;
- SessionKey: KERB_CRYPTO_KEY;
- end;
- {$EXTERNALSYM _KERB_TICKET_PROFILE}
- KERB_TICKET_PROFILE = _KERB_TICKET_PROFILE;
- {$EXTERNALSYM KERB_TICKET_PROFILE}
- TKerbTicketProfile = KERB_TICKET_PROFILE;
- PKerbTicketProfile = PKERB_TICKET_PROFILE;
- _KERB_PROTOCOL_MESSAGE_TYPE = (
- KerbDebugRequestMessage,
- KerbQueryTicketCacheMessage,
- KerbChangeMachinePasswordMessage,
- KerbVerifyPacMessage,
- KerbRetrieveTicketMessage,
- KerbUpdateAddressesMessage,
- KerbPurgeTicketCacheMessage,
- KerbChangePasswordMessage,
- KerbRetrieveEncodedTicketMessage,
- KerbDecryptDataMessage,
- KerbAddBindingCacheEntryMessage,
- KerbSetPasswordMessage,
- KerbSetPasswordExMessage,
- KerbVerifyCredentialsMessage,
- KerbQueryTicketCacheExMessage,
- KerbPurgeTicketCacheExMessage,
- KerbRefreshSmartcardCredentialsMessage,
- KerbAddExtraCredentialsMessage,
- KerbQuerySupplementalCredentialsMessage);
- {$EXTERNALSYM _KERB_PROTOCOL_MESSAGE_TYPE}
- KERB_PROTOCOL_MESSAGE_TYPE = _KERB_PROTOCOL_MESSAGE_TYPE;
- {$EXTERNALSYM KERB_PROTOCOL_MESSAGE_TYPE}
- PKERB_PROTOCOL_MESSAGE_TYPE = ^KERB_PROTOCOL_MESSAGE_TYPE;
- {$EXTERNALSYM PKERB_PROTOCOL_MESSAGE_TYPE}
- TKerbProtocolMessageType = KERB_PROTOCOL_MESSAGE_TYPE;
- PKerbProtocolMessageType = PKERB_PROTOCOL_MESSAGE_TYPE;
- //
- // Used both for retrieving tickets and for querying ticket cache
- //
- PKERB_QUERY_TKT_CACHE_REQUEST = ^KERB_QUERY_TKT_CACHE_REQUEST;
- {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_REQUEST}
- _KERB_QUERY_TKT_CACHE_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- end;
- {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_REQUEST}
- KERB_QUERY_TKT_CACHE_REQUEST = _KERB_QUERY_TKT_CACHE_REQUEST;
- {$EXTERNALSYM KERB_QUERY_TKT_CACHE_REQUEST}
- TKerbQueryTktCacheRequest = KERB_QUERY_TKT_CACHE_REQUEST;
- PKerbQueryTktCacheRequest = PKERB_QUERY_TKT_CACHE_REQUEST;
- PKERB_TICKET_CACHE_INFO = ^KERB_TICKET_CACHE_INFO;
- {$EXTERNALSYM PKERB_TICKET_CACHE_INFO}
- _KERB_TICKET_CACHE_INFO = record
- ServerName: UNICODE_STRING;
- RealmName: UNICODE_STRING;
- StartTime: LARGE_INTEGER;
- EndTime: LARGE_INTEGER;
- RenewTime: LARGE_INTEGER;
- EncryptionType: LONG;
- TicketFlags: ULONG;
- end;
- {$EXTERNALSYM _KERB_TICKET_CACHE_INFO}
- KERB_TICKET_CACHE_INFO = _KERB_TICKET_CACHE_INFO;
- {$EXTERNALSYM KERB_TICKET_CACHE_INFO}
- TKerbTicketCacheInfo = KERB_TICKET_CACHE_INFO;
- PKerbTicketCacheInfo = PKERB_TICKET_CACHE_INFO;
- _KERB_TICKET_CACHE_INFO_EX = record
- ClientName: UNICODE_STRING;
- ClientRealm: UNICODE_STRING;
- ServerName: UNICODE_STRING;
- ServerRealm: UNICODE_STRING;
- StartTime: LARGE_INTEGER;
- EndTime: LARGE_INTEGER;
- RenewTime: LARGE_INTEGER;
- EncryptionType: LONG;
- TicketFlags: ULONG;
- end;
- {$EXTERNALSYM _KERB_TICKET_CACHE_INFO_EX}
- KERB_TICKET_CACHE_INFO_EX = _KERB_TICKET_CACHE_INFO_EX;
- {$EXTERNALSYM KERB_TICKET_CACHE_INFO_EX}
- PKERB_TICKET_CACHE_INFO_EX = ^KERB_TICKET_CACHE_INFO_EX;
- {$EXTERNALSYM PKERB_TICKET_CACHE_INFO_EX}
- TKerbTicketCacheInfoEx = KERB_TICKET_CACHE_INFO_EX;
- PKerbTicketCacheInfoEx = PKERB_TICKET_CACHE_INFO_EX;
- PKERB_QUERY_TKT_CACHE_RESPONSE = ^KERB_QUERY_TKT_CACHE_RESPONSE;
- {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_RESPONSE}
- _KERB_QUERY_TKT_CACHE_RESPONSE = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- CountOfTickets: ULONG;
- Tickets: array [0..ANYSIZE_ARRAY - 1] of KERB_TICKET_CACHE_INFO;
- end;
- {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_RESPONSE}
- KERB_QUERY_TKT_CACHE_RESPONSE = _KERB_QUERY_TKT_CACHE_RESPONSE;
- {$EXTERNALSYM KERB_QUERY_TKT_CACHE_RESPONSE}
- TKerbQueryTktCacheResponse = KERB_QUERY_TKT_CACHE_RESPONSE;
- PKerbQueryTktCacheResponse = PKERB_QUERY_TKT_CACHE_RESPONSE;
- _KERB_QUERY_TKT_CACHE_EX_RESPONSE = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- CountOfTickets: ULONG;
- Tickets: array [0..ANYSIZE_ARRAY - 1] of KERB_TICKET_CACHE_INFO_EX;
- end;
- {$EXTERNALSYM _KERB_QUERY_TKT_CACHE_EX_RESPONSE}
- KERB_QUERY_TKT_CACHE_EX_RESPONSE = _KERB_QUERY_TKT_CACHE_EX_RESPONSE;
- {$EXTERNALSYM KERB_QUERY_TKT_CACHE_EX_RESPONSE}
- PKERB_QUERY_TKT_CACHE_EX_RESPONSE = ^KERB_QUERY_TKT_CACHE_EX_RESPONSE;
- {$EXTERNALSYM PKERB_QUERY_TKT_CACHE_EX_RESPONSE}
- TKerbQueryTktCacheExResponse = KERB_QUERY_TKT_CACHE_EX_RESPONSE;
- PKerbQueryTktCacheExResponse = PKERB_QUERY_TKT_CACHE_EX_RESPONSE;
- //
- // Types for retrieving encoded ticket from the cache
- //
- _SecHandle = record
- dwLower: ULONG_PTR;
- dwUpper: ULONG_PTR;
- end;
- {$EXTERNALSYM _SecHandle}
- SecHandle = _SecHandle;
- {$EXTERNALSYM SecHandle}
- PSecHandle = ^SecHandle;
- {$EXTERNALSYM PSecHandle}
- // Ticket Flags
- const
- KERB_USE_DEFAULT_TICKET_FLAGS = $0;
- {$EXTERNALSYM KERB_USE_DEFAULT_TICKET_FLAGS}
- // CacheOptions
- KERB_RETRIEVE_TICKET_DEFAULT = $0;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_DEFAULT}
- KERB_RETRIEVE_TICKET_DONT_USE_CACHE = $1;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_DONT_USE_CACHE}
- KERB_RETRIEVE_TICKET_USE_CACHE_ONLY = $2;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_USE_CACHE_ONLY}
- KERB_RETRIEVE_TICKET_USE_CREDHANDLE = $4;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_USE_CREDHANDLE}
- KERB_RETRIEVE_TICKET_AS_KERB_CRED = $8;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_AS_KERB_CRED}
- KERB_RETRIEVE_TICKET_WITH_SEC_CRED = $10;
- {$EXTERNALSYM KERB_RETRIEVE_TICKET_WITH_SEC_CRED}
- // Encryption Type options
- KERB_ETYPE_DEFAULT = $0; // don't specify etype in tkt req.
- {$EXTERNALSYM KERB_ETYPE_DEFAULT}
- type
- _KERB_AUTH_DATA = record
- Type_: ULONG;
- Length: ULONG;
- Data: PUCHAR;
- end;
- {$EXTERNALSYM _KERB_AUTH_DATA}
- KERB_AUTH_DATA = _KERB_AUTH_DATA;
- {$EXTERNALSYM KERB_AUTH_DATA}
- PKERB_AUTH_DATA = ^KERB_AUTH_DATA;
- {$EXTERNALSYM PKERB_AUTH_DATA}
- TKerbAuthData = KERB_AUTH_DATA;
- PKerbAuthData = PKERB_AUTH_DATA;
- _KERB_NET_ADDRESS = record
- Family: ULONG;
- Length: ULONG;
- Address: PCHAR;
- end;
- {$EXTERNALSYM _KERB_NET_ADDRESS}
- KERB_NET_ADDRESS = _KERB_NET_ADDRESS;
- {$EXTERNALSYM KERB_NET_ADDRESS}
- PKERB_NET_ADDRESS = ^KERB_NET_ADDRESS;
- {$EXTERNALSYM PKERB_NET_ADDRESS}
- TKerbNetAddress = KERB_NET_ADDRESS;
- PKerbNetAddress = PKERB_NET_ADDRESS;
- _KERB_NET_ADDRESSES = record
- Number: ULONG;
- Addresses: array [0..ANYSIZE_ARRAY - 1] of KERB_NET_ADDRESS;
- end;
- {$EXTERNALSYM _KERB_NET_ADDRESSES}
- KERB_NET_ADDRESSES = _KERB_NET_ADDRESSES;
- {$EXTERNALSYM KERB_NET_ADDRESSES}
- PKERB_NET_ADDRESSES = ^KERB_NET_ADDRESSES;
- {$EXTERNALSYM PKERB_NET_ADDRESSES}
- TKerbNetAddresses = KERB_NET_ADDRESSES;
- PKerbNetAddresses = PKERB_NET_ADDRESSES;
- //
- // Types for the information about a ticket
- //
- type
- PKERB_EXTERNAL_NAME = ^KERB_EXTERNAL_NAME;
- {$EXTERNALSYM PKERB_EXTERNAL_NAME}
- _KERB_EXTERNAL_NAME = record
- NameType: SHORT;
- NameCount: USHORT;
- Names: array [0..ANYSIZE_ARRAY - 1] of UNICODE_STRING;
- end;
- {$EXTERNALSYM _KERB_EXTERNAL_NAME}
- KERB_EXTERNAL_NAME = _KERB_EXTERNAL_NAME;
- {$EXTERNALSYM KERB_EXTERNAL_NAME}
- TKerbExternalName = KERB_EXTERNAL_NAME;
- PKerbExternalName = PKERB_EXTERNAL_NAME;
- PKERB_EXTERNAL_TICKET = ^KERB_EXTERNAL_TICKET;
- {$EXTERNALSYM PKERB_EXTERNAL_TICKET}
- _KERB_EXTERNAL_TICKET = record
- ServiceName: PKERB_EXTERNAL_NAME;
- TargetName: PKERB_EXTERNAL_NAME;
- ClientName: PKERB_EXTERNAL_NAME;
- DomainName: UNICODE_STRING;
- TargetDomainName: UNICODE_STRING; // contains ClientDomainName
- AltTargetDomainName: UNICODE_STRING;
- SessionKey: KERB_CRYPTO_KEY;
- TicketFlags: ULONG;
- Flags: ULONG;
- KeyExpirationTime: LARGE_INTEGER;
- StartTime: LARGE_INTEGER;
- EndTime: LARGE_INTEGER;
- RenewUntil: LARGE_INTEGER;
- TimeSkew: LARGE_INTEGER;
- EncodedTicketSize: ULONG;
- EncodedTicket: PUCHAR;
- end;
- {$EXTERNALSYM _KERB_EXTERNAL_TICKET}
- KERB_EXTERNAL_TICKET = _KERB_EXTERNAL_TICKET;
- {$EXTERNALSYM KERB_EXTERNAL_TICKET}
- TKerbExternalTicket = KERB_EXTERNAL_TICKET;
- PKerbExternalTicket = PKERB_EXTERNAL_TICKET;
- _KERB_RETRIEVE_TKT_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- TargetName: UNICODE_STRING;
- TicketFlags: ULONG;
- CacheOptions: ULONG;
- EncryptionType: LONG;
- CredentialsHandle: SecHandle;
- end;
- {$EXTERNALSYM _KERB_RETRIEVE_TKT_REQUEST}
- KERB_RETRIEVE_TKT_REQUEST = _KERB_RETRIEVE_TKT_REQUEST;
- {$EXTERNALSYM KERB_RETRIEVE_TKT_REQUEST}
- PKERB_RETRIEVE_TKT_REQUEST = ^KERB_RETRIEVE_TKT_REQUEST;
- {$EXTERNALSYM PKERB_RETRIEVE_TKT_REQUEST}
- TKerbRetrieveTktRequest = KERB_RETRIEVE_TKT_REQUEST;
- PKerbRetrieveTktRequest = PKERB_RETRIEVE_TKT_REQUEST;
- PKERB_RETRIEVE_TKT_RESPONSE = ^KERB_RETRIEVE_TKT_RESPONSE;
- {$EXTERNALSYM PKERB_RETRIEVE_TKT_RESPONSE}
- _KERB_RETRIEVE_TKT_RESPONSE = record
- Ticket: KERB_EXTERNAL_TICKET;
- end;
- {$EXTERNALSYM _KERB_RETRIEVE_TKT_RESPONSE}
- KERB_RETRIEVE_TKT_RESPONSE = _KERB_RETRIEVE_TKT_RESPONSE;
- {$EXTERNALSYM KERB_RETRIEVE_TKT_RESPONSE}
- TKerbRetrieveTktResponse = KERB_RETRIEVE_TKT_RESPONSE;
- PKerbRetrieveTktResponse = PKERB_RETRIEVE_TKT_RESPONSE;
- //
- // Used to purge entries from the ticket cache
- //
- PKERB_PURGE_TKT_CACHE_REQUEST = ^KERB_PURGE_TKT_CACHE_REQUEST;
- {$EXTERNALSYM PKERB_PURGE_TKT_CACHE_REQUEST}
- _KERB_PURGE_TKT_CACHE_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- ServerName: UNICODE_STRING;
- RealmName: UNICODE_STRING;
- end;
- {$EXTERNALSYM _KERB_PURGE_TKT_CACHE_REQUEST}
- KERB_PURGE_TKT_CACHE_REQUEST = _KERB_PURGE_TKT_CACHE_REQUEST;
- {$EXTERNALSYM KERB_PURGE_TKT_CACHE_REQUEST}
- TKerbPurgeTktCacheRequest = KERB_PURGE_TKT_CACHE_REQUEST;
- PKerbPurgeTktCacheRequest = PKERB_PURGE_TKT_CACHE_REQUEST;
- //
- // Flags for purge requests
- //
- const
- KERB_PURGE_ALL_TICKETS = 1;
- {$EXTERNALSYM KERB_PURGE_ALL_TICKETS}
- type
- _KERB_PURGE_TKT_CACHE_EX_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- Flags: ULONG;
- TicketTemplate: KERB_TICKET_CACHE_INFO_EX;
- end;
- {$EXTERNALSYM _KERB_PURGE_TKT_CACHE_EX_REQUEST}
- KERB_PURGE_TKT_CACHE_EX_REQUEST = _KERB_PURGE_TKT_CACHE_EX_REQUEST;
- {$EXTERNALSYM KERB_PURGE_TKT_CACHE_EX_REQUEST}
- PKERB_PURGE_TKT_CACHE_EX_REQUEST = ^KERB_PURGE_TKT_CACHE_EX_REQUEST;
- {$EXTERNALSYM PKERB_PURGE_TKT_CACHE_EX_REQUEST}
- TKerbPurgeTktCacheExRequest = KERB_PURGE_TKT_CACHE_EX_REQUEST;
- PKerbPurgeTktCacheExRequest = PKERB_PURGE_TKT_CACHE_EX_REQUEST;
- //
- // KerbChangePassword
- //
- // KerbChangePassword changes the password on the KDC account plus
- // the password cache and logon credentials if applicable.
- //
- //
- PKERB_CHANGEPASSWORD_REQUEST = ^KERB_CHANGEPASSWORD_REQUEST;
- {$EXTERNALSYM PKERB_CHANGEPASSWORD_REQUEST}
- _KERB_CHANGEPASSWORD_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- DomainName: UNICODE_STRING;
- AccountName: UNICODE_STRING;
- OldPassword: UNICODE_STRING;
- NewPassword: UNICODE_STRING;
- Impersonating: ByteBool;
- end;
- {$EXTERNALSYM _KERB_CHANGEPASSWORD_REQUEST}
- KERB_CHANGEPASSWORD_REQUEST = _KERB_CHANGEPASSWORD_REQUEST;
- {$EXTERNALSYM KERB_CHANGEPASSWORD_REQUEST}
- TKerbChangepasswordRequest = KERB_CHANGEPASSWORD_REQUEST;
- PKerbChangepasswordRequest = PKERB_CHANGEPASSWORD_REQUEST;
- //
- // KerbSetPassword
- //
- // KerbSetPassword changes the password on the KDC account plus
- // the password cache and logon credentials if applicable.
- //
- //
- PKERB_SETPASSWORD_REQUEST = ^KERB_SETPASSWORD_REQUEST;
- {$EXTERNALSYM PKERB_SETPASSWORD_REQUEST}
- _KERB_SETPASSWORD_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- CredentialsHandle: SecHandle;
- Flags: ULONG;
- DomainName: UNICODE_STRING;
- AccountName: UNICODE_STRING;
- Password: UNICODE_STRING;
- end;
- {$EXTERNALSYM _KERB_SETPASSWORD_REQUEST}
- KERB_SETPASSWORD_REQUEST = _KERB_SETPASSWORD_REQUEST;
- {$EXTERNALSYM KERB_SETPASSWORD_REQUEST}
- TKerbSetpasswordRequest = KERB_SETPASSWORD_REQUEST;
- PKerbSetpasswordRequest = PKERB_SETPASSWORD_REQUEST;
- _KERB_SETPASSWORD_EX_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- CredentialsHandle: SecHandle;
- Flags: ULONG;
- AccountRealm: UNICODE_STRING;
- AccountName: UNICODE_STRING;
- Password: UNICODE_STRING;
- ClientRealm: UNICODE_STRING;
- ClientName: UNICODE_STRING;
- Impersonating: BOOLEAN;
- KdcAddress: UNICODE_STRING;
- KdcAddressType: ULONG;
- end;
- {$EXTERNALSYM _KERB_SETPASSWORD_EX_REQUEST}
- KERB_SETPASSWORD_EX_REQUEST = _KERB_SETPASSWORD_EX_REQUEST;
- {$EXTERNALSYM KERB_SETPASSWORD_EX_REQUEST}
- PKERB_SETPASSWORD_EX_REQUEST = ^KERB_SETPASSWORD_EX_REQUEST;
- {$EXTERNALSYM PKERB_SETPASSWORD_EX_REQUEST}
- TKerbSetPasswordExRequest = KERB_SETPASSWORD_EX_REQUEST;
- PKerbSetPasswordExRequest = PKERB_SETPASSWORD_EX_REQUEST;
- const
- DS_UNKNOWN_ADDRESS_TYPE = 0; // anything *but* IP
- {$EXTERNALSYM DS_UNKNOWN_ADDRESS_TYPE}
- KERB_SETPASS_USE_LOGONID = 1;
- {$EXTERNALSYM KERB_SETPASS_USE_LOGONID}
- KERB_SETPASS_USE_CREDHANDLE = 2;
- {$EXTERNALSYM KERB_SETPASS_USE_CREDHANDLE}
- type
- PKERB_DECRYPT_REQUEST = ^KERB_DECRYPT_REQUEST;
- {$EXTERNALSYM PKERB_DECRYPT_REQUEST}
- _KERB_DECRYPT_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- LogonId: LUID;
- Flags: ULONG;
- CryptoType: LONG;
- KeyUsage: LONG;
- Key: KERB_CRYPTO_KEY; // optional
- EncryptedDataSize: ULONG;
- InitialVectorSize: ULONG;
- InitialVector: PUCHAR;
- EncryptedData: PUCHAR;
- end;
- {$EXTERNALSYM _KERB_DECRYPT_REQUEST}
- KERB_DECRYPT_REQUEST = _KERB_DECRYPT_REQUEST;
- {$EXTERNALSYM KERB_DECRYPT_REQUEST}
- TKerbDecryptRequest = KERB_DECRYPT_REQUEST;
- PKerbDecryptRequest = PKERB_DECRYPT_REQUEST;
- //
- // If set, use the primary key from the current logon session of the one provided in the LogonId field.
- // Otherwise, use the Key in the KERB_DECRYPT_MESSAGE.
- const
- KERB_DECRYPT_FLAG_DEFAULT_KEY = $00000001;
- {$EXTERNALSYM KERB_DECRYPT_FLAG_DEFAULT_KEY}
- type
- PKERB_DECRYPT_RESPONSE = ^KERB_DECRYPT_RESPONSE;
- {$EXTERNALSYM PKERB_DECRYPT_RESPONSE}
- _KERB_DECRYPT_RESPONSE = record
- DecryptedData: array [0..ANYSIZE_ARRAY - 1] of UCHAR;
- end;
- {$EXTERNALSYM _KERB_DECRYPT_RESPONSE}
- KERB_DECRYPT_RESPONSE = _KERB_DECRYPT_RESPONSE;
- {$EXTERNALSYM KERB_DECRYPT_RESPONSE}
- TKerbDecryptResponse = KERB_DECRYPT_RESPONSE;
- PKerbDecryptResponse = PKERB_DECRYPT_RESPONSE;
- //
- // Request structure for adding a binding cache entry. TCB privilege
- // is required for this operation.
- //
- PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST = ^KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
- {$EXTERNALSYM PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
- _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- RealmName: UNICODE_STRING;
- KdcAddress: UNICODE_STRING;
- AddressType: ULONG; //dsgetdc.h DS_NETBIOS_ADDRESS||DS_INET_ADDRESS
- end;
- {$EXTERNALSYM _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
- KERB_ADD_BINDING_CACHE_ENTRY_REQUEST = _KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
- {$EXTERNALSYM KERB_ADD_BINDING_CACHE_ENTRY_REQUEST}
- TKerbAddBindingCacheEntryRequest = KERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
- PKerbAddBindingCacheEntryRequest = PKERB_ADD_BINDING_CACHE_ENTRY_REQUEST;
- //
- // Request structure for reacquiring smartcard credentials for a
- // given LUID.
- // Requires TCB.
- //
- _KERB_REFRESH_SCCRED_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- CredentialBlob: UNICODE_STRING; // optional
- LogonId: LUID;
- Flags: ULONG;
- end;
- {$EXTERNALSYM _KERB_REFRESH_SCCRED_REQUEST}
- KERB_REFRESH_SCCRED_REQUEST = _KERB_REFRESH_SCCRED_REQUEST;
- {$EXTERNALSYM KERB_REFRESH_SCCRED_REQUEST}
- PKERB_REFRESH_SCCRED_REQUEST = ^KERB_REFRESH_SCCRED_REQUEST;
- {$EXTERNALSYM PKERB_REFRESH_SCCRED_REQUEST}
- TKerbRefreshScCredRequest = KERB_REFRESH_SCCRED_REQUEST;
- PKerbRefreshScCredRequest = PKERB_REFRESH_SCCRED_REQUEST;
- //
- // Flags for KERB_REFRESH_SCCRED_REQUEST
- //
- // KERB_REFRESH_SCCRED_RELEASE
- // Release the smartcard handle for LUID
- //
- // KERB_REFRESH_SCCRED_GETTGT
- // Use the certificate hash in the blob to get a TGT for the logon
- // session.
- //
- const
- KERB_REFRESH_SCCRED_RELEASE = $0;
- {$EXTERNALSYM KERB_REFRESH_SCCRED_RELEASE}
- KERB_REFRESH_SCCRED_GETTGT = $1;
- {$EXTERNALSYM KERB_REFRESH_SCCRED_GETTGT}
- //
- // Request structure for adding extra Server credentials to a given
- // logon session. Only applicable during AcceptSecurityContext, and
- // requires TCB to alter "other" creds
- //
- type
- _KERB_ADD_CREDENTIALS_REQUEST = record
- MessageType: KERB_PROTOCOL_MESSAGE_TYPE;
- UserName: UNICODE_STRING;
- DomainName: UNICODE_STRING;
- Password: UNICODE_STRING;
- LogonId: LUID; // optional
- Flags: ULONG;
- end;
- {$EXTERNALSYM _KERB_ADD_CREDENTIALS_REQUEST}
- KERB_ADD_CREDENTIALS_REQUEST = _KERB_ADD_CREDENTIALS_REQUEST;
- {$EXTERNALSYM KERB_ADD_CREDENTIALS_REQUEST}
- PKERB_ADD_CREDENTIALS_REQUEST = ^KERB_ADD_CREDENTIALS_REQUEST;
- {$EXTERNALSYM PKERB_ADD_CREDENTIALS_REQUEST}
- TKerbAddCredentialsRequest = KERB_ADD_CREDENTIALS_REQUEST;
- PKerbAddCredentialsRequest = PKERB_ADD_CREDENTIALS_REQUEST;
- const
- KERB_REQUEST_ADD_CREDENTIAL = 1;
- {$EXTERNALSYM KERB_REQUEST_ADD_CREDENTIAL}
- KERB_REQUEST_REPLACE_CREDENTIAL = 2;
- {$EXTERNALSYM KERB_REQUEST_REPLACE_CREDENTIAL}
- KERB_REQUEST_REMOVE_CREDENTIAL = 4;
- {$EXTERNALSYM KERB_REQUEST_REMOVE_CREDENTIAL}
- implementation
- uses
- JwaWinDLLNames;
- function LSA_SUCCESS(Error: NTSTATUS): BOOL;
- begin
- Result := LONG(Error) > 0;
- end;
- function KERB_IS_MS_PRINCIPAL(X: Integer): BOOL;
- begin
- Result := (X <= KRB_NT_MS_PRINCIPAL) or (X >= KRB_NT_ENTERPRISE_PRINCIPAL);
- end;
- {$IFDEF DYNAMIC_LINK}
- var
- _LsaRegisterLogonProcess: Pointer;
- function LsaRegisterLogonProcess;
- begin
- GetProcedureAddress(_LsaRegisterLogonProcess, secur32, 'LsaRegisterLogonProcess');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaRegisterLogonProcess]
- end;
- end;
- var
- _LsaLogonUser: Pointer;
- function LsaLogonUser;
- begin
- GetProcedureAddress(_LsaLogonUser, secur32, 'LsaLogonUser');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaLogonUser]
- end;
- end;
- var
- _LsaLookupAuthenticationPackage: Pointer;
- function LsaLookupAuthenticationPackage;
- begin
- GetProcedureAddress(_LsaLookupAuthenticationPackage, secur32, 'LsaLookupAuthenticationPackage');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaLookupAuthenticationPackage]
- end;
- end;
- var
- _LsaFreeReturnBuffer: Pointer;
- function LsaFreeReturnBuffer;
- begin
- GetProcedureAddress(_LsaFreeReturnBuffer, secur32, 'LsaFreeReturnBuffer');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaFreeReturnBuffer]
- end;
- end;
- var
- _LsaCallAuthenticationPackage: Pointer;
- function LsaCallAuthenticationPackage;
- begin
- GetProcedureAddress(_LsaCallAuthenticationPackage, secur32, 'LsaCallAuthenticationPackage');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaCallAuthenticationPackage]
- end;
- end;
- var
- _LsaDeregisterLogonProcess: Pointer;
- function LsaDeregisterLogonProcess;
- begin
- GetProcedureAddress(_LsaDeregisterLogonProcess, secur32, 'LsaDeregisterLogonProcess');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaDeregisterLogonProcess]
- end;
- end;
- var
- _LsaConnectUntrusted: Pointer;
- function LsaConnectUntrusted;
- begin
- GetProcedureAddress(_LsaConnectUntrusted, secur32, 'LsaConnectUntrusted');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaConnectUntrusted]
- end;
- end;
- var
- _LsaFreeMemory: Pointer;
- function LsaFreeMemory;
- begin
- GetProcedureAddress(_LsaFreeMemory, advapi32, 'LsaFreeMemory');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaFreeMemory]
- end;
- end;
- var
- _LsaClose: Pointer;
- function LsaClose;
- begin
- GetProcedureAddress(_LsaClose, advapi32, 'LsaClose');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaClose]
- end;
- end;
- var
- _LsaOpenPolicy: Pointer;
- function LsaOpenPolicy;
- begin
- GetProcedureAddress(_LsaOpenPolicy, advapi32, 'LsaOpenPolicy');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaOpenPolicy]
- end;
- end;
- var
- _LsaEnumerateLogonSessions: Pointer;
- function LsaEnumerateLogonSessions;
- begin
- GetProcedureAddress(_LsaEnumerateLogonSessions, secur32, 'LsaEnumerateLogonSessions');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaEnumerateLogonSessions]
- end;
- end;
- var
- _LsaGetLogonSessionData: Pointer;
- function LsaGetLogonSessionData;
- begin
- GetProcedureAddress(_LsaGetLogonSessionData, secur32, 'LsaGetLogonSessionData');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaGetLogonSessionData]
- end;
- end;
- var
- _LsaQueryInformationPolicy: Pointer;
- function LsaQueryInformationPolicy;
- begin
- GetProcedureAddress(_LsaQueryInformationPolicy, advapi32, 'LsaQueryInformationPolicy');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaQueryInformationPolicy]
- end;
- end;
- var
- _LsaSetInformationPolicy: Pointer;
- function LsaSetInformationPolicy;
- begin
- GetProcedureAddress(_LsaSetInformationPolicy, advapi32, 'LsaSetInformationPolicy');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaSetInformationPolicy]
- end;
- end;
- var
- _LsaQueryDomainInformationPolicy: Pointer;
- function LsaQueryDomainInformationPolicy;
- begin
- GetProcedureAddress(_LsaQueryDomainInformationPolicy, advapi32, 'LsaQueryDomainInformationPolicy');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaQueryDomainInformationPolicy]
- end;
- end;
- var
- _LsaSetDomainInformationPolicy: Pointer;
- function LsaSetDomainInformationPolicy;
- begin
- GetProcedureAddress(_LsaSetDomainInformationPolicy, advapi32, 'LsaSetDomainInformationPolicy');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaSetDomainInformationPolicy]
- end;
- end;
- var
- _LsaRegisterPolicyChangeNot: Pointer;
- function LsaRegisterPolicyChangeNotification;
- begin
- GetProcedureAddress(_LsaRegisterPolicyChangeNot, secur32, 'LsaRegisterPolicyChangeNotification');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaRegisterPolicyChangeNot]
- end;
- end;
- var
- _LsaUnregisterPolicyChangeNot: Pointer;
- function LsaUnregisterPolicyChangeNotification;
- begin
- GetProcedureAddress(_LsaUnregisterPolicyChangeNot, secur32, 'LsaUnregisterPolicyChangeNotification');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaUnregisterPolicyChangeNot]
- end;
- end;
- var
- _LsaEnumerateTrustedDomains: Pointer;
- function LsaEnumerateTrustedDomains;
- begin
- GetProcedureAddress(_LsaEnumerateTrustedDomains, advapi32, 'LsaEnumerateTrustedDomains');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaEnumerateTrustedDomains]
- end;
- end;
- var
- _LsaLookupNames: Pointer;
- function LsaLookupNames;
- begin
- GetProcedureAddress(_LsaLookupNames, advapi32, 'LsaLookupNames');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaLookupNames]
- end;
- end;
- var
- _LsaLookupNames2: Pointer;
- function LsaLookupNames2;
- begin
- GetProcedureAddress(_LsaLookupNames2, advapi32, 'LsaLookupNames2');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaLookupNames2]
- end;
- end;
- var
- _LsaLookupSids: Pointer;
- function LsaLookupSids;
- begin
- GetProcedureAddress(_LsaLookupSids, advapi32, 'LsaLookupSids');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaLookupSids]
- end;
- end;
- var
- _LsaEnumAccountsWithUserRight: Pointer;
- function LsaEnumerateAccountsWithUserRight;
- begin
- GetProcedureAddress(_LsaEnumAccountsWithUserRight, advapi32, 'LsaEnumerateAccountsWithUserRight');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaEnumAccountsWithUserRight]
- end;
- end;
- var
- _LsaEnumerateAccountRights: Pointer;
- function LsaEnumerateAccountRights;
- begin
- GetProcedureAddress(_LsaEnumerateAccountRights, advapi32, 'LsaEnumerateAccountRights');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaEnumerateAccountRights]
- end;
- end;
- var
- _LsaAddAccountRights: Pointer;
- function LsaAddAccountRights;
- begin
- GetProcedureAddress(_LsaAddAccountRights, advapi32, 'LsaAddAccountRights');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaAddAccountRights]
- end;
- end;
- var
- _LsaRemoveAccountRights: Pointer;
- function LsaRemoveAccountRights;
- begin
- GetProcedureAddress(_LsaRemoveAccountRights, advapi32, 'LsaRemoveAccountRights');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaRemoveAccountRights]
- end;
- end;
- var
- _LsaOpenTrustedDomainByName: Pointer;
- function LsaOpenTrustedDomainByName;
- begin
- GetProcedureAddress(_LsaOpenTrustedDomainByName, advapi32, 'LsaOpenTrustedDomainByName');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaOpenTrustedDomainByName]
- end;
- end;
- var
- _LsaQueryTrustedDomainInfo: Pointer;
- function LsaQueryTrustedDomainInfo;
- begin
- GetProcedureAddress(_LsaQueryTrustedDomainInfo, advapi32, 'LsaQueryTrustedDomainInfo');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaQueryTrustedDomainInfo]
- end;
- end;
- var
- _LsaSetTrustedDomainInformation: Pointer;
- function LsaSetTrustedDomainInformation;
- begin
- GetProcedureAddress(_LsaSetTrustedDomainInformation, advapi32, 'LsaSetTrustedDomainInformation');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaSetTrustedDomainInformation]
- end;
- end;
- var
- _LsaDeleteTrustedDomain: Pointer;
- function LsaDeleteTrustedDomain;
- begin
- GetProcedureAddress(_LsaDeleteTrustedDomain, advapi32, 'LsaDeleteTrustedDomain');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaDeleteTrustedDomain]
- end;
- end;
- var
- _LsaQueryTrustedDomainInfoByName: Pointer;
- function LsaQueryTrustedDomainInfoByName;
- begin
- GetProcedureAddress(_LsaQueryTrustedDomainInfoByName, advapi32, 'LsaQueryTrustedDomainInfoByName');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaQueryTrustedDomainInfoByName]
- end;
- end;
- var
- _LsaSetTrustedDomainInfoByName: Pointer;
- function LsaSetTrustedDomainInfoByName;
- begin
- GetProcedureAddress(_LsaSetTrustedDomainInfoByName, advapi32, 'LsaSetTrustedDomainInfoByName');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaSetTrustedDomainInfoByName]
- end;
- end;
- var
- _LsaEnumerateTrustedDomainsEx: Pointer;
- function LsaEnumerateTrustedDomainsEx;
- begin
- GetProcedureAddress(_LsaEnumerateTrustedDomainsEx, advapi32, 'LsaEnumerateTrustedDomainsEx');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaEnumerateTrustedDomainsEx]
- end;
- end;
- var
- _LsaCreateTrustedDomainEx: Pointer;
- function LsaCreateTrustedDomainEx;
- begin
- GetProcedureAddress(_LsaCreateTrustedDomainEx, advapi32, 'LsaCreateTrustedDomainEx');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaCreateTrustedDomainEx]
- end;
- end;
- var
- _LsaQueryForestTrustInformation: Pointer;
- function LsaQueryForestTrustInformation;
- begin
- GetProcedureAddress(_LsaQueryForestTrustInformation, advapi32, 'LsaQueryForestTrustInformation');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaQueryForestTrustInformation]
- end;
- end;
- var
- _LsaSetForestTrustInformation: Pointer;
- function LsaSetForestTrustInformation;
- begin
- GetProcedureAddress(_LsaSetForestTrustInformation, advapi32, 'LsaSetForestTrustInformation');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaSetForestTrustInformation]
- end;
- end;
- var
- _LsaStorePrivateData: Pointer;
- function LsaStorePrivateData;
- begin
- GetProcedureAddress(_LsaStorePrivateData, advapi32, 'LsaStorePrivateData');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaStorePrivateData]
- end;
- end;
- var
- _LsaRetrievePrivateData: Pointer;
- function LsaRetrievePrivateData;
- begin
- GetProcedureAddress(_LsaRetrievePrivateData, advapi32, 'LsaRetrievePrivateData');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaRetrievePrivateData]
- end;
- end;
- var
- _LsaNtStatusToWinError: Pointer;
- function LsaNtStatusToWinError;
- begin
- GetProcedureAddress(_LsaNtStatusToWinError, advapi32, 'LsaNtStatusToWinError');
- asm
- MOV ESP, EBP
- POP EBP
- JMP [_LsaNtStatusToWinError]
- end;
- end;
- {$ELSE}
- function LsaRegisterLogonProcess; external secur32 name 'LsaRegisterLogonProcess';
- function LsaLogonUser; external secur32 name 'LsaLogonUser';
- function LsaLookupAuthenticationPackage; external secur32 name 'LsaLookupAuthenticationPackage';
- function LsaFreeReturnBuffer; external secur32 name 'LsaFreeReturnBuffer';
- function LsaCallAuthenticationPackage; external secur32 name 'LsaCallAuthenticationPackage';
- function LsaDeregisterLogonProcess; external secur32 name 'LsaDeregisterLogonProcess';
- function LsaConnectUntrusted; external secur32 name 'LsaConnectUntrusted';
- function LsaFreeMemory; external advapi32 name 'LsaFreeMemory';
- function LsaClose; external advapi32 name 'LsaClose';
- function LsaOpenPolicy; external advapi32 name 'LsaOpenPolicy';
- function LsaEnumerateLogonSessions; external secur32 name 'LsaEnumerateLogonSessions';
- function LsaGetLogonSessionData; external secur32 name 'LsaGetLogonSessionData';
- function LsaQueryInformationPolicy; external advapi32 name 'LsaQueryInformationPolicy';
- function LsaSetInformationPolicy; external advapi32 name 'LsaSetInformationPolicy';
- function LsaQueryDomainInformationPolicy; external advapi32 name 'LsaQueryDomainInformationPolicy';
- function LsaSetDomainInformationPolicy; external advapi32 name 'LsaSetDomainInformationPolicy';
- function LsaRegisterPolicyChangeNotification; external secur32 name 'LsaRegisterPolicyChangeNotification';
- function LsaUnregisterPolicyChangeNotification; external secur32 name 'LsaUnregisterPolicyChangeNotification';
- function LsaEnumerateTrustedDomains; external advapi32 name 'LsaEnumerateTrustedDomains';
- function LsaLookupNames; external advapi32 name 'LsaLookupNames';
- function LsaLookupNames2; external advapi32 name 'LsaLookupNames2';
- function LsaLookupSids; external advapi32 name 'LsaLookupSids';
- function LsaEnumerateAccountsWithUserRight; external advapi32 name 'LsaEnumerateAccountsWithUserRight';
- function LsaEnumerateAccountRights; external advapi32 name 'LsaEnumerateAccountRights';
- function LsaAddAccountRights; external advapi32 name 'LsaAddAccountRights';
- function LsaRemoveAccountRights; external advapi32 name 'LsaRemoveAccountRights';
- function LsaOpenTrustedDomainByName; external advapi32 name 'LsaOpenTrustedDomainByName';
- function LsaQueryTrustedDomainInfo; external advapi32 name 'LsaQueryTrustedDomainInfo';
- function LsaSetTrustedDomainInformation; external advapi32 name 'LsaSetTrustedDomainInformation';
- function LsaDeleteTrustedDomain; external advapi32 name 'LsaDeleteTrustedDomain';
- function LsaQueryTrustedDomainInfoByName; external advapi32 name 'LsaQueryTrustedDomainInfoByName';
- function LsaSetTrustedDomainInfoByName; external advapi32 name 'LsaSetTrustedDomainInfoByName';
- function LsaEnumerateTrustedDomainsEx; external advapi32 name 'LsaEnumerateTrustedDomainsEx';
- function LsaCreateTrustedDomainEx; external advapi32 name 'LsaCreateTrustedDomainEx';
- function LsaQueryForestTrustInformation; external advapi32 name 'LsaQueryForestTrustInformation';
- function LsaSetForestTrustInformation; external advapi32 name 'LsaSetForestTrustInformation';
- function LsaStorePrivateData; external advapi32 name 'LsaStorePrivateData';
- function LsaRetrievePrivateData; external advapi32 name 'LsaRetrievePrivateData';
- function LsaNtStatusToWinError; external advapi32 name 'LsaNtStatusToWinError';
- {$ENDIF DYNAMIC_LINK}
- end.
|