jwawinnt.pas 328 KB

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