jwawinnt.pas 328 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345
  1. {******************************************************************************}
  2. { }
  3. { Windows Types API interface Unit for Object Pascal }
  4. { }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
  6. { Corporation. All Rights Reserved. }
  7. { }
  8. { The original file is: winnt.h, released August 2001. The original Pascal }
  9. { code is: WinNT.pas, released December 2000. The initial developer of the }
  10. { Pascal code is Marcel van Brakel (brakelm att chello dott nl). }
  11. { }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
  13. { Marcel van Brakel. All Rights Reserved. }
  14. { }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
  16. { }
  17. { You may retrieve the latest version of this file at the Project JEDI }
  18. { APILIB home page, located at http://jedi-apilib.sourceforge.net }
  19. { }
  20. { The contents of this file are used with permission, subject to the Mozilla }
  21. { Public License Version 1.1 (the "License"); you may not use this file except }
  22. { in compliance with the License. You may obtain a copy of the License at }
  23. { http://www.mozilla.org/MPL/MPL-1.1.html }
  24. { }
  25. { Software distributed under the License is distributed on an "AS IS" basis, }
  26. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  27. { the specific language governing rights and limitations under the License. }
  28. { }
  29. { Alternatively, the contents of this file may be used under the terms of the }
  30. { GNU Lesser General Public License (the "LGPL License"), in which case the }
  31. { provisions of the LGPL License are applicable instead of those above. }
  32. { If you wish to allow use of your version of this file only under the terms }
  33. { of the LGPL License and not to allow others to use your version of this file }
  34. { under the MPL, indicate your decision by deleting the provisions above and }
  35. { replace them with the notice and other provisions required by the LGPL }
  36. { License. If you do not delete the provisions above, a recipient may use }
  37. { your version of this file under either the MPL or the LGPL License. }
  38. { }
  39. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  40. { }
  41. {******************************************************************************}
  42. // $Id: JwaWinNT.pas,v 1.11 2005/09/06 16:36:51 marquardt Exp $
  43. {$IFNDEF JWA_INCLUDEMODE}
  44. unit JwaWinNT;
  45. {$WEAKPACKAGEUNIT}
  46. {$I jediapilib.inc}
  47. interface
  48. uses
  49. JwaWinType;
  50. {$ENDIF !JWA_INCLUDEMODE}
  51. {$IFDEF JWA_INTERFACESECTION}
  52. {$HPPEMIT ''}
  53. {$HPPEMIT '#include "winnt.h"'}
  54. {$HPPEMIT ''}
  55. {$HPPEMIT 'typedef PACL *PPACL'}
  56. {$HPPEMIT 'typedef PSID *PPSID'}
  57. {$HPPEMIT 'typedef PSECURITY_DESCRIPTOR *PPSECURITY_DESCRIPTOR'}
  58. {$HPPEMIT ''}
  59. const
  60. MAXBYTE = BYTE($ff);
  61. {$EXTERNALSYM MAXBYTE}
  62. MAXWORD = WORD($ffff);
  63. {$EXTERNALSYM MAXWORD}
  64. MAXDWORD = DWORD($ffffffff);
  65. {$EXTERNALSYM MAXDWORD}
  66. {$IFNDEF JWA_INCLUDEMODE}
  67. const
  68. VER_SERVER_NT = DWORD($80000000);
  69. {$EXTERNALSYM VER_SERVER_NT}
  70. VER_WORKSTATION_NT = $40000000;
  71. {$EXTERNALSYM VER_WORKSTATION_NT}
  72. VER_SUITE_SMALLBUSINESS = $00000001;
  73. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  74. VER_SUITE_ENTERPRISE = $00000002;
  75. {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  76. VER_SUITE_BACKOFFICE = $00000004;
  77. {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  78. VER_SUITE_COMMUNICATIONS = $00000008;
  79. {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  80. VER_SUITE_TERMINAL = $00000010;
  81. {$EXTERNALSYM VER_SUITE_TERMINAL}
  82. VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  83. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  84. VER_SUITE_EMBEDDEDNT = $00000040;
  85. {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  86. VER_SUITE_DATACENTER = $00000080;
  87. {$EXTERNALSYM VER_SUITE_DATACENTER}
  88. VER_SUITE_SINGLEUSERTS = $00000100;
  89. {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  90. VER_SUITE_PERSONAL = $00000200;
  91. {$EXTERNALSYM VER_SUITE_PERSONAL}
  92. VER_SUITE_BLADE = $00000400;
  93. {$EXTERNALSYM VER_SUITE_BLADE}
  94. VER_SUITE_EMBEDDED_RESTRICTED = $00000800;
  95. {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
  96. VER_SUITE_SECURITY_APPLIANCE = $00001000;
  97. {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}
  98. {$ENDIF !JWA_INCLUDEMODE}
  99. //
  100. // Language IDs.
  101. //
  102. // The following two combinations of primary language ID and
  103. // sublanguage ID have special semantics:
  104. //
  105. // Primary Language ID Sublanguage ID Result
  106. // ------------------- --------------- ------------------------
  107. // LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral
  108. // LANG_NEUTRAL SUBLANG_DEFAULT User default language
  109. // LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language
  110. // LANG_INVARIANT SUBLANG_NEUTRAL Invariant locale
  111. //
  112. //
  113. // Primary language IDs.
  114. //
  115. const
  116. LANG_NEUTRAL = $00;
  117. {$EXTERNALSYM LANG_NEUTRAL}
  118. LANG_INVARIANT = $7f;
  119. {$EXTERNALSYM LANG_INVARIANT}
  120. LANG_AFRIKAANS = $36;
  121. {$EXTERNALSYM LANG_AFRIKAANS}
  122. LANG_ALBANIAN = $1c;
  123. {$EXTERNALSYM LANG_ALBANIAN}
  124. LANG_ARABIC = $01;
  125. {$EXTERNALSYM LANG_ARABIC}
  126. LANG_ARMENIAN = $2b;
  127. {$EXTERNALSYM LANG_ARMENIAN}
  128. LANG_ASSAMESE = $4d;
  129. {$EXTERNALSYM LANG_ASSAMESE}
  130. LANG_AZERI = $2c;
  131. {$EXTERNALSYM LANG_AZERI}
  132. LANG_BASQUE = $2d;
  133. {$EXTERNALSYM LANG_BASQUE}
  134. LANG_BELARUSIAN = $23;
  135. {$EXTERNALSYM LANG_BELARUSIAN}
  136. LANG_BENGALI = $45;
  137. {$EXTERNALSYM LANG_BENGALI}
  138. LANG_BULGARIAN = $02;
  139. {$EXTERNALSYM LANG_BULGARIAN}
  140. LANG_CATALAN = $03;
  141. {$EXTERNALSYM LANG_CATALAN}
  142. LANG_CHINESE = $04;
  143. {$EXTERNALSYM LANG_CHINESE}
  144. LANG_CROATIAN = $1a;
  145. {$EXTERNALSYM LANG_CROATIAN}
  146. LANG_CZECH = $05;
  147. {$EXTERNALSYM LANG_CZECH}
  148. LANG_DANISH = $06;
  149. {$EXTERNALSYM LANG_DANISH}
  150. LANG_DIVEHI = $65;
  151. {$EXTERNALSYM LANG_DIVEHI}
  152. LANG_DUTCH = $13;
  153. {$EXTERNALSYM LANG_DUTCH}
  154. LANG_ENGLISH = $09;
  155. {$EXTERNALSYM LANG_ENGLISH}
  156. LANG_ESTONIAN = $25;
  157. {$EXTERNALSYM LANG_ESTONIAN}
  158. LANG_FAEROESE = $38;
  159. {$EXTERNALSYM LANG_FAEROESE}
  160. LANG_FARSI = $29;
  161. {$EXTERNALSYM LANG_FARSI}
  162. LANG_FINNISH = $0b;
  163. {$EXTERNALSYM LANG_FINNISH}
  164. LANG_FRENCH = $0c;
  165. {$EXTERNALSYM LANG_FRENCH}
  166. LANG_GALICIAN = $56;
  167. {$EXTERNALSYM LANG_GALICIAN}
  168. LANG_GEORGIAN = $37;
  169. {$EXTERNALSYM LANG_GEORGIAN}
  170. LANG_GERMAN = $07;
  171. {$EXTERNALSYM LANG_GERMAN}
  172. LANG_GREEK = $08;
  173. {$EXTERNALSYM LANG_GREEK}
  174. LANG_GUJARATI = $47;
  175. {$EXTERNALSYM LANG_GUJARATI}
  176. LANG_HEBREW = $0d;
  177. {$EXTERNALSYM LANG_HEBREW}
  178. LANG_HINDI = $39;
  179. {$EXTERNALSYM LANG_HINDI}
  180. LANG_HUNGARIAN = $0e;
  181. {$EXTERNALSYM LANG_HUNGARIAN}
  182. LANG_ICELANDIC = $0f;
  183. {$EXTERNALSYM LANG_ICELANDIC}
  184. LANG_INDONESIAN = $21;
  185. {$EXTERNALSYM LANG_INDONESIAN}
  186. LANG_ITALIAN = $10;
  187. {$EXTERNALSYM LANG_ITALIAN}
  188. LANG_JAPANESE = $11;
  189. {$EXTERNALSYM LANG_JAPANESE}
  190. LANG_KANNADA = $4b;
  191. {$EXTERNALSYM LANG_KANNADA}
  192. LANG_KASHMIRI = $60;
  193. {$EXTERNALSYM LANG_KASHMIRI}
  194. LANG_KAZAK = $3f;
  195. {$EXTERNALSYM LANG_KAZAK}
  196. LANG_KONKANI = $57;
  197. {$EXTERNALSYM LANG_KONKANI}
  198. LANG_KOREAN = $12;
  199. {$EXTERNALSYM LANG_KOREAN}
  200. LANG_KYRGYZ = $40;
  201. {$EXTERNALSYM LANG_KYRGYZ}
  202. LANG_LATVIAN = $26;
  203. {$EXTERNALSYM LANG_LATVIAN}
  204. LANG_LITHUANIAN = $27;
  205. {$EXTERNALSYM LANG_LITHUANIAN}
  206. LANG_MACEDONIAN = $2f; // the Former Yugoslav Republic of Macedonia
  207. {$EXTERNALSYM LANG_MACEDONIAN}
  208. LANG_MALAY = $3e;
  209. {$EXTERNALSYM LANG_MALAY}
  210. LANG_MALAYALAM = $4c;
  211. {$EXTERNALSYM LANG_MALAYALAM}
  212. LANG_MANIPURI = $58;
  213. {$EXTERNALSYM LANG_MANIPURI}
  214. LANG_MARATHI = $4e;
  215. {$EXTERNALSYM LANG_MARATHI}
  216. LANG_MONGOLIAN = $50;
  217. {$EXTERNALSYM LANG_MONGOLIAN}
  218. LANG_NEPALI = $61;
  219. {$EXTERNALSYM LANG_NEPALI}
  220. LANG_NORWEGIAN = $14;
  221. {$EXTERNALSYM LANG_NORWEGIAN}
  222. LANG_ORIYA = $48;
  223. {$EXTERNALSYM LANG_ORIYA}
  224. LANG_POLISH = $15;
  225. {$EXTERNALSYM LANG_POLISH}
  226. LANG_PORTUGUESE = $16;
  227. {$EXTERNALSYM LANG_PORTUGUESE}
  228. LANG_PUNJABI = $46;
  229. {$EXTERNALSYM LANG_PUNJABI}
  230. LANG_ROMANIAN = $18;
  231. {$EXTERNALSYM LANG_ROMANIAN}
  232. LANG_RUSSIAN = $19;
  233. {$EXTERNALSYM LANG_RUSSIAN}
  234. LANG_SANSKRIT = $4f;
  235. {$EXTERNALSYM LANG_SANSKRIT}
  236. LANG_SERBIAN = $1a;
  237. {$EXTERNALSYM LANG_SERBIAN}
  238. LANG_SINDHI = $59;
  239. {$EXTERNALSYM LANG_SINDHI}
  240. LANG_SLOVAK = $1b;
  241. {$EXTERNALSYM LANG_SLOVAK}
  242. LANG_SLOVENIAN = $24;
  243. {$EXTERNALSYM LANG_SLOVENIAN}
  244. LANG_SPANISH = $0a;
  245. {$EXTERNALSYM LANG_SPANISH}
  246. LANG_SWAHILI = $41;
  247. {$EXTERNALSYM LANG_SWAHILI}
  248. LANG_SWEDISH = $1d;
  249. {$EXTERNALSYM LANG_SWEDISH}
  250. LANG_SYRIAC = $5a;
  251. {$EXTERNALSYM LANG_SYRIAC}
  252. LANG_TAMIL = $49;
  253. {$EXTERNALSYM LANG_TAMIL}
  254. LANG_TATAR = $44;
  255. {$EXTERNALSYM LANG_TATAR}
  256. LANG_TELUGU = $4a;
  257. {$EXTERNALSYM LANG_TELUGU}
  258. LANG_THAI = $1e;
  259. {$EXTERNALSYM LANG_THAI}
  260. LANG_TURKISH = $1f;
  261. {$EXTERNALSYM LANG_TURKISH}
  262. LANG_UKRAINIAN = $22;
  263. {$EXTERNALSYM LANG_UKRAINIAN}
  264. LANG_URDU = $20;
  265. {$EXTERNALSYM LANG_URDU}
  266. LANG_UZBEK = $43;
  267. {$EXTERNALSYM LANG_UZBEK}
  268. LANG_VIETNAMESE = $2a;
  269. {$EXTERNALSYM LANG_VIETNAMESE}
  270. //
  271. // Sublanguage IDs.
  272. //
  273. // The name immediately following SUBLANG_ dictates which primary
  274. // language ID that sublanguage ID can be combined with to form a
  275. // valid language ID.
  276. //
  277. SUBLANG_NEUTRAL = $00; // language neutral
  278. {$EXTERNALSYM SUBLANG_NEUTRAL}
  279. SUBLANG_DEFAULT = $01; // user default
  280. {$EXTERNALSYM SUBLANG_DEFAULT}
  281. SUBLANG_SYS_DEFAULT = $02; // system default
  282. {$EXTERNALSYM SUBLANG_SYS_DEFAULT}
  283. SUBLANG_ARABIC_SAUDI_ARABIA = $01; // Arabic (Saudi Arabia)
  284. {$EXTERNALSYM SUBLANG_ARABIC_SAUDI_ARABIA}
  285. SUBLANG_ARABIC_IRAQ = $02; // Arabic (Iraq)
  286. {$EXTERNALSYM SUBLANG_ARABIC_IRAQ}
  287. SUBLANG_ARABIC_EGYPT = $03; // Arabic (Egypt)
  288. {$EXTERNALSYM SUBLANG_ARABIC_EGYPT}
  289. SUBLANG_ARABIC_LIBYA = $04; // Arabic (Libya)
  290. {$EXTERNALSYM SUBLANG_ARABIC_LIBYA}
  291. SUBLANG_ARABIC_ALGERIA = $05; // Arabic (Algeria)
  292. {$EXTERNALSYM SUBLANG_ARABIC_ALGERIA}
  293. SUBLANG_ARABIC_MOROCCO = $06; // Arabic (Morocco)
  294. {$EXTERNALSYM SUBLANG_ARABIC_MOROCCO}
  295. SUBLANG_ARABIC_TUNISIA = $07; // Arabic (Tunisia)
  296. {$EXTERNALSYM SUBLANG_ARABIC_TUNISIA}
  297. SUBLANG_ARABIC_OMAN = $08; // Arabic (Oman)
  298. {$EXTERNALSYM SUBLANG_ARABIC_OMAN}
  299. SUBLANG_ARABIC_YEMEN = $09; // Arabic (Yemen)
  300. {$EXTERNALSYM SUBLANG_ARABIC_YEMEN}
  301. SUBLANG_ARABIC_SYRIA = $0a; // Arabic (Syria)
  302. {$EXTERNALSYM SUBLANG_ARABIC_SYRIA}
  303. SUBLANG_ARABIC_JORDAN = $0b; // Arabic (Jordan)
  304. {$EXTERNALSYM SUBLANG_ARABIC_JORDAN}
  305. SUBLANG_ARABIC_LEBANON = $0c; // Arabic (Lebanon)
  306. {$EXTERNALSYM SUBLANG_ARABIC_LEBANON}
  307. SUBLANG_ARABIC_KUWAIT = $0d; // Arabic (Kuwait)
  308. {$EXTERNALSYM SUBLANG_ARABIC_KUWAIT}
  309. SUBLANG_ARABIC_UAE = $0e; // Arabic (U.A.E)
  310. {$EXTERNALSYM SUBLANG_ARABIC_UAE}
  311. SUBLANG_ARABIC_BAHRAIN = $0f; // Arabic (Bahrain)
  312. {$EXTERNALSYM SUBLANG_ARABIC_BAHRAIN}
  313. SUBLANG_ARABIC_QATAR = $10; // Arabic (Qatar)
  314. {$EXTERNALSYM SUBLANG_ARABIC_QATAR}
  315. SUBLANG_AZERI_LATIN = $01; // Azeri (Latin)
  316. {$EXTERNALSYM SUBLANG_AZERI_LATIN}
  317. SUBLANG_AZERI_CYRILLIC = $02; // Azeri (Cyrillic)
  318. {$EXTERNALSYM SUBLANG_AZERI_CYRILLIC}
  319. SUBLANG_CHINESE_TRADITIONAL = $01; // Chinese (Taiwan)
  320. {$EXTERNALSYM SUBLANG_CHINESE_TRADITIONAL}
  321. SUBLANG_CHINESE_SIMPLIFIED = $02; // Chinese (PR China)
  322. {$EXTERNALSYM SUBLANG_CHINESE_SIMPLIFIED}
  323. SUBLANG_CHINESE_HONGKONG = $03; // Chinese (Hong Kong S.A.R., P.R.C.)
  324. {$EXTERNALSYM SUBLANG_CHINESE_HONGKONG}
  325. SUBLANG_CHINESE_SINGAPORE = $04; // Chinese (Singapore)
  326. {$EXTERNALSYM SUBLANG_CHINESE_SINGAPORE}
  327. SUBLANG_CHINESE_MACAU = $05; // Chinese (Macau S.A.R.)
  328. {$EXTERNALSYM SUBLANG_CHINESE_MACAU}
  329. SUBLANG_DUTCH = $01; // Dutch
  330. {$EXTERNALSYM SUBLANG_DUTCH}
  331. SUBLANG_DUTCH_BELGIAN = $02; // Dutch (Belgian)
  332. {$EXTERNALSYM SUBLANG_DUTCH_BELGIAN}
  333. SUBLANG_ENGLISH_US = $01; // English (USA)
  334. {$EXTERNALSYM SUBLANG_ENGLISH_US}
  335. SUBLANG_ENGLISH_UK = $02; // English (UK)
  336. {$EXTERNALSYM SUBLANG_ENGLISH_UK}
  337. SUBLANG_ENGLISH_AUS = $03; // English (Australian)
  338. {$EXTERNALSYM SUBLANG_ENGLISH_AUS}
  339. SUBLANG_ENGLISH_CAN = $04; // English (Canadian)
  340. {$EXTERNALSYM SUBLANG_ENGLISH_CAN}
  341. SUBLANG_ENGLISH_NZ = $05; // English (New Zealand)
  342. {$EXTERNALSYM SUBLANG_ENGLISH_NZ}
  343. SUBLANG_ENGLISH_EIRE = $06; // English (Irish)
  344. {$EXTERNALSYM SUBLANG_ENGLISH_EIRE}
  345. SUBLANG_ENGLISH_SOUTH_AFRICA = $07; // English (South Africa)
  346. {$EXTERNALSYM SUBLANG_ENGLISH_SOUTH_AFRICA}
  347. SUBLANG_ENGLISH_JAMAICA = $08; // English (Jamaica)
  348. {$EXTERNALSYM SUBLANG_ENGLISH_JAMAICA}
  349. SUBLANG_ENGLISH_CARIBBEAN = $09; // English (Caribbean)
  350. {$EXTERNALSYM SUBLANG_ENGLISH_CARIBBEAN}
  351. SUBLANG_ENGLISH_BELIZE = $0a; // English (Belize)
  352. {$EXTERNALSYM SUBLANG_ENGLISH_BELIZE}
  353. SUBLANG_ENGLISH_TRINIDAD = $0b; // English (Trinidad)
  354. {$EXTERNALSYM SUBLANG_ENGLISH_TRINIDAD}
  355. SUBLANG_ENGLISH_ZIMBABWE = $0c; // English (Zimbabwe)
  356. {$EXTERNALSYM SUBLANG_ENGLISH_ZIMBABWE}
  357. SUBLANG_ENGLISH_PHILIPPINES = $0d; // English (Philippines)
  358. {$EXTERNALSYM SUBLANG_ENGLISH_PHILIPPINES}
  359. SUBLANG_FRENCH = $01; // French
  360. {$EXTERNALSYM SUBLANG_FRENCH}
  361. SUBLANG_FRENCH_BELGIAN = $02; // French (Belgian)
  362. {$EXTERNALSYM SUBLANG_FRENCH_BELGIAN}
  363. SUBLANG_FRENCH_CANADIAN = $03; // French (Canadian)
  364. {$EXTERNALSYM SUBLANG_FRENCH_CANADIAN}
  365. SUBLANG_FRENCH_SWISS = $04; // French (Swiss)
  366. {$EXTERNALSYM SUBLANG_FRENCH_SWISS}
  367. SUBLANG_FRENCH_LUXEMBOURG = $05; // French (Luxembourg)
  368. {$EXTERNALSYM SUBLANG_FRENCH_LUXEMBOURG}
  369. SUBLANG_FRENCH_MONACO = $06; // French (Monaco)
  370. {$EXTERNALSYM SUBLANG_FRENCH_MONACO}
  371. SUBLANG_GERMAN = $01; // German
  372. {$EXTERNALSYM SUBLANG_GERMAN}
  373. SUBLANG_GERMAN_SWISS = $02; // German (Swiss)
  374. {$EXTERNALSYM SUBLANG_GERMAN_SWISS}
  375. SUBLANG_GERMAN_AUSTRIAN = $03; // German (Austrian)
  376. {$EXTERNALSYM SUBLANG_GERMAN_AUSTRIAN}
  377. SUBLANG_GERMAN_LUXEMBOURG = $04; // German (Luxembourg)
  378. {$EXTERNALSYM SUBLANG_GERMAN_LUXEMBOURG}
  379. SUBLANG_GERMAN_LIECHTENSTEIN = $05; // German (Liechtenstein)
  380. {$EXTERNALSYM SUBLANG_GERMAN_LIECHTENSTEIN}
  381. SUBLANG_ITALIAN = $01; // Italian
  382. {$EXTERNALSYM SUBLANG_ITALIAN}
  383. SUBLANG_ITALIAN_SWISS = $02; // Italian (Swiss)
  384. {$EXTERNALSYM SUBLANG_ITALIAN_SWISS}
  385. SUBLANG_KASHMIRI_SASIA = $02; // Kashmiri (South Asia)
  386. {$EXTERNALSYM SUBLANG_KASHMIRI_SASIA}
  387. SUBLANG_KASHMIRI_INDIA = $02; // For app compatibility only
  388. {$EXTERNALSYM SUBLANG_KASHMIRI_INDIA}
  389. SUBLANG_KOREAN = $01; // Korean (Extended Wansung)
  390. {$EXTERNALSYM SUBLANG_KOREAN}
  391. SUBLANG_LITHUANIAN = $01; // Lithuanian
  392. {$EXTERNALSYM SUBLANG_LITHUANIAN}
  393. SUBLANG_MALAY_MALAYSIA = $01; // Malay (Malaysia)
  394. {$EXTERNALSYM SUBLANG_MALAY_MALAYSIA}
  395. SUBLANG_MALAY_BRUNEI_DARUSSALAM = $02; // Malay (Brunei Darussalam)
  396. {$EXTERNALSYM SUBLANG_MALAY_BRUNEI_DARUSSALAM}
  397. SUBLANG_NEPALI_INDIA = $02; // Nepali (India)
  398. {$EXTERNALSYM SUBLANG_NEPALI_INDIA}
  399. SUBLANG_NORWEGIAN_BOKMAL = $01; // Norwegian (Bokmal)
  400. {$EXTERNALSYM SUBLANG_NORWEGIAN_BOKMAL}
  401. SUBLANG_NORWEGIAN_NYNORSK = $02; // Norwegian (Nynorsk)
  402. {$EXTERNALSYM SUBLANG_NORWEGIAN_NYNORSK}
  403. SUBLANG_PORTUGUESE = $02; // Portuguese
  404. {$EXTERNALSYM SUBLANG_PORTUGUESE}
  405. SUBLANG_PORTUGUESE_BRAZILIAN = $01; // Portuguese (Brazilian)
  406. {$EXTERNALSYM SUBLANG_PORTUGUESE_BRAZILIAN}
  407. SUBLANG_SERBIAN_LATIN = $02; // Serbian (Latin)
  408. {$EXTERNALSYM SUBLANG_SERBIAN_LATIN}
  409. SUBLANG_SERBIAN_CYRILLIC = $03; // Serbian (Cyrillic)
  410. {$EXTERNALSYM SUBLANG_SERBIAN_CYRILLIC}
  411. SUBLANG_SPANISH = $01; // Spanish (Castilian)
  412. {$EXTERNALSYM SUBLANG_SPANISH}
  413. SUBLANG_SPANISH_MEXICAN = $02; // Spanish (Mexican)
  414. {$EXTERNALSYM SUBLANG_SPANISH_MEXICAN}
  415. SUBLANG_SPANISH_MODERN = $03; // Spanish (Spain)
  416. {$EXTERNALSYM SUBLANG_SPANISH_MODERN}
  417. SUBLANG_SPANISH_GUATEMALA = $04; // Spanish (Guatemala)
  418. {$EXTERNALSYM SUBLANG_SPANISH_GUATEMALA}
  419. SUBLANG_SPANISH_COSTA_RICA = $05; // Spanish (Costa Rica)
  420. {$EXTERNALSYM SUBLANG_SPANISH_COSTA_RICA}
  421. SUBLANG_SPANISH_PANAMA = $06; // Spanish (Panama)
  422. {$EXTERNALSYM SUBLANG_SPANISH_PANAMA}
  423. SUBLANG_SPANISH_DOMINICAN_REPUBLIC = $07; // Spanish (Dominican Republic)
  424. {$EXTERNALSYM SUBLANG_SPANISH_DOMINICAN_REPUBLIC}
  425. SUBLANG_SPANISH_VENEZUELA = $08; // Spanish (Venezuela)
  426. {$EXTERNALSYM SUBLANG_SPANISH_VENEZUELA}
  427. SUBLANG_SPANISH_COLOMBIA = $09; // Spanish (Colombia)
  428. {$EXTERNALSYM SUBLANG_SPANISH_COLOMBIA}
  429. SUBLANG_SPANISH_PERU = $0a; // Spanish (Peru)
  430. {$EXTERNALSYM SUBLANG_SPANISH_PERU}
  431. SUBLANG_SPANISH_ARGENTINA = $0b; // Spanish (Argentina)
  432. {$EXTERNALSYM SUBLANG_SPANISH_ARGENTINA}
  433. SUBLANG_SPANISH_ECUADOR = $0c; // Spanish (Ecuador)
  434. {$EXTERNALSYM SUBLANG_SPANISH_ECUADOR}
  435. SUBLANG_SPANISH_CHILE = $0d; // Spanish (Chile)
  436. {$EXTERNALSYM SUBLANG_SPANISH_CHILE}
  437. SUBLANG_SPANISH_URUGUAY = $0e; // Spanish (Uruguay)
  438. {$EXTERNALSYM SUBLANG_SPANISH_URUGUAY}
  439. SUBLANG_SPANISH_PARAGUAY = $0f; // Spanish (Paraguay)
  440. {$EXTERNALSYM SUBLANG_SPANISH_PARAGUAY}
  441. SUBLANG_SPANISH_BOLIVIA = $10; // Spanish (Bolivia)
  442. {$EXTERNALSYM SUBLANG_SPANISH_BOLIVIA}
  443. SUBLANG_SPANISH_EL_SALVADOR = $11; // Spanish (El Salvador)
  444. {$EXTERNALSYM SUBLANG_SPANISH_EL_SALVADOR}
  445. SUBLANG_SPANISH_HONDURAS = $12; // Spanish (Honduras)
  446. {$EXTERNALSYM SUBLANG_SPANISH_HONDURAS}
  447. SUBLANG_SPANISH_NICARAGUA = $13; // Spanish (Nicaragua)
  448. {$EXTERNALSYM SUBLANG_SPANISH_NICARAGUA}
  449. SUBLANG_SPANISH_PUERTO_RICO = $14; // Spanish (Puerto Rico)
  450. {$EXTERNALSYM SUBLANG_SPANISH_PUERTO_RICO}
  451. SUBLANG_SWEDISH = $01; // Swedish
  452. {$EXTERNALSYM SUBLANG_SWEDISH}
  453. SUBLANG_SWEDISH_FINLAND = $02; // Swedish (Finland)
  454. {$EXTERNALSYM SUBLANG_SWEDISH_FINLAND}
  455. SUBLANG_URDU_PAKISTAN = $01; // Urdu (Pakistan)
  456. {$EXTERNALSYM SUBLANG_URDU_PAKISTAN}
  457. SUBLANG_URDU_INDIA = $02; // Urdu (India)
  458. {$EXTERNALSYM SUBLANG_URDU_INDIA}
  459. SUBLANG_UZBEK_LATIN = $01; // Uzbek (Latin)
  460. {$EXTERNALSYM SUBLANG_UZBEK_LATIN}
  461. SUBLANG_UZBEK_CYRILLIC = $02; // Uzbek (Cyrillic)
  462. {$EXTERNALSYM SUBLANG_UZBEK_CYRILLIC}
  463. //
  464. // Sorting IDs.
  465. //
  466. SORT_DEFAULT = $0; // sorting default
  467. {$EXTERNALSYM SORT_DEFAULT}
  468. SORT_JAPANESE_XJIS = $0; // Japanese XJIS order
  469. {$EXTERNALSYM SORT_JAPANESE_XJIS}
  470. SORT_JAPANESE_UNICODE = $1; // Japanese Unicode order
  471. {$EXTERNALSYM SORT_JAPANESE_UNICODE}
  472. SORT_CHINESE_BIG5 = $0; // Chinese BIG5 order
  473. {$EXTERNALSYM SORT_CHINESE_BIG5}
  474. SORT_CHINESE_PRCP = $0; // PRC Chinese Phonetic order
  475. {$EXTERNALSYM SORT_CHINESE_PRCP}
  476. SORT_CHINESE_UNICODE = $1; // Chinese Unicode order
  477. {$EXTERNALSYM SORT_CHINESE_UNICODE}
  478. SORT_CHINESE_PRC = $2; // PRC Chinese Stroke Count order
  479. {$EXTERNALSYM SORT_CHINESE_PRC}
  480. SORT_CHINESE_BOPOMOFO = $3; // Traditional Chinese Bopomofo order
  481. {$EXTERNALSYM SORT_CHINESE_BOPOMOFO}
  482. SORT_KOREAN_KSC = $0; // Korean KSC order
  483. {$EXTERNALSYM SORT_KOREAN_KSC}
  484. SORT_KOREAN_UNICODE = $1; // Korean Unicode order
  485. {$EXTERNALSYM SORT_KOREAN_UNICODE}
  486. SORT_GERMAN_PHONE_BOOK = $1; // German Phone Book order
  487. {$EXTERNALSYM SORT_GERMAN_PHONE_BOOK}
  488. SORT_HUNGARIAN_DEFAULT = $0; // Hungarian Default order
  489. {$EXTERNALSYM SORT_HUNGARIAN_DEFAULT}
  490. SORT_HUNGARIAN_TECHNICAL = $1; // Hungarian Technical order
  491. {$EXTERNALSYM SORT_HUNGARIAN_TECHNICAL}
  492. SORT_GEORGIAN_TRADITIONAL = $0; // Georgian Traditional order
  493. {$EXTERNALSYM SORT_GEORGIAN_TRADITIONAL}
  494. SORT_GEORGIAN_MODERN = $1; // Georgian Modern order
  495. {$EXTERNALSYM SORT_GEORGIAN_MODERN}
  496. //
  497. // A language ID is a 16 bit value which is the combination of a
  498. // primary language ID and a secondary language ID. The bits are
  499. // allocated as follows:
  500. //
  501. // +-----------------------+-------------------------+
  502. // | Sublanguage ID | Primary Language ID |
  503. // +-----------------------+-------------------------+
  504. // 15 10 9 0 bit
  505. //
  506. //
  507. // Language ID creation/extraction macros:
  508. //
  509. // MAKELANGID - construct language id from a primary language id and
  510. // a sublanguage id.
  511. // PRIMARYLANGID - extract primary language id from a language id.
  512. // SUBLANGID - extract sublanguage id from a language id.
  513. //
  514. function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
  515. {$EXTERNALSYM MAKELANGID}
  516. function PRIMARYLANGID(LangId: WORD): WORD;
  517. {$EXTERNALSYM PRIMARYLANGID}
  518. function SUBLANGID(LangId: WORD): WORD;
  519. {$EXTERNALSYM SUBLANGID}
  520. //
  521. // A locale ID is a 32 bit value which is the combination of a
  522. // language ID, a sort ID, and a reserved area. The bits are
  523. // allocated as follows:
  524. //
  525. // +-------------+---------+-------------------------+
  526. // | Reserved | Sort ID | Language ID |
  527. // +-------------+---------+-------------------------+
  528. // 31 20 19 16 15 0 bit
  529. //
  530. //
  531. // Locale ID creation/extraction macros:
  532. //
  533. // MAKELCID - construct the locale id from a language id and a sort id.
  534. // MAKESORTLCID - construct the locale id from a language id, sort id, and sort version.
  535. // LANGIDFROMLCID - extract the language id from a locale id.
  536. // SORTIDFROMLCID - extract the sort id from a locale id.
  537. // SORTVERSIONFROMLCID - extract the sort version from a locale id.
  538. //
  539. const
  540. NLS_VALID_LOCALE_MASK = $000fffff;
  541. {$EXTERNALSYM NLS_VALID_LOCALE_MASK}
  542. function MAKELCID(LangId, SortId: WORD): DWORD;
  543. {$EXTERNALSYM MAKELCID}
  544. function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
  545. {$EXTERNALSYM MAKESORTLCID}
  546. function LANGIDFROMLCID(LocaleId: LCID): WORD;
  547. {$EXTERNALSYM LANGIDFROMLCID}
  548. function SORTIDFROMLCID(LocaleId: LCID): WORD;
  549. {$EXTERNALSYM SORTIDFROMLCID}
  550. function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
  551. {$EXTERNALSYM SORTVERSIONFROMLCID}
  552. //
  553. // Default System and User IDs for language and locale.
  554. //
  555. function LANG_SYSTEM_DEFAULT: WORD;
  556. {$EXTERNALSYM LANG_SYSTEM_DEFAULT}
  557. function LANG_USER_DEFAULT: WORD;
  558. {$EXTERNALSYM LANG_USER_DEFAULT}
  559. function LOCALE_SYSTEM_DEFAULT: DWORD;
  560. {$EXTERNALSYM LOCALE_SYSTEM_DEFAULT}
  561. function LOCALE_USER_DEFAULT: DWORD;
  562. {$EXTERNALSYM LOCALE_USER_DEFAULT}
  563. function LOCALE_NEUTRAL: DWORD;
  564. {$EXTERNALSYM LOCALE_NEUTRAL}
  565. function LOCALE_INVARIANT: DWORD;
  566. {$EXTERNALSYM LOCALE_NEUTRAL}
  567. const
  568. // (rom) deleted status codes already in JwaWinStatus.pas
  569. DBG_COMMAND_EXCEPTION = DWORD($40010009);
  570. {$EXTERNALSYM DBG_COMMAND_EXCEPTION}
  571. STATUS_SXS_EARLY_DEACTIVATION = DWORD($C015000F);
  572. {$EXTERNALSYM STATUS_SXS_EARLY_DEACTIVATION}
  573. STATUS_SXS_INVALID_DEACTIVATION = DWORD($C0150010);
  574. {$EXTERNALSYM STATUS_SXS_INVALID_DEACTIVATION}
  575. const
  576. MAXIMUM_WAIT_OBJECTS = 64; // Maximum number of wait objects
  577. {$EXTERNALSYM MAXIMUM_WAIT_OBJECTS}
  578. MAXIMUM_SUSPEND_COUNT = MAXCHAR; // Maximum times thread can be suspended
  579. {$EXTERNALSYM MAXIMUM_SUSPEND_COUNT}
  580. type
  581. KSPIN_LOCK = ULONG_PTR;
  582. {$EXTERNALSYM KSPIN_LOCK}
  583. PKSPIN_LOCK = ^KSPIN_LOCK;
  584. {$EXTERNALSYM PKSPIN_LOCK}
  585. //
  586. // Define functions to get the address of the current fiber and the
  587. // current fiber data.
  588. //
  589. //
  590. // Disable these two pramas that evaluate to "sti" "cli" on x86 so that driver
  591. // writers to not leave them inadvertantly in their code.
  592. //
  593. function GetFiberData: PVOID;
  594. {$EXTERNALSYM GetFiberData}
  595. function GetCurrentFiber: PVOID;
  596. {$EXTERNALSYM GetCurrentFiber}
  597. //
  598. // Define the size of the 80387 save area, which is in the context frame.
  599. //
  600. const
  601. SIZE_OF_80387_REGISTERS = 80;
  602. {$EXTERNALSYM SIZE_OF_80387_REGISTERS}
  603. //
  604. // The following flags control the contents of the CONTEXT structure.
  605. //
  606. const
  607. CONTEXT_i386 = $00010000; // this assumes that i386 and
  608. {$EXTERNALSYM CONTEXT_i386}
  609. CONTEXT_i486 = $00010000; // i486 have identical context records
  610. {$EXTERNALSYM CONTEXT_i486}
  611. const
  612. CONTEXT_CONTROL = CONTEXT_i386 or $00000001; // SS:SP, CS:IP, FLAGS, BP
  613. {$EXTERNALSYM CONTEXT_CONTROL}
  614. CONTEXT_INTEGER = CONTEXT_i386 or $00000002; // AX, BX, CX, DX, SI, DI
  615. {$EXTERNALSYM CONTEXT_INTEGER}
  616. CONTEXT_SEGMENTS = CONTEXT_i386 or $00000004; // DS, ES, FS, GS
  617. {$EXTERNALSYM CONTEXT_SEGMENTS}
  618. CONTEXT_FLOATING_POINT = CONTEXT_i386 or $00000008; // 387 state
  619. {$EXTERNALSYM CONTEXT_FLOATING_POINT}
  620. CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 or $00000010; // DB 0-3,6,7
  621. {$EXTERNALSYM CONTEXT_DEBUG_REGISTERS}
  622. CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 or $00000020; // cpu specific extensions
  623. {$EXTERNALSYM CONTEXT_EXTENDED_REGISTERS}
  624. CONTEXT_FULL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS;
  625. {$EXTERNALSYM CONTEXT_FULL}
  626. CONTEXT_ALL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS or CONTEXT_FLOATING_POINT or CONTEXT_DEBUG_REGISTERS;
  627. {$EXTERNALSYM CONTEXT_ALL}
  628. //
  629. // Define initial MxCsr control.
  630. //
  631. INITIAL_MXCSR = $1f80; // initial MXCSR value
  632. {$EXTERNALSYM INITIAL_MXCSR}
  633. MAXIMUM_SUPPORTED_EXTENSION = 512;
  634. {$EXTERNALSYM MAXIMUM_SUPPORTED_EXTENSION}
  635. type
  636. PFLOATING_SAVE_AREA = ^FLOATING_SAVE_AREA;
  637. {$EXTERNALSYM PFLOATING_SAVE_AREA}
  638. _FLOATING_SAVE_AREA = record
  639. ControlWord: DWORD;
  640. StatusWord: DWORD;
  641. TagWord: DWORD;
  642. ErrorOffset: DWORD;
  643. ErrorSelector: DWORD;
  644. DataOffset: DWORD;
  645. DataSelector: DWORD;
  646. RegisterArea: array [0..SIZE_OF_80387_REGISTERS - 1] of BYTE;
  647. Cr0NpxState: DWORD;
  648. end;
  649. {$EXTERNALSYM _FLOATING_SAVE_AREA}
  650. FLOATING_SAVE_AREA = _FLOATING_SAVE_AREA;
  651. {$EXTERNALSYM FLOATING_SAVE_AREA}
  652. TFloatingSaveArea = FLOATING_SAVE_AREA;
  653. PFloatingSaveArea = PFLOATING_SAVE_AREA;
  654. //
  655. // Context Frame
  656. //
  657. // This frame has a several purposes: 1) it is used as an argument to
  658. // NtContinue, 2) is is used to constuct a call frame for APC delivery,
  659. // and 3) it is used in the user level thread creation routines.
  660. //
  661. // The layout of the record conforms to a standard call frame.
  662. //
  663. type
  664. PContext = ^CONTEXT;
  665. _CONTEXT = record
  666. //
  667. // The flags values within this flag control the contents of
  668. // a CONTEXT record.
  669. //
  670. // If the context record is used as an input parameter, then
  671. // for each portion of the context record controlled by a flag
  672. // whose value is set, it is assumed that that portion of the
  673. // context record contains valid context. If the context record
  674. // is being used to modify a threads context, then only that
  675. // portion of the threads context will be modified.
  676. //
  677. // If the context record is used as an IN OUT parameter to capture
  678. // the context of a thread, then only those portions of the thread's
  679. // context corresponding to set flags will be returned.
  680. //
  681. // The context record is never used as an OUT only parameter.
  682. //
  683. ContextFlags: DWORD;
  684. //
  685. // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
  686. // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT
  687. // included in CONTEXT_FULL.
  688. //
  689. Dr0: DWORD;
  690. Dr1: DWORD;
  691. Dr2: DWORD;
  692. Dr3: DWORD;
  693. Dr6: DWORD;
  694. Dr7: DWORD;
  695. //
  696. // This section is specified/returned if the
  697. // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
  698. //
  699. FloatSave: FLOATING_SAVE_AREA;
  700. //
  701. // This section is specified/returned if the
  702. // ContextFlags word contians the flag CONTEXT_SEGMENTS.
  703. //
  704. SegGs: DWORD;
  705. SegFs: DWORD;
  706. SegEs: DWORD;
  707. SegDs: DWORD;
  708. //
  709. // This section is specified/returned if the
  710. // ContextFlags word contians the flag CONTEXT_INTEGER.
  711. //
  712. Edi: DWORD;
  713. Esi: DWORD;
  714. Ebx: DWORD;
  715. Edx: DWORD;
  716. Ecx: DWORD;
  717. Eax: DWORD;
  718. //
  719. // This section is specified/returned if the
  720. // ContextFlags word contians the flag CONTEXT_CONTROL.
  721. //
  722. Ebp: DWORD;
  723. Eip: DWORD;
  724. SegCs: DWORD; // MUST BE SANITIZED
  725. EFlags: DWORD; // MUST BE SANITIZED
  726. Esp: DWORD;
  727. SegSs: DWORD;
  728. //
  729. // This section is specified/returned if the ContextFlags word
  730. // contains the flag CONTEXT_EXTENDED_REGISTERS.
  731. // The format and contexts are processor specific
  732. //
  733. ExtendedRegisters: array [0..MAXIMUM_SUPPORTED_EXTENSION - 1] of BYTE;
  734. end;
  735. {$EXTERNALSYM _CONTEXT}
  736. CONTEXT = _CONTEXT;
  737. {$EXTERNALSYM CONTEXT}
  738. TContext = CONTEXT;
  739. const
  740. LDTENTRY_FLAGS1_TYPE = $1F;
  741. LDTENTRY_FLAGS1_DPL = $60;
  742. LDTENTRY_FLAGS1_PRES = $80;
  743. LDTENTRY_FLAGS2_LIMITHI = $0F;
  744. LDTENTRY_FLAGS2_SYS = $10;
  745. LDTENTRY_FLAGS2_RESERVED_0 = $20;
  746. LDTENTRY_FLAGS2_DEFAULT_BIG = $40;
  747. LDTENTRY_FLAGS2_GRANULARITY = $80;
  748. type
  749. PLDT_ENTRY = ^LDT_ENTRY;
  750. {$EXTERNALSYM PLDT_ENTRY}
  751. _LDT_ENTRY = record
  752. LimitLow: WORD;
  753. BaseLow: WORD;
  754. BaseMid: BYTE;
  755. Flags1: BYTE; // Declare as bytes to avoid alignment
  756. Flags2: BYTE; // Problems.
  757. BaseHi: BYTE;
  758. end;
  759. {$EXTERNALSYM _LDT_ENTRY}
  760. LDT_ENTRY = _LDT_ENTRY;
  761. {$EXTERNALSYM LDT_ENTRY}
  762. TLdtEntry = LDT_ENTRY;
  763. PLdtEntry = PLDT_ENTRY;
  764. // Please contact INTEL to get IA64-specific information
  765. const
  766. EXCEPTION_NONCONTINUABLE = $1; // Noncontinuable exception
  767. {$EXTERNALSYM EXCEPTION_NONCONTINUABLE}
  768. EXCEPTION_MAXIMUM_PARAMETERS = 15; // maximum number of exception parameters
  769. {$EXTERNALSYM EXCEPTION_MAXIMUM_PARAMETERS}
  770. //
  771. // Exception record definition.
  772. //
  773. type
  774. PEXCEPTION_RECORD = ^EXCEPTION_RECORD;
  775. {$EXTERNALSYM PEXCEPTION_RECORD}
  776. _EXCEPTION_RECORD = record
  777. ExceptionCode: DWORD;
  778. ExceptionFlags: DWORD;
  779. ExceptionRecord: PEXCEPTION_RECORD;
  780. ExceptionAddress: Pointer;
  781. NumberParameters: DWORD;
  782. ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of ULONG_PTR;
  783. end;
  784. {$EXTERNALSYM _EXCEPTION_RECORD}
  785. EXCEPTION_RECORD = _EXCEPTION_RECORD;
  786. {$EXTERNALSYM EXCEPTION_RECORD}
  787. TExceptionRecord = EXCEPTION_RECORD;
  788. PExceptionRecord = PEXCEPTION_RECORD;
  789. PEXCEPTION_RECORD32 = ^EXCEPTION_RECORD32;
  790. {$EXTERNALSYM PEXCEPTION_RECORD32}
  791. _EXCEPTION_RECORD32 = record
  792. ExceptionCode: DWORD;
  793. ExceptionFlags: DWORD;
  794. ExceptionRecord: DWORD;
  795. ExceptionAddress: DWORD;
  796. NumberParameters: DWORD;
  797. ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of DWORD;
  798. end;
  799. {$EXTERNALSYM _EXCEPTION_RECORD32}
  800. EXCEPTION_RECORD32 = _EXCEPTION_RECORD32;
  801. {$EXTERNALSYM EXCEPTION_RECORD32}
  802. TExceptionRecord32 = EXCEPTION_RECORD32;
  803. PExceptionRecord32 = PEXCEPTION_RECORD32;
  804. PEXCEPTION_RECORD64 = ^EXCEPTION_RECORD64;
  805. {$EXTERNALSYM PEXCEPTION_RECORD64}
  806. _EXCEPTION_RECORD64 = record
  807. ExceptionCode: DWORD;
  808. ExceptionFlags: DWORD;
  809. ExceptionRecord: DWORD64;
  810. ExceptionAddress: DWORD64;
  811. NumberParameters: DWORD;
  812. __unusedAlignment: DWORD;
  813. ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of DWORD64;
  814. end;
  815. {$EXTERNALSYM _EXCEPTION_RECORD64}
  816. EXCEPTION_RECORD64 = _EXCEPTION_RECORD64;
  817. {$EXTERNALSYM EXCEPTION_RECORD64}
  818. TExceptionRecord64 = EXCEPTION_RECORD64;
  819. PExceptionRecord64 = PEXCEPTION_RECORD64;
  820. //
  821. // Typedef for pointer returned by exception_info()
  822. //
  823. PEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
  824. {$EXTERNALSYM PEXCEPTION_POINTERS}
  825. _EXCEPTION_POINTERS = record
  826. ExceptionRecord: PEXCEPTION_RECORD;
  827. ContextRecord: PCONTEXT;
  828. end;
  829. {$EXTERNALSYM _EXCEPTION_POINTERS}
  830. EXCEPTION_POINTERS = _EXCEPTION_POINTERS;
  831. {$EXTERNALSYM EXCEPTION_POINTERS}
  832. TExceptionPointers = EXCEPTION_POINTERS;
  833. PExceptionPointers = ^TExceptionPointers;
  834. PACCESS_TOKEN = Pointer;
  835. {$EXTERNALSYM PACCESS_TOKEN}
  836. ////////////////////////////////////////////////////////////////////////
  837. // //
  838. // ACCESS MASK //
  839. // //
  840. ////////////////////////////////////////////////////////////////////////
  841. //
  842. // Define the access mask as a longword sized structure divided up as
  843. // follows:
  844. //
  845. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  846. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  847. // +---------------+---------------+-------------------------------+
  848. // |G|G|G|G|Res'd|A| StandardRights| SpecificRights |
  849. // |R|W|E|A| |S| | |
  850. // +-+-------------+---------------+-------------------------------+
  851. //
  852. // typedef struct _ACCESS_MASK {
  853. // WORD SpecificRights;
  854. // BYTE StandardRights;
  855. // BYTE AccessSystemAcl : 1;
  856. // BYTE Reserved : 3;
  857. // BYTE GenericAll : 1;
  858. // BYTE GenericExecute : 1;
  859. // BYTE GenericWrite : 1;
  860. // BYTE GenericRead : 1;
  861. // } ACCESS_MASK;
  862. // typedef ACCESS_MASK *PACCESS_MASK;
  863. //
  864. // but to make life simple for programmer's we'll allow them to specify
  865. // a desired access mask by simply OR'ing together mulitple single rights
  866. // and treat an access mask as a DWORD. For example
  867. //
  868. // DesiredAccess = DELETE | READ_CONTROL
  869. //
  870. // So we'll declare ACCESS_MASK as DWORD
  871. //
  872. type
  873. ACCESS_MASK = DWORD;
  874. {$EXTERNALSYM ACCESS_MASK}
  875. PACCESS_MASK = ^ACCESS_MASK;
  876. {$EXTERNALSYM PACCESS_MASK}
  877. TAccessMask = ACCESS_MASK;
  878. PAccessMask = PACCESS_MASK;
  879. ////////////////////////////////////////////////////////////////////////
  880. // //
  881. // ACCESS TYPES //
  882. // //
  883. ////////////////////////////////////////////////////////////////////////
  884. //
  885. // The following are masks for the predefined standard access types
  886. //
  887. const
  888. DELETE = $00010000;
  889. {$EXTERNALSYM DELETE}
  890. READ_CONTROL = $00020000;
  891. {$EXTERNALSYM READ_CONTROL}
  892. WRITE_DAC = $00040000;
  893. {$EXTERNALSYM WRITE_DAC}
  894. WRITE_OWNER = $00080000;
  895. {$EXTERNALSYM WRITE_OWNER}
  896. SYNCHRONIZE = $00100000;
  897. {$EXTERNALSYM SYNCHRONIZE}
  898. STANDARD_RIGHTS_REQUIRED = $000F0000;
  899. {$EXTERNALSYM STANDARD_RIGHTS_REQUIRED}
  900. STANDARD_RIGHTS_READ = READ_CONTROL;
  901. {$EXTERNALSYM STANDARD_RIGHTS_READ}
  902. STANDARD_RIGHTS_WRITE = READ_CONTROL;
  903. {$EXTERNALSYM STANDARD_RIGHTS_WRITE}
  904. STANDARD_RIGHTS_EXECUTE = READ_CONTROL;
  905. {$EXTERNALSYM STANDARD_RIGHTS_EXECUTE}
  906. STANDARD_RIGHTS_ALL = $001F0000;
  907. {$EXTERNALSYM STANDARD_RIGHTS_ALL}
  908. SPECIFIC_RIGHTS_ALL = $0000FFFF;
  909. {$EXTERNALSYM SPECIFIC_RIGHTS_ALL}
  910. //
  911. // AccessSystemAcl access type
  912. //
  913. ACCESS_SYSTEM_SECURITY = $01000000;
  914. {$EXTERNALSYM ACCESS_SYSTEM_SECURITY}
  915. //
  916. // MaximumAllowed access type
  917. //
  918. MAXIMUM_ALLOWED = $02000000;
  919. {$EXTERNALSYM MAXIMUM_ALLOWED}
  920. //
  921. // These are the generic rights.
  922. //
  923. GENERIC_READ = DWORD($80000000);
  924. {$EXTERNALSYM GENERIC_READ}
  925. GENERIC_WRITE = $40000000;
  926. {$EXTERNALSYM GENERIC_WRITE}
  927. GENERIC_EXECUTE = $20000000;
  928. {$EXTERNALSYM GENERIC_EXECUTE}
  929. GENERIC_ALL = $10000000;
  930. {$EXTERNALSYM GENERIC_ALL}
  931. //
  932. // Define the generic mapping array. This is used to denote the
  933. // mapping of each generic access right to a specific access mask.
  934. //
  935. type
  936. PGENERIC_MAPPING = ^GENERIC_MAPPING;
  937. {$EXTERNALSYM PGENERIC_MAPPING}
  938. _GENERIC_MAPPING = record
  939. GenericRead: ACCESS_MASK;
  940. GenericWrite: ACCESS_MASK;
  941. GenericExecute: ACCESS_MASK;
  942. GenericAll: ACCESS_MASK;
  943. end;
  944. {$EXTERNALSYM _GENERIC_MAPPING}
  945. GENERIC_MAPPING = _GENERIC_MAPPING;
  946. {$EXTERNALSYM GENERIC_MAPPING}
  947. TGenericMapping = GENERIC_MAPPING;
  948. PGenericMapping = PGENERIC_MAPPING;
  949. ////////////////////////////////////////////////////////////////////////
  950. // //
  951. // LUID_AND_ATTRIBUTES //
  952. // //
  953. ////////////////////////////////////////////////////////////////////////
  954. //
  955. //
  956. //#include <pshpack4.h>
  957. PLUID_AND_ATTRIBUTES = ^LUID_AND_ATTRIBUTES;
  958. {$EXTERNALSYM PLUID_AND_ATTRIBUTES}
  959. _LUID_AND_ATTRIBUTES = record
  960. Luid: LUID;
  961. Attributes: DWORD;
  962. end;
  963. {$EXTERNALSYM _LUID_AND_ATTRIBUTES}
  964. LUID_AND_ATTRIBUTES = _LUID_AND_ATTRIBUTES;
  965. {$EXTERNALSYM LUID_AND_ATTRIBUTES}
  966. TLuidAndAttributes = LUID_AND_ATTRIBUTES;
  967. PLuidAndAttributes = PLUID_AND_ATTRIBUTES;
  968. LUID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
  969. {$EXTERNALSYM LUID_AND_ATTRIBUTES_ARRAY}
  970. PLUID_AND_ATTRIBUTES_ARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
  971. {$EXTERNALSYM PLUID_AND_ATTRIBUTES_ARRAY}
  972. TLuidAndAttributesArray = LUID_AND_ATTRIBUTES_ARRAY;
  973. PLuidAndAttributesArray = ^TLuidAndAttributesArray;
  974. //#include <poppack.h>
  975. ////////////////////////////////////////////////////////////////////////
  976. // //
  977. // Security Id (SID) //
  978. // //
  979. ////////////////////////////////////////////////////////////////////////
  980. //
  981. //
  982. // Pictorially the structure of an SID is as follows:
  983. //
  984. // 1 1 1 1 1 1
  985. // 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  986. // +---------------------------------------------------------------+
  987. // | SubAuthorityCount |Reserved1 (SBZ)| Revision |
  988. // +---------------------------------------------------------------+
  989. // | IdentifierAuthority[0] |
  990. // +---------------------------------------------------------------+
  991. // | IdentifierAuthority[1] |
  992. // +---------------------------------------------------------------+
  993. // | IdentifierAuthority[2] |
  994. // +---------------------------------------------------------------+
  995. // | |
  996. // +- - - - - - - - SubAuthority[] - - - - - - - - -+
  997. // | |
  998. // +---------------------------------------------------------------+
  999. //
  1000. //
  1001. type
  1002. PSID_IDENTIFIER_AUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
  1003. {$EXTERNALSYM PSID_IDENTIFIER_AUTHORITY}
  1004. _SID_IDENTIFIER_AUTHORITY = record
  1005. Value: array [0..5] of Byte;
  1006. end;
  1007. {$EXTERNALSYM _SID_IDENTIFIER_AUTHORITY}
  1008. SID_IDENTIFIER_AUTHORITY = _SID_IDENTIFIER_AUTHORITY;
  1009. {$EXTERNALSYM SID_IDENTIFIER_AUTHORITY}
  1010. TSidIdentifierAuthority = SID_IDENTIFIER_AUTHORITY;
  1011. PSidIdentifierAuthority = PSID_IDENTIFIER_AUTHORITY;
  1012. PSid = ^SID;
  1013. _SID = record
  1014. Revision: Byte;
  1015. SubAuthorityCount: Byte;
  1016. IdentifierAuthority: SID_IDENTIFIER_AUTHORITY;
  1017. SubAuthority: array [0..ANYSIZE_ARRAY - 1] of DWORD;
  1018. end;
  1019. {$EXTERNALSYM _SID}
  1020. SID = _SID;
  1021. {$EXTERNALSYM SID}
  1022. PPSID = ^PSID;
  1023. {$NODEFINE PPSID}
  1024. TSid = SID;
  1025. const
  1026. SID_REVISION = 1; // Current revision level
  1027. {$EXTERNALSYM SID_REVISION}
  1028. SID_MAX_SUB_AUTHORITIES = 15;
  1029. {$EXTERNALSYM SID_MAX_SUB_AUTHORITIES}
  1030. SID_RECOMMENDED_SUB_AUTHORITIES = 1; // Will change to around 6 in a future release.
  1031. {$EXTERNALSYM SID_RECOMMENDED_SUB_AUTHORITIES}
  1032. SECURITY_MAX_SID_SIZE = SizeOf(SID) - SizeOf(DWORD) + (SID_MAX_SUB_AUTHORITIES * SizeOf(DWORD));
  1033. {$EXTERNALSYM SECURITY_MAX_SID_SIZE}
  1034. SidTypeUser = 1;
  1035. {$EXTERNALSYM SidTypeUser}
  1036. SidTypeGroup = 2;
  1037. {$EXTERNALSYM SidTypeGroup}
  1038. SidTypeDomain = 3;
  1039. {$EXTERNALSYM SidTypeDomain}
  1040. SidTypeAlias = 4;
  1041. {$EXTERNALSYM SidTypeAlias}
  1042. SidTypeWellKnownGroup = 5;
  1043. {$EXTERNALSYM SidTypeWellKnownGroup}
  1044. SidTypeDeletedAccount = 6;
  1045. {$EXTERNALSYM SidTypeDeletedAccount}
  1046. SidTypeInvalid = 7;
  1047. {$EXTERNALSYM SidTypeInvalid}
  1048. SidTypeUnknown = 8;
  1049. {$EXTERNALSYM SidTypeUnknown}
  1050. SidTypeComputer = 9;
  1051. {$EXTERNALSYM SidTypeComputer}
  1052. type
  1053. _SID_NAME_USE = DWORD;
  1054. {$EXTERNALSYM _SID_NAME_USE}
  1055. SID_NAME_USE = _SID_NAME_USE;
  1056. {$EXTERNALSYM SID_NAME_USE}
  1057. PSID_NAME_USE = ^SID_NAME_USE;
  1058. {$EXTERNALSYM PSID_NAME_USE}
  1059. TSidNameUse = SID_NAME_USE;
  1060. PSidNameUSe = PSID_NAME_USE;
  1061. PSID_AND_ATTRIBUTES = ^SID_AND_ATTRIBUTES;
  1062. {$EXTERNALSYM PSID_AND_ATTRIBUTES}
  1063. _SID_AND_ATTRIBUTES = record
  1064. Sid: PSID;
  1065. Attributes: DWORD;
  1066. end;
  1067. {$EXTERNALSYM _SID_AND_ATTRIBUTES}
  1068. SID_AND_ATTRIBUTES = _SID_AND_ATTRIBUTES;
  1069. {$EXTERNALSYM SID_AND_ATTRIBUTES}
  1070. TSidAndAttributes = SID_AND_ATTRIBUTES;
  1071. PSidAndAttributes = PSID_AND_ATTRIBUTES;
  1072. SID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
  1073. {$EXTERNALSYM SID_AND_ATTRIBUTES_ARRAY}
  1074. PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
  1075. {$EXTERNALSYM PSID_AND_ATTRIBUTES_ARRAY}
  1076. PSidAndAttributesArray = ^TSidAndAttributesArray;
  1077. TSidAndAttributesArray = SID_AND_ATTRIBUTES_ARRAY;
  1078. /////////////////////////////////////////////////////////////////////////////
  1079. // //
  1080. // Universal well-known SIDs //
  1081. // //
  1082. // Null SID S-1-0-0 //
  1083. // World S-1-1-0 //
  1084. // Local S-1-2-0 //
  1085. // Creator Owner ID S-1-3-0 //
  1086. // Creator Group ID S-1-3-1 //
  1087. // Creator Owner Server ID S-1-3-2 //
  1088. // Creator Group Server ID S-1-3-3 //
  1089. // //
  1090. // (Non-unique IDs) S-1-4 //
  1091. // //
  1092. /////////////////////////////////////////////////////////////////////////////
  1093. const
  1094. SECURITY_NULL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 0));
  1095. {$EXTERNALSYM SECURITY_NULL_SID_AUTHORITY}
  1096. SECURITY_WORLD_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 1));
  1097. {$EXTERNALSYM SECURITY_WORLD_SID_AUTHORITY}
  1098. SECURITY_LOCAL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 2));
  1099. {$EXTERNALSYM SECURITY_LOCAL_SID_AUTHORITY}
  1100. SECURITY_CREATOR_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 3));
  1101. {$EXTERNALSYM SECURITY_CREATOR_SID_AUTHORITY}
  1102. SECURITY_NON_UNIQUE_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 4));
  1103. {$EXTERNALSYM SECURITY_NON_UNIQUE_AUTHORITY}
  1104. SECURITY_RESOURCE_MANAGER_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 9));
  1105. {$EXTERNALSYM SECURITY_RESOURCE_MANAGER_AUTHORITY}
  1106. SECURITY_NULL_RID = $00000000;
  1107. {$EXTERNALSYM SECURITY_NULL_RID}
  1108. SECURITY_WORLD_RID = $00000000;
  1109. {$EXTERNALSYM SECURITY_WORLD_RID}
  1110. SECURITY_LOCAL_RID = $00000000;
  1111. {$EXTERNALSYM SECURITY_LOCAL_RID}
  1112. SECURITY_CREATOR_OWNER_RID = $00000000;
  1113. {$EXTERNALSYM SECURITY_CREATOR_OWNER_RID}
  1114. SECURITY_CREATOR_GROUP_RID = $00000001;
  1115. {$EXTERNALSYM SECURITY_CREATOR_GROUP_RID}
  1116. SECURITY_CREATOR_OWNER_SERVER_RID = $00000002;
  1117. {$EXTERNALSYM SECURITY_CREATOR_OWNER_SERVER_RID}
  1118. SECURITY_CREATOR_GROUP_SERVER_RID = $00000003;
  1119. {$EXTERNALSYM SECURITY_CREATOR_GROUP_SERVER_RID}
  1120. /////////////////////////////////////////////////////////////////////////////
  1121. // //
  1122. // NT well-known SIDs //
  1123. // //
  1124. // NT Authority S-1-5 //
  1125. // Dialup S-1-5-1 //
  1126. // //
  1127. // Network S-1-5-2 //
  1128. // Batch S-1-5-3 //
  1129. // Interactive S-1-5-4 //
  1130. // (Logon IDs) S-1-5-5-X-Y //
  1131. // Service S-1-5-6 //
  1132. // AnonymousLogon S-1-5-7 (aka null logon session) //
  1133. // Proxy S-1-5-8 //
  1134. // Enterprise DC (EDC) S-1-5-9 (aka domain controller account) //
  1135. // Self S-1-5-10 (self RID) //
  1136. // Authenticated User S-1-5-11 (Authenticated user somewhere) //
  1137. // Restricted Code S-1-5-12 (Running restricted code) //
  1138. // Terminal Server S-1-5-13 (Running on Terminal Server) //
  1139. // Remote Logon S-1-5-14 (Remote Interactive Logon) //
  1140. // This Organization S-1-5-15 //
  1141. // //
  1142. // Local System S-1-5-18 //
  1143. // Local Service S-1-5-19 //
  1144. // Network Service S-1-5-20 //
  1145. // //
  1146. // (NT non-unique IDs) S-1-5-0x15-... (NT Domain Sids) //
  1147. // //
  1148. // (Built-in domain) S-1-5-0x20 //
  1149. // //
  1150. // (Security Package IDs) S-1-5-0x40 //
  1151. // NTLM Authentication S-1-5-0x40-10 //
  1152. // SChannel Authentication S-1-5-0x40-14 //
  1153. // Digest Authentication S-1-5-0x40-21 //
  1154. // //
  1155. // Other Organization S-1-5-1000 (>=1000 can not be filtered) //
  1156. // //
  1157. // //
  1158. // NOTE: the relative identifier values (RIDs) determine which security //
  1159. // boundaries the SID is allowed to cross. Before adding new RIDs, //
  1160. // a determination needs to be made regarding which range they should //
  1161. // be added to in order to ensure proper "SID filtering" //
  1162. // //
  1163. ///////////////////////////////////////////////////////////////////////////////
  1164. const
  1165. SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  1166. {$EXTERNALSYM SECURITY_NT_AUTHORITY}
  1167. SECURITY_DIALUP_RID = $00000001;
  1168. {$EXTERNALSYM SECURITY_DIALUP_RID}
  1169. SECURITY_NETWORK_RID = $00000002;
  1170. {$EXTERNALSYM SECURITY_NETWORK_RID}
  1171. SECURITY_BATCH_RID = $00000003;
  1172. {$EXTERNALSYM SECURITY_BATCH_RID}
  1173. SECURITY_INTERACTIVE_RID = $00000004;
  1174. {$EXTERNALSYM SECURITY_INTERACTIVE_RID}
  1175. SECURITY_LOGON_IDS_RID = $00000005;
  1176. {$EXTERNALSYM SECURITY_LOGON_IDS_RID}
  1177. SECURITY_LOGON_IDS_RID_COUNT = 3;
  1178. {$EXTERNALSYM SECURITY_LOGON_IDS_RID_COUNT}
  1179. SECURITY_SERVICE_RID = $00000006;
  1180. {$EXTERNALSYM SECURITY_SERVICE_RID}
  1181. SECURITY_ANONYMOUS_LOGON_RID = $00000007;
  1182. {$EXTERNALSYM SECURITY_ANONYMOUS_LOGON_RID}
  1183. SECURITY_PROXY_RID = $00000008;
  1184. {$EXTERNALSYM SECURITY_PROXY_RID}
  1185. SECURITY_ENTERPRISE_CONTROLLERS_RID = $00000009;
  1186. {$EXTERNALSYM SECURITY_ENTERPRISE_CONTROLLERS_RID}
  1187. SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID;
  1188. {$EXTERNALSYM SECURITY_SERVER_LOGON_RID}
  1189. SECURITY_PRINCIPAL_SELF_RID = $0000000A;
  1190. {$EXTERNALSYM SECURITY_PRINCIPAL_SELF_RID}
  1191. SECURITY_AUTHENTICATED_USER_RID = $0000000B;
  1192. {$EXTERNALSYM SECURITY_AUTHENTICATED_USER_RID}
  1193. SECURITY_RESTRICTED_CODE_RID = $0000000C;
  1194. {$EXTERNALSYM SECURITY_RESTRICTED_CODE_RID}
  1195. SECURITY_TERMINAL_SERVER_RID = $0000000D;
  1196. {$EXTERNALSYM SECURITY_TERMINAL_SERVER_RID}
  1197. SECURITY_REMOTE_LOGON_RID = $0000000E;
  1198. {$EXTERNALSYM SECURITY_REMOTE_LOGON_RID}
  1199. SECURITY_THIS_ORGANIZATION_RID = $0000000F;
  1200. {$EXTERNALSYM SECURITY_THIS_ORGANIZATION_RID}
  1201. SECURITY_LOCAL_SYSTEM_RID = $00000012;
  1202. {$EXTERNALSYM SECURITY_LOCAL_SYSTEM_RID}
  1203. SECURITY_LOCAL_SERVICE_RID = $00000013;
  1204. {$EXTERNALSYM SECURITY_LOCAL_SERVICE_RID}
  1205. SECURITY_NETWORK_SERVICE_RID = $00000014;
  1206. {$EXTERNALSYM SECURITY_NETWORK_SERVICE_RID}
  1207. SECURITY_NT_NON_UNIQUE = $00000015;
  1208. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE}
  1209. SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT = 3;
  1210. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT}
  1211. SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  1212. {$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID}
  1213. SECURITY_PACKAGE_BASE_RID = $00000040;
  1214. {$EXTERNALSYM SECURITY_PACKAGE_BASE_RID}
  1215. SECURITY_PACKAGE_RID_COUNT = 2;
  1216. {$EXTERNALSYM SECURITY_PACKAGE_RID_COUNT}
  1217. SECURITY_PACKAGE_NTLM_RID = $0000000A;
  1218. {$EXTERNALSYM SECURITY_PACKAGE_NTLM_RID}
  1219. SECURITY_PACKAGE_SCHANNEL_RID = $0000000E;
  1220. {$EXTERNALSYM SECURITY_PACKAGE_SCHANNEL_RID}
  1221. SECURITY_PACKAGE_DIGEST_RID = $00000015;
  1222. {$EXTERNALSYM SECURITY_PACKAGE_DIGEST_RID}
  1223. SECURITY_MAX_ALWAYS_FILTERED = $000003E7;
  1224. {$EXTERNALSYM SECURITY_MAX_ALWAYS_FILTERED}
  1225. SECURITY_MIN_NEVER_FILTERED = $000003E8;
  1226. {$EXTERNALSYM SECURITY_MIN_NEVER_FILTERED}
  1227. SECURITY_OTHER_ORGANIZATION_RID = $000003E8;
  1228. {$EXTERNALSYM SECURITY_OTHER_ORGANIZATION_RID}
  1229. /////////////////////////////////////////////////////////////////////////////
  1230. // //
  1231. // well-known domain relative sub-authority values (RIDs)... //
  1232. // //
  1233. /////////////////////////////////////////////////////////////////////////////
  1234. // Well-known users ...
  1235. FOREST_USER_RID_MAX = $000001F3;
  1236. {$EXTERNALSYM FOREST_USER_RID_MAX}
  1237. DOMAIN_USER_RID_ADMIN = $000001F4;
  1238. {$EXTERNALSYM DOMAIN_USER_RID_ADMIN}
  1239. DOMAIN_USER_RID_GUEST = $000001F5;
  1240. {$EXTERNALSYM DOMAIN_USER_RID_GUEST}
  1241. DOMAIN_USER_RID_KRBTGT = $000001F6;
  1242. {$EXTERNALSYM DOMAIN_USER_RID_KRBTGT}
  1243. DOMAIN_USER_RID_MAX = $000003E7;
  1244. {$EXTERNALSYM DOMAIN_USER_RID_MAX}
  1245. // well-known groups ...
  1246. DOMAIN_GROUP_RID_ADMINS = $00000200;
  1247. {$EXTERNALSYM DOMAIN_GROUP_RID_ADMINS}
  1248. DOMAIN_GROUP_RID_USERS = $00000201;
  1249. {$EXTERNALSYM DOMAIN_GROUP_RID_USERS}
  1250. DOMAIN_GROUP_RID_GUESTS = $00000202;
  1251. {$EXTERNALSYM DOMAIN_GROUP_RID_GUESTS}
  1252. DOMAIN_GROUP_RID_COMPUTERS = $00000203;
  1253. {$EXTERNALSYM DOMAIN_GROUP_RID_COMPUTERS}
  1254. DOMAIN_GROUP_RID_CONTROLLERS = $00000204;
  1255. {$EXTERNALSYM DOMAIN_GROUP_RID_CONTROLLERS}
  1256. DOMAIN_GROUP_RID_CERT_ADMINS = $00000205;
  1257. {$EXTERNALSYM DOMAIN_GROUP_RID_CERT_ADMINS}
  1258. DOMAIN_GROUP_RID_SCHEMA_ADMINS = $00000206;
  1259. {$EXTERNALSYM DOMAIN_GROUP_RID_SCHEMA_ADMINS}
  1260. DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = $00000207;
  1261. {$EXTERNALSYM DOMAIN_GROUP_RID_ENTERPRISE_ADMINS}
  1262. DOMAIN_GROUP_RID_POLICY_ADMINS = $00000208;
  1263. {$EXTERNALSYM DOMAIN_GROUP_RID_POLICY_ADMINS}
  1264. // well-known aliases ...
  1265. DOMAIN_ALIAS_RID_ADMINS = $00000220;
  1266. {$EXTERNALSYM DOMAIN_ALIAS_RID_ADMINS}
  1267. DOMAIN_ALIAS_RID_USERS = $00000221;
  1268. {$EXTERNALSYM DOMAIN_ALIAS_RID_USERS}
  1269. DOMAIN_ALIAS_RID_GUESTS = $00000222;
  1270. {$EXTERNALSYM DOMAIN_ALIAS_RID_GUESTS}
  1271. DOMAIN_ALIAS_RID_POWER_USERS = $00000223;
  1272. {$EXTERNALSYM DOMAIN_ALIAS_RID_POWER_USERS}
  1273. DOMAIN_ALIAS_RID_ACCOUNT_OPS = $00000224;
  1274. {$EXTERNALSYM DOMAIN_ALIAS_RID_ACCOUNT_OPS}
  1275. DOMAIN_ALIAS_RID_SYSTEM_OPS = $00000225;
  1276. {$EXTERNALSYM DOMAIN_ALIAS_RID_SYSTEM_OPS}
  1277. DOMAIN_ALIAS_RID_PRINT_OPS = $00000226;
  1278. {$EXTERNALSYM DOMAIN_ALIAS_RID_PRINT_OPS}
  1279. DOMAIN_ALIAS_RID_BACKUP_OPS = $00000227;
  1280. {$EXTERNALSYM DOMAIN_ALIAS_RID_BACKUP_OPS}
  1281. DOMAIN_ALIAS_RID_REPLICATOR = $00000228;
  1282. {$EXTERNALSYM DOMAIN_ALIAS_RID_REPLICATOR}
  1283. DOMAIN_ALIAS_RID_RAS_SERVERS = $00000229;
  1284. {$EXTERNALSYM DOMAIN_ALIAS_RID_RAS_SERVERS}
  1285. DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = $0000022A;
  1286. {$EXTERNALSYM DOMAIN_ALIAS_RID_PREW2KCOMPACCESS}
  1287. DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = $0000022B;
  1288. {$EXTERNALSYM DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS}
  1289. DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = $0000022C;
  1290. {$EXTERNALSYM DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS}
  1291. DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = $0000022D;
  1292. {$EXTERNALSYM DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS}
  1293. DOMAIN_ALIAS_RID_MONITORING_USERS = $0000022E;
  1294. {$EXTERNALSYM DOMAIN_ALIAS_RID_MONITORING_USERS}
  1295. DOMAIN_ALIAS_RID_LOGGING_USERS = $0000022F;
  1296. {$EXTERNALSYM DOMAIN_ALIAS_RID_LOGGING_USERS}
  1297. DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = $00000230;
  1298. {$EXTERNALSYM DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS}
  1299. DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = $00000231;
  1300. {$EXTERNALSYM DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS}
  1301. type
  1302. WELL_KNOWN_SID_TYPE = (
  1303. WinNullSid,
  1304. WinWorldSid,
  1305. WinLocalSid,
  1306. WinCreatorOwnerSid,
  1307. WinCreatorGroupSid,
  1308. WinCreatorOwnerServerSid,
  1309. WinCreatorGroupServerSid,
  1310. WinNtAuthoritySid,
  1311. WinDialupSid,
  1312. WinNetworkSid,
  1313. WinBatchSid,
  1314. WinInteractiveSid,
  1315. WinServiceSid,
  1316. WinAnonymousSid,
  1317. WinProxySid,
  1318. WinEnterpriseControllersSid,
  1319. WinSelfSid,
  1320. WinAuthenticatedUserSid,
  1321. WinRestrictedCodeSid,
  1322. WinTerminalServerSid,
  1323. WinRemoteLogonIdSid,
  1324. WinLogonIdsSid,
  1325. WinLocalSystemSid,
  1326. WinLocalServiceSid,
  1327. WinNetworkServiceSid,
  1328. WinBuiltinDomainSid,
  1329. WinBuiltinAdministratorsSid,
  1330. WinBuiltinUsersSid,
  1331. WinBuiltinGuestsSid,
  1332. WinBuiltinPowerUsersSid,
  1333. WinBuiltinAccountOperatorsSid,
  1334. WinBuiltinSystemOperatorsSid,
  1335. WinBuiltinPrintOperatorsSid,
  1336. WinBuiltinBackupOperatorsSid,
  1337. WinBuiltinReplicatorSid,
  1338. WinBuiltinPreWindows2000CompatibleAccessSid,
  1339. WinBuiltinRemoteDesktopUsersSid,
  1340. WinBuiltinNetworkConfigurationOperatorsSid,
  1341. WinAccountAdministratorSid,
  1342. WinAccountGuestSid,
  1343. WinAccountKrbtgtSid,
  1344. WinAccountDomainAdminsSid,
  1345. WinAccountDomainUsersSid,
  1346. WinAccountDomainGuestsSid,
  1347. WinAccountComputersSid,
  1348. WinAccountControllersSid,
  1349. WinAccountCertAdminsSid,
  1350. WinAccountSchemaAdminsSid,
  1351. WinAccountEnterpriseAdminsSid,
  1352. WinAccountPolicyAdminsSid,
  1353. WinAccountRasAndIasServersSid,
  1354. WinNTLMAuthenticationSid,
  1355. WinDigestAuthenticationSid,
  1356. WinSChannelAuthenticationSid,
  1357. WinThisOrganizationSid,
  1358. WinOtherOrganizationSid,
  1359. WinBuiltinIncomingForestTrustBuildersSid,
  1360. WinBuiltinPerfMonitoringUsersSid,
  1361. WinBuiltinPerfLoggingUsersSid,
  1362. WinBuiltinAuthorizationAccessSid,
  1363. WinBuiltinTerminalServerLicenseServersSid);
  1364. {$EXTERNALSYM WELL_KNOWN_SID_TYPE}
  1365. TWellKnownSidType = WELL_KNOWN_SID_TYPE;
  1366. //
  1367. // Allocate the System Luid. The first 1000 LUIDs are reserved.
  1368. // Use #999 here (0x3E7 = 999)
  1369. //
  1370. const
  1371. SYSTEM_LUID: LUID = (LowPart: $3E7; HighPart: $0);
  1372. {$EXTERNALSYM SYSTEM_LUID}
  1373. ANONYMOUS_LOGON_LUID: LUID = (LowPart: $3E6; HighPart: $0);
  1374. {$EXTERNALSYM ANONYMOUS_LOGON_LUID}
  1375. LOCALSERVICE_LUID: LUID = (LowPart: $3E5; HighPart: $0);
  1376. {$EXTERNALSYM LOCALSERVICE_LUID}
  1377. NETWORKSERVICE_LUID: LUID = (LowPart: $3E4; HighPart: $0);
  1378. {$EXTERNALSYM NETWORKSERVICE_LUID}
  1379. ////////////////////////////////////////////////////////////////////////
  1380. // //
  1381. // User and Group related SID attributes //
  1382. // //
  1383. ////////////////////////////////////////////////////////////////////////
  1384. //
  1385. // Group attributes
  1386. //
  1387. SE_GROUP_MANDATORY = $00000001;
  1388. {$EXTERNALSYM SE_GROUP_MANDATORY}
  1389. SE_GROUP_ENABLED_BY_DEFAULT = $00000002;
  1390. {$EXTERNALSYM SE_GROUP_ENABLED_BY_DEFAULT}
  1391. SE_GROUP_ENABLED = $00000004;
  1392. {$EXTERNALSYM SE_GROUP_ENABLED}
  1393. SE_GROUP_OWNER = $00000008;
  1394. {$EXTERNALSYM SE_GROUP_OWNER}
  1395. SE_GROUP_USE_FOR_DENY_ONLY = $00000010;
  1396. {$EXTERNALSYM SE_GROUP_USE_FOR_DENY_ONLY}
  1397. SE_GROUP_LOGON_ID = $C0000000;
  1398. {$EXTERNALSYM SE_GROUP_LOGON_ID}
  1399. SE_GROUP_RESOURCE = $20000000;
  1400. {$EXTERNALSYM SE_GROUP_RESOURCE}
  1401. //
  1402. // User attributes
  1403. //
  1404. // (None yet defined.)
  1405. ////////////////////////////////////////////////////////////////////////
  1406. // //
  1407. // ACL and ACE //
  1408. // //
  1409. ////////////////////////////////////////////////////////////////////////
  1410. //
  1411. // Define an ACL and the ACE format. The structure of an ACL header
  1412. // followed by one or more ACEs. Pictorally the structure of an ACL header
  1413. // is as follows:
  1414. //
  1415. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1416. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1417. // +-------------------------------+---------------+---------------+
  1418. // | AclSize | Sbz1 | AclRevision |
  1419. // +-------------------------------+---------------+---------------+
  1420. // | Sbz2 | AceCount |
  1421. // +-------------------------------+-------------------------------+
  1422. //
  1423. // The current AclRevision is defined to be ACL_REVISION.
  1424. //
  1425. // AclSize is the size, in bytes, allocated for the ACL. This includes
  1426. // the ACL header, ACES, and remaining free space in the buffer.
  1427. //
  1428. // AceCount is the number of ACES in the ACL.
  1429. //
  1430. // This is the *current* ACL revision
  1431. ACL_REVISION = 2;
  1432. {$EXTERNALSYM ACL_REVISION}
  1433. ACL_REVISION_DS = 4;
  1434. {$EXTERNALSYM ACL_REVISION_DS}
  1435. // This is the history of ACL revisions. Add a new one whenever
  1436. // ACL_REVISION is updated
  1437. ACL_REVISION1 = 1;
  1438. {$EXTERNALSYM ACL_REVISION1}
  1439. ACL_REVISION2 = 2;
  1440. {$EXTERNALSYM ACL_REVISION2}
  1441. MIN_ACL_REVISION = ACL_REVISION2;
  1442. {$EXTERNALSYM MIN_ACL_REVISION}
  1443. ACL_REVISION3 = 3;
  1444. {$EXTERNALSYM ACL_REVISION3}
  1445. ACL_REVISION4 = 4;
  1446. {$EXTERNALSYM ACL_REVISION4}
  1447. MAX_ACL_REVISION = ACL_REVISION4;
  1448. {$EXTERNALSYM MAX_ACL_REVISION}
  1449. type
  1450. PACL = ^ACL;
  1451. {$EXTERNALSYM PACL}
  1452. _ACL = record
  1453. AclRevision: Byte;
  1454. Sbz1: Byte;
  1455. AclSize: Word;
  1456. AceCount: Word;
  1457. Sbz2: Word;
  1458. end;
  1459. {$EXTERNALSYM _ACL}
  1460. ACL = _ACL;
  1461. {$EXTERNALSYM ACL}
  1462. TAcl = ACL;
  1463. PPACL = ^PAcl;
  1464. {$NODEFINE PPACL}
  1465. //
  1466. // The structure of an ACE is a common ace header followed by ace type
  1467. // specific data. Pictorally the structure of the common ace header is
  1468. // as follows:
  1469. //
  1470. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1471. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1472. // +---------------+-------+-------+---------------+---------------+
  1473. // | AceSize | AceFlags | AceType |
  1474. // +---------------+-------+-------+---------------+---------------+
  1475. //
  1476. // AceType denotes the type of the ace, there are some predefined ace
  1477. // types
  1478. //
  1479. // AceSize is the size, in bytes, of ace.
  1480. //
  1481. // AceFlags are the Ace flags for audit and inheritance, defined shortly.
  1482. type
  1483. PACE_HEADER = ^ACE_HEADER;
  1484. {$EXTERNALSYM PACE_HEADER}
  1485. _ACE_HEADER = record
  1486. AceType: Byte;
  1487. AceFlags: Byte;
  1488. AceSize: Word;
  1489. end;
  1490. {$EXTERNALSYM _ACE_HEADER}
  1491. ACE_HEADER = _ACE_HEADER;
  1492. {$EXTERNALSYM ACE_HEADER}
  1493. TAceHeader = ACE_HEADER;
  1494. PAceHeader = PACE_HEADER;
  1495. //
  1496. // The following are the predefined ace types that go into the AceType
  1497. // field of an Ace header.
  1498. //
  1499. const
  1500. ACCESS_MIN_MS_ACE_TYPE = $0;
  1501. {$EXTERNALSYM ACCESS_MIN_MS_ACE_TYPE}
  1502. ACCESS_ALLOWED_ACE_TYPE = $0;
  1503. {$EXTERNALSYM ACCESS_ALLOWED_ACE_TYPE}
  1504. ACCESS_DENIED_ACE_TYPE = $1;
  1505. {$EXTERNALSYM ACCESS_DENIED_ACE_TYPE}
  1506. SYSTEM_AUDIT_ACE_TYPE = $2;
  1507. {$EXTERNALSYM SYSTEM_AUDIT_ACE_TYPE}
  1508. SYSTEM_ALARM_ACE_TYPE = $3;
  1509. {$EXTERNALSYM SYSTEM_ALARM_ACE_TYPE}
  1510. ACCESS_MAX_MS_V2_ACE_TYPE = $3;
  1511. {$EXTERNALSYM ACCESS_MAX_MS_V2_ACE_TYPE}
  1512. ACCESS_ALLOWED_COMPOUND_ACE_TYPE = $4;
  1513. {$EXTERNALSYM ACCESS_ALLOWED_COMPOUND_ACE_TYPE}
  1514. ACCESS_MAX_MS_V3_ACE_TYPE = $4;
  1515. {$EXTERNALSYM ACCESS_MAX_MS_V3_ACE_TYPE}
  1516. ACCESS_MIN_MS_OBJECT_ACE_TYPE = $5;
  1517. {$EXTERNALSYM ACCESS_MIN_MS_OBJECT_ACE_TYPE}
  1518. ACCESS_ALLOWED_OBJECT_ACE_TYPE = $5;
  1519. {$EXTERNALSYM ACCESS_ALLOWED_OBJECT_ACE_TYPE}
  1520. ACCESS_DENIED_OBJECT_ACE_TYPE = $6;
  1521. {$EXTERNALSYM ACCESS_DENIED_OBJECT_ACE_TYPE}
  1522. SYSTEM_AUDIT_OBJECT_ACE_TYPE = $7;
  1523. {$EXTERNALSYM SYSTEM_AUDIT_OBJECT_ACE_TYPE}
  1524. SYSTEM_ALARM_OBJECT_ACE_TYPE = $8;
  1525. {$EXTERNALSYM SYSTEM_ALARM_OBJECT_ACE_TYPE}
  1526. ACCESS_MAX_MS_OBJECT_ACE_TYPE = $8;
  1527. {$EXTERNALSYM ACCESS_MAX_MS_OBJECT_ACE_TYPE}
  1528. ACCESS_MAX_MS_V4_ACE_TYPE = $8;
  1529. {$EXTERNALSYM ACCESS_MAX_MS_V4_ACE_TYPE}
  1530. ACCESS_MAX_MS_ACE_TYPE = $8;
  1531. {$EXTERNALSYM ACCESS_MAX_MS_ACE_TYPE}
  1532. ACCESS_ALLOWED_CALLBACK_ACE_TYPE = $9;
  1533. {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_ACE_TYPE}
  1534. ACCESS_DENIED_CALLBACK_ACE_TYPE = $A;
  1535. {$EXTERNALSYM ACCESS_DENIED_CALLBACK_ACE_TYPE}
  1536. ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE = $B;
  1537. {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE}
  1538. ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE = $C;
  1539. {$EXTERNALSYM ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE}
  1540. SYSTEM_AUDIT_CALLBACK_ACE_TYPE = $D;
  1541. {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_ACE_TYPE}
  1542. SYSTEM_ALARM_CALLBACK_ACE_TYPE = $E;
  1543. {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_ACE_TYPE}
  1544. SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE = $F;
  1545. {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE}
  1546. SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE = $10;
  1547. {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE}
  1548. ACCESS_MAX_MS_V5_ACE_TYPE = $10;
  1549. {$EXTERNALSYM ACCESS_MAX_MS_V5_ACE_TYPE}
  1550. //
  1551. // The following are the inherit flags that go into the AceFlags field
  1552. // of an Ace header.
  1553. //
  1554. OBJECT_INHERIT_ACE = $1;
  1555. {$EXTERNALSYM OBJECT_INHERIT_ACE}
  1556. CONTAINER_INHERIT_ACE = $2;
  1557. {$EXTERNALSYM CONTAINER_INHERIT_ACE}
  1558. NO_PROPAGATE_INHERIT_ACE = $4;
  1559. {$EXTERNALSYM NO_PROPAGATE_INHERIT_ACE}
  1560. INHERIT_ONLY_ACE = $8;
  1561. {$EXTERNALSYM INHERIT_ONLY_ACE}
  1562. INHERITED_ACE = $10;
  1563. {$EXTERNALSYM INHERITED_ACE}
  1564. VALID_INHERIT_FLAGS = $1F;
  1565. {$EXTERNALSYM VALID_INHERIT_FLAGS}
  1566. // The following are the currently defined ACE flags that go into the
  1567. // AceFlags field of an ACE header. Each ACE type has its own set of
  1568. // AceFlags.
  1569. //
  1570. // SUCCESSFUL_ACCESS_ACE_FLAG - used only with system audit and alarm ACE
  1571. // types to indicate that a message is generated for successful accesses.
  1572. //
  1573. // FAILED_ACCESS_ACE_FLAG - used only with system audit and alarm ACE types
  1574. // to indicate that a message is generated for failed accesses.
  1575. //
  1576. //
  1577. // SYSTEM_AUDIT and SYSTEM_ALARM AceFlags
  1578. //
  1579. // These control the signaling of audit and alarms for success or failure.
  1580. //
  1581. SUCCESSFUL_ACCESS_ACE_FLAG = $40;
  1582. {$EXTERNALSYM SUCCESSFUL_ACCESS_ACE_FLAG}
  1583. FAILED_ACCESS_ACE_FLAG = $80;
  1584. {$EXTERNALSYM FAILED_ACCESS_ACE_FLAG}
  1585. //
  1586. // We'll define the structure of the predefined ACE types. Pictorally
  1587. // the structure of the predefined ACE's is as follows:
  1588. //
  1589. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  1590. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  1591. // +---------------+-------+-------+---------------+---------------+
  1592. // | AceFlags | Resd |Inherit| AceSize | AceType |
  1593. // +---------------+-------+-------+---------------+---------------+
  1594. // | Mask |
  1595. // +---------------------------------------------------------------+
  1596. // | |
  1597. // + +
  1598. // | |
  1599. // + Sid +
  1600. // | |
  1601. // + +
  1602. // | |
  1603. // +---------------------------------------------------------------+
  1604. //
  1605. // Mask is the access mask associated with the ACE. This is either the
  1606. // access allowed, access denied, audit, or alarm mask.
  1607. //
  1608. // Sid is the Sid associated with the ACE.
  1609. //
  1610. // The following are the four predefined ACE types.
  1611. // Examine the AceType field in the Header to determine
  1612. // which structure is appropriate to use for casting.
  1613. type
  1614. PACCESS_ALLOWED_ACE = ^ACCESS_ALLOWED_ACE;
  1615. {$EXTERNALSYM PACCESS_ALLOWED_ACE}
  1616. _ACCESS_ALLOWED_ACE = record
  1617. Header: ACE_HEADER;
  1618. Mask: ACCESS_MASK;
  1619. SidStart: DWORD;
  1620. end;
  1621. {$EXTERNALSYM _ACCESS_ALLOWED_ACE}
  1622. ACCESS_ALLOWED_ACE = _ACCESS_ALLOWED_ACE;
  1623. {$EXTERNALSYM ACCESS_ALLOWED_ACE}
  1624. TAccessAllowedAce = ACCESS_ALLOWED_ACE;
  1625. PAccessAllowedAce = PACCESS_ALLOWED_ACE;
  1626. PACCESS_DENIED_ACE = ^ACCESS_DENIED_ACE;
  1627. {$EXTERNALSYM PACCESS_DENIED_ACE}
  1628. _ACCESS_DENIED_ACE = record
  1629. Header: ACE_HEADER;
  1630. Mask: ACCESS_MASK;
  1631. SidStart: DWORD;
  1632. end;
  1633. {$EXTERNALSYM _ACCESS_DENIED_ACE}
  1634. ACCESS_DENIED_ACE = _ACCESS_DENIED_ACE;
  1635. {$EXTERNALSYM ACCESS_DENIED_ACE}
  1636. TAccessDeniedAce = ACCESS_DENIED_ACE;
  1637. PAccessDeniedAce = PACCESS_DENIED_ACE;
  1638. PSYSTEM_AUDIT_ACE = ^SYSTEM_AUDIT_ACE;
  1639. {$EXTERNALSYM PSYSTEM_AUDIT_ACE}
  1640. _SYSTEM_AUDIT_ACE = record
  1641. Header: ACE_HEADER;
  1642. Mask: ACCESS_MASK;
  1643. SidStart: DWORD;
  1644. end;
  1645. {$EXTERNALSYM _SYSTEM_AUDIT_ACE}
  1646. SYSTEM_AUDIT_ACE = _SYSTEM_AUDIT_ACE;
  1647. {$EXTERNALSYM SYSTEM_AUDIT_ACE}
  1648. TSystemAuditAce = SYSTEM_AUDIT_ACE;
  1649. PSystemAuditAce = PSYSTEM_AUDIT_ACE;
  1650. PSYSTEM_ALARM_ACE = ^SYSTEM_ALARM_ACE;
  1651. {$EXTERNALSYM PSYSTEM_ALARM_ACE}
  1652. _SYSTEM_ALARM_ACE = record
  1653. Header: ACE_HEADER;
  1654. Mask: ACCESS_MASK;
  1655. SidStart: DWORD;
  1656. end;
  1657. {$EXTERNALSYM _SYSTEM_ALARM_ACE}
  1658. SYSTEM_ALARM_ACE = _SYSTEM_ALARM_ACE;
  1659. {$EXTERNALSYM SYSTEM_ALARM_ACE}
  1660. TSystemAlarmAce = SYSTEM_ALARM_ACE;
  1661. PSystemAlarmAce = PSYSTEM_ALARM_ACE;
  1662. PACCESS_ALLOWED_OBJECT_ACE = ^ACCESS_ALLOWED_OBJECT_ACE;
  1663. {$EXTERNALSYM PACCESS_ALLOWED_OBJECT_ACE}
  1664. _ACCESS_ALLOWED_OBJECT_ACE = record
  1665. Header: ACE_HEADER;
  1666. Mask: ACCESS_MASK;
  1667. Flags: DWORD;
  1668. ObjectType: GUID;
  1669. InheritedObjectType: GUID;
  1670. SidStart: DWORD;
  1671. end;
  1672. {$EXTERNALSYM _ACCESS_ALLOWED_OBJECT_ACE}
  1673. ACCESS_ALLOWED_OBJECT_ACE = _ACCESS_ALLOWED_OBJECT_ACE;
  1674. {$EXTERNALSYM ACCESS_ALLOWED_OBJECT_ACE}
  1675. TAccessAllowedObjectAce = ACCESS_ALLOWED_OBJECT_ACE;
  1676. PAccessAllowedObjectAce = PACCESS_ALLOWED_OBJECT_ACE;
  1677. PACCESS_DENIED_OBJECT_ACE = ^ACCESS_DENIED_OBJECT_ACE;
  1678. {$EXTERNALSYM PACCESS_DENIED_OBJECT_ACE}
  1679. _ACCESS_DENIED_OBJECT_ACE = record
  1680. Header: ACE_HEADER;
  1681. Mask: ACCESS_MASK;
  1682. Flags: DWORD;
  1683. ObjectType: GUID;
  1684. InheritedObjectType: GUID;
  1685. SidStart: DWORD;
  1686. end;
  1687. {$EXTERNALSYM _ACCESS_DENIED_OBJECT_ACE}
  1688. ACCESS_DENIED_OBJECT_ACE = _ACCESS_DENIED_OBJECT_ACE;
  1689. {$EXTERNALSYM ACCESS_DENIED_OBJECT_ACE}
  1690. TAccessDeniedObjectAce = ACCESS_DENIED_OBJECT_ACE;
  1691. PAccessDeniedObjectAce = PACCESS_DENIED_OBJECT_ACE;
  1692. PSYSTEM_AUDIT_OBJECT_ACE = ^SYSTEM_AUDIT_OBJECT_ACE;
  1693. {$EXTERNALSYM PSYSTEM_AUDIT_OBJECT_ACE}
  1694. _SYSTEM_AUDIT_OBJECT_ACE = record
  1695. Header: ACE_HEADER;
  1696. Mask: ACCESS_MASK;
  1697. Flags: DWORD;
  1698. ObjectType: GUID;
  1699. InheritedObjectType: GUID;
  1700. SidStart: DWORD;
  1701. end;
  1702. {$EXTERNALSYM _SYSTEM_AUDIT_OBJECT_ACE}
  1703. SYSTEM_AUDIT_OBJECT_ACE = _SYSTEM_AUDIT_OBJECT_ACE;
  1704. {$EXTERNALSYM SYSTEM_AUDIT_OBJECT_ACE}
  1705. TSystemAuditObjectAce = SYSTEM_AUDIT_OBJECT_ACE;
  1706. PSystemAuditObjectAce = PSYSTEM_AUDIT_OBJECT_ACE;
  1707. PSYSTEM_ALARM_OBJECT_ACE = ^SYSTEM_ALARM_OBJECT_ACE;
  1708. {$EXTERNALSYM PSYSTEM_ALARM_OBJECT_ACE}
  1709. _SYSTEM_ALARM_OBJECT_ACE = record
  1710. Header: ACE_HEADER;
  1711. Mask: ACCESS_MASK;
  1712. Flags: DWORD;
  1713. ObjectType: GUID;
  1714. InheritedObjectType: GUID;
  1715. SidStart: DWORD;
  1716. end;
  1717. {$EXTERNALSYM _SYSTEM_ALARM_OBJECT_ACE}
  1718. SYSTEM_ALARM_OBJECT_ACE = _SYSTEM_ALARM_OBJECT_ACE;
  1719. {$EXTERNALSYM SYSTEM_ALARM_OBJECT_ACE}
  1720. TSystemAlarmObjectAce = SYSTEM_ALARM_OBJECT_ACE;
  1721. PSystemAlarmObjectAce = PSYSTEM_ALARM_OBJECT_ACE;
  1722. //
  1723. // Callback ace support in post Win2000.
  1724. // Resource managers can put their own data after Sidstart + Length of the sid
  1725. //
  1726. _ACCESS_ALLOWED_CALLBACK_ACE = record
  1727. Header: ACE_HEADER;
  1728. Mask: ACCESS_MASK;
  1729. SidStart: DWORD;
  1730. // Opaque resouce manager specific data
  1731. end;
  1732. {$EXTERNALSYM _ACCESS_ALLOWED_CALLBACK_ACE}
  1733. ACCESS_ALLOWED_CALLBACK_ACE = _ACCESS_ALLOWED_CALLBACK_ACE;
  1734. {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_ACE}
  1735. PACCESS_ALLOWED_CALLBACK_ACE = ^ACCESS_ALLOWED_CALLBACK_ACE;
  1736. {$EXTERNALSYM PACCESS_ALLOWED_CALLBACK_ACE}
  1737. TAccessAllowedCallBackAce = ACCESS_ALLOWED_CALLBACK_ACE;
  1738. PAccessAllowedCallBackAce = PACCESS_ALLOWED_CALLBACK_ACE;
  1739. _ACCESS_DENIED_CALLBACK_ACE = record
  1740. Header: ACE_HEADER;
  1741. Mask: ACCESS_MASK;
  1742. SidStart: DWORD;
  1743. // Opaque resouce manager specific data
  1744. end;
  1745. {$EXTERNALSYM _ACCESS_DENIED_CALLBACK_ACE}
  1746. ACCESS_DENIED_CALLBACK_ACE = _ACCESS_DENIED_CALLBACK_ACE;
  1747. {$EXTERNALSYM ACCESS_DENIED_CALLBACK_ACE}
  1748. PACCESS_DENIED_CALLBACK_ACE = ^ACCESS_DENIED_CALLBACK_ACE;
  1749. {$EXTERNALSYM PACCESS_DENIED_CALLBACK_ACE}
  1750. TAccessDeniedCallBackAce = ACCESS_DENIED_CALLBACK_ACE;
  1751. PAccessDeniedCallBackAce = PACCESS_DENIED_CALLBACK_ACE;
  1752. _SYSTEM_AUDIT_CALLBACK_ACE = record
  1753. Header: ACE_HEADER;
  1754. Mask: ACCESS_MASK;
  1755. SidStart: DWORD;
  1756. // Opaque resouce manager specific data
  1757. end;
  1758. {$EXTERNALSYM _SYSTEM_AUDIT_CALLBACK_ACE}
  1759. SYSTEM_AUDIT_CALLBACK_ACE = _SYSTEM_AUDIT_CALLBACK_ACE;
  1760. {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_ACE}
  1761. PSYSTEM_AUDIT_CALLBACK_ACE = ^SYSTEM_AUDIT_CALLBACK_ACE;
  1762. {$EXTERNALSYM PSYSTEM_AUDIT_CALLBACK_ACE}
  1763. TSystemAuditCallBackAce = SYSTEM_AUDIT_CALLBACK_ACE;
  1764. PSystemAuditCallBackAce = PSYSTEM_AUDIT_CALLBACK_ACE;
  1765. _SYSTEM_ALARM_CALLBACK_ACE = record
  1766. Header: ACE_HEADER;
  1767. Mask: ACCESS_MASK;
  1768. SidStart: DWORD;
  1769. // Opaque resouce manager specific data
  1770. end;
  1771. {$EXTERNALSYM _SYSTEM_ALARM_CALLBACK_ACE}
  1772. SYSTEM_ALARM_CALLBACK_ACE = _SYSTEM_ALARM_CALLBACK_ACE;
  1773. {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_ACE}
  1774. PSYSTEM_ALARM_CALLBACK_ACE = ^SYSTEM_ALARM_CALLBACK_ACE;
  1775. {$EXTERNALSYM PSYSTEM_ALARM_CALLBACK_ACE}
  1776. TSystemAlarmCallBackAce = SYSTEM_ALARM_CALLBACK_ACE;
  1777. PSystemAlarmCallBackAce = PSYSTEM_ALARM_CALLBACK_ACE;
  1778. _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE = record
  1779. Header: ACE_HEADER;
  1780. Mask: ACCESS_MASK;
  1781. Flags: DWORD;
  1782. ObjectType: GUID;
  1783. InheritedObjectType: GUID;
  1784. SidStart: DWORD;
  1785. // Opaque resouce manager specific data
  1786. end;
  1787. {$EXTERNALSYM _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
  1788. ACCESS_ALLOWED_CALLBACK_OBJECT_ACE = _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
  1789. {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
  1790. PACCESS_ALLOWED_CALLBACK_OBJECT_ACE = ^ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
  1791. {$EXTERNALSYM PACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
  1792. TAccessAllowedCallBackObjectAce = ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
  1793. PAccessAllowedCallBackObjectAce = PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
  1794. _ACCESS_DENIED_CALLBACK_OBJECT_ACE = record
  1795. Header: ACE_HEADER;
  1796. Mask: ACCESS_MASK;
  1797. Flags: DWORD;
  1798. ObjectType: GUID;
  1799. InheritedObjectType: GUID;
  1800. SidStart: DWORD;
  1801. // Opaque resouce manager specific data
  1802. end;
  1803. {$EXTERNALSYM _ACCESS_DENIED_CALLBACK_OBJECT_ACE}
  1804. ACCESS_DENIED_CALLBACK_OBJECT_ACE = _ACCESS_DENIED_CALLBACK_OBJECT_ACE;
  1805. {$EXTERNALSYM ACCESS_DENIED_CALLBACK_OBJECT_ACE}
  1806. PACCESS_DENIED_CALLBACK_OBJECT_ACE = ^ACCESS_DENIED_CALLBACK_OBJECT_ACE;
  1807. {$EXTERNALSYM PACCESS_DENIED_CALLBACK_OBJECT_ACE}
  1808. TAccessDeniedCallBackObjectAce = ACCESS_DENIED_CALLBACK_OBJECT_ACE;
  1809. PAccessDeniedCallBackObjectAce = PACCESS_DENIED_CALLBACK_OBJECT_ACE;
  1810. _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE = record
  1811. Header: ACE_HEADER;
  1812. Mask: ACCESS_MASK;
  1813. Flags: DWORD;
  1814. ObjectType: GUID;
  1815. InheritedObjectType: GUID;
  1816. SidStart: DWORD;
  1817. // Opaque resouce manager specific data
  1818. end;
  1819. {$EXTERNALSYM _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
  1820. SYSTEM_AUDIT_CALLBACK_OBJECT_ACE = _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
  1821. {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
  1822. PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE = ^SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
  1823. {$EXTERNALSYM PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
  1824. TSystemAuditCallBackObjectAce = SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
  1825. PSystemAuditCallBackObjectAce = PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
  1826. _SYSTEM_ALARM_CALLBACK_OBJECT_ACE = record
  1827. Header: ACE_HEADER;
  1828. Mask: ACCESS_MASK;
  1829. Flags: DWORD;
  1830. ObjectType: GUID;
  1831. InheritedObjectType: GUID;
  1832. SidStart: DWORD;
  1833. // Opaque resouce manager specific data
  1834. end;
  1835. {$EXTERNALSYM _SYSTEM_ALARM_CALLBACK_OBJECT_ACE}
  1836. SYSTEM_ALARM_CALLBACK_OBJECT_ACE = _SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
  1837. {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_OBJECT_ACE}
  1838. PSYSTEM_ALARM_CALLBACK_OBJECT_ACE = ^SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
  1839. {$EXTERNALSYM PSYSTEM_ALARM_CALLBACK_OBJECT_ACE}
  1840. TSystemAlarmCallBackObjectAce = SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
  1841. PSystemAlarmCallBackObjectAce = PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
  1842. //
  1843. // Currently define Flags for "OBJECT" ACE types.
  1844. //
  1845. const
  1846. ACE_OBJECT_TYPE_PRESENT = $1;
  1847. {$EXTERNALSYM ACE_OBJECT_TYPE_PRESENT}
  1848. ACE_INHERITED_OBJECT_TYPE_PRESENT = $2;
  1849. {$EXTERNALSYM ACE_INHERITED_OBJECT_TYPE_PRESENT}
  1850. //
  1851. // The following declarations are used for setting and querying information
  1852. // about and ACL. First are the various information classes available to
  1853. // the user.
  1854. //
  1855. AclRevisionInformation = 1;
  1856. {$EXTERNALSYM AclRevisionInformation}
  1857. AclSizeInformation = 2;
  1858. {$EXTERNALSYM AclSizeInformation}
  1859. type
  1860. _ACL_INFORMATION_CLASS = DWORD;
  1861. {$EXTERNALSYM _ACL_INFORMATION_CLASS}
  1862. ACL_INFORMATION_CLASS = _ACL_INFORMATION_CLASS;
  1863. {$EXTERNALSYM ACL_INFORMATION_CLASS}
  1864. TAclInformationClass = ACL_INFORMATION_CLASS;
  1865. //
  1866. // This record is returned/sent if the user is requesting/setting the
  1867. // AclRevisionInformation
  1868. //
  1869. PACL_REVISION_INFORMATION = ^ACL_REVISION_INFORMATION;
  1870. {$EXTERNALSYM PACL_REVISION_INFORMATION}
  1871. _ACL_REVISION_INFORMATION = record
  1872. AclRevision: DWORD;
  1873. end;
  1874. {$EXTERNALSYM _ACL_REVISION_INFORMATION}
  1875. ACL_REVISION_INFORMATION = _ACL_REVISION_INFORMATION;
  1876. {$EXTERNALSYM ACL_REVISION_INFORMATION}
  1877. TAclRevisionInformation = ACL_REVISION_INFORMATION;
  1878. PAclRevisionInformation = PACL_REVISION_INFORMATION;
  1879. //
  1880. // This record is returned if the user is requesting AclSizeInformation
  1881. //
  1882. PACL_SIZE_INFORMATION = ^ACL_SIZE_INFORMATION;
  1883. {$EXTERNALSYM PACL_SIZE_INFORMATION}
  1884. _ACL_SIZE_INFORMATION = record
  1885. AceCount: DWORD;
  1886. AclBytesInUse: DWORD;
  1887. AclBytesFree: DWORD;
  1888. end;
  1889. {$EXTERNALSYM _ACL_SIZE_INFORMATION}
  1890. ACL_SIZE_INFORMATION = _ACL_SIZE_INFORMATION;
  1891. {$EXTERNALSYM ACL_SIZE_INFORMATION}
  1892. TAclSizeInformation = ACL_SIZE_INFORMATION;
  1893. PAclSizeInformation = PACL_SIZE_INFORMATION;
  1894. ////////////////////////////////////////////////////////////////////////
  1895. // //
  1896. // SECURITY_DESCRIPTOR //
  1897. // //
  1898. ////////////////////////////////////////////////////////////////////////
  1899. //
  1900. // Define the Security Descriptor and related data types.
  1901. // This is an opaque data structure.
  1902. //
  1903. //
  1904. // Current security descriptor revision value
  1905. //
  1906. const
  1907. SECURITY_DESCRIPTOR_REVISION = 1;
  1908. {$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION}
  1909. SECURITY_DESCRIPTOR_REVISION1 = 1;
  1910. {$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION1}
  1911. type
  1912. SECURITY_DESCRIPTOR_CONTROL = WORD;
  1913. {$EXTERNALSYM SECURITY_DESCRIPTOR_CONTROL}
  1914. PSECURITY_DESCRIPTOR_CONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
  1915. {$EXTERNALSYM PSECURITY_DESCRIPTOR_CONTROL}
  1916. TSecurityDescriptorControl = SECURITY_DESCRIPTOR_CONTROL;
  1917. PSecurityDescriptorControl = PSECURITY_DESCRIPTOR_CONTROL;
  1918. const
  1919. SE_OWNER_DEFAULTED = $0001;
  1920. {$EXTERNALSYM SE_OWNER_DEFAULTED}
  1921. SE_GROUP_DEFAULTED = $0002;
  1922. {$EXTERNALSYM SE_GROUP_DEFAULTED}
  1923. SE_DACL_PRESENT = $0004;
  1924. {$EXTERNALSYM SE_DACL_PRESENT}
  1925. SE_DACL_DEFAULTED = $0008;
  1926. {$EXTERNALSYM SE_DACL_DEFAULTED}
  1927. SE_SACL_PRESENT = $0010;
  1928. {$EXTERNALSYM SE_SACL_PRESENT}
  1929. SE_SACL_DEFAULTED = $0020;
  1930. {$EXTERNALSYM SE_SACL_DEFAULTED}
  1931. SE_DACL_AUTO_INHERIT_REQ = $0100;
  1932. {$EXTERNALSYM SE_DACL_AUTO_INHERIT_REQ}
  1933. SE_SACL_AUTO_INHERIT_REQ = $0200;
  1934. {$EXTERNALSYM SE_SACL_AUTO_INHERIT_REQ}
  1935. SE_DACL_AUTO_INHERITED = $0400;
  1936. {$EXTERNALSYM SE_DACL_AUTO_INHERITED}
  1937. SE_SACL_AUTO_INHERITED = $0800;
  1938. {$EXTERNALSYM SE_SACL_AUTO_INHERITED}
  1939. SE_DACL_PROTECTED = $1000;
  1940. {$EXTERNALSYM SE_DACL_PROTECTED}
  1941. SE_SACL_PROTECTED = $2000;
  1942. {$EXTERNALSYM SE_SACL_PROTECTED}
  1943. SE_RM_CONTROL_VALID = $4000;
  1944. {$EXTERNALSYM SE_RM_CONTROL_VALID}
  1945. SE_SELF_RELATIVE = $8000;
  1946. {$EXTERNALSYM SE_SELF_RELATIVE}
  1947. //
  1948. // Where:
  1949. //
  1950. // SE_OWNER_DEFAULTED - This boolean flag, when set, indicates that the
  1951. // SID pointed to by the Owner field was provided by a
  1952. // defaulting mechanism rather than explicitly provided by the
  1953. // original provider of the security descriptor. This may
  1954. // affect the treatment of the SID with respect to inheritence
  1955. // of an owner.
  1956. //
  1957. // SE_GROUP_DEFAULTED - This boolean flag, when set, indicates that the
  1958. // SID in the Group field was provided by a defaulting mechanism
  1959. // rather than explicitly provided by the original provider of
  1960. // the security descriptor. This may affect the treatment of
  1961. // the SID with respect to inheritence of a primary group.
  1962. //
  1963. // SE_DACL_PRESENT - This boolean flag, when set, indicates that the
  1964. // security descriptor contains a discretionary ACL. If this
  1965. // flag is set and the Dacl field of the SECURITY_DESCRIPTOR is
  1966. // null, then a null ACL is explicitly being specified.
  1967. //
  1968. // SE_DACL_DEFAULTED - This boolean flag, when set, indicates that the
  1969. // ACL pointed to by the Dacl field was provided by a defaulting
  1970. // mechanism rather than explicitly provided by the original
  1971. // provider of the security descriptor. This may affect the
  1972. // treatment of the ACL with respect to inheritence of an ACL.
  1973. // This flag is ignored if the DaclPresent flag is not set.
  1974. //
  1975. // SE_SACL_PRESENT - This boolean flag, when set, indicates that the
  1976. // security descriptor contains a system ACL pointed to by the
  1977. // Sacl field. If this flag is set and the Sacl field of the
  1978. // SECURITY_DESCRIPTOR is null, then an empty (but present)
  1979. // ACL is being specified.
  1980. //
  1981. // SE_SACL_DEFAULTED - This boolean flag, when set, indicates that the
  1982. // ACL pointed to by the Sacl field was provided by a defaulting
  1983. // mechanism rather than explicitly provided by the original
  1984. // provider of the security descriptor. This may affect the
  1985. // treatment of the ACL with respect to inheritence of an ACL.
  1986. // This flag is ignored if the SaclPresent flag is not set.
  1987. //
  1988. // SE_SELF_RELATIVE - This boolean flag, when set, indicates that the
  1989. // security descriptor is in self-relative form. In this form,
  1990. // all fields of the security descriptor are contiguous in memory
  1991. // and all pointer fields are expressed as offsets from the
  1992. // beginning of the security descriptor. This form is useful
  1993. // for treating security descriptors as opaque data structures
  1994. // for transmission in communication protocol or for storage on
  1995. // secondary media.
  1996. //
  1997. //
  1998. //
  1999. // Pictorially the structure of a security descriptor is as follows:
  2000. //
  2001. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  2002. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  2003. // +---------------------------------------------------------------+
  2004. // | Control |Reserved1 (SBZ)| Revision |
  2005. // +---------------------------------------------------------------+
  2006. // | Owner |
  2007. // +---------------------------------------------------------------+
  2008. // | Group |
  2009. // +---------------------------------------------------------------+
  2010. // | Sacl |
  2011. // +---------------------------------------------------------------+
  2012. // | Dacl |
  2013. // +---------------------------------------------------------------+
  2014. //
  2015. // In general, this data structure should be treated opaquely to ensure future
  2016. // compatibility.
  2017. //
  2018. //
  2019. type
  2020. PSECURITY_DESCRIPTOR_RELATIVE = ^SECURITY_DESCRIPTOR_RELATIVE;
  2021. {$EXTERNALSYM PSECURITY_DESCRIPTOR_RELATIVE}
  2022. _SECURITY_DESCRIPTOR_RELATIVE = record
  2023. Revision: Byte;
  2024. Sbz1: Byte;
  2025. Control: SECURITY_DESCRIPTOR_CONTROL;
  2026. Owner: DWORD;
  2027. Group: DWORD;
  2028. Sacl: DWORD;
  2029. Dacl: DWORD;
  2030. end;
  2031. {$EXTERNALSYM _SECURITY_DESCRIPTOR_RELATIVE}
  2032. SECURITY_DESCRIPTOR_RELATIVE = _SECURITY_DESCRIPTOR_RELATIVE;
  2033. {$EXTERNALSYM SECURITY_DESCRIPTOR_RELATIVE}
  2034. TSecurityDescriptorRelative = SECURITY_DESCRIPTOR_RELATIVE;
  2035. PSecurityDescriptorRelative = PSECURITY_DESCRIPTOR_RELATIVE;
  2036. PSECURITY_DESCRIPTOR = ^SECURITY_DESCRIPTOR;
  2037. {$EXTERNALSYM PSECURITY_DESCRIPTOR}
  2038. _SECURITY_DESCRIPTOR = record
  2039. Revision: Byte;
  2040. Sbz1: Byte;
  2041. Control: SECURITY_DESCRIPTOR_CONTROL;
  2042. Owner: PSID;
  2043. Group: PSID;
  2044. Sacl: PACL;
  2045. Dacl: PACL;
  2046. end;
  2047. {$EXTERNALSYM _SECURITY_DESCRIPTOR}
  2048. SECURITY_DESCRIPTOR = _SECURITY_DESCRIPTOR;
  2049. {$EXTERNALSYM SECURITY_DESCRIPTOR}
  2050. TSecurityDescriptor = SECURITY_DESCRIPTOR;
  2051. PSecurityDescriptor = PSECURITY_DESCRIPTOR;
  2052. PPSECURITY_DESCRIPTOR = ^PSECURITY_DESCRIPTOR;
  2053. {$NODEFINE PPSECURITY_DESCRIPTOR}
  2054. const
  2055. SECURITY_DESCRIPTOR_MIN_LENGTH = SizeOf(SECURITY_DESCRIPTOR);
  2056. {$EXTERNALSYM SECURITY_DESCRIPTOR_MIN_LENGTH}
  2057. // Where:
  2058. //
  2059. // Revision - Contains the revision level of the security
  2060. // descriptor. This allows this structure to be passed between
  2061. // systems or stored on disk even though it is expected to
  2062. // change in the future.
  2063. //
  2064. // Control - A set of flags which qualify the meaning of the
  2065. // security descriptor or individual fields of the security
  2066. // descriptor.
  2067. //
  2068. // Owner - is a pointer to an SID representing an object's owner.
  2069. // If this field is null, then no owner SID is present in the
  2070. // security descriptor. If the security descriptor is in
  2071. // self-relative form, then this field contains an offset to
  2072. // the SID, rather than a pointer.
  2073. //
  2074. // Group - is a pointer to an SID representing an object's primary
  2075. // group. If this field is null, then no primary group SID is
  2076. // present in the security descriptor. If the security descriptor
  2077. // is in self-relative form, then this field contains an offset to
  2078. // the SID, rather than a pointer.
  2079. //
  2080. // Sacl - is a pointer to a system ACL. This field value is only
  2081. // valid if the DaclPresent control flag is set. If the
  2082. // SaclPresent flag is set and this field is null, then a null
  2083. // ACL is specified. If the security descriptor is in
  2084. // self-relative form, then this field contains an offset to
  2085. // the ACL, rather than a pointer.
  2086. //
  2087. // Dacl - is a pointer to a discretionary ACL. This field value is
  2088. // only valid if the DaclPresent control flag is set. If the
  2089. // DaclPresent flag is set and this field is null, then a null
  2090. // ACL (unconditionally granting access) is specified. If the
  2091. // security descriptor is in self-relative form, then this field
  2092. // contains an offset to the ACL, rather than a pointer.
  2093. //
  2094. ////////////////////////////////////////////////////////////////////////
  2095. // //
  2096. // Object Type list for AccessCheckByType //
  2097. // //
  2098. ////////////////////////////////////////////////////////////////////////
  2099. type
  2100. POBJECT_TYPE_LIST = ^OBJECT_TYPE_LIST;
  2101. {$EXTERNALSYM POBJECT_TYPE_LIST}
  2102. _OBJECT_TYPE_LIST = record
  2103. Level: Word;
  2104. Sbz: Word;
  2105. ObjectType: PGUID;
  2106. end;
  2107. {$EXTERNALSYM _OBJECT_TYPE_LIST}
  2108. OBJECT_TYPE_LIST = _OBJECT_TYPE_LIST;
  2109. {$EXTERNALSYM OBJECT_TYPE_LIST}
  2110. TObjectTypeList = OBJECT_TYPE_LIST;
  2111. PObjectTypeList = POBJECT_TYPE_LIST;
  2112. //
  2113. // DS values for Level
  2114. //
  2115. const
  2116. ACCESS_OBJECT_GUID = 0;
  2117. {$EXTERNALSYM ACCESS_OBJECT_GUID}
  2118. ACCESS_PROPERTY_SET_GUID = 1;
  2119. {$EXTERNALSYM ACCESS_PROPERTY_SET_GUID}
  2120. ACCESS_PROPERTY_GUID = 2;
  2121. {$EXTERNALSYM ACCESS_PROPERTY_GUID}
  2122. ACCESS_MAX_LEVEL = 4;
  2123. {$EXTERNALSYM ACCESS_MAX_LEVEL}
  2124. //
  2125. // Parameters to NtAccessCheckByTypeAndAditAlarm
  2126. //
  2127. type
  2128. _AUDIT_EVENT_TYPE = (AuditEventObjectAccess, AuditEventDirectoryServiceAccess);
  2129. {$EXTERNALSYM _AUDIT_EVENT_TYPE}
  2130. AUDIT_EVENT_TYPE = _AUDIT_EVENT_TYPE;
  2131. {$EXTERNALSYM AUDIT_EVENT_TYPE}
  2132. PAUDIT_EVENT_TYPE = ^AUDIT_EVENT_TYPE;
  2133. {$EXTERNALSYM PAUDIT_EVENT_TYPE}
  2134. TAuditEventType = AUDIT_EVENT_TYPE;
  2135. PAuditEventType = PAUDIT_EVENT_TYPE;
  2136. const
  2137. AUDIT_ALLOW_NO_PRIVILEGE = $1;
  2138. {$EXTERNALSYM AUDIT_ALLOW_NO_PRIVILEGE}
  2139. //
  2140. // DS values for Source and ObjectTypeName
  2141. //
  2142. ACCESS_DS_SOURCE_A = 'DS';
  2143. {$EXTERNALSYM ACCESS_DS_SOURCE_A}
  2144. ACCESS_DS_SOURCE_W = WideString('DS');
  2145. {$EXTERNALSYM ACCESS_DS_SOURCE_W}
  2146. ACCESS_DS_OBJECT_TYPE_NAME_A = 'Directory Service Object';
  2147. {$EXTERNALSYM ACCESS_DS_OBJECT_TYPE_NAME_A}
  2148. ACCESS_DS_OBJECT_TYPE_NAME_W = WideString('Directory Service Object');
  2149. {$EXTERNALSYM ACCESS_DS_OBJECT_TYPE_NAME_W}
  2150. ////////////////////////////////////////////////////////////////////////
  2151. // //
  2152. // Privilege Related Data Structures //
  2153. // //
  2154. ////////////////////////////////////////////////////////////////////////
  2155. //
  2156. // Privilege attributes
  2157. //
  2158. const
  2159. SE_PRIVILEGE_ENABLED_BY_DEFAULT = $00000001;
  2160. {$EXTERNALSYM SE_PRIVILEGE_ENABLED_BY_DEFAULT}
  2161. SE_PRIVILEGE_ENABLED = $00000002;
  2162. {$EXTERNALSYM SE_PRIVILEGE_ENABLED}
  2163. SE_PRIVILEGE_REMOVED = $00000004;
  2164. {$EXTERNALSYM SE_PRIVILEGE_REMOVED}
  2165. SE_PRIVILEGE_USED_FOR_ACCESS = DWORD($80000000);
  2166. {$EXTERNALSYM SE_PRIVILEGE_USED_FOR_ACCESS}
  2167. //
  2168. // Privilege Set Control flags
  2169. //
  2170. PRIVILEGE_SET_ALL_NECESSARY = 1;
  2171. {$EXTERNALSYM PRIVILEGE_SET_ALL_NECESSARY}
  2172. //
  2173. // Privilege Set - This is defined for a privilege set of one.
  2174. // If more than one privilege is needed, then this structure
  2175. // will need to be allocated with more space.
  2176. //
  2177. // Note: don't change this structure without fixing the INITIAL_PRIVILEGE_SET
  2178. // structure (defined in se.h)
  2179. //
  2180. type
  2181. PPRIVILEGE_SET = ^PRIVILEGE_SET;
  2182. {$EXTERNALSYM PPRIVILEGE_SET}
  2183. _PRIVILEGE_SET = record
  2184. PrivilegeCount: DWORD;
  2185. Control: DWORD;
  2186. Privilege: array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
  2187. //Privilege: LUID_AND_ATTRIBUTES;
  2188. end;
  2189. {$EXTERNALSYM _PRIVILEGE_SET}
  2190. PRIVILEGE_SET = _PRIVILEGE_SET;
  2191. {$EXTERNALSYM PRIVILEGE_SET}
  2192. TPrivilegeSet = PRIVILEGE_SET;
  2193. PPrivilegeSet = PPRIVILEGE_SET;
  2194. ////////////////////////////////////////////////////////////////////////
  2195. // //
  2196. // NT Defined Privileges //
  2197. // //
  2198. ////////////////////////////////////////////////////////////////////////
  2199. const
  2200. SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
  2201. {$EXTERNALSYM SE_CREATE_TOKEN_NAME}
  2202. SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
  2203. {$EXTERNALSYM SE_ASSIGNPRIMARYTOKEN_NAME}
  2204. SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
  2205. {$EXTERNALSYM SE_LOCK_MEMORY_NAME}
  2206. SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
  2207. {$EXTERNALSYM SE_INCREASE_QUOTA_NAME}
  2208. SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
  2209. {$EXTERNALSYM SE_UNSOLICITED_INPUT_NAME}
  2210. SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
  2211. {$EXTERNALSYM SE_MACHINE_ACCOUNT_NAME}
  2212. SE_TCB_NAME = 'SeTcbPrivilege';
  2213. {$EXTERNALSYM SE_TCB_NAME}
  2214. SE_SECURITY_NAME = 'SeSecurityPrivilege';
  2215. {$EXTERNALSYM SE_SECURITY_NAME}
  2216. SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
  2217. {$EXTERNALSYM SE_TAKE_OWNERSHIP_NAME}
  2218. SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
  2219. {$EXTERNALSYM SE_LOAD_DRIVER_NAME}
  2220. SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
  2221. {$EXTERNALSYM SE_SYSTEM_PROFILE_NAME}
  2222. SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
  2223. {$EXTERNALSYM SE_SYSTEMTIME_NAME}
  2224. SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
  2225. {$EXTERNALSYM SE_PROF_SINGLE_PROCESS_NAME}
  2226. SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
  2227. {$EXTERNALSYM SE_INC_BASE_PRIORITY_NAME}
  2228. SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
  2229. {$EXTERNALSYM SE_CREATE_PAGEFILE_NAME}
  2230. SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
  2231. {$EXTERNALSYM SE_CREATE_PERMANENT_NAME}
  2232. SE_BACKUP_NAME = 'SeBackupPrivilege';
  2233. {$EXTERNALSYM SE_BACKUP_NAME}
  2234. SE_RESTORE_NAME = 'SeRestorePrivilege';
  2235. {$EXTERNALSYM SE_RESTORE_NAME}
  2236. SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
  2237. {$EXTERNALSYM SE_SHUTDOWN_NAME}
  2238. SE_DEBUG_NAME = 'SeDebugPrivilege';
  2239. {$EXTERNALSYM SE_DEBUG_NAME}
  2240. SE_AUDIT_NAME = 'SeAuditPrivilege';
  2241. {$EXTERNALSYM SE_AUDIT_NAME}
  2242. SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
  2243. {$EXTERNALSYM SE_SYSTEM_ENVIRONMENT_NAME}
  2244. SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
  2245. {$EXTERNALSYM SE_CHANGE_NOTIFY_NAME}
  2246. SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
  2247. {$EXTERNALSYM SE_REMOTE_SHUTDOWN_NAME}
  2248. SE_UNDOCK_NAME = 'SeUndockPrivilege';
  2249. {$EXTERNALSYM SE_UNDOCK_NAME}
  2250. SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
  2251. {$EXTERNALSYM SE_SYNC_AGENT_NAME}
  2252. SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
  2253. {$EXTERNALSYM SE_ENABLE_DELEGATION_NAME}
  2254. SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
  2255. {$EXTERNALSYM SE_MANAGE_VOLUME_NAME}
  2256. SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
  2257. {$EXTERNALSYM SE_IMPERSONATE_NAME}
  2258. SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
  2259. {$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
  2260. ////////////////////////////////////////////////////////////////////
  2261. // //
  2262. // Security Quality Of Service //
  2263. // //
  2264. // //
  2265. ////////////////////////////////////////////////////////////////////
  2266. //
  2267. // Impersonation Level
  2268. //
  2269. // Impersonation level is represented by a pair of bits in Windows.
  2270. // If a new impersonation level is added or lowest value is changed from
  2271. // 0 to something else, fix the Windows CreateFile call.
  2272. //
  2273. type
  2274. _SECURITY_IMPERSONATION_LEVEL = (SecurityAnonymous, SecurityIdentification,
  2275. SecurityImpersonation, SecurityDelegation);
  2276. {$EXTERNALSYM _SECURITY_IMPERSONATION_LEVEL}
  2277. SECURITY_IMPERSONATION_LEVEL = _SECURITY_IMPERSONATION_LEVEL;
  2278. {$EXTERNALSYM SECURITY_IMPERSONATION_LEVEL}
  2279. PSECURITY_IMPERSONATION_LEVEL = ^SECURITY_IMPERSONATION_LEVEL;
  2280. {$EXTERNALSYM PSECURITY_IMPERSONATION_LEVEL}
  2281. TSecurityImpersonationLevel = SECURITY_IMPERSONATION_LEVEL;
  2282. PSecurityImpersonationLevel = PSECURITY_IMPERSONATION_LEVEL;
  2283. const
  2284. SECURITY_MAX_IMPERSONATION_LEVEL = SecurityDelegation;
  2285. {$EXTERNALSYM SECURITY_MAX_IMPERSONATION_LEVEL}
  2286. SECURITY_MIN_IMPERSONATION_LEVEL = SecurityAnonymous;
  2287. {$EXTERNALSYM SECURITY_MIN_IMPERSONATION_LEVEL}
  2288. DEFAULT_IMPERSONATION_LEVEL = SecurityImpersonation;
  2289. {$EXTERNALSYM DEFAULT_IMPERSONATION_LEVEL}
  2290. function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
  2291. {$EXTERNALSYM VALID_IMPERSONATION_LEVEL}
  2292. ////////////////////////////////////////////////////////////////////
  2293. // //
  2294. // Token Object Definitions //
  2295. // //
  2296. // //
  2297. ////////////////////////////////////////////////////////////////////
  2298. //
  2299. // Token Specific Access Rights.
  2300. //
  2301. const
  2302. TOKEN_ASSIGN_PRIMARY = $0001;
  2303. {$EXTERNALSYM TOKEN_ASSIGN_PRIMARY}
  2304. TOKEN_DUPLICATE = $0002;
  2305. {$EXTERNALSYM TOKEN_DUPLICATE}
  2306. TOKEN_IMPERSONATE = $0004;
  2307. {$EXTERNALSYM TOKEN_IMPERSONATE}
  2308. TOKEN_QUERY = $0008;
  2309. {$EXTERNALSYM TOKEN_QUERY}
  2310. TOKEN_QUERY_SOURCE = $0010;
  2311. {$EXTERNALSYM TOKEN_QUERY_SOURCE}
  2312. TOKEN_ADJUST_PRIVILEGES = $0020;
  2313. {$EXTERNALSYM TOKEN_ADJUST_PRIVILEGES}
  2314. TOKEN_ADJUST_GROUPS = $0040;
  2315. {$EXTERNALSYM TOKEN_ADJUST_GROUPS}
  2316. TOKEN_ADJUST_DEFAULT = $0080;
  2317. {$EXTERNALSYM TOKEN_ADJUST_DEFAULT}
  2318. TOKEN_ADJUST_SESSIONID = $0100;
  2319. {$EXTERNALSYM TOKEN_ADJUST_SESSIONID}
  2320. TOKEN_ALL_ACCESS_P = STANDARD_RIGHTS_REQUIRED or TOKEN_ASSIGN_PRIMARY or
  2321. TOKEN_DUPLICATE or TOKEN_IMPERSONATE or TOKEN_QUERY or TOKEN_QUERY_SOURCE or
  2322. TOKEN_ADJUST_PRIVILEGES or TOKEN_ADJUST_GROUPS or TOKEN_ADJUST_DEFAULT;
  2323. {$EXTERNALSYM TOKEN_ALL_ACCESS_P}
  2324. TOKEN_ALL_ACCESS = TOKEN_ALL_ACCESS_P or TOKEN_ADJUST_SESSIONID;
  2325. {$EXTERNALSYM TOKEN_ALL_ACCESS}
  2326. TOKEN_READ = STANDARD_RIGHTS_READ or TOKEN_QUERY;
  2327. {$EXTERNALSYM TOKEN_READ}
  2328. TOKEN_WRITE = (STANDARD_RIGHTS_WRITE or TOKEN_ADJUST_PRIVILEGES or
  2329. TOKEN_ADJUST_GROUPS or TOKEN_ADJUST_DEFAULT);
  2330. {$EXTERNALSYM TOKEN_WRITE}
  2331. TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE;
  2332. {$EXTERNALSYM TOKEN_EXECUTE}
  2333. //
  2334. // Token Types
  2335. //
  2336. type
  2337. _TOKEN_TYPE = (TokenTypePad0, TokenPrimary, TokenImpersonation);
  2338. {$EXTERNALSYM _TOKEN_TYPE}
  2339. TOKEN_TYPE = _TOKEN_TYPE;
  2340. {$EXTERNALSYM TOKEN_TYPE}
  2341. PTOKEN_TYPE = ^TOKEN_TYPE;
  2342. {$EXTERNALSYM PTOKEN_TYPE}
  2343. TTokenType = TOKEN_TYPE;
  2344. PTokenType = PTOKEN_TYPE;
  2345. //
  2346. // Token Information Classes.
  2347. //
  2348. type
  2349. _TOKEN_INFORMATION_CLASS = (TokenInfoClassPad0, TokenUser, TokenGroups,
  2350. TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource,
  2351. TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids,
  2352. TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference,
  2353. TokenSandBoxInert, TokenAuditPolicy, TokenOrigin,
  2354. MaxTokenInfoClass); {MaxTokenInfoClass should always be the last enum}
  2355. {$EXTERNALSYM _TOKEN_INFORMATION_CLASS}
  2356. TOKEN_INFORMATION_CLASS = _TOKEN_INFORMATION_CLASS;
  2357. {$EXTERNALSYM TOKEN_INFORMATION_CLASS}
  2358. PTOKEN_INFORMATION_CLASS = ^TOKEN_INFORMATION_CLASS;
  2359. {$EXTERNALSYM PTOKEN_INFORMATION_CLASS}
  2360. TTokenInformationClass = TOKEN_INFORMATION_CLASS;
  2361. PTokenInformationClass = PTOKEN_INFORMATION_CLASS;
  2362. //
  2363. // Token information class structures
  2364. //
  2365. type
  2366. PTOKEN_USER = ^TOKEN_USER;
  2367. {$EXTERNALSYM PTOKEN_USER}
  2368. _TOKEN_USER = record
  2369. User: SID_AND_ATTRIBUTES;
  2370. end;
  2371. {$EXTERNALSYM _TOKEN_USER}
  2372. TOKEN_USER = _TOKEN_USER;
  2373. {$EXTERNALSYM TOKEN_USER}
  2374. TTokenUser = TOKEN_USER;
  2375. PTokenUser = PTOKEN_USER;
  2376. PTOKEN_GROUPS = ^TOKEN_GROUPS;
  2377. {$EXTERNALSYM PTOKEN_GROUPS}
  2378. _TOKEN_GROUPS = record
  2379. GroupCount: DWORD;
  2380. Groups: array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
  2381. end;
  2382. {$EXTERNALSYM _TOKEN_GROUPS}
  2383. TOKEN_GROUPS = _TOKEN_GROUPS;
  2384. {$EXTERNALSYM TOKEN_GROUPS}
  2385. TTokenGroups = TOKEN_GROUPS;
  2386. PTokenGroups = PTOKEN_GROUPS;
  2387. PTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
  2388. {$EXTERNALSYM PTOKEN_PRIVILEGES}
  2389. _TOKEN_PRIVILEGES = record
  2390. PrivilegeCount: DWORD;
  2391. Privileges: array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
  2392. end;
  2393. {$EXTERNALSYM _TOKEN_PRIVILEGES}
  2394. TOKEN_PRIVILEGES = _TOKEN_PRIVILEGES;
  2395. {$EXTERNALSYM TOKEN_PRIVILEGES}
  2396. TTokenPrivileges = TOKEN_PRIVILEGES;
  2397. PTokenPrivileges = PTOKEN_PRIVILEGES;
  2398. PTOKEN_OWNER = ^TOKEN_OWNER;
  2399. {$EXTERNALSYM PTOKEN_OWNER}
  2400. _TOKEN_OWNER = record
  2401. Owner: PSID;
  2402. end;
  2403. {$EXTERNALSYM _TOKEN_OWNER}
  2404. TOKEN_OWNER = _TOKEN_OWNER;
  2405. {$EXTERNALSYM TOKEN_OWNER}
  2406. TTokenOwner = TOKEN_OWNER;
  2407. PTokenOwner = PTOKEN_OWNER;
  2408. PTOKEN_PRIMARY_GROUP = ^TOKEN_PRIMARY_GROUP;
  2409. {$EXTERNALSYM PTOKEN_PRIMARY_GROUP}
  2410. _TOKEN_PRIMARY_GROUP = record
  2411. PrimaryGroup: PSID;
  2412. end;
  2413. {$EXTERNALSYM _TOKEN_PRIMARY_GROUP}
  2414. TOKEN_PRIMARY_GROUP = _TOKEN_PRIMARY_GROUP;
  2415. {$EXTERNALSYM TOKEN_PRIMARY_GROUP}
  2416. TTokenPrimaryGroup = TOKEN_PRIMARY_GROUP;
  2417. PTokenPrimaryGroup = PTOKEN_PRIMARY_GROUP;
  2418. PTOKEN_DEFAULT_DACL = ^TOKEN_DEFAULT_DACL;
  2419. {$EXTERNALSYM PTOKEN_DEFAULT_DACL}
  2420. _TOKEN_DEFAULT_DACL = record
  2421. DefaultDacl: PACL;
  2422. end;
  2423. {$EXTERNALSYM _TOKEN_DEFAULT_DACL}
  2424. TOKEN_DEFAULT_DACL = _TOKEN_DEFAULT_DACL;
  2425. {$EXTERNALSYM TOKEN_DEFAULT_DACL}
  2426. TTokenDefaultDacl = TOKEN_DEFAULT_DACL;
  2427. PTokenDefaultDacl = PTOKEN_DEFAULT_DACL;
  2428. _TOKEN_GROUPS_AND_PRIVILEGES = record
  2429. SidCount: DWORD;
  2430. SidLength: DWORD;
  2431. Sids: PSID_AND_ATTRIBUTES;
  2432. RestrictedSidCount: DWORD;
  2433. RestrictedSidLength: DWORD;
  2434. RestrictedSids: PSID_AND_ATTRIBUTES;
  2435. PrivilegeCount: DWORD;
  2436. PrivilegeLength: DWORD;
  2437. Privileges: PLUID_AND_ATTRIBUTES;
  2438. AuthenticationId: LUID;
  2439. end;
  2440. {$EXTERNALSYM _TOKEN_GROUPS_AND_PRIVILEGES}
  2441. TOKEN_GROUPS_AND_PRIVILEGES = _TOKEN_GROUPS_AND_PRIVILEGES;
  2442. {$EXTERNALSYM TOKEN_GROUPS_AND_PRIVILEGES}
  2443. PTOKEN_GROUPS_AND_PRIVILEGES = ^TOKEN_GROUPS_AND_PRIVILEGES;
  2444. {$EXTERNALSYM PTOKEN_GROUPS_AND_PRIVILEGES}
  2445. TTokenGroupsAndPrivileges = TOKEN_GROUPS_AND_PRIVILEGES;
  2446. PTokenGroupsAndPrivileges = PTOKEN_GROUPS_AND_PRIVILEGES;
  2447. //
  2448. // Valid bits for each TOKEN_AUDIT_POLICY policy mask field.
  2449. //
  2450. const
  2451. TOKEN_AUDIT_SUCCESS_INCLUDE = $1;
  2452. {$EXTERNALSYM TOKEN_AUDIT_SUCCESS_INCLUDE}
  2453. TOKEN_AUDIT_SUCCESS_EXCLUDE = $2;
  2454. {$EXTERNALSYM TOKEN_AUDIT_SUCCESS_EXCLUDE}
  2455. TOKEN_AUDIT_FAILURE_INCLUDE = $4;
  2456. {$EXTERNALSYM TOKEN_AUDIT_FAILURE_INCLUDE}
  2457. TOKEN_AUDIT_FAILURE_EXCLUDE = $8;
  2458. {$EXTERNALSYM TOKEN_AUDIT_FAILURE_EXCLUDE}
  2459. VALID_AUDIT_POLICY_BITS = (TOKEN_AUDIT_SUCCESS_INCLUDE or
  2460. TOKEN_AUDIT_SUCCESS_EXCLUDE or
  2461. TOKEN_AUDIT_FAILURE_INCLUDE or
  2462. TOKEN_AUDIT_FAILURE_EXCLUDE);
  2463. {$EXTERNALSYM VALID_AUDIT_POLICY_BITS}
  2464. type
  2465. _TOKEN_AUDIT_POLICY_ELEMENT = record
  2466. Category: DWORD;
  2467. PolicyMask: DWORD;
  2468. end;
  2469. {$EXTERNALSYM _TOKEN_AUDIT_POLICY_ELEMENT}
  2470. TOKEN_AUDIT_POLICY_ELEMENT = _TOKEN_AUDIT_POLICY_ELEMENT;
  2471. {$EXTERNALSYM TOKEN_AUDIT_POLICY_ELEMENT}
  2472. PTOKEN_AUDIT_POLICY_ELEMENT = ^TOKEN_AUDIT_POLICY_ELEMENT;
  2473. {$EXTERNALSYM PTOKEN_AUDIT_POLICY_ELEMENT}
  2474. TTokenAuditPolicyElement = TOKEN_AUDIT_POLICY_ELEMENT;
  2475. PTokenAuditPolicyElement = PTOKEN_AUDIT_POLICY_ELEMENT;
  2476. // TODO Implementation references AuditEventMaxType, which isn't defined anywhere
  2477. //function VALID_TOKEN_AUDIT_POLICY_ELEMENT(P: TOKEN_AUDIT_POLICY_ELEMENT): BOOL;
  2478. //{$EXTERNALSYM VALID_TOKEN_AUDIT_POLICY_ELEMENT}
  2479. type
  2480. _TOKEN_AUDIT_POLICY = record
  2481. PolicyCount: DWORD;
  2482. Policy: array [0..ANYSIZE_ARRAY - 1] of TOKEN_AUDIT_POLICY_ELEMENT;
  2483. end;
  2484. {$EXTERNALSYM _TOKEN_AUDIT_POLICY}
  2485. TOKEN_AUDIT_POLICY = _TOKEN_AUDIT_POLICY;
  2486. {$EXTERNALSYM TOKEN_AUDIT_POLICY}
  2487. PTOKEN_AUDIT_POLICY = ^TOKEN_AUDIT_POLICY;
  2488. {$EXTERNALSYM PTOKEN_AUDIT_POLICY}
  2489. TTokenAuditPolicy = TOKEN_AUDIT_POLICY;
  2490. PTokenAuditPolicy = PTOKEN_AUDIT_POLICY;
  2491. function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
  2492. {$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE}
  2493. function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
  2494. {$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE_BY_COUNT}
  2495. const
  2496. TOKEN_SOURCE_LENGTH = 8;
  2497. {$EXTERNALSYM TOKEN_SOURCE_LENGTH}
  2498. type
  2499. PTOKEN_SOURCE = ^TOKEN_SOURCE;
  2500. {$EXTERNALSYM PTOKEN_SOURCE}
  2501. _TOKEN_SOURCE = record
  2502. SourceName: array [0..TOKEN_SOURCE_LENGTH - 1] of CHAR;
  2503. SourceIdentifier: LUID;
  2504. end;
  2505. {$EXTERNALSYM _TOKEN_SOURCE}
  2506. TOKEN_SOURCE = _TOKEN_SOURCE;
  2507. {$EXTERNALSYM TOKEN_SOURCE}
  2508. TTokenSource = TOKEN_SOURCE;
  2509. PTokenSource = PTOKEN_SOURCE;
  2510. PTOKEN_STATISTICS = ^TOKEN_STATISTICS;
  2511. {$EXTERNALSYM PTOKEN_STATISTICS}
  2512. _TOKEN_STATISTICS = record
  2513. TokenId: LUID;
  2514. AuthenticationId: LUID;
  2515. ExpirationTime: LARGE_INTEGER;
  2516. TokenType: TOKEN_TYPE;
  2517. ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
  2518. DynamicCharged: DWORD;
  2519. DynamicAvailable: DWORD;
  2520. GroupCount: DWORD;
  2521. PrivilegeCount: DWORD;
  2522. ModifiedId: LUID;
  2523. end;
  2524. {$EXTERNALSYM _TOKEN_STATISTICS}
  2525. TOKEN_STATISTICS = _TOKEN_STATISTICS;
  2526. {$EXTERNALSYM TOKEN_STATISTICS}
  2527. TTokenStatistics = TOKEN_STATISTICS;
  2528. PTokenStatistics = PTOKEN_STATISTICS;
  2529. PTOKEN_CONTROL = ^TOKEN_CONTROL;
  2530. {$EXTERNALSYM PTOKEN_CONTROL}
  2531. _TOKEN_CONTROL = record
  2532. TokenId: LUID;
  2533. AuthenticationId: LUID;
  2534. ModifiedId: LUID;
  2535. TokenSource: TOKEN_SOURCE;
  2536. end;
  2537. {$EXTERNALSYM _TOKEN_CONTROL}
  2538. TOKEN_CONTROL = _TOKEN_CONTROL;
  2539. {$EXTERNALSYM TOKEN_CONTROL}
  2540. TTokenControl = TOKEN_CONTROL;
  2541. PTokenControl = PTOKEN_CONTROL;
  2542. _TOKEN_ORIGIN = record
  2543. OriginatingLogonSession: LUID;
  2544. end;
  2545. {$EXTERNALSYM _TOKEN_ORIGIN}
  2546. TOKEN_ORIGIN = _TOKEN_ORIGIN;
  2547. {$EXTERNALSYM TOKEN_ORIGIN}
  2548. PTOKEN_ORIGIN = ^TOKEN_ORIGIN;
  2549. {$EXTERNALSYM PTOKEN_ORIGIN}
  2550. TTokenOrigin = TOKEN_ORIGIN;
  2551. PTokenOrigin = PTOKEN_ORIGIN;
  2552. //
  2553. // Security Tracking Mode
  2554. //
  2555. const
  2556. SECURITY_DYNAMIC_TRACKING = True;
  2557. {$EXTERNALSYM SECURITY_DYNAMIC_TRACKING}
  2558. SECURITY_STATIC_TRACKING = False;
  2559. {$EXTERNALSYM SECURITY_STATIC_TRACKING}
  2560. type
  2561. SECURITY_CONTEXT_TRACKING_MODE = ByteBool;
  2562. {$EXTERNALSYM SECURITY_CONTEXT_TRACKING_MODE}
  2563. PSECURITY_CONTEXT_TRACKING_MODE = ^SECURITY_CONTEXT_TRACKING_MODE;
  2564. {$EXTERNALSYM PSECURITY_CONTEXT_TRACKING_MODE}
  2565. //
  2566. // Quality Of Service
  2567. //
  2568. PSECURITY_QUALITY_OF_SERVICE = ^SECURITY_QUALITY_OF_SERVICE;
  2569. {$EXTERNALSYM PSECURITY_QUALITY_OF_SERVICE}
  2570. _SECURITY_QUALITY_OF_SERVICE = record
  2571. Length: DWORD;
  2572. ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
  2573. ContextTrackingMode: SECURITY_CONTEXT_TRACKING_MODE;
  2574. EffectiveOnly: ByteBool;
  2575. end;
  2576. {$EXTERNALSYM _SECURITY_QUALITY_OF_SERVICE}
  2577. SECURITY_QUALITY_OF_SERVICE = _SECURITY_QUALITY_OF_SERVICE;
  2578. {$EXTERNALSYM SECURITY_QUALITY_OF_SERVICE}
  2579. TSecurityQualityOfService = SECURITY_QUALITY_OF_SERVICE;
  2580. PSecurityQualityOfService = PSECURITY_QUALITY_OF_SERVICE;
  2581. //
  2582. // Used to represent information related to a thread impersonation
  2583. //
  2584. PSE_IMPERSONATION_STATE = ^SE_IMPERSONATION_STATE;
  2585. {$EXTERNALSYM PSE_IMPERSONATION_STATE}
  2586. _SE_IMPERSONATION_STATE = record
  2587. Token: PACCESS_TOKEN;
  2588. CopyOnOpen: ByteBool;
  2589. EffectiveOnly: ByteBool;
  2590. Level: SECURITY_IMPERSONATION_LEVEL;
  2591. end;
  2592. {$EXTERNALSYM _SE_IMPERSONATION_STATE}
  2593. SE_IMPERSONATION_STATE = _SE_IMPERSONATION_STATE;
  2594. {$EXTERNALSYM SE_IMPERSONATION_STATE}
  2595. TSeImpersonationState = SE_IMPERSONATION_STATE;
  2596. PSeImpersonationState = PSE_IMPERSONATION_STATE;
  2597. const
  2598. DISABLE_MAX_PRIVILEGE = $1;
  2599. {$EXTERNALSYM DISABLE_MAX_PRIVILEGE}
  2600. SANDBOX_INERT = $2;
  2601. {$EXTERNALSYM SANDBOX_INERT}
  2602. type
  2603. SECURITY_INFORMATION = DWORD;
  2604. {$EXTERNALSYM SECURITY_INFORMATION}
  2605. PSECURITY_INFORMATION = ^SECURITY_INFORMATION;
  2606. {$EXTERNALSYM PSECURITY_INFORMATION}
  2607. TSecurityInformation = SECURITY_INFORMATION;
  2608. PSecurityInformation = PSECURITY_INFORMATION;
  2609. const
  2610. OWNER_SECURITY_INFORMATION = $00000001;
  2611. {$EXTERNALSYM OWNER_SECURITY_INFORMATION}
  2612. GROUP_SECURITY_INFORMATION = $00000002;
  2613. {$EXTERNALSYM GROUP_SECURITY_INFORMATION}
  2614. DACL_SECURITY_INFORMATION = $00000004;
  2615. {$EXTERNALSYM DACL_SECURITY_INFORMATION}
  2616. SACL_SECURITY_INFORMATION = $00000008;
  2617. {$EXTERNALSYM SACL_SECURITY_INFORMATION}
  2618. PROTECTED_DACL_SECURITY_INFORMATION = $80000000;
  2619. {$EXTERNALSYM PROTECTED_DACL_SECURITY_INFORMATION}
  2620. PROTECTED_SACL_SECURITY_INFORMATION = $40000000;
  2621. {$EXTERNALSYM PROTECTED_SACL_SECURITY_INFORMATION}
  2622. UNPROTECTED_DACL_SECURITY_INFORMATION = $20000000;
  2623. {$EXTERNALSYM UNPROTECTED_DACL_SECURITY_INFORMATION}
  2624. UNPROTECTED_SACL_SECURITY_INFORMATION = $10000000;
  2625. {$EXTERNALSYM UNPROTECTED_SACL_SECURITY_INFORMATION}
  2626. PROCESS_TERMINATE = $0001;
  2627. {$EXTERNALSYM PROCESS_TERMINATE}
  2628. PROCESS_CREATE_THREAD = $0002;
  2629. {$EXTERNALSYM PROCESS_CREATE_THREAD}
  2630. PROCESS_SET_SESSIONID = $0004;
  2631. {$EXTERNALSYM PROCESS_SET_SESSIONID}
  2632. PROCESS_VM_OPERATION = $0008;
  2633. {$EXTERNALSYM PROCESS_VM_OPERATION}
  2634. PROCESS_VM_READ = $0010;
  2635. {$EXTERNALSYM PROCESS_VM_READ}
  2636. PROCESS_VM_WRITE = $0020;
  2637. {$EXTERNALSYM PROCESS_VM_WRITE}
  2638. PROCESS_DUP_HANDLE = $0040;
  2639. {$EXTERNALSYM PROCESS_DUP_HANDLE}
  2640. PROCESS_CREATE_PROCESS = $0080;
  2641. {$EXTERNALSYM PROCESS_CREATE_PROCESS}
  2642. PROCESS_SET_QUOTA = $0100;
  2643. {$EXTERNALSYM PROCESS_SET_QUOTA}
  2644. PROCESS_SET_INFORMATION = $0200;
  2645. {$EXTERNALSYM PROCESS_SET_INFORMATION}
  2646. PROCESS_QUERY_INFORMATION = $0400;
  2647. {$EXTERNALSYM PROCESS_QUERY_INFORMATION}
  2648. PROCESS_SUSPEND_RESUME = $0800;
  2649. {$EXTERNALSYM PROCESS_SUSPEND_RESUME}
  2650. PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF;
  2651. {$EXTERNALSYM PROCESS_ALL_ACCESS}
  2652. MAXIMUM_PROCESSORS = 32;
  2653. {$EXTERNALSYM MAXIMUM_PROCESSORS}
  2654. THREAD_TERMINATE = $0001;
  2655. {$EXTERNALSYM THREAD_TERMINATE}
  2656. THREAD_SUSPEND_RESUME = $0002;
  2657. {$EXTERNALSYM THREAD_SUSPEND_RESUME}
  2658. THREAD_GET_CONTEXT = $0008;
  2659. {$EXTERNALSYM THREAD_GET_CONTEXT}
  2660. THREAD_SET_CONTEXT = $0010;
  2661. {$EXTERNALSYM THREAD_SET_CONTEXT}
  2662. THREAD_SET_INFORMATION = $0020;
  2663. {$EXTERNALSYM THREAD_SET_INFORMATION}
  2664. THREAD_QUERY_INFORMATION = $0040;
  2665. {$EXTERNALSYM THREAD_QUERY_INFORMATION}
  2666. THREAD_SET_THREAD_TOKEN = $0080;
  2667. {$EXTERNALSYM THREAD_SET_THREAD_TOKEN}
  2668. THREAD_IMPERSONATE = $0100;
  2669. {$EXTERNALSYM THREAD_IMPERSONATE}
  2670. THREAD_DIRECT_IMPERSONATION = $0200;
  2671. {$EXTERNALSYM THREAD_DIRECT_IMPERSONATION}
  2672. THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3FF;
  2673. {$EXTERNALSYM THREAD_ALL_ACCESS}
  2674. JOB_OBJECT_ASSIGN_PROCESS = $0001;
  2675. {$EXTERNALSYM JOB_OBJECT_ASSIGN_PROCESS}
  2676. JOB_OBJECT_SET_ATTRIBUTES = $0002;
  2677. {$EXTERNALSYM JOB_OBJECT_SET_ATTRIBUTES}
  2678. JOB_OBJECT_QUERY = $0004;
  2679. {$EXTERNALSYM JOB_OBJECT_QUERY}
  2680. JOB_OBJECT_TERMINATE = $0008;
  2681. {$EXTERNALSYM JOB_OBJECT_TERMINATE}
  2682. JOB_OBJECT_SET_SECURITY_ATTRIBUTES = $0010;
  2683. {$EXTERNALSYM JOB_OBJECT_SET_SECURITY_ATTRIBUTES}
  2684. JOB_OBJECT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1F ;
  2685. {$EXTERNALSYM JOB_OBJECT_ALL_ACCESS}
  2686. type
  2687. _JOB_SET_ARRAY = record
  2688. JobHandle: HANDLE; // Handle to job object to insert
  2689. MemberLevel: DWORD; // Level of this job in the set. Must be > 0. Can be sparse.
  2690. Flags: DWORD; // Unused. Must be zero
  2691. end;
  2692. {$EXTERNALSYM _JOB_SET_ARRAY}
  2693. JOB_SET_ARRAY = _JOB_SET_ARRAY;
  2694. {$EXTERNALSYM JOB_SET_ARRAY}
  2695. PJOB_SET_ARRAY = ^JOB_SET_ARRAY;
  2696. {$EXTERNALSYM PJOB_SET_ARRAY}
  2697. TJobSetArray = JOB_SET_ARRAY;
  2698. PJobSetArray = PJOB_SET_ARRAY;
  2699. const
  2700. FLS_MAXIMUM_AVAILABLE = 128;
  2701. {$EXTERNALSYM FLS_MAXIMUM_AVAILABLE}
  2702. TLS_MINIMUM_AVAILABLE = 64;
  2703. {$EXTERNALSYM TLS_MINIMUM_AVAILABLE}
  2704. type
  2705. PEXCEPTION_REGISTRATION_RECORD = ^EXCEPTION_REGISTRATION_RECORD;
  2706. _EXCEPTION_REGISTRATION_RECORD = packed record
  2707. pNext: PEXCEPTION_REGISTRATION_RECORD;
  2708. pfnHandler: FARPROC;
  2709. end;
  2710. EXCEPTION_REGISTRATION_RECORD = _EXCEPTION_REGISTRATION_RECORD;
  2711. TExceptionRegistrationRecord = EXCEPTION_REGISTRATION_RECORD;
  2712. PExceptionRegistrationRecord = PEXCEPTION_REGISTRATION_RECORD;
  2713. PNT_TIB = ^NT_TIB;
  2714. {$EXTERNALSYM PNT_TIB}
  2715. _NT_TIB = record
  2716. ExceptionList: PEXCEPTION_REGISTRATION_RECORD; // 00h Head of exception record list
  2717. StackBase: PVOID; // 04h Top of user stack
  2718. StackLimit: PVOID; // 08h Base of user stack
  2719. //union // 0Ch (NT/Win95 differences)
  2720. //{
  2721. // struct // Win95 fields
  2722. // {
  2723. // WORD pvTDB; // 0Ch TDB
  2724. // WORD pvThunkSS; // 0Eh SS selector used for thunking to 16 bits
  2725. // DWORD unknown1; // 10h
  2726. // } WIN95;
  2727. //
  2728. // struct // WinNT fields
  2729. // {
  2730. SubSystemTib: PVOID; // 0Ch
  2731. Union: record // 10H
  2732. case Integer of
  2733. 0: (FiberData: PVOID);
  2734. 1: (Version: DWORD);
  2735. end;
  2736. // } WINNT;
  2737. //} TIB_UNION1;
  2738. ArbitraryUserPointer: PVOID; // 14h Available for application use
  2739. Self: PNT_TIB; // 18h Linear address of TIB structure
  2740. //union // 1Ch (NT/Win95 differences)
  2741. //{
  2742. // struct // Win95 fields
  2743. // {
  2744. // WORD TIBFlags; // 1Ch
  2745. // WORD Win16MutexCount; // 1Eh
  2746. // DWORD DebugContext; // 20h
  2747. // DWORD pCurrentPriority; // 24h
  2748. // DWORD pvQueue; // 28h Message Queue selector
  2749. // } WIN95;
  2750. //
  2751. // struct // WinNT fields
  2752. // {
  2753. unknown1: DWORD; // 1Ch
  2754. processID: DWORD; // 20h
  2755. threadID: DWORD; // 24h
  2756. unknown2: DWORD; // 28h
  2757. // } WINNT;
  2758. //} TIB_UNION2;
  2759. pvTLSArray: PVOID; // (PPVOID!) 2Ch Thread Local Storage array
  2760. //union // 30h (NT/Win95 differences)
  2761. //{
  2762. // struct // Win95 fields
  2763. // {
  2764. // PVOID* pProcess; // 30h Pointer to owning process database
  2765. // } WIN95;
  2766. //} TIB_UNION3;
  2767. end;
  2768. {$EXTERNALSYM _NT_TIB}
  2769. NT_TIB = _NT_TIB;
  2770. {$EXTERNALSYM NT_TIB}
  2771. TNtTib = NT_TIB;
  2772. PNtTib = ^TNtTib;
  2773. //
  2774. // 32 and 64 bit specific version for wow64 and the debugger
  2775. //
  2776. PNT_TIB32 = ^NT_TIB32;
  2777. {$EXTERNALSYM PNT_TIB32}
  2778. _NT_TIB32 = record
  2779. ExceptionList: DWORD;
  2780. StackBase: DWORD;
  2781. StackLimit: DWORD;
  2782. SubSystemTib: DWORD;
  2783. Union: record
  2784. case Integer of
  2785. 0: (FiberData: DWORD);
  2786. 1: (Version: DWORD);
  2787. end;
  2788. ArbitraryUserPointer: DWORD;
  2789. Self: DWORD;
  2790. end;
  2791. {$EXTERNALSYM _NT_TIB32}
  2792. NT_TIB32 = _NT_TIB32;
  2793. {$EXTERNALSYM NT_TIB32}
  2794. TNtTib32 = NT_TIB32;
  2795. PNtTib32 = ^TNtTib32;
  2796. PNT_TIB64 = ^NT_TIB64;
  2797. {$EXTERNALSYM PNT_TIB64}
  2798. _NT_TIB64 = record
  2799. ExceptionList: DWORD64;
  2800. StackBase: DWORD64;
  2801. StackLimit: DWORD64;
  2802. SubSystemTib: DWORD64;
  2803. Union: record
  2804. case Integer of
  2805. 0: (FiberData: DWORD64);
  2806. 1: (Version: DWORD);
  2807. end;
  2808. ArbitraryUserPointer: DWORD64;
  2809. Self: DWORD64;
  2810. end;
  2811. {$EXTERNALSYM _NT_TIB64}
  2812. NT_TIB64 = _NT_TIB64;
  2813. {$EXTERNALSYM NT_TIB64}
  2814. TNtTib64 = NT_TIB64;
  2815. PNtTib64 = ^TNtTib64;
  2816. //
  2817. // Define function to return the current Thread Environment Block
  2818. //
  2819. function NtCurrentTeb: PNT_TIB;
  2820. {$EXTERNALSYM NtCurrentTeb}
  2821. const
  2822. THREAD_BASE_PRIORITY_LOWRT = 15; // value that gets a thread to LowRealtime-1
  2823. {$EXTERNALSYM THREAD_BASE_PRIORITY_LOWRT}
  2824. THREAD_BASE_PRIORITY_MAX = 2; // maximum thread base priority boost
  2825. {$EXTERNALSYM THREAD_BASE_PRIORITY_MAX}
  2826. THREAD_BASE_PRIORITY_MIN = DWORD(-2); // minimum thread base priority boost
  2827. {$EXTERNALSYM THREAD_BASE_PRIORITY_MIN}
  2828. THREAD_BASE_PRIORITY_IDLE = DWORD(-15); // value that gets a thread to idle
  2829. {$EXTERNALSYM THREAD_BASE_PRIORITY_IDLE}
  2830. type
  2831. PQUOTA_LIMITS = ^QUOTA_LIMITS;
  2832. {$EXTERNALSYM PQUOTA_LIMITS}
  2833. _QUOTA_LIMITS = record
  2834. PagedPoolLimit: SIZE_T;
  2835. NonPagedPoolLimit: SIZE_T;
  2836. MinimumWorkingSetSize: SIZE_T;
  2837. MaximumWorkingSetSize: SIZE_T;
  2838. PagefileLimit: SIZE_T;
  2839. TimeLimit: LARGE_INTEGER;
  2840. end;
  2841. {$EXTERNALSYM _QUOTA_LIMITS}
  2842. QUOTA_LIMITS = _QUOTA_LIMITS;
  2843. {$EXTERNALSYM QUOTA_LIMITS}
  2844. TQuotaLimits = QUOTA_LIMITS;
  2845. PQuotaLimits = PQUOTA_LIMITS;
  2846. const
  2847. QUOTA_LIMITS_HARDWS_MIN_ENABLE = $00000001;
  2848. {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MIN_ENABLE}
  2849. QUOTA_LIMITS_HARDWS_MIN_DISABLE = $00000002;
  2850. {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MIN_DISABLE}
  2851. QUOTA_LIMITS_HARDWS_MAX_ENABLE = $00000004;
  2852. {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MAX_ENABLE}
  2853. QUOTA_LIMITS_HARDWS_MAX_DISABLE = $00000008;
  2854. {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MAX_DISABLE}
  2855. type
  2856. _QUOTA_LIMITS_EX = record
  2857. PagedPoolLimit: SIZE_T;
  2858. NonPagedPoolLimit: SIZE_T;
  2859. MinimumWorkingSetSize: SIZE_T;
  2860. MaximumWorkingSetSize: SIZE_T;
  2861. PagefileLimit: SIZE_T;
  2862. TimeLimit: LARGE_INTEGER;
  2863. Reserved1: SIZE_T;
  2864. Reserved2: SIZE_T;
  2865. Reserved3: SIZE_T;
  2866. Reserved4: SIZE_T;
  2867. Flags: DWORD;
  2868. Reserved5: DWORD;
  2869. end;
  2870. {$EXTERNALSYM _QUOTA_LIMITS_EX}
  2871. QUOTA_LIMITS_EX = _QUOTA_LIMITS_EX;
  2872. {$EXTERNALSYM QUOTA_LIMITS_EX}
  2873. PQUOTA_LIMITS_EX = ^QUOTA_LIMITS_EX;
  2874. {$EXTERNALSYM PQUOTA_LIMITS_EX}
  2875. TQuotaLimitsEx = QUOTA_LIMITS_EX;
  2876. PQuotaLimitsEx = PQUOTA_LIMITS_EX;
  2877. PIO_COUNTERS = ^IO_COUNTERS;
  2878. {$EXTERNALSYM PIO_COUNTERS}
  2879. _IO_COUNTERS = record
  2880. ReadOperationCount: Int64;
  2881. WriteOperationCount: Int64;
  2882. OtherOperationCount: Int64;
  2883. ReadTransferCount: Int64;
  2884. WriteTransferCount: Int64;
  2885. OtherTransferCount: Int64;
  2886. end;
  2887. {$EXTERNALSYM _IO_COUNTERS}
  2888. IO_COUNTERS = _IO_COUNTERS;
  2889. {$EXTERNALSYM IO_COUNTERS}
  2890. TIoCounters = IO_COUNTERS;
  2891. PIoCounters = PIO_COUNTERS;
  2892. PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = ^JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
  2893. {$EXTERNALSYM PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
  2894. _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = record
  2895. TotalUserTime: LARGE_INTEGER;
  2896. TotalKernelTime: LARGE_INTEGER;
  2897. ThisPeriodTotalUserTime: LARGE_INTEGER;
  2898. ThisPeriodTotalKernelTime: LARGE_INTEGER;
  2899. TotalPageFaultCount: DWORD;
  2900. TotalProcesses: DWORD;
  2901. ActiveProcesses: DWORD;
  2902. TotalTerminatedProcesses: DWORD;
  2903. end;
  2904. {$EXTERNALSYM _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
  2905. JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
  2906. {$EXTERNALSYM JOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
  2907. TJobObjectBasicAccountingInformation = JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
  2908. PJobObjectBasicAccountingInformation = PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
  2909. PJOBOBJECT_BASIC_LIMIT_INFORMATION = ^JOBOBJECT_BASIC_LIMIT_INFORMATION;
  2910. {$EXTERNALSYM PJOBOBJECT_BASIC_LIMIT_INFORMATION}
  2911. _JOBOBJECT_BASIC_LIMIT_INFORMATION = record
  2912. PerProcessUserTimeLimit: LARGE_INTEGER;
  2913. PerJobUserTimeLimit: LARGE_INTEGER;
  2914. LimitFlags: DWORD;
  2915. MinimumWorkingSetSize: SIZE_T;
  2916. MaximumWorkingSetSize: SIZE_T;
  2917. ActiveProcessLimit: DWORD;
  2918. Affinity: ULONG_PTR;
  2919. PriorityClass: DWORD;
  2920. SchedulingClass: DWORD;
  2921. end;
  2922. {$EXTERNALSYM _JOBOBJECT_BASIC_LIMIT_INFORMATION}
  2923. JOBOBJECT_BASIC_LIMIT_INFORMATION = _JOBOBJECT_BASIC_LIMIT_INFORMATION;
  2924. {$EXTERNALSYM JOBOBJECT_BASIC_LIMIT_INFORMATION}
  2925. TJobObjectBasicLimitInformation = JOBOBJECT_BASIC_LIMIT_INFORMATION;
  2926. PJobObjectBasicLimitInformation = PJOBOBJECT_BASIC_LIMIT_INFORMATION;
  2927. PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = ^JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
  2928. {$EXTERNALSYM PJOBOBJECT_EXTENDED_LIMIT_INFORMATION}
  2929. _JOBOBJECT_EXTENDED_LIMIT_INFORMATION = record
  2930. BasicLimitInformation: JOBOBJECT_BASIC_LIMIT_INFORMATION;
  2931. IoInfo: IO_COUNTERS;
  2932. ProcessMemoryLimit: SIZE_T;
  2933. JobMemoryLimit: SIZE_T;
  2934. PeakProcessMemoryUsed: SIZE_T;
  2935. PeakJobMemoryUsed: SIZE_T;
  2936. end;
  2937. {$EXTERNALSYM _JOBOBJECT_EXTENDED_LIMIT_INFORMATION}
  2938. JOBOBJECT_EXTENDED_LIMIT_INFORMATION = _JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
  2939. {$EXTERNALSYM JOBOBJECT_EXTENDED_LIMIT_INFORMATION}
  2940. TJobObjectExtendedLimitInformation = JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
  2941. PJobObjectExtendedLimitInformation = PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
  2942. PJOBOBJECT_BASIC_PROCESS_ID_LIST = ^JOBOBJECT_BASIC_PROCESS_ID_LIST;
  2943. {$EXTERNALSYM PJOBOBJECT_BASIC_PROCESS_ID_LIST}
  2944. _JOBOBJECT_BASIC_PROCESS_ID_LIST = record
  2945. NumberOfAssignedProcesses: DWORD;
  2946. NumberOfProcessIdsInList: DWORD;
  2947. ProcessIdList: array [0..0] of ULONG_PTR;
  2948. end;
  2949. {$EXTERNALSYM _JOBOBJECT_BASIC_PROCESS_ID_LIST}
  2950. JOBOBJECT_BASIC_PROCESS_ID_LIST = _JOBOBJECT_BASIC_PROCESS_ID_LIST;
  2951. {$EXTERNALSYM JOBOBJECT_BASIC_PROCESS_ID_LIST}
  2952. TJobObjectBasicProcessIdList = JOBOBJECT_BASIC_PROCESS_ID_LIST;
  2953. PJobObjectBasicProcessIdList = PJOBOBJECT_BASIC_PROCESS_ID_LIST;
  2954. PJOBOBJECT_BASIC_UI_RESTRICTIONS = ^JOBOBJECT_BASIC_UI_RESTRICTIONS;
  2955. {$EXTERNALSYM PJOBOBJECT_BASIC_UI_RESTRICTIONS}
  2956. _JOBOBJECT_BASIC_UI_RESTRICTIONS = record
  2957. UIRestrictionsClass: DWORD;
  2958. end;
  2959. {$EXTERNALSYM _JOBOBJECT_BASIC_UI_RESTRICTIONS}
  2960. JOBOBJECT_BASIC_UI_RESTRICTIONS = _JOBOBJECT_BASIC_UI_RESTRICTIONS;
  2961. {$EXTERNALSYM JOBOBJECT_BASIC_UI_RESTRICTIONS}
  2962. TJobObjectBasicUiRestrictions = JOBOBJECT_BASIC_UI_RESTRICTIONS;
  2963. PJobObjectBasicUiRestrictions = PJOBOBJECT_BASIC_UI_RESTRICTIONS;
  2964. PJOBOBJECT_SECURITY_LIMIT_INFORMATION = ^JOBOBJECT_SECURITY_LIMIT_INFORMATION;
  2965. {$EXTERNALSYM PJOBOBJECT_SECURITY_LIMIT_INFORMATION}
  2966. _JOBOBJECT_SECURITY_LIMIT_INFORMATION = record
  2967. SecurityLimitFlags : DWORD;
  2968. JobToken : THandle;
  2969. SidsToDisable : PTOKEN_GROUPS;
  2970. PrivilegesToDelete : PTOKEN_PRIVILEGES;
  2971. RestrictedSids : PTOKEN_GROUPS;
  2972. end;
  2973. {$EXTERNALSYM _JOBOBJECT_SECURITY_LIMIT_INFORMATION}
  2974. JOBOBJECT_SECURITY_LIMIT_INFORMATION = _JOBOBJECT_SECURITY_LIMIT_INFORMATION;
  2975. {$EXTERNALSYM JOBOBJECT_SECURITY_LIMIT_INFORMATION}
  2976. TJobObjectSecurityLimitInformation = JOBOBJECT_SECURITY_LIMIT_INFORMATION;
  2977. PJobObjectSecurityLimitInformation = PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
  2978. PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = ^JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
  2979. {$EXTERNALSYM PJOBOBJECT_END_OF_JOB_TIME_INFORMATION}
  2980. _JOBOBJECT_END_OF_JOB_TIME_INFORMATION = record
  2981. EndOfJobTimeAction: DWORD;
  2982. end;
  2983. {$EXTERNALSYM _JOBOBJECT_END_OF_JOB_TIME_INFORMATION}
  2984. JOBOBJECT_END_OF_JOB_TIME_INFORMATION = _JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
  2985. {$EXTERNALSYM JOBOBJECT_END_OF_JOB_TIME_INFORMATION}
  2986. TJobObjectEndOfJobTimeInformation = JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
  2987. PJobObjectEndOfJobTimeInformation = PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
  2988. PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = ^JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
  2989. {$EXTERNALSYM PJOBOBJECT_ASSOCIATE_COMPLETION_PORT}
  2990. _JOBOBJECT_ASSOCIATE_COMPLETION_PORT = record
  2991. CompletionKey: Pointer;
  2992. CompletionPort: THandle;
  2993. end;
  2994. {$EXTERNALSYM _JOBOBJECT_ASSOCIATE_COMPLETION_PORT}
  2995. JOBOBJECT_ASSOCIATE_COMPLETION_PORT = _JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
  2996. {$EXTERNALSYM JOBOBJECT_ASSOCIATE_COMPLETION_PORT}
  2997. TJobObjectAssociateCompletionPort = JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
  2998. PJobObjectAssociateCompletionPort = PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
  2999. PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = ^JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
  3000. {$EXTERNALSYM PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
  3001. _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = record
  3002. BasicInfo: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
  3003. IoInfo: IO_COUNTERS;
  3004. end;
  3005. {$EXTERNALSYM _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
  3006. JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
  3007. {$EXTERNALSYM JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
  3008. TJobObjectBasicAndIoAccountingInformation = JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
  3009. PJobObjectBasicAndIoAccountingInformation = PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
  3010. _JOBOBJECT_JOBSET_INFORMATION = record
  3011. MemberLevel: DWORD;
  3012. end;
  3013. {$EXTERNALSYM _JOBOBJECT_JOBSET_INFORMATION}
  3014. JOBOBJECT_JOBSET_INFORMATION = _JOBOBJECT_JOBSET_INFORMATION;
  3015. {$EXTERNALSYM JOBOBJECT_JOBSET_INFORMATION}
  3016. PJOBOBJECT_JOBSET_INFORMATION = ^JOBOBJECT_JOBSET_INFORMATION;
  3017. {$EXTERNALSYM PJOBOBJECT_JOBSET_INFORMATION}
  3018. TJobObjectSetInformation = JOBOBJECT_JOBSET_INFORMATION;
  3019. PJobObjectSetInformation = PJOBOBJECT_JOBSET_INFORMATION;
  3020. const
  3021. JOB_OBJECT_TERMINATE_AT_END_OF_JOB = 0;
  3022. {$EXTERNALSYM JOB_OBJECT_TERMINATE_AT_END_OF_JOB}
  3023. JOB_OBJECT_POST_AT_END_OF_JOB = 1;
  3024. {$EXTERNALSYM JOB_OBJECT_POST_AT_END_OF_JOB}
  3025. //
  3026. // Completion Port Messages for job objects
  3027. //
  3028. // These values are returned via the lpNumberOfBytesTransferred parameter
  3029. //
  3030. JOB_OBJECT_MSG_END_OF_JOB_TIME = 1;
  3031. {$EXTERNALSYM JOB_OBJECT_MSG_END_OF_JOB_TIME}
  3032. JOB_OBJECT_MSG_END_OF_PROCESS_TIME = 2;
  3033. {$EXTERNALSYM JOB_OBJECT_MSG_END_OF_PROCESS_TIME}
  3034. JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT = 3;
  3035. {$EXTERNALSYM JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT}
  3036. JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO = 4;
  3037. {$EXTERNALSYM JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO}
  3038. JOB_OBJECT_MSG_NEW_PROCESS = 6;
  3039. {$EXTERNALSYM JOB_OBJECT_MSG_NEW_PROCESS}
  3040. JOB_OBJECT_MSG_EXIT_PROCESS = 7;
  3041. {$EXTERNALSYM JOB_OBJECT_MSG_EXIT_PROCESS}
  3042. JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS = 8;
  3043. {$EXTERNALSYM JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS}
  3044. JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT = 9;
  3045. {$EXTERNALSYM JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT}
  3046. JOB_OBJECT_MSG_JOB_MEMORY_LIMIT = 10;
  3047. {$EXTERNALSYM JOB_OBJECT_MSG_JOB_MEMORY_LIMIT}
  3048. //
  3049. // Basic Limits
  3050. //
  3051. JOB_OBJECT_LIMIT_WORKINGSET = $00000001;
  3052. {$EXTERNALSYM JOB_OBJECT_LIMIT_WORKINGSET}
  3053. JOB_OBJECT_LIMIT_PROCESS_TIME = $00000002;
  3054. {$EXTERNALSYM JOB_OBJECT_LIMIT_PROCESS_TIME}
  3055. JOB_OBJECT_LIMIT_JOB_TIME = $00000004;
  3056. {$EXTERNALSYM JOB_OBJECT_LIMIT_JOB_TIME}
  3057. JOB_OBJECT_LIMIT_ACTIVE_PROCESS = $00000008;
  3058. {$EXTERNALSYM JOB_OBJECT_LIMIT_ACTIVE_PROCESS}
  3059. JOB_OBJECT_LIMIT_AFFINITY = $00000010;
  3060. {$EXTERNALSYM JOB_OBJECT_LIMIT_AFFINITY}
  3061. JOB_OBJECT_LIMIT_PRIORITY_CLASS = $00000020;
  3062. {$EXTERNALSYM JOB_OBJECT_LIMIT_PRIORITY_CLASS}
  3063. JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = $00000040;
  3064. {$EXTERNALSYM JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME}
  3065. JOB_OBJECT_LIMIT_SCHEDULING_CLASS = $00000080;
  3066. {$EXTERNALSYM JOB_OBJECT_LIMIT_SCHEDULING_CLASS}
  3067. //
  3068. // Extended Limits
  3069. //
  3070. JOB_OBJECT_LIMIT_PROCESS_MEMORY = $00000100;
  3071. {$EXTERNALSYM JOB_OBJECT_LIMIT_PROCESS_MEMORY}
  3072. JOB_OBJECT_LIMIT_JOB_MEMORY = $00000200;
  3073. {$EXTERNALSYM JOB_OBJECT_LIMIT_JOB_MEMORY}
  3074. JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = $00000400;
  3075. {$EXTERNALSYM JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION}
  3076. JOB_OBJECT_LIMIT_BREAKAWAY_OK = $00000800;
  3077. {$EXTERNALSYM JOB_OBJECT_LIMIT_BREAKAWAY_OK}
  3078. JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = $00001000;
  3079. {$EXTERNALSYM JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK}
  3080. JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = $00002000;
  3081. {$EXTERNALSYM JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE}
  3082. JOB_OBJECT_LIMIT_RESERVED2 = $00004000;
  3083. {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED2}
  3084. JOB_OBJECT_LIMIT_RESERVED3 = $00008000;
  3085. {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED3}
  3086. JOB_OBJECT_LIMIT_RESERVED4 = $00010000;
  3087. {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED4}
  3088. JOB_OBJECT_LIMIT_RESERVED5 = $00020000;
  3089. {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED5}
  3090. JOB_OBJECT_LIMIT_RESERVED6 = $00040000;
  3091. {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED6}
  3092. JOB_OBJECT_LIMIT_VALID_FLAGS = $0007ffff;
  3093. {$EXTERNALSYM JOB_OBJECT_LIMIT_VALID_FLAGS}
  3094. JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS = $000000ff;
  3095. {$EXTERNALSYM JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS}
  3096. JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS = $00003fff;
  3097. {$EXTERNALSYM JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS}
  3098. JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS = $0007ffff;
  3099. {$EXTERNALSYM JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS}
  3100. //
  3101. // UI restrictions for jobs
  3102. //
  3103. JOB_OBJECT_UILIMIT_NONE = $00000000;
  3104. {$EXTERNALSYM JOB_OBJECT_UILIMIT_NONE}
  3105. JOB_OBJECT_UILIMIT_HANDLES = $00000001;
  3106. {$EXTERNALSYM JOB_OBJECT_UILIMIT_HANDLES}
  3107. JOB_OBJECT_UILIMIT_READCLIPBOARD = $00000002;
  3108. {$EXTERNALSYM JOB_OBJECT_UILIMIT_READCLIPBOARD}
  3109. JOB_OBJECT_UILIMIT_WRITECLIPBOARD = $00000004;
  3110. {$EXTERNALSYM JOB_OBJECT_UILIMIT_WRITECLIPBOARD}
  3111. JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = $00000008;
  3112. {$EXTERNALSYM JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS}
  3113. JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = $00000010;
  3114. {$EXTERNALSYM JOB_OBJECT_UILIMIT_DISPLAYSETTINGS}
  3115. JOB_OBJECT_UILIMIT_GLOBALATOMS = $00000020;
  3116. {$EXTERNALSYM JOB_OBJECT_UILIMIT_GLOBALATOMS}
  3117. JOB_OBJECT_UILIMIT_DESKTOP = $00000040;
  3118. {$EXTERNALSYM JOB_OBJECT_UILIMIT_DESKTOP}
  3119. JOB_OBJECT_UILIMIT_EXITWINDOWS = $00000080;
  3120. {$EXTERNALSYM JOB_OBJECT_UILIMIT_EXITWINDOWS}
  3121. JOB_OBJECT_UILIMIT_ALL = $000000FF;
  3122. {$EXTERNALSYM JOB_OBJECT_UILIMIT_ALL}
  3123. JOB_OBJECT_UI_VALID_FLAGS = $000000FF;
  3124. {$EXTERNALSYM JOB_OBJECT_UI_VALID_FLAGS}
  3125. JOB_OBJECT_SECURITY_NO_ADMIN = $00000001;
  3126. {$EXTERNALSYM JOB_OBJECT_SECURITY_NO_ADMIN}
  3127. JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = $00000002;
  3128. {$EXTERNALSYM JOB_OBJECT_SECURITY_RESTRICTED_TOKEN}
  3129. JOB_OBJECT_SECURITY_ONLY_TOKEN = $00000004;
  3130. {$EXTERNALSYM JOB_OBJECT_SECURITY_ONLY_TOKEN}
  3131. JOB_OBJECT_SECURITY_FILTER_TOKENS = $00000008;
  3132. {$EXTERNALSYM JOB_OBJECT_SECURITY_FILTER_TOKENS}
  3133. JOB_OBJECT_SECURITY_VALID_FLAGS = $0000000f;
  3134. {$EXTERNALSYM JOB_OBJECT_SECURITY_VALID_FLAGS}
  3135. type
  3136. _JOBOBJECTINFOCLASS = (
  3137. JobObjectInfoClassPadding0,
  3138. JobObjectBasicAccountingInformation,
  3139. JobObjectBasicLimitInformation,
  3140. JobObjectBasicProcessIdList,
  3141. JobObjectBasicUIRestrictions,
  3142. JobObjectSecurityLimitInformation,
  3143. JobObjectEndOfJobTimeInformation,
  3144. JobObjectAssociateCompletionPortInformation,
  3145. JobObjectBasicAndIoAccountingInformation,
  3146. JobObjectExtendedLimitInformation,
  3147. JobObjectJobSetInformation,
  3148. MaxJobObjectInfoClass);
  3149. {$EXTERNALSYM _JOBOBJECTINFOCLASS}
  3150. JOBOBJECTINFOCLASS = _JOBOBJECTINFOCLASS;
  3151. {$EXTERNALSYM JOBOBJECTINFOCLASS}
  3152. TJobObjectInfoClass = JOBOBJECTINFOCLASS;
  3153. const
  3154. EVENT_MODIFY_STATE = $0002;
  3155. {$EXTERNALSYM EVENT_MODIFY_STATE}
  3156. EVENT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3;
  3157. {$EXTERNALSYM EVENT_ALL_ACCESS}
  3158. MUTANT_QUERY_STATE = $0001;
  3159. {$EXTERNALSYM MUTANT_QUERY_STATE}
  3160. MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or MUTANT_QUERY_STATE;
  3161. {$EXTERNALSYM MUTANT_ALL_ACCESS}
  3162. SEMAPHORE_MODIFY_STATE = $0002;
  3163. {$EXTERNALSYM SEMAPHORE_MODIFY_STATE}
  3164. SEMAPHORE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3;
  3165. {$EXTERNALSYM SEMAPHORE_ALL_ACCESS}
  3166. //
  3167. // Timer Specific Access Rights.
  3168. //
  3169. TIMER_QUERY_STATE = $0001;
  3170. {$EXTERNALSYM TIMER_QUERY_STATE}
  3171. TIMER_MODIFY_STATE = $0002;
  3172. {$EXTERNALSYM TIMER_MODIFY_STATE}
  3173. TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or TIMER_QUERY_STATE or TIMER_MODIFY_STATE;
  3174. {$EXTERNALSYM TIMER_ALL_ACCESS}
  3175. TIME_ZONE_ID_UNKNOWN = 0;
  3176. {$EXTERNALSYM TIME_ZONE_ID_UNKNOWN}
  3177. TIME_ZONE_ID_STANDARD = 1;
  3178. {$EXTERNALSYM TIME_ZONE_ID_STANDARD}
  3179. TIME_ZONE_ID_DAYLIGHT = 2;
  3180. {$EXTERNALSYM TIME_ZONE_ID_DAYLIGHT}
  3181. type
  3182. _LOGICAL_PROCESSOR_RELATIONSHIP = (RelationProcessorCore, RelationNumaNode);
  3183. {$EXTERNALSYM _LOGICAL_PROCESSOR_RELATIONSHIP}
  3184. LOGICAL_PROCESSOR_RELATIONSHIP = _LOGICAL_PROCESSOR_RELATIONSHIP;
  3185. {$EXTERNALSYM LOGICAL_PROCESSOR_RELATIONSHIP}
  3186. TLogicalProcessorRelationship = LOGICAL_PROCESSOR_RELATIONSHIP;
  3187. const
  3188. LTP_PC_SMT = $1;
  3189. {$EXTERNALSYM LTP_PC_SMT}
  3190. type
  3191. _SYSTEM_LOGICAL_PROCESSOR_INFORMATION = record
  3192. ProcessorMask: ULONG_PTR;
  3193. Relationship: LOGICAL_PROCESSOR_RELATIONSHIP;
  3194. case Integer of
  3195. 0: (Flags: BYTE); // ProcessorCore
  3196. 1: (NodeNumber: DWORD); // NumaNode
  3197. 2: (Reserved: array [0..1] of ULONGLONG);
  3198. end;
  3199. {$EXTERNALSYM _SYSTEM_LOGICAL_PROCESSOR_INFORMATION}
  3200. SYSTEM_LOGICAL_PROCESSOR_INFORMATION = _SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
  3201. {$EXTERNALSYM SYSTEM_LOGICAL_PROCESSOR_INFORMATION}
  3202. PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = ^SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
  3203. TSystemLogicalProcessorInformation = SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
  3204. PSystemLogicalProcessorInformation = PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
  3205. const
  3206. PROCESSOR_INTEL_386 = 386;
  3207. {$EXTERNALSYM PROCESSOR_INTEL_386}
  3208. PROCESSOR_INTEL_486 = 486;
  3209. {$EXTERNALSYM PROCESSOR_INTEL_486}
  3210. PROCESSOR_INTEL_PENTIUM = 586;
  3211. {$EXTERNALSYM PROCESSOR_INTEL_PENTIUM}
  3212. PROCESSOR_INTEL_IA64 = 2200;
  3213. {$EXTERNALSYM PROCESSOR_INTEL_IA64}
  3214. PROCESSOR_AMD_X8664 = 8664;
  3215. {$EXTERNALSYM PROCESSOR_AMD_X8664}
  3216. PROCESSOR_MIPS_R4000 = 4000; // incl R4101 & R3910 for Windows CE
  3217. {$EXTERNALSYM PROCESSOR_MIPS_R4000}
  3218. PROCESSOR_ALPHA_21064 = 21064;
  3219. {$EXTERNALSYM PROCESSOR_ALPHA_21064}
  3220. PROCESSOR_PPC_601 = 601;
  3221. {$EXTERNALSYM PROCESSOR_PPC_601}
  3222. PROCESSOR_PPC_603 = 603;
  3223. {$EXTERNALSYM PROCESSOR_PPC_603}
  3224. PROCESSOR_PPC_604 = 604;
  3225. {$EXTERNALSYM PROCESSOR_PPC_604}
  3226. PROCESSOR_PPC_620 = 620;
  3227. {$EXTERNALSYM PROCESSOR_PPC_620}
  3228. PROCESSOR_HITACHI_SH3 = 10003; // Windows CE
  3229. {$EXTERNALSYM PROCESSOR_HITACHI_SH3}
  3230. PROCESSOR_HITACHI_SH3E = 10004; // Windows CE
  3231. {$EXTERNALSYM PROCESSOR_HITACHI_SH3E}
  3232. PROCESSOR_HITACHI_SH4 = 10005; // Windows CE
  3233. {$EXTERNALSYM PROCESSOR_HITACHI_SH4}
  3234. PROCESSOR_MOTOROLA_821 = 821; // Windows CE
  3235. {$EXTERNALSYM PROCESSOR_MOTOROLA_821}
  3236. PROCESSOR_SHx_SH3 = 103; // Windows CE
  3237. {$EXTERNALSYM PROCESSOR_SHx_SH3}
  3238. PROCESSOR_SHx_SH4 = 104; // Windows CE
  3239. {$EXTERNALSYM PROCESSOR_SHx_SH4}
  3240. PROCESSOR_STRONGARM = 2577; // Windows CE - 0xA11
  3241. {$EXTERNALSYM PROCESSOR_STRONGARM}
  3242. PROCESSOR_ARM720 = 1824; // Windows CE - 0x720
  3243. {$EXTERNALSYM PROCESSOR_ARM720}
  3244. PROCESSOR_ARM820 = 2080; // Windows CE - 0x820
  3245. {$EXTERNALSYM PROCESSOR_ARM820}
  3246. PROCESSOR_ARM920 = 2336; // Windows CE - 0x920
  3247. {$EXTERNALSYM PROCESSOR_ARM920}
  3248. PROCESSOR_ARM_7TDMI = 70001; // Windows CE
  3249. {$EXTERNALSYM PROCESSOR_ARM_7TDMI}
  3250. PROCESSOR_OPTIL = $494f; // MSIL
  3251. {$EXTERNALSYM PROCESSOR_OPTIL}
  3252. PROCESSOR_ARCHITECTURE_INTEL = 0;
  3253. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_INTEL}
  3254. PROCESSOR_ARCHITECTURE_MIPS = 1;
  3255. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_MIPS}
  3256. PROCESSOR_ARCHITECTURE_ALPHA = 2;
  3257. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ALPHA}
  3258. PROCESSOR_ARCHITECTURE_PPC = 3;
  3259. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_PPC}
  3260. PROCESSOR_ARCHITECTURE_SHX = 4;
  3261. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_SHX}
  3262. PROCESSOR_ARCHITECTURE_ARM = 5;
  3263. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ARM}
  3264. PROCESSOR_ARCHITECTURE_IA64 = 6;
  3265. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_IA64}
  3266. PROCESSOR_ARCHITECTURE_ALPHA64 = 7;
  3267. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ALPHA64}
  3268. PROCESSOR_ARCHITECTURE_MSIL = 8;
  3269. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_MSIL}
  3270. PROCESSOR_ARCHITECTURE_AMD64 = 9;
  3271. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_AMD64}
  3272. PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10;
  3273. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_IA32_ON_WIN64}
  3274. PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
  3275. {$EXTERNALSYM PROCESSOR_ARCHITECTURE_UNKNOWN}
  3276. PF_FLOATING_POINT_PRECISION_ERRATA = 0;
  3277. {$EXTERNALSYM PF_FLOATING_POINT_PRECISION_ERRATA}
  3278. PF_FLOATING_POINT_EMULATED = 1;
  3279. {$EXTERNALSYM PF_FLOATING_POINT_EMULATED}
  3280. PF_COMPARE_EXCHANGE_DOUBLE = 2;
  3281. {$EXTERNALSYM PF_COMPARE_EXCHANGE_DOUBLE}
  3282. PF_MMX_INSTRUCTIONS_AVAILABLE = 3;
  3283. {$EXTERNALSYM PF_MMX_INSTRUCTIONS_AVAILABLE}
  3284. PF_PPC_MOVEMEM_64BIT_OK = 4;
  3285. {$EXTERNALSYM PF_PPC_MOVEMEM_64BIT_OK}
  3286. PF_ALPHA_BYTE_INSTRUCTIONS = 5;
  3287. {$EXTERNALSYM PF_ALPHA_BYTE_INSTRUCTIONS}
  3288. PF_XMMI_INSTRUCTIONS_AVAILABLE = 6;
  3289. {$EXTERNALSYM PF_XMMI_INSTRUCTIONS_AVAILABLE}
  3290. PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7;
  3291. {$EXTERNALSYM PF_3DNOW_INSTRUCTIONS_AVAILABLE}
  3292. PF_RDTSC_INSTRUCTION_AVAILABLE = 8;
  3293. {$EXTERNALSYM PF_RDTSC_INSTRUCTION_AVAILABLE}
  3294. PF_PAE_ENABLED = 9;
  3295. {$EXTERNALSYM PF_PAE_ENABLED}
  3296. PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10;
  3297. {$EXTERNALSYM PF_XMMI64_INSTRUCTIONS_AVAILABLE}
  3298. type
  3299. PMEMORY_BASIC_INFORMATION = ^MEMORY_BASIC_INFORMATION;
  3300. {$EXTERNALSYM PMEMORY_BASIC_INFORMATION}
  3301. _MEMORY_BASIC_INFORMATION = record
  3302. BaseAddress: Pointer;
  3303. AllocationBase: Pointer;
  3304. AllocationProtect: DWORD;
  3305. RegionSize: SIZE_T;
  3306. State: DWORD;
  3307. Protect: DWORD;
  3308. Type_: DWORD;
  3309. end;
  3310. {$EXTERNALSYM _MEMORY_BASIC_INFORMATION}
  3311. MEMORY_BASIC_INFORMATION = _MEMORY_BASIC_INFORMATION;
  3312. {$EXTERNALSYM MEMORY_BASIC_INFORMATION}
  3313. TMemoryBasicInformation = MEMORY_BASIC_INFORMATION;
  3314. PMemoryBasicInformation = PMEMORY_BASIC_INFORMATION;
  3315. PMEMORY_BASIC_INFORMATION32 = ^MEMORY_BASIC_INFORMATION32;
  3316. {$EXTERNALSYM PMEMORY_BASIC_INFORMATION32}
  3317. _MEMORY_BASIC_INFORMATION32 = record
  3318. BaseAddress: DWORD;
  3319. AllocationBase: DWORD;
  3320. AllocationProtect: DWORD;
  3321. RegionSize: DWORD;
  3322. State: DWORD;
  3323. Protect: DWORD;
  3324. Type_: DWORD;
  3325. end;
  3326. {$EXTERNALSYM _MEMORY_BASIC_INFORMATION32}
  3327. MEMORY_BASIC_INFORMATION32 = _MEMORY_BASIC_INFORMATION32;
  3328. {$EXTERNALSYM MEMORY_BASIC_INFORMATION32}
  3329. TMemoryBasicInformation32 = MEMORY_BASIC_INFORMATION32;
  3330. PMemoryBasicInformation32 = PMEMORY_BASIC_INFORMATION32;
  3331. PMEMORY_BASIC_INFORMATION64 = ^MEMORY_BASIC_INFORMATION64;
  3332. {$EXTERNALSYM PMEMORY_BASIC_INFORMATION64}
  3333. _MEMORY_BASIC_INFORMATION64 = record
  3334. BaseAddress: ULONGLONG;
  3335. AllocationBase: ULONGLONG;
  3336. AllocationProtect: DWORD;
  3337. __alignment1: DWORD;
  3338. RegionSize: ULONGLONG;
  3339. State: DWORD;
  3340. Protect: DWORD;
  3341. Type_: DWORD;
  3342. __alignment2: DWORD;
  3343. end;
  3344. {$EXTERNALSYM _MEMORY_BASIC_INFORMATION64}
  3345. MEMORY_BASIC_INFORMATION64 = _MEMORY_BASIC_INFORMATION64;
  3346. {$EXTERNALSYM MEMORY_BASIC_INFORMATION64}
  3347. TMemoryBasicInformation64 = MEMORY_BASIC_INFORMATION64;
  3348. PMemoryBasicInformation64 = PMEMORY_BASIC_INFORMATION64;
  3349. const
  3350. SECTION_QUERY = $0001;
  3351. {$EXTERNALSYM SECTION_QUERY}
  3352. SECTION_MAP_WRITE = $0002;
  3353. {$EXTERNALSYM SECTION_MAP_WRITE}
  3354. SECTION_MAP_READ = $0004;
  3355. {$EXTERNALSYM SECTION_MAP_READ}
  3356. SECTION_MAP_EXECUTE = $0008;
  3357. {$EXTERNALSYM SECTION_MAP_EXECUTE}
  3358. SECTION_EXTEND_SIZE = $0010;
  3359. {$EXTERNALSYM SECTION_EXTEND_SIZE}
  3360. SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SECTION_QUERY or
  3361. SECTION_MAP_WRITE or SECTION_MAP_READ or SECTION_MAP_EXECUTE or
  3362. SECTION_EXTEND_SIZE);
  3363. {$EXTERNALSYM SECTION_ALL_ACCESS}
  3364. PAGE_NOACCESS = $01;
  3365. {$EXTERNALSYM PAGE_NOACCESS}
  3366. PAGE_READONLY = $02;
  3367. {$EXTERNALSYM PAGE_READONLY}
  3368. PAGE_READWRITE = $04;
  3369. {$EXTERNALSYM PAGE_READWRITE}
  3370. PAGE_WRITECOPY = $08;
  3371. {$EXTERNALSYM PAGE_WRITECOPY}
  3372. PAGE_EXECUTE = $10;
  3373. {$EXTERNALSYM PAGE_EXECUTE}
  3374. PAGE_EXECUTE_READ = $20;
  3375. {$EXTERNALSYM PAGE_EXECUTE_READ}
  3376. PAGE_EXECUTE_READWRITE = $40;
  3377. {$EXTERNALSYM PAGE_EXECUTE_READWRITE}
  3378. PAGE_EXECUTE_WRITECOPY = $80;
  3379. {$EXTERNALSYM PAGE_EXECUTE_WRITECOPY}
  3380. PAGE_GUARD = $100;
  3381. {$EXTERNALSYM PAGE_GUARD}
  3382. PAGE_NOCACHE = $200;
  3383. {$EXTERNALSYM PAGE_NOCACHE}
  3384. PAGE_WRITECOMBINE = $400;
  3385. {$EXTERNALSYM PAGE_WRITECOMBINE}
  3386. MEM_COMMIT = $1000;
  3387. {$EXTERNALSYM MEM_COMMIT}
  3388. MEM_RESERVE = $2000;
  3389. {$EXTERNALSYM MEM_RESERVE}
  3390. MEM_DECOMMIT = $4000;
  3391. {$EXTERNALSYM MEM_DECOMMIT}
  3392. MEM_RELEASE = $8000;
  3393. {$EXTERNALSYM MEM_RELEASE}
  3394. MEM_FREE = $10000;
  3395. {$EXTERNALSYM MEM_FREE}
  3396. MEM_PRIVATE = $20000;
  3397. {$EXTERNALSYM MEM_PRIVATE}
  3398. MEM_MAPPED = $40000;
  3399. {$EXTERNALSYM MEM_MAPPED}
  3400. MEM_RESET = $80000;
  3401. {$EXTERNALSYM MEM_RESET}
  3402. MEM_TOP_DOWN = $100000;
  3403. {$EXTERNALSYM MEM_TOP_DOWN}
  3404. MEM_WRITE_WATCH = $200000;
  3405. {$EXTERNALSYM MEM_WRITE_WATCH}
  3406. MEM_PHYSICAL = $400000;
  3407. {$EXTERNALSYM MEM_PHYSICAL}
  3408. MEM_LARGE_PAGES = $20000000;
  3409. {$EXTERNALSYM MEM_LARGE_PAGES}
  3410. MEM_4MB_PAGES = DWORD($80000000);
  3411. {$EXTERNALSYM MEM_4MB_PAGES}
  3412. SEC_FILE = $800000;
  3413. {$EXTERNALSYM SEC_FILE}
  3414. SEC_IMAGE = $1000000;
  3415. {$EXTERNALSYM SEC_IMAGE}
  3416. SEC_RESERVE = $4000000;
  3417. {$EXTERNALSYM SEC_RESERVE}
  3418. SEC_COMMIT = DWORD($8000000);
  3419. {$EXTERNALSYM SEC_COMMIT}
  3420. SEC_NOCACHE = $10000000;
  3421. {$EXTERNALSYM SEC_NOCACHE}
  3422. MEM_IMAGE = SEC_IMAGE;
  3423. {$EXTERNALSYM MEM_IMAGE}
  3424. WRITE_WATCH_FLAG_RESET = $01;
  3425. {$EXTERNALSYM WRITE_WATCH_FLAG_RESET}
  3426. //
  3427. // Define access rights to files and directories
  3428. //
  3429. //
  3430. // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
  3431. // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
  3432. // constants *MUST* always be in sync.
  3433. // The values are redefined in devioctl.h because they must be available to
  3434. // both DOS and NT.
  3435. //
  3436. FILE_READ_DATA = $0001; // file & pipe
  3437. {$EXTERNALSYM FILE_READ_DATA}
  3438. FILE_LIST_DIRECTORY = $0001; // directory
  3439. {$EXTERNALSYM FILE_LIST_DIRECTORY}
  3440. FILE_WRITE_DATA = $0002; // file & pipe
  3441. {$EXTERNALSYM FILE_WRITE_DATA}
  3442. FILE_ADD_FILE = $0002; // directory
  3443. {$EXTERNALSYM FILE_ADD_FILE}
  3444. FILE_APPEND_DATA = $0004; // file
  3445. {$EXTERNALSYM FILE_APPEND_DATA}
  3446. FILE_ADD_SUBDIRECTORY = $0004; // directory
  3447. {$EXTERNALSYM FILE_ADD_SUBDIRECTORY}
  3448. FILE_CREATE_PIPE_INSTANCE = $0004; // named pipe
  3449. {$EXTERNALSYM FILE_CREATE_PIPE_INSTANCE}
  3450. FILE_READ_EA = $0008; // file & directory
  3451. {$EXTERNALSYM FILE_READ_EA}
  3452. FILE_WRITE_EA = $0010; // file & directory
  3453. {$EXTERNALSYM FILE_WRITE_EA}
  3454. FILE_EXECUTE = $0020; // file
  3455. {$EXTERNALSYM FILE_EXECUTE}
  3456. FILE_TRAVERSE = $0020; // directory
  3457. {$EXTERNALSYM FILE_TRAVERSE}
  3458. FILE_DELETE_CHILD = $0040; // directory
  3459. {$EXTERNALSYM FILE_DELETE_CHILD}
  3460. FILE_READ_ATTRIBUTES = $0080; // all
  3461. {$EXTERNALSYM FILE_READ_ATTRIBUTES}
  3462. FILE_WRITE_ATTRIBUTES = $0100; // all
  3463. {$EXTERNALSYM FILE_WRITE_ATTRIBUTES}
  3464. FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF;
  3465. {$EXTERNALSYM FILE_ALL_ACCESS}
  3466. FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
  3467. FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
  3468. {$EXTERNALSYM FILE_GENERIC_READ}
  3469. FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
  3470. FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
  3471. {$EXTERNALSYM FILE_GENERIC_WRITE}
  3472. FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
  3473. FILE_EXECUTE or SYNCHRONIZE);
  3474. {$EXTERNALSYM FILE_GENERIC_EXECUTE}
  3475. FILE_SHARE_READ = $00000001;
  3476. {$EXTERNALSYM FILE_SHARE_READ}
  3477. FILE_SHARE_WRITE = $00000002;
  3478. {$EXTERNALSYM FILE_SHARE_WRITE}
  3479. FILE_SHARE_DELETE = $00000004;
  3480. {$EXTERNALSYM FILE_SHARE_DELETE}
  3481. FILE_ATTRIBUTE_READONLY = $00000001;
  3482. {$EXTERNALSYM FILE_ATTRIBUTE_READONLY}
  3483. FILE_ATTRIBUTE_HIDDEN = $00000002;
  3484. {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}
  3485. FILE_ATTRIBUTE_SYSTEM = $00000004;
  3486. {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}
  3487. FILE_ATTRIBUTE_DIRECTORY = $00000010;
  3488. {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}
  3489. FILE_ATTRIBUTE_ARCHIVE = $00000020;
  3490. {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}
  3491. FILE_ATTRIBUTE_DEVICE = $00000040;
  3492. {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE}
  3493. FILE_ATTRIBUTE_NORMAL = $00000080;
  3494. {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}
  3495. FILE_ATTRIBUTE_TEMPORARY = $00000100;
  3496. {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}
  3497. FILE_ATTRIBUTE_SPARSE_FILE = $00000200;
  3498. {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE}
  3499. FILE_ATTRIBUTE_REPARSE_POINT = $00000400;
  3500. {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT}
  3501. FILE_ATTRIBUTE_COMPRESSED = $00000800;
  3502. {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}
  3503. FILE_ATTRIBUTE_OFFLINE = $00001000;
  3504. {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}
  3505. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
  3506. {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED}
  3507. FILE_ATTRIBUTE_ENCRYPTED = $00004000;
  3508. {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED}
  3509. FILE_NOTIFY_CHANGE_FILE_NAME = $00000001;
  3510. {$EXTERNALSYM FILE_NOTIFY_CHANGE_FILE_NAME}
  3511. FILE_NOTIFY_CHANGE_DIR_NAME = $00000002;
  3512. {$EXTERNALSYM FILE_NOTIFY_CHANGE_DIR_NAME}
  3513. FILE_NOTIFY_CHANGE_ATTRIBUTES = $00000004;
  3514. {$EXTERNALSYM FILE_NOTIFY_CHANGE_ATTRIBUTES}
  3515. FILE_NOTIFY_CHANGE_SIZE = $00000008;
  3516. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SIZE}
  3517. FILE_NOTIFY_CHANGE_LAST_WRITE = $00000010;
  3518. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_WRITE}
  3519. FILE_NOTIFY_CHANGE_LAST_ACCESS = $00000020;
  3520. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_ACCESS}
  3521. FILE_NOTIFY_CHANGE_CREATION = $00000040;
  3522. {$EXTERNALSYM FILE_NOTIFY_CHANGE_CREATION}
  3523. FILE_NOTIFY_CHANGE_SECURITY = $00000100;
  3524. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SECURITY}
  3525. FILE_ACTION_ADDED = $00000001;
  3526. {$EXTERNALSYM FILE_ACTION_ADDED}
  3527. FILE_ACTION_REMOVED = $00000002;
  3528. {$EXTERNALSYM FILE_ACTION_REMOVED}
  3529. FILE_ACTION_MODIFIED = $00000003;
  3530. {$EXTERNALSYM FILE_ACTION_MODIFIED}
  3531. FILE_ACTION_RENAMED_OLD_NAME = $00000004;
  3532. {$EXTERNALSYM FILE_ACTION_RENAMED_OLD_NAME}
  3533. FILE_ACTION_RENAMED_NEW_NAME = $00000005;
  3534. {$EXTERNALSYM FILE_ACTION_RENAMED_NEW_NAME}
  3535. MAILSLOT_NO_MESSAGE = DWORD(-1);
  3536. {$EXTERNALSYM MAILSLOT_NO_MESSAGE}
  3537. MAILSLOT_WAIT_FOREVER = DWORD(-1);
  3538. {$EXTERNALSYM MAILSLOT_WAIT_FOREVER}
  3539. FILE_CASE_SENSITIVE_SEARCH = $00000001;
  3540. {$EXTERNALSYM FILE_CASE_SENSITIVE_SEARCH}
  3541. FILE_CASE_PRESERVED_NAMES = $00000002;
  3542. {$EXTERNALSYM FILE_CASE_PRESERVED_NAMES}
  3543. FILE_UNICODE_ON_DISK = $00000004;
  3544. {$EXTERNALSYM FILE_UNICODE_ON_DISK}
  3545. FILE_PERSISTENT_ACLS = $00000008;
  3546. {$EXTERNALSYM FILE_PERSISTENT_ACLS}
  3547. FILE_FILE_COMPRESSION = $00000010;
  3548. {$EXTERNALSYM FILE_FILE_COMPRESSION}
  3549. FILE_VOLUME_QUOTAS = $00000020;
  3550. {$EXTERNALSYM FILE_VOLUME_QUOTAS}
  3551. FILE_SUPPORTS_SPARSE_FILES = $00000040;
  3552. {$EXTERNALSYM FILE_SUPPORTS_SPARSE_FILES}
  3553. FILE_SUPPORTS_REPARSE_POINTS = $00000080;
  3554. {$EXTERNALSYM FILE_SUPPORTS_REPARSE_POINTS}
  3555. FILE_SUPPORTS_REMOTE_STORAGE = $00000100;
  3556. {$EXTERNALSYM FILE_SUPPORTS_REMOTE_STORAGE}
  3557. FILE_VOLUME_IS_COMPRESSED = $00008000;
  3558. {$EXTERNALSYM FILE_VOLUME_IS_COMPRESSED}
  3559. FILE_SUPPORTS_OBJECT_IDS = $00010000;
  3560. {$EXTERNALSYM FILE_SUPPORTS_OBJECT_IDS}
  3561. FILE_SUPPORTS_ENCRYPTION = $00020000;
  3562. {$EXTERNALSYM FILE_SUPPORTS_ENCRYPTION}
  3563. FILE_NAMED_STREAMS = $00040000;
  3564. {$EXTERNALSYM FILE_NAMED_STREAMS}
  3565. FILE_READ_ONLY_VOLUME = $00080000;
  3566. {$EXTERNALSYM FILE_READ_ONLY_VOLUME}
  3567. //
  3568. // Define the file notification information structure
  3569. //
  3570. type
  3571. PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION;
  3572. {$EXTERNALSYM PFILE_NOTIFY_INFORMATION}
  3573. _FILE_NOTIFY_INFORMATION = record
  3574. NextEntryOffset: DWORD;
  3575. Action: DWORD;
  3576. FileNameLength: DWORD;
  3577. FileName: array [0..0] of WCHAR;
  3578. end;
  3579. {$EXTERNALSYM _FILE_NOTIFY_INFORMATION}
  3580. FILE_NOTIFY_INFORMATION = _FILE_NOTIFY_INFORMATION;
  3581. {$EXTERNALSYM FILE_NOTIFY_INFORMATION}
  3582. TFileNotifyInformation = FILE_NOTIFY_INFORMATION;
  3583. PFileNotifyInformation = PFILE_NOTIFY_INFORMATION;
  3584. //
  3585. // Define segement buffer structure for scatter/gather read/write.
  3586. //
  3587. type
  3588. PFILE_SEGMENT_ELEMENT = ^FILE_SEGMENT_ELEMENT;
  3589. {$EXTERNALSYM PFILE_SEGMENT_ELEMENT}
  3590. _FILE_SEGMENT_ELEMENT = record
  3591. case Integer of
  3592. 0: (Buffer: PVOID64);
  3593. 1: (Alignment: ULONGLONG);
  3594. end;
  3595. {$EXTERNALSYM _FILE_SEGMENT_ELEMENT}
  3596. FILE_SEGMENT_ELEMENT = _FILE_SEGMENT_ELEMENT;
  3597. {$EXTERNALSYM FILE_SEGMENT_ELEMENT}
  3598. TFileSegmentElement = FILE_SEGMENT_ELEMENT;
  3599. PFileSegmentElement = PFILE_SEGMENT_ELEMENT;
  3600. //
  3601. // The reparse GUID structure is used by all 3rd party layered drivers to
  3602. // store data in a reparse point. For non-Microsoft tags, The GUID field
  3603. // cannot be GUID_NULL.
  3604. // The constraints on reparse tags are defined below.
  3605. // Microsoft tags can also be used with this format of the reparse point buffer.
  3606. //
  3607. TGenericReparseBuffer = record
  3608. DataBuffer: array [0..0] of BYTE;
  3609. end;
  3610. PREPARSE_GUID_DATA_BUFFER = ^REPARSE_GUID_DATA_BUFFER;
  3611. {$EXTERNALSYM PREPARSE_GUID_DATA_BUFFER}
  3612. _REPARSE_GUID_DATA_BUFFER = record
  3613. ReparseTag: DWORD;
  3614. ReparseDataLength: WORD;
  3615. Reserved: WORD;
  3616. ReparseGuid: GUID;
  3617. GenericReparseBuffer: TGenericReparseBuffer;
  3618. end;
  3619. {$EXTERNALSYM _REPARSE_GUID_DATA_BUFFER}
  3620. REPARSE_GUID_DATA_BUFFER = _REPARSE_GUID_DATA_BUFFER;
  3621. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER}
  3622. TReparseGuidDataBuffer = REPARSE_GUID_DATA_BUFFER;
  3623. PReparseGuidDataBuffer = PREPARSE_GUID_DATA_BUFFER;
  3624. const
  3625. REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
  3626. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE}
  3627. //
  3628. // Maximum allowed size of the reparse data.
  3629. //
  3630. const
  3631. MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
  3632. {$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE}
  3633. //
  3634. // Predefined reparse tags.
  3635. // These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
  3636. //
  3637. IO_REPARSE_TAG_RESERVED_ZERO = 0;
  3638. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ZERO}
  3639. IO_REPARSE_TAG_RESERVED_ONE = 1;
  3640. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ONE}
  3641. //
  3642. // The value of the following constant needs to satisfy the following conditions:
  3643. // (1) Be at least as large as the largest of the reserved tags.
  3644. // (2) Be strictly smaller than all the tags in use.
  3645. //
  3646. IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE;
  3647. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE}
  3648. //
  3649. // The reparse tags are a DWORD. The 32 bits are laid out as follows:
  3650. //
  3651. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  3652. // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  3653. // +-+-+-+-+-----------------------+-------------------------------+
  3654. // |M|R|N|R| Reserved bits | Reparse Tag Value |
  3655. // +-+-+-+-+-----------------------+-------------------------------+
  3656. //
  3657. // M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
  3658. // All ISVs must use a tag with a 0 in this position.
  3659. // Note: If a Microsoft tag is used by non-Microsoft software, the
  3660. // behavior is not defined.
  3661. //
  3662. // R is reserved. Must be zero for non-Microsoft tags.
  3663. //
  3664. // N is name surrogate. When set to 1, the file represents another named
  3665. // entity in the system.
  3666. //
  3667. // The M and N bits are OR-able.
  3668. // The following macros check for the M and N bit values:
  3669. //
  3670. //
  3671. // Macro to determine whether a reparse point tag corresponds to a tag
  3672. // owned by Microsoft.
  3673. //
  3674. function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
  3675. {$EXTERNALSYM IsReparseTagMicrosoft}
  3676. //
  3677. // Macro to determine whether a reparse point tag corresponds to a file
  3678. // that is to be displayed with the slow icon overlay.
  3679. //
  3680. function IsReparseTagHighLatency(Tag: ULONG): Boolean;
  3681. {$EXTERNALSYM IsReparseTagHighLatency}
  3682. //
  3683. // Macro to determine whether a reparse point tag is a name surrogate
  3684. //
  3685. function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
  3686. {$EXTERNALSYM IsReparseTagNameSurrogate}
  3687. const
  3688. IO_REPARSE_TAG_MOUNT_POINT = DWORD($A0000003);
  3689. {$EXTERNALSYM IO_REPARSE_TAG_MOUNT_POINT}
  3690. IO_REPARSE_TAG_HSM = DWORD($C0000004);
  3691. {$EXTERNALSYM IO_REPARSE_TAG_HSM}
  3692. IO_REPARSE_TAG_SIS = DWORD($80000007);
  3693. {$EXTERNALSYM IO_REPARSE_TAG_SIS}
  3694. IO_REPARSE_TAG_DFS = DWORD($8000000A);
  3695. {$EXTERNALSYM IO_REPARSE_TAG_DFS}
  3696. IO_REPARSE_TAG_FILTER_MANAGER = DWORD($8000000B);
  3697. {$EXTERNALSYM IO_REPARSE_TAG_FILTER_MANAGER}
  3698. IO_COMPLETION_MODIFY_STATE = $0002;
  3699. {$EXTERNALSYM IO_COMPLETION_MODIFY_STATE}
  3700. IO_COMPLETION_ALL_ACCESS = DWORD(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3);
  3701. {$EXTERNALSYM IO_COMPLETION_ALL_ACCESS}
  3702. DUPLICATE_CLOSE_SOURCE = $00000001;
  3703. {$EXTERNALSYM DUPLICATE_CLOSE_SOURCE}
  3704. DUPLICATE_SAME_ACCESS = $00000002;
  3705. {$EXTERNALSYM DUPLICATE_SAME_ACCESS}
  3706. type
  3707. _SYSTEM_POWER_STATE = (
  3708. PowerSystemUnspecified,
  3709. PowerSystemWorking,
  3710. PowerSystemSleeping1,
  3711. PowerSystemSleeping2,
  3712. PowerSystemSleeping3,
  3713. PowerSystemHibernate,
  3714. PowerSystemShutdown,
  3715. PowerSystemMaximum);
  3716. {$EXTERNALSYM _SYSTEM_POWER_STATE}
  3717. SYSTEM_POWER_STATE = _SYSTEM_POWER_STATE;
  3718. {$EXTERNALSYM SYSTEM_POWER_STATE}
  3719. PSYSTEM_POWER_STATE = ^SYSTEM_POWER_STATE;
  3720. {$EXTERNALSYM PSYSTEM_POWER_STATE}
  3721. TSystemPowerState = SYSTEM_POWER_STATE;
  3722. PSystemPowerState = PSYSTEM_POWER_STATE;
  3723. const
  3724. POWER_SYSTEM_MAXIMUM = 7;
  3725. {$EXTERNALSYM POWER_SYSTEM_MAXIMUM}
  3726. type
  3727. POWER_ACTION = (
  3728. PowerActionNone,
  3729. PowerActionReserved,
  3730. PowerActionSleep,
  3731. PowerActionHibernate,
  3732. PowerActionShutdown,
  3733. PowerActionShutdownReset,
  3734. PowerActionShutdownOff,
  3735. PowerActionWarmEject);
  3736. {$EXTERNALSYM POWER_ACTION}
  3737. PPOWER_ACTION = ^POWER_ACTION;
  3738. {$EXTERNALSYM PPOWER_ACTION}
  3739. TPowerAction = POWER_ACTION;
  3740. PPowerAction = PPOWER_ACTION;
  3741. _DEVICE_POWER_STATE = (
  3742. PowerDeviceUnspecified,
  3743. PowerDeviceD0,
  3744. PowerDeviceD1,
  3745. PowerDeviceD2,
  3746. PowerDeviceD3,
  3747. PowerDeviceMaximum);
  3748. {$EXTERNALSYM _DEVICE_POWER_STATE}
  3749. DEVICE_POWER_STATE = _DEVICE_POWER_STATE;
  3750. {$EXTERNALSYM DEVICE_POWER_STATE}
  3751. PDEVICE_POWER_STATE = ^DEVICE_POWER_STATE;
  3752. {$EXTERNALSYM PDEVICE_POWER_STATE}
  3753. TDevicePowerState = DEVICE_POWER_STATE;
  3754. PDevicePowerState = PDEVICE_POWER_STATE;
  3755. const
  3756. ES_SYSTEM_REQUIRED = DWORD($00000001);
  3757. {$EXTERNALSYM ES_SYSTEM_REQUIRED}
  3758. ES_DISPLAY_REQUIRED = DWORD($00000002);
  3759. {$EXTERNALSYM ES_DISPLAY_REQUIRED}
  3760. ES_USER_PRESENT = DWORD($00000004);
  3761. {$EXTERNALSYM ES_USER_PRESENT}
  3762. ES_CONTINUOUS = DWORD($80000000);
  3763. {$EXTERNALSYM ES_CONTINUOUS}
  3764. type
  3765. EXECUTION_STATE = DWORD;
  3766. {$EXTERNALSYM EXECUTION_STATE}
  3767. LATENCY_TIME = (LT_DONT_CARE, LT_LOWEST_LATENCY);
  3768. {$EXTERNALSYM LATENCY_TIME}
  3769. TLatencyTime = LATENCY_TIME;
  3770. //-----------------------------------------------------------------------------
  3771. // Device Power Information
  3772. // Accessable via CM_Get_DevInst_Registry_Property_Ex(CM_DRP_DEVICE_POWER_DATA)
  3773. //-----------------------------------------------------------------------------
  3774. const
  3775. PDCAP_D0_SUPPORTED = $00000001;
  3776. {$EXTERNALSYM PDCAP_D0_SUPPORTED}
  3777. PDCAP_D1_SUPPORTED = $00000002;
  3778. {$EXTERNALSYM PDCAP_D1_SUPPORTED}
  3779. PDCAP_D2_SUPPORTED = $00000004;
  3780. {$EXTERNALSYM PDCAP_D2_SUPPORTED}
  3781. PDCAP_D3_SUPPORTED = $00000008;
  3782. {$EXTERNALSYM PDCAP_D3_SUPPORTED}
  3783. PDCAP_WAKE_FROM_D0_SUPPORTED = $00000010;
  3784. {$EXTERNALSYM PDCAP_WAKE_FROM_D0_SUPPORTED}
  3785. PDCAP_WAKE_FROM_D1_SUPPORTED = $00000020;
  3786. {$EXTERNALSYM PDCAP_WAKE_FROM_D1_SUPPORTED}
  3787. PDCAP_WAKE_FROM_D2_SUPPORTED = $00000040;
  3788. {$EXTERNALSYM PDCAP_WAKE_FROM_D2_SUPPORTED}
  3789. PDCAP_WAKE_FROM_D3_SUPPORTED = $00000080;
  3790. {$EXTERNALSYM PDCAP_WAKE_FROM_D3_SUPPORTED}
  3791. PDCAP_WARM_EJECT_SUPPORTED = $00000100;
  3792. {$EXTERNALSYM PDCAP_WARM_EJECT_SUPPORTED}
  3793. type
  3794. CM_Power_Data_s = record
  3795. PD_Size: DWORD;
  3796. PD_MostRecentPowerState: DEVICE_POWER_STATE;
  3797. PD_Capabilities: DWORD;
  3798. PD_D1Latency: DWORD;
  3799. PD_D2Latency: DWORD;
  3800. PD_D3Latency: DWORD;
  3801. PD_PowerStateMapping: array [0..POWER_SYSTEM_MAXIMUM - 1] of DEVICE_POWER_STATE;
  3802. PD_DeepestSystemWake: SYSTEM_POWER_STATE;
  3803. end;
  3804. {$EXTERNALSYM CM_Power_Data_s}
  3805. CM_POWER_DATA = CM_Power_Data_s;
  3806. {$EXTERNALSYM CM_POWER_DATA}
  3807. PCM_POWER_DATA = ^CM_POWER_DATA;
  3808. {$EXTERNALSYM PCM_POWER_DATA}
  3809. TCmPowerData = CM_POWER_DATA;
  3810. PCmPowerData = PCM_POWER_DATA;
  3811. POWER_INFORMATION_LEVEL = (
  3812. SystemPowerPolicyAc,
  3813. SystemPowerPolicyDc,
  3814. VerifySystemPolicyAc,
  3815. VerifySystemPolicyDc,
  3816. SystemPowerCapabilities,
  3817. SystemBatteryState,
  3818. SystemPowerStateHandler,
  3819. ProcessorStateHandler,
  3820. SystemPowerPolicyCurrent,
  3821. AdministratorPowerPolicy,
  3822. SystemReserveHiberFile,
  3823. ProcessorInformation,
  3824. SystemPowerInformation,
  3825. ProcessorStateHandler2,
  3826. LastWakeTime, // Compare with KeQueryInterruptTime()
  3827. LastSleepTime, // Compare with KeQueryInterruptTime()
  3828. SystemExecutionState,
  3829. SystemPowerStateNotifyHandler,
  3830. ProcessorPowerPolicyAc,
  3831. ProcessorPowerPolicyDc,
  3832. VerifyProcessorPowerPolicyAc,
  3833. VerifyProcessorPowerPolicyDc,
  3834. ProcessorPowerPolicyCurrent,
  3835. SystemPowerStateLogging,
  3836. SystemPowerLoggingEntry);
  3837. {$EXTERNALSYM POWER_INFORMATION_LEVEL}
  3838. TPowerInformationLevel = POWER_INFORMATION_LEVEL;
  3839. //
  3840. // System power manager capabilities
  3841. //
  3842. BATTERY_REPORTING_SCALE = record
  3843. Granularity: DWORD;
  3844. Capacity: DWORD;
  3845. end;
  3846. {$EXTERNALSYM BATTERY_REPORTING_SCALE}
  3847. PBATTERY_REPORTING_SCALE = ^BATTERY_REPORTING_SCALE;
  3848. {$EXTERNALSYM PBATTERY_REPORTING_SCALE}
  3849. TBatteryReportingScale = BATTERY_REPORTING_SCALE;
  3850. PBatteryReportingScale = PBATTERY_REPORTING_SCALE;
  3851. // Power Policy Management interfaces
  3852. //
  3853. PPOWER_ACTION_POLICY = ^POWER_ACTION_POLICY;
  3854. {$EXTERNALSYM PPOWER_ACTION_POLICY}
  3855. POWER_ACTION_POLICY = record
  3856. Action: POWER_ACTION;
  3857. Flags: DWORD;
  3858. EventCode: DWORD;
  3859. end;
  3860. {$EXTERNALSYM POWER_ACTION_POLICY}
  3861. TPowerActionPolicy = POWER_ACTION_POLICY;
  3862. PPowerActionPolicy = PPOWER_ACTION_POLICY;
  3863. // POWER_ACTION_POLICY->Flags:
  3864. const
  3865. POWER_ACTION_QUERY_ALLOWED = $00000001;
  3866. {$EXTERNALSYM POWER_ACTION_QUERY_ALLOWED}
  3867. POWER_ACTION_UI_ALLOWED = $00000002;
  3868. {$EXTERNALSYM POWER_ACTION_UI_ALLOWED}
  3869. POWER_ACTION_OVERRIDE_APPS = $00000004;
  3870. {$EXTERNALSYM POWER_ACTION_OVERRIDE_APPS}
  3871. POWER_ACTION_LIGHTEST_FIRST = $10000000;
  3872. {$EXTERNALSYM POWER_ACTION_LIGHTEST_FIRST}
  3873. POWER_ACTION_LOCK_CONSOLE = $20000000;
  3874. {$EXTERNALSYM POWER_ACTION_LOCK_CONSOLE}
  3875. POWER_ACTION_DISABLE_WAKES = $40000000;
  3876. {$EXTERNALSYM POWER_ACTION_DISABLE_WAKES}
  3877. POWER_ACTION_CRITICAL = DWORD($80000000);
  3878. {$EXTERNALSYM POWER_ACTION_CRITICAL}
  3879. // POWER_ACTION_POLICY->EventCode flags
  3880. POWER_LEVEL_USER_NOTIFY_TEXT = $00000001;
  3881. {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_TEXT}
  3882. POWER_LEVEL_USER_NOTIFY_SOUND = $00000002;
  3883. {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_SOUND}
  3884. POWER_LEVEL_USER_NOTIFY_EXEC = $00000004;
  3885. {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_EXEC}
  3886. POWER_USER_NOTIFY_BUTTON = $00000008;
  3887. {$EXTERNALSYM POWER_USER_NOTIFY_BUTTON}
  3888. POWER_USER_NOTIFY_SHUTDOWN = $00000010;
  3889. {$EXTERNALSYM POWER_USER_NOTIFY_SHUTDOWN}
  3890. POWER_FORCE_TRIGGER_RESET = DWORD($80000000);
  3891. {$EXTERNALSYM POWER_FORCE_TRIGGER_RESET}
  3892. // system battery drain policies
  3893. type
  3894. PSYSTEM_POWER_LEVEL = ^SYSTEM_POWER_LEVEL;
  3895. {$EXTERNALSYM PSYSTEM_POWER_LEVEL}
  3896. SYSTEM_POWER_LEVEL = record
  3897. Enable: BOOLEAN;
  3898. Spare: array [0..3 - 1] of BYTE;
  3899. BatteryLevel: DWORD;
  3900. PowerPolicy: POWER_ACTION_POLICY;
  3901. MinSystemState: SYSTEM_POWER_STATE;
  3902. end;
  3903. {$EXTERNALSYM SYSTEM_POWER_LEVEL}
  3904. TSystemPowerLevel = SYSTEM_POWER_LEVEL;
  3905. PSystemPowerLevel = PSYSTEM_POWER_LEVEL;
  3906. // Discharge policy constants
  3907. const
  3908. NUM_DISCHARGE_POLICIES = 4;
  3909. {$EXTERNALSYM NUM_DISCHARGE_POLICIES}
  3910. DISCHARGE_POLICY_CRITICAL = 0;
  3911. {$EXTERNALSYM DISCHARGE_POLICY_CRITICAL}
  3912. DISCHARGE_POLICY_LOW = 1;
  3913. {$EXTERNALSYM DISCHARGE_POLICY_LOW}
  3914. //
  3915. // Throttling policies
  3916. //
  3917. PO_THROTTLE_NONE = 0;
  3918. {$EXTERNALSYM PO_THROTTLE_NONE}
  3919. PO_THROTTLE_CONSTANT = 1;
  3920. {$EXTERNALSYM PO_THROTTLE_CONSTANT}
  3921. PO_THROTTLE_DEGRADE = 2;
  3922. {$EXTERNALSYM PO_THROTTLE_DEGRADE}
  3923. PO_THROTTLE_ADAPTIVE = 3;
  3924. {$EXTERNALSYM PO_THROTTLE_ADAPTIVE}
  3925. PO_THROTTLE_MAXIMUM = 4; // not a policy, just a limit
  3926. {$EXTERNALSYM PO_THROTTLE_MAXIMUM}
  3927. // system power policies
  3928. type
  3929. PSYSTEM_POWER_POLICY = ^SYSTEM_POWER_POLICY;
  3930. {$EXTERNALSYM PSYSTEM_POWER_POLICY}
  3931. _SYSTEM_POWER_POLICY = record
  3932. Revision: DWORD; // 1
  3933. // events
  3934. PowerButton: POWER_ACTION_POLICY;
  3935. SleepButton: POWER_ACTION_POLICY;
  3936. LidClose: POWER_ACTION_POLICY;
  3937. LidOpenWake: SYSTEM_POWER_STATE;
  3938. Reserved: DWORD;
  3939. // "system idle" detection
  3940. Idle: POWER_ACTION_POLICY;
  3941. IdleTimeout: DWORD;
  3942. IdleSensitivity: BYTE;
  3943. // dynamic throttling policy
  3944. // PO_THROTTLE_NONE, PO_THROTTLE_CONSTANT, PO_THROTTLE_DEGRADE, or PO_THROTTLE_ADAPTIVE
  3945. DynamicThrottle: BYTE;
  3946. Spare2: array [0..1] of BYTE;
  3947. // meaning of power action "sleep"
  3948. MinSleep: SYSTEM_POWER_STATE;
  3949. MaxSleep: SYSTEM_POWER_STATE;
  3950. ReducedLatencySleep: SYSTEM_POWER_STATE;
  3951. WinLogonFlags: DWORD;
  3952. // parameters for dozing
  3953. Spare3: DWORD;
  3954. DozeS4Timeout: DWORD;
  3955. // battery policies
  3956. BroadcastCapacityResolution: DWORD;
  3957. DischargePolicy: array [0..NUM_DISCHARGE_POLICIES - 1] of SYSTEM_POWER_LEVEL;
  3958. // video policies
  3959. VideoTimeout: DWORD;
  3960. VideoDimDisplay: BOOLEAN;
  3961. VideoReserved: array [0..2] of DWORD;
  3962. // hard disk policies
  3963. SpindownTimeout: DWORD;
  3964. // processor policies
  3965. OptimizeForPower: LongBool;
  3966. FanThrottleTolerance: BYTE;
  3967. ForcedThrottle: BYTE;
  3968. MinThrottle: BYTE;
  3969. OverThrottled: POWER_ACTION_POLICY;
  3970. end;
  3971. {$EXTERNALSYM _SYSTEM_POWER_POLICY}
  3972. SYSTEM_POWER_POLICY = _SYSTEM_POWER_POLICY;
  3973. {$EXTERNALSYM SYSTEM_POWER_POLICY}
  3974. TSystemPowerPolicy = SYSTEM_POWER_POLICY;
  3975. PSystemPowerPolicy = PSYSTEM_POWER_POLICY;
  3976. // processor power policy state
  3977. PPROCESSOR_POWER_POLICY_INFO = ^PROCESSOR_POWER_POLICY_INFO;
  3978. {$EXTERNALSYM PPROCESSOR_POWER_POLICY_INFO}
  3979. _PROCESSOR_POWER_POLICY_INFO = record
  3980. // Time based information (will be converted to kernel units)
  3981. TimeCheck: DWORD; // in US
  3982. DemoteLimit: DWORD; // in US
  3983. PromoteLimit: DWORD; // in US
  3984. // Percentage based information
  3985. DemotePercent: BYTE;
  3986. PromotePercent: BYTE;
  3987. Spare: array [0..1] of BYTE;
  3988. // Flags
  3989. Flags: DWORD;
  3990. //DWORD AllowDemotion:1;
  3991. //DWORD AllowPromotion:1;
  3992. //DWORD Reserved:30;
  3993. end;
  3994. {$EXTERNALSYM _PROCESSOR_POWER_POLICY_INFO}
  3995. PROCESSOR_POWER_POLICY_INFO = _PROCESSOR_POWER_POLICY_INFO;
  3996. {$EXTERNALSYM PROCESSOR_POWER_POLICY_INFO}
  3997. TProcessorPowerPolicyInfo = PROCESSOR_POWER_POLICY_INFO;
  3998. PProcessorPowerPolicyInfo = PPROCESSOR_POWER_POLICY_INFO;
  3999. // processor power policy
  4000. PPROCESSOR_POWER_POLICY = ^PROCESSOR_POWER_POLICY;
  4001. {$EXTERNALSYM PPROCESSOR_POWER_POLICY}
  4002. _PROCESSOR_POWER_POLICY = record
  4003. Revision: DWORD; // 1
  4004. // Dynamic Throttling Policy
  4005. DynamicThrottle: BYTE;
  4006. Spare: array [0..2] of BYTE;
  4007. // Flags
  4008. Reserved: DWORD;
  4009. //DWORD DisableCStates:1;
  4010. //DWORD Reserved:31;
  4011. // System policy information
  4012. // The Array is last, in case it needs to be grown and the structure
  4013. // revision incremented.
  4014. PolicyCount: DWORD;
  4015. Policy: array [0..2] of PROCESSOR_POWER_POLICY_INFO;
  4016. end;
  4017. {$EXTERNALSYM _PROCESSOR_POWER_POLICY}
  4018. PROCESSOR_POWER_POLICY = _PROCESSOR_POWER_POLICY;
  4019. {$EXTERNALSYM PROCESSOR_POWER_POLICY}
  4020. TProcessorPowerPolicy = PROCESSOR_POWER_POLICY;
  4021. PProcessorPowerPolicy = PPROCESSOR_POWER_POLICY;
  4022. // administrator power policy overrides
  4023. PADMINISTRATOR_POWER_POLICY = ^ADMINISTRATOR_POWER_POLICY;
  4024. {$EXTERNALSYM PADMINISTRATOR_POWER_POLICY}
  4025. _ADMINISTRATOR_POWER_POLICY = record
  4026. // meaning of power action "sleep"
  4027. MinSleep: SYSTEM_POWER_STATE;
  4028. MaxSleep: SYSTEM_POWER_STATE;
  4029. // video policies
  4030. MinVideoTimeout: DWORD;
  4031. MaxVideoTimeout: DWORD;
  4032. // disk policies
  4033. MinSpindownTimeout: DWORD;
  4034. MaxSpindownTimeout: DWORD;
  4035. end;
  4036. {$EXTERNALSYM _ADMINISTRATOR_POWER_POLICY}
  4037. ADMINISTRATOR_POWER_POLICY = _ADMINISTRATOR_POWER_POLICY;
  4038. {$EXTERNALSYM ADMINISTRATOR_POWER_POLICY}
  4039. TAdministratorPowerPolicy = ADMINISTRATOR_POWER_POLICY;
  4040. PAdministratorPowerPolicy = PADMINISTRATOR_POWER_POLICY;
  4041. PSYSTEM_POWER_CAPABILITIES = ^SYSTEM_POWER_CAPABILITIES;
  4042. {$EXTERNALSYM PSYSTEM_POWER_CAPABILITIES}
  4043. SYSTEM_POWER_CAPABILITIES = record
  4044. // Misc supported system features
  4045. PowerButtonPresent: BOOLEAN;
  4046. SleepButtonPresent: BOOLEAN;
  4047. LidPresent: BOOLEAN;
  4048. SystemS1: BOOLEAN;
  4049. SystemS2: BOOLEAN;
  4050. SystemS3: BOOLEAN;
  4051. SystemS4: BOOLEAN; // hibernate
  4052. SystemS5: BOOLEAN; // off
  4053. HiberFilePresent: BOOLEAN;
  4054. FullWake: BOOLEAN;
  4055. VideoDimPresent: BOOLEAN;
  4056. ApmPresent: BOOLEAN;
  4057. UpsPresent: BOOLEAN;
  4058. // Processors
  4059. ThermalControl: BOOLEAN;
  4060. ProcessorThrottle: BOOLEAN;
  4061. ProcessorMinThrottle: BYTE;
  4062. ProcessorMaxThrottle: BYTE;
  4063. spare2: array [0..4 - 1] of BYTE;
  4064. // Disk
  4065. DiskSpinDown: BOOLEAN;
  4066. spare3: array [0..8 - 1] of BYTE;
  4067. // System Battery
  4068. SystemBatteriesPresent: BOOLEAN;
  4069. BatteriesAreShortTerm: BOOLEAN;
  4070. BatteryScale: array [0..3 - 1] of BATTERY_REPORTING_SCALE;
  4071. // Wake
  4072. AcOnLineWake: SYSTEM_POWER_STATE;
  4073. SoftLidWake: SYSTEM_POWER_STATE;
  4074. RtcWake: SYSTEM_POWER_STATE;
  4075. MinDeviceWakeState: SYSTEM_POWER_STATE; // note this may change on driver load
  4076. DefaultLowLatencyWake: SYSTEM_POWER_STATE;
  4077. end;
  4078. {$EXTERNALSYM SYSTEM_POWER_CAPABILITIES}
  4079. TSystemPowerCapabilities = SYSTEM_POWER_CAPABILITIES;
  4080. PSystemPowerCapabilities = PSYSTEM_POWER_CAPABILITIES;
  4081. PSYSTEM_BATTERY_STATE = ^SYSTEM_BATTERY_STATE;
  4082. {$EXTERNALSYM PSYSTEM_BATTERY_STATE}
  4083. SYSTEM_BATTERY_STATE = record
  4084. AcOnLine: BOOLEAN;
  4085. BatteryPresent: BOOLEAN;
  4086. Charging: BOOLEAN;
  4087. Discharging: BOOLEAN;
  4088. Spare1: array [0..3] of BOOLEAN;
  4089. MaxCapacity: DWORD;
  4090. RemainingCapacity: DWORD;
  4091. Rate: DWORD;
  4092. EstimatedTime: DWORD;
  4093. DefaultAlert1: DWORD;
  4094. DefaultAlert2: DWORD;
  4095. end;
  4096. {$EXTERNALSYM SYSTEM_BATTERY_STATE}
  4097. TSystemBatteryState = SYSTEM_BATTERY_STATE;
  4098. PSystemBatteryState = PSYSTEM_BATTERY_STATE;
  4099. //
  4100. // Image Format
  4101. //
  4102. // #include "pshpack4.h" // 4 byte packing is the default
  4103. const
  4104. IMAGE_DOS_SIGNATURE = $5A4D; // MZ
  4105. {$EXTERNALSYM IMAGE_DOS_SIGNATURE}
  4106. IMAGE_OS2_SIGNATURE = $454E; // NE
  4107. {$EXTERNALSYM IMAGE_OS2_SIGNATURE}
  4108. IMAGE_OS2_SIGNATURE_LE = $454C; // LE
  4109. {$EXTERNALSYM IMAGE_OS2_SIGNATURE_LE}
  4110. IMAGE_VXD_SIGNATURE = $454C; // LE
  4111. {$EXTERNALSYM IMAGE_VXD_SIGNATURE}
  4112. IMAGE_NT_SIGNATURE = $00004550; // PE00
  4113. {$EXTERNALSYM IMAGE_NT_SIGNATURE}
  4114. // #include "pshpack2.h" // 16 bit headers are 2 byte packed
  4115. type
  4116. // DOS .EXE header
  4117. PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
  4118. {$EXTERNALSYM PIMAGE_DOS_HEADER}
  4119. _IMAGE_DOS_HEADER = record
  4120. e_magic: Word; // Magic number
  4121. e_cblp: Word; // Bytes on last page of file
  4122. e_cp: Word; // Pages in file
  4123. e_crlc: Word; // Relocations
  4124. e_cparhdr: Word; // Size of header in paragraphs
  4125. e_minalloc: Word; // Minimum extra paragraphs needed
  4126. e_maxalloc: Word; // Maximum extra paragraphs needed
  4127. e_ss: Word; // Initial (relative) SS value
  4128. e_sp: Word; // Initial SP value
  4129. e_csum: Word; // Checksum
  4130. e_ip: Word; // Initial IP value
  4131. e_cs: Word; // Initial (relative) CS value
  4132. e_lfarlc: Word; // File address of relocation table
  4133. e_ovno: Word; // Overlay number
  4134. e_res: array [0..3] of Word; // Reserved words
  4135. e_oemid: Word; // OEM identifier (for e_oeminfo)
  4136. e_oeminfo: Word; // OEM information; e_oemid specific
  4137. e_res2: array [0..9] of Word; // Reserved words
  4138. e_lfanew: Longint; // File address of new exe header
  4139. end;
  4140. {$EXTERNALSYM _IMAGE_DOS_HEADER}
  4141. IMAGE_DOS_HEADER = _IMAGE_DOS_HEADER;
  4142. {$EXTERNALSYM IMAGE_DOS_HEADER}
  4143. TImageDosHeader = IMAGE_DOS_HEADER;
  4144. PImageDosHeader = PIMAGE_DOS_HEADER;
  4145. // OS/2 .EXE header
  4146. PIMAGE_OS2_HEADER = ^IMAGE_OS2_HEADER;
  4147. {$EXTERNALSYM PIMAGE_OS2_HEADER}
  4148. _IMAGE_OS2_HEADER = record
  4149. ne_magic: Word; // Magic number
  4150. ne_ver: CHAR; // Version number
  4151. ne_rev: CHAR; // Revision number
  4152. ne_enttab: Word; // Offset of Entry Table
  4153. ne_cbenttab: Word; // Number of bytes in Entry Table
  4154. ne_crc: Longint; // Checksum of whole file
  4155. ne_flags: Word; // Flag word
  4156. ne_autodata: Word; // Automatic data segment number
  4157. ne_heap: Word; // Initial heap allocation
  4158. ne_stack: Word; // Initial stack allocation
  4159. ne_csip: Longint; // Initial CS:IP setting
  4160. ne_sssp: Longint; // Initial SS:SP setting
  4161. ne_cseg: Word; // Count of file segments
  4162. ne_cmod: Word; // Entries in Module Reference Table
  4163. ne_cbnrestab: Word; // Size of non-resident name table
  4164. ne_segtab: Word; // Offset of Segment Table
  4165. ne_rsrctab: Word; // Offset of Resource Table
  4166. ne_restab: Word; // Offset of resident name table
  4167. ne_modtab: Word; // Offset of Module Reference Table
  4168. ne_imptab: Word; // Offset of Imported Names Table
  4169. ne_nrestab: Longint; // Offset of Non-resident Names Table
  4170. ne_cmovent: Word; // Count of movable entries
  4171. ne_align: Word; // Segment alignment shift count
  4172. ne_cres: Word; // Count of resource segments
  4173. ne_exetyp: Byte; // Target Operating system
  4174. ne_flagsothers: Byte; // Other .EXE flags
  4175. ne_pretthunks: Word; // offset to return thunks
  4176. ne_psegrefbytes: Word; // offset to segment ref. bytes
  4177. ne_swaparea: Word; // Minimum code swap area size
  4178. ne_expver: Word; // Expected Windows version number
  4179. end;
  4180. {$EXTERNALSYM _IMAGE_OS2_HEADER}
  4181. IMAGE_OS2_HEADER = _IMAGE_OS2_HEADER;
  4182. {$EXTERNALSYM IMAGE_OS2_HEADER}
  4183. TImageOs2Header = IMAGE_OS2_HEADER;
  4184. PImageOs2Header = PIMAGE_OS2_HEADER;
  4185. // Windows VXD header
  4186. PIMAGE_VXD_HEADER = ^IMAGE_VXD_HEADER;
  4187. {$EXTERNALSYM PIMAGE_VXD_HEADER}
  4188. _IMAGE_VXD_HEADER = record
  4189. e32_magic: Word; // Magic number
  4190. e32_border: Byte; // The byte ordering for the VXD
  4191. e32_worder: Byte; // The word ordering for the VXD
  4192. e32_level: DWORD; // The EXE format level for now = 0
  4193. e32_cpu: Word; // The CPU type
  4194. e32_os: Word; // The OS type
  4195. e32_ver: DWORD; // Module version
  4196. e32_mflags: DWORD; // Module flags
  4197. e32_mpages: DWORD; // Module # pages
  4198. e32_startobj: DWORD; // Object # for instruction pointer
  4199. e32_eip: DWORD; // Extended instruction pointer
  4200. e32_stackobj: DWORD; // Object # for stack pointer
  4201. e32_esp: DWORD; // Extended stack pointer
  4202. e32_pagesize: DWORD; // VXD page size
  4203. e32_lastpagesize: DWORD; // Last page size in VXD
  4204. e32_fixupsize: DWORD; // Fixup section size
  4205. e32_fixupsum: DWORD; // Fixup section checksum
  4206. e32_ldrsize: DWORD; // Loader section size
  4207. e32_ldrsum: DWORD; // Loader section checksum
  4208. e32_objtab: DWORD; // Object table offset
  4209. e32_objcnt: DWORD; // Number of objects in module
  4210. e32_objmap: DWORD; // Object page map offset
  4211. e32_itermap: DWORD; // Object iterated data map offset
  4212. e32_rsrctab: DWORD; // Offset of Resource Table
  4213. e32_rsrccnt: DWORD; // Number of resource entries
  4214. e32_restab: DWORD; // Offset of resident name table
  4215. e32_enttab: DWORD; // Offset of Entry Table
  4216. e32_dirtab: DWORD; // Offset of Module Directive Table
  4217. e32_dircnt: DWORD; // Number of module directives
  4218. e32_fpagetab: DWORD; // Offset of Fixup Page Table
  4219. e32_frectab: DWORD; // Offset of Fixup Record Table
  4220. e32_impmod: DWORD; // Offset of Import Module Name Table
  4221. e32_impmodcnt: DWORD; // Number of entries in Import Module Name Table
  4222. e32_impproc: DWORD; // Offset of Import Procedure Name Table
  4223. e32_pagesum: DWORD; // Offset of Per-Page Checksum Table
  4224. e32_datapage: DWORD; // Offset of Enumerated Data Pages
  4225. e32_preload: DWORD; // Number of preload pages
  4226. e32_nrestab: DWORD; // Offset of Non-resident Names Table
  4227. e32_cbnrestab: DWORD; // Size of Non-resident Name Table
  4228. e32_nressum: DWORD; // Non-resident Name Table Checksum
  4229. e32_autodata: DWORD; // Object # for automatic data object
  4230. e32_debuginfo: DWORD; // Offset of the debugging information
  4231. e32_debuglen: DWORD; // The length of the debugging info. in bytes
  4232. e32_instpreload: DWORD; // Number of instance pages in preload section of VXD file
  4233. e32_instdemand: DWORD; // Number of instance pages in demand load section of VXD file
  4234. e32_heapsize: DWORD; // Size of heap - for 16-bit apps
  4235. e32_res3: array [0..11] of Byte; // Reserved words
  4236. e32_winresoff: DWORD;
  4237. e32_winreslen: DWORD;
  4238. e32_devid: Word; // Device ID for VxD
  4239. e32_ddkver: Word; // DDK version for VxD
  4240. end;
  4241. {$EXTERNALSYM _IMAGE_VXD_HEADER}
  4242. IMAGE_VXD_HEADER = _IMAGE_VXD_HEADER;
  4243. {$EXTERNALSYM IMAGE_VXD_HEADER}
  4244. TImageVxdHeader = IMAGE_VXD_HEADER;
  4245. PImageVxdHeader = PIMAGE_VXD_HEADER;
  4246. // #include "poppack.h" // Back to 4 byte packing
  4247. //
  4248. // File header format.
  4249. //
  4250. PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  4251. {$EXTERNALSYM PIMAGE_FILE_HEADER}
  4252. _IMAGE_FILE_HEADER = record
  4253. Machine: WORD;
  4254. NumberOfSections: WORD;
  4255. TimeDateStamp: DWORD;
  4256. PointerToSymbolTable: DWORD;
  4257. NumberOfSymbols: DWORD;
  4258. SizeOfOptionalHeader: WORD;
  4259. Characteristics: WORD;
  4260. end;
  4261. {$EXTERNALSYM _IMAGE_FILE_HEADER}
  4262. IMAGE_FILE_HEADER = _IMAGE_FILE_HEADER;
  4263. {$EXTERNALSYM IMAGE_FILE_HEADER}
  4264. TImageFileHeader = IMAGE_FILE_HEADER;
  4265. PImageFileHeader = PIMAGE_FILE_HEADER;
  4266. const
  4267. IMAGE_SIZEOF_FILE_HEADER = 20;
  4268. {$EXTERNALSYM IMAGE_SIZEOF_FILE_HEADER}
  4269. IMAGE_FILE_RELOCS_STRIPPED = $0001; // Relocation info stripped from file.
  4270. {$EXTERNALSYM IMAGE_FILE_RELOCS_STRIPPED}
  4271. IMAGE_FILE_EXECUTABLE_IMAGE = $0002; // File is executable (i.e. no unresolved externel references).
  4272. {$EXTERNALSYM IMAGE_FILE_EXECUTABLE_IMAGE}
  4273. IMAGE_FILE_LINE_NUMS_STRIPPED = $0004; // Line nunbers stripped from file.
  4274. {$EXTERNALSYM IMAGE_FILE_LINE_NUMS_STRIPPED}
  4275. IMAGE_FILE_LOCAL_SYMS_STRIPPED = $0008; // Local symbols stripped from file.
  4276. {$EXTERNALSYM IMAGE_FILE_LOCAL_SYMS_STRIPPED}
  4277. IMAGE_FILE_AGGRESIVE_WS_TRIM = $0010; // Agressively trim working set
  4278. {$EXTERNALSYM IMAGE_FILE_AGGRESIVE_WS_TRIM}
  4279. IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020; // App can handle >2gb addresses
  4280. {$EXTERNALSYM IMAGE_FILE_LARGE_ADDRESS_AWARE}
  4281. IMAGE_FILE_BYTES_REVERSED_LO = $0080; // Bytes of machine word are reversed.
  4282. {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_LO}
  4283. IMAGE_FILE_32BIT_MACHINE = $0100; // 32 bit word machine.
  4284. {$EXTERNALSYM IMAGE_FILE_32BIT_MACHINE}
  4285. IMAGE_FILE_DEBUG_STRIPPED = $0200; // Debugging info stripped from file in .DBG file
  4286. {$EXTERNALSYM IMAGE_FILE_DEBUG_STRIPPED}
  4287. IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400; // If Image is on removable media, copy and run from the swap file.
  4288. {$EXTERNALSYM IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
  4289. IMAGE_FILE_NET_RUN_FROM_SWAP = $0800; // If Image is on Net, copy and run from the swap file.
  4290. {$EXTERNALSYM IMAGE_FILE_NET_RUN_FROM_SWAP}
  4291. IMAGE_FILE_SYSTEM = $1000; // System File.
  4292. {$EXTERNALSYM IMAGE_FILE_SYSTEM}
  4293. IMAGE_FILE_DLL = $2000; // File is a DLL.
  4294. {$EXTERNALSYM IMAGE_FILE_DLL}
  4295. IMAGE_FILE_UP_SYSTEM_ONLY = $4000; // File should only be run on a UP machine
  4296. {$EXTERNALSYM IMAGE_FILE_UP_SYSTEM_ONLY}
  4297. IMAGE_FILE_BYTES_REVERSED_HI = $8000; // Bytes of machine word are reversed.
  4298. {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_HI}
  4299. IMAGE_FILE_MACHINE_UNKNOWN = 0;
  4300. {$EXTERNALSYM IMAGE_FILE_MACHINE_UNKNOWN}
  4301. IMAGE_FILE_MACHINE_I386 = $014c; // Intel 386.
  4302. {$EXTERNALSYM IMAGE_FILE_MACHINE_I386}
  4303. IMAGE_FILE_MACHINE_R3000 = $0162; // MIPS little-endian, 0x160 big-endian
  4304. {$EXTERNALSYM IMAGE_FILE_MACHINE_R3000}
  4305. IMAGE_FILE_MACHINE_R4000 = $0166; // MIPS little-endian
  4306. {$EXTERNALSYM IMAGE_FILE_MACHINE_R4000}
  4307. IMAGE_FILE_MACHINE_R10000 = $0168; // MIPS little-endian
  4308. {$EXTERNALSYM IMAGE_FILE_MACHINE_R10000}
  4309. IMAGE_FILE_MACHINE_WCEMIPSV2 = $0169; // MIPS little-endian WCE v2
  4310. {$EXTERNALSYM IMAGE_FILE_MACHINE_WCEMIPSV2}
  4311. IMAGE_FILE_MACHINE_ALPHA = $0184; // Alpha_AXP
  4312. {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA}
  4313. IMAGE_FILE_MACHINE_SH3 = $01a2; // SH3 little-endian
  4314. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3}
  4315. IMAGE_FILE_MACHINE_SH3DSP = $01a3;
  4316. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3DSP}
  4317. IMAGE_FILE_MACHINE_SH3E = $01a4; // SH3E little-endian
  4318. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3E}
  4319. IMAGE_FILE_MACHINE_SH4 = $01a6; // SH4 little-endian
  4320. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH4}
  4321. IMAGE_FILE_MACHINE_SH5 = $01a8; // SH5
  4322. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH5}
  4323. IMAGE_FILE_MACHINE_ARM = $01c0; // ARM Little-Endian
  4324. {$EXTERNALSYM IMAGE_FILE_MACHINE_ARM}
  4325. IMAGE_FILE_MACHINE_THUMB = $01c2;
  4326. {$EXTERNALSYM IMAGE_FILE_MACHINE_THUMB}
  4327. IMAGE_FILE_MACHINE_AM33 = $01d3;
  4328. {$EXTERNALSYM IMAGE_FILE_MACHINE_AM33}
  4329. IMAGE_FILE_MACHINE_POWERPC = $01F0; // IBM PowerPC Little-Endian
  4330. {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPC}
  4331. IMAGE_FILE_MACHINE_POWERPCFP = $01f1;
  4332. {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPCFP}
  4333. IMAGE_FILE_MACHINE_IA64 = $0200; // Intel 64
  4334. {$EXTERNALSYM IMAGE_FILE_MACHINE_IA64}
  4335. IMAGE_FILE_MACHINE_MIPS16 = $0266; // MIPS
  4336. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPS16}
  4337. IMAGE_FILE_MACHINE_ALPHA64 = $0284; // ALPHA64
  4338. {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA64}
  4339. IMAGE_FILE_MACHINE_MIPSFPU = $0366; // MIPS
  4340. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU}
  4341. IMAGE_FILE_MACHINE_MIPSFPU16 = $0466; // MIPS
  4342. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU16}
  4343. IMAGE_FILE_MACHINE_AXP64 = IMAGE_FILE_MACHINE_ALPHA64;
  4344. {$EXTERNALSYM IMAGE_FILE_MACHINE_AXP64}
  4345. IMAGE_FILE_MACHINE_TRICORE = $0520; // Infineon
  4346. {$EXTERNALSYM IMAGE_FILE_MACHINE_TRICORE}
  4347. IMAGE_FILE_MACHINE_CEF = $0CEF;
  4348. {$EXTERNALSYM IMAGE_FILE_MACHINE_CEF}
  4349. IMAGE_FILE_MACHINE_EBC = $0EBC; // EFI Byte Code
  4350. {$EXTERNALSYM IMAGE_FILE_MACHINE_EBC}
  4351. IMAGE_FILE_MACHINE_AMD64 = $8664; // AMD64 (K8)
  4352. {$EXTERNALSYM IMAGE_FILE_MACHINE_AMD64}
  4353. IMAGE_FILE_MACHINE_M32R = $9041; // M32R little-endian
  4354. {$EXTERNALSYM IMAGE_FILE_MACHINE_M32R}
  4355. IMAGE_FILE_MACHINE_CEE = $C0EE;
  4356. {$EXTERNALSYM IMAGE_FILE_MACHINE_CEE}
  4357. //
  4358. // Directory format.
  4359. //
  4360. type
  4361. PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
  4362. {$EXTERNALSYM PIMAGE_DATA_DIRECTORY}
  4363. _IMAGE_DATA_DIRECTORY = record
  4364. VirtualAddress: DWORD;
  4365. Size: DWORD;
  4366. end;
  4367. {$EXTERNALSYM _IMAGE_DATA_DIRECTORY}
  4368. IMAGE_DATA_DIRECTORY = _IMAGE_DATA_DIRECTORY;
  4369. {$EXTERNALSYM IMAGE_DATA_DIRECTORY}
  4370. TImageDataDirectory = IMAGE_DATA_DIRECTORY;
  4371. PImageDataDirectory = PIMAGE_DATA_DIRECTORY;
  4372. const
  4373. IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
  4374. {$EXTERNALSYM IMAGE_NUMBEROF_DIRECTORY_ENTRIES}
  4375. //
  4376. // Optional header format.
  4377. //
  4378. type
  4379. PIMAGE_OPTIONAL_HEADER32 = ^IMAGE_OPTIONAL_HEADER32;
  4380. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER32}
  4381. _IMAGE_OPTIONAL_HEADER = record
  4382. //
  4383. // Standard fields.
  4384. //
  4385. Magic: Word;
  4386. MajorLinkerVersion: Byte;
  4387. MinorLinkerVersion: Byte;
  4388. SizeOfCode: DWORD;
  4389. SizeOfInitializedData: DWORD;
  4390. SizeOfUninitializedData: DWORD;
  4391. AddressOfEntryPoint: DWORD;
  4392. BaseOfCode: DWORD;
  4393. BaseOfData: DWORD;
  4394. //
  4395. // NT additional fields.
  4396. //
  4397. ImageBase: DWORD;
  4398. SectionAlignment: DWORD;
  4399. FileAlignment: DWORD;
  4400. MajorOperatingSystemVersion: Word;
  4401. MinorOperatingSystemVersion: Word;
  4402. MajorImageVersion: Word;
  4403. MinorImageVersion: Word;
  4404. MajorSubsystemVersion: Word;
  4405. MinorSubsystemVersion: Word;
  4406. Win32VersionValue: DWORD;
  4407. SizeOfImage: DWORD;
  4408. SizeOfHeaders: DWORD;
  4409. CheckSum: DWORD;
  4410. Subsystem: Word;
  4411. DllCharacteristics: Word;
  4412. SizeOfStackReserve: DWORD;
  4413. SizeOfStackCommit: DWORD;
  4414. SizeOfHeapReserve: DWORD;
  4415. SizeOfHeapCommit: DWORD;
  4416. LoaderFlags: DWORD;
  4417. NumberOfRvaAndSizes: DWORD;
  4418. DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
  4419. end;
  4420. {$EXTERNALSYM _IMAGE_OPTIONAL_HEADER}
  4421. IMAGE_OPTIONAL_HEADER32 = _IMAGE_OPTIONAL_HEADER;
  4422. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER32}
  4423. TImageOptionalHeader32 = IMAGE_OPTIONAL_HEADER32;
  4424. PImageOptionalHeader32 = PIMAGE_OPTIONAL_HEADER32;
  4425. PIMAGE_ROM_OPTIONAL_HEADER = ^IMAGE_ROM_OPTIONAL_HEADER;
  4426. {$EXTERNALSYM PIMAGE_ROM_OPTIONAL_HEADER}
  4427. _IMAGE_ROM_OPTIONAL_HEADER = record
  4428. Magic: Word;
  4429. MajorLinkerVersion: Byte;
  4430. MinorLinkerVersion: Byte;
  4431. SizeOfCode: DWORD;
  4432. SizeOfInitializedData: DWORD;
  4433. SizeOfUninitializedData: DWORD;
  4434. AddressOfEntryPoint: DWORD;
  4435. BaseOfCode: DWORD;
  4436. BaseOfData: DWORD;
  4437. BaseOfBss: DWORD;
  4438. GprMask: DWORD;
  4439. CprMask: array [0..3] of DWORD;
  4440. GpValue: DWORD;
  4441. end;
  4442. {$EXTERNALSYM _IMAGE_ROM_OPTIONAL_HEADER}
  4443. IMAGE_ROM_OPTIONAL_HEADER = _IMAGE_ROM_OPTIONAL_HEADER;
  4444. {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HEADER}
  4445. TImageRomOptionalHeader = IMAGE_ROM_OPTIONAL_HEADER;
  4446. PImageRomOptionalHeader = PIMAGE_ROM_OPTIONAL_HEADER;
  4447. PIMAGE_OPTIONAL_HEADER64 = ^IMAGE_OPTIONAL_HEADER64;
  4448. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER64}
  4449. _IMAGE_OPTIONAL_HEADER64 = record
  4450. Magic: Word;
  4451. MajorLinkerVersion: Byte;
  4452. MinorLinkerVersion: Byte;
  4453. SizeOfCode: DWORD;
  4454. SizeOfInitializedData: DWORD;
  4455. SizeOfUninitializedData: DWORD;
  4456. AddressOfEntryPoint: DWORD;
  4457. BaseOfCode: DWORD;
  4458. ImageBase: Int64;
  4459. SectionAlignment: DWORD;
  4460. FileAlignment: DWORD;
  4461. MajorOperatingSystemVersion: Word;
  4462. MinorOperatingSystemVersion: Word;
  4463. MajorImageVersion: Word;
  4464. MinorImageVersion: Word;
  4465. MajorSubsystemVersion: Word;
  4466. MinorSubsystemVersion: Word;
  4467. Win32VersionValue: DWORD;
  4468. SizeOfImage: DWORD;
  4469. SizeOfHeaders: DWORD;
  4470. CheckSum: DWORD;
  4471. Subsystem: Word;
  4472. DllCharacteristics: Word;
  4473. SizeOfStackReserve: Int64;
  4474. SizeOfStackCommit: Int64;
  4475. SizeOfHeapReserve: Int64;
  4476. SizeOfHeapCommit: Int64;
  4477. LoaderFlags: DWORD;
  4478. NumberOfRvaAndSizes: DWORD;
  4479. DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
  4480. end;
  4481. {$EXTERNALSYM _IMAGE_OPTIONAL_HEADER64}
  4482. IMAGE_OPTIONAL_HEADER64 = _IMAGE_OPTIONAL_HEADER64;
  4483. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER64}
  4484. TImageOptionalHeader64 = IMAGE_OPTIONAL_HEADER64;
  4485. PImageOptionalHeader64 = PIMAGE_OPTIONAL_HEADER64;
  4486. const
  4487. IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56;
  4488. {$EXTERNALSYM IMAGE_SIZEOF_ROM_OPTIONAL_HEADER}
  4489. IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28;
  4490. {$EXTERNALSYM IMAGE_SIZEOF_STD_OPTIONAL_HEADER}
  4491. IMAGE_SIZEOF_NT_OPTIONAL32_HEADER = 224;
  4492. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL32_HEADER}
  4493. IMAGE_SIZEOF_NT_OPTIONAL64_HEADER = 240;
  4494. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL64_HEADER}
  4495. IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10b;
  4496. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR32_MAGIC}
  4497. IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20b;
  4498. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR64_MAGIC}
  4499. IMAGE_ROM_OPTIONAL_HDR_MAGIC = $107;
  4500. {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HDR_MAGIC}
  4501. type
  4502. IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
  4503. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER}
  4504. PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
  4505. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER}
  4506. const
  4507. IMAGE_SIZEOF_NT_OPTIONAL_HEADER = IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
  4508. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL_HEADER}
  4509. IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
  4510. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR_MAGIC}
  4511. type
  4512. PIMAGE_NT_HEADERS64 = ^IMAGE_NT_HEADERS64;
  4513. {$EXTERNALSYM PIMAGE_NT_HEADERS64}
  4514. _IMAGE_NT_HEADERS64 = record
  4515. Signature: DWORD;
  4516. FileHeader: IMAGE_FILE_HEADER;
  4517. OptionalHeader: IMAGE_OPTIONAL_HEADER64;
  4518. end;
  4519. {$EXTERNALSYM _IMAGE_NT_HEADERS64}
  4520. IMAGE_NT_HEADERS64 = _IMAGE_NT_HEADERS64;
  4521. {$EXTERNALSYM IMAGE_NT_HEADERS64}
  4522. TImageNtHeaders64 = IMAGE_NT_HEADERS64;
  4523. PImageNtHeaders64 = PIMAGE_NT_HEADERS64;
  4524. PIMAGE_NT_HEADERS32 = ^IMAGE_NT_HEADERS32;
  4525. {$EXTERNALSYM PIMAGE_NT_HEADERS32}
  4526. _IMAGE_NT_HEADERS = record
  4527. Signature: DWORD;
  4528. FileHeader: IMAGE_FILE_HEADER;
  4529. OptionalHeader: IMAGE_OPTIONAL_HEADER32;
  4530. end;
  4531. {$EXTERNALSYM _IMAGE_NT_HEADERS}
  4532. IMAGE_NT_HEADERS32 = _IMAGE_NT_HEADERS;
  4533. {$EXTERNALSYM IMAGE_NT_HEADERS32}
  4534. TImageNtHeaders32 = IMAGE_NT_HEADERS32;
  4535. PImageNtHeaders32 = PIMAGE_NT_HEADERS32;
  4536. PIMAGE_ROM_HEADERS = ^IMAGE_ROM_HEADERS;
  4537. {$EXTERNALSYM PIMAGE_ROM_HEADERS}
  4538. _IMAGE_ROM_HEADERS = record
  4539. FileHeader: IMAGE_FILE_HEADER;
  4540. OptionalHeader: IMAGE_ROM_OPTIONAL_HEADER;
  4541. end;
  4542. {$EXTERNALSYM _IMAGE_ROM_HEADERS}
  4543. IMAGE_ROM_HEADERS = _IMAGE_ROM_HEADERS;
  4544. {$EXTERNALSYM IMAGE_ROM_HEADERS}
  4545. TImageRomHeaders = IMAGE_ROM_HEADERS;
  4546. PImageRomHeaders = PIMAGE_ROM_HEADERS;
  4547. IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
  4548. {$EXTERNALSYM IMAGE_NT_HEADERS}
  4549. PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
  4550. {$EXTERNALSYM PIMAGE_NT_HEADERS}
  4551. PImageNtHeaders = PIMAGE_NT_HEADERS;
  4552. // Subsystem Values
  4553. const
  4554. IMAGE_SUBSYSTEM_UNKNOWN = 0; // Unknown subsystem.
  4555. {$EXTERNALSYM IMAGE_SUBSYSTEM_UNKNOWN}
  4556. IMAGE_SUBSYSTEM_NATIVE = 1; // Image doesn't require a subsystem.
  4557. {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE}
  4558. IMAGE_SUBSYSTEM_WINDOWS_GUI = 2; // Image runs in the Windows GUI subsystem.
  4559. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_GUI}
  4560. IMAGE_SUBSYSTEM_WINDOWS_CUI = 3; // Image runs in the Windows character subsystem.
  4561. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CUI}
  4562. IMAGE_SUBSYSTEM_OS2_CUI = 5; // image runs in the OS/2 character subsystem.
  4563. {$EXTERNALSYM IMAGE_SUBSYSTEM_OS2_CUI}
  4564. IMAGE_SUBSYSTEM_POSIX_CUI = 7; // image runs in the Posix character subsystem.
  4565. {$EXTERNALSYM IMAGE_SUBSYSTEM_POSIX_CUI}
  4566. IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8; // image is a native Win9x driver.
  4567. {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE_WINDOWS}
  4568. IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9; // Image runs in the Windows CE subsystem.
  4569. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CE_GUI}
  4570. IMAGE_SUBSYSTEM_EFI_APPLICATION = 10;
  4571. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_APPLICATION}
  4572. IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11;
  4573. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER}
  4574. IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12;
  4575. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER}
  4576. IMAGE_SUBSYSTEM_EFI_ROM = 13;
  4577. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_ROM}
  4578. IMAGE_SUBSYSTEM_XBOX = 14;
  4579. {$EXTERNALSYM IMAGE_SUBSYSTEM_XBOX}
  4580. // DllCharacteristics Entries
  4581. // IMAGE_LIBRARY_PROCESS_INIT 0x0001 // Reserved.
  4582. // IMAGE_LIBRARY_PROCESS_TERM 0x0002 // Reserved.
  4583. // IMAGE_LIBRARY_THREAD_INIT 0x0004 // Reserved.
  4584. // IMAGE_LIBRARY_THREAD_TERM 0x0008 // Reserved.
  4585. IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = $0200; // Image understands isolation and doesn't want it
  4586. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_ISOLATION}
  4587. IMAGE_DLLCHARACTERISTICS_NO_SEH = $0400; // Image does not use SEH. No SE handler may reside in this image
  4588. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_SEH}
  4589. IMAGE_DLLCHARACTERISTICS_NO_BIND = $0800; // Do not bind this image.
  4590. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_BIND}
  4591. // 0x1000 // Reserved.
  4592. IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = $2000; // Driver uses WDM model
  4593. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_WDM_DRIVER}
  4594. // 0x4000 // Reserved.
  4595. IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
  4596. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
  4597. // Directory Entries
  4598. IMAGE_DIRECTORY_ENTRY_EXPORT = 0; // Export Directory
  4599. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXPORT}
  4600. IMAGE_DIRECTORY_ENTRY_IMPORT = 1; // Import Directory
  4601. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IMPORT}
  4602. IMAGE_DIRECTORY_ENTRY_RESOURCE = 2; // Resource Directory
  4603. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_RESOURCE}
  4604. IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3; // Exception Directory
  4605. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXCEPTION}
  4606. IMAGE_DIRECTORY_ENTRY_SECURITY = 4; // Security Directory
  4607. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_SECURITY}
  4608. IMAGE_DIRECTORY_ENTRY_BASERELOC = 5; // Base Relocation Table
  4609. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BASERELOC}
  4610. IMAGE_DIRECTORY_ENTRY_DEBUG = 6; // Debug Directory
  4611. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DEBUG}
  4612. // IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage)
  4613. IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7; // Architecture Specific Data
  4614. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_ARCHITECTURE}
  4615. IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8; // RVA of GP
  4616. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_GLOBALPTR}
  4617. IMAGE_DIRECTORY_ENTRY_TLS = 9; // TLS Directory
  4618. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_TLS}
  4619. IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10; // Load Configuration Directory
  4620. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG}
  4621. IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11; // Bound Import Directory in headers
  4622. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT}
  4623. IMAGE_DIRECTORY_ENTRY_IAT = 12; // Import Address Table
  4624. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IAT}
  4625. IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13; // Delay Load Import Descriptors
  4626. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT}
  4627. IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14; // COM Runtime descriptor
  4628. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR}
  4629. //
  4630. // Non-COFF Object file header
  4631. //
  4632. type
  4633. PAnonObjectHeader = ^ANON_OBJECT_HEADER;
  4634. ANON_OBJECT_HEADER = record
  4635. Sig1: Word; // Must be IMAGE_FILE_MACHINE_UNKNOWN
  4636. Sig2: Word; // Must be 0xffff
  4637. Version: Word; // >= 1 (implies the CLSID field is present)
  4638. Machine: Word;
  4639. TimeDateStamp: DWORD;
  4640. ClassID: CLSID; // Used to invoke CoCreateInstance
  4641. SizeOfData: DWORD; // Size of data that follows the header
  4642. end;
  4643. {$EXTERNALSYM ANON_OBJECT_HEADER}
  4644. TAnonObjectHeader = ANON_OBJECT_HEADER;
  4645. //
  4646. // Section header format.
  4647. //
  4648. const
  4649. IMAGE_SIZEOF_SHORT_NAME = 8;
  4650. {$EXTERNALSYM IMAGE_SIZEOF_SHORT_NAME}
  4651. type
  4652. TImgSecHdrMisc = record
  4653. case Integer of
  4654. 0: (PhysicalAddress: DWORD);
  4655. 1: (VirtualSize: DWORD);
  4656. end;
  4657. PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
  4658. {$EXTERNALSYM PIMAGE_SECTION_HEADER}
  4659. _IMAGE_SECTION_HEADER = record
  4660. Name: array [0..IMAGE_SIZEOF_SHORT_NAME - 1] of BYTE;
  4661. Misc: TImgSecHdrMisc;
  4662. VirtualAddress: DWORD;
  4663. SizeOfRawData: DWORD;
  4664. PointerToRawData: DWORD;
  4665. PointerToRelocations: DWORD;
  4666. PointerToLinenumbers: DWORD;
  4667. NumberOfRelocations: WORD;
  4668. NumberOfLinenumbers: WORD;
  4669. Characteristics: DWORD;
  4670. end;
  4671. {$EXTERNALSYM _IMAGE_SECTION_HEADER}
  4672. IMAGE_SECTION_HEADER = _IMAGE_SECTION_HEADER;
  4673. {$EXTERNALSYM IMAGE_SECTION_HEADER}
  4674. TImageSectionHeader = IMAGE_SECTION_HEADER;
  4675. PImageSectionHeader = PIMAGE_SECTION_HEADER;
  4676. // IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.
  4677. function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
  4678. {$EXTERNALSYM IMAGE_FIRST_SECTION}
  4679. const
  4680. IMAGE_SIZEOF_SECTION_HEADER = 40;
  4681. {$EXTERNALSYM IMAGE_SIZEOF_SECTION_HEADER}
  4682. //
  4683. // Section characteristics.
  4684. //
  4685. // IMAGE_SCN_TYPE_REG 0x00000000 // Reserved.
  4686. // IMAGE_SCN_TYPE_DSECT 0x00000001 // Reserved.
  4687. // IMAGE_SCN_TYPE_NOLOAD 0x00000002 // Reserved.
  4688. // IMAGE_SCN_TYPE_GROUP 0x00000004 // Reserved.
  4689. IMAGE_SCN_TYPE_NO_PAD = $00000008; // Reserved.
  4690. {$EXTERNALSYM IMAGE_SCN_TYPE_NO_PAD}
  4691. // IMAGE_SCN_TYPE_COPY 0x00000010 // Reserved.
  4692. IMAGE_SCN_CNT_CODE = $00000020; // Section contains code.
  4693. {$EXTERNALSYM IMAGE_SCN_CNT_CODE}
  4694. IMAGE_SCN_CNT_INITIALIZED_DATA = $00000040; // Section contains initialized data.
  4695. {$EXTERNALSYM IMAGE_SCN_CNT_INITIALIZED_DATA}
  4696. IMAGE_SCN_CNT_UNINITIALIZED_DATA = $00000080; // Section contains uninitialized data.
  4697. {$EXTERNALSYM IMAGE_SCN_CNT_UNINITIALIZED_DATA}
  4698. IMAGE_SCN_LNK_OTHER = $00000100; // Reserved.
  4699. {$EXTERNALSYM IMAGE_SCN_LNK_OTHER}
  4700. IMAGE_SCN_LNK_INFO = $00000200; // Section contains comments or some other type of information.
  4701. {$EXTERNALSYM IMAGE_SCN_LNK_INFO}
  4702. // IMAGE_SCN_TYPE_OVER 0x00000400 // Reserved.
  4703. IMAGE_SCN_LNK_REMOVE = $00000800; // Section contents will not become part of image.
  4704. {$EXTERNALSYM IMAGE_SCN_LNK_REMOVE}
  4705. IMAGE_SCN_LNK_COMDAT = $00001000; // Section contents comdat.
  4706. {$EXTERNALSYM IMAGE_SCN_LNK_COMDAT}
  4707. // 0x00002000 // Reserved.
  4708. // IMAGE_SCN_MEM_PROTECTED - Obsolete 0x00004000
  4709. IMAGE_SCN_NO_DEFER_SPEC_EXC = $00004000; // Reset speculative exceptions handling bits in the TLB entries for this section.
  4710. {$EXTERNALSYM IMAGE_SCN_NO_DEFER_SPEC_EXC}
  4711. IMAGE_SCN_GPREL = $00008000; // Section content can be accessed relative to GP
  4712. {$EXTERNALSYM IMAGE_SCN_GPREL}
  4713. IMAGE_SCN_MEM_FARDATA = $00008000;
  4714. {$EXTERNALSYM IMAGE_SCN_MEM_FARDATA}
  4715. // IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x00010000
  4716. IMAGE_SCN_MEM_PURGEABLE = $00020000;
  4717. {$EXTERNALSYM IMAGE_SCN_MEM_PURGEABLE}
  4718. IMAGE_SCN_MEM_16BIT = $00020000;
  4719. {$EXTERNALSYM IMAGE_SCN_MEM_16BIT}
  4720. IMAGE_SCN_MEM_LOCKED = $00040000;
  4721. {$EXTERNALSYM IMAGE_SCN_MEM_LOCKED}
  4722. IMAGE_SCN_MEM_PRELOAD = $00080000;
  4723. {$EXTERNALSYM IMAGE_SCN_MEM_PRELOAD}
  4724. IMAGE_SCN_ALIGN_1BYTES = $00100000;
  4725. {$EXTERNALSYM IMAGE_SCN_ALIGN_1BYTES}
  4726. IMAGE_SCN_ALIGN_2BYTES = $00200000;
  4727. {$EXTERNALSYM IMAGE_SCN_ALIGN_2BYTES}
  4728. IMAGE_SCN_ALIGN_4BYTES = $00300000;
  4729. {$EXTERNALSYM IMAGE_SCN_ALIGN_4BYTES}
  4730. IMAGE_SCN_ALIGN_8BYTES = $00400000;
  4731. {$EXTERNALSYM IMAGE_SCN_ALIGN_8BYTES}
  4732. IMAGE_SCN_ALIGN_16BYTES = $00500000; // Default alignment if no others are specified.
  4733. {$EXTERNALSYM IMAGE_SCN_ALIGN_16BYTES}
  4734. IMAGE_SCN_ALIGN_32BYTES = $00600000;
  4735. {$EXTERNALSYM IMAGE_SCN_ALIGN_32BYTES}
  4736. IMAGE_SCN_ALIGN_64BYTES = $00700000;
  4737. {$EXTERNALSYM IMAGE_SCN_ALIGN_64BYTES}
  4738. IMAGE_SCN_ALIGN_128BYTES = $00800000;
  4739. {$EXTERNALSYM IMAGE_SCN_ALIGN_128BYTES}
  4740. IMAGE_SCN_ALIGN_256BYTES = $00900000;
  4741. {$EXTERNALSYM IMAGE_SCN_ALIGN_256BYTES}
  4742. IMAGE_SCN_ALIGN_512BYTES = $00A00000;
  4743. {$EXTERNALSYM IMAGE_SCN_ALIGN_512BYTES}
  4744. IMAGE_SCN_ALIGN_1024BYTES = $00B00000;
  4745. {$EXTERNALSYM IMAGE_SCN_ALIGN_1024BYTES}
  4746. IMAGE_SCN_ALIGN_2048BYTES = $00C00000;
  4747. {$EXTERNALSYM IMAGE_SCN_ALIGN_2048BYTES}
  4748. IMAGE_SCN_ALIGN_4096BYTES = $00D00000;
  4749. {$EXTERNALSYM IMAGE_SCN_ALIGN_4096BYTES}
  4750. IMAGE_SCN_ALIGN_8192BYTES = $00E00000;
  4751. {$EXTERNALSYM IMAGE_SCN_ALIGN_8192BYTES}
  4752. // Unused 0x00F00000
  4753. IMAGE_SCN_ALIGN_MASK = $00F00000;
  4754. {$EXTERNALSYM IMAGE_SCN_ALIGN_MASK}
  4755. IMAGE_SCN_LNK_NRELOC_OVFL = $01000000; // Section contains extended relocations.
  4756. {$EXTERNALSYM IMAGE_SCN_LNK_NRELOC_OVFL}
  4757. IMAGE_SCN_MEM_DISCARDABLE = $02000000; // Section can be discarded.
  4758. {$EXTERNALSYM IMAGE_SCN_MEM_DISCARDABLE}
  4759. IMAGE_SCN_MEM_NOT_CACHED = $04000000; // Section is not cachable.
  4760. {$EXTERNALSYM IMAGE_SCN_MEM_NOT_CACHED}
  4761. IMAGE_SCN_MEM_NOT_PAGED = $08000000; // Section is not pageable.
  4762. {$EXTERNALSYM IMAGE_SCN_MEM_NOT_PAGED}
  4763. IMAGE_SCN_MEM_SHARED = $10000000; // Section is shareable.
  4764. {$EXTERNALSYM IMAGE_SCN_MEM_SHARED}
  4765. IMAGE_SCN_MEM_EXECUTE = $20000000; // Section is executable.
  4766. {$EXTERNALSYM IMAGE_SCN_MEM_EXECUTE}
  4767. IMAGE_SCN_MEM_READ = $40000000; // Section is readable.
  4768. {$EXTERNALSYM IMAGE_SCN_MEM_READ}
  4769. IMAGE_SCN_MEM_WRITE = DWORD($80000000); // Section is writeable.
  4770. {$EXTERNALSYM IMAGE_SCN_MEM_WRITE}
  4771. //
  4772. // TLS Chaacteristic Flags
  4773. //
  4774. IMAGE_SCN_SCALE_INDEX = $00000001; // Tls index is scaled
  4775. {$EXTERNALSYM IMAGE_SCN_SCALE_INDEX}
  4776. // #include "pshpack2.h" // Symbols, relocs, and linenumbers are 2 byte packed
  4777. //
  4778. // Symbol format.
  4779. //
  4780. type
  4781. TImageSymbolN = record
  4782. case Integer of
  4783. 0: (
  4784. ShortName: array [0..7] of BYTE);
  4785. 1: (
  4786. Short: DWORD; // if 0, use LongName
  4787. Long: DWORD); // offset into string table
  4788. 2: (
  4789. LongName: array [0..1] of DWORD);
  4790. end;
  4791. PIMAGE_SYMBOL = ^IMAGE_SYMBOL;
  4792. {$EXTERNALSYM PIMAGE_SYMBOL}
  4793. _IMAGE_SYMBOL = record
  4794. N: TImageSymbolN;
  4795. Value: DWORD;
  4796. SectionNumber: SHORT;
  4797. Type_: WORD;
  4798. StorageClass: BYTE;
  4799. NumberOfAuxSymbols: BYTE;
  4800. end;
  4801. {$EXTERNALSYM _IMAGE_SYMBOL}
  4802. IMAGE_SYMBOL = _IMAGE_SYMBOL;
  4803. {$EXTERNALSYM IMAGE_SYMBOL}
  4804. TImageSymbol = IMAGE_SYMBOL;
  4805. PImageSymbol = PIMAGE_SYMBOL;
  4806. const
  4807. IMAGE_SIZEOF_SYMBOL = 18;
  4808. {$EXTERNALSYM IMAGE_SIZEOF_SYMBOL}
  4809. //
  4810. // Section values.
  4811. //
  4812. // Symbols have a section number of the section in which they are
  4813. // defined. Otherwise, section numbers have the following meanings:
  4814. //
  4815. IMAGE_SYM_UNDEFINED = SHORT(0); // Symbol is undefined or is common.
  4816. {$EXTERNALSYM IMAGE_SYM_UNDEFINED}
  4817. IMAGE_SYM_ABSOLUTE = SHORT(-1); // Symbol is an absolute value.
  4818. {$EXTERNALSYM IMAGE_SYM_ABSOLUTE}
  4819. IMAGE_SYM_DEBUG = SHORT(-2); // Symbol is a special debug item.
  4820. {$EXTERNALSYM IMAGE_SYM_DEBUG}
  4821. IMAGE_SYM_SECTION_MAX = SHORT($FEFF ); // Values 0xFF00-0xFFFF are special
  4822. {$EXTERNALSYM IMAGE_SYM_SECTION_MAX}
  4823. //
  4824. // Type (fundamental) values.
  4825. //
  4826. IMAGE_SYM_TYPE_NULL = $0000; // no type.
  4827. {$EXTERNALSYM IMAGE_SYM_TYPE_NULL}
  4828. IMAGE_SYM_TYPE_VOID = $0001;
  4829. {$EXTERNALSYM IMAGE_SYM_TYPE_VOID}
  4830. IMAGE_SYM_TYPE_CHAR = $0002; // type character.
  4831. {$EXTERNALSYM IMAGE_SYM_TYPE_CHAR}
  4832. IMAGE_SYM_TYPE_SHORT = $0003; // type short integer.
  4833. {$EXTERNALSYM IMAGE_SYM_TYPE_SHORT}
  4834. IMAGE_SYM_TYPE_INT = $0004;
  4835. {$EXTERNALSYM IMAGE_SYM_TYPE_INT}
  4836. IMAGE_SYM_TYPE_LONG = $0005;
  4837. {$EXTERNALSYM IMAGE_SYM_TYPE_LONG}
  4838. IMAGE_SYM_TYPE_FLOAT = $0006;
  4839. {$EXTERNALSYM IMAGE_SYM_TYPE_FLOAT}
  4840. IMAGE_SYM_TYPE_DOUBLE = $0007;
  4841. {$EXTERNALSYM IMAGE_SYM_TYPE_DOUBLE}
  4842. IMAGE_SYM_TYPE_STRUCT = $0008;
  4843. {$EXTERNALSYM IMAGE_SYM_TYPE_STRUCT}
  4844. IMAGE_SYM_TYPE_UNION = $0009;
  4845. {$EXTERNALSYM IMAGE_SYM_TYPE_UNION}
  4846. IMAGE_SYM_TYPE_ENUM = $000A; // enumeration.
  4847. {$EXTERNALSYM IMAGE_SYM_TYPE_ENUM}
  4848. IMAGE_SYM_TYPE_MOE = $000B; // member of enumeration.
  4849. {$EXTERNALSYM IMAGE_SYM_TYPE_MOE}
  4850. IMAGE_SYM_TYPE_BYTE = $000C;
  4851. {$EXTERNALSYM IMAGE_SYM_TYPE_BYTE}
  4852. IMAGE_SYM_TYPE_WORD = $000D;
  4853. {$EXTERNALSYM IMAGE_SYM_TYPE_WORD}
  4854. IMAGE_SYM_TYPE_UINT = $000E;
  4855. {$EXTERNALSYM IMAGE_SYM_TYPE_UINT}
  4856. IMAGE_SYM_TYPE_DWORD = $000F;
  4857. {$EXTERNALSYM IMAGE_SYM_TYPE_DWORD}
  4858. IMAGE_SYM_TYPE_PCODE = $8000;
  4859. {$EXTERNALSYM IMAGE_SYM_TYPE_PCODE}
  4860. //
  4861. // Type (derived) values.
  4862. //
  4863. IMAGE_SYM_DTYPE_NULL = 0; // no derived type.
  4864. {$EXTERNALSYM IMAGE_SYM_DTYPE_NULL}
  4865. IMAGE_SYM_DTYPE_POINTER = 1; // pointer.
  4866. {$EXTERNALSYM IMAGE_SYM_DTYPE_POINTER}
  4867. IMAGE_SYM_DTYPE_FUNCTION = 2; // function.
  4868. {$EXTERNALSYM IMAGE_SYM_DTYPE_FUNCTION}
  4869. IMAGE_SYM_DTYPE_ARRAY = 3; // array.
  4870. {$EXTERNALSYM IMAGE_SYM_DTYPE_ARRAY}
  4871. //
  4872. // Storage classes.
  4873. //
  4874. IMAGE_SYM_CLASS_END_OF_FUNCTION = BYTE(-1);
  4875. {$EXTERNALSYM IMAGE_SYM_CLASS_END_OF_FUNCTION}
  4876. IMAGE_SYM_CLASS_NULL = $0000;
  4877. {$EXTERNALSYM IMAGE_SYM_CLASS_NULL}
  4878. IMAGE_SYM_CLASS_AUTOMATIC = $0001;
  4879. {$EXTERNALSYM IMAGE_SYM_CLASS_AUTOMATIC}
  4880. IMAGE_SYM_CLASS_EXTERNAL = $0002;
  4881. {$EXTERNALSYM IMAGE_SYM_CLASS_EXTERNAL}
  4882. IMAGE_SYM_CLASS_STATIC = $0003;
  4883. {$EXTERNALSYM IMAGE_SYM_CLASS_STATIC}
  4884. IMAGE_SYM_CLASS_REGISTER = $0004;
  4885. {$EXTERNALSYM IMAGE_SYM_CLASS_REGISTER}
  4886. IMAGE_SYM_CLASS_EXTERNAL_DEF = $0005;
  4887. {$EXTERNALSYM IMAGE_SYM_CLASS_EXTERNAL_DEF}
  4888. IMAGE_SYM_CLASS_LABEL = $0006;
  4889. {$EXTERNALSYM IMAGE_SYM_CLASS_LABEL}
  4890. IMAGE_SYM_CLASS_UNDEFINED_LABEL = $0007;
  4891. {$EXTERNALSYM IMAGE_SYM_CLASS_UNDEFINED_LABEL}
  4892. IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = $0008;
  4893. {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_STRUCT}
  4894. IMAGE_SYM_CLASS_ARGUMENT = $0009;
  4895. {$EXTERNALSYM IMAGE_SYM_CLASS_ARGUMENT}
  4896. IMAGE_SYM_CLASS_STRUCT_TAG = $000A;
  4897. {$EXTERNALSYM IMAGE_SYM_CLASS_STRUCT_TAG}
  4898. IMAGE_SYM_CLASS_MEMBER_OF_UNION = $000B;
  4899. {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_UNION}
  4900. IMAGE_SYM_CLASS_UNION_TAG = $000C;
  4901. {$EXTERNALSYM IMAGE_SYM_CLASS_UNION_TAG}
  4902. IMAGE_SYM_CLASS_TYPE_DEFINITION = $000D;
  4903. {$EXTERNALSYM IMAGE_SYM_CLASS_TYPE_DEFINITION}
  4904. IMAGE_SYM_CLASS_UNDEFINED_STATIC = $000E;
  4905. {$EXTERNALSYM IMAGE_SYM_CLASS_UNDEFINED_STATIC}
  4906. IMAGE_SYM_CLASS_ENUM_TAG = $000F;
  4907. {$EXTERNALSYM IMAGE_SYM_CLASS_ENUM_TAG}
  4908. IMAGE_SYM_CLASS_MEMBER_OF_ENUM = $0010;
  4909. {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_ENUM}
  4910. IMAGE_SYM_CLASS_REGISTER_PARAM = $0011;
  4911. {$EXTERNALSYM IMAGE_SYM_CLASS_REGISTER_PARAM}
  4912. IMAGE_SYM_CLASS_BIT_FIELD = $0012;
  4913. {$EXTERNALSYM IMAGE_SYM_CLASS_BIT_FIELD}
  4914. IMAGE_SYM_CLASS_FAR_EXTERNAL = $0044;
  4915. {$EXTERNALSYM IMAGE_SYM_CLASS_FAR_EXTERNAL}
  4916. IMAGE_SYM_CLASS_BLOCK = $0064;
  4917. {$EXTERNALSYM IMAGE_SYM_CLASS_BLOCK}
  4918. IMAGE_SYM_CLASS_FUNCTION = $0065;
  4919. {$EXTERNALSYM IMAGE_SYM_CLASS_FUNCTION}
  4920. IMAGE_SYM_CLASS_END_OF_STRUCT = $0066;
  4921. {$EXTERNALSYM IMAGE_SYM_CLASS_END_OF_STRUCT}
  4922. IMAGE_SYM_CLASS_FILE = $0067;
  4923. {$EXTERNALSYM IMAGE_SYM_CLASS_FILE}
  4924. // new
  4925. IMAGE_SYM_CLASS_SECTION = $0068;
  4926. {$EXTERNALSYM IMAGE_SYM_CLASS_SECTION}
  4927. IMAGE_SYM_CLASS_WEAK_EXTERNAL = $0069;
  4928. {$EXTERNALSYM IMAGE_SYM_CLASS_WEAK_EXTERNAL}
  4929. IMAGE_SYM_CLASS_CLR_TOKEN = $006B;
  4930. {$EXTERNALSYM IMAGE_SYM_CLASS_CLR_TOKEN}
  4931. // type packing constants
  4932. N_BTMASK = $000F;
  4933. {$EXTERNALSYM N_BTMASK}
  4934. N_TMASK = $0030;
  4935. {$EXTERNALSYM N_TMASK}
  4936. N_TMASK1 = $00C0;
  4937. {$EXTERNALSYM N_TMASK1}
  4938. N_TMASK2 = $00F0;
  4939. {$EXTERNALSYM N_TMASK2}
  4940. N_BTSHFT = 4;
  4941. {$EXTERNALSYM N_BTSHFT}
  4942. N_TSHIFT = 2;
  4943. {$EXTERNALSYM N_TSHIFT}
  4944. // MACROS
  4945. // Basic Type of x
  4946. function BTYPE(x: DWORD): DWORD;
  4947. {$EXTERNALSYM BTYPE}
  4948. // Is x a pointer?
  4949. function ISPTR(x: DWORD): Boolean;
  4950. {$EXTERNALSYM ISPTR}
  4951. // Is x a function?
  4952. function ISFCN(x: DWORD): Boolean;
  4953. {$EXTERNALSYM ISFCN}
  4954. // Is x an array?
  4955. function ISARY(x: DWORD): Boolean;
  4956. {$EXTERNALSYM ISARY}
  4957. // Is x a structure, union, or enumeration TAG?
  4958. function ISTAG(x: DWORD): Boolean;
  4959. {$EXTERNALSYM ISTAG}
  4960. //
  4961. // Auxiliary entry format.
  4962. //
  4963. type
  4964. TImgAuzSymSymMisc = record
  4965. case Integer of
  4966. 0: (
  4967. Linenumber: WORD; // declaration line number
  4968. Size: WORD); // size of struct, union, or enum
  4969. 1: (
  4970. TotalSize: DWORD);
  4971. end;
  4972. TImgAuzSymSymFcnAry = record
  4973. case Integer of
  4974. 0: ( // if ISFCN, tag, or .bb
  4975. PointerToLinenumber: DWORD;
  4976. PointerToNextFunction: DWORD);
  4977. 1: ( // if ISARY, up to 4 dimen.
  4978. Dimension: array [0..3] of WORD);
  4979. end;
  4980. TImgAuxSymSym = record
  4981. TagIndex: DWORD; // struct, union, or enum tag index
  4982. Misc: TImgAuzSymSymMisc;
  4983. FcnAry: TImgAuzSymSymFcnAry;
  4984. TvIndex: WORD; // tv index
  4985. end;
  4986. TImgAuxSymFile = record
  4987. Name: array [0..IMAGE_SIZEOF_SYMBOL - 1] of BYTE;
  4988. end;
  4989. TImgAuxSymSection = record
  4990. Length: DWORD; // section length
  4991. NumberOfRelocations: WORD; // number of relocation entries
  4992. NumberOfLinenumbers: WORD; // number of line numbers
  4993. CheckSum: DWORD; // checksum for communal
  4994. Number: SHORT; // section number to associate with
  4995. Selection: BYTE; // communal selection type
  4996. end;
  4997. PIMAGE_AUX_SYMBOL = ^IMAGE_AUX_SYMBOL;
  4998. {$EXTERNALSYM PIMAGE_AUX_SYMBOL}
  4999. _IMAGE_AUX_SYMBOL = record
  5000. case Integer of
  5001. 0: (Sym: TImgAuxSymSym);
  5002. 1: (File_: TImgAuxSymFile);
  5003. 2: (Section: TImgAuxSymSection);
  5004. end;
  5005. {$EXTERNALSYM _IMAGE_AUX_SYMBOL}
  5006. IMAGE_AUX_SYMBOL = _IMAGE_AUX_SYMBOL;
  5007. {$EXTERNALSYM IMAGE_AUX_SYMBOL}
  5008. TImageAuxSymbol = IMAGE_AUX_SYMBOL;
  5009. PImageAuxSymbol = PIMAGE_AUX_SYMBOL;
  5010. const
  5011. IMAGE_SIZEOF_AUX_SYMBOL = 18;
  5012. {$EXTERNALSYM IMAGE_SIZEOF_AUX_SYMBOL}
  5013. IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1;
  5014. {$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF}
  5015. type
  5016. IMAGE_AUX_SYMBOL_TYPE = DWORD;
  5017. {$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE}
  5018. TImageAuxSymbolType = IMAGE_AUX_SYMBOL_TYPE;
  5019. IMAGE_AUX_SYMBOL_TOKEN_DEF = packed record
  5020. bAuxType: BYTE; // IMAGE_AUX_SYMBOL_TYPE
  5021. bReserved: BYTE; // Must be 0
  5022. SymbolTableIndex: DWORD;
  5023. rgbReserved: array [0..11] of BYTE; // Must be 0
  5024. end;
  5025. {$EXTERNALSYM IMAGE_AUX_SYMBOL_TOKEN_DEF}
  5026. PIMAGE_AUX_SYMBOL_TOKEN_DEF = ^IMAGE_AUX_SYMBOL_TOKEN_DEF;
  5027. {$EXTERNALSYM PIMAGE_AUX_SYMBOL_TOKEN_DEF}
  5028. TImageAuxSymbolTokenDef = IMAGE_AUX_SYMBOL_TOKEN_DEF;
  5029. PImageAuxSymbolTokenDef = PIMAGE_AUX_SYMBOL_TOKEN_DEF;
  5030. //
  5031. // Communal selection types.
  5032. //
  5033. const
  5034. IMAGE_COMDAT_SELECT_NODUPLICATES = 1;
  5035. {$EXTERNALSYM IMAGE_COMDAT_SELECT_NODUPLICATES}
  5036. IMAGE_COMDAT_SELECT_ANY = 2;
  5037. {$EXTERNALSYM IMAGE_COMDAT_SELECT_ANY}
  5038. IMAGE_COMDAT_SELECT_SAME_SIZE = 3;
  5039. {$EXTERNALSYM IMAGE_COMDAT_SELECT_SAME_SIZE}
  5040. IMAGE_COMDAT_SELECT_EXACT_MATCH = 4;
  5041. {$EXTERNALSYM IMAGE_COMDAT_SELECT_EXACT_MATCH}
  5042. IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5;
  5043. {$EXTERNALSYM IMAGE_COMDAT_SELECT_ASSOCIATIVE}
  5044. IMAGE_COMDAT_SELECT_LARGEST = 6;
  5045. {$EXTERNALSYM IMAGE_COMDAT_SELECT_LARGEST}
  5046. IMAGE_COMDAT_SELECT_NEWEST = 7;
  5047. {$EXTERNALSYM IMAGE_COMDAT_SELECT_NEWEST}
  5048. IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1;
  5049. {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY}
  5050. IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2;
  5051. {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_LIBRARY}
  5052. IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3;
  5053. {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_ALIAS}
  5054. //
  5055. // Relocation format.
  5056. //
  5057. type
  5058. TImgRelocUnion = record
  5059. case Integer of
  5060. 0: (VirtualAddress: DWORD);
  5061. 1: (RelocCount: DWORD); // Set to the real count when IMAGE_SCN_LNK_NRELOC_OVFL is set
  5062. end;
  5063. PIMAGE_RELOCATION = ^IMAGE_RELOCATION;
  5064. {$EXTERNALSYM PIMAGE_RELOCATION}
  5065. _IMAGE_RELOCATION = record
  5066. Union: TImgRelocUnion;
  5067. SymbolTableIndex: DWORD;
  5068. Type_: WORD;
  5069. end;
  5070. {$EXTERNALSYM _IMAGE_RELOCATION}
  5071. IMAGE_RELOCATION = _IMAGE_RELOCATION;
  5072. {$EXTERNALSYM IMAGE_RELOCATION}
  5073. TImageRelocation = IMAGE_RELOCATION;
  5074. PImageRelocation = PIMAGE_RELOCATION;
  5075. const
  5076. IMAGE_SIZEOF_RELOCATION = 10;
  5077. {$EXTERNALSYM IMAGE_SIZEOF_RELOCATION}
  5078. //
  5079. // I386 relocation types.
  5080. //
  5081. IMAGE_REL_I386_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
  5082. {$EXTERNALSYM IMAGE_REL_I386_ABSOLUTE}
  5083. IMAGE_REL_I386_DIR16 = $0001; // Direct 16-bit reference to the symbols virtual address
  5084. {$EXTERNALSYM IMAGE_REL_I386_DIR16}
  5085. IMAGE_REL_I386_REL16 = $0002; // PC-relative 16-bit reference to the symbols virtual address
  5086. {$EXTERNALSYM IMAGE_REL_I386_REL16}
  5087. IMAGE_REL_I386_DIR32 = $0006; // Direct 32-bit reference to the symbols virtual address
  5088. {$EXTERNALSYM IMAGE_REL_I386_DIR32}
  5089. IMAGE_REL_I386_DIR32NB = $0007; // Direct 32-bit reference to the symbols virtual address, base not included
  5090. {$EXTERNALSYM IMAGE_REL_I386_DIR32NB}
  5091. IMAGE_REL_I386_SEG12 = $0009; // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address
  5092. {$EXTERNALSYM IMAGE_REL_I386_SEG12}
  5093. IMAGE_REL_I386_SECTION = $000A;
  5094. {$EXTERNALSYM IMAGE_REL_I386_SECTION}
  5095. IMAGE_REL_I386_SECREL = $000B;
  5096. {$EXTERNALSYM IMAGE_REL_I386_SECREL}
  5097. IMAGE_REL_MIPS_SECRELLO = $000C; // Low 16-bit section relative referemce (used for >32k TLS)
  5098. {$EXTERNALSYM IMAGE_REL_MIPS_SECRELLO}
  5099. IMAGE_REL_MIPS_SECRELHI = $000D; // High 16-bit section relative reference (used for >32k TLS)
  5100. {$EXTERNALSYM IMAGE_REL_MIPS_SECRELHI}
  5101. IMAGE_REL_I386_REL32 = $0014; // PC-relative 32-bit reference to the symbols virtual address
  5102. {$EXTERNALSYM IMAGE_REL_I386_REL32}
  5103. //
  5104. // MIPS relocation types.
  5105. //
  5106. IMAGE_REL_MIPS_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
  5107. {$EXTERNALSYM IMAGE_REL_MIPS_ABSOLUTE}
  5108. IMAGE_REL_MIPS_REFHALF = $0001;
  5109. {$EXTERNALSYM IMAGE_REL_MIPS_REFHALF}
  5110. IMAGE_REL_MIPS_REFWORD = $0002;
  5111. {$EXTERNALSYM IMAGE_REL_MIPS_REFWORD}
  5112. IMAGE_REL_MIPS_JMPADDR = $0003;
  5113. {$EXTERNALSYM IMAGE_REL_MIPS_JMPADDR}
  5114. IMAGE_REL_MIPS_REFHI = $0004;
  5115. {$EXTERNALSYM IMAGE_REL_MIPS_REFHI}
  5116. IMAGE_REL_MIPS_REFLO = $0005;
  5117. {$EXTERNALSYM IMAGE_REL_MIPS_REFLO}
  5118. IMAGE_REL_MIPS_GPREL = $0006;
  5119. {$EXTERNALSYM IMAGE_REL_MIPS_GPREL}
  5120. IMAGE_REL_MIPS_LITERAL = $0007;
  5121. {$EXTERNALSYM IMAGE_REL_MIPS_LITERAL}
  5122. IMAGE_REL_MIPS_SECTION = $000A;
  5123. {$EXTERNALSYM IMAGE_REL_MIPS_SECTION}
  5124. IMAGE_REL_MIPS_SECREL = $000B;
  5125. {$EXTERNALSYM IMAGE_REL_MIPS_SECREL}
  5126. //IMAGE_REL_MIPS_SECRELLO = $000C; // Low 16-bit section relative referemce (used for >32k TLS)
  5127. //{$EXTERNALSYM IMAGE_REL_MIPS_SECRELLO}
  5128. //IMAGE_REL_MIPS_SECRELHI = $000D; // High 16-bit section relative reference (used for >32k TLS)
  5129. //{$EXTERNALSYM IMAGE_REL_MIPS_SECRELHI}
  5130. IMAGE_REL_MIPS_TOKEN = $000E; // clr token
  5131. {$EXTERNALSYM IMAGE_REL_MIPS_TOKEN}
  5132. IMAGE_REL_MIPS_JMPADDR16 = $0010;
  5133. {$EXTERNALSYM IMAGE_REL_MIPS_JMPADDR16}
  5134. IMAGE_REL_MIPS_REFWORDNB = $0022;
  5135. {$EXTERNALSYM IMAGE_REL_MIPS_REFWORDNB}
  5136. IMAGE_REL_MIPS_PAIR = $0025;
  5137. {$EXTERNALSYM IMAGE_REL_MIPS_PAIR}
  5138. //
  5139. // Alpha Relocation types.
  5140. //
  5141. IMAGE_REL_ALPHA_ABSOLUTE = $0000;
  5142. {$EXTERNALSYM IMAGE_REL_ALPHA_ABSOLUTE}
  5143. IMAGE_REL_ALPHA_REFLONG = $0001;
  5144. {$EXTERNALSYM IMAGE_REL_ALPHA_REFLONG}
  5145. IMAGE_REL_ALPHA_REFQUAD = $0002;
  5146. {$EXTERNALSYM IMAGE_REL_ALPHA_REFQUAD}
  5147. IMAGE_REL_ALPHA_GPREL32 = $0003;
  5148. {$EXTERNALSYM IMAGE_REL_ALPHA_GPREL32}
  5149. IMAGE_REL_ALPHA_LITERAL = $0004;
  5150. {$EXTERNALSYM IMAGE_REL_ALPHA_LITERAL}
  5151. IMAGE_REL_ALPHA_LITUSE = $0005;
  5152. {$EXTERNALSYM IMAGE_REL_ALPHA_LITUSE}
  5153. IMAGE_REL_ALPHA_GPDISP = $0006;
  5154. {$EXTERNALSYM IMAGE_REL_ALPHA_GPDISP}
  5155. IMAGE_REL_ALPHA_BRADDR = $0007;
  5156. {$EXTERNALSYM IMAGE_REL_ALPHA_BRADDR}
  5157. IMAGE_REL_ALPHA_HINT = $0008;
  5158. {$EXTERNALSYM IMAGE_REL_ALPHA_HINT}
  5159. IMAGE_REL_ALPHA_INLINE_REFLONG = $0009;
  5160. {$EXTERNALSYM IMAGE_REL_ALPHA_INLINE_REFLONG}
  5161. IMAGE_REL_ALPHA_REFHI = $000A;
  5162. {$EXTERNALSYM IMAGE_REL_ALPHA_REFHI}
  5163. IMAGE_REL_ALPHA_REFLO = $000B;
  5164. {$EXTERNALSYM IMAGE_REL_ALPHA_REFLO}
  5165. IMAGE_REL_ALPHA_PAIR = $000C;
  5166. {$EXTERNALSYM IMAGE_REL_ALPHA_PAIR}
  5167. IMAGE_REL_ALPHA_MATCH = $000D;
  5168. {$EXTERNALSYM IMAGE_REL_ALPHA_MATCH}
  5169. IMAGE_REL_ALPHA_SECTION = $000E;
  5170. {$EXTERNALSYM IMAGE_REL_ALPHA_SECTION}
  5171. IMAGE_REL_ALPHA_SECREL = $000F;
  5172. {$EXTERNALSYM IMAGE_REL_ALPHA_SECREL}
  5173. IMAGE_REL_ALPHA_REFLONGNB = $0010;
  5174. {$EXTERNALSYM IMAGE_REL_ALPHA_REFLONGNB}
  5175. IMAGE_REL_ALPHA_SECRELLO = $0011; // Low 16-bit section relative reference
  5176. {$EXTERNALSYM IMAGE_REL_ALPHA_SECRELLO}
  5177. IMAGE_REL_ALPHA_SECRELHI = $0012; // High 16-bit section relative reference
  5178. {$EXTERNALSYM IMAGE_REL_ALPHA_SECRELHI}
  5179. IMAGE_REL_ALPHA_REFQ3 = $0013; // High 16 bits of 48 bit reference
  5180. {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ3}
  5181. IMAGE_REL_ALPHA_REFQ2 = $0014; // Middle 16 bits of 48 bit reference
  5182. {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ2}
  5183. IMAGE_REL_ALPHA_REFQ1 = $0015; // Low 16 bits of 48 bit reference
  5184. {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ1}
  5185. IMAGE_REL_ALPHA_GPRELLO = $0016; // Low 16-bit GP relative reference
  5186. {$EXTERNALSYM IMAGE_REL_ALPHA_GPRELLO}
  5187. IMAGE_REL_ALPHA_GPRELHI = $0017; // High 16-bit GP relative reference
  5188. {$EXTERNALSYM IMAGE_REL_ALPHA_GPRELHI}
  5189. //
  5190. // IBM PowerPC relocation types.
  5191. //
  5192. IMAGE_REL_PPC_ABSOLUTE = $0000; // NOP
  5193. {$EXTERNALSYM IMAGE_REL_PPC_ABSOLUTE}
  5194. IMAGE_REL_PPC_ADDR64 = $0001; // 64-bit address
  5195. {$EXTERNALSYM IMAGE_REL_PPC_ADDR64}
  5196. IMAGE_REL_PPC_ADDR32 = $0002; // 32-bit address
  5197. {$EXTERNALSYM IMAGE_REL_PPC_ADDR32}
  5198. IMAGE_REL_PPC_ADDR24 = $0003; // 26-bit address, shifted left 2 (branch absolute)
  5199. {$EXTERNALSYM IMAGE_REL_PPC_ADDR24}
  5200. IMAGE_REL_PPC_ADDR16 = $0004; // 16-bit address
  5201. {$EXTERNALSYM IMAGE_REL_PPC_ADDR16}
  5202. IMAGE_REL_PPC_ADDR14 = $0005; // 16-bit address, shifted left 2 (load doubleword)
  5203. {$EXTERNALSYM IMAGE_REL_PPC_ADDR14}
  5204. IMAGE_REL_PPC_REL24 = $0006; // 26-bit PC-relative offset, shifted left 2 (branch relative)
  5205. {$EXTERNALSYM IMAGE_REL_PPC_REL24}
  5206. IMAGE_REL_PPC_REL14 = $0007; // 16-bit PC-relative offset, shifted left 2 (br cond relative)
  5207. {$EXTERNALSYM IMAGE_REL_PPC_REL14}
  5208. IMAGE_REL_PPC_TOCREL16 = $0008; // 16-bit offset from TOC base
  5209. {$EXTERNALSYM IMAGE_REL_PPC_TOCREL16}
  5210. IMAGE_REL_PPC_TOCREL14 = $0009; // 16-bit offset from TOC base, shifted left 2 (load doubleword)
  5211. {$EXTERNALSYM IMAGE_REL_PPC_TOCREL14}
  5212. IMAGE_REL_PPC_ADDR32NB = $000A; // 32-bit addr w/o image base
  5213. {$EXTERNALSYM IMAGE_REL_PPC_ADDR32NB}
  5214. IMAGE_REL_PPC_SECREL = $000B; // va of containing section (as in an image sectionhdr)
  5215. {$EXTERNALSYM IMAGE_REL_PPC_SECREL}
  5216. IMAGE_REL_PPC_SECTION = $000C; // sectionheader number
  5217. {$EXTERNALSYM IMAGE_REL_PPC_SECTION}
  5218. IMAGE_REL_PPC_IFGLUE = $000D; // substitute TOC restore instruction iff symbol is glue code
  5219. {$EXTERNALSYM IMAGE_REL_PPC_IFGLUE}
  5220. IMAGE_REL_PPC_IMGLUE = $000E; // symbol is glue code; virtual address is TOC restore instruction
  5221. {$EXTERNALSYM IMAGE_REL_PPC_IMGLUE}
  5222. IMAGE_REL_PPC_SECREL16 = $000F; // va of containing section (limited to 16 bits)
  5223. {$EXTERNALSYM IMAGE_REL_PPC_SECREL16}
  5224. IMAGE_REL_PPC_REFHI = $0010;
  5225. {$EXTERNALSYM IMAGE_REL_PPC_REFHI}
  5226. IMAGE_REL_PPC_REFLO = $0011;
  5227. {$EXTERNALSYM IMAGE_REL_PPC_REFLO}
  5228. IMAGE_REL_PPC_PAIR = $0012;
  5229. {$EXTERNALSYM IMAGE_REL_PPC_PAIR}
  5230. IMAGE_REL_PPC_SECRELLO = $0013; // Low 16-bit section relative reference (used for >32k TLS)
  5231. {$EXTERNALSYM IMAGE_REL_PPC_SECRELLO}
  5232. IMAGE_REL_PPC_SECRELHI = $0014; // High 16-bit section relative reference (used for >32k TLS)
  5233. {$EXTERNALSYM IMAGE_REL_PPC_SECRELHI}
  5234. IMAGE_REL_PPC_GPREL = $0015;
  5235. {$EXTERNALSYM IMAGE_REL_PPC_GPREL}
  5236. IMAGE_REL_PPC_TOKEN = $0016; // clr token
  5237. {$EXTERNALSYM IMAGE_REL_PPC_TOKEN}
  5238. IMAGE_REL_PPC_TYPEMASK = $00FF; // mask to isolate above values in IMAGE_RELOCATION.Type
  5239. {$EXTERNALSYM IMAGE_REL_PPC_TYPEMASK}
  5240. // Flag bits in IMAGE_RELOCATION.TYPE
  5241. IMAGE_REL_PPC_NEG = $0100; // subtract reloc value rather than adding it
  5242. {$EXTERNALSYM IMAGE_REL_PPC_NEG}
  5243. IMAGE_REL_PPC_BRTAKEN = $0200; // fix branch prediction bit to predict branch taken
  5244. {$EXTERNALSYM IMAGE_REL_PPC_BRTAKEN}
  5245. IMAGE_REL_PPC_BRNTAKEN = $0400; // fix branch prediction bit to predict branch not taken
  5246. {$EXTERNALSYM IMAGE_REL_PPC_BRNTAKEN}
  5247. IMAGE_REL_PPC_TOCDEFN = $0800; // toc slot defined in file (or, data in toc)
  5248. {$EXTERNALSYM IMAGE_REL_PPC_TOCDEFN}
  5249. //
  5250. // Hitachi SH3 relocation types.
  5251. //
  5252. IMAGE_REL_SH3_ABSOLUTE = $0000; // No relocation
  5253. {$EXTERNALSYM IMAGE_REL_SH3_ABSOLUTE}
  5254. IMAGE_REL_SH3_DIRECT16 = $0001; // 16 bit direct
  5255. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT16}
  5256. IMAGE_REL_SH3_DIRECT32 = $0002; // 32 bit direct
  5257. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT32}
  5258. IMAGE_REL_SH3_DIRECT8 = $0003; // 8 bit direct, -128..255
  5259. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8}
  5260. IMAGE_REL_SH3_DIRECT8_WORD = $0004; // 8 bit direct .W (0 ext.)
  5261. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8_WORD}
  5262. IMAGE_REL_SH3_DIRECT8_LONG = $0005; // 8 bit direct .L (0 ext.)
  5263. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8_LONG}
  5264. IMAGE_REL_SH3_DIRECT4 = $0006; // 4 bit direct (0 ext.)
  5265. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4}
  5266. IMAGE_REL_SH3_DIRECT4_WORD = $0007; // 4 bit direct .W (0 ext.)
  5267. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4_WORD}
  5268. IMAGE_REL_SH3_DIRECT4_LONG = $0008; // 4 bit direct .L (0 ext.)
  5269. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4_LONG}
  5270. IMAGE_REL_SH3_PCREL8_WORD = $0009; // 8 bit PC relative .W
  5271. {$EXTERNALSYM IMAGE_REL_SH3_PCREL8_WORD}
  5272. IMAGE_REL_SH3_PCREL8_LONG = $000A; // 8 bit PC relative .L
  5273. {$EXTERNALSYM IMAGE_REL_SH3_PCREL8_LONG}
  5274. IMAGE_REL_SH3_PCREL12_WORD = $000B; // 12 LSB PC relative .W
  5275. {$EXTERNALSYM IMAGE_REL_SH3_PCREL12_WORD}
  5276. IMAGE_REL_SH3_STARTOF_SECTION = $000C; // Start of EXE section
  5277. {$EXTERNALSYM IMAGE_REL_SH3_STARTOF_SECTION}
  5278. IMAGE_REL_SH3_SIZEOF_SECTION = $000D; // Size of EXE section
  5279. {$EXTERNALSYM IMAGE_REL_SH3_SIZEOF_SECTION}
  5280. IMAGE_REL_SH3_SECTION = $000E; // Section table index
  5281. {$EXTERNALSYM IMAGE_REL_SH3_SECTION}
  5282. IMAGE_REL_SH3_SECREL = $000F; // Offset within section
  5283. {$EXTERNALSYM IMAGE_REL_SH3_SECREL}
  5284. IMAGE_REL_SH3_DIRECT32_NB = $0010; // 32 bit direct not based
  5285. {$EXTERNALSYM IMAGE_REL_SH3_DIRECT32_NB}
  5286. IMAGE_REL_SH3_GPREL4_LONG = $0011; // GP-relative addressing
  5287. {$EXTERNALSYM IMAGE_REL_SH3_GPREL4_LONG}
  5288. IMAGE_REL_SH3_TOKEN = $0012; // clr token
  5289. {$EXTERNALSYM IMAGE_REL_SH3_TOKEN}
  5290. IMAGE_REL_ARM_ABSOLUTE = $0000; // No relocation required
  5291. {$EXTERNALSYM IMAGE_REL_ARM_ABSOLUTE}
  5292. IMAGE_REL_ARM_ADDR32 = $0001; // 32 bit address
  5293. {$EXTERNALSYM IMAGE_REL_ARM_ADDR32}
  5294. IMAGE_REL_ARM_ADDR32NB = $0002; // 32 bit address w/o image base
  5295. {$EXTERNALSYM IMAGE_REL_ARM_ADDR32NB}
  5296. IMAGE_REL_ARM_BRANCH24 = $0003; // 24 bit offset << 2 & sign ext.
  5297. {$EXTERNALSYM IMAGE_REL_ARM_BRANCH24}
  5298. IMAGE_REL_ARM_BRANCH11 = $0004; // Thumb: 2 11 bit offsets
  5299. {$EXTERNALSYM IMAGE_REL_ARM_BRANCH11}
  5300. IMAGE_REL_ARM_TOKEN = $0005; // clr token
  5301. {$EXTERNALSYM IMAGE_REL_ARM_TOKEN}
  5302. IMAGE_REL_ARM_GPREL12 = $0006; // GP-relative addressing (ARM)
  5303. {$EXTERNALSYM IMAGE_REL_ARM_GPREL12}
  5304. IMAGE_REL_ARM_GPREL7 = $0007; // GP-relative addressing (Thumb)
  5305. {$EXTERNALSYM IMAGE_REL_ARM_GPREL7}
  5306. IMAGE_REL_ARM_BLX24 = $0008;
  5307. {$EXTERNALSYM IMAGE_REL_ARM_BLX24}
  5308. IMAGE_REL_ARM_BLX11 = $0009;
  5309. {$EXTERNALSYM IMAGE_REL_ARM_BLX11}
  5310. IMAGE_REL_ARM_SECTION = $000E; // Section table index
  5311. {$EXTERNALSYM IMAGE_REL_ARM_SECTION}
  5312. IMAGE_REL_ARM_SECREL = $000F; // Offset within section
  5313. {$EXTERNALSYM IMAGE_REL_ARM_SECREL}
  5314. IMAGE_REL_AM_ABSOLUTE = $0000;
  5315. {$EXTERNALSYM IMAGE_REL_AM_ABSOLUTE}
  5316. IMAGE_REL_AM_ADDR32 = $0001;
  5317. {$EXTERNALSYM IMAGE_REL_AM_ADDR32}
  5318. IMAGE_REL_AM_ADDR32NB = $0002;
  5319. {$EXTERNALSYM IMAGE_REL_AM_ADDR32NB}
  5320. IMAGE_REL_AM_CALL32 = $0003;
  5321. {$EXTERNALSYM IMAGE_REL_AM_CALL32}
  5322. IMAGE_REL_AM_FUNCINFO = $0004;
  5323. {$EXTERNALSYM IMAGE_REL_AM_FUNCINFO}
  5324. IMAGE_REL_AM_REL32_1 = $0005;
  5325. {$EXTERNALSYM IMAGE_REL_AM_REL32_1}
  5326. IMAGE_REL_AM_REL32_2 = $0006;
  5327. {$EXTERNALSYM IMAGE_REL_AM_REL32_2}
  5328. IMAGE_REL_AM_SECREL = $0007;
  5329. {$EXTERNALSYM IMAGE_REL_AM_SECREL}
  5330. IMAGE_REL_AM_SECTION = $0008;
  5331. {$EXTERNALSYM IMAGE_REL_AM_SECTION}
  5332. IMAGE_REL_AM_TOKEN = $0009;
  5333. {$EXTERNALSYM IMAGE_REL_AM_TOKEN}
  5334. //
  5335. // X86-64 relocations
  5336. //
  5337. IMAGE_REL_AMD64_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
  5338. {$EXTERNALSYM IMAGE_REL_AMD64_ABSOLUTE}
  5339. IMAGE_REL_AMD64_ADDR64 = $0001; // 64-bit address (VA).
  5340. {$EXTERNALSYM IMAGE_REL_AMD64_ADDR64}
  5341. IMAGE_REL_AMD64_ADDR32 = $0002; // 32-bit address (VA).
  5342. {$EXTERNALSYM IMAGE_REL_AMD64_ADDR32}
  5343. IMAGE_REL_AMD64_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
  5344. {$EXTERNALSYM IMAGE_REL_AMD64_ADDR32NB}
  5345. IMAGE_REL_AMD64_REL32 = $0004; // 32-bit relative address from byte following reloc
  5346. {$EXTERNALSYM IMAGE_REL_AMD64_REL32}
  5347. IMAGE_REL_AMD64_REL32_1 = $0005; // 32-bit relative address from byte distance 1 from reloc
  5348. {$EXTERNALSYM IMAGE_REL_AMD64_REL32_1}
  5349. IMAGE_REL_AMD64_REL32_2 = $0006; // 32-bit relative address from byte distance 2 from reloc
  5350. {$EXTERNALSYM IMAGE_REL_AMD64_REL32_2}
  5351. IMAGE_REL_AMD64_REL32_3 = $0007; // 32-bit relative address from byte distance 3 from reloc
  5352. {$EXTERNALSYM IMAGE_REL_AMD64_REL32_3}
  5353. IMAGE_REL_AMD64_REL32_4 = $0008; // 32-bit relative address from byte distance 4 from reloc
  5354. {$EXTERNALSYM IMAGE_REL_AMD64_REL32_4}
  5355. IMAGE_REL_AMD64_REL32_5 = $0009; // 32-bit relative address from byte distance 5 from reloc
  5356. {$EXTERNALSYM IMAGE_REL_AMD64_REL32_5}
  5357. IMAGE_REL_AMD64_SECTION = $000A; // Section index
  5358. {$EXTERNALSYM IMAGE_REL_AMD64_SECTION}
  5359. IMAGE_REL_AMD64_SECREL = $000B; // 32 bit offset from base of section containing target
  5360. {$EXTERNALSYM IMAGE_REL_AMD64_SECREL}
  5361. IMAGE_REL_AMD64_SECREL7 = $000C; // 7 bit unsigned offset from base of section containing target
  5362. {$EXTERNALSYM IMAGE_REL_AMD64_SECREL7}
  5363. IMAGE_REL_AMD64_TOKEN = $000D; // 32 bit metadata token
  5364. {$EXTERNALSYM IMAGE_REL_AMD64_TOKEN}
  5365. IMAGE_REL_AMD64_SREL32 = $000E; // 32 bit signed span-dependent value emitted into object
  5366. {$EXTERNALSYM IMAGE_REL_AMD64_SREL32}
  5367. IMAGE_REL_AMD64_PAIR = $000F;
  5368. {$EXTERNALSYM IMAGE_REL_AMD64_PAIR}
  5369. IMAGE_REL_AMD64_SSPAN32 = $0010; // 32 bit signed span-dependent value applied at link time
  5370. {$EXTERNALSYM IMAGE_REL_AMD64_SSPAN32}
  5371. //
  5372. // IA64 relocation types.
  5373. //
  5374. IMAGE_REL_IA64_ABSOLUTE = $0000;
  5375. {$EXTERNALSYM IMAGE_REL_IA64_ABSOLUTE}
  5376. IMAGE_REL_IA64_IMM14 = $0001;
  5377. {$EXTERNALSYM IMAGE_REL_IA64_IMM14}
  5378. IMAGE_REL_IA64_IMM22 = $0002;
  5379. {$EXTERNALSYM IMAGE_REL_IA64_IMM22}
  5380. IMAGE_REL_IA64_IMM64 = $0003;
  5381. {$EXTERNALSYM IMAGE_REL_IA64_IMM64}
  5382. IMAGE_REL_IA64_DIR32 = $0004;
  5383. {$EXTERNALSYM IMAGE_REL_IA64_DIR32}
  5384. IMAGE_REL_IA64_DIR64 = $0005;
  5385. {$EXTERNALSYM IMAGE_REL_IA64_DIR64}
  5386. IMAGE_REL_IA64_PCREL21B = $0006;
  5387. {$EXTERNALSYM IMAGE_REL_IA64_PCREL21B}
  5388. IMAGE_REL_IA64_PCREL21M = $0007;
  5389. {$EXTERNALSYM IMAGE_REL_IA64_PCREL21M}
  5390. IMAGE_REL_IA64_PCREL21F = $0008;
  5391. {$EXTERNALSYM IMAGE_REL_IA64_PCREL21F}
  5392. IMAGE_REL_IA64_GPREL22 = $0009;
  5393. {$EXTERNALSYM IMAGE_REL_IA64_GPREL22}
  5394. IMAGE_REL_IA64_LTOFF22 = $000A;
  5395. {$EXTERNALSYM IMAGE_REL_IA64_LTOFF22}
  5396. IMAGE_REL_IA64_SECTION = $000B;
  5397. {$EXTERNALSYM IMAGE_REL_IA64_SECTION}
  5398. IMAGE_REL_IA64_SECREL22 = $000C;
  5399. {$EXTERNALSYM IMAGE_REL_IA64_SECREL22}
  5400. IMAGE_REL_IA64_SECREL64I = $000D;
  5401. {$EXTERNALSYM IMAGE_REL_IA64_SECREL64I}
  5402. IMAGE_REL_IA64_SECREL32 = $000E;
  5403. {$EXTERNALSYM IMAGE_REL_IA64_SECREL32}
  5404. //
  5405. IMAGE_REL_IA64_DIR32NB = $0010;
  5406. {$EXTERNALSYM IMAGE_REL_IA64_DIR32NB}
  5407. IMAGE_REL_IA64_SREL14 = $0011;
  5408. {$EXTERNALSYM IMAGE_REL_IA64_SREL14}
  5409. IMAGE_REL_IA64_SREL22 = $0012;
  5410. {$EXTERNALSYM IMAGE_REL_IA64_SREL22}
  5411. IMAGE_REL_IA64_SREL32 = $0013;
  5412. {$EXTERNALSYM IMAGE_REL_IA64_SREL32}
  5413. IMAGE_REL_IA64_UREL32 = $0014;
  5414. {$EXTERNALSYM IMAGE_REL_IA64_UREL32}
  5415. IMAGE_REL_IA64_PCREL60X = $0015; // This is always a BRL and never converted
  5416. {$EXTERNALSYM IMAGE_REL_IA64_PCREL60X}
  5417. IMAGE_REL_IA64_PCREL60B = $0016; // If possible, convert to MBB bundle with NOP.B in slot 1
  5418. {$EXTERNALSYM IMAGE_REL_IA64_PCREL60B}
  5419. IMAGE_REL_IA64_PCREL60F = $0017; // If possible, convert to MFB bundle with NOP.F in slot 1
  5420. {$EXTERNALSYM IMAGE_REL_IA64_PCREL60F}
  5421. IMAGE_REL_IA64_PCREL60I = $0018; // If possible, convert to MIB bundle with NOP.I in slot 1
  5422. {$EXTERNALSYM IMAGE_REL_IA64_PCREL60I}
  5423. IMAGE_REL_IA64_PCREL60M = $0019; // If possible, convert to MMB bundle with NOP.M in slot 1
  5424. {$EXTERNALSYM IMAGE_REL_IA64_PCREL60M}
  5425. IMAGE_REL_IA64_IMMGPREL64 = $001A;
  5426. {$EXTERNALSYM IMAGE_REL_IA64_IMMGPREL64}
  5427. IMAGE_REL_IA64_TOKEN = $001B; // clr token
  5428. {$EXTERNALSYM IMAGE_REL_IA64_TOKEN}
  5429. IMAGE_REL_IA64_GPREL32 = $001C;
  5430. {$EXTERNALSYM IMAGE_REL_IA64_GPREL32}
  5431. IMAGE_REL_IA64_ADDEND = $001F;
  5432. {$EXTERNALSYM IMAGE_REL_IA64_ADDEND}
  5433. //
  5434. // CEF relocation types.
  5435. //
  5436. IMAGE_REL_CEF_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
  5437. {$EXTERNALSYM IMAGE_REL_CEF_ABSOLUTE}
  5438. IMAGE_REL_CEF_ADDR32 = $0001; // 32-bit address (VA).
  5439. {$EXTERNALSYM IMAGE_REL_CEF_ADDR32}
  5440. IMAGE_REL_CEF_ADDR64 = $0002; // 64-bit address (VA).
  5441. {$EXTERNALSYM IMAGE_REL_CEF_ADDR64}
  5442. IMAGE_REL_CEF_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
  5443. {$EXTERNALSYM IMAGE_REL_CEF_ADDR32NB}
  5444. IMAGE_REL_CEF_SECTION = $0004; // Section index
  5445. {$EXTERNALSYM IMAGE_REL_CEF_SECTION}
  5446. IMAGE_REL_CEF_SECREL = $0005; // 32 bit offset from base of section containing target
  5447. {$EXTERNALSYM IMAGE_REL_CEF_SECREL}
  5448. IMAGE_REL_CEF_TOKEN = $0006; // 32 bit metadata token
  5449. {$EXTERNALSYM IMAGE_REL_CEF_TOKEN}
  5450. //
  5451. // clr relocation types.
  5452. //
  5453. IMAGE_REL_CEE_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
  5454. {$EXTERNALSYM IMAGE_REL_CEE_ABSOLUTE}
  5455. IMAGE_REL_CEE_ADDR32 = $0001; // 32-bit address (VA).
  5456. {$EXTERNALSYM IMAGE_REL_CEE_ADDR32}
  5457. IMAGE_REL_CEE_ADDR64 = $0002; // 64-bit address (VA).
  5458. {$EXTERNALSYM IMAGE_REL_CEE_ADDR64}
  5459. IMAGE_REL_CEE_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
  5460. {$EXTERNALSYM IMAGE_REL_CEE_ADDR32NB}
  5461. IMAGE_REL_CEE_SECTION = $0004; // Section index
  5462. {$EXTERNALSYM IMAGE_REL_CEE_SECTION}
  5463. IMAGE_REL_CEE_SECREL = $0005; // 32 bit offset from base of section containing target
  5464. {$EXTERNALSYM IMAGE_REL_CEE_SECREL}
  5465. IMAGE_REL_CEE_TOKEN = $0006; // 32 bit metadata token
  5466. {$EXTERNALSYM IMAGE_REL_CEE_TOKEN}
  5467. IMAGE_REL_M32R_ABSOLUTE = $0000; // No relocation required
  5468. {$EXTERNALSYM IMAGE_REL_M32R_ABSOLUTE}
  5469. IMAGE_REL_M32R_ADDR32 = $0001; // 32 bit address
  5470. {$EXTERNALSYM IMAGE_REL_M32R_ADDR32}
  5471. IMAGE_REL_M32R_ADDR32NB = $0002; // 32 bit address w/o image base
  5472. {$EXTERNALSYM IMAGE_REL_M32R_ADDR32NB}
  5473. IMAGE_REL_M32R_ADDR24 = $0003; // 24 bit address
  5474. {$EXTERNALSYM IMAGE_REL_M32R_ADDR24}
  5475. IMAGE_REL_M32R_GPREL16 = $0004; // GP relative addressing
  5476. {$EXTERNALSYM IMAGE_REL_M32R_GPREL16}
  5477. IMAGE_REL_M32R_PCREL24 = $0005; // 24 bit offset << 2 & sign ext.
  5478. {$EXTERNALSYM IMAGE_REL_M32R_PCREL24}
  5479. IMAGE_REL_M32R_PCREL16 = $0006; // 16 bit offset << 2 & sign ext.
  5480. {$EXTERNALSYM IMAGE_REL_M32R_PCREL16}
  5481. IMAGE_REL_M32R_PCREL8 = $0007; // 8 bit offset << 2 & sign ext.
  5482. {$EXTERNALSYM IMAGE_REL_M32R_PCREL8}
  5483. IMAGE_REL_M32R_REFHALF = $0008; // 16 MSBs
  5484. {$EXTERNALSYM IMAGE_REL_M32R_REFHALF}
  5485. IMAGE_REL_M32R_REFHI = $0009; // 16 MSBs; adj for LSB sign ext.
  5486. {$EXTERNALSYM IMAGE_REL_M32R_REFHI}
  5487. IMAGE_REL_M32R_REFLO = $000A; // 16 LSBs
  5488. {$EXTERNALSYM IMAGE_REL_M32R_REFLO}
  5489. IMAGE_REL_M32R_PAIR = $000B; // Link HI and LO
  5490. {$EXTERNALSYM IMAGE_REL_M32R_PAIR}
  5491. IMAGE_REL_M32R_SECTION = $000C; // Section table index
  5492. {$EXTERNALSYM IMAGE_REL_M32R_SECTION}
  5493. IMAGE_REL_M32R_SECREL32 = $000D; // 32 bit section relative reference
  5494. {$EXTERNALSYM IMAGE_REL_M32R_SECREL32}
  5495. IMAGE_REL_M32R_TOKEN = $000E; // clr token
  5496. {$EXTERNALSYM IMAGE_REL_M32R_TOKEN}
  5497. // Please contact INTEL to get IA64-specific information
  5498. (* TODO
  5499. #define EXT_IMM64(Value, Address, Size, InstPos, ValPos)
  5500. Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos) // Intel-IA64-Filler
  5501. #define INS_IMM64(Value, Address, Size, InstPos, ValPos) /* Intel-IA64-Filler */\
  5502. *(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | /* Intel-IA64-Filler */\
  5503. ((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos) // Intel-IA64-Filler
  5504. *)
  5505. const
  5506. EMARCH_ENC_I17_IMM7B_INST_WORD_X = 3; // Intel-IA64-Filler
  5507. {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_INST_WORD_X}
  5508. EMARCH_ENC_I17_IMM7B_SIZE_X = 7; // Intel-IA64-Filler
  5509. {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_SIZE_X}
  5510. EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X = 4; // Intel-IA64-Filler
  5511. {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X}
  5512. EMARCH_ENC_I17_IMM7B_VAL_POS_X = 0; // Intel-IA64-Filler
  5513. {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_VAL_POS_X}
  5514. EMARCH_ENC_I17_IMM9D_INST_WORD_X = 3; // Intel-IA64-Filler
  5515. {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_INST_WORD_X}
  5516. EMARCH_ENC_I17_IMM9D_SIZE_X = 9; // Intel-IA64-Filler
  5517. {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_SIZE_X}
  5518. EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X = 18; // Intel-IA64-Filler
  5519. {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X}
  5520. EMARCH_ENC_I17_IMM9D_VAL_POS_X = 7; // Intel-IA64-Filler
  5521. {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_VAL_POS_X}
  5522. EMARCH_ENC_I17_IMM5C_INST_WORD_X = 3; // Intel-IA64-Filler
  5523. {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_INST_WORD_X}
  5524. EMARCH_ENC_I17_IMM5C_SIZE_X = 5; // Intel-IA64-Filler
  5525. {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_SIZE_X}
  5526. EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X = 13; // Intel-IA64-Filler
  5527. {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X}
  5528. EMARCH_ENC_I17_IMM5C_VAL_POS_X = 16; // Intel-IA64-Filler
  5529. {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_VAL_POS_X}
  5530. EMARCH_ENC_I17_IC_INST_WORD_X = 3; // Intel-IA64-Filler
  5531. {$EXTERNALSYM EMARCH_ENC_I17_IC_INST_WORD_X}
  5532. EMARCH_ENC_I17_IC_SIZE_X = 1; // Intel-IA64-Filler
  5533. {$EXTERNALSYM EMARCH_ENC_I17_IC_SIZE_X}
  5534. EMARCH_ENC_I17_IC_INST_WORD_POS_X = 12; // Intel-IA64-Filler
  5535. {$EXTERNALSYM EMARCH_ENC_I17_IC_INST_WORD_POS_X}
  5536. EMARCH_ENC_I17_IC_VAL_POS_X = 21; // Intel-IA64-Filler
  5537. {$EXTERNALSYM EMARCH_ENC_I17_IC_VAL_POS_X}
  5538. EMARCH_ENC_I17_IMM41a_INST_WORD_X = 1; // Intel-IA64-Filler
  5539. {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_INST_WORD_X}
  5540. EMARCH_ENC_I17_IMM41a_SIZE_X = 10; // Intel-IA64-Filler
  5541. {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_SIZE_X}
  5542. EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X = 14; // Intel-IA64-Filler
  5543. {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X}
  5544. EMARCH_ENC_I17_IMM41a_VAL_POS_X = 22; // Intel-IA64-Filler
  5545. {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_VAL_POS_X}
  5546. EMARCH_ENC_I17_IMM41b_INST_WORD_X = 1; // Intel-IA64-Filler
  5547. {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_INST_WORD_X}
  5548. EMARCH_ENC_I17_IMM41b_SIZE_X = 8; // Intel-IA64-Filler
  5549. {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_SIZE_X}
  5550. EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X = 24; // Intel-IA64-Filler
  5551. {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X}
  5552. EMARCH_ENC_I17_IMM41b_VAL_POS_X = 32; // Intel-IA64-Filler
  5553. {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_VAL_POS_X}
  5554. EMARCH_ENC_I17_IMM41c_INST_WORD_X = 2; // Intel-IA64-Filler
  5555. {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_INST_WORD_X}
  5556. EMARCH_ENC_I17_IMM41c_SIZE_X = 23; // Intel-IA64-Filler
  5557. {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_SIZE_X}
  5558. EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X = 0; // Intel-IA64-Filler
  5559. {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X}
  5560. EMARCH_ENC_I17_IMM41c_VAL_POS_X = 40; // Intel-IA64-Filler
  5561. {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_VAL_POS_X}
  5562. EMARCH_ENC_I17_SIGN_INST_WORD_X = 3; // Intel-IA64-Filler
  5563. {$EXTERNALSYM EMARCH_ENC_I17_SIGN_INST_WORD_X}
  5564. EMARCH_ENC_I17_SIGN_SIZE_X = 1; // Intel-IA64-Filler
  5565. {$EXTERNALSYM EMARCH_ENC_I17_SIGN_SIZE_X}
  5566. EMARCH_ENC_I17_SIGN_INST_WORD_POS_X = 27; // Intel-IA64-Filler
  5567. {$EXTERNALSYM EMARCH_ENC_I17_SIGN_INST_WORD_POS_X}
  5568. EMARCH_ENC_I17_SIGN_VAL_POS_X = 63; // Intel-IA64-Filler
  5569. {$EXTERNALSYM EMARCH_ENC_I17_SIGN_VAL_POS_X}
  5570. //
  5571. // Line number format.
  5572. //
  5573. type
  5574. TImgLineNoType = record
  5575. case Integer of
  5576. 0: (SymbolTableIndex: DWORD); // Symbol table index of function name if Linenumber is 0.
  5577. 1: (VirtualAddress: DWORD); // Virtual address of line number.
  5578. end;
  5579. PIMAGE_LINENUMBER = ^IMAGE_LINENUMBER;
  5580. {$EXTERNALSYM PIMAGE_LINENUMBER}
  5581. _IMAGE_LINENUMBER = record
  5582. Type_: TImgLineNoType;
  5583. Linenumber: WORD; // Line number.
  5584. end;
  5585. {$EXTERNALSYM _IMAGE_LINENUMBER}
  5586. IMAGE_LINENUMBER = _IMAGE_LINENUMBER;
  5587. {$EXTERNALSYM IMAGE_LINENUMBER}
  5588. TImageLineNumber = IMAGE_LINENUMBER;
  5589. PImageLineNumber = PIMAGE_LINENUMBER;
  5590. const
  5591. IMAGE_SIZEOF_LINENUMBER = 6;
  5592. {$EXTERNALSYM IMAGE_SIZEOF_LINENUMBER}
  5593. // #include "poppack.h" // Back to 4 byte packing
  5594. //
  5595. // Based relocation format.
  5596. //
  5597. type
  5598. PIMAGE_BASE_RELOCATION = ^IMAGE_BASE_RELOCATION;
  5599. {$EXTERNALSYM PIMAGE_BASE_RELOCATION}
  5600. _IMAGE_BASE_RELOCATION = record
  5601. VirtualAddress: DWORD;
  5602. SizeOfBlock: DWORD;
  5603. // WORD TypeOffset[1];
  5604. end;
  5605. {$EXTERNALSYM _IMAGE_BASE_RELOCATION}
  5606. IMAGE_BASE_RELOCATION = _IMAGE_BASE_RELOCATION;
  5607. {$EXTERNALSYM IMAGE_BASE_RELOCATION}
  5608. TImageBaseRelocation = IMAGE_BASE_RELOCATION;
  5609. PImageBaseRelocation = PIMAGE_BASE_RELOCATION;
  5610. const
  5611. IMAGE_SIZEOF_BASE_RELOCATION = 8;
  5612. {$EXTERNALSYM IMAGE_SIZEOF_BASE_RELOCATION}
  5613. //
  5614. // Based relocation types.
  5615. //
  5616. IMAGE_REL_BASED_ABSOLUTE = 0;
  5617. {$EXTERNALSYM IMAGE_REL_BASED_ABSOLUTE}
  5618. IMAGE_REL_BASED_HIGH = 1;
  5619. {$EXTERNALSYM IMAGE_REL_BASED_HIGH}
  5620. IMAGE_REL_BASED_LOW = 2;
  5621. {$EXTERNALSYM IMAGE_REL_BASED_LOW}
  5622. IMAGE_REL_BASED_HIGHLOW = 3;
  5623. {$EXTERNALSYM IMAGE_REL_BASED_HIGHLOW}
  5624. IMAGE_REL_BASED_HIGHADJ = 4;
  5625. {$EXTERNALSYM IMAGE_REL_BASED_HIGHADJ}
  5626. IMAGE_REL_BASED_MIPS_JMPADDR = 5;
  5627. {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR}
  5628. IMAGE_REL_BASED_MIPS_JMPADDR16 = 9;
  5629. {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR16}
  5630. IMAGE_REL_BASED_IA64_IMM64 = 9;
  5631. {$EXTERNALSYM IMAGE_REL_BASED_IA64_IMM64}
  5632. IMAGE_REL_BASED_DIR64 = 10;
  5633. {$EXTERNALSYM IMAGE_REL_BASED_DIR64}
  5634. //
  5635. // Archive format.
  5636. //
  5637. IMAGE_ARCHIVE_START_SIZE = 8;
  5638. {$EXTERNALSYM IMAGE_ARCHIVE_START_SIZE}
  5639. IMAGE_ARCHIVE_START = '!<arch>'#10;
  5640. {$EXTERNALSYM IMAGE_ARCHIVE_START}
  5641. IMAGE_ARCHIVE_END = '`'#10;
  5642. {$EXTERNALSYM IMAGE_ARCHIVE_END}
  5643. IMAGE_ARCHIVE_PAD = #10;
  5644. {$EXTERNALSYM IMAGE_ARCHIVE_PAD}
  5645. IMAGE_ARCHIVE_LINKER_MEMBER = '/ ';
  5646. {$EXTERNALSYM IMAGE_ARCHIVE_LINKER_MEMBER}
  5647. IMAGE_ARCHIVE_LONGNAMES_MEMBER = '// ';
  5648. {$EXTERNALSYM IMAGE_ARCHIVE_LONGNAMES_MEMBER}
  5649. type
  5650. PIMAGE_ARCHIVE_MEMBER_HEADER = ^IMAGE_ARCHIVE_MEMBER_HEADER;
  5651. {$EXTERNALSYM PIMAGE_ARCHIVE_MEMBER_HEADER}
  5652. _IMAGE_ARCHIVE_MEMBER_HEADER = record
  5653. Name: array [0..15] of Byte; // File member name - `/' terminated.
  5654. Date: array [0..11] of Byte; // File member date - decimal.
  5655. UserID: array [0..5] of Byte; // File member user id - decimal.
  5656. GroupID: array [0..5] of Byte; // File member group id - decimal.
  5657. Mode: array [0..7] of Byte; // File member mode - octal.
  5658. Size: array [0..9] of Byte; // File member size - decimal.
  5659. EndHeader: array [0..1] of Byte; // String to end header.
  5660. end;
  5661. {$EXTERNALSYM _IMAGE_ARCHIVE_MEMBER_HEADER}
  5662. IMAGE_ARCHIVE_MEMBER_HEADER = _IMAGE_ARCHIVE_MEMBER_HEADER;
  5663. {$EXTERNALSYM IMAGE_ARCHIVE_MEMBER_HEADER}
  5664. TImageArchiveMemberHeader = IMAGE_ARCHIVE_MEMBER_HEADER;
  5665. PImageArchiveMemberHeader = PIMAGE_ARCHIVE_MEMBER_HEADER;
  5666. const
  5667. IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60;
  5668. {$EXTERNALSYM IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR}
  5669. //
  5670. // DLL support.
  5671. //
  5672. //
  5673. // Export Format
  5674. //
  5675. type
  5676. PIMAGE_EXPORT_DIRECTORY = ^IMAGE_EXPORT_DIRECTORY;
  5677. {$EXTERNALSYM PIMAGE_EXPORT_DIRECTORY}
  5678. _IMAGE_EXPORT_DIRECTORY = record
  5679. Characteristics: DWORD;
  5680. TimeDateStamp: DWORD;
  5681. MajorVersion: Word;
  5682. MinorVersion: Word;
  5683. Name: DWORD;
  5684. Base: DWORD;
  5685. NumberOfFunctions: DWORD;
  5686. NumberOfNames: DWORD;
  5687. AddressOfFunctions: DWORD; // RVA from base of image
  5688. AddressOfNames: DWORD; // RVA from base of image
  5689. AddressOfNameOrdinals: DWORD; // RVA from base of image
  5690. end;
  5691. {$EXTERNALSYM _IMAGE_EXPORT_DIRECTORY}
  5692. IMAGE_EXPORT_DIRECTORY = _IMAGE_EXPORT_DIRECTORY;
  5693. {$EXTERNALSYM IMAGE_EXPORT_DIRECTORY}
  5694. TImageExportDirectory = IMAGE_EXPORT_DIRECTORY;
  5695. PImageExportDirectory = PIMAGE_EXPORT_DIRECTORY;
  5696. //
  5697. // Import Format
  5698. //
  5699. PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
  5700. {$EXTERNALSYM PIMAGE_IMPORT_BY_NAME}
  5701. _IMAGE_IMPORT_BY_NAME = record
  5702. Hint: Word;
  5703. Name: array [0..0] of Byte;
  5704. end;
  5705. {$EXTERNALSYM _IMAGE_IMPORT_BY_NAME}
  5706. IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME;
  5707. {$EXTERNALSYM IMAGE_IMPORT_BY_NAME}
  5708. TImageImportByName = IMAGE_IMPORT_BY_NAME;
  5709. PImageImportByName = PIMAGE_IMPORT_BY_NAME;
  5710. // #include "pshpack8.h" // Use align 8 for the 64-bit IAT.
  5711. PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
  5712. {$EXTERNALSYM PIMAGE_THUNK_DATA64}
  5713. _IMAGE_THUNK_DATA64 = record
  5714. case Integer of
  5715. 0: (ForwarderString: ULONGLONG); // PBYTE
  5716. 1: (Function_: ULONGLONG); // PDWORD
  5717. 2: (Ordinal: ULONGLONG);
  5718. 3: (AddressOfData: ULONGLONG); // PIMAGE_IMPORT_BY_NAME
  5719. end;
  5720. {$EXTERNALSYM _IMAGE_THUNK_DATA64}
  5721. IMAGE_THUNK_DATA64 = _IMAGE_THUNK_DATA64;
  5722. {$EXTERNALSYM IMAGE_THUNK_DATA64}
  5723. TImageThunkData64 = IMAGE_THUNK_DATA64;
  5724. PImageThunkData64 = PIMAGE_THUNK_DATA64;
  5725. // #include "poppack.h" // Back to 4 byte packing
  5726. PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
  5727. {$EXTERNALSYM PIMAGE_THUNK_DATA32}
  5728. _IMAGE_THUNK_DATA32 = record
  5729. case Integer of
  5730. 0: (ForwarderString: DWORD); // PBYTE
  5731. 1: (Function_: DWORD); // PDWORD
  5732. 2: (Ordinal: DWORD);
  5733. 3: (AddressOfData: DWORD); // PIMAGE_IMPORT_BY_NAME
  5734. end;
  5735. {$EXTERNALSYM _IMAGE_THUNK_DATA32}
  5736. IMAGE_THUNK_DATA32 = _IMAGE_THUNK_DATA32;
  5737. {$EXTERNALSYM IMAGE_THUNK_DATA32}
  5738. TImageThunkData32 = IMAGE_THUNK_DATA32;
  5739. PImageThunkData32 = PIMAGE_THUNK_DATA32;
  5740. const
  5741. IMAGE_ORDINAL_FLAG64 = ULONGLONG($8000000000000000);
  5742. {$EXTERNALSYM IMAGE_ORDINAL_FLAG64}
  5743. IMAGE_ORDINAL_FLAG32 = DWORD($80000000);
  5744. {$EXTERNALSYM IMAGE_ORDINAL_FLAG32}
  5745. function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
  5746. {$EXTERNALSYM IMAGE_ORDINAL64}
  5747. function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
  5748. {$EXTERNALSYM IMAGE_ORDINAL32}
  5749. function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
  5750. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL64}
  5751. function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
  5752. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL32}
  5753. //
  5754. // Thread Local Storage
  5755. //
  5756. type
  5757. PIMAGE_TLS_CALLBACK = procedure(DllHandle: Pointer; Reason: DWORD; Reserved: Pointer); stdcall;
  5758. {$EXTERNALSYM PIMAGE_TLS_CALLBACK}
  5759. TImageTlsCallback = PIMAGE_TLS_CALLBACK;
  5760. PIMAGE_TLS_DIRECTORY64 = ^IMAGE_TLS_DIRECTORY64;
  5761. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY64}
  5762. _IMAGE_TLS_DIRECTORY64 = record
  5763. StartAddressOfRawData: ULONGLONG;
  5764. EndAddressOfRawData: ULONGLONG;
  5765. AddressOfIndex: ULONGLONG; // PDWORD
  5766. AddressOfCallBacks: ULONGLONG; // PIMAGE_TLS_CALLBACK *;
  5767. SizeOfZeroFill: DWORD;
  5768. Characteristics: DWORD;
  5769. end;
  5770. {$EXTERNALSYM _IMAGE_TLS_DIRECTORY64}
  5771. IMAGE_TLS_DIRECTORY64 = _IMAGE_TLS_DIRECTORY64;
  5772. {$EXTERNALSYM IMAGE_TLS_DIRECTORY64}
  5773. TImageTlsDirectory64 = IMAGE_TLS_DIRECTORY64;
  5774. PImageTlsDirectory64 = PIMAGE_TLS_DIRECTORY64;
  5775. PIMAGE_TLS_DIRECTORY32 = ^IMAGE_TLS_DIRECTORY32;
  5776. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY32}
  5777. _IMAGE_TLS_DIRECTORY32 = record
  5778. StartAddressOfRawData: DWORD;
  5779. EndAddressOfRawData: DWORD;
  5780. AddressOfIndex: DWORD; // PDWORD
  5781. AddressOfCallBacks: DWORD; // PIMAGE_TLS_CALLBACK *
  5782. SizeOfZeroFill: DWORD;
  5783. Characteristics: DWORD;
  5784. end;
  5785. {$EXTERNALSYM _IMAGE_TLS_DIRECTORY32}
  5786. IMAGE_TLS_DIRECTORY32 = _IMAGE_TLS_DIRECTORY32;
  5787. {$EXTERNALSYM IMAGE_TLS_DIRECTORY32}
  5788. TImageTlsDirectory32 = IMAGE_TLS_DIRECTORY32;
  5789. PImageTlsDirectory32 = PIMAGE_TLS_DIRECTORY32;
  5790. const
  5791. IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32;
  5792. {$EXTERNALSYM IMAGE_ORDINAL_FLAG}
  5793. function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
  5794. type
  5795. IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
  5796. {$EXTERNALSYM IMAGE_THUNK_DATA}
  5797. PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
  5798. {$EXTERNALSYM PIMAGE_THUNK_DATA}
  5799. TImageThunkData = TImageThunkData32;
  5800. PImageThunkData = PImageThunkData32;
  5801. function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
  5802. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL}
  5803. type
  5804. IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
  5805. {$EXTERNALSYM IMAGE_TLS_DIRECTORY}
  5806. PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
  5807. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY}
  5808. TImageTlsDirectory = TImageTlsDirectory32;
  5809. PImageTlsDirectory = PImageTlsDirectory32;
  5810. TIIDUnion = record
  5811. case Integer of
  5812. 0: (Characteristics: DWORD); // 0 for terminating null import descriptor
  5813. 1: (OriginalFirstThunk: DWORD); // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
  5814. end;
  5815. PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;
  5816. {$EXTERNALSYM PIMAGE_IMPORT_DESCRIPTOR}
  5817. _IMAGE_IMPORT_DESCRIPTOR = record
  5818. Union: TIIDUnion;
  5819. TimeDateStamp: DWORD; // 0 if not bound,
  5820. // -1 if bound, and real date\time stamp
  5821. // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
  5822. // O.W. date/time stamp of DLL bound to (Old BIND)
  5823. ForwarderChain: DWORD; // -1 if no forwarders
  5824. Name: DWORD;
  5825. FirstThunk: DWORD; // RVA to IAT (if bound this IAT has actual addresses)
  5826. end;
  5827. {$EXTERNALSYM _IMAGE_IMPORT_DESCRIPTOR}
  5828. IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
  5829. {$EXTERNALSYM IMAGE_IMPORT_DESCRIPTOR}
  5830. TImageImportDecriptor = IMAGE_IMPORT_DESCRIPTOR;
  5831. PImageImportDecriptor = PIMAGE_IMPORT_DESCRIPTOR;
  5832. //
  5833. // New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ]
  5834. //
  5835. type
  5836. PIMAGE_BOUND_IMPORT_DESCRIPTOR = ^IMAGE_BOUND_IMPORT_DESCRIPTOR;
  5837. {$EXTERNALSYM PIMAGE_BOUND_IMPORT_DESCRIPTOR}
  5838. _IMAGE_BOUND_IMPORT_DESCRIPTOR = record
  5839. TimeDateStamp: DWORD;
  5840. OffsetModuleName: Word;
  5841. NumberOfModuleForwarderRefs: Word;
  5842. // Array of zero or more IMAGE_BOUND_FORWARDER_REF follows
  5843. end;
  5844. {$EXTERNALSYM _IMAGE_BOUND_IMPORT_DESCRIPTOR}
  5845. IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR;
  5846. {$EXTERNALSYM IMAGE_BOUND_IMPORT_DESCRIPTOR}
  5847. TImageBoundImportDescriptor = IMAGE_BOUND_IMPORT_DESCRIPTOR;
  5848. PImageBoundImportDescriptor = PIMAGE_BOUND_IMPORT_DESCRIPTOR;
  5849. PIMAGE_BOUND_FORWARDER_REF = ^IMAGE_BOUND_FORWARDER_REF;
  5850. {$EXTERNALSYM PIMAGE_BOUND_FORWARDER_REF}
  5851. _IMAGE_BOUND_FORWARDER_REF = record
  5852. TimeDateStamp: DWORD;
  5853. OffsetModuleName: Word;
  5854. Reserved: Word;
  5855. end;
  5856. {$EXTERNALSYM _IMAGE_BOUND_FORWARDER_REF}
  5857. IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF;
  5858. {$EXTERNALSYM IMAGE_BOUND_FORWARDER_REF}
  5859. TImageBoundForwarderRef = IMAGE_BOUND_FORWARDER_REF;
  5860. PImageBoundForwarderRef = PIMAGE_BOUND_FORWARDER_REF;
  5861. //
  5862. // Resource Format.
  5863. //
  5864. //
  5865. // Resource directory consists of two counts, following by a variable length
  5866. // array of directory entries. The first count is the number of entries at
  5867. // beginning of the array that have actual names associated with each entry.
  5868. // The entries are in ascending order, case insensitive strings. The second
  5869. // count is the number of entries that immediately follow the named entries.
  5870. // This second count identifies the number of entries that have 16-bit integer
  5871. // Ids as their name. These entries are also sorted in ascending order.
  5872. //
  5873. // This structure allows fast lookup by either name or number, but for any
  5874. // given resource entry only one form of lookup is supported, not both.
  5875. // This is consistant with the syntax of the .RC file and the .RES file.
  5876. //
  5877. PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
  5878. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY}
  5879. _IMAGE_RESOURCE_DIRECTORY = record
  5880. Characteristics: DWORD;
  5881. TimeDateStamp: DWORD;
  5882. MajorVersion: Word;
  5883. MinorVersion: Word;
  5884. NumberOfNamedEntries: Word;
  5885. NumberOfIdEntries: Word;
  5886. // IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
  5887. end;
  5888. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY}
  5889. IMAGE_RESOURCE_DIRECTORY = _IMAGE_RESOURCE_DIRECTORY;
  5890. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY}
  5891. TImageResourceDirectory = IMAGE_RESOURCE_DIRECTORY;
  5892. PImageResourceDirectory = PIMAGE_RESOURCE_DIRECTORY;
  5893. const
  5894. IMAGE_RESOURCE_NAME_IS_STRING = DWORD($80000000);
  5895. {$EXTERNALSYM IMAGE_RESOURCE_NAME_IS_STRING}
  5896. IMAGE_RESOURCE_DATA_IS_DIRECTORY = DWORD($80000000);
  5897. {$EXTERNALSYM IMAGE_RESOURCE_DATA_IS_DIRECTORY}
  5898. //
  5899. // Each directory contains the 32-bit Name of the entry and an offset,
  5900. // relative to the beginning of the resource directory of the data associated
  5901. // with this directory entry. If the name of the entry is an actual text
  5902. // string instead of an integer Id, then the high order bit of the name field
  5903. // is set to one and the low order 31-bits are an offset, relative to the
  5904. // beginning of the resource directory of the string, which is of type
  5905. // IMAGE_RESOURCE_DIRECTORY_STRING. Otherwise the high bit is clear and the
  5906. // low-order 16-bits are the integer Id that identify this resource directory
  5907. // entry. If the directory entry is yet another resource directory (i.e. a
  5908. // subdirectory), then the high order bit of the offset field will be
  5909. // set to indicate this. Otherwise the high bit is clear and the offset
  5910. // field points to a resource data entry.
  5911. //
  5912. type
  5913. TIRDEName = record
  5914. case Integer of
  5915. 0: (
  5916. NameOffset: DWORD); // 0..30: NameOffset; 31: NameIsString
  5917. 1: (
  5918. Name: DWORD);
  5919. 2: (
  5920. Id: WORD);
  5921. end;
  5922. TIRDEDirectory = record
  5923. case Integer of
  5924. 0: (
  5925. OffsetToData: DWORD);
  5926. 1: (
  5927. OffsetToDirectory: DWORD); // 0..30: OffsetToDirectory; 31: DataIsDirectory
  5928. end;
  5929. PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
  5930. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_ENTRY}
  5931. _IMAGE_RESOURCE_DIRECTORY_ENTRY = record
  5932. Name: TIRDEName;
  5933. Directory: TIRDEDirectory;
  5934. end;
  5935. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_ENTRY}
  5936. IMAGE_RESOURCE_DIRECTORY_ENTRY = _IMAGE_RESOURCE_DIRECTORY_ENTRY;
  5937. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_ENTRY}
  5938. TImageResourceDirectoryEntry = IMAGE_RESOURCE_DIRECTORY_ENTRY;
  5939. PImageResourceDirectoryEntry = PIMAGE_RESOURCE_DIRECTORY_ENTRY;
  5940. //
  5941. // For resource directory entries that have actual string names, the Name
  5942. // field of the directory entry points to an object of the following type.
  5943. // All of these string objects are stored together after the last resource
  5944. // directory entry and before the first resource data object. This minimizes
  5945. // the impact of these variable length objects on the alignment of the fixed
  5946. // size directory entry objects.
  5947. //
  5948. type
  5949. PIMAGE_RESOURCE_DIRECTORY_STRING = ^IMAGE_RESOURCE_DIRECTORY_STRING;
  5950. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_STRING}
  5951. _IMAGE_RESOURCE_DIRECTORY_STRING = record
  5952. Length: Word;
  5953. NameString: array [0..0] of CHAR;
  5954. end;
  5955. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_STRING}
  5956. IMAGE_RESOURCE_DIRECTORY_STRING = _IMAGE_RESOURCE_DIRECTORY_STRING;
  5957. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_STRING}
  5958. TImageResourceDirectoryString = IMAGE_RESOURCE_DIRECTORY_STRING;
  5959. PImageResourceDirectoryString = PIMAGE_RESOURCE_DIRECTORY_STRING;
  5960. PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
  5961. {$EXTERNALSYM PIMAGE_RESOURCE_DIR_STRING_U}
  5962. _IMAGE_RESOURCE_DIR_STRING_U = record
  5963. Length: Word;
  5964. NameString: array [0..0] of WCHAR;
  5965. end;
  5966. {$EXTERNALSYM _IMAGE_RESOURCE_DIR_STRING_U}
  5967. IMAGE_RESOURCE_DIR_STRING_U = _IMAGE_RESOURCE_DIR_STRING_U;
  5968. {$EXTERNALSYM IMAGE_RESOURCE_DIR_STRING_U}
  5969. TImageResourceDirStringU = IMAGE_RESOURCE_DIR_STRING_U;
  5970. PImageResourceDirStringU = PIMAGE_RESOURCE_DIR_STRING_U;
  5971. //
  5972. // Each resource data entry describes a leaf node in the resource directory
  5973. // tree. It contains an offset, relative to the beginning of the resource
  5974. // directory of the data for the resource, a size field that gives the number
  5975. // of bytes of data at that offset, a CodePage that should be used when
  5976. // decoding code point values within the resource data. Typically for new
  5977. // applications the code page would be the unicode code page.
  5978. //
  5979. PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
  5980. {$EXTERNALSYM PIMAGE_RESOURCE_DATA_ENTRY}
  5981. _IMAGE_RESOURCE_DATA_ENTRY = record
  5982. OffsetToData: DWORD;
  5983. Size: DWORD;
  5984. CodePage: DWORD;
  5985. Reserved: DWORD;
  5986. end;
  5987. {$EXTERNALSYM _IMAGE_RESOURCE_DATA_ENTRY}
  5988. IMAGE_RESOURCE_DATA_ENTRY = _IMAGE_RESOURCE_DATA_ENTRY;
  5989. {$EXTERNALSYM IMAGE_RESOURCE_DATA_ENTRY}
  5990. TImageResourceDataEntry = IMAGE_RESOURCE_DATA_ENTRY;
  5991. PImageResourceDataEntry = PIMAGE_RESOURCE_DATA_ENTRY;
  5992. //
  5993. // Load Configuration Directory Entry
  5994. //
  5995. type
  5996. PIMAGE_LOAD_CONFIG_DIRECTORY32 = ^IMAGE_LOAD_CONFIG_DIRECTORY32;
  5997. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY32}
  5998. IMAGE_LOAD_CONFIG_DIRECTORY32 = record
  5999. Size: DWORD;
  6000. TimeDateStamp: DWORD;
  6001. MajorVersion: WORD;
  6002. MinorVersion: WORD;
  6003. GlobalFlagsClear: DWORD;
  6004. GlobalFlagsSet: DWORD;
  6005. CriticalSectionDefaultTimeout: DWORD;
  6006. DeCommitFreeBlockThreshold: DWORD;
  6007. DeCommitTotalFreeThreshold: DWORD;
  6008. LockPrefixTable: DWORD; // VA
  6009. MaximumAllocationSize: DWORD;
  6010. VirtualMemoryThreshold: DWORD;
  6011. ProcessHeapFlags: DWORD;
  6012. ProcessAffinityMask: DWORD;
  6013. CSDVersion: WORD;
  6014. Reserved1: WORD;
  6015. EditList: DWORD; // VA
  6016. SecurityCookie: DWORD; // VA
  6017. SEHandlerTable: DWORD; // VA
  6018. SEHandlerCount: DWORD;
  6019. end;
  6020. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY32}
  6021. TImageLoadConfigDirectory32 = IMAGE_LOAD_CONFIG_DIRECTORY32;
  6022. PImageLoadConfigDirectory32 = PIMAGE_LOAD_CONFIG_DIRECTORY32;
  6023. PIMAGE_LOAD_CONFIG_DIRECTORY64 = ^IMAGE_LOAD_CONFIG_DIRECTORY64;
  6024. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY64}
  6025. IMAGE_LOAD_CONFIG_DIRECTORY64 = record
  6026. Size: DWORD;
  6027. TimeDateStamp: DWORD;
  6028. MajorVersion: WORD;
  6029. MinorVersion: WORD;
  6030. GlobalFlagsClear: DWORD;
  6031. GlobalFlagsSet: DWORD;
  6032. CriticalSectionDefaultTimeout: DWORD;
  6033. DeCommitFreeBlockThreshold: ULONGLONG;
  6034. DeCommitTotalFreeThreshold: ULONGLONG;
  6035. LockPrefixTable: ULONGLONG; // VA
  6036. MaximumAllocationSize: ULONGLONG;
  6037. VirtualMemoryThreshold: ULONGLONG;
  6038. ProcessAffinityMask: ULONGLONG;
  6039. ProcessHeapFlags: DWORD;
  6040. CSDVersion: WORD;
  6041. Reserved1: WORD;
  6042. EditList: ULONGLONG; // VA
  6043. SecurityCookie: ULONGLONG; // VA
  6044. SEHandlerTable: ULONGLONG; // VA
  6045. SEHandlerCount: ULONGLONG;
  6046. end;
  6047. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY64}
  6048. TImageLoadConfigDirectory64 = IMAGE_LOAD_CONFIG_DIRECTORY64;
  6049. PImageLoadConfigDirectory64 = PIMAGE_LOAD_CONFIG_DIRECTORY64;
  6050. IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
  6051. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY}
  6052. PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
  6053. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY}
  6054. TImageLoadConfigDirectory = TImageLoadConfigDirectory32;
  6055. PImageLoadConfigDirectory = PImageLoadConfigDirectory32;
  6056. //
  6057. // WIN CE Exception table format
  6058. //
  6059. //
  6060. // Function table entry format. Function table is pointed to by the
  6061. // IMAGE_DIRECTORY_ENTRY_EXCEPTION directory entry.
  6062. //
  6063. type
  6064. PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = ^IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
  6065. {$EXTERNALSYM PIMAGE_CE_RUNTIME_FUNCTION_ENTRY}
  6066. _IMAGE_CE_RUNTIME_FUNCTION_ENTRY = record
  6067. FuncStart: DWORD;
  6068. Flags: DWORD;
  6069. //DWORD PrologLen : 8;
  6070. //DWORD FuncLen : 22;
  6071. //DWORD ThirtyTwoBit : 1;
  6072. //DWORD ExceptionFlag : 1;
  6073. end;
  6074. {$EXTERNALSYM _IMAGE_CE_RUNTIME_FUNCTION_ENTRY}
  6075. IMAGE_CE_RUNTIME_FUNCTION_ENTRY = _IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
  6076. {$EXTERNALSYM IMAGE_CE_RUNTIME_FUNCTION_ENTRY}
  6077. TImageCERuntimeFunctionEntry = IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
  6078. PImageCERuntimeFunctionEntry = PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
  6079. //
  6080. // Debug Format
  6081. //
  6082. type
  6083. PIMAGE_DEBUG_DIRECTORY = ^IMAGE_DEBUG_DIRECTORY;
  6084. {$EXTERNALSYM PIMAGE_DEBUG_DIRECTORY}
  6085. _IMAGE_DEBUG_DIRECTORY = record
  6086. Characteristics: DWORD;
  6087. TimeDateStamp: DWORD;
  6088. MajorVersion: Word;
  6089. MinorVersion: Word;
  6090. Type_: DWORD;
  6091. SizeOfData: DWORD;
  6092. AddressOfRawData: DWORD;
  6093. PointerToRawData: DWORD;
  6094. end;
  6095. {$EXTERNALSYM _IMAGE_DEBUG_DIRECTORY}
  6096. IMAGE_DEBUG_DIRECTORY = _IMAGE_DEBUG_DIRECTORY;
  6097. {$EXTERNALSYM IMAGE_DEBUG_DIRECTORY}
  6098. TImageDebugDirectory = IMAGE_DEBUG_DIRECTORY;
  6099. PImageDebugDirectory = PIMAGE_DEBUG_DIRECTORY;
  6100. const
  6101. IMAGE_DEBUG_TYPE_UNKNOWN = 0;
  6102. {$EXTERNALSYM IMAGE_DEBUG_TYPE_UNKNOWN}
  6103. IMAGE_DEBUG_TYPE_COFF = 1;
  6104. {$EXTERNALSYM IMAGE_DEBUG_TYPE_COFF}
  6105. IMAGE_DEBUG_TYPE_CODEVIEW = 2;
  6106. {$EXTERNALSYM IMAGE_DEBUG_TYPE_CODEVIEW}
  6107. IMAGE_DEBUG_TYPE_FPO = 3;
  6108. {$EXTERNALSYM IMAGE_DEBUG_TYPE_FPO}
  6109. IMAGE_DEBUG_TYPE_MISC = 4;
  6110. {$EXTERNALSYM IMAGE_DEBUG_TYPE_MISC}
  6111. IMAGE_DEBUG_TYPE_EXCEPTION = 5;
  6112. {$EXTERNALSYM IMAGE_DEBUG_TYPE_EXCEPTION}
  6113. IMAGE_DEBUG_TYPE_FIXUP = 6;
  6114. {$EXTERNALSYM IMAGE_DEBUG_TYPE_FIXUP}
  6115. IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7;
  6116. {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_TO_SRC}
  6117. IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8;
  6118. {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_FROM_SRC}
  6119. IMAGE_DEBUG_TYPE_BORLAND = 9;
  6120. {$EXTERNALSYM IMAGE_DEBUG_TYPE_BORLAND}
  6121. IMAGE_DEBUG_TYPE_RESERVED10 = 10;
  6122. {$EXTERNALSYM IMAGE_DEBUG_TYPE_RESERVED10}
  6123. IMAGE_DEBUG_TYPE_CLSID = 11;
  6124. {$EXTERNALSYM IMAGE_DEBUG_TYPE_CLSID}
  6125. type
  6126. PIMAGE_COFF_SYMBOLS_HEADER = ^IMAGE_COFF_SYMBOLS_HEADER;
  6127. {$EXTERNALSYM PIMAGE_COFF_SYMBOLS_HEADER}
  6128. _IMAGE_COFF_SYMBOLS_HEADER = record
  6129. NumberOfSymbols: DWORD;
  6130. LvaToFirstSymbol: DWORD;
  6131. NumberOfLinenumbers: DWORD;
  6132. LvaToFirstLinenumber: DWORD;
  6133. RvaToFirstByteOfCode: DWORD;
  6134. RvaToLastByteOfCode: DWORD;
  6135. RvaToFirstByteOfData: DWORD;
  6136. RvaToLastByteOfData: DWORD;
  6137. end;
  6138. {$EXTERNALSYM _IMAGE_COFF_SYMBOLS_HEADER}
  6139. IMAGE_COFF_SYMBOLS_HEADER = _IMAGE_COFF_SYMBOLS_HEADER;
  6140. {$EXTERNALSYM IMAGE_COFF_SYMBOLS_HEADER}
  6141. TImageCoffSymbolsHeader = IMAGE_COFF_SYMBOLS_HEADER;
  6142. PImageCoffSymbolsHeader = PIMAGE_COFF_SYMBOLS_HEADER;
  6143. const
  6144. FRAME_FPO = 0;
  6145. {$EXTERNALSYM FRAME_FPO}
  6146. FRAME_TRAP = 1;
  6147. {$EXTERNALSYM FRAME_TRAP}
  6148. FRAME_TSS = 2;
  6149. {$EXTERNALSYM FRAME_TSS}
  6150. FRAME_NONFPO = 3;
  6151. {$EXTERNALSYM FRAME_NONFPO}
  6152. FPOFLAGS_PROLOG = $00FF; // # bytes in prolog
  6153. FPOFLAGS_REGS = $0700; // # regs saved
  6154. FPOFLAGS_HAS_SEH = $0800; // TRUE if SEH in func
  6155. FPOFLAGS_USE_BP = $1000; // TRUE if EBP has been allocated
  6156. FPOFLAGS_RESERVED = $2000; // reserved for future use
  6157. FPOFLAGS_FRAME = $C000; // frame type
  6158. type
  6159. PFPO_DATA = ^FPO_DATA;
  6160. {$EXTERNALSYM PFPO_DATA}
  6161. _FPO_DATA = record
  6162. ulOffStart: DWORD; // offset 1st byte of function code
  6163. cbProcSize: DWORD; // # bytes in function
  6164. cdwLocals: DWORD; // # bytes in locals/4
  6165. cdwParams: WORD; // # bytes in params/4
  6166. Flags: WORD;
  6167. end;
  6168. {$EXTERNALSYM _FPO_DATA}
  6169. FPO_DATA = _FPO_DATA;
  6170. {$EXTERNALSYM FPO_DATA}
  6171. TFpoData = FPO_DATA;
  6172. PFpoData = PFPO_DATA;
  6173. const
  6174. SIZEOF_RFPO_DATA = 16;
  6175. {$EXTERNALSYM SIZEOF_RFPO_DATA}
  6176. IMAGE_DEBUG_MISC_EXENAME = 1;
  6177. {$EXTERNALSYM IMAGE_DEBUG_MISC_EXENAME}
  6178. type
  6179. PIMAGE_DEBUG_MISC = ^IMAGE_DEBUG_MISC;
  6180. {$EXTERNALSYM PIMAGE_DEBUG_MISC}
  6181. _IMAGE_DEBUG_MISC = record
  6182. DataType: DWORD; // type of misc data, see defines
  6183. Length: DWORD; // total length of record, rounded to four byte multiple.
  6184. Unicode: ByteBool; // TRUE if data is unicode string
  6185. Reserved: array [0..2] of Byte;
  6186. Data: array [0..0] of Byte; // Actual data
  6187. end;
  6188. {$EXTERNALSYM _IMAGE_DEBUG_MISC}
  6189. IMAGE_DEBUG_MISC = _IMAGE_DEBUG_MISC;
  6190. {$EXTERNALSYM IMAGE_DEBUG_MISC}
  6191. TImageDebugMisc = IMAGE_DEBUG_MISC;
  6192. PImageDebugMisc = PIMAGE_DEBUG_MISC;
  6193. //
  6194. // Function table extracted from MIPS/ALPHA/IA64 images. Does not contain
  6195. // information needed only for runtime support. Just those fields for
  6196. // each entry needed by a debugger.
  6197. //
  6198. PIMAGE_FUNCTION_ENTRY = ^IMAGE_FUNCTION_ENTRY;
  6199. {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY}
  6200. _IMAGE_FUNCTION_ENTRY = record
  6201. StartingAddress: DWORD;
  6202. EndingAddress: DWORD;
  6203. EndOfPrologue: DWORD;
  6204. end;
  6205. {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY}
  6206. IMAGE_FUNCTION_ENTRY = _IMAGE_FUNCTION_ENTRY;
  6207. {$EXTERNALSYM IMAGE_FUNCTION_ENTRY}
  6208. TImageFunctionEntry = IMAGE_FUNCTION_ENTRY;
  6209. PImageFunctionEntry = PIMAGE_FUNCTION_ENTRY;
  6210. PIMAGE_FUNCTION_ENTRY64 = ^IMAGE_FUNCTION_ENTRY64;
  6211. {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY64}
  6212. _IMAGE_FUNCTION_ENTRY64 = record
  6213. StartingAddress: ULONGLONG;
  6214. EndingAddress: ULONGLONG;
  6215. case Integer of
  6216. 0: (EndOfPrologue: ULONGLONG);
  6217. 1: (UnwindInfoAddress: ULONGLONG);
  6218. end;
  6219. {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY64}
  6220. IMAGE_FUNCTION_ENTRY64 = _IMAGE_FUNCTION_ENTRY64;
  6221. {$EXTERNALSYM IMAGE_FUNCTION_ENTRY64}
  6222. TImageFunctionEntry64 = IMAGE_FUNCTION_ENTRY64;
  6223. PImageFunctionEntry64 = PIMAGE_FUNCTION_ENTRY64;
  6224. //
  6225. // Debugging information can be stripped from an image file and placed
  6226. // in a separate .DBG file, whose file name part is the same as the
  6227. // image file name part (e.g. symbols for CMD.EXE could be stripped
  6228. // and placed in CMD.DBG). This is indicated by the IMAGE_FILE_DEBUG_STRIPPED
  6229. // flag in the Characteristics field of the file header. The beginning of
  6230. // the .DBG file contains the following structure which captures certain
  6231. // information from the image file. This allows a debug to proceed even if
  6232. // the original image file is not accessable. This header is followed by
  6233. // zero of more IMAGE_SECTION_HEADER structures, followed by zero or more
  6234. // IMAGE_DEBUG_DIRECTORY structures. The latter structures and those in
  6235. // the image file contain file offsets relative to the beginning of the
  6236. // .DBG file.
  6237. //
  6238. // If symbols have been stripped from an image, the IMAGE_DEBUG_MISC structure
  6239. // is left in the image file, but not mapped. This allows a debugger to
  6240. // compute the name of the .DBG file, from the name of the image in the
  6241. // IMAGE_DEBUG_MISC structure.
  6242. //
  6243. PIMAGE_SEPARATE_DEBUG_HEADER = ^IMAGE_SEPARATE_DEBUG_HEADER;
  6244. {$EXTERNALSYM PIMAGE_SEPARATE_DEBUG_HEADER}
  6245. _IMAGE_SEPARATE_DEBUG_HEADER = record
  6246. Signature: Word;
  6247. Flags: Word;
  6248. Machine: Word;
  6249. Characteristics: Word;
  6250. TimeDateStamp: DWORD;
  6251. CheckSum: DWORD;
  6252. ImageBase: DWORD;
  6253. SizeOfImage: DWORD;
  6254. NumberOfSections: DWORD;
  6255. ExportedNamesSize: DWORD;
  6256. DebugDirectorySize: DWORD;
  6257. SectionAlignment: DWORD;
  6258. Reserved: array [0..1] of DWORD;
  6259. end;
  6260. {$EXTERNALSYM _IMAGE_SEPARATE_DEBUG_HEADER}
  6261. IMAGE_SEPARATE_DEBUG_HEADER = _IMAGE_SEPARATE_DEBUG_HEADER;
  6262. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_HEADER}
  6263. TImageSeparateDebugHeader = IMAGE_SEPARATE_DEBUG_HEADER;
  6264. PImageSeparateDebugHeader = PIMAGE_SEPARATE_DEBUG_HEADER;
  6265. _NON_PAGED_DEBUG_INFO = record
  6266. Signature: WORD;
  6267. Flags: WORD;
  6268. Size: DWORD;
  6269. Machine: WORD;
  6270. Characteristics: WORD;
  6271. TimeDateStamp: DWORD;
  6272. CheckSum: DWORD;
  6273. SizeOfImage: DWORD;
  6274. ImageBase: ULONGLONG;
  6275. //DebugDirectorySize
  6276. //IMAGE_DEBUG_DIRECTORY
  6277. end;
  6278. {$EXTERNALSYM _NON_PAGED_DEBUG_INFO}
  6279. NON_PAGED_DEBUG_INFO = _NON_PAGED_DEBUG_INFO;
  6280. {$EXTERNALSYM NON_PAGED_DEBUG_INFO}
  6281. PNON_PAGED_DEBUG_INFO = ^NON_PAGED_DEBUG_INFO;
  6282. {$EXTERNALSYM PNON_PAGED_DEBUG_INFO}
  6283. const
  6284. IMAGE_SEPARATE_DEBUG_SIGNATURE = $4944;
  6285. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_SIGNATURE}
  6286. NON_PAGED_DEBUG_SIGNATURE = $494E;
  6287. {$EXTERNALSYM NON_PAGED_DEBUG_SIGNATURE}
  6288. IMAGE_SEPARATE_DEBUG_FLAGS_MASK = $8000;
  6289. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_FLAGS_MASK}
  6290. IMAGE_SEPARATE_DEBUG_MISMATCH = $8000; // when DBG was updated, the old checksum didn't match.
  6291. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_MISMATCH}
  6292. //
  6293. // The .arch section is made up of headers, each describing an amask position/value
  6294. // pointing to an array of IMAGE_ARCHITECTURE_ENTRY's. Each "array" (both the header
  6295. // and entry arrays) are terminiated by a quadword of 0xffffffffL.
  6296. //
  6297. // NOTE: There may be quadwords of 0 sprinkled around and must be skipped.
  6298. //
  6299. const
  6300. IAHMASK_VALUE = $00000001; // 1 -> code section depends on mask bit
  6301. // 0 -> new instruction depends on mask bit
  6302. IAHMASK_MBZ7 = $000000FE; // MBZ
  6303. IAHMASK_SHIFT = $0000FF00; // Amask bit in question for this fixup
  6304. IAHMASK_MBZ16 = DWORD($FFFF0000); // MBZ
  6305. type
  6306. PIMAGE_ARCHITECTURE_HEADER = ^IMAGE_ARCHITECTURE_HEADER;
  6307. {$EXTERNALSYM PIMAGE_ARCHITECTURE_HEADER}
  6308. _ImageArchitectureHeader = record
  6309. Mask: DWORD;
  6310. FirstEntryRVA: DWORD; // RVA into .arch section to array of ARCHITECTURE_ENTRY's
  6311. end;
  6312. {$EXTERNALSYM _ImageArchitectureHeader}
  6313. IMAGE_ARCHITECTURE_HEADER = _ImageArchitectureHeader;
  6314. {$EXTERNALSYM IMAGE_ARCHITECTURE_HEADER}
  6315. TImageArchitectureHeader = IMAGE_ARCHITECTURE_HEADER;
  6316. PImageArchitectureHeader = PIMAGE_ARCHITECTURE_HEADER;
  6317. PIMAGE_ARCHITECTURE_ENTRY = ^IMAGE_ARCHITECTURE_ENTRY;
  6318. {$EXTERNALSYM PIMAGE_ARCHITECTURE_ENTRY}
  6319. _ImageArchitectureEntry = record
  6320. FixupInstRVA: DWORD; // RVA of instruction to fixup
  6321. NewInst: DWORD; // fixup instruction (see alphaops.h)
  6322. end;
  6323. {$EXTERNALSYM _ImageArchitectureEntry}
  6324. IMAGE_ARCHITECTURE_ENTRY = _ImageArchitectureEntry;
  6325. {$EXTERNALSYM IMAGE_ARCHITECTURE_ENTRY}
  6326. TImageArchitectureEntry = IMAGE_ARCHITECTURE_ENTRY;
  6327. PImageArchitectureEntry = PIMAGE_ARCHITECTURE_ENTRY;
  6328. // #include "poppack.h" // Back to the initial value
  6329. // The following structure defines the new import object. Note the values of the first two fields,
  6330. // which must be set as stated in order to differentiate old and new import members.
  6331. // Following this structure, the linker emits two null-terminated strings used to recreate the
  6332. // import at the time of use. The first string is the import's name, the second is the dll's name.
  6333. const
  6334. IMPORT_OBJECT_HDR_SIG2 = $ffff;
  6335. {$EXTERNALSYM IMPORT_OBJECT_HDR_SIG2}
  6336. const
  6337. IOHFLAGS_TYPE = $0003; // IMPORT_TYPE
  6338. IAHFLAGS_NAMETYPE = $001C; // IMPORT_NAME_TYPE
  6339. IAHFLAGS_RESERVED = $FFE0; // Reserved. Must be zero.
  6340. type
  6341. PImportObjectHeader = ^IMPORT_OBJECT_HEADER;
  6342. IMPORT_OBJECT_HEADER = record
  6343. Sig1: WORD; // Must be IMAGE_FILE_MACHINE_UNKNOWN
  6344. Sig2: WORD; // Must be IMPORT_OBJECT_HDR_SIG2.
  6345. Version: WORD;
  6346. Machine: WORD;
  6347. TimeDateStamp: DWORD; // Time/date stamp
  6348. SizeOfData: DWORD; // particularly useful for incremental links
  6349. OrdinalOrHint: record
  6350. case Integer of
  6351. 0: (Ordinal: WORD); // if grf & IMPORT_OBJECT_ORDINAL
  6352. 1: (Flags: DWORD);
  6353. end;
  6354. Flags: WORD;
  6355. //WORD Type : 2; // IMPORT_TYPE
  6356. //WORD NameType : 3; // IMPORT_NAME_TYPE
  6357. //WORD Reserved : 11; // Reserved. Must be zero.
  6358. end;
  6359. {$EXTERNALSYM IMPORT_OBJECT_HEADER}
  6360. TImportObjectHeader = IMPORT_OBJECT_HEADER;
  6361. IMPORT_OBJECT_TYPE = (IMPORT_OBJECT_CODE, IMPORT_OBJECT_DATA, IMPORT_OBJECT_CONST);
  6362. {$EXTERNALSYM IMPORT_OBJECT_TYPE}
  6363. TImportObjectType = IMPORT_OBJECT_TYPE;
  6364. IMPORT_OBJECT_NAME_TYPE = (
  6365. IMPORT_OBJECT_ORDINAL, // Import by ordinal
  6366. IMPORT_OBJECT_NAME, // Import name == public symbol name.
  6367. IMPORT_OBJECT_NAME_NO_PREFIX, // Import name == public symbol name skipping leading ?, @, or optionally _.
  6368. IMPORT_OBJECT_NAME_UNDECORATE); // Import name == public symbol name skipping leading ?, @, or optionally _
  6369. // and truncating at first @
  6370. {$EXTERNALSYM IMPORT_OBJECT_NAME_TYPE}
  6371. TImportObjectNameType = IMPORT_OBJECT_NAME_TYPE;
  6372. ReplacesCorHdrNumericDefines = DWORD;
  6373. {$EXTERNALSYM ReplacesCorHdrNumericDefines}
  6374. const
  6375. // COM+ Header entry point flags.
  6376. COMIMAGE_FLAGS_ILONLY = $00000001;
  6377. {$EXTERNALSYM COMIMAGE_FLAGS_ILONLY}
  6378. COMIMAGE_FLAGS_32BITREQUIRED = $00000002;
  6379. {$EXTERNALSYM COMIMAGE_FLAGS_32BITREQUIRED}
  6380. COMIMAGE_FLAGS_IL_LIBRARY = $00000004;
  6381. {$EXTERNALSYM COMIMAGE_FLAGS_IL_LIBRARY}
  6382. COMIMAGE_FLAGS_STRONGNAMESIGNED = $00000008;
  6383. {$EXTERNALSYM COMIMAGE_FLAGS_STRONGNAMESIGNED}
  6384. COMIMAGE_FLAGS_TRACKDEBUGDATA = $00010000;
  6385. {$EXTERNALSYM COMIMAGE_FLAGS_TRACKDEBUGDATA}
  6386. // Version flags for image.
  6387. COR_VERSION_MAJOR_V2 = 2;
  6388. {$EXTERNALSYM COR_VERSION_MAJOR_V2}
  6389. COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2;
  6390. {$EXTERNALSYM COR_VERSION_MAJOR}
  6391. COR_VERSION_MINOR = 0;
  6392. {$EXTERNALSYM COR_VERSION_MINOR}
  6393. COR_DELETED_NAME_LENGTH = 8;
  6394. {$EXTERNALSYM COR_DELETED_NAME_LENGTH}
  6395. COR_VTABLEGAP_NAME_LENGTH = 8;
  6396. {$EXTERNALSYM COR_VTABLEGAP_NAME_LENGTH}
  6397. // Maximum size of a NativeType descriptor.
  6398. NATIVE_TYPE_MAX_CB = 1;
  6399. {$EXTERNALSYM NATIVE_TYPE_MAX_CB}
  6400. COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= $FF;
  6401. {$EXTERNALSYM COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE}
  6402. // #defines for the MIH FLAGS
  6403. IMAGE_COR_MIH_METHODRVA = $01;
  6404. {$EXTERNALSYM IMAGE_COR_MIH_METHODRVA}
  6405. IMAGE_COR_MIH_EHRVA = $02;
  6406. {$EXTERNALSYM IMAGE_COR_MIH_EHRVA}
  6407. IMAGE_COR_MIH_BASICBLOCK = $08;
  6408. {$EXTERNALSYM IMAGE_COR_MIH_BASICBLOCK}
  6409. // V-table constants
  6410. COR_VTABLE_32BIT = $01; // V-table slots are 32-bits in size.
  6411. {$EXTERNALSYM COR_VTABLE_32BIT}
  6412. COR_VTABLE_64BIT = $02; // V-table slots are 64-bits in size.
  6413. {$EXTERNALSYM COR_VTABLE_64BIT}
  6414. COR_VTABLE_FROM_UNMANAGED = $04; // If set, transition from unmanaged.
  6415. {$EXTERNALSYM COR_VTABLE_FROM_UNMANAGED}
  6416. COR_VTABLE_CALL_MOST_DERIVED = $10; // Call most derived method described by
  6417. {$EXTERNALSYM COR_VTABLE_CALL_MOST_DERIVED}
  6418. // EATJ constants
  6419. IMAGE_COR_EATJ_THUNK_SIZE = 32; // Size of a jump thunk reserved range.
  6420. {$EXTERNALSYM IMAGE_COR_EATJ_THUNK_SIZE}
  6421. // Max name lengths
  6422. // Change to unlimited name lengths.
  6423. MAX_CLASS_NAME = 1024;
  6424. {$EXTERNALSYM MAX_CLASS_NAME}
  6425. MAX_PACKAGE_NAME = 1024;
  6426. {$EXTERNALSYM MAX_PACKAGE_NAME}
  6427. // COM+ 2.0 header structure.
  6428. type
  6429. IMAGE_COR20_HEADER = record
  6430. // Header versioning
  6431. cb: DWORD;
  6432. MajorRuntimeVersion: WORD;
  6433. MinorRuntimeVersion: WORD;
  6434. // Symbol table and startup information
  6435. MetaData: IMAGE_DATA_DIRECTORY;
  6436. Flags: DWORD;
  6437. EntryPointToken: DWORD;
  6438. // Binding information
  6439. Resources: IMAGE_DATA_DIRECTORY;
  6440. StrongNameSignature: IMAGE_DATA_DIRECTORY;
  6441. // Regular fixup and binding information
  6442. CodeManagerTable: IMAGE_DATA_DIRECTORY;
  6443. VTableFixups: IMAGE_DATA_DIRECTORY;
  6444. ExportAddressTableJumps: IMAGE_DATA_DIRECTORY;
  6445. // Precompiled image info (internal use only - set to zero)
  6446. ManagedNativeHeader: IMAGE_DATA_DIRECTORY;
  6447. end;
  6448. {$EXTERNALSYM IMAGE_COR20_HEADER}
  6449. PIMAGE_COR20_HEADER = ^IMAGE_COR20_HEADER;
  6450. {$EXTERNALSYM PIMAGE_COR20_HEADER}
  6451. TImageCor20Header = IMAGE_COR20_HEADER;
  6452. PImageCor20Header = PIMAGE_COR20_HEADER;
  6453. //
  6454. // End Image Format
  6455. //
  6456. type
  6457. SLIST_ENTRY = SINGLE_LIST_ENTRY;
  6458. {$EXTERNALSYM SLIST_ENTRY}
  6459. _SLIST_ENTRY = _SINGLE_LIST_ENTRY;
  6460. {$EXTERNALSYM _SLIST_ENTRY}
  6461. PSLIST_ENTRY = PSINGLE_LIST_ENTRY;
  6462. {$EXTERNALSYM PSLIST_ENTRY}
  6463. TSListEntry = SLIST_ENTRY;
  6464. PSListEntry = PSLIST_ENTRY;
  6465. type
  6466. _SLIST_HEADER = record
  6467. case Integer of
  6468. 0: (
  6469. Alignment: ULONGLONG);
  6470. 1: (
  6471. Next: SLIST_ENTRY;
  6472. Depth: WORD;
  6473. Sequence: WORD);
  6474. end;
  6475. {$EXTERNALSYM _SLIST_HEADER}
  6476. SLIST_HEADER = _SLIST_HEADER;
  6477. {$EXTERNALSYM SLIST_HEADER}
  6478. PSLIST_HEADER = ^SLIST_HEADER;
  6479. {$EXTERNALSYM PSLIST_HEADER}
  6480. TSListHeader = SLIST_HEADER;
  6481. PSListHeader = PSLIST_HEADER;
  6482. procedure RtlInitializeSListHead(ListHead: PSLIST_HEADER); stdcall;
  6483. {$EXTERNALSYM RtlInitializeSListHead}
  6484. function RtlFirstEntrySList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
  6485. {$EXTERNALSYM RtlFirstEntrySList}
  6486. function RtlInterlockedPopEntrySList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
  6487. {$EXTERNALSYM RtlInterlockedPopEntrySList}
  6488. function RtlInterlockedPushEntrySList(ListHead, ListEntry: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
  6489. {$EXTERNALSYM RtlInterlockedPushEntrySList}
  6490. function RtlInterlockedFlushSList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
  6491. {$EXTERNALSYM RtlInterlockedFlushSList}
  6492. function RtlQueryDepthSList(ListHead: PSLIST_HEADER): WORD; stdcall;
  6493. {$EXTERNALSYM RtlQueryDepthSList}
  6494. const
  6495. HEAP_NO_SERIALIZE = $00000001;
  6496. {$EXTERNALSYM HEAP_NO_SERIALIZE}
  6497. HEAP_GROWABLE = $00000002;
  6498. {$EXTERNALSYM HEAP_GROWABLE}
  6499. HEAP_GENERATE_EXCEPTIONS = $00000004;
  6500. {$EXTERNALSYM HEAP_GENERATE_EXCEPTIONS}
  6501. HEAP_ZERO_MEMORY = $00000008;
  6502. {$EXTERNALSYM HEAP_ZERO_MEMORY}
  6503. HEAP_REALLOC_IN_PLACE_ONLY = $00000010;
  6504. {$EXTERNALSYM HEAP_REALLOC_IN_PLACE_ONLY}
  6505. HEAP_TAIL_CHECKING_ENABLED = $00000020;
  6506. {$EXTERNALSYM HEAP_TAIL_CHECKING_ENABLED}
  6507. HEAP_FREE_CHECKING_ENABLED = $00000040;
  6508. {$EXTERNALSYM HEAP_FREE_CHECKING_ENABLED}
  6509. HEAP_DISABLE_COALESCE_ON_FREE = $00000080;
  6510. {$EXTERNALSYM HEAP_DISABLE_COALESCE_ON_FREE}
  6511. HEAP_CREATE_ALIGN_16 = $00010000;
  6512. {$EXTERNALSYM HEAP_CREATE_ALIGN_16}
  6513. HEAP_CREATE_ENABLE_TRACING = $00020000;
  6514. {$EXTERNALSYM HEAP_CREATE_ENABLE_TRACING}
  6515. HEAP_MAXIMUM_TAG = $0FFF;
  6516. {$EXTERNALSYM HEAP_MAXIMUM_TAG}
  6517. HEAP_PSEUDO_TAG_FLAG = $8000;
  6518. {$EXTERNALSYM HEAP_PSEUDO_TAG_FLAG}
  6519. HEAP_TAG_SHIFT = 18;
  6520. {$EXTERNALSYM HEAP_TAG_SHIFT}
  6521. function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
  6522. {$EXTERNALSYM HEAP_MAKE_TAG_FLAGS}
  6523. procedure RtlCaptureContext(ContextRecord: PCONTEXT); stdcall;
  6524. {$EXTERNALSYM RtlCaptureContext}
  6525. const
  6526. IS_TEXT_UNICODE_ASCII16 = $0001;
  6527. {$EXTERNALSYM IS_TEXT_UNICODE_ASCII16}
  6528. IS_TEXT_UNICODE_REVERSE_ASCII16 = $0010;
  6529. {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_ASCII16}
  6530. IS_TEXT_UNICODE_STATISTICS = $0002;
  6531. {$EXTERNALSYM IS_TEXT_UNICODE_STATISTICS}
  6532. IS_TEXT_UNICODE_REVERSE_STATISTICS = $0020;
  6533. {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_STATISTICS}
  6534. IS_TEXT_UNICODE_CONTROLS = $0004;
  6535. {$EXTERNALSYM IS_TEXT_UNICODE_CONTROLS}
  6536. IS_TEXT_UNICODE_REVERSE_CONTROLS = $0040;
  6537. {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_CONTROLS}
  6538. IS_TEXT_UNICODE_SIGNATURE = $0008;
  6539. {$EXTERNALSYM IS_TEXT_UNICODE_SIGNATURE}
  6540. IS_TEXT_UNICODE_REVERSE_SIGNATURE = $0080;
  6541. {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_SIGNATURE}
  6542. IS_TEXT_UNICODE_ILLEGAL_CHARS = $0100;
  6543. {$EXTERNALSYM IS_TEXT_UNICODE_ILLEGAL_CHARS}
  6544. IS_TEXT_UNICODE_ODD_LENGTH = $0200;
  6545. {$EXTERNALSYM IS_TEXT_UNICODE_ODD_LENGTH}
  6546. IS_TEXT_UNICODE_DBCS_LEADBYTE = $0400;
  6547. {$EXTERNALSYM IS_TEXT_UNICODE_DBCS_LEADBYTE}
  6548. IS_TEXT_UNICODE_NULL_BYTES = $1000;
  6549. {$EXTERNALSYM IS_TEXT_UNICODE_NULL_BYTES}
  6550. IS_TEXT_UNICODE_UNICODE_MASK = $000F;
  6551. {$EXTERNALSYM IS_TEXT_UNICODE_UNICODE_MASK}
  6552. IS_TEXT_UNICODE_REVERSE_MASK = $00F0;
  6553. {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_MASK}
  6554. IS_TEXT_UNICODE_NOT_UNICODE_MASK = $0F00;
  6555. {$EXTERNALSYM IS_TEXT_UNICODE_NOT_UNICODE_MASK}
  6556. IS_TEXT_UNICODE_NOT_ASCII_MASK = $F000;
  6557. {$EXTERNALSYM IS_TEXT_UNICODE_NOT_ASCII_MASK}
  6558. COMPRESSION_FORMAT_NONE = $0000;
  6559. {$EXTERNALSYM COMPRESSION_FORMAT_NONE}
  6560. COMPRESSION_FORMAT_DEFAULT = $0001;
  6561. {$EXTERNALSYM COMPRESSION_FORMAT_DEFAULT}
  6562. COMPRESSION_FORMAT_LZNT1 = $0002;
  6563. {$EXTERNALSYM COMPRESSION_FORMAT_LZNT1}
  6564. COMPRESSION_ENGINE_STANDARD = $0000;
  6565. {$EXTERNALSYM COMPRESSION_ENGINE_STANDARD}
  6566. COMPRESSION_ENGINE_MAXIMUM = $0100;
  6567. {$EXTERNALSYM COMPRESSION_ENGINE_MAXIMUM}
  6568. COMPRESSION_ENGINE_HIBER = $0200;
  6569. {$EXTERNALSYM COMPRESSION_ENGINE_HIBER}
  6570. function RtlCompareMemory(const Source1, Source2: Pointer; Length: SIZE_T): SIZE_T; stdcall;
  6571. {$EXTERNALSYM RtlCompareMemory}
  6572. type
  6573. PMESSAGE_RESOURCE_ENTRY = ^MESSAGE_RESOURCE_ENTRY;
  6574. {$EXTERNALSYM PMESSAGE_RESOURCE_ENTRY}
  6575. _MESSAGE_RESOURCE_ENTRY = record
  6576. Length: Word;
  6577. Flags: Word;
  6578. Text: array [0..0] of Byte;
  6579. end;
  6580. {$EXTERNALSYM _MESSAGE_RESOURCE_ENTRY}
  6581. MESSAGE_RESOURCE_ENTRY = _MESSAGE_RESOURCE_ENTRY;
  6582. {$EXTERNALSYM MESSAGE_RESOURCE_ENTRY}
  6583. TMessageResourceEntry = MESSAGE_RESOURCE_ENTRY;
  6584. PMessageResourceEntry = PMESSAGE_RESOURCE_ENTRY;
  6585. const
  6586. MESSAGE_RESOURCE_UNICODE = $0001;
  6587. {$EXTERNALSYM MESSAGE_RESOURCE_UNICODE}
  6588. type
  6589. PMESSAGE_RESOURCE_BLOCK = ^MESSAGE_RESOURCE_BLOCK;
  6590. {$EXTERNALSYM PMESSAGE_RESOURCE_BLOCK}
  6591. _MESSAGE_RESOURCE_BLOCK = record
  6592. LowId: DWORD;
  6593. HighId: DWORD;
  6594. OffsetToEntries: DWORD;
  6595. end;
  6596. {$EXTERNALSYM _MESSAGE_RESOURCE_BLOCK}
  6597. MESSAGE_RESOURCE_BLOCK = _MESSAGE_RESOURCE_BLOCK;
  6598. {$EXTERNALSYM MESSAGE_RESOURCE_BLOCK}
  6599. TMessageResourceBlock = MESSAGE_RESOURCE_BLOCK;
  6600. PMessageResourceBlock = PMESSAGE_RESOURCE_BLOCK;
  6601. PMESSAGE_RESOURCE_DATA = ^MESSAGE_RESOURCE_DATA;
  6602. {$EXTERNALSYM PMESSAGE_RESOURCE_DATA}
  6603. _MESSAGE_RESOURCE_DATA = record
  6604. NumberOfBlocks: DWORD;
  6605. Blocks: array [0..0] of MESSAGE_RESOURCE_BLOCK;
  6606. end;
  6607. {$EXTERNALSYM _MESSAGE_RESOURCE_DATA}
  6608. MESSAGE_RESOURCE_DATA = _MESSAGE_RESOURCE_DATA;
  6609. {$EXTERNALSYM MESSAGE_RESOURCE_DATA}
  6610. TMessageResourceData = MESSAGE_RESOURCE_DATA;
  6611. PMessageResourceData = PMESSAGE_RESOURCE_DATA;
  6612. LPOSVERSIONINFOA = ^OSVERSIONINFOA;
  6613. {$EXTERNALSYM LPOSVERSIONINFOA}
  6614. _OSVERSIONINFOA = record
  6615. dwOSVersionInfoSize: DWORD;
  6616. dwMajorVersion: DWORD;
  6617. dwMinorVersion: DWORD;
  6618. dwBuildNumber: DWORD;
  6619. dwPlatformId: DWORD;
  6620. szCSDVersion: array [0..127] of CHAR; // Maintenance string for PSS usage
  6621. end;
  6622. {$EXTERNALSYM _OSVERSIONINFOA}
  6623. OSVERSIONINFOA = _OSVERSIONINFOA;
  6624. {$EXTERNALSYM OSVERSIONINFOA}
  6625. TOsVersionInfoA = OSVERSIONINFOA;
  6626. POsVersionInfoA = LPOSVERSIONINFOA;
  6627. LPOSVERSIONINFOW = ^OSVERSIONINFOW;
  6628. {$EXTERNALSYM LPOSVERSIONINFOW}
  6629. _OSVERSIONINFOW = record
  6630. dwOSVersionInfoSize: DWORD;
  6631. dwMajorVersion: DWORD;
  6632. dwMinorVersion: DWORD;
  6633. dwBuildNumber: DWORD;
  6634. dwPlatformId: DWORD;
  6635. szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
  6636. end;
  6637. {$EXTERNALSYM _OSVERSIONINFOW}
  6638. OSVERSIONINFOW = _OSVERSIONINFOW;
  6639. {$EXTERNALSYM OSVERSIONINFOW}
  6640. TOsVersionInfoW = OSVERSIONINFOW;
  6641. POsVersionInfoW = LPOSVERSIONINFOW;
  6642. {$IFDEF UNICODE}
  6643. OSVERSIONINFO = OSVERSIONINFOW;
  6644. {$EXTERNALSYM OSVERSIONINFO}
  6645. POSVERSIONINFO = POSVERSIONINFOW;
  6646. {$EXTERNALSYM POSVERSIONINFO}
  6647. LPOSVERSIONINFO = LPOSVERSIONINFOW;
  6648. {$EXTERNALSYM LPOSVERSIONINFO}
  6649. TOSVersionInfo = TOSVersionInfoW;
  6650. {$ELSE}
  6651. OSVERSIONINFO = OSVERSIONINFOA;
  6652. {$EXTERNALSYM OSVERSIONINFO}
  6653. POSVERSIONINFO = POSVERSIONINFOA;
  6654. {$EXTERNALSYM POSVERSIONINFO}
  6655. LPOSVERSIONINFO = LPOSVERSIONINFOA;
  6656. {$EXTERNALSYM LPOSVERSIONINFO}
  6657. TOSVersionInfo = TOSVersionInfoA;
  6658. {$ENDIF UNICODE}
  6659. type
  6660. POSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
  6661. {$EXTERNALSYM POSVERSIONINFOEXA}
  6662. _OSVERSIONINFOEXA = record
  6663. dwOSVersionInfoSize: DWORD;
  6664. dwMajorVersion: DWORD;
  6665. dwMinorVersion: DWORD;
  6666. dwBuildNumber: DWORD;
  6667. dwPlatformId: DWORD;
  6668. szCSDVersion: array [0..127] of CHAR; // Maintenance string for PSS usage
  6669. wServicePackMajor: WORD;
  6670. wServicePackMinor: WORD;
  6671. wSuiteMask: WORD;
  6672. wProductType: BYTE;
  6673. wReserved: BYTE;
  6674. end;
  6675. {$EXTERNALSYM _OSVERSIONINFOEXA}
  6676. OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
  6677. {$EXTERNALSYM OSVERSIONINFOEXA}
  6678. LPOSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
  6679. {$EXTERNALSYM LPOSVERSIONINFOEXA}
  6680. TOSVersionInfoExA = _OSVERSIONINFOEXA;
  6681. POSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  6682. {$EXTERNALSYM POSVERSIONINFOEXW}
  6683. _OSVERSIONINFOEXW = record
  6684. dwOSVersionInfoSize: DWORD;
  6685. dwMajorVersion: DWORD;
  6686. dwMinorVersion: DWORD;
  6687. dwBuildNumber: DWORD;
  6688. dwPlatformId: DWORD;
  6689. szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
  6690. wServicePackMajor: WORD;
  6691. wServicePackMinor: WORD;
  6692. wSuiteMask: WORD;
  6693. wProductType: BYTE;
  6694. wReserved: BYTE;
  6695. end;
  6696. {$EXTERNALSYM _OSVERSIONINFOEXW}
  6697. OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
  6698. {$EXTERNALSYM OSVERSIONINFOEXW}
  6699. LPOSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  6700. {$EXTERNALSYM LPOSVERSIONINFOEXW}
  6701. RTL_OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
  6702. {$EXTERNALSYM RTL_OSVERSIONINFOEXW}
  6703. PRTL_OSVERSIONINFOEXW = ^RTL_OSVERSIONINFOEXW;
  6704. {$EXTERNALSYM PRTL_OSVERSIONINFOEXW}
  6705. TOSVersionInfoExW = _OSVERSIONINFOEXW;
  6706. {$IFDEF UNICODE}
  6707. OSVERSIONINFOEX = OSVERSIONINFOEXW;
  6708. {$EXTERNALSYM OSVERSIONINFOEX}
  6709. POSVERSIONINFOEX = POSVERSIONINFOEXW;
  6710. {$EXTERNALSYM POSVERSIONINFOEX}
  6711. LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
  6712. {$EXTERNALSYM LPOSVERSIONINFOEX}
  6713. TOSVersionInfoEx = TOSVersionInfoExW;
  6714. {$ELSE}
  6715. OSVERSIONINFOEX = OSVERSIONINFOEXA;
  6716. {$EXTERNALSYM OSVERSIONINFOEX}
  6717. POSVERSIONINFOEX = POSVERSIONINFOEXA;
  6718. {$EXTERNALSYM POSVERSIONINFOEX}
  6719. LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA;
  6720. {$EXTERNALSYM LPOSVERSIONINFOEX}
  6721. TOSVersionInfoEx = TOSVersionInfoExA;
  6722. {$ENDIF UNICODE}
  6723. //
  6724. // RtlVerifyVersionInfo() conditions
  6725. //
  6726. const
  6727. VER_EQUAL = 1;
  6728. {$EXTERNALSYM VER_EQUAL}
  6729. VER_GREATER = 2;
  6730. {$EXTERNALSYM VER_GREATER}
  6731. VER_GREATER_EQUAL = 3;
  6732. {$EXTERNALSYM VER_GREATER_EQUAL}
  6733. VER_LESS = 4;
  6734. {$EXTERNALSYM VER_LESS}
  6735. VER_LESS_EQUAL = 5;
  6736. {$EXTERNALSYM VER_LESS_EQUAL}
  6737. VER_AND = 6;
  6738. {$EXTERNALSYM VER_AND}
  6739. VER_OR = 7;
  6740. {$EXTERNALSYM VER_OR}
  6741. VER_CONDITION_MASK = 7;
  6742. {$EXTERNALSYM VER_CONDITION_MASK}
  6743. VER_NUM_BITS_PER_CONDITION_MASK = 3;
  6744. {$EXTERNALSYM VER_NUM_BITS_PER_CONDITION_MASK}
  6745. //
  6746. // RtlVerifyVersionInfo() type mask bits
  6747. //
  6748. VER_MINORVERSION = $0000001;
  6749. {$EXTERNALSYM VER_MINORVERSION}
  6750. VER_MAJORVERSION = $0000002;
  6751. {$EXTERNALSYM VER_MAJORVERSION}
  6752. VER_BUILDNUMBER = $0000004;
  6753. {$EXTERNALSYM VER_BUILDNUMBER}
  6754. VER_PLATFORMID = $0000008;
  6755. {$EXTERNALSYM VER_PLATFORMID}
  6756. VER_SERVICEPACKMINOR = $0000010;
  6757. {$EXTERNALSYM VER_SERVICEPACKMINOR}
  6758. VER_SERVICEPACKMAJOR = $0000020;
  6759. {$EXTERNALSYM VER_SERVICEPACKMAJOR}
  6760. VER_SUITENAME = $0000040;
  6761. {$EXTERNALSYM VER_SUITENAME}
  6762. VER_PRODUCT_TYPE = $0000080;
  6763. {$EXTERNALSYM VER_PRODUCT_TYPE}
  6764. //
  6765. // RtlVerifyVersionInfo() os product type values
  6766. //
  6767. VER_NT_WORKSTATION = $0000001;
  6768. {$EXTERNALSYM VER_NT_WORKSTATION}
  6769. VER_NT_DOMAIN_CONTROLLER = $0000002;
  6770. {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
  6771. VER_NT_SERVER = $0000003;
  6772. {$EXTERNALSYM VER_NT_SERVER}
  6773. //
  6774. // dwPlatformId defines:
  6775. //
  6776. VER_PLATFORM_WIN32s = 0;
  6777. {$EXTERNALSYM VER_PLATFORM_WIN32s}
  6778. VER_PLATFORM_WIN32_WINDOWS = 1;
  6779. {$EXTERNALSYM VER_PLATFORM_WIN32_WINDOWS}
  6780. VER_PLATFORM_WIN32_NT = 2;
  6781. {$EXTERNALSYM VER_PLATFORM_WIN32_NT}
  6782. //
  6783. //
  6784. // VerifyVersionInfo() macro to set the condition mask
  6785. //
  6786. // For documentation sakes here's the old version of the macro that got
  6787. // changed to call an API
  6788. // #define VER_SET_CONDITION(_m_,_t_,_c_) _m_=(_m_|(_c_<<(1<<_t_)))
  6789. //
  6790. procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
  6791. {$EXTERNALSYM VER_SET_CONDITION}
  6792. function VerSetConditionMask(ConditionMask: ULONGLONG; TypeMask: DWORD;
  6793. Condition: BYTE): ULONGLONG; stdcall;
  6794. {$EXTERNALSYM VerSetConditionMask}
  6795. type
  6796. PRTL_CRITICAL_SECTION_DEBUG = ^RTL_CRITICAL_SECTION_DEBUG;
  6797. {$EXTERNALSYM PRTL_CRITICAL_SECTION_DEBUG}
  6798. _RTL_CRITICAL_SECTION_DEBUG = record
  6799. _Type: WORD;
  6800. CreatorBackTraceIndex: WORD;
  6801. CriticalSection: PRTL_CRITICAL_SECTION_DEBUG;
  6802. ProcessLocksList: LIST_ENTRY;
  6803. EntryCount: DWORD;
  6804. ContentionCount: DWORD;
  6805. Spare: array [0..1] of DWORD;
  6806. end;
  6807. {$EXTERNALSYM _RTL_CRITICAL_SECTION_DEBUG}
  6808. RTL_CRITICAL_SECTION_DEBUG = _RTL_CRITICAL_SECTION_DEBUG;
  6809. {$EXTERNALSYM RTL_CRITICAL_SECTION_DEBUG}
  6810. TRtlCriticalSectionDebug = RTL_CRITICAL_SECTION_DEBUG;
  6811. PRtlCriticalSectionDebug = PRTL_CRITICAL_SECTION_DEBUG;
  6812. RTL_RESOURCE_DEBUG = _RTL_CRITICAL_SECTION_DEBUG;
  6813. {$EXTERNALSYM RTL_RESOURCE_DEBUG}
  6814. PRTL_RESOURCE_DEBUG = RTL_RESOURCE_DEBUG;
  6815. {$EXTERNALSYM PRTL_RESOURCE_DEBUG}
  6816. TRtlResourceDebug = RTL_CRITICAL_SECTION_DEBUG;
  6817. PRtlResourceDebug = PRTL_CRITICAL_SECTION_DEBUG;
  6818. const
  6819. RTL_CRITSECT_TYPE = 0;
  6820. {$EXTERNALSYM RTL_CRITSECT_TYPE}
  6821. RTL_RESOURCE_TYPE = 1;
  6822. {$EXTERNALSYM RTL_RESOURCE_TYPE}
  6823. type
  6824. PRTL_CRITICAL_SECTION = ^RTL_CRITICAL_SECTION;
  6825. {$EXTERNALSYM PRTL_CRITICAL_SECTION}
  6826. _RTL_CRITICAL_SECTION = record
  6827. DebugInfo: PRTL_CRITICAL_SECTION_DEBUG;
  6828. //
  6829. // The following three fields control entering and exiting the critical
  6830. // section for the resource
  6831. //
  6832. LockCount: LONG;
  6833. RecursionCount: LONG;
  6834. OwningThread: HANDLE; // from the thread's ClientId->UniqueThread
  6835. LockSemaphore: HANDLE;
  6836. SpinCount: ULONG_PTR; // force size on 64-bit systems when packed
  6837. end;
  6838. {$EXTERNALSYM _RTL_CRITICAL_SECTION}
  6839. RTL_CRITICAL_SECTION = _RTL_CRITICAL_SECTION;
  6840. {$EXTERNALSYM RTL_CRITICAL_SECTION}
  6841. TRtlCriticalSection = RTL_CRITICAL_SECTION;
  6842. PRtlCriticalSection = PRTL_CRITICAL_SECTION;
  6843. RTL_VERIFIER_DLL_LOAD_CALLBACK = procedure(DllName: PWSTR; DllBase: PVOID; DllSize: SIZE_T;
  6844. Reserved: PVOID); stdcall;
  6845. {$EXTERNALSYM RTL_VERIFIER_DLL_LOAD_CALLBACK}
  6846. RTL_VERIFIER_DLL_UNLOAD_CALLBACK = procedure(DllName: PWSTR; DllBase: PVOID; DllSize: SIZE_T;
  6847. Reserved: PVOID); stdcall;
  6848. {$EXTERNALSYM RTL_VERIFIER_DLL_UNLOAD_CALLBACK}
  6849. RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK = procedure(AllocationBase: PVOID; AllocationSize: SIZE_T); stdcall;
  6850. {$EXTERNALSYM RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK}
  6851. PRTL_VERIFIER_THUNK_DESCRIPTOR = ^RTL_VERIFIER_THUNK_DESCRIPTOR;
  6852. {$EXTERNALSYM PRTL_VERIFIER_THUNK_DESCRIPTOR}
  6853. _RTL_VERIFIER_THUNK_DESCRIPTOR = record
  6854. ThunkName: PCHAR;
  6855. ThunkOldAddress: PVOID;
  6856. ThunkNewAddress: PVOID;
  6857. end;
  6858. {$EXTERNALSYM _RTL_VERIFIER_THUNK_DESCRIPTOR}
  6859. RTL_VERIFIER_THUNK_DESCRIPTOR = _RTL_VERIFIER_THUNK_DESCRIPTOR;
  6860. {$EXTERNALSYM RTL_VERIFIER_THUNK_DESCRIPTOR}
  6861. TRtlVerifierThunkDescriptor = RTL_VERIFIER_THUNK_DESCRIPTOR;
  6862. PRtlVerifierThunkDescriptor = PRTL_VERIFIER_THUNK_DESCRIPTOR;
  6863. PRTL_VERIFIER_DLL_DESCRIPTOR = ^RTL_VERIFIER_DLL_DESCRIPTOR;
  6864. {$EXTERNALSYM PRTL_VERIFIER_DLL_DESCRIPTOR}
  6865. _RTL_VERIFIER_DLL_DESCRIPTOR = record
  6866. DllName: PWCHAR;
  6867. DllFlags: DWORD;
  6868. DllAddress: PVOID;
  6869. DllThunks: PRTL_VERIFIER_THUNK_DESCRIPTOR;
  6870. end;
  6871. {$EXTERNALSYM _RTL_VERIFIER_DLL_DESCRIPTOR}
  6872. RTL_VERIFIER_DLL_DESCRIPTOR = _RTL_VERIFIER_DLL_DESCRIPTOR;
  6873. {$EXTERNALSYM RTL_VERIFIER_DLL_DESCRIPTOR}
  6874. TRtlVerifierDllDescriptor = RTL_VERIFIER_DLL_DESCRIPTOR;
  6875. PRtlVerifierDllDescriptor = PRTL_VERIFIER_DLL_DESCRIPTOR;
  6876. PRTL_VERIFIER_PROVIDER_DESCRIPTOR = ^RTL_VERIFIER_PROVIDER_DESCRIPTOR;
  6877. {$EXTERNALSYM PRTL_VERIFIER_PROVIDER_DESCRIPTOR}
  6878. _RTL_VERIFIER_PROVIDER_DESCRIPTOR = record
  6879. //
  6880. // Filled by verifier provider DLL
  6881. //
  6882. Length: DWORD;
  6883. ProviderDlls: PRTL_VERIFIER_DLL_DESCRIPTOR;
  6884. ProviderDllLoadCallback: RTL_VERIFIER_DLL_LOAD_CALLBACK;
  6885. ProviderDllUnloadCallback: RTL_VERIFIER_DLL_UNLOAD_CALLBACK;
  6886. //
  6887. // Filled by verifier engine
  6888. //
  6889. VerifierImage: PWSTR;
  6890. VerifierFlags: DWORD;
  6891. VerifierDebug: DWORD;
  6892. RtlpGetStackTraceAddress: PVOID;
  6893. RtlpDebugPageHeapCreate: PVOID;
  6894. RtlpDebugPageHeapDestroy: PVOID;
  6895. //
  6896. // Filled by verifier provider DLL
  6897. //
  6898. ProviderNtdllHeapFreeCallback: RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK;
  6899. end;
  6900. {$EXTERNALSYM _RTL_VERIFIER_PROVIDER_DESCRIPTOR}
  6901. RTL_VERIFIER_PROVIDER_DESCRIPTOR = _RTL_VERIFIER_PROVIDER_DESCRIPTOR;
  6902. {$EXTERNALSYM RTL_VERIFIER_PROVIDER_DESCRIPTOR}
  6903. TRtlVerifierProviderDescriptor = RTL_VERIFIER_PROVIDER_DESCRIPTOR;
  6904. PRtlVerifierProviderDescriptor = PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
  6905. //
  6906. // Application verifier standard flags
  6907. //
  6908. const
  6909. RTL_VRF_FLG_FULL_PAGE_HEAP = $00000001;
  6910. {$EXTERNALSYM RTL_VRF_FLG_FULL_PAGE_HEAP}
  6911. RTL_VRF_FLG_RESERVED_DONOTUSE = $00000002; // old RTL_VRF_FLG_LOCK_CHECKS
  6912. {$EXTERNALSYM RTL_VRF_FLG_RESERVED_DONOTUSE}
  6913. RTL_VRF_FLG_HANDLE_CHECKS = $00000004;
  6914. {$EXTERNALSYM RTL_VRF_FLG_HANDLE_CHECKS}
  6915. RTL_VRF_FLG_STACK_CHECKS = $00000008;
  6916. {$EXTERNALSYM RTL_VRF_FLG_STACK_CHECKS}
  6917. RTL_VRF_FLG_APPCOMPAT_CHECKS = $00000010;
  6918. {$EXTERNALSYM RTL_VRF_FLG_APPCOMPAT_CHECKS}
  6919. RTL_VRF_FLG_TLS_CHECKS = $00000020;
  6920. {$EXTERNALSYM RTL_VRF_FLG_TLS_CHECKS}
  6921. RTL_VRF_FLG_DIRTY_STACKS = $00000040;
  6922. {$EXTERNALSYM RTL_VRF_FLG_DIRTY_STACKS}
  6923. RTL_VRF_FLG_RPC_CHECKS = $00000080;
  6924. {$EXTERNALSYM RTL_VRF_FLG_RPC_CHECKS}
  6925. RTL_VRF_FLG_COM_CHECKS = $00000100;
  6926. {$EXTERNALSYM RTL_VRF_FLG_COM_CHECKS}
  6927. RTL_VRF_FLG_DANGEROUS_APIS = $00000200;
  6928. {$EXTERNALSYM RTL_VRF_FLG_DANGEROUS_APIS}
  6929. RTL_VRF_FLG_RACE_CHECKS = $00000400;
  6930. {$EXTERNALSYM RTL_VRF_FLG_RACE_CHECKS}
  6931. RTL_VRF_FLG_DEADLOCK_CHECKS = $00000800;
  6932. {$EXTERNALSYM RTL_VRF_FLG_DEADLOCK_CHECKS}
  6933. RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS = $00001000;
  6934. {$EXTERNALSYM RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS}
  6935. RTL_VRF_FLG_VIRTUAL_MEM_CHECKS = $00002000;
  6936. {$EXTERNALSYM RTL_VRF_FLG_VIRTUAL_MEM_CHECKS}
  6937. RTL_VRF_FLG_ENABLE_LOGGING = $00004000;
  6938. {$EXTERNALSYM RTL_VRF_FLG_ENABLE_LOGGING}
  6939. RTL_VRF_FLG_FAST_FILL_HEAP = $00008000;
  6940. {$EXTERNALSYM RTL_VRF_FLG_FAST_FILL_HEAP}
  6941. RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING = $00010000;
  6942. {$EXTERNALSYM RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING}
  6943. RTL_VRF_FLG_ENABLED_SYSTEM_WIDE = $00020000;
  6944. {$EXTERNALSYM RTL_VRF_FLG_ENABLED_SYSTEM_WIDE}
  6945. RTL_VRF_FLG_MISCELLANEOUS_CHECKS = $00020000;
  6946. {$EXTERNALSYM RTL_VRF_FLG_MISCELLANEOUS_CHECKS}
  6947. RTL_VRF_FLG_LOCK_CHECKS = $00040000;
  6948. {$EXTERNALSYM RTL_VRF_FLG_LOCK_CHECKS}
  6949. //
  6950. // Application verifier standard stop codes
  6951. //
  6952. APPLICATION_VERIFIER_INTERNAL_ERROR = DWORD($80000000);
  6953. {$EXTERNALSYM APPLICATION_VERIFIER_INTERNAL_ERROR}
  6954. APPLICATION_VERIFIER_INTERNAL_WARNING = $40000000;
  6955. {$EXTERNALSYM APPLICATION_VERIFIER_INTERNAL_WARNING}
  6956. APPLICATION_VERIFIER_NO_BREAK = $20000000;
  6957. {$EXTERNALSYM APPLICATION_VERIFIER_NO_BREAK}
  6958. APPLICATION_VERIFIER_CONTINUABLE_BREAK = $10000000;
  6959. {$EXTERNALSYM APPLICATION_VERIFIER_CONTINUABLE_BREAK}
  6960. APPLICATION_VERIFIER_UNKNOWN_ERROR = $0001;
  6961. {$EXTERNALSYM APPLICATION_VERIFIER_UNKNOWN_ERROR}
  6962. APPLICATION_VERIFIER_ACCESS_VIOLATION = $0002;
  6963. {$EXTERNALSYM APPLICATION_VERIFIER_ACCESS_VIOLATION}
  6964. APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS = $0003;
  6965. {$EXTERNALSYM APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS}
  6966. APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST = $0004;
  6967. {$EXTERNALSYM APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST}
  6968. APPLICATION_VERIFIER_BAD_HEAP_HANDLE = $0005;
  6969. {$EXTERNALSYM APPLICATION_VERIFIER_BAD_HEAP_HANDLE}
  6970. APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE = $0006;
  6971. {$EXTERNALSYM APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE}
  6972. APPLICATION_VERIFIER_DOUBLE_FREE = $0007;
  6973. {$EXTERNALSYM APPLICATION_VERIFIER_DOUBLE_FREE}
  6974. APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK = $0008;
  6975. {$EXTERNALSYM APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK}
  6976. APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP = $0009;
  6977. {$EXTERNALSYM APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP}
  6978. APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION = $000A;
  6979. {$EXTERNALSYM APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION}
  6980. APPLICATION_VERIFIER_STACK_OVERFLOW = $000B;
  6981. {$EXTERNALSYM APPLICATION_VERIFIER_STACK_OVERFLOW}
  6982. APPLICATION_VERIFIER_TERMINATE_THREAD_CALL = $0100;
  6983. {$EXTERNALSYM APPLICATION_VERIFIER_TERMINATE_THREAD_CALL}
  6984. APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL = $0101;
  6985. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL}
  6986. APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK = $0200;
  6987. {$EXTERNALSYM APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK}
  6988. APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL = $0201;
  6989. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL}
  6990. APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP = $0202;
  6991. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP}
  6992. APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE = $0203;
  6993. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE}
  6994. APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY = $0204;
  6995. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY}
  6996. APPLICATION_VERIFIER_LOCK_CORRUPTED = $0205;
  6997. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_CORRUPTED}
  6998. APPLICATION_VERIFIER_LOCK_INVALID_OWNER = $0206;
  6999. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_OWNER}
  7000. APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT = $0207;
  7001. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT}
  7002. APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT = $0208;
  7003. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT}
  7004. APPLICATION_VERIFIER_LOCK_OVER_RELEASED = $0209;
  7005. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_OVER_RELEASED}
  7006. APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED = $0210;
  7007. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED}
  7008. APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED = $0211;
  7009. {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED}
  7010. APPLICATION_VERIFIER_INVALID_HANDLE = $0300;
  7011. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_HANDLE}
  7012. APPLICATION_VERIFIER_INVALID_TLS_VALUE = $0301;
  7013. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_TLS_VALUE}
  7014. APPLICATION_VERIFIER_INCORRECT_WAIT_CALL = $0302;
  7015. {$EXTERNALSYM APPLICATION_VERIFIER_INCORRECT_WAIT_CALL}
  7016. APPLICATION_VERIFIER_NULL_HANDLE = $0303;
  7017. {$EXTERNALSYM APPLICATION_VERIFIER_NULL_HANDLE}
  7018. APPLICATION_VERIFIER_WAIT_IN_DLLMAIN = $0304;
  7019. {$EXTERNALSYM APPLICATION_VERIFIER_WAIT_IN_DLLMAIN}
  7020. APPLICATION_VERIFIER_COM_ERROR = $0400;
  7021. {$EXTERNALSYM APPLICATION_VERIFIER_COM_ERROR}
  7022. APPLICATION_VERIFIER_COM_API_IN_DLLMAIN = $0401;
  7023. {$EXTERNALSYM APPLICATION_VERIFIER_COM_API_IN_DLLMAIN}
  7024. APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION = $0402;
  7025. {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION}
  7026. APPLICATION_VERIFIER_COM_UNBALANCED_COINIT = $0403;
  7027. {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_COINIT}
  7028. APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT = $0404;
  7029. {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT}
  7030. APPLICATION_VERIFIER_COM_UNBALANCED_SWC = $0405;
  7031. {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_SWC}
  7032. APPLICATION_VERIFIER_COM_NULL_DACL = $0406;
  7033. {$EXTERNALSYM APPLICATION_VERIFIER_COM_NULL_DACL}
  7034. APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION = $0407;
  7035. {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION}
  7036. APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER = $0408;
  7037. {$EXTERNALSYM APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER}
  7038. APPLICATION_VERIFIER_COM_SMUGGLED_PROXY = $0409;
  7039. {$EXTERNALSYM APPLICATION_VERIFIER_COM_SMUGGLED_PROXY}
  7040. APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL = $040A;
  7041. {$EXTERNALSYM APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL}
  7042. APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL = $040B;
  7043. {$EXTERNALSYM APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL}
  7044. APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY = $040C;
  7045. {$EXTERNALSYM APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY}
  7046. APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL = $040D;
  7047. {$EXTERNALSYM APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL}
  7048. APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY = $040E;
  7049. {$EXTERNALSYM APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY}
  7050. APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL = $040F;
  7051. {$EXTERNALSYM APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL}
  7052. APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL = $0410;
  7053. {$EXTERNALSYM APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL}
  7054. APPLICATION_VERIFIER_RPC_ERROR = $0500;
  7055. {$EXTERNALSYM APPLICATION_VERIFIER_RPC_ERROR}
  7056. APPLICATION_VERIFIER_INVALID_FREEMEM = $0600;
  7057. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_FREEMEM}
  7058. APPLICATION_VERIFIER_INVALID_ALLOCMEM = $0601;
  7059. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_ALLOCMEM}
  7060. APPLICATION_VERIFIER_INVALID_MAPVIEW = $0602;
  7061. {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_MAPVIEW}
  7062. APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS = $0603;
  7063. {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS}
  7064. APPLICATION_VERIFIER_PROBE_FREE_MEM = $0604;
  7065. {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_FREE_MEM}
  7066. APPLICATION_VERIFIER_PROBE_GUARD_PAGE = $0605;
  7067. {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_GUARD_PAGE}
  7068. APPLICATION_VERIFIER_PROBE_NULL = $0606;
  7069. {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_NULL}
  7070. APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE = $0607;
  7071. {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE}
  7072. (* TODO
  7073. #define VERIFIER_STOP(Code, Msg, P1, S1, P2, S2, P3, S3, P4, S4) { \
  7074. RtlApplicationVerifierStop ((Code), \
  7075. (Msg), \
  7076. (ULONG_PTR)(P1),(S1), \
  7077. (ULONG_PTR)(P2),(S2), \
  7078. (ULONG_PTR)(P3),(S3), \
  7079. (ULONG_PTR)(P4),(S4)); \
  7080. }
  7081. VOID NTAPI
  7082. RtlApplicationVerifierStop (
  7083. ULONG_PTR Code,
  7084. PCHAR Message,
  7085. ULONG_PTR Param1, PCHAR Description1,
  7086. ULONG_PTR Param2, PCHAR Description2,
  7087. ULONG_PTR Param3, PCHAR Description3,
  7088. ULONG_PTR Param4, PCHAR Description4
  7089. );
  7090. *)
  7091. type
  7092. PVECTORED_EXCEPTION_HANDLER = function(ExceptionInfo: PEXCEPTION_POINTERS): LONG; stdcall;
  7093. {$EXTERNALSYM PVECTORED_EXCEPTION_HANDLER}
  7094. PVectoredExceptionHandler = PVECTORED_EXCEPTION_HANDLER;
  7095. const
  7096. SEF_DACL_AUTO_INHERIT = $01;
  7097. {$EXTERNALSYM SEF_DACL_AUTO_INHERIT}
  7098. SEF_SACL_AUTO_INHERIT = $02;
  7099. {$EXTERNALSYM SEF_SACL_AUTO_INHERIT}
  7100. SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT = $04;
  7101. {$EXTERNALSYM SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT}
  7102. SEF_AVOID_PRIVILEGE_CHECK = $08;
  7103. {$EXTERNALSYM SEF_AVOID_PRIVILEGE_CHECK}
  7104. SEF_AVOID_OWNER_CHECK = $10;
  7105. {$EXTERNALSYM SEF_AVOID_OWNER_CHECK}
  7106. SEF_DEFAULT_OWNER_FROM_PARENT = $20;
  7107. {$EXTERNALSYM SEF_DEFAULT_OWNER_FROM_PARENT}
  7108. SEF_DEFAULT_GROUP_FROM_PARENT = $40;
  7109. {$EXTERNALSYM SEF_DEFAULT_GROUP_FROM_PARENT}
  7110. type
  7111. _HEAP_INFORMATION_CLASS = (HeapCompatibilityInformation);
  7112. {$EXTERNALSYM _HEAP_INFORMATION_CLASS}
  7113. HEAP_INFORMATION_CLASS = _HEAP_INFORMATION_CLASS;
  7114. {$EXTERNALSYM HEAP_INFORMATION_CLASS}
  7115. THeapInformationClass = HEAP_INFORMATION_CLASS;
  7116. { TODO
  7117. DWORD NTAPI
  7118. RtlSetHeapInformation (
  7119. IN PVOID HeapHandle,
  7120. IN HEAP_INFORMATION_CLASS HeapInformationClass,
  7121. IN PVOID HeapInformation OPTIONAL,
  7122. IN SIZE_T HeapInformationLength OPTIONAL
  7123. );
  7124. DWORD NTAPI
  7125. RtlQueryHeapInformation (
  7126. IN PVOID HeapHandle,
  7127. IN HEAP_INFORMATION_CLASS HeapInformationClass,
  7128. OUT PVOID HeapInformation OPTIONAL,
  7129. IN SIZE_T HeapInformationLength OPTIONAL,
  7130. OUT PSIZE_T ReturnLength OPTIONAL
  7131. );
  7132. //
  7133. // Multiple alloc-free APIS
  7134. //
  7135. DWORD
  7136. NTAPI
  7137. RtlMultipleAllocateHeap (
  7138. IN PVOID HeapHandle,
  7139. IN DWORD Flags,
  7140. IN SIZE_T Size,
  7141. IN DWORD Count,
  7142. OUT PVOID * Array
  7143. );
  7144. DWORD
  7145. NTAPI
  7146. RtlMultipleFreeHeap (
  7147. IN PVOID HeapHandle,
  7148. IN DWORD Flags,
  7149. IN DWORD Count,
  7150. OUT PVOID * Array
  7151. );
  7152. }
  7153. const
  7154. WT_EXECUTEDEFAULT = $00000000;
  7155. {$EXTERNALSYM WT_EXECUTEDEFAULT}
  7156. WT_EXECUTEINIOTHREAD = $00000001;
  7157. {$EXTERNALSYM WT_EXECUTEINIOTHREAD}
  7158. WT_EXECUTEINUITHREAD = $00000002;
  7159. {$EXTERNALSYM WT_EXECUTEINUITHREAD}
  7160. WT_EXECUTEINWAITTHREAD = $00000004;
  7161. {$EXTERNALSYM WT_EXECUTEINWAITTHREAD}
  7162. WT_EXECUTEONLYONCE = $00000008;
  7163. {$EXTERNALSYM WT_EXECUTEONLYONCE}
  7164. WT_EXECUTEINTIMERTHREAD = $00000020;
  7165. {$EXTERNALSYM WT_EXECUTEINTIMERTHREAD}
  7166. WT_EXECUTELONGFUNCTION = $00000010;
  7167. {$EXTERNALSYM WT_EXECUTELONGFUNCTION}
  7168. WT_EXECUTEINPERSISTENTIOTHREAD = $00000040;
  7169. {$EXTERNALSYM WT_EXECUTEINPERSISTENTIOTHREAD}
  7170. WT_EXECUTEINPERSISTENTTHREAD = $00000080;
  7171. {$EXTERNALSYM WT_EXECUTEINPERSISTENTTHREAD}
  7172. WT_TRANSFER_IMPERSONATION = $00000100;
  7173. {$EXTERNALSYM WT_TRANSFER_IMPERSONATION}
  7174. function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
  7175. {$EXTERNALSYM WT_SET_MAX_THREADPOOL_THREADS}
  7176. type
  7177. WAITORTIMERCALLBACKFUNC = procedure(P: PVOID; B: ByteBool); stdcall;
  7178. {$EXTERNALSYM WAITORTIMERCALLBACKFUNC}
  7179. WORKERCALLBACKFUNC = procedure(P: PVOID); stdcall;
  7180. {$EXTERNALSYM WORKERCALLBACKFUNC}
  7181. APC_CALLBACK_FUNCTION = procedure(D: DWORD; P1, P2: PVOID); stdcall;
  7182. {$EXTERNALSYM APC_CALLBACK_FUNCTION}
  7183. const
  7184. WT_EXECUTEINLONGTHREAD = $00000010;
  7185. {$EXTERNALSYM WT_EXECUTEINLONGTHREAD}
  7186. WT_EXECUTEDELETEWAIT = $00000008;
  7187. {$EXTERNALSYM WT_EXECUTEDELETEWAIT}
  7188. type
  7189. _ACTIVATION_CONTEXT_INFO_CLASS = DWORD;
  7190. {$EXTERNALSYM _ACTIVATION_CONTEXT_INFO_CLASS}
  7191. ACTIVATION_CONTEXT_INFO_CLASS = _ACTIVATION_CONTEXT_INFO_CLASS;
  7192. {$EXTERNALSYM ACTIVATION_CONTEXT_INFO_CLASS}
  7193. TActivationContextInfoClass = ACTIVATION_CONTEXT_INFO_CLASS;
  7194. const
  7195. ActivationContextBasicInformation = 1;
  7196. {$EXTERNALSYM ActivationContextBasicInformation}
  7197. ActivationContextDetailedInformation = 2;
  7198. {$EXTERNALSYM ActivationContextDetailedInformation}
  7199. AssemblyDetailedInformationInActivationContxt = 3;
  7200. {$EXTERNALSYM AssemblyDetailedInformationInActivationContxt}
  7201. FileInformationInAssemblyOfAssemblyInActivationContxt = 4;
  7202. {$EXTERNALSYM FileInformationInAssemblyOfAssemblyInActivationContxt}
  7203. MaxActivationContextInfoClass = 5;
  7204. {$EXTERNALSYM MaxActivationContextInfoClass}
  7205. type
  7206. PACTIVATION_CONTEXT_QUERY_INDEX = ^ACTIVATION_CONTEXT_QUERY_INDEX;
  7207. {$EXTERNALSYM PACTIVATION_CONTEXT_QUERY_INDEX}
  7208. _ACTIVATION_CONTEXT_QUERY_INDEX = record
  7209. ulAssemblyIndex: DWORD;
  7210. ulFileIndexInAssembly: DWORD;
  7211. end;
  7212. {$EXTERNALSYM _ACTIVATION_CONTEXT_QUERY_INDEX}
  7213. ACTIVATION_CONTEXT_QUERY_INDEX = _ACTIVATION_CONTEXT_QUERY_INDEX;
  7214. {$EXTERNALSYM ACTIVATION_CONTEXT_QUERY_INDEX}
  7215. TActivationContextQueryIndex = ACTIVATION_CONTEXT_QUERY_INDEX;
  7216. PActivationContextQueryIndex = PACTIVATION_CONTEXT_QUERY_INDEX;
  7217. const
  7218. ACTIVATION_CONTEXT_PATH_TYPE_NONE = 1;
  7219. {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_NONE}
  7220. ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE = 2;
  7221. {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE}
  7222. ACTIVATION_CONTEXT_PATH_TYPE_URL = 3;
  7223. {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_URL}
  7224. ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF = 4;
  7225. {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF}
  7226. type
  7227. PASSEMBLY_FILE_DETAILED_INFORMATION = ^ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION;
  7228. {$EXTERNALSYM PASSEMBLY_FILE_DETAILED_INFORMATION}
  7229. _ASSEMBLY_FILE_DETAILED_INFORMATION = record
  7230. ulFlags: DWORD;
  7231. ulFilenameLength: DWORD;
  7232. ulPathLength: DWORD;
  7233. lpFileName: LPCWSTR;
  7234. lpFilePath: LPCWSTR;
  7235. end;
  7236. {$EXTERNALSYM _ASSEMBLY_FILE_DETAILED_INFORMATION}
  7237. ASSEMBLY_FILE_DETAILED_INFORMATION = _ASSEMBLY_FILE_DETAILED_INFORMATION;
  7238. {$EXTERNALSYM ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
  7239. PCASSEMBLY_FILE_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
  7240. {$EXTERNALSYM PCASSEMBLY_FILE_DETAILED_INFORMATION}
  7241. TAssemblyFileDetailedInformation = ASSEMBLY_FILE_DETAILED_INFORMATION;
  7242. PAssemblyFileDetailedInformation = PASSEMBLY_FILE_DETAILED_INFORMATION;
  7243. //
  7244. // compatibility with old names
  7245. // The new names use "file" consistently.
  7246. //
  7247. _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = _ASSEMBLY_FILE_DETAILED_INFORMATION;
  7248. {$EXTERNALSYM _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
  7249. ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = ASSEMBLY_FILE_DETAILED_INFORMATION;
  7250. {$EXTERNALSYM ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
  7251. PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
  7252. {$EXTERNALSYM PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
  7253. PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PCASSEMBLY_FILE_DETAILED_INFORMATION;
  7254. {$EXTERNALSYM PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
  7255. TAssemblyDllRedirectionDetailedInformation = TAssemblyFileDetailedInformation;
  7256. PAssemblyDllRedirectionDetailedInformation = PAssemblyFileDetailedInformation;
  7257. PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = ^ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
  7258. {$EXTERNALSYM PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
  7259. _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = record
  7260. ulFlags: DWORD;
  7261. ulEncodedAssemblyIdentityLength: DWORD; // in bytes
  7262. ulManifestPathType: DWORD; // ACTIVATION_CONTEXT_PATH_TYPE_*
  7263. ulManifestPathLength: DWORD; // in bytes
  7264. liManifestLastWriteTime: LARGE_INTEGER; // FILETIME
  7265. ulPolicyPathType: DWORD; // ACTIVATION_CONTEXT_PATH_TYPE_*
  7266. ulPolicyPathLength: DWORD; // in bytes
  7267. liPolicyLastWriteTime: LARGE_INTEGER; // FILETIME
  7268. ulMetadataSatelliteRosterIndex: DWORD;
  7269. ulManifestVersionMajor: DWORD; // 1
  7270. ulManifestVersionMinor: DWORD; // 0
  7271. ulPolicyVersionMajor: DWORD; // 0
  7272. ulPolicyVersionMinor: DWORD; // 0
  7273. ulAssemblyDirectoryNameLength: DWORD; // in bytes
  7274. lpAssemblyEncodedAssemblyIdentity: LPCWSTR;
  7275. lpAssemblyManifestPath: LPCWSTR;
  7276. lpAssemblyPolicyPath: LPCWSTR;
  7277. lpAssemblyDirectoryName: LPCWSTR;
  7278. ulFileCount: DWORD;
  7279. end;
  7280. {$EXTERNALSYM _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
  7281. ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
  7282. {$EXTERNALSYM ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
  7283. TActivationContextAssemblyDetailedInformation = ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
  7284. PActivationContextAssemblyDetailedInformation = PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
  7285. PACTIVATION_CONTEXT_DETAILED_INFORMATION = ^ACTIVATION_CONTEXT_DETAILED_INFORMATION;
  7286. {$EXTERNALSYM PACTIVATION_CONTEXT_DETAILED_INFORMATION}
  7287. _ACTIVATION_CONTEXT_DETAILED_INFORMATION = record
  7288. dwFlags: DWORD;
  7289. ulFormatVersion: DWORD;
  7290. ulAssemblyCount: DWORD;
  7291. ulRootManifestPathType: DWORD;
  7292. ulRootManifestPathChars: DWORD;
  7293. ulRootConfigurationPathType: DWORD;
  7294. ulRootConfigurationPathChars: DWORD;
  7295. ulAppDirPathType: DWORD;
  7296. ulAppDirPathChars: DWORD;
  7297. lpRootManifestPath: LPCWSTR;
  7298. lpRootConfigurationPath: LPCWSTR;
  7299. lpAppDirPath: LPCWSTR;
  7300. end;
  7301. {$EXTERNALSYM _ACTIVATION_CONTEXT_DETAILED_INFORMATION}
  7302. ACTIVATION_CONTEXT_DETAILED_INFORMATION = _ACTIVATION_CONTEXT_DETAILED_INFORMATION;
  7303. {$EXTERNALSYM ACTIVATION_CONTEXT_DETAILED_INFORMATION}
  7304. TActivationContextDetailedInformation = ACTIVATION_CONTEXT_DETAILED_INFORMATION;
  7305. PActivationContextDetailedInformation = PACTIVATION_CONTEXT_DETAILED_INFORMATION;
  7306. const
  7307. DLL_PROCESS_ATTACH = 1;
  7308. {$EXTERNALSYM DLL_PROCESS_ATTACH}
  7309. DLL_THREAD_ATTACH = 2;
  7310. {$EXTERNALSYM DLL_THREAD_ATTACH}
  7311. DLL_THREAD_DETACH = 3;
  7312. {$EXTERNALSYM DLL_THREAD_DETACH}
  7313. DLL_PROCESS_DETACH = 0;
  7314. {$EXTERNALSYM DLL_PROCESS_DETACH}
  7315. DLL_PROCESS_VERIFIER = 4;
  7316. {$EXTERNALSYM DLL_PROCESS_VERIFIER}
  7317. //
  7318. // Defines for the READ flags for Eventlogging
  7319. //
  7320. EVENTLOG_SEQUENTIAL_READ = $0001;
  7321. {$EXTERNALSYM EVENTLOG_SEQUENTIAL_READ}
  7322. EVENTLOG_SEEK_READ = $0002;
  7323. {$EXTERNALSYM EVENTLOG_SEEK_READ}
  7324. EVENTLOG_FORWARDS_READ = $0004;
  7325. {$EXTERNALSYM EVENTLOG_FORWARDS_READ}
  7326. EVENTLOG_BACKWARDS_READ = $0008;
  7327. {$EXTERNALSYM EVENTLOG_BACKWARDS_READ}
  7328. //
  7329. // The types of events that can be logged.
  7330. //
  7331. EVENTLOG_SUCCESS = $0000;
  7332. {$EXTERNALSYM EVENTLOG_SUCCESS}
  7333. EVENTLOG_ERROR_TYPE = $0001;
  7334. {$EXTERNALSYM EVENTLOG_ERROR_TYPE}
  7335. EVENTLOG_WARNING_TYPE = $0002;
  7336. {$EXTERNALSYM EVENTLOG_WARNING_TYPE}
  7337. EVENTLOG_INFORMATION_TYPE = $0004;
  7338. {$EXTERNALSYM EVENTLOG_INFORMATION_TYPE}
  7339. EVENTLOG_AUDIT_SUCCESS = $0008;
  7340. {$EXTERNALSYM EVENTLOG_AUDIT_SUCCESS}
  7341. EVENTLOG_AUDIT_FAILURE = $0010;
  7342. {$EXTERNALSYM EVENTLOG_AUDIT_FAILURE}
  7343. //
  7344. // Defines for the WRITE flags used by Auditing for paired events
  7345. // These are not implemented in Product 1
  7346. //
  7347. EVENTLOG_START_PAIRED_EVENT = $0001;
  7348. {$EXTERNALSYM EVENTLOG_START_PAIRED_EVENT}
  7349. EVENTLOG_END_PAIRED_EVENT = $0002;
  7350. {$EXTERNALSYM EVENTLOG_END_PAIRED_EVENT}
  7351. EVENTLOG_END_ALL_PAIRED_EVENTS = $0004;
  7352. {$EXTERNALSYM EVENTLOG_END_ALL_PAIRED_EVENTS}
  7353. EVENTLOG_PAIRED_EVENT_ACTIVE = $0008;
  7354. {$EXTERNALSYM EVENTLOG_PAIRED_EVENT_ACTIVE}
  7355. EVENTLOG_PAIRED_EVENT_INACTIVE = $0010;
  7356. {$EXTERNALSYM EVENTLOG_PAIRED_EVENT_INACTIVE}
  7357. //
  7358. // Structure that defines the header of the Eventlog record. This is the
  7359. // fixed-sized portion before all the variable-length strings, binary
  7360. // data and pad bytes.
  7361. //
  7362. // TimeGenerated is the time it was generated at the client.
  7363. // TimeWritten is the time it was put into the log at the server end.
  7364. //
  7365. type
  7366. PEventlogrecord = ^EVENTLOGRECORD;
  7367. _EVENTLOGRECORD = record
  7368. Length: DWORD; // Length of full record
  7369. Reserved: DWORD; // Used by the service
  7370. RecordNumber: DWORD; // Absolute record number
  7371. TimeGenerated: DWORD; // Seconds since 1-1-1970
  7372. TimeWritten: DWORD; // Seconds since 1-1-1970
  7373. EventID: DWORD;
  7374. EventType: Word;
  7375. NumStrings: Word;
  7376. EventCategory: Word;
  7377. ReservedFlags: Word; // For use with paired events (auditing)
  7378. ClosingRecordNumber: DWORD; // For use with paired events (auditing)
  7379. StringOffset: DWORD; // Offset from beginning of record
  7380. UserSidLength: DWORD;
  7381. UserSidOffset: DWORD;
  7382. DataLength: DWORD;
  7383. DataOffset: DWORD; // Offset from beginning of record
  7384. //
  7385. // Then follow:
  7386. //
  7387. // WCHAR SourceName[]
  7388. // WCHAR Computername[]
  7389. // SID UserSid
  7390. // WCHAR Strings[]
  7391. // BYTE Data[]
  7392. // CHAR Pad[]
  7393. // DWORD Length;
  7394. //
  7395. end;
  7396. {$EXTERNALSYM _EVENTLOGRECORD}
  7397. EVENTLOGRECORD = _EVENTLOGRECORD;
  7398. {$EXTERNALSYM EVENTLOGRECORD}
  7399. TEventlogrecord = EVENTLOGRECORD;
  7400. const
  7401. MAXLOGICALLOGNAMESIZE = 256;
  7402. {$EXTERNALSYM MAXLOGICALLOGNAMESIZE}
  7403. type
  7404. PEventsForLogFile = ^EVENTSFORLOGFILE;
  7405. _EVENTSFORLOGFILE = record
  7406. ulSize: DWORD;
  7407. szLogicalLogFile: array [0..MAXLOGICALLOGNAMESIZE - 1] of WCHAR; // name of the logical file-security/application/system
  7408. ulNumRecords: DWORD;
  7409. pEventLogRecords: array [0..0] of EVENTLOGRECORD;
  7410. end;
  7411. {$EXTERNALSYM _EVENTSFORLOGFILE}
  7412. EVENTSFORLOGFILE = _EVENTSFORLOGFILE;
  7413. {$EXTERNALSYM EVENTSFORLOGFILE}
  7414. TEventsForLogFile = EVENTSFORLOGFILE;
  7415. PPackedEventInfo = ^PACKEDEVENTINFO;
  7416. _PACKEDEVENTINFO = record
  7417. ulSize: DWORD; // total size of the structure
  7418. ulNumEventsForLogFile: DWORD; // number of EventsForLogFile structure that follow
  7419. ulOffsets: array [0..0] of DWORD; // the offsets from the start of this structure to the EVENTSFORLOGFILE structure
  7420. end;
  7421. {$EXTERNALSYM _PACKEDEVENTINFO}
  7422. PACKEDEVENTINFO = _PACKEDEVENTINFO;
  7423. {$EXTERNALSYM PACKEDEVENTINFO}
  7424. TPackedEventInfo = PACKEDEVENTINFO;
  7425. //
  7426. // Registry Specific Access Rights.
  7427. //
  7428. const
  7429. KEY_QUERY_VALUE = $0001;
  7430. {$EXTERNALSYM KEY_QUERY_VALUE}
  7431. KEY_SET_VALUE = $0002;
  7432. {$EXTERNALSYM KEY_SET_VALUE}
  7433. KEY_CREATE_SUB_KEY = $0004;
  7434. {$EXTERNALSYM KEY_CREATE_SUB_KEY}
  7435. KEY_ENUMERATE_SUB_KEYS = $0008;
  7436. {$EXTERNALSYM KEY_ENUMERATE_SUB_KEYS}
  7437. KEY_NOTIFY = $0010;
  7438. {$EXTERNALSYM KEY_NOTIFY}
  7439. KEY_CREATE_LINK = $0020;
  7440. {$EXTERNALSYM KEY_CREATE_LINK}
  7441. KEY_WOW64_32KEY = $0200;
  7442. {$EXTERNALSYM KEY_WOW64_32KEY}
  7443. KEY_WOW64_64KEY = $0100;
  7444. {$EXTERNALSYM KEY_WOW64_64KEY}
  7445. KEY_WOW64_RES = $0300;
  7446. {$EXTERNALSYM KEY_WOW64_RES}
  7447. KEY_READ = STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or
  7448. KEY_NOTIFY and (not SYNCHRONIZE);
  7449. {$EXTERNALSYM KEY_READ}
  7450. KEY_WRITE = STANDARD_RIGHTS_WRITE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY and
  7451. (not SYNCHRONIZE);
  7452. {$EXTERNALSYM KEY_WRITE}
  7453. KEY_EXECUTE = KEY_READ and (not SYNCHRONIZE);
  7454. {$EXTERNALSYM KEY_EXECUTE}
  7455. KEY_ALL_ACCESS = STANDARD_RIGHTS_ALL or KEY_QUERY_VALUE or KEY_SET_VALUE or
  7456. KEY_CREATE_SUB_KEY or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY or
  7457. KEY_CREATE_LINK and (not SYNCHRONIZE);
  7458. {$EXTERNALSYM KEY_ALL_ACCESS}
  7459. //
  7460. // Open/Create Options
  7461. //
  7462. REG_OPTION_RESERVED = $00000000; // Parameter is reserved
  7463. {$EXTERNALSYM REG_OPTION_RESERVED}
  7464. REG_OPTION_NON_VOLATILE = $00000000; // Key is preserved when system is rebooted
  7465. {$EXTERNALSYM REG_OPTION_NON_VOLATILE}
  7466. REG_OPTION_VOLATILE = $00000001; // Key is not preserved when system is rebooted
  7467. {$EXTERNALSYM REG_OPTION_VOLATILE}
  7468. REG_OPTION_CREATE_LINK = $00000002; // Created key is a symbolic link
  7469. {$EXTERNALSYM REG_OPTION_CREATE_LINK}
  7470. REG_OPTION_BACKUP_RESTORE = $00000004; // open for backup or restore
  7471. {$EXTERNALSYM REG_OPTION_BACKUP_RESTORE}
  7472. // special access rules
  7473. // privilege required
  7474. REG_OPTION_OPEN_LINK = $00000008; // Open symbolic link
  7475. {$EXTERNALSYM REG_OPTION_OPEN_LINK}
  7476. REG_LEGAL_OPTION = REG_OPTION_RESERVED or REG_OPTION_NON_VOLATILE or
  7477. REG_OPTION_VOLATILE or REG_OPTION_CREATE_LINK or REG_OPTION_BACKUP_RESTORE or
  7478. REG_OPTION_OPEN_LINK;
  7479. {$EXTERNALSYM REG_LEGAL_OPTION}
  7480. //
  7481. // Key creation/open disposition
  7482. //
  7483. REG_CREATED_NEW_KEY = $00000001; // New Registry Key created
  7484. {$EXTERNALSYM REG_CREATED_NEW_KEY}
  7485. REG_OPENED_EXISTING_KEY = $00000002; // Existing Key opened
  7486. {$EXTERNALSYM REG_OPENED_EXISTING_KEY}
  7487. //
  7488. // hive format to be used by Reg(Nt)SaveKeyEx
  7489. //
  7490. REG_STANDARD_FORMAT = 1;
  7491. {$EXTERNALSYM REG_STANDARD_FORMAT}
  7492. REG_LATEST_FORMAT = 2;
  7493. {$EXTERNALSYM REG_LATEST_FORMAT}
  7494. REG_NO_COMPRESSION = 4;
  7495. {$EXTERNALSYM REG_NO_COMPRESSION}
  7496. //
  7497. // Key restore flags
  7498. //
  7499. REG_WHOLE_HIVE_VOLATILE = $00000001; // Restore whole hive volatile
  7500. {$EXTERNALSYM REG_WHOLE_HIVE_VOLATILE}
  7501. REG_REFRESH_HIVE = $00000002; // Unwind changes to last flush
  7502. {$EXTERNALSYM REG_REFRESH_HIVE}
  7503. REG_NO_LAZY_FLUSH = $00000004; // Never lazy flush this hive
  7504. {$EXTERNALSYM REG_NO_LAZY_FLUSH}
  7505. REG_FORCE_RESTORE = $00000008; // Force the restore process even when we have open handles on subkeys
  7506. {$EXTERNALSYM REG_FORCE_RESTORE}
  7507. //
  7508. // Unload Flags
  7509. //
  7510. REG_FORCE_UNLOAD = 1;
  7511. {$EXTERNALSYM REG_FORCE_UNLOAD}
  7512. // end_ntddk end_wdm end_nthal
  7513. //
  7514. // Notify filter values
  7515. //
  7516. REG_NOTIFY_CHANGE_NAME = $00000001; // Create or delete (child)
  7517. {$EXTERNALSYM REG_NOTIFY_CHANGE_NAME}
  7518. REG_NOTIFY_CHANGE_ATTRIBUTES = $00000002;
  7519. {$EXTERNALSYM REG_NOTIFY_CHANGE_ATTRIBUTES}
  7520. REG_NOTIFY_CHANGE_LAST_SET = $00000004; // time stamp
  7521. {$EXTERNALSYM REG_NOTIFY_CHANGE_LAST_SET}
  7522. REG_NOTIFY_CHANGE_SECURITY = $00000008;
  7523. {$EXTERNALSYM REG_NOTIFY_CHANGE_SECURITY}
  7524. REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_ATTRIBUTES or
  7525. REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_SECURITY;
  7526. {$EXTERNALSYM REG_LEGAL_CHANGE_FILTER}
  7527. //
  7528. //
  7529. // Predefined Value Types.
  7530. //
  7531. REG_NONE = 0; // No value type
  7532. {$EXTERNALSYM REG_NONE}
  7533. REG_SZ = 1; // Unicode nul terminated string
  7534. {$EXTERNALSYM REG_SZ}
  7535. REG_EXPAND_SZ = 2; // Unicode nul terminated string
  7536. {$EXTERNALSYM REG_EXPAND_SZ}
  7537. // (with environment variable references)
  7538. REG_BINARY = 3; // Free form binary
  7539. {$EXTERNALSYM REG_BINARY}
  7540. REG_DWORD = 4; // 32-bit number
  7541. {$EXTERNALSYM REG_DWORD}
  7542. REG_DWORD_LITTLE_ENDIAN = 4; // 32-bit number (same as REG_DWORD)
  7543. {$EXTERNALSYM REG_DWORD_LITTLE_ENDIAN}
  7544. REG_DWORD_BIG_ENDIAN = 5; // 32-bit number
  7545. {$EXTERNALSYM REG_DWORD_BIG_ENDIAN}
  7546. REG_LINK = 6; // Symbolic Link (unicode)
  7547. {$EXTERNALSYM REG_LINK}
  7548. REG_MULTI_SZ = 7; // Multiple Unicode strings
  7549. {$EXTERNALSYM REG_MULTI_SZ}
  7550. REG_RESOURCE_LIST = 8; // Resource list in the resource map
  7551. {$EXTERNALSYM REG_RESOURCE_LIST}
  7552. REG_FULL_RESOURCE_DESCRIPTOR = 9; // Resource list in the hardware description
  7553. {$EXTERNALSYM REG_FULL_RESOURCE_DESCRIPTOR}
  7554. REG_RESOURCE_REQUIREMENTS_LIST = 10;
  7555. {$EXTERNALSYM REG_RESOURCE_REQUIREMENTS_LIST}
  7556. REG_QWORD = 11; // 64-bit number
  7557. {$EXTERNALSYM REG_QWORD}
  7558. REG_QWORD_LITTLE_ENDIAN = 11; // 64-bit number (same as REG_QWORD)
  7559. {$EXTERNALSYM REG_QWORD_LITTLE_ENDIAN}
  7560. //
  7561. // Service Types (Bit Mask)
  7562. //
  7563. SERVICE_KERNEL_DRIVER = $00000001;
  7564. {$EXTERNALSYM SERVICE_KERNEL_DRIVER}
  7565. SERVICE_FILE_SYSTEM_DRIVER = $00000002;
  7566. {$EXTERNALSYM SERVICE_FILE_SYSTEM_DRIVER}
  7567. SERVICE_ADAPTER = $00000004;
  7568. {$EXTERNALSYM SERVICE_ADAPTER}
  7569. SERVICE_RECOGNIZER_DRIVER = $00000008;
  7570. {$EXTERNALSYM SERVICE_RECOGNIZER_DRIVER}
  7571. SERVICE_DRIVER = SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER or
  7572. SERVICE_RECOGNIZER_DRIVER;
  7573. {$EXTERNALSYM SERVICE_DRIVER}
  7574. SERVICE_WIN32_OWN_PROCESS = $00000010;
  7575. {$EXTERNALSYM SERVICE_WIN32_OWN_PROCESS}
  7576. SERVICE_WIN32_SHARE_PROCESS = $00000020;
  7577. {$EXTERNALSYM SERVICE_WIN32_SHARE_PROCESS}
  7578. SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS;
  7579. {$EXTERNALSYM SERVICE_WIN32}
  7580. SERVICE_INTERACTIVE_PROCESS = $00000100;
  7581. {$EXTERNALSYM SERVICE_INTERACTIVE_PROCESS}
  7582. SERVICE_TYPE_ALL = SERVICE_WIN32 or SERVICE_ADAPTER or SERVICE_DRIVER or
  7583. SERVICE_INTERACTIVE_PROCESS;
  7584. {$EXTERNALSYM SERVICE_TYPE_ALL}
  7585. //
  7586. // Start Type
  7587. //
  7588. SERVICE_BOOT_START = $00000000;
  7589. {$EXTERNALSYM SERVICE_BOOT_START}
  7590. SERVICE_SYSTEM_START = $00000001;
  7591. {$EXTERNALSYM SERVICE_SYSTEM_START}
  7592. SERVICE_AUTO_START = $00000002;
  7593. {$EXTERNALSYM SERVICE_AUTO_START}
  7594. SERVICE_DEMAND_START = $00000003;
  7595. {$EXTERNALSYM SERVICE_DEMAND_START}
  7596. SERVICE_DISABLED = $00000004;
  7597. {$EXTERNALSYM SERVICE_DISABLED}
  7598. //
  7599. // Error control type
  7600. //
  7601. SERVICE_ERROR_IGNORE = $00000000;
  7602. {$EXTERNALSYM SERVICE_ERROR_IGNORE}
  7603. SERVICE_ERROR_NORMAL = $00000001;
  7604. {$EXTERNALSYM SERVICE_ERROR_NORMAL}
  7605. SERVICE_ERROR_SEVERE = $00000002;
  7606. {$EXTERNALSYM SERVICE_ERROR_SEVERE}
  7607. SERVICE_ERROR_CRITICAL = $00000003;
  7608. {$EXTERNALSYM SERVICE_ERROR_CRITICAL}
  7609. //
  7610. // Define the registry driver node enumerations
  7611. //
  7612. const
  7613. //SERVICE_NODE_TYPE
  7614. DriverType = SERVICE_KERNEL_DRIVER;
  7615. FileSystemType = SERVICE_FILE_SYSTEM_DRIVER;
  7616. Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS;
  7617. Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS;
  7618. AdapterType = SERVICE_ADAPTER;
  7619. RecognizerType = SERVICE_RECOGNIZER_DRIVER;
  7620. //SERVICE_LOAD_TYPE
  7621. BootLoad = SERVICE_BOOT_START;
  7622. SystemLoad = SERVICE_SYSTEM_START;
  7623. AutoLoad = SERVICE_AUTO_START;
  7624. DemandLoad = SERVICE_DEMAND_START;
  7625. DisableLoad = SERVICE_DISABLED;
  7626. //SERVICE_ERROR_TYPE
  7627. IgnoreError = SERVICE_ERROR_IGNORE;
  7628. NormalError = SERVICE_ERROR_NORMAL;
  7629. SevereError = SERVICE_ERROR_SEVERE;
  7630. CriticalError = SERVICE_ERROR_CRITICAL;
  7631. //
  7632. // IOCTL_TAPE_ERASE definitions
  7633. //
  7634. type
  7635. SERVICE_NODE_TYPE = DWORD;
  7636. {$EXTERNALSYM SERVICE_NODE_TYPE}
  7637. TServiceNodeType = SERVICE_NODE_TYPE;
  7638. SERVICE_LOAD_TYPE = DWORD;
  7639. {$EXTERNALSYM SERVICE_LOAD_TYPE}
  7640. TServiceLoadType = SERVICE_LOAD_TYPE;
  7641. SERVICE_ERROR_TYPE = DWORD;
  7642. {$EXTERNALSYM SERVICE_ERROR_TYPE}
  7643. TServiceErrorType = SERVICE_ERROR_TYPE;
  7644. const
  7645. TAPE_ERASE_SHORT = 0;
  7646. {$EXTERNALSYM TAPE_ERASE_SHORT}
  7647. TAPE_ERASE_LONG = 1;
  7648. {$EXTERNALSYM TAPE_ERASE_LONG}
  7649. type
  7650. PTAPE_ERASE = ^TAPE_ERASE;
  7651. {$EXTERNALSYM PTAPE_ERASE}
  7652. _TAPE_ERASE = record
  7653. Type_: DWORD;
  7654. Immediate: ByteBool;
  7655. end;
  7656. {$EXTERNALSYM _TAPE_ERASE}
  7657. TAPE_ERASE = _TAPE_ERASE;
  7658. {$EXTERNALSYM TAPE_ERASE}
  7659. TTapeErase = TAPE_ERASE;
  7660. PTapeErase = PTAPE_ERASE;
  7661. //
  7662. // IOCTL_TAPE_PREPARE definitions
  7663. //
  7664. const
  7665. TAPE_LOAD = 0;
  7666. {$EXTERNALSYM TAPE_LOAD}
  7667. TAPE_UNLOAD = 1;
  7668. {$EXTERNALSYM TAPE_UNLOAD}
  7669. TAPE_TENSION = 2;
  7670. {$EXTERNALSYM TAPE_TENSION}
  7671. TAPE_LOCK = 3;
  7672. {$EXTERNALSYM TAPE_LOCK}
  7673. TAPE_UNLOCK = 4;
  7674. {$EXTERNALSYM TAPE_UNLOCK}
  7675. TAPE_FORMAT = 5;
  7676. {$EXTERNALSYM TAPE_FORMAT}
  7677. type
  7678. PTAPE_PREPARE = ^TAPE_PREPARE;
  7679. {$EXTERNALSYM PTAPE_PREPARE}
  7680. _TAPE_PREPARE = record
  7681. Operation: DWORD;
  7682. Immediate: ByteBool;
  7683. end;
  7684. {$EXTERNALSYM _TAPE_PREPARE}
  7685. TAPE_PREPARE = _TAPE_PREPARE;
  7686. {$EXTERNALSYM TAPE_PREPARE}
  7687. TTapePrepare = TAPE_PREPARE;
  7688. PTapePrepare = PTAPE_PREPARE;
  7689. //
  7690. // IOCTL_TAPE_WRITE_MARKS definitions
  7691. //
  7692. const
  7693. TAPE_SETMARKS = 0;
  7694. {$EXTERNALSYM TAPE_SETMARKS}
  7695. TAPE_FILEMARKS = 1;
  7696. {$EXTERNALSYM TAPE_FILEMARKS}
  7697. TAPE_SHORT_FILEMARKS = 2;
  7698. {$EXTERNALSYM TAPE_SHORT_FILEMARKS}
  7699. TAPE_LONG_FILEMARKS = 3;
  7700. {$EXTERNALSYM TAPE_LONG_FILEMARKS}
  7701. type
  7702. PTAPE_WRITE_MARKS = ^TAPE_WRITE_MARKS;
  7703. {$EXTERNALSYM PTAPE_WRITE_MARKS}
  7704. _TAPE_WRITE_MARKS = record
  7705. Type_: DWORD;
  7706. Count: DWORD;
  7707. Immediate: ByteBool;
  7708. end;
  7709. {$EXTERNALSYM _TAPE_WRITE_MARKS}
  7710. TAPE_WRITE_MARKS = _TAPE_WRITE_MARKS;
  7711. {$EXTERNALSYM TAPE_WRITE_MARKS}
  7712. TTapeWriteMarks = TAPE_WRITE_MARKS;
  7713. PTapeWriteMarks = PTAPE_WRITE_MARKS;
  7714. //
  7715. // IOCTL_TAPE_GET_POSITION definitions
  7716. //
  7717. const
  7718. TAPE_ABSOLUTE_POSITION = 0;
  7719. {$EXTERNALSYM TAPE_ABSOLUTE_POSITION}
  7720. TAPE_LOGICAL_POSITION = 1;
  7721. {$EXTERNALSYM TAPE_LOGICAL_POSITION}
  7722. TAPE_PSEUDO_LOGICAL_POSITION = 2;
  7723. {$EXTERNALSYM TAPE_PSEUDO_LOGICAL_POSITION}
  7724. type
  7725. PTAPE_GET_POSITION = ^TAPE_GET_POSITION;
  7726. {$EXTERNALSYM PTAPE_GET_POSITION}
  7727. _TAPE_GET_POSITION = record
  7728. Type_: DWORD;
  7729. Partition: DWORD;
  7730. Offset: LARGE_INTEGER;
  7731. end;
  7732. {$EXTERNALSYM _TAPE_GET_POSITION}
  7733. TAPE_GET_POSITION = _TAPE_GET_POSITION;
  7734. {$EXTERNALSYM TAPE_GET_POSITION}
  7735. TTapeGetPosition = TAPE_GET_POSITION;
  7736. PTapeGetPosition = PTAPE_GET_POSITION;
  7737. //
  7738. // IOCTL_TAPE_SET_POSITION definitions
  7739. //
  7740. const
  7741. TAPE_REWIND = 0;
  7742. {$EXTERNALSYM TAPE_REWIND}
  7743. TAPE_ABSOLUTE_BLOCK = 1;
  7744. {$EXTERNALSYM TAPE_ABSOLUTE_BLOCK}
  7745. TAPE_LOGICAL_BLOCK = 2;
  7746. {$EXTERNALSYM TAPE_LOGICAL_BLOCK}
  7747. TAPE_PSEUDO_LOGICAL_BLOCK = 3;
  7748. {$EXTERNALSYM TAPE_PSEUDO_LOGICAL_BLOCK}
  7749. TAPE_SPACE_END_OF_DATA = 4;
  7750. {$EXTERNALSYM TAPE_SPACE_END_OF_DATA}
  7751. TAPE_SPACE_RELATIVE_BLOCKS = 5;
  7752. {$EXTERNALSYM TAPE_SPACE_RELATIVE_BLOCKS}
  7753. TAPE_SPACE_FILEMARKS = 6;
  7754. {$EXTERNALSYM TAPE_SPACE_FILEMARKS}
  7755. TAPE_SPACE_SEQUENTIAL_FMKS = 7;
  7756. {$EXTERNALSYM TAPE_SPACE_SEQUENTIAL_FMKS}
  7757. TAPE_SPACE_SETMARKS = 8;
  7758. {$EXTERNALSYM TAPE_SPACE_SETMARKS}
  7759. TAPE_SPACE_SEQUENTIAL_SMKS = 9;
  7760. {$EXTERNALSYM TAPE_SPACE_SEQUENTIAL_SMKS}
  7761. type
  7762. PTAPE_SET_POSITION = ^TAPE_SET_POSITION;
  7763. {$EXTERNALSYM PTAPE_SET_POSITION}
  7764. _TAPE_SET_POSITION = record
  7765. Method: DWORD;
  7766. Partition: DWORD;
  7767. Offset: LARGE_INTEGER;
  7768. Immediate: ByteBool;
  7769. end;
  7770. {$EXTERNALSYM _TAPE_SET_POSITION}
  7771. TAPE_SET_POSITION = _TAPE_SET_POSITION;
  7772. {$EXTERNALSYM TAPE_SET_POSITION}
  7773. TTapeSetPosition = TAPE_SET_POSITION;
  7774. PTapeSetPosition = PTAPE_SET_POSITION;
  7775. //
  7776. // IOCTL_TAPE_GET_DRIVE_PARAMS definitions
  7777. //
  7778. //
  7779. // Definitions for FeaturesLow parameter
  7780. //
  7781. const
  7782. TAPE_DRIVE_FIXED = $00000001;
  7783. {$EXTERNALSYM TAPE_DRIVE_FIXED}
  7784. TAPE_DRIVE_SELECT = $00000002;
  7785. {$EXTERNALSYM TAPE_DRIVE_SELECT}
  7786. TAPE_DRIVE_INITIATOR = $00000004;
  7787. {$EXTERNALSYM TAPE_DRIVE_INITIATOR}
  7788. TAPE_DRIVE_ERASE_SHORT = $00000010;
  7789. {$EXTERNALSYM TAPE_DRIVE_ERASE_SHORT}
  7790. TAPE_DRIVE_ERASE_LONG = $00000020;
  7791. {$EXTERNALSYM TAPE_DRIVE_ERASE_LONG}
  7792. TAPE_DRIVE_ERASE_BOP_ONLY = $00000040;
  7793. {$EXTERNALSYM TAPE_DRIVE_ERASE_BOP_ONLY}
  7794. TAPE_DRIVE_ERASE_IMMEDIATE = $00000080;
  7795. {$EXTERNALSYM TAPE_DRIVE_ERASE_IMMEDIATE}
  7796. TAPE_DRIVE_TAPE_CAPACITY = $00000100;
  7797. {$EXTERNALSYM TAPE_DRIVE_TAPE_CAPACITY}
  7798. TAPE_DRIVE_TAPE_REMAINING = $00000200;
  7799. {$EXTERNALSYM TAPE_DRIVE_TAPE_REMAINING}
  7800. TAPE_DRIVE_FIXED_BLOCK = $00000400;
  7801. {$EXTERNALSYM TAPE_DRIVE_FIXED_BLOCK}
  7802. TAPE_DRIVE_VARIABLE_BLOCK = $00000800;
  7803. {$EXTERNALSYM TAPE_DRIVE_VARIABLE_BLOCK}
  7804. TAPE_DRIVE_WRITE_PROTECT = $00001000;
  7805. {$EXTERNALSYM TAPE_DRIVE_WRITE_PROTECT}
  7806. TAPE_DRIVE_EOT_WZ_SIZE = $00002000;
  7807. {$EXTERNALSYM TAPE_DRIVE_EOT_WZ_SIZE}
  7808. TAPE_DRIVE_ECC = $00010000;
  7809. {$EXTERNALSYM TAPE_DRIVE_ECC}
  7810. TAPE_DRIVE_COMPRESSION = $00020000;
  7811. {$EXTERNALSYM TAPE_DRIVE_COMPRESSION}
  7812. TAPE_DRIVE_PADDING = $00040000;
  7813. {$EXTERNALSYM TAPE_DRIVE_PADDING}
  7814. TAPE_DRIVE_REPORT_SMKS = $00080000;
  7815. {$EXTERNALSYM TAPE_DRIVE_REPORT_SMKS}
  7816. TAPE_DRIVE_GET_ABSOLUTE_BLK = $00100000;
  7817. {$EXTERNALSYM TAPE_DRIVE_GET_ABSOLUTE_BLK}
  7818. TAPE_DRIVE_GET_LOGICAL_BLK = $00200000;
  7819. {$EXTERNALSYM TAPE_DRIVE_GET_LOGICAL_BLK}
  7820. TAPE_DRIVE_SET_EOT_WZ_SIZE = $00400000;
  7821. {$EXTERNALSYM TAPE_DRIVE_SET_EOT_WZ_SIZE}
  7822. TAPE_DRIVE_EJECT_MEDIA = $01000000;
  7823. {$EXTERNALSYM TAPE_DRIVE_EJECT_MEDIA}
  7824. TAPE_DRIVE_CLEAN_REQUESTS = $02000000;
  7825. {$EXTERNALSYM TAPE_DRIVE_CLEAN_REQUESTS}
  7826. TAPE_DRIVE_SET_CMP_BOP_ONLY = $04000000;
  7827. {$EXTERNALSYM TAPE_DRIVE_SET_CMP_BOP_ONLY}
  7828. TAPE_DRIVE_RESERVED_BIT = DWORD($80000000); // don't use this bit!
  7829. {$EXTERNALSYM TAPE_DRIVE_RESERVED_BIT}
  7830. // //can't be a low features bit!
  7831. // //reserved; high features only
  7832. //
  7833. // Definitions for FeaturesHigh parameter
  7834. //
  7835. TAPE_DRIVE_LOAD_UNLOAD = DWORD($80000001);
  7836. {$EXTERNALSYM TAPE_DRIVE_LOAD_UNLOAD}
  7837. TAPE_DRIVE_TENSION = DWORD($80000002);
  7838. {$EXTERNALSYM TAPE_DRIVE_TENSION}
  7839. TAPE_DRIVE_LOCK_UNLOCK = DWORD($80000004);
  7840. {$EXTERNALSYM TAPE_DRIVE_LOCK_UNLOCK}
  7841. TAPE_DRIVE_REWIND_IMMEDIATE = DWORD($80000008);
  7842. {$EXTERNALSYM TAPE_DRIVE_REWIND_IMMEDIATE}
  7843. TAPE_DRIVE_SET_BLOCK_SIZE = DWORD($80000010);
  7844. {$EXTERNALSYM TAPE_DRIVE_SET_BLOCK_SIZE}
  7845. TAPE_DRIVE_LOAD_UNLD_IMMED = DWORD($80000020);
  7846. {$EXTERNALSYM TAPE_DRIVE_LOAD_UNLD_IMMED}
  7847. TAPE_DRIVE_TENSION_IMMED = DWORD($80000040);
  7848. {$EXTERNALSYM TAPE_DRIVE_TENSION_IMMED}
  7849. TAPE_DRIVE_LOCK_UNLK_IMMED = DWORD($80000080);
  7850. {$EXTERNALSYM TAPE_DRIVE_LOCK_UNLK_IMMED}
  7851. TAPE_DRIVE_SET_ECC = DWORD($80000100);
  7852. {$EXTERNALSYM TAPE_DRIVE_SET_ECC}
  7853. TAPE_DRIVE_SET_COMPRESSION = DWORD($80000200);
  7854. {$EXTERNALSYM TAPE_DRIVE_SET_COMPRESSION}
  7855. TAPE_DRIVE_SET_PADDING = DWORD($80000400);
  7856. {$EXTERNALSYM TAPE_DRIVE_SET_PADDING}
  7857. TAPE_DRIVE_SET_REPORT_SMKS = DWORD($80000800);
  7858. {$EXTERNALSYM TAPE_DRIVE_SET_REPORT_SMKS}
  7859. TAPE_DRIVE_ABSOLUTE_BLK = DWORD($80001000);
  7860. {$EXTERNALSYM TAPE_DRIVE_ABSOLUTE_BLK}
  7861. TAPE_DRIVE_ABS_BLK_IMMED = DWORD($80002000);
  7862. {$EXTERNALSYM TAPE_DRIVE_ABS_BLK_IMMED}
  7863. TAPE_DRIVE_LOGICAL_BLK = DWORD($80004000);
  7864. {$EXTERNALSYM TAPE_DRIVE_LOGICAL_BLK}
  7865. TAPE_DRIVE_LOG_BLK_IMMED = DWORD($80008000);
  7866. {$EXTERNALSYM TAPE_DRIVE_LOG_BLK_IMMED}
  7867. TAPE_DRIVE_END_OF_DATA = DWORD($80010000);
  7868. {$EXTERNALSYM TAPE_DRIVE_END_OF_DATA}
  7869. TAPE_DRIVE_RELATIVE_BLKS = DWORD($80020000);
  7870. {$EXTERNALSYM TAPE_DRIVE_RELATIVE_BLKS}
  7871. TAPE_DRIVE_FILEMARKS = DWORD($80040000);
  7872. {$EXTERNALSYM TAPE_DRIVE_FILEMARKS}
  7873. TAPE_DRIVE_SEQUENTIAL_FMKS = DWORD($80080000);
  7874. {$EXTERNALSYM TAPE_DRIVE_SEQUENTIAL_FMKS}
  7875. TAPE_DRIVE_SETMARKS = DWORD($80100000);
  7876. {$EXTERNALSYM TAPE_DRIVE_SETMARKS}
  7877. TAPE_DRIVE_SEQUENTIAL_SMKS = DWORD($80200000);
  7878. {$EXTERNALSYM TAPE_DRIVE_SEQUENTIAL_SMKS}
  7879. TAPE_DRIVE_REVERSE_POSITION = DWORD($80400000);
  7880. {$EXTERNALSYM TAPE_DRIVE_REVERSE_POSITION}
  7881. TAPE_DRIVE_SPACE_IMMEDIATE = DWORD($80800000);
  7882. {$EXTERNALSYM TAPE_DRIVE_SPACE_IMMEDIATE}
  7883. TAPE_DRIVE_WRITE_SETMARKS = DWORD($81000000);
  7884. {$EXTERNALSYM TAPE_DRIVE_WRITE_SETMARKS}
  7885. TAPE_DRIVE_WRITE_FILEMARKS = DWORD($82000000);
  7886. {$EXTERNALSYM TAPE_DRIVE_WRITE_FILEMARKS}
  7887. TAPE_DRIVE_WRITE_SHORT_FMKS = DWORD($84000000);
  7888. {$EXTERNALSYM TAPE_DRIVE_WRITE_SHORT_FMKS}
  7889. TAPE_DRIVE_WRITE_LONG_FMKS = DWORD($88000000);
  7890. {$EXTERNALSYM TAPE_DRIVE_WRITE_LONG_FMKS}
  7891. TAPE_DRIVE_WRITE_MARK_IMMED = DWORD($90000000);
  7892. {$EXTERNALSYM TAPE_DRIVE_WRITE_MARK_IMMED}
  7893. TAPE_DRIVE_FORMAT = DWORD($A0000000);
  7894. {$EXTERNALSYM TAPE_DRIVE_FORMAT}
  7895. TAPE_DRIVE_FORMAT_IMMEDIATE = DWORD($C0000000);
  7896. {$EXTERNALSYM TAPE_DRIVE_FORMAT_IMMEDIATE}
  7897. TAPE_DRIVE_HIGH_FEATURES = DWORD($80000000); // mask for high features flag
  7898. {$EXTERNALSYM TAPE_DRIVE_HIGH_FEATURES}
  7899. type
  7900. PTAPE_GET_DRIVE_PARAMETERS = ^TAPE_GET_DRIVE_PARAMETERS;
  7901. {$EXTERNALSYM PTAPE_GET_DRIVE_PARAMETERS}
  7902. _TAPE_GET_DRIVE_PARAMETERS = record
  7903. ECC: ByteBool;
  7904. Compression: ByteBool;
  7905. DataPadding: ByteBool;
  7906. ReportSetmarks: ByteBool;
  7907. DefaultBlockSize: DWORD;
  7908. MaximumBlockSize: DWORD;
  7909. MinimumBlockSize: DWORD;
  7910. MaximumPartitionCount: DWORD;
  7911. FeaturesLow: DWORD;
  7912. FeaturesHigh: DWORD;
  7913. EOTWarningZoneSize: DWORD;
  7914. end;
  7915. {$EXTERNALSYM _TAPE_GET_DRIVE_PARAMETERS}
  7916. TAPE_GET_DRIVE_PARAMETERS = _TAPE_GET_DRIVE_PARAMETERS;
  7917. {$EXTERNALSYM TAPE_GET_DRIVE_PARAMETERS}
  7918. TTapeGetDriveParameters = TAPE_GET_DRIVE_PARAMETERS;
  7919. PTapeGetDriveParameters = PTAPE_GET_DRIVE_PARAMETERS;
  7920. //
  7921. // IOCTL_TAPE_SET_DRIVE_PARAMETERS definitions
  7922. //
  7923. PTAPE_SET_DRIVE_PARAMETERS = ^TAPE_SET_DRIVE_PARAMETERS;
  7924. {$EXTERNALSYM PTAPE_SET_DRIVE_PARAMETERS}
  7925. _TAPE_SET_DRIVE_PARAMETERS = record
  7926. ECC: ByteBool;
  7927. Compression: ByteBool;
  7928. DataPadding: ByteBool;
  7929. ReportSetmarks: ByteBool;
  7930. EOTWarningZoneSize: DWORD;
  7931. end;
  7932. {$EXTERNALSYM _TAPE_SET_DRIVE_PARAMETERS}
  7933. TAPE_SET_DRIVE_PARAMETERS = _TAPE_SET_DRIVE_PARAMETERS;
  7934. {$EXTERNALSYM TAPE_SET_DRIVE_PARAMETERS}
  7935. TTapeSetDriveParameters = TAPE_SET_DRIVE_PARAMETERS;
  7936. PTapeSetDriveParameters = PTAPE_SET_DRIVE_PARAMETERS;
  7937. //
  7938. // IOCTL_TAPE_GET_MEDIA_PARAMETERS definitions
  7939. //
  7940. PTAPE_GET_MEDIA_PARAMETERS = ^TAPE_GET_MEDIA_PARAMETERS;
  7941. {$EXTERNALSYM PTAPE_GET_MEDIA_PARAMETERS}
  7942. _TAPE_GET_MEDIA_PARAMETERS = record
  7943. Capacity: LARGE_INTEGER;
  7944. Remaining: LARGE_INTEGER;
  7945. BlockSize: DWORD;
  7946. PartitionCount: DWORD;
  7947. WriteProtected: ByteBool;
  7948. end;
  7949. {$EXTERNALSYM _TAPE_GET_MEDIA_PARAMETERS}
  7950. TAPE_GET_MEDIA_PARAMETERS = _TAPE_GET_MEDIA_PARAMETERS;
  7951. {$EXTERNALSYM TAPE_GET_MEDIA_PARAMETERS}
  7952. TTapeGetMediaParameters = TAPE_GET_MEDIA_PARAMETERS;
  7953. PTapeGetMediaParameters = PTAPE_GET_MEDIA_PARAMETERS;
  7954. //
  7955. // IOCTL_TAPE_SET_MEDIA_PARAMETERS definitions
  7956. //
  7957. PTAPE_SET_MEDIA_PARAMETERS = ^TAPE_SET_MEDIA_PARAMETERS;
  7958. {$EXTERNALSYM PTAPE_SET_MEDIA_PARAMETERS}
  7959. _TAPE_SET_MEDIA_PARAMETERS = record
  7960. BlockSize: DWORD;
  7961. end;
  7962. {$EXTERNALSYM _TAPE_SET_MEDIA_PARAMETERS}
  7963. TAPE_SET_MEDIA_PARAMETERS = _TAPE_SET_MEDIA_PARAMETERS;
  7964. {$EXTERNALSYM TAPE_SET_MEDIA_PARAMETERS}
  7965. TTapeSetMediaParameters = TAPE_SET_MEDIA_PARAMETERS;
  7966. PTapeSetMediaParameters = PTAPE_SET_MEDIA_PARAMETERS;
  7967. //
  7968. // IOCTL_TAPE_CREATE_PARTITION definitions
  7969. //
  7970. const
  7971. TAPE_FIXED_PARTITIONS = 0;
  7972. {$EXTERNALSYM TAPE_FIXED_PARTITIONS}
  7973. TAPE_SELECT_PARTITIONS = 1;
  7974. {$EXTERNALSYM TAPE_SELECT_PARTITIONS}
  7975. TAPE_INITIATOR_PARTITIONS = 2;
  7976. {$EXTERNALSYM TAPE_INITIATOR_PARTITIONS}
  7977. type
  7978. PTAPE_CREATE_PARTITION = ^TAPE_CREATE_PARTITION;
  7979. {$EXTERNALSYM PTAPE_CREATE_PARTITION}
  7980. _TAPE_CREATE_PARTITION = record
  7981. Method: DWORD;
  7982. Count: DWORD;
  7983. Size: DWORD;
  7984. end;
  7985. {$EXTERNALSYM _TAPE_CREATE_PARTITION}
  7986. TAPE_CREATE_PARTITION = _TAPE_CREATE_PARTITION;
  7987. {$EXTERNALSYM TAPE_CREATE_PARTITION}
  7988. TTapeCreatePartition = TAPE_CREATE_PARTITION;
  7989. PTapeCreatePartition = PTAPE_CREATE_PARTITION;
  7990. //
  7991. // WMI Methods
  7992. //
  7993. const
  7994. TAPE_QUERY_DRIVE_PARAMETERS = 0;
  7995. {$EXTERNALSYM TAPE_QUERY_DRIVE_PARAMETERS}
  7996. TAPE_QUERY_MEDIA_CAPACITY = 1;
  7997. {$EXTERNALSYM TAPE_QUERY_MEDIA_CAPACITY}
  7998. TAPE_CHECK_FOR_DRIVE_PROBLEM = 2;
  7999. {$EXTERNALSYM TAPE_CHECK_FOR_DRIVE_PROBLEM}
  8000. TAPE_QUERY_IO_ERROR_DATA = 3;
  8001. {$EXTERNALSYM TAPE_QUERY_IO_ERROR_DATA}
  8002. TAPE_QUERY_DEVICE_ERROR_DATA = 4;
  8003. {$EXTERNALSYM TAPE_QUERY_DEVICE_ERROR_DATA}
  8004. type
  8005. _TAPE_WMI_OPERATIONS = record
  8006. Method: DWORD;
  8007. DataBufferSize: DWORD;
  8008. DataBuffer: PVOID;
  8009. end;
  8010. {$EXTERNALSYM _TAPE_WMI_OPERATIONS}
  8011. TAPE_WMI_OPERATIONS = _TAPE_WMI_OPERATIONS;
  8012. {$EXTERNALSYM TAPE_WMI_OPERATIONS}
  8013. PTAPE_WMI_OPERATIONS = ^TAPE_WMI_OPERATIONS;
  8014. {$EXTERNALSYM PTAPE_WMI_OPERATIONS}
  8015. TTapeWMIOperations = TAPE_WMI_OPERATIONS;
  8016. PTapeWMIOperations = PTAPE_WMI_OPERATIONS;
  8017. //
  8018. // Type of drive errors
  8019. //
  8020. _TAPE_DRIVE_PROBLEM_TYPE = (
  8021. TapeDriveProblemNone, TapeDriveReadWriteWarning,
  8022. TapeDriveReadWriteError, TapeDriveReadWarning,
  8023. TapeDriveWriteWarning, TapeDriveReadError,
  8024. TapeDriveWriteError, TapeDriveHardwareError,
  8025. TapeDriveUnsupportedMedia, TapeDriveScsiConnectionError,
  8026. TapeDriveTimetoClean, TapeDriveCleanDriveNow,
  8027. TapeDriveMediaLifeExpired, TapeDriveSnappedTape);
  8028. {$EXTERNALSYM _TAPE_DRIVE_PROBLEM_TYPE}
  8029. TAPE_DRIVE_PROBLEM_TYPE = _TAPE_DRIVE_PROBLEM_TYPE;
  8030. TTapeDriveProblemType = TAPE_DRIVE_PROBLEM_TYPE;
  8031. const
  8032. ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION = 1;
  8033. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION}
  8034. ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION = 2;
  8035. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION}
  8036. ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION = 3;
  8037. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION}
  8038. ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION = 4;
  8039. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION}
  8040. ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION = 5;
  8041. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION}
  8042. ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION = 6;
  8043. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION}
  8044. ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION = 7;
  8045. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION}
  8046. ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE = 8;
  8047. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE}
  8048. ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES = 9;
  8049. {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES}
  8050. {$ENDIF JWA_INTERFACESECTION}
  8051. {$IFNDEF JWA_INCLUDEMODE}
  8052. implementation
  8053. uses
  8054. JwaWinDLLNames;
  8055. {$ENDIF !JWA_INCLUDEMODE}
  8056. {$IFDEF JWA_IMPLEMENTATIONSECTION}
  8057. function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
  8058. begin
  8059. Flags := Flags or (Limit shl 16);
  8060. Result := Flags;
  8061. end;
  8062. function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
  8063. begin
  8064. Result := (L >= SECURITY_MIN_IMPERSONATION_LEVEL) and (L <= SECURITY_MAX_IMPERSONATION_LEVEL);
  8065. end;
  8066. {
  8067. function VALID_TOKEN_AUDIT_POLICY_ELEMENT(P: TOKEN_AUDIT_POLICY_ELEMENT): BOOL;
  8068. begin
  8069. Result := ((P.PolicyMask and (not VALID_AUDIT_POLICY_BITS) = 0) and (P.Category <= AuditEventMaxType);
  8070. // ((((P).PolicyMask & ~VALID_AUDIT_POLICY_BITS) == 0) && \
  8071. // ((P).Category <= AuditEventMaxType))
  8072. end;
  8073. }
  8074. function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
  8075. begin
  8076. Result := SizeOf(TOKEN_AUDIT_POLICY);
  8077. if p^.PolicyCount > ANYSIZE_ARRAY then
  8078. Result := Result + SizeOf(TOKEN_AUDIT_POLICY_ELEMENT) * (P^.PolicyCount - ANYSIZE_ARRAY);
  8079. // ( sizeof(TOKEN_AUDIT_POLICY) + (((p)->PolicyCount > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) * ((p)->PolicyCount - ANYSIZE_ARRAY)) : 0) )
  8080. end;
  8081. function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
  8082. begin
  8083. Result := SizeOf(TOKEN_AUDIT_POLICY);
  8084. if C > ANYSIZE_ARRAY then
  8085. Result := Result + SizeOf(TOKEN_AUDIT_POLICY_ELEMENT) * (C - ANYSIZE_ARRAY);
  8086. // ( sizeof(TOKEN_AUDIT_POLICY) + (((C) > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) * ((C) - ANYSIZE_ARRAY)) : 0) )
  8087. end;
  8088. function NtCurrentTeb: PNT_TIB;
  8089. asm
  8090. {$ifdef cpu386}
  8091. MOV EAX, FS:[24]
  8092. {$endif cpu386}
  8093. {$ifdef cpux86_64}
  8094. movq RAX, GS:[48]
  8095. {$endif cpux86_64}
  8096. end;
  8097. function GetFiberData: PVOID;
  8098. asm
  8099. {$ifdef cpu386}
  8100. MOV EAX, FS:[16]
  8101. MOV EAX, [EAX]
  8102. {$endif cpu386}
  8103. {$ifdef cpux86_64}
  8104. MOV RAX, GS:[32]
  8105. MOV RAX, [RAX]
  8106. {$endif cpux86_64}
  8107. end;
  8108. function GetCurrentFiber: PVOID;
  8109. asm
  8110. {$ifdef cpu386}
  8111. MOV EAX, FS:[16]
  8112. {$endif cpu386}
  8113. {$ifdef cpux86_64}
  8114. MOV RAX, GS:[32]
  8115. {$endif cpux86_64}
  8116. end;
  8117. {$IFNDEF JWA_INCLUDEMODE}
  8118. function Int32x32To64(a, b: LONG): LONGLONG;
  8119. begin
  8120. Result := a * b;
  8121. end;
  8122. function UInt32x32To64(a, b: DWORD): ULONGLONG;
  8123. begin
  8124. Result := a * b;
  8125. end;
  8126. {$ENDIF !JWA_INCLUDEMODE}
  8127. function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
  8128. begin
  8129. Result := (SubLang shl 10) or PrimaryLang;
  8130. end;
  8131. function PRIMARYLANGID(LangId: WORD): WORD;
  8132. begin
  8133. Result := LangId and $3FF;
  8134. end;
  8135. function SUBLANGID(LangId: WORD): WORD;
  8136. begin
  8137. Result := LangId shr 10;
  8138. end;
  8139. function MAKELCID(LangId, SortId: WORD): DWORD;
  8140. begin
  8141. Result := (DWORD(SortId) shl 16) or DWORD(LangId);
  8142. end;
  8143. function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
  8144. begin
  8145. Result := MAKELCID(LangId, SortId) or (SortVersion shl 20);
  8146. end;
  8147. function LANGIDFROMLCID(LocaleId: LCID): WORD;
  8148. begin
  8149. Result := WORD(LocaleId);
  8150. end;
  8151. function SORTIDFROMLCID(LocaleId: LCID): WORD;
  8152. begin
  8153. Result := WORD((DWORD(LocaleId) shr 16) and $F);
  8154. end;
  8155. function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
  8156. begin
  8157. Result := WORD((DWORD(LocaleId) shr 20) and $F);
  8158. end;
  8159. function LANG_SYSTEM_DEFAULT: WORD;
  8160. begin
  8161. Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT);
  8162. end;
  8163. function LANG_USER_DEFAULT: WORD;
  8164. begin
  8165. Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
  8166. end;
  8167. function LOCALE_SYSTEM_DEFAULT: DWORD;
  8168. begin
  8169. Result := MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT);
  8170. end;
  8171. function LOCALE_USER_DEFAULT: DWORD;
  8172. begin
  8173. Result := MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
  8174. end;
  8175. function LOCALE_NEUTRAL: DWORD;
  8176. begin
  8177. Result := MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT);
  8178. end;
  8179. function LOCALE_INVARIANT: DWORD;
  8180. begin
  8181. Result := MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT);
  8182. end;
  8183. function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
  8184. begin
  8185. Result := (Tag and ULONG($80000000)) <> 0;
  8186. end;
  8187. function IsReparseTagHighLatency(Tag: ULONG): Boolean;
  8188. begin
  8189. Result := (Tag and ULONG($40000000)) <> 0;
  8190. end;
  8191. function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
  8192. begin
  8193. Result := (Tag and ULONG($20000000)) <> 0;
  8194. end;
  8195. // IMAGE_FIRST_SECTION by Nico Bendlin - supplied by Markus Fuchs
  8196. function FieldOffset(const Struc; const Field): Cardinal;
  8197. begin
  8198. Result := Cardinal(@Field) - Cardinal(@Struc);
  8199. end;
  8200. function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
  8201. begin
  8202. Result := PImageSectionHeader(Cardinal(NtHeader) +
  8203. FieldOffset(NtHeader^, NtHeader^.OptionalHeader) +
  8204. NtHeader^.FileHeader.SizeOfOptionalHeader);
  8205. end;
  8206. function BTYPE(x: DWORD): DWORD;
  8207. begin
  8208. Result := x and N_BTMASK;
  8209. end;
  8210. function ISPTR(x: DWORD): Boolean;
  8211. begin
  8212. Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_POINTER shl N_BTSHFT);
  8213. end;
  8214. function ISFCN(x: DWORD): Boolean;
  8215. begin
  8216. Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_FUNCTION shl N_BTSHFT);
  8217. end;
  8218. function ISARY(x: DWORD): Boolean;
  8219. begin
  8220. Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_ARRAY shl N_BTSHFT);
  8221. end;
  8222. function ISTAG(x: DWORD): Boolean;
  8223. begin
  8224. Result := (x = IMAGE_SYM_CLASS_STRUCT_TAG) or (x = IMAGE_SYM_CLASS_UNION_TAG) or
  8225. (x = IMAGE_SYM_CLASS_ENUM_TAG);
  8226. end;
  8227. function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
  8228. begin
  8229. Result := (Ordinal and $ffff);
  8230. end;
  8231. function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
  8232. begin
  8233. Result := (Ordinal and $ffff);
  8234. end;
  8235. function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
  8236. begin
  8237. Result := (Ordinal and $ffff);
  8238. end;
  8239. function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
  8240. begin
  8241. Result := ((Ordinal and IMAGE_ORDINAL_FLAG64) <> 0);
  8242. end;
  8243. function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
  8244. begin
  8245. Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
  8246. end;
  8247. function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
  8248. begin
  8249. Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
  8250. end;
  8251. function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
  8252. begin
  8253. Result := b + (o shl 18);
  8254. end;
  8255. procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
  8256. begin
  8257. Mask := VerSetConditionMask(Mask, TypeBitmask, ConditionMask);
  8258. end;
  8259. {$IFDEF DYNAMIC_LINK}
  8260. var
  8261. _RtlCaptureContext: Pointer;
  8262. procedure RtlCaptureContext;
  8263. begin
  8264. GetProcedureAddress(_RtlCaptureContext, ntdll, 'RtlCaptureContext');
  8265. asm
  8266. MOV ESP, EBP
  8267. POP EBP
  8268. JMP [_RtlCaptureContext]
  8269. end;
  8270. end;
  8271. var
  8272. _RtlCompareMemory: Pointer;
  8273. function RtlCompareMemory;
  8274. begin
  8275. GetProcedureAddress(_RtlCompareMemory, ntdll, 'RtlCompareMemory');
  8276. asm
  8277. MOV ESP, EBP
  8278. POP EBP
  8279. JMP [_RtlCompareMemory]
  8280. end;
  8281. end;
  8282. var
  8283. _VerSetConditionMask: Pointer;
  8284. function VerSetConditionMask;
  8285. begin
  8286. GetProcedureAddress(_VerSetConditionMask, kernel32, 'VerSetConditionMask');
  8287. asm
  8288. MOV ESP, EBP
  8289. POP EBP
  8290. JMP [_VerSetConditionMask]
  8291. end;
  8292. end;
  8293. var
  8294. _RtlInitializeSListHead: Pointer;
  8295. procedure RtlInitializeSListHead;
  8296. begin
  8297. GetProcedureAddress(_RtlInitializeSListHead, 'ntdll.dll', 'RtlInitializeSListHead');
  8298. asm
  8299. MOV ESP, EBP
  8300. POP EBP
  8301. JMP [_RtlInitializeSListHead]
  8302. end;
  8303. end;
  8304. var
  8305. _RtlFirstEntrySList: Pointer;
  8306. function RtlFirstEntrySList;
  8307. begin
  8308. GetProcedureAddress(_RtlFirstEntrySList, 'ntdll.dll', 'RtlFirstEntrySList');
  8309. asm
  8310. MOV ESP, EBP
  8311. POP EBP
  8312. JMP [_RtlFirstEntrySList]
  8313. end;
  8314. end;
  8315. var
  8316. _RtlInterlockedPopEntrySList: Pointer;
  8317. function RtlInterlockedPopEntrySList;
  8318. begin
  8319. GetProcedureAddress(_RtlInterlockedPopEntrySList, 'ntdll.dll', 'RtlInterlockedPopEntrySList');
  8320. asm
  8321. MOV ESP, EBP
  8322. POP EBP
  8323. JMP [_RtlInterlockedPopEntrySList]
  8324. end;
  8325. end;
  8326. var
  8327. _RtlInterlockedPushEntrySList: Pointer;
  8328. function RtlInterlockedPushEntrySList;
  8329. begin
  8330. GetProcedureAddress(_RtlInterlockedPushEntrySList, 'ntdll.dll', 'RtlInterlockedPushEntrySList');
  8331. asm
  8332. MOV ESP, EBP
  8333. POP EBP
  8334. JMP [_RtlInterlockedPushEntrySList]
  8335. end;
  8336. end;
  8337. var
  8338. _RtlInterlockedFlushSList: Pointer;
  8339. function RtlInterlockedFlushSList;
  8340. begin
  8341. GetProcedureAddress(_RtlInterlockedFlushSList, 'ntdll.dll', 'RtlInterlockedFlushSList');
  8342. asm
  8343. MOV ESP, EBP
  8344. POP EBP
  8345. JMP [_RtlInterlockedFlushSList]
  8346. end;
  8347. end;
  8348. var
  8349. _RtlQueryDepthSList: Pointer;
  8350. function RtlQueryDepthSList;
  8351. begin
  8352. GetProcedureAddress(_RtlQueryDepthSList, 'ntdll.dll', 'RtlQueryDepthSList');
  8353. asm
  8354. MOV ESP, EBP
  8355. POP EBP
  8356. JMP [_RtlQueryDepthSList]
  8357. end;
  8358. end;
  8359. {$ELSE}
  8360. procedure RtlCaptureContext; external ntdll name 'RtlCaptureContext';
  8361. function RtlCompareMemory; external ntdll name 'RtlCompareMemory';
  8362. function VerSetConditionMask; external kernel32 name 'VerSetConditionMask';
  8363. procedure RtlInitializeSListHead; external 'ntdll.dll' name 'RtlInitializeSListHead';
  8364. function RtlFirstEntrySList; external 'ntdll.dll' name 'RtlFirstEntrySList';
  8365. function RtlInterlockedPopEntrySList; external 'ntdll.dll' name 'RtlInterlockedPopEntrySList';
  8366. function RtlInterlockedPushEntrySList; external 'ntdll.dll' name 'RtlInterlockedPushEntrySList';
  8367. function RtlInterlockedFlushSList; external 'ntdll.dll' name 'RtlInterlockedFlushSList';
  8368. function RtlQueryDepthSList; external 'ntdll.dll' name 'RtlQueryDepthSList';
  8369. {$ENDIF DYNAMIC_LINK}
  8370. {$ENDIF JWA_IMPLEMENTATIONSECTION}
  8371. {$IFNDEF JWA_INCLUDEMODE}
  8372. end.
  8373. {$ENDIF !JWA_INCLUDEMODE}