JclWin32.pas 350 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330
  1. {**************************************************************************************************}
  2. { WARNING: JEDI preprocessor generated unit. Do not edit. }
  3. {**************************************************************************************************}
  4. {**************************************************************************************************}
  5. { }
  6. { Project JEDI Code Library (JCL) }
  7. { }
  8. { The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); }
  9. { you may not use this file except in compliance with the License. You may obtain a copy of the }
  10. { License at http://www.mozilla.org/MPL/ }
  11. { }
  12. { Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF }
  13. { ANY KIND, either express or implied. See the License for the specific language governing rights }
  14. { and limitations under the License. }
  15. { }
  16. { Portions of this code are translated from DelayImp.h. }
  17. { The Initial Developer of DelayImp.h is Inprise Corporation. Portions created by Inprise }
  18. { Corporation are Copyright (C) 1999, 2000 by Inprise Corporation. All Rights Reserved. }
  19. { }
  20. { The Original Code is JclWin32.pas. }
  21. { }
  22. { The Initial Developer of the Original Code is Marcel van Brakel. Portions created by Marcel van }
  23. { Brakel are Copyright (C) Marcel van Brakel. All Rights Reserved. }
  24. { }
  25. { Contributors: }
  26. { Marcel van Brakel }
  27. { Peter Friese }
  28. { Andreas Hausladen (ahuser) }
  29. { Flier Lu (flier) }
  30. { Robert Marquardt (marquardt) }
  31. { Robert Rossmair (rrossmair) }
  32. { Olivier Sannier (obones) }
  33. { Matthias Thoma (mthoma) }
  34. { Petr Vones (pvones) }
  35. { Florent Ouchet (outchy) }
  36. { }
  37. {**************************************************************************************************}
  38. { }
  39. { This unit defines various Win32 API declarations which are either missing or incorrect in one or }
  40. { more of the supported Delphi versions. This unit is not intended for regular code, only API }
  41. { declarations. }
  42. { }
  43. {**************************************************************************************************}
  44. { }
  45. { Last modified: $Date:: $ }
  46. { Revision: $Rev:: $ }
  47. { Author: $Author:: $ }
  48. { }
  49. {**************************************************************************************************}
  50. unit JclWin32;
  51. {$I jcl.inc}
  52. {$I windowsonly.inc}
  53. {$MINENUMSIZE 4}
  54. {$ALIGN ON}
  55. interface
  56. uses
  57. {$IFDEF UNITVERSIONING}
  58. JclUnitVersioning,
  59. {$ENDIF UNITVERSIONING}
  60. {$IFDEF HAS_UNITSCOPE}
  61. Winapi.Windows, System.SysUtils,
  62. {$IFNDEF FPC}
  63. Winapi.AccCtrl, Winapi.ActiveX,
  64. {$ENDIF ~FPC}
  65. {$ELSE ~HAS_UNITSCOPE}
  66. Windows, SysUtils,
  67. {$IFNDEF FPC}
  68. AccCtrl,
  69. {$ENDIF ~FPC}
  70. ActiveX,
  71. {$ENDIF ~HAS_UNITSCOPE}
  72. JclBase;
  73. {$HPPEMIT '#include <WinDef.h>'}
  74. {$HPPEMIT '#include <WinNT.h>'}
  75. {$HPPEMIT '#include <WinBase.h>'}
  76. {$HPPEMIT '#include <BaseTsd.h>'}
  77. {$HPPEMIT '#include <ImageHlp.h>'}
  78. {$HPPEMIT '#include <lm.h>'}
  79. {$HPPEMIT '#include <Nb30.h>'}
  80. {$HPPEMIT '#include <RasDlg.h>'}
  81. {$HPPEMIT '#include <Reason.h>'}
  82. {$HPPEMIT '#include <ShlWApi.h>'}
  83. {$HPPEMIT '#include <WinError.h>'}
  84. {$HPPEMIT '#include <WinIoCtl.h>'}
  85. {$HPPEMIT '#include <WinUser.h>'}
  86. //{$HPPEMIT '#include <Powrprof.h>'}
  87. {$HPPEMIT '#include <delayimp.h>'}
  88. {$HPPEMIT '#include <propidl.h>'}
  89. {$HPPEMIT '#include <msidefs.h>'}
  90. {$HPPEMIT '#include <shlguid.h>'}
  91. {$IFNDEF COMPILER14_UP}
  92. {$HPPEMIT '#include <imgguids.h>'}
  93. {$ENDIF ~COMPILER14_UP}
  94. {$HPPEMIT '#include <objbase.h>'}
  95. {$HPPEMIT '#include <ntsecapi.h>'}
  96. {$HPPEMIT ''}
  97. {$IFDEF RTL230_UP}
  98. {$HPPEMIT '// To avoid ambiguity between IMAGE_LOAD_CONFIG_DIRECTORY32 and Winapi::Windows::IMAGE_LOAD_CONFIG_DIRECTORY32'}
  99. {$HPPEMIT '#define IMAGE_LOAD_CONFIG_DIRECTORY32 ::IMAGE_LOAD_CONFIG_DIRECTORY32'}
  100. {$HPPEMIT ''}
  101. {$HPPEMIT '// To avoid ambiguity between IMAGE_LOAD_CONFIG_DIRECTORY64 and Winapi::Windows::IMAGE_LOAD_CONFIG_DIRECTORY64'}
  102. {$HPPEMIT '#define IMAGE_LOAD_CONFIG_DIRECTORY64 ::IMAGE_LOAD_CONFIG_DIRECTORY64'}
  103. {$HPPEMIT ''}
  104. {$ENDIF RTL230_UP}
  105. // EJclWin32Error
  106. type
  107. EJclWin32Error = class(EJclError)
  108. private
  109. FLastError: DWORD;
  110. FLastErrorMsg: string;
  111. public
  112. constructor Create(const Msg: string);
  113. constructor CreateFmt(const Msg: string; const Args: array of const);
  114. constructor CreateRes(Ident: Integer); overload;
  115. constructor CreateRes(ResStringRec: PResStringRec); overload;
  116. property LastError: DWORD read FLastError;
  117. property LastErrorMsg: string read FLastErrorMsg;
  118. end;
  119. //DOM-IGNORE-BEGIN
  120. {$IFNDEF FPC}
  121. //
  122. // Unsigned Basics
  123. //
  124. type
  125. USHORT = Word;
  126. {$EXTERNALSYM USHORT}
  127. {$ENDIF ~FPC}
  128. //==================================================================================================
  129. // presumable from any older WinNT.h or from WinIfs.h
  130. //==================================================================================================
  131. //--------------------------------------------------------------------------------------------------
  132. // NTFS Reparse Points
  133. //--------------------------------------------------------------------------------------------------
  134. // The reparse structure is used by layered drivers to store data in a
  135. // reparse point. The constraints on reparse tags are defined below.
  136. // This version of the reparse data buffer is only for Microsoft tags.
  137. (*$HPPEMIT 'typedef struct _REPARSE_DATA_BUFFER {'*)
  138. (*$HPPEMIT ''*)
  139. (*$HPPEMIT ' DWORD ReparseTag;'*)
  140. (*$HPPEMIT ' WORD ReparseDataLength;'*)
  141. (*$HPPEMIT ' WORD Reserved;'*)
  142. (*$HPPEMIT ''*)
  143. (*$HPPEMIT ' union {'*)
  144. (*$HPPEMIT ''*)
  145. (*$HPPEMIT ' struct {'*)
  146. (*$HPPEMIT ' WORD SubstituteNameOffset;'*)
  147. (*$HPPEMIT ' WORD SubstituteNameLength;'*)
  148. (*$HPPEMIT ' WORD PrintNameOffset;'*)
  149. (*$HPPEMIT ' WORD PrintNameLength;'*)
  150. (*$HPPEMIT ' WCHAR PathBuffer[1];'*)
  151. (*$HPPEMIT ' } SymbolicLinkReparseBuffer;'*)
  152. (*$HPPEMIT ''*)
  153. (*$HPPEMIT ' struct {'*)
  154. (*$HPPEMIT ' WORD SubstituteNameOffset;'*)
  155. (*$HPPEMIT ' WORD SubstituteNameLength;'*)
  156. (*$HPPEMIT ' WORD PrintNameOffset;'*)
  157. (*$HPPEMIT ' WORD PrintNameLength;'*)
  158. (*$HPPEMIT ' WCHAR PathBuffer[1];'*)
  159. (*$HPPEMIT ' } MountPointReparseBuffer;'*)
  160. (*$HPPEMIT ''*)
  161. (*$HPPEMIT ' struct {'*)
  162. (*$HPPEMIT ' UCHAR DataBuffer[1];'*)
  163. (*$HPPEMIT ' } GenericReparseBuffer;'*)
  164. (*$HPPEMIT ' };'*)
  165. (*$HPPEMIT ''*)
  166. (*$HPPEMIT '} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;'*)
  167. (*$HPPEMIT ''*)
  168. (*$HPPEMIT '#ifndef REPARSE_DATA_BUFFER_HEADER_SIZE'*)
  169. (*$HPPEMIT '#define REPARSE_DATA_BUFFER_HEADER_SIZE 8'*)
  170. (*$HPPEMIT '#endif'*)
  171. (*$HPPEMIT ''*)
  172. (*$HPPEMIT 'typedef struct _REPARSE_POINT_INFORMATION {'*)
  173. (*$HPPEMIT ' WORD ReparseDataLength;'*)
  174. (*$HPPEMIT ' WORD UnparsedNameLength;'*)
  175. (*$HPPEMIT '} REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;'*)
  176. (*$HPPEMIT ''*)
  177. (*$HPPEMIT '#ifndef IO_REPARSE_TAG_VALID_VALUES'*)
  178. (*$HPPEMIT '#define IO_REPARSE_TAG_VALID_VALUES 0x0E000FFFF'*)
  179. (*$HPPEMIT '#endif'*)
  180. (*$HPPEMIT ''*)
  181. type
  182. {$EXTERNALSYM _REPARSE_DATA_BUFFER}
  183. _REPARSE_DATA_BUFFER = record
  184. ReparseTag: DWORD;
  185. ReparseDataLength: Word;
  186. Reserved: Word;
  187. case Integer of
  188. 0: (
  189. SymbolicLinkReparseBuffer: record
  190. SubstituteNameOffset: Word;
  191. SubstituteNameLength: Word;
  192. PrintNameOffset: Word;
  193. PrintNameLength: Word;
  194. Flags: ULONG;
  195. PathBuffer: array [0..0] of WCHAR;
  196. end);
  197. 1: (
  198. MountPointReparseBuffer: record
  199. SubstituteNameOffset: Word;
  200. SubstituteNameLength: Word;
  201. PrintNameOffset: Word;
  202. PrintNameLength: Word;
  203. PathBuffer: array [0..0] of WCHAR;
  204. end);
  205. 2: (
  206. GenericReparseBuffer: record
  207. DataBuffer: array [0..0] of Byte;
  208. end);
  209. end;
  210. {$EXTERNALSYM REPARSE_DATA_BUFFER}
  211. REPARSE_DATA_BUFFER = _REPARSE_DATA_BUFFER;
  212. {$EXTERNALSYM PREPARSE_DATA_BUFFER}
  213. PREPARSE_DATA_BUFFER = ^_REPARSE_DATA_BUFFER;
  214. TReparseDataBuffer = _REPARSE_DATA_BUFFER;
  215. PReparseDataBuffer = PREPARSE_DATA_BUFFER;
  216. const
  217. {$EXTERNALSYM REPARSE_DATA_BUFFER_HEADER_SIZE}
  218. REPARSE_DATA_BUFFER_HEADER_SIZE = 8;
  219. type
  220. {$EXTERNALSYM _REPARSE_POINT_INFORMATION}
  221. _REPARSE_POINT_INFORMATION = record
  222. ReparseDataLength: Word;
  223. UnparsedNameLength: Word;
  224. end;
  225. {$EXTERNALSYM REPARSE_POINT_INFORMATION}
  226. REPARSE_POINT_INFORMATION = _REPARSE_POINT_INFORMATION;
  227. {$EXTERNALSYM PREPARSE_POINT_INFORMATION}
  228. PREPARSE_POINT_INFORMATION = ^_REPARSE_POINT_INFORMATION;
  229. TReparsePointInformation = _REPARSE_POINT_INFORMATION;
  230. PReparsePointInformation = PREPARSE_POINT_INFORMATION;
  231. const
  232. {$EXTERNALSYM IO_REPARSE_TAG_VALID_VALUES}
  233. IO_REPARSE_TAG_VALID_VALUES = DWORD($E000FFFF);
  234. //==================================================================================================
  235. // from JwaWinNT.pas (few declarations from JwaWinType)
  236. const
  237. MAXLONGLONG = $7fffffffffffffff;
  238. {$EXTERNALSYM MAXLONGLONG}
  239. {$IFNDEF FPC}
  240. type
  241. ULONGLONG = Int64;
  242. {$EXTERNALSYM ULONGLONG}
  243. PLONGLONG = ^LONGLONG;
  244. {$EXTERNALSYM PLONGLONG}
  245. PULONGLONG = ^ULONGLONG;
  246. {$EXTERNALSYM PULONGLONG}
  247. {$ENDIF ~FPC}
  248. const
  249. ANYSIZE_ARRAY = 1;
  250. {$EXTERNALSYM ANYSIZE_ARRAY}
  251. MAX_NATURAL_ALIGNMENT = SizeOf(ULONG);
  252. {$EXTERNALSYM MAX_NATURAL_ALIGNMENT}
  253. // line 72
  254. const
  255. VER_SERVER_NT = DWORD($80000000);
  256. {$EXTERNALSYM VER_SERVER_NT}
  257. VER_WORKSTATION_NT = $40000000;
  258. {$EXTERNALSYM VER_WORKSTATION_NT}
  259. VER_SUITE_SMALLBUSINESS = $00000001;
  260. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
  261. VER_SUITE_ENTERPRISE = $00000002;
  262. {$EXTERNALSYM VER_SUITE_ENTERPRISE}
  263. VER_SUITE_BACKOFFICE = $00000004;
  264. {$EXTERNALSYM VER_SUITE_BACKOFFICE}
  265. VER_SUITE_COMMUNICATIONS = $00000008;
  266. {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
  267. VER_SUITE_TERMINAL = $00000010;
  268. {$EXTERNALSYM VER_SUITE_TERMINAL}
  269. VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
  270. {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
  271. VER_SUITE_EMBEDDEDNT = $00000040;
  272. {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
  273. VER_SUITE_DATACENTER = $00000080;
  274. {$EXTERNALSYM VER_SUITE_DATACENTER}
  275. VER_SUITE_SINGLEUSERTS = $00000100;
  276. {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
  277. VER_SUITE_PERSONAL = $00000200;
  278. {$EXTERNALSYM VER_SUITE_PERSONAL}
  279. VER_SUITE_BLADE = $00000400;
  280. {$EXTERNALSYM VER_SUITE_BLADE}
  281. VER_SUITE_EMBEDDED_RESTRICTED = $00000800;
  282. {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
  283. VER_SUITE_SECURITY_APPLIANCE = $00001000;
  284. {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}
  285. VER_SUITE_STORAGE_SERVER = $00002000;
  286. {$EXTERNALSYM VER_SUITE_STORAGE_SERVER}
  287. VER_SUITE_COMPUTE_SERVER = $00004000;
  288. {$EXTERNALSYM VER_SUITE_COMPUTE_SERVER}
  289. // line 515
  290. //
  291. // A language ID is a 16 bit value which is the combination of a
  292. // primary language ID and a secondary language ID. The bits are
  293. // allocated as follows:
  294. //
  295. // +-----------------------+-------------------------+
  296. // | Sublanguage ID | Primary Language ID |
  297. // +-----------------------+-------------------------+
  298. // 15 10 9 0 bit
  299. //
  300. //
  301. // Language ID creation/extraction macros:
  302. //
  303. // MAKELANGID - construct language id from a primary language id and
  304. // a sublanguage id.
  305. // PRIMARYLANGID - extract primary language id from a language id.
  306. // SUBLANGID - extract sublanguage id from a language id.
  307. //
  308. function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
  309. {$EXTERNALSYM MAKELANGID}
  310. function PRIMARYLANGID(LangId: WORD): WORD;
  311. {$EXTERNALSYM PRIMARYLANGID}
  312. function SUBLANGID(LangId: WORD): WORD;
  313. {$EXTERNALSYM SUBLANGID}
  314. //
  315. // A locale ID is a 32 bit value which is the combination of a
  316. // language ID, a sort ID, and a reserved area. The bits are
  317. // allocated as follows:
  318. //
  319. // +-------------+---------+-------------------------+
  320. // | Reserved | Sort ID | Language ID |
  321. // +-------------+---------+-------------------------+
  322. // 31 20 19 16 15 0 bit
  323. //
  324. //
  325. // Locale ID creation/extraction macros:
  326. //
  327. // MAKELCID - construct the locale id from a language id and a sort id.
  328. // MAKESORTLCID - construct the locale id from a language id, sort id, and sort version.
  329. // LANGIDFROMLCID - extract the language id from a locale id.
  330. // SORTIDFROMLCID - extract the sort id from a locale id.
  331. // SORTVERSIONFROMLCID - extract the sort version from a locale id.
  332. //
  333. const
  334. NLS_VALID_LOCALE_MASK = $000fffff;
  335. {$EXTERNALSYM NLS_VALID_LOCALE_MASK}
  336. function MAKELCID(LangId, SortId: WORD): DWORD;
  337. {$EXTERNALSYM MAKELCID}
  338. function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
  339. {$EXTERNALSYM MAKESORTLCID}
  340. function LANGIDFROMLCID(LocaleId: LCID): WORD;
  341. {$EXTERNALSYM LANGIDFROMLCID}
  342. function SORTIDFROMLCID(LocaleId: LCID): WORD;
  343. {$EXTERNALSYM SORTIDFROMLCID}
  344. function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
  345. {$EXTERNALSYM SORTVERSIONFROMLCID}
  346. // line 1154
  347. ////////////////////////////////////////////////////////////////////////
  348. // //
  349. // Security Id (SID) //
  350. // //
  351. ////////////////////////////////////////////////////////////////////////
  352. //
  353. //
  354. // Pictorially the structure of an SID is as follows:
  355. //
  356. // 1 1 1 1 1 1
  357. // 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  358. // +---------------------------------------------------------------+
  359. // | SubAuthorityCount |Reserved1 (SBZ)| Revision |
  360. // +---------------------------------------------------------------+
  361. // | IdentifierAuthority[0] |
  362. // +---------------------------------------------------------------+
  363. // | IdentifierAuthority[1] |
  364. // +---------------------------------------------------------------+
  365. // | IdentifierAuthority[2] |
  366. // +---------------------------------------------------------------+
  367. // | |
  368. // +- - - - - - - - SubAuthority[] - - - - - - - - -+
  369. // | |
  370. // +---------------------------------------------------------------+
  371. //
  372. //
  373. {$IFNDEF FPC}
  374. type
  375. _SID_IDENTIFIER_AUTHORITY = record
  376. Value: array [0..5] of Byte;
  377. end;
  378. {$EXTERNALSYM _SID_IDENTIFIER_AUTHORITY}
  379. SID_IDENTIFIER_AUTHORITY = _SID_IDENTIFIER_AUTHORITY;
  380. {$EXTERNALSYM SID_IDENTIFIER_AUTHORITY}
  381. PSID_IDENTIFIER_AUTHORITY = ^_SID_IDENTIFIER_AUTHORITY;
  382. {$EXTERNALSYM PSID_IDENTIFIER_AUTHORITY}
  383. // PSid = ^SID;
  384. _SID = record
  385. Revision: Byte;
  386. SubAuthorityCount: Byte;
  387. IdentifierAuthority: SID_IDENTIFIER_AUTHORITY;
  388. SubAuthority: array [0..ANYSIZE_ARRAY - 1] of DWORD;
  389. end;
  390. {$EXTERNALSYM _SID}
  391. SID = _SID;
  392. {$EXTERNALSYM SID}
  393. PPSID = ^PSID;
  394. {$NODEFINE PPSID}
  395. TSid = SID;
  396. {$ENDIF ~FPC}
  397. const
  398. SID_REVISION = (1); // Current revision level
  399. {$EXTERNALSYM SID_REVISION}
  400. SID_MAX_SUB_AUTHORITIES = (15);
  401. {$EXTERNALSYM SID_MAX_SUB_AUTHORITIES}
  402. SID_RECOMMENDED_SUB_AUTHORITIES = (1); // Will change to around 6 in a future release.
  403. {$EXTERNALSYM SID_RECOMMENDED_SUB_AUTHORITIES}
  404. SECURITY_MAX_SID_SIZE = SizeOf(SID) - SizeOf(DWORD) + (SID_MAX_SUB_AUTHORITIES * SizeOf(DWORD));
  405. {$EXTERNALSYM SECURITY_MAX_SID_SIZE}
  406. {$IFNDEF FPC}
  407. SidTypeUser = 1;
  408. {$EXTERNALSYM SidTypeUser}
  409. SidTypeGroup = 2;
  410. {$EXTERNALSYM SidTypeGroup}
  411. SidTypeDomain = 3;
  412. {$EXTERNALSYM SidTypeDomain}
  413. SidTypeAlias = 4;
  414. {$EXTERNALSYM SidTypeAlias}
  415. SidTypeWellKnownGroup = 5;
  416. {$EXTERNALSYM SidTypeWellKnownGroup}
  417. SidTypeDeletedAccount = 6;
  418. {$EXTERNALSYM SidTypeDeletedAccount}
  419. SidTypeInvalid = 7;
  420. {$EXTERNALSYM SidTypeInvalid}
  421. SidTypeUnknown = 8;
  422. {$EXTERNALSYM SidTypeUnknown}
  423. SidTypeComputer = 9;
  424. {$EXTERNALSYM SidTypeComputer}
  425. type
  426. _SID_NAME_USE = DWORD;
  427. {$EXTERNALSYM _SID_NAME_USE}
  428. // SID_NAME_USE = _SID_NAME_USE;
  429. // {$EXTERNALSYM SID_NAME_USE}
  430. PSID_NAME_USE = ^SID_NAME_USE;
  431. {$EXTERNALSYM PSID_NAME_USE}
  432. TSidNameUse = SID_NAME_USE;
  433. PSidNameUSe = PSID_NAME_USE;
  434. PSID_AND_ATTRIBUTES = ^SID_AND_ATTRIBUTES;
  435. {$EXTERNALSYM PSID_AND_ATTRIBUTES}
  436. _SID_AND_ATTRIBUTES = record
  437. Sid: PSID;
  438. Attributes: DWORD;
  439. end;
  440. {$EXTERNALSYM _SID_AND_ATTRIBUTES}
  441. SID_AND_ATTRIBUTES = _SID_AND_ATTRIBUTES;
  442. {$EXTERNALSYM SID_AND_ATTRIBUTES}
  443. TSidAndAttributes = SID_AND_ATTRIBUTES;
  444. PSidAndAttributes = PSID_AND_ATTRIBUTES;
  445. SID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
  446. {$EXTERNALSYM SID_AND_ATTRIBUTES_ARRAY}
  447. PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
  448. {$EXTERNALSYM PSID_AND_ATTRIBUTES_ARRAY}
  449. PSidAndAttributesArray = ^TSidAndAttributesArray;
  450. TSidAndAttributesArray = SID_AND_ATTRIBUTES_ARRAY;
  451. {$ENDIF ~FPC}
  452. /////////////////////////////////////////////////////////////////////////////
  453. // //
  454. // Universal well-known SIDs //
  455. // //
  456. // Null SID S-1-0-0 //
  457. // World S-1-1-0 //
  458. // Local S-1-2-0 //
  459. // Creator Owner ID S-1-3-0 //
  460. // Creator Group ID S-1-3-1 //
  461. // Creator Owner Server ID S-1-3-2 //
  462. // Creator Group Server ID S-1-3-3 //
  463. // //
  464. // (Non-unique IDs) S-1-4 //
  465. // //
  466. /////////////////////////////////////////////////////////////////////////////
  467. const
  468. SECURITY_NULL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 0));
  469. {$EXTERNALSYM SECURITY_NULL_SID_AUTHORITY}
  470. SECURITY_WORLD_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 1));
  471. {$EXTERNALSYM SECURITY_WORLD_SID_AUTHORITY}
  472. SECURITY_LOCAL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 2));
  473. {$EXTERNALSYM SECURITY_LOCAL_SID_AUTHORITY}
  474. SECURITY_CREATOR_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 3));
  475. {$EXTERNALSYM SECURITY_CREATOR_SID_AUTHORITY}
  476. SECURITY_NON_UNIQUE_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 4));
  477. {$EXTERNALSYM SECURITY_NON_UNIQUE_AUTHORITY}
  478. SECURITY_RESOURCE_MANAGER_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 9));
  479. {$EXTERNALSYM SECURITY_RESOURCE_MANAGER_AUTHORITY}
  480. SECURITY_NULL_RID = ($00000000);
  481. {$EXTERNALSYM SECURITY_NULL_RID}
  482. SECURITY_WORLD_RID = ($00000000);
  483. {$EXTERNALSYM SECURITY_WORLD_RID}
  484. SECURITY_LOCAL_RID = ($00000000);
  485. {$EXTERNALSYM SECURITY_LOCAL_RID}
  486. SECURITY_CREATOR_OWNER_RID = ($00000000);
  487. {$EXTERNALSYM SECURITY_CREATOR_OWNER_RID}
  488. SECURITY_CREATOR_GROUP_RID = ($00000001);
  489. {$EXTERNALSYM SECURITY_CREATOR_GROUP_RID}
  490. SECURITY_CREATOR_OWNER_SERVER_RID = ($00000002);
  491. {$EXTERNALSYM SECURITY_CREATOR_OWNER_SERVER_RID}
  492. SECURITY_CREATOR_GROUP_SERVER_RID = ($00000003);
  493. {$EXTERNALSYM SECURITY_CREATOR_GROUP_SERVER_RID}
  494. /////////////////////////////////////////////////////////////////////////////
  495. // //
  496. // NT well-known SIDs //
  497. // //
  498. // NT Authority S-1-5 //
  499. // Dialup S-1-5-1 //
  500. // //
  501. // Network S-1-5-2 //
  502. // Batch S-1-5-3 //
  503. // Interactive S-1-5-4 //
  504. // (Logon IDs) S-1-5-5-X-Y //
  505. // Service S-1-5-6 //
  506. // AnonymousLogon S-1-5-7 (aka null logon session) //
  507. // Proxy S-1-5-8 //
  508. // Enterprise DC (EDC) S-1-5-9 (aka domain controller account) //
  509. // Self S-1-5-10 (self RID) //
  510. // Authenticated User S-1-5-11 (Authenticated user somewhere) //
  511. // Restricted Code S-1-5-12 (Running restricted code) //
  512. // Terminal Server S-1-5-13 (Running on Terminal Server) //
  513. // Remote Logon S-1-5-14 (Remote Interactive Logon) //
  514. // This Organization S-1-5-15 //
  515. // //
  516. // Local System S-1-5-18 //
  517. // Local Service S-1-5-19 //
  518. // Network Service S-1-5-20 //
  519. // //
  520. // (NT non-unique IDs) S-1-5-0x15-... (NT Domain Sids) //
  521. // //
  522. // (Built-in domain) S-1-5-0x20 //
  523. // //
  524. // (Security Package IDs) S-1-5-0x40 //
  525. // NTLM Authentication S-1-5-0x40-10 //
  526. // SChannel Authentication S-1-5-0x40-14 //
  527. // Digest Authentication S-1-5-0x40-21 //
  528. // //
  529. // Other Organization S-1-5-1000 (>=1000 can not be filtered) //
  530. // //
  531. // //
  532. // NOTE: the relative identifier values (RIDs) determine which security //
  533. // boundaries the SID is allowed to cross. Before adding new RIDs, //
  534. // a determination needs to be made regarding which range they should //
  535. // be added to in order to ensure proper "SID filtering" //
  536. // //
  537. /////////////////////////////////////////////////////////////////////////////
  538. const
  539. SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  540. {$EXTERNALSYM SECURITY_NT_AUTHORITY}
  541. SECURITY_DIALUP_RID = ($00000001);
  542. {$EXTERNALSYM SECURITY_DIALUP_RID}
  543. SECURITY_NETWORK_RID = ($00000002);
  544. {$EXTERNALSYM SECURITY_NETWORK_RID}
  545. SECURITY_BATCH_RID = ($00000003);
  546. {$EXTERNALSYM SECURITY_BATCH_RID}
  547. SECURITY_INTERACTIVE_RID = ($00000004);
  548. {$EXTERNALSYM SECURITY_INTERACTIVE_RID}
  549. SECURITY_LOGON_IDS_RID = ($00000005);
  550. {$EXTERNALSYM SECURITY_LOGON_IDS_RID}
  551. SECURITY_LOGON_IDS_RID_COUNT = (3);
  552. {$EXTERNALSYM SECURITY_LOGON_IDS_RID_COUNT}
  553. SECURITY_SERVICE_RID = ($00000006);
  554. {$EXTERNALSYM SECURITY_SERVICE_RID}
  555. SECURITY_ANONYMOUS_LOGON_RID = ($00000007);
  556. {$EXTERNALSYM SECURITY_ANONYMOUS_LOGON_RID}
  557. SECURITY_PROXY_RID = ($00000008);
  558. {$EXTERNALSYM SECURITY_PROXY_RID}
  559. SECURITY_ENTERPRISE_CONTROLLERS_RID = ($00000009);
  560. {$EXTERNALSYM SECURITY_ENTERPRISE_CONTROLLERS_RID}
  561. SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID;
  562. {$EXTERNALSYM SECURITY_SERVER_LOGON_RID}
  563. SECURITY_PRINCIPAL_SELF_RID = ($0000000A);
  564. {$EXTERNALSYM SECURITY_PRINCIPAL_SELF_RID}
  565. SECURITY_AUTHENTICATED_USER_RID = ($0000000B);
  566. {$EXTERNALSYM SECURITY_AUTHENTICATED_USER_RID}
  567. SECURITY_RESTRICTED_CODE_RID = ($0000000C);
  568. {$EXTERNALSYM SECURITY_RESTRICTED_CODE_RID}
  569. SECURITY_TERMINAL_SERVER_RID = ($0000000D);
  570. {$EXTERNALSYM SECURITY_TERMINAL_SERVER_RID}
  571. SECURITY_REMOTE_LOGON_RID = ($0000000E);
  572. {$EXTERNALSYM SECURITY_REMOTE_LOGON_RID}
  573. SECURITY_THIS_ORGANIZATION_RID = ($0000000F);
  574. {$EXTERNALSYM SECURITY_THIS_ORGANIZATION_RID}
  575. SECURITY_LOCAL_SYSTEM_RID = ($00000012);
  576. {$EXTERNALSYM SECURITY_LOCAL_SYSTEM_RID}
  577. SECURITY_LOCAL_SERVICE_RID = ($00000013);
  578. {$EXTERNALSYM SECURITY_LOCAL_SERVICE_RID}
  579. SECURITY_NETWORK_SERVICE_RID = ($00000014);
  580. {$EXTERNALSYM SECURITY_NETWORK_SERVICE_RID}
  581. SECURITY_NT_NON_UNIQUE = ($00000015);
  582. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE}
  583. SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT = (3);
  584. {$EXTERNALSYM SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT}
  585. SECURITY_BUILTIN_DOMAIN_RID = ($00000020);
  586. {$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID}
  587. SECURITY_PACKAGE_BASE_RID = ($00000040);
  588. {$EXTERNALSYM SECURITY_PACKAGE_BASE_RID}
  589. SECURITY_PACKAGE_RID_COUNT = (2);
  590. {$EXTERNALSYM SECURITY_PACKAGE_RID_COUNT}
  591. SECURITY_PACKAGE_NTLM_RID = ($0000000A);
  592. {$EXTERNALSYM SECURITY_PACKAGE_NTLM_RID}
  593. SECURITY_PACKAGE_SCHANNEL_RID = ($0000000E);
  594. {$EXTERNALSYM SECURITY_PACKAGE_SCHANNEL_RID}
  595. SECURITY_PACKAGE_DIGEST_RID = ($00000015);
  596. {$EXTERNALSYM SECURITY_PACKAGE_DIGEST_RID}
  597. SECURITY_MAX_ALWAYS_FILTERED = ($000003E7);
  598. {$EXTERNALSYM SECURITY_MAX_ALWAYS_FILTERED}
  599. SECURITY_MIN_NEVER_FILTERED = ($000003E8);
  600. {$EXTERNALSYM SECURITY_MIN_NEVER_FILTERED}
  601. SECURITY_OTHER_ORGANIZATION_RID = ($000003E8);
  602. {$EXTERNALSYM SECURITY_OTHER_ORGANIZATION_RID}
  603. /////////////////////////////////////////////////////////////////////////////
  604. // //
  605. // well-known domain relative sub-authority values (RIDs)... //
  606. // //
  607. /////////////////////////////////////////////////////////////////////////////
  608. // Well-known users ...
  609. FOREST_USER_RID_MAX = ($000001F3);
  610. {$EXTERNALSYM FOREST_USER_RID_MAX}
  611. DOMAIN_USER_RID_ADMIN = ($000001F4);
  612. {$EXTERNALSYM DOMAIN_USER_RID_ADMIN}
  613. DOMAIN_USER_RID_GUEST = ($000001F5);
  614. {$EXTERNALSYM DOMAIN_USER_RID_GUEST}
  615. DOMAIN_USER_RID_KRBTGT = ($000001F6);
  616. {$EXTERNALSYM DOMAIN_USER_RID_KRBTGT}
  617. DOMAIN_USER_RID_MAX = ($000003E7);
  618. {$EXTERNALSYM DOMAIN_USER_RID_MAX}
  619. // well-known groups ...
  620. DOMAIN_GROUP_RID_ADMINS = ($00000200);
  621. {$EXTERNALSYM DOMAIN_GROUP_RID_ADMINS}
  622. DOMAIN_GROUP_RID_USERS = ($00000201);
  623. {$EXTERNALSYM DOMAIN_GROUP_RID_USERS}
  624. DOMAIN_GROUP_RID_GUESTS = ($00000202);
  625. {$EXTERNALSYM DOMAIN_GROUP_RID_GUESTS}
  626. DOMAIN_GROUP_RID_COMPUTERS = ($00000203);
  627. {$EXTERNALSYM DOMAIN_GROUP_RID_COMPUTERS}
  628. DOMAIN_GROUP_RID_CONTROLLERS = ($00000204);
  629. {$EXTERNALSYM DOMAIN_GROUP_RID_CONTROLLERS}
  630. DOMAIN_GROUP_RID_CERT_ADMINS = ($00000205);
  631. {$EXTERNALSYM DOMAIN_GROUP_RID_CERT_ADMINS}
  632. DOMAIN_GROUP_RID_SCHEMA_ADMINS = ($00000206);
  633. {$EXTERNALSYM DOMAIN_GROUP_RID_SCHEMA_ADMINS}
  634. DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = ($00000207);
  635. {$EXTERNALSYM DOMAIN_GROUP_RID_ENTERPRISE_ADMINS}
  636. DOMAIN_GROUP_RID_POLICY_ADMINS = ($00000208);
  637. {$EXTERNALSYM DOMAIN_GROUP_RID_POLICY_ADMINS}
  638. // well-known aliases ...
  639. DOMAIN_ALIAS_RID_ADMINS = ($00000220);
  640. {$EXTERNALSYM DOMAIN_ALIAS_RID_ADMINS}
  641. DOMAIN_ALIAS_RID_USERS = ($00000221);
  642. {$EXTERNALSYM DOMAIN_ALIAS_RID_USERS}
  643. DOMAIN_ALIAS_RID_GUESTS = ($00000222);
  644. {$EXTERNALSYM DOMAIN_ALIAS_RID_GUESTS}
  645. DOMAIN_ALIAS_RID_POWER_USERS = ($00000223);
  646. {$EXTERNALSYM DOMAIN_ALIAS_RID_POWER_USERS}
  647. DOMAIN_ALIAS_RID_ACCOUNT_OPS = ($00000224);
  648. {$EXTERNALSYM DOMAIN_ALIAS_RID_ACCOUNT_OPS}
  649. DOMAIN_ALIAS_RID_SYSTEM_OPS = ($00000225);
  650. {$EXTERNALSYM DOMAIN_ALIAS_RID_SYSTEM_OPS}
  651. DOMAIN_ALIAS_RID_PRINT_OPS = ($00000226);
  652. {$EXTERNALSYM DOMAIN_ALIAS_RID_PRINT_OPS}
  653. DOMAIN_ALIAS_RID_BACKUP_OPS = ($00000227);
  654. {$EXTERNALSYM DOMAIN_ALIAS_RID_BACKUP_OPS}
  655. DOMAIN_ALIAS_RID_REPLICATOR = ($00000228);
  656. {$EXTERNALSYM DOMAIN_ALIAS_RID_REPLICATOR}
  657. DOMAIN_ALIAS_RID_RAS_SERVERS = ($00000229);
  658. {$EXTERNALSYM DOMAIN_ALIAS_RID_RAS_SERVERS}
  659. DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = ($0000022A);
  660. {$EXTERNALSYM DOMAIN_ALIAS_RID_PREW2KCOMPACCESS}
  661. DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = ($0000022B);
  662. {$EXTERNALSYM DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS}
  663. DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = ($0000022C);
  664. {$EXTERNALSYM DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS}
  665. DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = ($0000022D);
  666. {$EXTERNALSYM DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS}
  667. DOMAIN_ALIAS_RID_MONITORING_USERS = ($0000022E);
  668. {$EXTERNALSYM DOMAIN_ALIAS_RID_MONITORING_USERS}
  669. DOMAIN_ALIAS_RID_LOGGING_USERS = ($0000022F);
  670. {$EXTERNALSYM DOMAIN_ALIAS_RID_LOGGING_USERS}
  671. DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = ($00000230);
  672. {$EXTERNALSYM DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS}
  673. DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = ($00000231);
  674. {$EXTERNALSYM DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS}
  675. // line 2495
  676. ////////////////////////////////////////////////////////////////////////
  677. // //
  678. // NT Defined Privileges //
  679. // //
  680. ////////////////////////////////////////////////////////////////////////
  681. const
  682. SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
  683. {$EXTERNALSYM SE_CREATE_TOKEN_NAME}
  684. SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
  685. {$EXTERNALSYM SE_ASSIGNPRIMARYTOKEN_NAME}
  686. SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
  687. {$EXTERNALSYM SE_LOCK_MEMORY_NAME}
  688. SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
  689. {$EXTERNALSYM SE_INCREASE_QUOTA_NAME}
  690. SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
  691. {$EXTERNALSYM SE_UNSOLICITED_INPUT_NAME}
  692. SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
  693. {$EXTERNALSYM SE_MACHINE_ACCOUNT_NAME}
  694. SE_TCB_NAME = 'SeTcbPrivilege';
  695. {$EXTERNALSYM SE_TCB_NAME}
  696. SE_SECURITY_NAME = 'SeSecurityPrivilege';
  697. {$EXTERNALSYM SE_SECURITY_NAME}
  698. SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
  699. {$EXTERNALSYM SE_TAKE_OWNERSHIP_NAME}
  700. SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
  701. {$EXTERNALSYM SE_LOAD_DRIVER_NAME}
  702. SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
  703. {$EXTERNALSYM SE_SYSTEM_PROFILE_NAME}
  704. SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
  705. {$EXTERNALSYM SE_SYSTEMTIME_NAME}
  706. SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
  707. {$EXTERNALSYM SE_PROF_SINGLE_PROCESS_NAME}
  708. SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
  709. {$EXTERNALSYM SE_INC_BASE_PRIORITY_NAME}
  710. SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
  711. {$EXTERNALSYM SE_CREATE_PAGEFILE_NAME}
  712. SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
  713. {$EXTERNALSYM SE_CREATE_PERMANENT_NAME}
  714. SE_BACKUP_NAME = 'SeBackupPrivilege';
  715. {$EXTERNALSYM SE_BACKUP_NAME}
  716. SE_RESTORE_NAME = 'SeRestorePrivilege';
  717. {$EXTERNALSYM SE_RESTORE_NAME}
  718. SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
  719. {$EXTERNALSYM SE_SHUTDOWN_NAME}
  720. SE_DEBUG_NAME = 'SeDebugPrivilege';
  721. {$EXTERNALSYM SE_DEBUG_NAME}
  722. SE_AUDIT_NAME = 'SeAuditPrivilege';
  723. {$EXTERNALSYM SE_AUDIT_NAME}
  724. SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
  725. {$EXTERNALSYM SE_SYSTEM_ENVIRONMENT_NAME}
  726. SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
  727. {$EXTERNALSYM SE_CHANGE_NOTIFY_NAME}
  728. SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
  729. {$EXTERNALSYM SE_REMOTE_SHUTDOWN_NAME}
  730. SE_UNDOCK_NAME = 'SeUndockPrivilege';
  731. {$EXTERNALSYM SE_UNDOCK_NAME}
  732. SE_SYNC_AGENT_NAME = 'SeSyncAgentPrivilege';
  733. {$EXTERNALSYM SE_SYNC_AGENT_NAME}
  734. SE_ENABLE_DELEGATION_NAME = 'SeEnableDelegationPrivilege';
  735. {$EXTERNALSYM SE_ENABLE_DELEGATION_NAME}
  736. SE_MANAGE_VOLUME_NAME = 'SeManageVolumePrivilege';
  737. {$EXTERNALSYM SE_MANAGE_VOLUME_NAME}
  738. SE_IMPERSONATE_NAME = 'SeImpersonatePrivilege';
  739. {$EXTERNALSYM SE_IMPERSONATE_NAME}
  740. SE_CREATE_GLOBAL_NAME = 'SeCreateGlobalPrivilege';
  741. {$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
  742. //
  743. // Thread Information Block (TIB)
  744. //
  745. type
  746. NT_TIB32 = packed record
  747. ExceptionList: DWORD;
  748. StackBase: DWORD;
  749. StackLimit: DWORD;
  750. SubSystemTib: DWORD;
  751. case Integer of
  752. 0 : (
  753. FiberData: DWORD;
  754. ArbitraryUserPointer: DWORD;
  755. Self: DWORD;
  756. );
  757. 1 : (
  758. Version: DWORD;
  759. );
  760. end;
  761. {$EXTERNALSYM NT_TIB32}
  762. PNT_TIB32 = ^NT_TIB32;
  763. {$EXTERNALSYM PNT_TIB32}
  764. NT_TIB64 = packed record
  765. ExceptionList: TJclAddr64;
  766. StackBase: TJclAddr64;
  767. StackLimit: TJclAddr64;
  768. SubSystemTib: TJclAddr64;
  769. case Integer of
  770. 0 : (
  771. FiberData: TJclAddr64;
  772. ArbitraryUserPointer: TJclAddr64;
  773. Self: TJclAddr64;
  774. );
  775. 1 : (
  776. Version: DWORD;
  777. );
  778. end;
  779. {$EXTERNALSYM NT_TIB64}
  780. PNT_TIB64 = ^NT_TIB64;
  781. {$EXTERNALSYM PNT_TIB64}
  782. // line 2686
  783. //
  784. // Token information class structures
  785. //
  786. {$IFNDEF FPC}
  787. type
  788. PTOKEN_USER = ^TOKEN_USER;
  789. {$EXTERNALSYM PTOKEN_USER}
  790. _TOKEN_USER = record
  791. User: SID_AND_ATTRIBUTES;
  792. end;
  793. {$EXTERNALSYM _TOKEN_USER}
  794. TOKEN_USER = _TOKEN_USER;
  795. {$EXTERNALSYM TOKEN_USER}
  796. TTokenUser = TOKEN_USER;
  797. PTokenUser = PTOKEN_USER;
  798. {$ENDIF ~FPC}
  799. function CaptureStackBackTrace(FramesToSkip, FramesToCapture: DWORD;
  800. BackTrace: Pointer; out BackTraceHash: DWORD): Word; stdcall;
  801. {$EXTERNALSYM CaptureStackBackTrace}
  802. // line 3858
  803. //
  804. // Define access rights to files and directories
  805. //
  806. //
  807. // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
  808. // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
  809. // constants *MUST* always be in sync.
  810. // The values are redefined in devioctl.h because they must be available to
  811. // both DOS and NT.
  812. //
  813. const
  814. FILE_READ_DATA = ($0001); // file & pipe
  815. {$EXTERNALSYM FILE_READ_DATA}
  816. FILE_LIST_DIRECTORY = ($0001); // directory
  817. {$EXTERNALSYM FILE_LIST_DIRECTORY}
  818. FILE_WRITE_DATA = ($0002); // file & pipe
  819. {$EXTERNALSYM FILE_WRITE_DATA}
  820. FILE_ADD_FILE = ($0002); // directory
  821. {$EXTERNALSYM FILE_ADD_FILE}
  822. FILE_APPEND_DATA = ($0004); // file
  823. {$EXTERNALSYM FILE_APPEND_DATA}
  824. FILE_ADD_SUBDIRECTORY = ($0004); // directory
  825. {$EXTERNALSYM FILE_ADD_SUBDIRECTORY}
  826. FILE_CREATE_PIPE_INSTANCE = ($0004); // named pipe
  827. {$EXTERNALSYM FILE_CREATE_PIPE_INSTANCE}
  828. FILE_READ_EA = ($0008); // file & directory
  829. {$EXTERNALSYM FILE_READ_EA}
  830. FILE_WRITE_EA = ($0010); // file & directory
  831. {$EXTERNALSYM FILE_WRITE_EA}
  832. FILE_EXECUTE = ($0020); // file
  833. {$EXTERNALSYM FILE_EXECUTE}
  834. FILE_TRAVERSE = ($0020); // directory
  835. {$EXTERNALSYM FILE_TRAVERSE}
  836. FILE_DELETE_CHILD = ($0040); // directory
  837. {$EXTERNALSYM FILE_DELETE_CHILD}
  838. FILE_READ_ATTRIBUTES = ($0080); // all
  839. {$EXTERNALSYM FILE_READ_ATTRIBUTES}
  840. FILE_WRITE_ATTRIBUTES = ($0100); // all
  841. {$EXTERNALSYM FILE_WRITE_ATTRIBUTES}
  842. FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF);
  843. {$EXTERNALSYM FILE_ALL_ACCESS}
  844. FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
  845. FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
  846. {$EXTERNALSYM FILE_GENERIC_READ}
  847. FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
  848. FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
  849. {$EXTERNALSYM FILE_GENERIC_WRITE}
  850. FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
  851. FILE_EXECUTE or SYNCHRONIZE);
  852. {$EXTERNALSYM FILE_GENERIC_EXECUTE}
  853. FILE_SHARE_READ = $00000001;
  854. {$EXTERNALSYM FILE_SHARE_READ}
  855. FILE_SHARE_WRITE = $00000002;
  856. {$EXTERNALSYM FILE_SHARE_WRITE}
  857. FILE_SHARE_DELETE = $00000004;
  858. {$EXTERNALSYM FILE_SHARE_DELETE}
  859. FILE_ATTRIBUTE_READONLY = $00000001;
  860. {$EXTERNALSYM FILE_ATTRIBUTE_READONLY}
  861. FILE_ATTRIBUTE_HIDDEN = $00000002;
  862. {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}
  863. FILE_ATTRIBUTE_SYSTEM = $00000004;
  864. {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}
  865. FILE_ATTRIBUTE_DIRECTORY = $00000010;
  866. {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}
  867. FILE_ATTRIBUTE_ARCHIVE = $00000020;
  868. {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}
  869. FILE_ATTRIBUTE_DEVICE = $00000040;
  870. {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE}
  871. FILE_ATTRIBUTE_NORMAL = $00000080;
  872. {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}
  873. FILE_ATTRIBUTE_TEMPORARY = $00000100;
  874. {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}
  875. FILE_ATTRIBUTE_SPARSE_FILE = $00000200;
  876. {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE}
  877. FILE_ATTRIBUTE_REPARSE_POINT = $00000400;
  878. {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT}
  879. FILE_ATTRIBUTE_COMPRESSED = $00000800;
  880. {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}
  881. FILE_ATTRIBUTE_OFFLINE = $00001000;
  882. {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}
  883. FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
  884. {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED}
  885. FILE_ATTRIBUTE_ENCRYPTED = $00004000;
  886. {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED}
  887. FILE_NOTIFY_CHANGE_FILE_NAME = $00000001;
  888. {$EXTERNALSYM FILE_NOTIFY_CHANGE_FILE_NAME}
  889. FILE_NOTIFY_CHANGE_DIR_NAME = $00000002;
  890. {$EXTERNALSYM FILE_NOTIFY_CHANGE_DIR_NAME}
  891. FILE_NOTIFY_CHANGE_ATTRIBUTES = $00000004;
  892. {$EXTERNALSYM FILE_NOTIFY_CHANGE_ATTRIBUTES}
  893. FILE_NOTIFY_CHANGE_SIZE = $00000008;
  894. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SIZE}
  895. FILE_NOTIFY_CHANGE_LAST_WRITE = $00000010;
  896. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_WRITE}
  897. FILE_NOTIFY_CHANGE_LAST_ACCESS = $00000020;
  898. {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_ACCESS}
  899. FILE_NOTIFY_CHANGE_CREATION = $00000040;
  900. {$EXTERNALSYM FILE_NOTIFY_CHANGE_CREATION}
  901. FILE_NOTIFY_CHANGE_SECURITY = $00000100;
  902. {$EXTERNALSYM FILE_NOTIFY_CHANGE_SECURITY}
  903. FILE_ACTION_ADDED = $00000001;
  904. {$EXTERNALSYM FILE_ACTION_ADDED}
  905. FILE_ACTION_REMOVED = $00000002;
  906. {$EXTERNALSYM FILE_ACTION_REMOVED}
  907. FILE_ACTION_MODIFIED = $00000003;
  908. {$EXTERNALSYM FILE_ACTION_MODIFIED}
  909. FILE_ACTION_RENAMED_OLD_NAME = $00000004;
  910. {$EXTERNALSYM FILE_ACTION_RENAMED_OLD_NAME}
  911. FILE_ACTION_RENAMED_NEW_NAME = $00000005;
  912. {$EXTERNALSYM FILE_ACTION_RENAMED_NEW_NAME}
  913. MAILSLOT_NO_MESSAGE = DWORD(-1);
  914. {$EXTERNALSYM MAILSLOT_NO_MESSAGE}
  915. MAILSLOT_WAIT_FOREVER = DWORD(-1);
  916. {$EXTERNALSYM MAILSLOT_WAIT_FOREVER}
  917. FILE_CASE_SENSITIVE_SEARCH = $00000001;
  918. {$EXTERNALSYM FILE_CASE_SENSITIVE_SEARCH}
  919. FILE_CASE_PRESERVED_NAMES = $00000002;
  920. {$EXTERNALSYM FILE_CASE_PRESERVED_NAMES}
  921. FILE_UNICODE_ON_DISK = $00000004;
  922. {$EXTERNALSYM FILE_UNICODE_ON_DISK}
  923. FILE_PERSISTENT_ACLS = $00000008;
  924. {$EXTERNALSYM FILE_PERSISTENT_ACLS}
  925. FILE_FILE_COMPRESSION = $00000010;
  926. {$EXTERNALSYM FILE_FILE_COMPRESSION}
  927. FILE_VOLUME_QUOTAS = $00000020;
  928. {$EXTERNALSYM FILE_VOLUME_QUOTAS}
  929. FILE_SUPPORTS_SPARSE_FILES = $00000040;
  930. {$EXTERNALSYM FILE_SUPPORTS_SPARSE_FILES}
  931. FILE_SUPPORTS_REPARSE_POINTS = $00000080;
  932. {$EXTERNALSYM FILE_SUPPORTS_REPARSE_POINTS}
  933. FILE_SUPPORTS_REMOTE_STORAGE = $00000100;
  934. {$EXTERNALSYM FILE_SUPPORTS_REMOTE_STORAGE}
  935. FILE_VOLUME_IS_COMPRESSED = $00008000;
  936. {$EXTERNALSYM FILE_VOLUME_IS_COMPRESSED}
  937. FILE_SUPPORTS_OBJECT_IDS = $00010000;
  938. {$EXTERNALSYM FILE_SUPPORTS_OBJECT_IDS}
  939. FILE_SUPPORTS_ENCRYPTION = $00020000;
  940. {$EXTERNALSYM FILE_SUPPORTS_ENCRYPTION}
  941. FILE_NAMED_STREAMS = $00040000;
  942. {$EXTERNALSYM FILE_NAMED_STREAMS}
  943. FILE_READ_ONLY_VOLUME = $00080000;
  944. {$EXTERNALSYM FILE_READ_ONLY_VOLUME}
  945. // line 4052
  946. //
  947. // The reparse GUID structure is used by all 3rd party layered drivers to
  948. // store data in a reparse point. For non-Microsoft tags, The GUID field
  949. // cannot be GUID_NULL.
  950. // The constraints on reparse tags are defined below.
  951. // Microsoft tags can also be used with this format of the reparse point buffer.
  952. //
  953. type
  954. TGenericReparseBuffer = record
  955. DataBuffer: array [0..0] of BYTE;
  956. end;
  957. PREPARSE_GUID_DATA_BUFFER = ^REPARSE_GUID_DATA_BUFFER;
  958. {$EXTERNALSYM PREPARSE_GUID_DATA_BUFFER}
  959. _REPARSE_GUID_DATA_BUFFER = record
  960. ReparseTag: DWORD;
  961. ReparseDataLength: WORD;
  962. Reserved: WORD;
  963. ReparseGuid: TGUID;
  964. GenericReparseBuffer: TGenericReparseBuffer;
  965. end;
  966. {$EXTERNALSYM _REPARSE_GUID_DATA_BUFFER}
  967. REPARSE_GUID_DATA_BUFFER = _REPARSE_GUID_DATA_BUFFER;
  968. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER}
  969. TReparseGuidDataBuffer = REPARSE_GUID_DATA_BUFFER;
  970. PReparseGuidDataBuffer = PREPARSE_GUID_DATA_BUFFER;
  971. const
  972. REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
  973. {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE}
  974. //
  975. // Maximum allowed size of the reparse data.
  976. //
  977. const
  978. MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
  979. {$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE}
  980. //
  981. // Predefined reparse tags.
  982. // These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
  983. //
  984. IO_REPARSE_TAG_RESERVED_ZERO = (0);
  985. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ZERO}
  986. IO_REPARSE_TAG_RESERVED_ONE = (1);
  987. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ONE}
  988. //
  989. // The value of the following constant needs to satisfy the following conditions:
  990. // (1) Be at least as large as the largest of the reserved tags.
  991. // (2) Be strictly smaller than all the tags in use.
  992. //
  993. IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE;
  994. {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE}
  995. //
  996. // The reparse tags are a DWORD. The 32 bits are laid out as follows:
  997. //
  998. // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  999. // 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
  1000. // +-+-+-+-+-----------------------+-------------------------------+
  1001. // |M|R|N|R| Reserved bits | Reparse Tag Value |
  1002. // +-+-+-+-+-----------------------+-------------------------------+
  1003. //
  1004. // M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
  1005. // All ISVs must use a tag with a 0 in this position.
  1006. // Note: If a Microsoft tag is used by non-Microsoft software, the
  1007. // behavior is not defined.
  1008. //
  1009. // R is reserved. Must be zero for non-Microsoft tags.
  1010. //
  1011. // N is name surrogate. When set to 1, the file represents another named
  1012. // entity in the system.
  1013. //
  1014. // The M and N bits are OR-able.
  1015. // The following macros check for the M and N bit values:
  1016. //
  1017. //
  1018. // Macro to determine whether a reparse point tag corresponds to a tag
  1019. // owned by Microsoft.
  1020. //
  1021. function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
  1022. {$EXTERNALSYM IsReparseTagMicrosoft}
  1023. //
  1024. // Macro to determine whether a reparse point tag corresponds to a file
  1025. // that is to be displayed with the slow icon overlay.
  1026. //
  1027. function IsReparseTagHighLatency(Tag: ULONG): Boolean;
  1028. {$EXTERNALSYM IsReparseTagHighLatency}
  1029. //
  1030. // Macro to determine whether a reparse point tag is a name surrogate
  1031. //
  1032. function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
  1033. {$EXTERNALSYM IsReparseTagNameSurrogate}
  1034. const
  1035. IO_REPARSE_TAG_MOUNT_POINT = DWORD($A0000003);
  1036. {$EXTERNALSYM IO_REPARSE_TAG_MOUNT_POINT}
  1037. IO_REPARSE_TAG_HSM = DWORD($C0000004);
  1038. {$EXTERNALSYM IO_REPARSE_TAG_HSM}
  1039. IO_REPARSE_TAG_DRIVER_EXTENDER = DWORD($80000005);
  1040. {$EXTERNALSYM IO_REPARSE_TAG_DRIVER_EXTENDER}
  1041. IO_REPARSE_TAG_HSM2 = DWORD($80000006);
  1042. {$EXTERNALSYM IO_REPARSE_TAG_HSM2}
  1043. IO_REPARSE_TAG_SIS = DWORD($80000007);
  1044. {$EXTERNALSYM IO_REPARSE_TAG_SIS}
  1045. IO_REPARSE_TAG_DFS = DWORD($8000000A);
  1046. {$EXTERNALSYM IO_REPARSE_TAG_DFS}
  1047. IO_REPARSE_TAG_FILTER_MANAGER = DWORD($8000000B);
  1048. {$EXTERNALSYM IO_REPARSE_TAG_FILTER_MANAGER}
  1049. IO_REPARSE_TAG_SYMLINK = DWORD($A000000C);
  1050. {$EXTERNALSYM IO_REPARSE_TAG_SYMLINK}
  1051. IO_REPARSE_TAG_DFSR = DWORD($80000012);
  1052. {$EXTERNALSYM IO_REPARSE_TAG_DFSR}
  1053. IO_REPARSE_TAG_NFS = DWORD($80000014);
  1054. {$EXTERNALSYM IO_REPARSE_TAG_NFS}
  1055. IO_COMPLETION_MODIFY_STATE = $0002;
  1056. {$EXTERNALSYM IO_COMPLETION_MODIFY_STATE}
  1057. IO_COMPLETION_ALL_ACCESS = DWORD(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3);
  1058. {$EXTERNALSYM IO_COMPLETION_ALL_ACCESS}
  1059. DUPLICATE_CLOSE_SOURCE = $00000001;
  1060. {$EXTERNALSYM DUPLICATE_CLOSE_SOURCE}
  1061. DUPLICATE_SAME_ACCESS = $00000002;
  1062. {$EXTERNALSYM DUPLICATE_SAME_ACCESS}
  1063. // line 4763
  1064. //
  1065. // File header format.
  1066. //
  1067. {$IFNDEF FPC}
  1068. type
  1069. PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
  1070. {$EXTERNALSYM PIMAGE_FILE_HEADER}
  1071. _IMAGE_FILE_HEADER = record
  1072. Machine: WORD;
  1073. NumberOfSections: WORD;
  1074. TimeDateStamp: DWORD;
  1075. PointerToSymbolTable: DWORD;
  1076. NumberOfSymbols: DWORD;
  1077. SizeOfOptionalHeader: WORD;
  1078. Characteristics: WORD;
  1079. end;
  1080. {$EXTERNALSYM _IMAGE_FILE_HEADER}
  1081. IMAGE_FILE_HEADER = _IMAGE_FILE_HEADER;
  1082. {$EXTERNALSYM IMAGE_FILE_HEADER}
  1083. TImageFileHeader = IMAGE_FILE_HEADER;
  1084. PImageFileHeader = PIMAGE_FILE_HEADER;
  1085. {$ENDIF ~FPC}
  1086. const
  1087. IMAGE_SIZEOF_FILE_HEADER = 20;
  1088. {$EXTERNALSYM IMAGE_SIZEOF_FILE_HEADER}
  1089. IMAGE_FILE_RELOCS_STRIPPED = $0001; // Relocation info stripped from file.
  1090. {$EXTERNALSYM IMAGE_FILE_RELOCS_STRIPPED}
  1091. IMAGE_FILE_EXECUTABLE_IMAGE = $0002; // File is executable (i.e. no unresolved externel references).
  1092. {$EXTERNALSYM IMAGE_FILE_EXECUTABLE_IMAGE}
  1093. IMAGE_FILE_LINE_NUMS_STRIPPED = $0004; // Line nunbers stripped from file.
  1094. {$EXTERNALSYM IMAGE_FILE_LINE_NUMS_STRIPPED}
  1095. IMAGE_FILE_LOCAL_SYMS_STRIPPED = $0008; // Local symbols stripped from file.
  1096. {$EXTERNALSYM IMAGE_FILE_LOCAL_SYMS_STRIPPED}
  1097. IMAGE_FILE_AGGRESIVE_WS_TRIM = $0010; // Agressively trim working set
  1098. {$EXTERNALSYM IMAGE_FILE_AGGRESIVE_WS_TRIM}
  1099. IMAGE_FILE_LARGE_ADDRESS_AWARE = $0020; // App can handle >2gb addresses
  1100. {$EXTERNALSYM IMAGE_FILE_LARGE_ADDRESS_AWARE}
  1101. IMAGE_FILE_BYTES_REVERSED_LO = $0080; // Bytes of machine word are reversed.
  1102. {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_LO}
  1103. IMAGE_FILE_32BIT_MACHINE = $0100; // 32 bit word machine.
  1104. {$EXTERNALSYM IMAGE_FILE_32BIT_MACHINE}
  1105. IMAGE_FILE_DEBUG_STRIPPED = $0200; // Debugging info stripped from file in .DBG file
  1106. {$EXTERNALSYM IMAGE_FILE_DEBUG_STRIPPED}
  1107. IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400; // If Image is on removable media, copy and run from the swap file.
  1108. {$EXTERNALSYM IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
  1109. IMAGE_FILE_NET_RUN_FROM_SWAP = $0800; // If Image is on Net, copy and run from the swap file.
  1110. {$EXTERNALSYM IMAGE_FILE_NET_RUN_FROM_SWAP}
  1111. IMAGE_FILE_SYSTEM = $1000; // System File.
  1112. {$EXTERNALSYM IMAGE_FILE_SYSTEM}
  1113. IMAGE_FILE_DLL = $2000; // File is a DLL.
  1114. {$EXTERNALSYM IMAGE_FILE_DLL}
  1115. IMAGE_FILE_UP_SYSTEM_ONLY = $4000; // File should only be run on a UP machine
  1116. {$EXTERNALSYM IMAGE_FILE_UP_SYSTEM_ONLY}
  1117. IMAGE_FILE_BYTES_REVERSED_HI = $8000; // Bytes of machine word are reversed.
  1118. {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_HI}
  1119. IMAGE_FILE_MACHINE_UNKNOWN = 0;
  1120. {$EXTERNALSYM IMAGE_FILE_MACHINE_UNKNOWN}
  1121. IMAGE_FILE_MACHINE_I386 = $014c; // Intel 386.
  1122. {$EXTERNALSYM IMAGE_FILE_MACHINE_I386}
  1123. IMAGE_FILE_MACHINE_R3000 = $0162; // MIPS little-endian, 0x160 big-endian
  1124. {$EXTERNALSYM IMAGE_FILE_MACHINE_R3000}
  1125. IMAGE_FILE_MACHINE_R4000 = $0166; // MIPS little-endian
  1126. {$EXTERNALSYM IMAGE_FILE_MACHINE_R4000}
  1127. IMAGE_FILE_MACHINE_R10000 = $0168; // MIPS little-endian
  1128. {$EXTERNALSYM IMAGE_FILE_MACHINE_R10000}
  1129. IMAGE_FILE_MACHINE_WCEMIPSV2 = $0169; // MIPS little-endian WCE v2
  1130. {$EXTERNALSYM IMAGE_FILE_MACHINE_WCEMIPSV2}
  1131. IMAGE_FILE_MACHINE_ALPHA = $0184; // Alpha_AXP
  1132. {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA}
  1133. IMAGE_FILE_MACHINE_SH3 = $01a2; // SH3 little-endian
  1134. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3}
  1135. IMAGE_FILE_MACHINE_SH3DSP = $01a3;
  1136. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3DSP}
  1137. IMAGE_FILE_MACHINE_SH3E = $01a4; // SH3E little-endian
  1138. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3E}
  1139. IMAGE_FILE_MACHINE_SH4 = $01a6; // SH4 little-endian
  1140. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH4}
  1141. IMAGE_FILE_MACHINE_SH5 = $01a8; // SH5
  1142. {$EXTERNALSYM IMAGE_FILE_MACHINE_SH5}
  1143. IMAGE_FILE_MACHINE_ARM = $01c0; // ARM Little-Endian
  1144. {$EXTERNALSYM IMAGE_FILE_MACHINE_ARM}
  1145. IMAGE_FILE_MACHINE_THUMB = $01c2;
  1146. {$EXTERNALSYM IMAGE_FILE_MACHINE_THUMB}
  1147. IMAGE_FILE_MACHINE_AM33 = $01d3;
  1148. {$EXTERNALSYM IMAGE_FILE_MACHINE_AM33}
  1149. IMAGE_FILE_MACHINE_POWERPC = $01F0; // IBM PowerPC Little-Endian
  1150. {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPC}
  1151. IMAGE_FILE_MACHINE_POWERPCFP = $01f1;
  1152. {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPCFP}
  1153. IMAGE_FILE_MACHINE_IA64 = $0200; // Intel 64
  1154. {$EXTERNALSYM IMAGE_FILE_MACHINE_IA64}
  1155. IMAGE_FILE_MACHINE_MIPS16 = $0266; // MIPS
  1156. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPS16}
  1157. IMAGE_FILE_MACHINE_ALPHA64 = $0284; // ALPHA64
  1158. {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA64}
  1159. IMAGE_FILE_MACHINE_MIPSFPU = $0366; // MIPS
  1160. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU}
  1161. IMAGE_FILE_MACHINE_MIPSFPU16 = $0466; // MIPS
  1162. {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU16}
  1163. IMAGE_FILE_MACHINE_AXP64 = IMAGE_FILE_MACHINE_ALPHA64;
  1164. {$EXTERNALSYM IMAGE_FILE_MACHINE_AXP64}
  1165. IMAGE_FILE_MACHINE_TRICORE = $0520; // Infineon
  1166. {$EXTERNALSYM IMAGE_FILE_MACHINE_TRICORE}
  1167. IMAGE_FILE_MACHINE_CEF = $0CEF;
  1168. {$EXTERNALSYM IMAGE_FILE_MACHINE_CEF}
  1169. IMAGE_FILE_MACHINE_EBC = $0EBC; // EFI Byte Code
  1170. {$EXTERNALSYM IMAGE_FILE_MACHINE_EBC}
  1171. IMAGE_FILE_MACHINE_AMD64 = $8664; // AMD64 (K8)
  1172. {$EXTERNALSYM IMAGE_FILE_MACHINE_AMD64}
  1173. IMAGE_FILE_MACHINE_M32R = $9041; // M32R little-endian
  1174. {$EXTERNALSYM IMAGE_FILE_MACHINE_M32R}
  1175. IMAGE_FILE_MACHINE_CEE = $C0EE;
  1176. {$EXTERNALSYM IMAGE_FILE_MACHINE_CEE}
  1177. //
  1178. // Directory format.
  1179. //
  1180. const
  1181. IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
  1182. {$EXTERNALSYM IMAGE_NUMBEROF_DIRECTORY_ENTRIES}
  1183. //
  1184. // Optional header format.
  1185. //
  1186. {$IFNDEF FPC}
  1187. type
  1188. PIMAGE_OPTIONAL_HEADER32 = ^IMAGE_OPTIONAL_HEADER32;
  1189. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER32}
  1190. {$IF declared(_IMAGE_OPTIONAL_HEADER32)} // XE2+
  1191. IMAGE_OPTIONAL_HEADER32 = _IMAGE_OPTIONAL_HEADER32;
  1192. {$ELSE}
  1193. IMAGE_OPTIONAL_HEADER32 = _IMAGE_OPTIONAL_HEADER;
  1194. {$IFEND}
  1195. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER32}
  1196. TImageOptionalHeader32 = IMAGE_OPTIONAL_HEADER32;
  1197. PImageOptionalHeader32 = PIMAGE_OPTIONAL_HEADER32;
  1198. PIMAGE_ROM_OPTIONAL_HEADER = ^IMAGE_ROM_OPTIONAL_HEADER;
  1199. {$EXTERNALSYM PIMAGE_ROM_OPTIONAL_HEADER}
  1200. _IMAGE_ROM_OPTIONAL_HEADER = record
  1201. Magic: Word;
  1202. MajorLinkerVersion: Byte;
  1203. MinorLinkerVersion: Byte;
  1204. SizeOfCode: DWORD;
  1205. SizeOfInitializedData: DWORD;
  1206. SizeOfUninitializedData: DWORD;
  1207. AddressOfEntryPoint: DWORD;
  1208. BaseOfCode: DWORD;
  1209. BaseOfData: DWORD;
  1210. BaseOfBss: DWORD;
  1211. GprMask: DWORD;
  1212. CprMask: array [0..3] of DWORD;
  1213. GpValue: DWORD;
  1214. end;
  1215. {$EXTERNALSYM _IMAGE_ROM_OPTIONAL_HEADER}
  1216. IMAGE_ROM_OPTIONAL_HEADER = _IMAGE_ROM_OPTIONAL_HEADER;
  1217. {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HEADER}
  1218. TImageRomOptionalHeader = IMAGE_ROM_OPTIONAL_HEADER;
  1219. PImageRomOptionalHeader = PIMAGE_ROM_OPTIONAL_HEADER;
  1220. PIMAGE_OPTIONAL_HEADER64 = ^IMAGE_OPTIONAL_HEADER64;
  1221. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER64}
  1222. _IMAGE_OPTIONAL_HEADER64 = record
  1223. Magic: Word;
  1224. MajorLinkerVersion: Byte;
  1225. MinorLinkerVersion: Byte;
  1226. SizeOfCode: DWORD;
  1227. SizeOfInitializedData: DWORD;
  1228. SizeOfUninitializedData: DWORD;
  1229. AddressOfEntryPoint: DWORD;
  1230. BaseOfCode: DWORD;
  1231. ImageBase: Int64;
  1232. SectionAlignment: DWORD;
  1233. FileAlignment: DWORD;
  1234. MajorOperatingSystemVersion: Word;
  1235. MinorOperatingSystemVersion: Word;
  1236. MajorImageVersion: Word;
  1237. MinorImageVersion: Word;
  1238. MajorSubsystemVersion: Word;
  1239. MinorSubsystemVersion: Word;
  1240. Win32VersionValue: DWORD;
  1241. SizeOfImage: DWORD;
  1242. SizeOfHeaders: DWORD;
  1243. CheckSum: DWORD;
  1244. Subsystem: Word;
  1245. DllCharacteristics: Word;
  1246. SizeOfStackReserve: Int64;
  1247. SizeOfStackCommit: Int64;
  1248. SizeOfHeapReserve: Int64;
  1249. SizeOfHeapCommit: Int64;
  1250. LoaderFlags: DWORD;
  1251. NumberOfRvaAndSizes: DWORD;
  1252. DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
  1253. end;
  1254. {$EXTERNALSYM _IMAGE_OPTIONAL_HEADER64}
  1255. IMAGE_OPTIONAL_HEADER64 = _IMAGE_OPTIONAL_HEADER64;
  1256. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER64}
  1257. TImageOptionalHeader64 = IMAGE_OPTIONAL_HEADER64;
  1258. PImageOptionalHeader64 = PIMAGE_OPTIONAL_HEADER64;
  1259. {$ENDIF ~FPC}
  1260. const
  1261. IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56;
  1262. {$EXTERNALSYM IMAGE_SIZEOF_ROM_OPTIONAL_HEADER}
  1263. IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28;
  1264. {$EXTERNALSYM IMAGE_SIZEOF_STD_OPTIONAL_HEADER}
  1265. IMAGE_SIZEOF_NT_OPTIONAL32_HEADER = 224;
  1266. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL32_HEADER}
  1267. IMAGE_SIZEOF_NT_OPTIONAL64_HEADER = 240;
  1268. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL64_HEADER}
  1269. IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10b;
  1270. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR32_MAGIC}
  1271. IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20b;
  1272. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR64_MAGIC}
  1273. IMAGE_ROM_OPTIONAL_HDR_MAGIC = $107;
  1274. {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HDR_MAGIC}
  1275. (*
  1276. type
  1277. IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
  1278. {$EXTERNALSYM IMAGE_OPTIONAL_HEADER}
  1279. PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
  1280. {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER}
  1281. *)
  1282. const
  1283. IMAGE_SIZEOF_NT_OPTIONAL_HEADER = IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
  1284. {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL_HEADER}
  1285. IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
  1286. {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR_MAGIC}
  1287. {$IFNDEF FPC}
  1288. type
  1289. PIMAGE_NT_HEADERS64 = ^IMAGE_NT_HEADERS64;
  1290. {$EXTERNALSYM PIMAGE_NT_HEADERS64}
  1291. _IMAGE_NT_HEADERS64 = record
  1292. Signature: DWORD;
  1293. FileHeader: IMAGE_FILE_HEADER;
  1294. OptionalHeader: IMAGE_OPTIONAL_HEADER64;
  1295. end;
  1296. {$EXTERNALSYM _IMAGE_NT_HEADERS64}
  1297. IMAGE_NT_HEADERS64 = _IMAGE_NT_HEADERS64;
  1298. {$EXTERNALSYM IMAGE_NT_HEADERS64}
  1299. TImageNtHeaders64 = IMAGE_NT_HEADERS64;
  1300. PImageNtHeaders64 = PIMAGE_NT_HEADERS64;
  1301. PIMAGE_NT_HEADERS32 = ^IMAGE_NT_HEADERS32;
  1302. {$EXTERNALSYM PIMAGE_NT_HEADERS32}
  1303. _IMAGE_NT_HEADERS = record
  1304. Signature: DWORD;
  1305. FileHeader: IMAGE_FILE_HEADER;
  1306. OptionalHeader: IMAGE_OPTIONAL_HEADER32;
  1307. end;
  1308. {$EXTERNALSYM _IMAGE_NT_HEADERS}
  1309. IMAGE_NT_HEADERS32 = _IMAGE_NT_HEADERS;
  1310. {$EXTERNALSYM IMAGE_NT_HEADERS32}
  1311. TImageNtHeaders32 = IMAGE_NT_HEADERS32;
  1312. PImageNtHeaders32 = PIMAGE_NT_HEADERS32;
  1313. {$ENDIF ~FPC}
  1314. // Subsystem Values
  1315. const
  1316. IMAGE_SUBSYSTEM_UNKNOWN = 0; // Unknown subsystem.
  1317. {$EXTERNALSYM IMAGE_SUBSYSTEM_UNKNOWN}
  1318. IMAGE_SUBSYSTEM_NATIVE = 1; // Image doesn't require a subsystem.
  1319. {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE}
  1320. IMAGE_SUBSYSTEM_WINDOWS_GUI = 2; // Image runs in the Windows GUI subsystem.
  1321. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_GUI}
  1322. IMAGE_SUBSYSTEM_WINDOWS_CUI = 3; // Image runs in the Windows character subsystem.
  1323. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CUI}
  1324. IMAGE_SUBSYSTEM_OS2_CUI = 5; // image runs in the OS/2 character subsystem.
  1325. {$EXTERNALSYM IMAGE_SUBSYSTEM_OS2_CUI}
  1326. IMAGE_SUBSYSTEM_POSIX_CUI = 7; // image runs in the Posix character subsystem.
  1327. {$EXTERNALSYM IMAGE_SUBSYSTEM_POSIX_CUI}
  1328. IMAGE_SUBSYSTEM_NATIVE_WINDOWS = 8; // image is a native Win9x driver.
  1329. {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE_WINDOWS}
  1330. IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9; // Image runs in the Windows CE subsystem.
  1331. {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CE_GUI}
  1332. IMAGE_SUBSYSTEM_EFI_APPLICATION = 10;
  1333. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_APPLICATION}
  1334. IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11;
  1335. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER}
  1336. IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12;
  1337. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER}
  1338. IMAGE_SUBSYSTEM_EFI_ROM = 13;
  1339. {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_ROM}
  1340. IMAGE_SUBSYSTEM_XBOX = 14;
  1341. {$EXTERNALSYM IMAGE_SUBSYSTEM_XBOX}
  1342. // DllCharacteristics Entries
  1343. // IMAGE_LIBRARY_PROCESS_INIT 0x0001 // Reserved.
  1344. // IMAGE_LIBRARY_PROCESS_TERM 0x0002 // Reserved.
  1345. // IMAGE_LIBRARY_THREAD_INIT 0x0004 // Reserved.
  1346. // IMAGE_LIBRARY_THREAD_TERM 0x0008 // Reserved.
  1347. IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = $0200; // Image understands isolation and doesn't want it
  1348. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_ISOLATION}
  1349. IMAGE_DLLCHARACTERISTICS_NO_SEH = $0400; // Image does not use SEH. No SE handler may reside in this image
  1350. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_SEH}
  1351. IMAGE_DLLCHARACTERISTICS_NO_BIND = $0800; // Do not bind this image.
  1352. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_BIND}
  1353. // 0x1000 // Reserved.
  1354. IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = $2000; // Driver uses WDM model
  1355. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_WDM_DRIVER}
  1356. // 0x4000 // Reserved.
  1357. IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
  1358. {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
  1359. // Directory Entries
  1360. IMAGE_DIRECTORY_ENTRY_EXPORT = 0; // Export Directory
  1361. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXPORT}
  1362. IMAGE_DIRECTORY_ENTRY_IMPORT = 1; // Import Directory
  1363. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IMPORT}
  1364. IMAGE_DIRECTORY_ENTRY_RESOURCE = 2; // Resource Directory
  1365. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_RESOURCE}
  1366. IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3; // Exception Directory
  1367. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXCEPTION}
  1368. IMAGE_DIRECTORY_ENTRY_SECURITY = 4; // Security Directory
  1369. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_SECURITY}
  1370. IMAGE_DIRECTORY_ENTRY_BASERELOC = 5; // Base Relocation Table
  1371. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BASERELOC}
  1372. IMAGE_DIRECTORY_ENTRY_DEBUG = 6; // Debug Directory
  1373. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DEBUG}
  1374. // IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage)
  1375. IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7; // Architecture Specific Data
  1376. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_ARCHITECTURE}
  1377. IMAGE_DIRECTORY_ENTRY_GLOBALPTR = 8; // RVA of GP
  1378. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_GLOBALPTR}
  1379. IMAGE_DIRECTORY_ENTRY_TLS = 9; // TLS Directory
  1380. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_TLS}
  1381. IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10; // Load Configuration Directory
  1382. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG}
  1383. IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT = 11; // Bound Import Directory in headers
  1384. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT}
  1385. IMAGE_DIRECTORY_ENTRY_IAT = 12; // Import Address Table
  1386. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IAT}
  1387. IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT = 13; // Delay Load Import Descriptors
  1388. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT}
  1389. IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14; // COM Runtime descriptor
  1390. {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR}
  1391. //
  1392. // Non-COFF Object file header
  1393. //
  1394. type
  1395. PAnonObjectHeader = ^ANON_OBJECT_HEADER;
  1396. ANON_OBJECT_HEADER = record
  1397. Sig1: Word; // Must be IMAGE_FILE_MACHINE_UNKNOWN
  1398. Sig2: Word; // Must be 0xffff
  1399. Version: Word; // >= 1 (implies the CLSID field is present)
  1400. Machine: Word;
  1401. TimeDateStamp: DWORD;
  1402. ClassID: TCLSID; // Used to invoke CoCreateInstance
  1403. SizeOfData: DWORD; // Size of data that follows the header
  1404. end;
  1405. {$EXTERNALSYM ANON_OBJECT_HEADER}
  1406. TAnonObjectHeader = ANON_OBJECT_HEADER;
  1407. //
  1408. // Section header format.
  1409. //
  1410. const
  1411. IMAGE_SIZEOF_SHORT_NAME = 8;
  1412. {$EXTERNALSYM IMAGE_SIZEOF_SHORT_NAME}
  1413. type
  1414. PPImageSectionHeader = ^PImageSectionHeader;
  1415. // IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.
  1416. function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
  1417. {$EXTERNALSYM IMAGE_FIRST_SECTION}
  1418. const
  1419. IMAGE_SIZEOF_SECTION_HEADER = 40;
  1420. {$EXTERNALSYM IMAGE_SIZEOF_SECTION_HEADER}
  1421. //
  1422. // Section characteristics.
  1423. //
  1424. // IMAGE_SCN_TYPE_REG 0x00000000 // Reserved.
  1425. // IMAGE_SCN_TYPE_DSECT 0x00000001 // Reserved.
  1426. // IMAGE_SCN_TYPE_NOLOAD 0x00000002 // Reserved.
  1427. // IMAGE_SCN_TYPE_GROUP 0x00000004 // Reserved.
  1428. IMAGE_SCN_TYPE_NO_PAD = $00000008; // Reserved.
  1429. {$EXTERNALSYM IMAGE_SCN_TYPE_NO_PAD}
  1430. // IMAGE_SCN_TYPE_COPY 0x00000010 // Reserved.
  1431. IMAGE_SCN_CNT_CODE = $00000020; // Section contains code.
  1432. {$EXTERNALSYM IMAGE_SCN_CNT_CODE}
  1433. IMAGE_SCN_CNT_INITIALIZED_DATA = $00000040; // Section contains initialized data.
  1434. {$EXTERNALSYM IMAGE_SCN_CNT_INITIALIZED_DATA}
  1435. IMAGE_SCN_CNT_UNINITIALIZED_DATA = $00000080; // Section contains uninitialized data.
  1436. {$EXTERNALSYM IMAGE_SCN_CNT_UNINITIALIZED_DATA}
  1437. IMAGE_SCN_LNK_OTHER = $00000100; // Reserved.
  1438. {$EXTERNALSYM IMAGE_SCN_LNK_OTHER}
  1439. IMAGE_SCN_LNK_INFO = $00000200; // Section contains comments or some other type of information.
  1440. {$EXTERNALSYM IMAGE_SCN_LNK_INFO}
  1441. // IMAGE_SCN_TYPE_OVER 0x00000400 // Reserved.
  1442. IMAGE_SCN_LNK_REMOVE = $00000800; // Section contents will not become part of image.
  1443. {$EXTERNALSYM IMAGE_SCN_LNK_REMOVE}
  1444. IMAGE_SCN_LNK_COMDAT = $00001000; // Section contents comdat.
  1445. {$EXTERNALSYM IMAGE_SCN_LNK_COMDAT}
  1446. // 0x00002000 // Reserved.
  1447. // IMAGE_SCN_MEM_PROTECTED - Obsolete 0x00004000
  1448. IMAGE_SCN_NO_DEFER_SPEC_EXC = $00004000; // Reset speculative exceptions handling bits in the TLB entries for this section.
  1449. {$EXTERNALSYM IMAGE_SCN_NO_DEFER_SPEC_EXC}
  1450. IMAGE_SCN_GPREL = $00008000; // Section content can be accessed relative to GP
  1451. {$EXTERNALSYM IMAGE_SCN_GPREL}
  1452. IMAGE_SCN_MEM_FARDATA = $00008000;
  1453. {$EXTERNALSYM IMAGE_SCN_MEM_FARDATA}
  1454. // IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x00010000
  1455. IMAGE_SCN_MEM_PURGEABLE = $00020000;
  1456. {$EXTERNALSYM IMAGE_SCN_MEM_PURGEABLE}
  1457. IMAGE_SCN_MEM_16BIT = $00020000;
  1458. {$EXTERNALSYM IMAGE_SCN_MEM_16BIT}
  1459. IMAGE_SCN_MEM_LOCKED = $00040000;
  1460. {$EXTERNALSYM IMAGE_SCN_MEM_LOCKED}
  1461. IMAGE_SCN_MEM_PRELOAD = $00080000;
  1462. {$EXTERNALSYM IMAGE_SCN_MEM_PRELOAD}
  1463. IMAGE_SCN_ALIGN_1BYTES = $00100000;
  1464. {$EXTERNALSYM IMAGE_SCN_ALIGN_1BYTES}
  1465. IMAGE_SCN_ALIGN_2BYTES = $00200000;
  1466. {$EXTERNALSYM IMAGE_SCN_ALIGN_2BYTES}
  1467. IMAGE_SCN_ALIGN_4BYTES = $00300000;
  1468. {$EXTERNALSYM IMAGE_SCN_ALIGN_4BYTES}
  1469. IMAGE_SCN_ALIGN_8BYTES = $00400000;
  1470. {$EXTERNALSYM IMAGE_SCN_ALIGN_8BYTES}
  1471. IMAGE_SCN_ALIGN_16BYTES = $00500000; // Default alignment if no others are specified.
  1472. {$EXTERNALSYM IMAGE_SCN_ALIGN_16BYTES}
  1473. IMAGE_SCN_ALIGN_32BYTES = $00600000;
  1474. {$EXTERNALSYM IMAGE_SCN_ALIGN_32BYTES}
  1475. IMAGE_SCN_ALIGN_64BYTES = $00700000;
  1476. {$EXTERNALSYM IMAGE_SCN_ALIGN_64BYTES}
  1477. IMAGE_SCN_ALIGN_128BYTES = $00800000;
  1478. {$EXTERNALSYM IMAGE_SCN_ALIGN_128BYTES}
  1479. IMAGE_SCN_ALIGN_256BYTES = $00900000;
  1480. {$EXTERNALSYM IMAGE_SCN_ALIGN_256BYTES}
  1481. IMAGE_SCN_ALIGN_512BYTES = $00A00000;
  1482. {$EXTERNALSYM IMAGE_SCN_ALIGN_512BYTES}
  1483. IMAGE_SCN_ALIGN_1024BYTES = $00B00000;
  1484. {$EXTERNALSYM IMAGE_SCN_ALIGN_1024BYTES}
  1485. IMAGE_SCN_ALIGN_2048BYTES = $00C00000;
  1486. {$EXTERNALSYM IMAGE_SCN_ALIGN_2048BYTES}
  1487. IMAGE_SCN_ALIGN_4096BYTES = $00D00000;
  1488. {$EXTERNALSYM IMAGE_SCN_ALIGN_4096BYTES}
  1489. IMAGE_SCN_ALIGN_8192BYTES = $00E00000;
  1490. {$EXTERNALSYM IMAGE_SCN_ALIGN_8192BYTES}
  1491. // Unused 0x00F00000
  1492. IMAGE_SCN_ALIGN_MASK = $00F00000;
  1493. {$EXTERNALSYM IMAGE_SCN_ALIGN_MASK}
  1494. IMAGE_SCN_LNK_NRELOC_OVFL = $01000000; // Section contains extended relocations.
  1495. {$EXTERNALSYM IMAGE_SCN_LNK_NRELOC_OVFL}
  1496. IMAGE_SCN_MEM_DISCARDABLE = $02000000; // Section can be discarded.
  1497. {$EXTERNALSYM IMAGE_SCN_MEM_DISCARDABLE}
  1498. IMAGE_SCN_MEM_NOT_CACHED = $04000000; // Section is not cacheable.
  1499. {$EXTERNALSYM IMAGE_SCN_MEM_NOT_CACHED}
  1500. IMAGE_SCN_MEM_NOT_PAGED = $08000000; // Section is not pageable.
  1501. {$EXTERNALSYM IMAGE_SCN_MEM_NOT_PAGED}
  1502. IMAGE_SCN_MEM_SHARED = $10000000; // Section is shareable.
  1503. {$EXTERNALSYM IMAGE_SCN_MEM_SHARED}
  1504. IMAGE_SCN_MEM_EXECUTE = $20000000; // Section is executable.
  1505. {$EXTERNALSYM IMAGE_SCN_MEM_EXECUTE}
  1506. IMAGE_SCN_MEM_READ = $40000000; // Section is readable.
  1507. {$EXTERNALSYM IMAGE_SCN_MEM_READ}
  1508. IMAGE_SCN_MEM_WRITE = DWORD($80000000); // Section is writeable.
  1509. {$EXTERNALSYM IMAGE_SCN_MEM_WRITE}
  1510. // line 6232
  1511. //
  1512. // Line number format.
  1513. //
  1514. type
  1515. TImgLineNoType = record
  1516. case Integer of
  1517. 0: (SymbolTableIndex: DWORD); // Symbol table index of function name if Linenumber is 0.
  1518. 1: (VirtualAddress: DWORD); // Virtual address of line number.
  1519. end;
  1520. PIMAGE_LINENUMBER = ^IMAGE_LINENUMBER;
  1521. {$EXTERNALSYM PIMAGE_LINENUMBER}
  1522. _IMAGE_LINENUMBER = record
  1523. Type_: TImgLineNoType;
  1524. Linenumber: WORD; // Line number.
  1525. end;
  1526. {$EXTERNALSYM _IMAGE_LINENUMBER}
  1527. IMAGE_LINENUMBER = _IMAGE_LINENUMBER;
  1528. {$EXTERNALSYM IMAGE_LINENUMBER}
  1529. TImageLineNumber = IMAGE_LINENUMBER;
  1530. PImageLineNumber = PIMAGE_LINENUMBER;
  1531. const
  1532. IMAGE_SIZEOF_LINENUMBER = 6;
  1533. {$EXTERNALSYM IMAGE_SIZEOF_LINENUMBER}
  1534. // #include "poppack.h" // Back to 4 byte packing
  1535. //
  1536. // Based relocation format.
  1537. //
  1538. type
  1539. PIMAGE_BASE_RELOCATION = ^IMAGE_BASE_RELOCATION;
  1540. {$EXTERNALSYM PIMAGE_BASE_RELOCATION}
  1541. _IMAGE_BASE_RELOCATION = record
  1542. VirtualAddress: DWORD;
  1543. SizeOfBlock: DWORD;
  1544. // WORD TypeOffset[1];
  1545. end;
  1546. {$EXTERNALSYM _IMAGE_BASE_RELOCATION}
  1547. IMAGE_BASE_RELOCATION = _IMAGE_BASE_RELOCATION;
  1548. {$EXTERNALSYM IMAGE_BASE_RELOCATION}
  1549. TImageBaseRelocation = IMAGE_BASE_RELOCATION;
  1550. PImageBaseRelocation = PIMAGE_BASE_RELOCATION;
  1551. const
  1552. IMAGE_SIZEOF_BASE_RELOCATION = 8;
  1553. {$EXTERNALSYM IMAGE_SIZEOF_BASE_RELOCATION}
  1554. //
  1555. // Based relocation types.
  1556. //
  1557. IMAGE_REL_BASED_ABSOLUTE = 0;
  1558. {$EXTERNALSYM IMAGE_REL_BASED_ABSOLUTE}
  1559. IMAGE_REL_BASED_HIGH = 1;
  1560. {$EXTERNALSYM IMAGE_REL_BASED_HIGH}
  1561. IMAGE_REL_BASED_LOW = 2;
  1562. {$EXTERNALSYM IMAGE_REL_BASED_LOW}
  1563. IMAGE_REL_BASED_HIGHLOW = 3;
  1564. {$EXTERNALSYM IMAGE_REL_BASED_HIGHLOW}
  1565. IMAGE_REL_BASED_HIGHADJ = 4;
  1566. {$EXTERNALSYM IMAGE_REL_BASED_HIGHADJ}
  1567. IMAGE_REL_BASED_MIPS_JMPADDR = 5;
  1568. {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR}
  1569. IMAGE_REL_BASED_MIPS_JMPADDR16 = 9;
  1570. {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR16}
  1571. IMAGE_REL_BASED_IA64_IMM64 = 9;
  1572. {$EXTERNALSYM IMAGE_REL_BASED_IA64_IMM64}
  1573. IMAGE_REL_BASED_DIR64 = 10;
  1574. {$EXTERNALSYM IMAGE_REL_BASED_DIR64}
  1575. //
  1576. // Archive format.
  1577. //
  1578. IMAGE_ARCHIVE_START_SIZE = 8;
  1579. {$EXTERNALSYM IMAGE_ARCHIVE_START_SIZE}
  1580. IMAGE_ARCHIVE_START = '!<arch>'#10;
  1581. {$EXTERNALSYM IMAGE_ARCHIVE_START}
  1582. IMAGE_ARCHIVE_END = '`'#10;
  1583. {$EXTERNALSYM IMAGE_ARCHIVE_END}
  1584. IMAGE_ARCHIVE_PAD = #10;
  1585. {$EXTERNALSYM IMAGE_ARCHIVE_PAD}
  1586. IMAGE_ARCHIVE_LINKER_MEMBER = '/ ';
  1587. {$EXTERNALSYM IMAGE_ARCHIVE_LINKER_MEMBER}
  1588. IMAGE_ARCHIVE_LONGNAMES_MEMBER = '// ';
  1589. {$EXTERNALSYM IMAGE_ARCHIVE_LONGNAMES_MEMBER}
  1590. type
  1591. PIMAGE_ARCHIVE_MEMBER_HEADER = ^IMAGE_ARCHIVE_MEMBER_HEADER;
  1592. {$EXTERNALSYM PIMAGE_ARCHIVE_MEMBER_HEADER}
  1593. _IMAGE_ARCHIVE_MEMBER_HEADER = record
  1594. Name: array [0..15] of Byte; // File member name - `/' terminated.
  1595. Date: array [0..11] of Byte; // File member date - decimal.
  1596. UserID: array [0..5] of Byte; // File member user id - decimal.
  1597. GroupID: array [0..5] of Byte; // File member group id - decimal.
  1598. Mode: array [0..7] of Byte; // File member mode - octal.
  1599. Size: array [0..9] of Byte; // File member size - decimal.
  1600. EndHeader: array [0..1] of Byte; // String to end header.
  1601. end;
  1602. {$EXTERNALSYM _IMAGE_ARCHIVE_MEMBER_HEADER}
  1603. IMAGE_ARCHIVE_MEMBER_HEADER = _IMAGE_ARCHIVE_MEMBER_HEADER;
  1604. {$EXTERNALSYM IMAGE_ARCHIVE_MEMBER_HEADER}
  1605. TImageArchiveMemberHeader = IMAGE_ARCHIVE_MEMBER_HEADER;
  1606. PImageArchiveMemberHeader = PIMAGE_ARCHIVE_MEMBER_HEADER;
  1607. const
  1608. IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60;
  1609. {$EXTERNALSYM IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR}
  1610. // line 6346
  1611. //
  1612. // DLL support.
  1613. //
  1614. //
  1615. // Export Format
  1616. //
  1617. type
  1618. PIMAGE_EXPORT_DIRECTORY = ^IMAGE_EXPORT_DIRECTORY;
  1619. {$EXTERNALSYM PIMAGE_EXPORT_DIRECTORY}
  1620. _IMAGE_EXPORT_DIRECTORY = record
  1621. Characteristics: DWORD;
  1622. TimeDateStamp: DWORD;
  1623. MajorVersion: Word;
  1624. MinorVersion: Word;
  1625. Name: DWORD;
  1626. Base: DWORD;
  1627. NumberOfFunctions: DWORD;
  1628. NumberOfNames: DWORD;
  1629. AddressOfFunctions: DWORD; // RVA from base of image
  1630. AddressOfNames: DWORD; // RVA from base of image
  1631. AddressOfNameOrdinals: DWORD; // RVA from base of image
  1632. end;
  1633. {$EXTERNALSYM _IMAGE_EXPORT_DIRECTORY}
  1634. IMAGE_EXPORT_DIRECTORY = _IMAGE_EXPORT_DIRECTORY;
  1635. {$EXTERNALSYM IMAGE_EXPORT_DIRECTORY}
  1636. TImageExportDirectory = IMAGE_EXPORT_DIRECTORY;
  1637. PImageExportDirectory = PIMAGE_EXPORT_DIRECTORY;
  1638. //
  1639. // Import Format
  1640. //
  1641. PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
  1642. {$EXTERNALSYM PIMAGE_IMPORT_BY_NAME}
  1643. _IMAGE_IMPORT_BY_NAME = record
  1644. Hint: Word;
  1645. Name: array [0..0] of AnsiChar;
  1646. end;
  1647. {$EXTERNALSYM _IMAGE_IMPORT_BY_NAME}
  1648. IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME;
  1649. {$EXTERNALSYM IMAGE_IMPORT_BY_NAME}
  1650. TImageImportByName = IMAGE_IMPORT_BY_NAME;
  1651. PImageImportByName = PIMAGE_IMPORT_BY_NAME;
  1652. // #include "pshpack8.h" // Use align 8 for the 64-bit IAT.
  1653. PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
  1654. {$EXTERNALSYM PIMAGE_THUNK_DATA64}
  1655. _IMAGE_THUNK_DATA64 = record
  1656. case Integer of
  1657. 0: (ForwarderString: ULONGLONG); // PBYTE
  1658. 1: (Function_: ULONGLONG); // PDWORD
  1659. 2: (Ordinal: ULONGLONG);
  1660. 3: (AddressOfData: ULONGLONG); // PIMAGE_IMPORT_BY_NAME
  1661. end;
  1662. {$EXTERNALSYM _IMAGE_THUNK_DATA64}
  1663. IMAGE_THUNK_DATA64 = _IMAGE_THUNK_DATA64;
  1664. {$EXTERNALSYM IMAGE_THUNK_DATA64}
  1665. TImageThunkData64 = IMAGE_THUNK_DATA64;
  1666. PImageThunkData64 = PIMAGE_THUNK_DATA64;
  1667. // #include "poppack.h" // Back to 4 byte packing
  1668. PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
  1669. {$EXTERNALSYM PIMAGE_THUNK_DATA32}
  1670. _IMAGE_THUNK_DATA32 = record
  1671. case Integer of
  1672. 0: (ForwarderString: DWORD); // PBYTE
  1673. 1: (Function_: DWORD); // PDWORD
  1674. 2: (Ordinal: DWORD);
  1675. 3: (AddressOfData: DWORD); // PIMAGE_IMPORT_BY_NAME
  1676. end;
  1677. {$EXTERNALSYM _IMAGE_THUNK_DATA32}
  1678. IMAGE_THUNK_DATA32 = _IMAGE_THUNK_DATA32;
  1679. {$EXTERNALSYM IMAGE_THUNK_DATA32}
  1680. TImageThunkData32 = IMAGE_THUNK_DATA32;
  1681. PImageThunkData32 = PIMAGE_THUNK_DATA32;
  1682. const
  1683. IMAGE_ORDINAL_FLAG64 = ULONGLONG($8000000000000000);
  1684. {$EXTERNALSYM IMAGE_ORDINAL_FLAG64}
  1685. IMAGE_ORDINAL_FLAG32 = DWORD($80000000);
  1686. {$EXTERNALSYM IMAGE_ORDINAL_FLAG32}
  1687. function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
  1688. {$EXTERNALSYM IMAGE_ORDINAL64}
  1689. function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
  1690. {$EXTERNALSYM IMAGE_ORDINAL32}
  1691. function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
  1692. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL64}
  1693. function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
  1694. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL32}
  1695. //
  1696. // Thread Local Storage
  1697. //
  1698. type
  1699. PIMAGE_TLS_CALLBACK = procedure (DllHandle: Pointer; Reason: DWORD; Reserved: Pointer); stdcall;
  1700. {$EXTERNALSYM PIMAGE_TLS_CALLBACK}
  1701. TImageTlsCallback = PIMAGE_TLS_CALLBACK;
  1702. PIMAGE_TLS_DIRECTORY64 = ^IMAGE_TLS_DIRECTORY64;
  1703. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY64}
  1704. _IMAGE_TLS_DIRECTORY64 = record
  1705. StartAddressOfRawData: ULONGLONG;
  1706. EndAddressOfRawData: ULONGLONG;
  1707. AddressOfIndex: ULONGLONG; // PDWORD
  1708. AddressOfCallBacks: ULONGLONG; // PIMAGE_TLS_CALLBACK *;
  1709. SizeOfZeroFill: DWORD;
  1710. Characteristics: DWORD;
  1711. end;
  1712. {$EXTERNALSYM _IMAGE_TLS_DIRECTORY64}
  1713. IMAGE_TLS_DIRECTORY64 = _IMAGE_TLS_DIRECTORY64;
  1714. {$EXTERNALSYM IMAGE_TLS_DIRECTORY64}
  1715. TImageTlsDirectory64 = IMAGE_TLS_DIRECTORY64;
  1716. {$EXTERNALSYM TImageTlsDirectory64}
  1717. PImageTlsDirectory64 = PIMAGE_TLS_DIRECTORY64;
  1718. {$EXTERNALSYM PImageTlsDirectory64}
  1719. PIMAGE_TLS_DIRECTORY32 = ^IMAGE_TLS_DIRECTORY32;
  1720. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY32}
  1721. _IMAGE_TLS_DIRECTORY32 = record
  1722. StartAddressOfRawData: DWORD;
  1723. EndAddressOfRawData: DWORD;
  1724. AddressOfIndex: DWORD; // PDWORD
  1725. AddressOfCallBacks: DWORD; // PIMAGE_TLS_CALLBACK *
  1726. SizeOfZeroFill: DWORD;
  1727. Characteristics: DWORD;
  1728. end;
  1729. {$EXTERNALSYM _IMAGE_TLS_DIRECTORY32}
  1730. IMAGE_TLS_DIRECTORY32 = _IMAGE_TLS_DIRECTORY32;
  1731. {$EXTERNALSYM IMAGE_TLS_DIRECTORY32}
  1732. TImageTlsDirectory32 = IMAGE_TLS_DIRECTORY32;
  1733. {$EXTERNALSYM TImageTlsDirectory32}
  1734. PImageTlsDirectory32 = PIMAGE_TLS_DIRECTORY32;
  1735. {$EXTERNALSYM PImageTlsDirectory32}
  1736. const
  1737. IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32;
  1738. {$EXTERNALSYM IMAGE_ORDINAL_FLAG}
  1739. function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
  1740. {$EXTERNALSYM IMAGE_ORDINAL}
  1741. type
  1742. IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
  1743. {$EXTERNALSYM IMAGE_THUNK_DATA}
  1744. PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
  1745. {$EXTERNALSYM PIMAGE_THUNK_DATA}
  1746. TImageThunkData = TImageThunkData32;
  1747. PImageThunkData = PImageThunkData32;
  1748. function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
  1749. {$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL}
  1750. type
  1751. IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
  1752. {$EXTERNALSYM IMAGE_TLS_DIRECTORY}
  1753. PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
  1754. {$EXTERNALSYM PIMAGE_TLS_DIRECTORY}
  1755. TImageTlsDirectory = TImageTlsDirectory32;
  1756. {$EXTERNALSYM TImageTlsDirectory}
  1757. PImageTlsDirectory = PImageTlsDirectory32;
  1758. {$EXTERNALSYM PImageTlsDirectory}
  1759. TIIDUnion = record
  1760. case Integer of
  1761. 0: (Characteristics: DWORD); // 0 for terminating null import descriptor
  1762. 1: (OriginalFirstThunk: DWORD); // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
  1763. end;
  1764. PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;
  1765. {$EXTERNALSYM PIMAGE_IMPORT_DESCRIPTOR}
  1766. _IMAGE_IMPORT_DESCRIPTOR = record
  1767. Union: TIIDUnion;
  1768. TimeDateStamp: DWORD; // 0 if not bound,
  1769. // -1 if bound, and real date\time stamp
  1770. // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
  1771. // O.W. date/time stamp of DLL bound to (Old BIND)
  1772. ForwarderChain: DWORD; // -1 if no forwarders
  1773. Name: DWORD;
  1774. FirstThunk: DWORD; // RVA to IAT (if bound this IAT has actual addresses)
  1775. end;
  1776. {$EXTERNALSYM _IMAGE_IMPORT_DESCRIPTOR}
  1777. IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
  1778. {$EXTERNALSYM IMAGE_IMPORT_DESCRIPTOR}
  1779. TImageImportDescriptor = IMAGE_IMPORT_DESCRIPTOR;
  1780. PImageImportDescriptor = PIMAGE_IMPORT_DESCRIPTOR;
  1781. //
  1782. // New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ]
  1783. //
  1784. type
  1785. PIMAGE_BOUND_IMPORT_DESCRIPTOR = ^IMAGE_BOUND_IMPORT_DESCRIPTOR;
  1786. {$EXTERNALSYM PIMAGE_BOUND_IMPORT_DESCRIPTOR}
  1787. _IMAGE_BOUND_IMPORT_DESCRIPTOR = record
  1788. TimeDateStamp: DWORD;
  1789. OffsetModuleName: Word;
  1790. NumberOfModuleForwarderRefs: Word;
  1791. // Array of zero or more IMAGE_BOUND_FORWARDER_REF follows
  1792. end;
  1793. {$EXTERNALSYM _IMAGE_BOUND_IMPORT_DESCRIPTOR}
  1794. IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR;
  1795. {$EXTERNALSYM IMAGE_BOUND_IMPORT_DESCRIPTOR}
  1796. TImageBoundImportDescriptor = IMAGE_BOUND_IMPORT_DESCRIPTOR;
  1797. PImageBoundImportDescriptor = PIMAGE_BOUND_IMPORT_DESCRIPTOR;
  1798. PIMAGE_BOUND_FORWARDER_REF = ^IMAGE_BOUND_FORWARDER_REF;
  1799. {$EXTERNALSYM PIMAGE_BOUND_FORWARDER_REF}
  1800. _IMAGE_BOUND_FORWARDER_REF = record
  1801. TimeDateStamp: DWORD;
  1802. OffsetModuleName: Word;
  1803. Reserved: Word;
  1804. end;
  1805. {$EXTERNALSYM _IMAGE_BOUND_FORWARDER_REF}
  1806. IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF;
  1807. {$EXTERNALSYM IMAGE_BOUND_FORWARDER_REF}
  1808. TImageBoundForwarderRef = IMAGE_BOUND_FORWARDER_REF;
  1809. PImageBoundForwarderRef = PIMAGE_BOUND_FORWARDER_REF;
  1810. //
  1811. // Resource Format.
  1812. //
  1813. //
  1814. // Resource directory consists of two counts, following by a variable length
  1815. // array of directory entries. The first count is the number of entries at
  1816. // beginning of the array that have actual names associated with each entry.
  1817. // The entries are in ascending order, case insensitive strings. The second
  1818. // count is the number of entries that immediately follow the named entries.
  1819. // This second count identifies the number of entries that have 16-bit integer
  1820. // Ids as their name. These entries are also sorted in ascending order.
  1821. //
  1822. // This structure allows fast lookup by either name or number, but for any
  1823. // given resource entry only one form of lookup is supported, not both.
  1824. // This is consistant with the syntax of the .RC file and the .RES file.
  1825. //
  1826. PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
  1827. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY}
  1828. _IMAGE_RESOURCE_DIRECTORY = record
  1829. Characteristics: DWORD;
  1830. TimeDateStamp: DWORD;
  1831. MajorVersion: Word;
  1832. MinorVersion: Word;
  1833. NumberOfNamedEntries: Word;
  1834. NumberOfIdEntries: Word;
  1835. // IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
  1836. end;
  1837. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY}
  1838. IMAGE_RESOURCE_DIRECTORY = _IMAGE_RESOURCE_DIRECTORY;
  1839. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY}
  1840. TImageResourceDirectory = IMAGE_RESOURCE_DIRECTORY;
  1841. PImageResourceDirectory = PIMAGE_RESOURCE_DIRECTORY;
  1842. const
  1843. IMAGE_RESOURCE_NAME_IS_STRING = DWORD($80000000);
  1844. {$EXTERNALSYM IMAGE_RESOURCE_NAME_IS_STRING}
  1845. IMAGE_RESOURCE_DATA_IS_DIRECTORY = DWORD($80000000);
  1846. {$EXTERNALSYM IMAGE_RESOURCE_DATA_IS_DIRECTORY}
  1847. //
  1848. // Each directory contains the 32-bit Name of the entry and an offset,
  1849. // relative to the beginning of the resource directory of the data associated
  1850. // with this directory entry. If the name of the entry is an actual text
  1851. // string instead of an integer Id, then the high order bit of the name field
  1852. // is set to one and the low order 31-bits are an offset, relative to the
  1853. // beginning of the resource directory of the string, which is of type
  1854. // IMAGE_RESOURCE_DIRECTORY_STRING. Otherwise the high bit is clear and the
  1855. // low-order 16-bits are the integer Id that identify this resource directory
  1856. // entry. If the directory entry is yet another resource directory (i.e. a
  1857. // subdirectory), then the high order bit of the offset field will be
  1858. // set to indicate this. Otherwise the high bit is clear and the offset
  1859. // field points to a resource data entry.
  1860. //
  1861. type
  1862. PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
  1863. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_ENTRY}
  1864. _IMAGE_RESOURCE_DIRECTORY_ENTRY = record
  1865. case Integer of
  1866. 0: (
  1867. // DWORD NameOffset:31;
  1868. // DWORD NameIsString:1;
  1869. NameOffset: DWORD;
  1870. OffsetToData: DWORD
  1871. );
  1872. 1: (
  1873. Name: DWORD;
  1874. // DWORD OffsetToDirectory:31;
  1875. // DWORD DataIsDirectory:1;
  1876. OffsetToDirectory: DWORD;
  1877. );
  1878. 2: (
  1879. Id: WORD;
  1880. );
  1881. end;
  1882. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_ENTRY}
  1883. IMAGE_RESOURCE_DIRECTORY_ENTRY = _IMAGE_RESOURCE_DIRECTORY_ENTRY;
  1884. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_ENTRY}
  1885. TImageResourceDirectoryEntry = IMAGE_RESOURCE_DIRECTORY_ENTRY;
  1886. PImageResourceDirectoryEntry = PIMAGE_RESOURCE_DIRECTORY_ENTRY;
  1887. //
  1888. // For resource directory entries that have actual string names, the Name
  1889. // field of the directory entry points to an object of the following type.
  1890. // All of these string objects are stored together after the last resource
  1891. // directory entry and before the first resource data object. This minimizes
  1892. // the impact of these variable length objects on the alignment of the fixed
  1893. // size directory entry objects.
  1894. //
  1895. type
  1896. PIMAGE_RESOURCE_DIRECTORY_STRING = ^IMAGE_RESOURCE_DIRECTORY_STRING;
  1897. {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_STRING}
  1898. _IMAGE_RESOURCE_DIRECTORY_STRING = record
  1899. Length: Word;
  1900. NameString: array [0..0] of AnsiCHAR;
  1901. end;
  1902. {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_STRING}
  1903. IMAGE_RESOURCE_DIRECTORY_STRING = _IMAGE_RESOURCE_DIRECTORY_STRING;
  1904. {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_STRING}
  1905. TImageResourceDirectoryString = IMAGE_RESOURCE_DIRECTORY_STRING;
  1906. PImageResourceDirectoryString = PIMAGE_RESOURCE_DIRECTORY_STRING;
  1907. PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
  1908. {$EXTERNALSYM PIMAGE_RESOURCE_DIR_STRING_U}
  1909. _IMAGE_RESOURCE_DIR_STRING_U = record
  1910. Length: Word;
  1911. NameString: array [0..0] of WCHAR;
  1912. end;
  1913. {$EXTERNALSYM _IMAGE_RESOURCE_DIR_STRING_U}
  1914. IMAGE_RESOURCE_DIR_STRING_U = _IMAGE_RESOURCE_DIR_STRING_U;
  1915. {$EXTERNALSYM IMAGE_RESOURCE_DIR_STRING_U}
  1916. TImageResourceDirStringU = IMAGE_RESOURCE_DIR_STRING_U;
  1917. PImageResourceDirStringU = PIMAGE_RESOURCE_DIR_STRING_U;
  1918. //
  1919. // Each resource data entry describes a leaf node in the resource directory
  1920. // tree. It contains an offset, relative to the beginning of the resource
  1921. // directory of the data for the resource, a size field that gives the number
  1922. // of bytes of data at that offset, a CodePage that should be used when
  1923. // decoding code point values within the resource data. Typically for new
  1924. // applications the code page would be the unicode code page.
  1925. //
  1926. PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
  1927. {$EXTERNALSYM PIMAGE_RESOURCE_DATA_ENTRY}
  1928. _IMAGE_RESOURCE_DATA_ENTRY = record
  1929. OffsetToData: DWORD;
  1930. Size: DWORD;
  1931. CodePage: DWORD;
  1932. Reserved: DWORD;
  1933. end;
  1934. {$EXTERNALSYM _IMAGE_RESOURCE_DATA_ENTRY}
  1935. IMAGE_RESOURCE_DATA_ENTRY = _IMAGE_RESOURCE_DATA_ENTRY;
  1936. {$EXTERNALSYM IMAGE_RESOURCE_DATA_ENTRY}
  1937. TImageResourceDataEntry = IMAGE_RESOURCE_DATA_ENTRY;
  1938. PImageResourceDataEntry = PIMAGE_RESOURCE_DATA_ENTRY;
  1939. //
  1940. // Load Configuration Directory Entry
  1941. //
  1942. {$IFNDEF FPC}
  1943. type
  1944. PIMAGE_LOAD_CONFIG_DIRECTORY32 = ^IMAGE_LOAD_CONFIG_DIRECTORY32;
  1945. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY32}
  1946. IMAGE_LOAD_CONFIG_DIRECTORY32 = record
  1947. Size: DWORD;
  1948. TimeDateStamp: DWORD;
  1949. MajorVersion: WORD;
  1950. MinorVersion: WORD;
  1951. GlobalFlagsClear: DWORD;
  1952. GlobalFlagsSet: DWORD;
  1953. CriticalSectionDefaultTimeout: DWORD;
  1954. DeCommitFreeBlockThreshold: DWORD;
  1955. DeCommitTotalFreeThreshold: DWORD;
  1956. LockPrefixTable: DWORD; // VA
  1957. MaximumAllocationSize: DWORD;
  1958. VirtualMemoryThreshold: DWORD;
  1959. ProcessHeapFlags: DWORD;
  1960. ProcessAffinityMask: DWORD;
  1961. CSDVersion: WORD;
  1962. Reserved1: WORD;
  1963. EditList: DWORD; // VA
  1964. SecurityCookie: DWORD; // VA
  1965. SEHandlerTable: DWORD; // VA
  1966. SEHandlerCount: DWORD;
  1967. end;
  1968. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY32}
  1969. TImageLoadConfigDirectory32 = IMAGE_LOAD_CONFIG_DIRECTORY32;
  1970. PImageLoadConfigDirectory32 = PIMAGE_LOAD_CONFIG_DIRECTORY32;
  1971. PIMAGE_LOAD_CONFIG_DIRECTORY64 = ^IMAGE_LOAD_CONFIG_DIRECTORY64;
  1972. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY64}
  1973. IMAGE_LOAD_CONFIG_DIRECTORY64 = record
  1974. Size: DWORD;
  1975. TimeDateStamp: DWORD;
  1976. MajorVersion: WORD;
  1977. MinorVersion: WORD;
  1978. GlobalFlagsClear: DWORD;
  1979. GlobalFlagsSet: DWORD;
  1980. CriticalSectionDefaultTimeout: DWORD;
  1981. DeCommitFreeBlockThreshold: ULONGLONG;
  1982. DeCommitTotalFreeThreshold: ULONGLONG;
  1983. LockPrefixTable: ULONGLONG; // VA
  1984. MaximumAllocationSize: ULONGLONG;
  1985. VirtualMemoryThreshold: ULONGLONG;
  1986. ProcessAffinityMask: ULONGLONG;
  1987. ProcessHeapFlags: DWORD;
  1988. CSDVersion: WORD;
  1989. Reserved1: WORD;
  1990. EditList: ULONGLONG; // VA
  1991. SecurityCookie: ULONGLONG; // VA
  1992. SEHandlerTable: ULONGLONG; // VA
  1993. SEHandlerCount: ULONGLONG;
  1994. end;
  1995. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY64}
  1996. TImageLoadConfigDirectory64 = IMAGE_LOAD_CONFIG_DIRECTORY64;
  1997. PImageLoadConfigDirectory64 = PIMAGE_LOAD_CONFIG_DIRECTORY64;
  1998. IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
  1999. {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY}
  2000. PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
  2001. {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY}
  2002. TImageLoadConfigDirectory = TImageLoadConfigDirectory32;
  2003. PImageLoadConfigDirectory = PImageLoadConfigDirectory32;
  2004. {$ENDIF ~FPC}
  2005. // line 6802
  2006. //
  2007. // Debug Format
  2008. //
  2009. (*
  2010. type
  2011. PIMAGE_DEBUG_DIRECTORY = ^IMAGE_DEBUG_DIRECTORY;
  2012. {$EXTERNALSYM PIMAGE_DEBUG_DIRECTORY}
  2013. _IMAGE_DEBUG_DIRECTORY = record
  2014. Characteristics: DWORD;
  2015. TimeDateStamp: DWORD;
  2016. MajorVersion: Word;
  2017. MinorVersion: Word;
  2018. Type_: DWORD;
  2019. SizeOfData: DWORD;
  2020. AddressOfRawData: DWORD;
  2021. PointerToRawData: DWORD;
  2022. end;
  2023. {$EXTERNALSYM _IMAGE_DEBUG_DIRECTORY}
  2024. IMAGE_DEBUG_DIRECTORY = _IMAGE_DEBUG_DIRECTORY;
  2025. {$EXTERNALSYM IMAGE_DEBUG_DIRECTORY}
  2026. TImageDebugDirectory = IMAGE_DEBUG_DIRECTORY;
  2027. PImageDebugDirectory = PIMAGE_DEBUG_DIRECTORY;
  2028. const
  2029. IMAGE_DEBUG_TYPE_UNKNOWN = 0;
  2030. {$EXTERNALSYM IMAGE_DEBUG_TYPE_UNKNOWN}
  2031. IMAGE_DEBUG_TYPE_COFF = 1;
  2032. {$EXTERNALSYM IMAGE_DEBUG_TYPE_COFF}
  2033. IMAGE_DEBUG_TYPE_CODEVIEW = 2;
  2034. {$EXTERNALSYM IMAGE_DEBUG_TYPE_CODEVIEW}
  2035. IMAGE_DEBUG_TYPE_FPO = 3;
  2036. {$EXTERNALSYM IMAGE_DEBUG_TYPE_FPO}
  2037. IMAGE_DEBUG_TYPE_MISC = 4;
  2038. {$EXTERNALSYM IMAGE_DEBUG_TYPE_MISC}
  2039. IMAGE_DEBUG_TYPE_EXCEPTION = 5;
  2040. {$EXTERNALSYM IMAGE_DEBUG_TYPE_EXCEPTION}
  2041. IMAGE_DEBUG_TYPE_FIXUP = 6;
  2042. {$EXTERNALSYM IMAGE_DEBUG_TYPE_FIXUP}
  2043. IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7;
  2044. {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_TO_SRC}
  2045. IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8;
  2046. {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_FROM_SRC}
  2047. IMAGE_DEBUG_TYPE_BORLAND = 9;
  2048. {$EXTERNALSYM IMAGE_DEBUG_TYPE_BORLAND}
  2049. IMAGE_DEBUG_TYPE_RESERVED10 = 10;
  2050. {$EXTERNALSYM IMAGE_DEBUG_TYPE_RESERVED10}
  2051. IMAGE_DEBUG_TYPE_CLSID = 11;
  2052. {$EXTERNALSYM IMAGE_DEBUG_TYPE_CLSID}
  2053. *)
  2054. {$IFNDEF FPC}
  2055. type
  2056. PIMAGE_COFF_SYMBOLS_HEADER = ^IMAGE_COFF_SYMBOLS_HEADER;
  2057. {$EXTERNALSYM PIMAGE_COFF_SYMBOLS_HEADER}
  2058. _IMAGE_COFF_SYMBOLS_HEADER = record
  2059. NumberOfSymbols: DWORD;
  2060. LvaToFirstSymbol: DWORD;
  2061. NumberOfLinenumbers: DWORD;
  2062. LvaToFirstLinenumber: DWORD;
  2063. RvaToFirstByteOfCode: DWORD;
  2064. RvaToLastByteOfCode: DWORD;
  2065. RvaToFirstByteOfData: DWORD;
  2066. RvaToLastByteOfData: DWORD;
  2067. end;
  2068. {$EXTERNALSYM _IMAGE_COFF_SYMBOLS_HEADER}
  2069. IMAGE_COFF_SYMBOLS_HEADER = _IMAGE_COFF_SYMBOLS_HEADER;
  2070. {$EXTERNALSYM IMAGE_COFF_SYMBOLS_HEADER}
  2071. TImageCoffSymbolsHeader = IMAGE_COFF_SYMBOLS_HEADER;
  2072. PImageCoffSymbolsHeader = PIMAGE_COFF_SYMBOLS_HEADER;
  2073. {$ENDIF ~FPC}
  2074. const
  2075. FRAME_FPO = 0;
  2076. {$EXTERNALSYM FRAME_FPO}
  2077. FRAME_TRAP = 1;
  2078. {$EXTERNALSYM FRAME_TRAP}
  2079. FRAME_TSS = 2;
  2080. {$EXTERNALSYM FRAME_TSS}
  2081. FRAME_NONFPO = 3;
  2082. {$EXTERNALSYM FRAME_NONFPO}
  2083. FPOFLAGS_PROLOG = $00FF; // # bytes in prolog
  2084. FPOFLAGS_REGS = $0700; // # regs saved
  2085. FPOFLAGS_HAS_SEH = $0800; // TRUE if SEH in func
  2086. FPOFLAGS_USE_BP = $1000; // TRUE if EBP has been allocated
  2087. FPOFLAGS_RESERVED = $2000; // reserved for future use
  2088. FPOFLAGS_FRAME = $C000; // frame type
  2089. {$IFNDEF FPC}
  2090. type
  2091. PFPO_DATA = ^FPO_DATA;
  2092. {$EXTERNALSYM PFPO_DATA}
  2093. _FPO_DATA = record
  2094. ulOffStart: DWORD; // offset 1st byte of function code
  2095. cbProcSize: DWORD; // # bytes in function
  2096. cdwLocals: DWORD; // # bytes in locals/4
  2097. cdwParams: WORD; // # bytes in params/4
  2098. Flags: WORD;
  2099. end;
  2100. {$EXTERNALSYM _FPO_DATA}
  2101. FPO_DATA = _FPO_DATA;
  2102. {$EXTERNALSYM FPO_DATA}
  2103. TFpoData = FPO_DATA;
  2104. PFpoData = PFPO_DATA;
  2105. {$ENDIF ~FPC}
  2106. const
  2107. SIZEOF_RFPO_DATA = 16;
  2108. {$EXTERNALSYM SIZEOF_RFPO_DATA}
  2109. IMAGE_DEBUG_MISC_EXENAME = 1;
  2110. {$EXTERNALSYM IMAGE_DEBUG_MISC_EXENAME}
  2111. type
  2112. PIMAGE_DEBUG_MISC = ^IMAGE_DEBUG_MISC;
  2113. {$EXTERNALSYM PIMAGE_DEBUG_MISC}
  2114. _IMAGE_DEBUG_MISC = record
  2115. DataType: DWORD; // type of misc data, see defines
  2116. Length: DWORD; // total length of record, rounded to four byte multiple.
  2117. Unicode: ByteBool; // TRUE if data is unicode string
  2118. Reserved: array [0..2] of Byte;
  2119. Data: array [0..0] of Byte; // Actual data
  2120. end;
  2121. {$EXTERNALSYM _IMAGE_DEBUG_MISC}
  2122. IMAGE_DEBUG_MISC = _IMAGE_DEBUG_MISC;
  2123. {$EXTERNALSYM IMAGE_DEBUG_MISC}
  2124. TImageDebugMisc = IMAGE_DEBUG_MISC;
  2125. PImageDebugMisc = PIMAGE_DEBUG_MISC;
  2126. //
  2127. // Function table extracted from MIPS/ALPHA/IA64 images. Does not contain
  2128. // information needed only for runtime support. Just those fields for
  2129. // each entry needed by a debugger.
  2130. //
  2131. {$IFNDEF FPC}
  2132. PIMAGE_FUNCTION_ENTRY = ^IMAGE_FUNCTION_ENTRY;
  2133. {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY}
  2134. _IMAGE_FUNCTION_ENTRY = record
  2135. StartingAddress: DWORD;
  2136. EndingAddress: DWORD;
  2137. EndOfPrologue: DWORD;
  2138. end;
  2139. {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY}
  2140. IMAGE_FUNCTION_ENTRY = _IMAGE_FUNCTION_ENTRY;
  2141. {$EXTERNALSYM IMAGE_FUNCTION_ENTRY}
  2142. TImageFunctionEntry = IMAGE_FUNCTION_ENTRY;
  2143. PImageFunctionEntry = PIMAGE_FUNCTION_ENTRY;
  2144. PIMAGE_FUNCTION_ENTRY64 = ^IMAGE_FUNCTION_ENTRY64;
  2145. {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY64}
  2146. _IMAGE_FUNCTION_ENTRY64 = record
  2147. StartingAddress: ULONGLONG;
  2148. EndingAddress: ULONGLONG;
  2149. case Integer of
  2150. 0: (EndOfPrologue: ULONGLONG);
  2151. 1: (UnwindInfoAddress: ULONGLONG);
  2152. end;
  2153. {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY64}
  2154. IMAGE_FUNCTION_ENTRY64 = _IMAGE_FUNCTION_ENTRY64;
  2155. {$EXTERNALSYM IMAGE_FUNCTION_ENTRY64}
  2156. TImageFunctionEntry64 = IMAGE_FUNCTION_ENTRY64;
  2157. PImageFunctionEntry64 = PIMAGE_FUNCTION_ENTRY64;
  2158. {$ENDIF ~FPC}
  2159. //
  2160. // Debugging information can be stripped from an image file and placed
  2161. // in a separate .DBG file, whose file name part is the same as the
  2162. // image file name part (e.g. symbols for CMD.EXE could be stripped
  2163. // and placed in CMD.DBG). This is indicated by the IMAGE_FILE_DEBUG_STRIPPED
  2164. // flag in the Characteristics field of the file header. The beginning of
  2165. // the .DBG file contains the following structure which captures certain
  2166. // information from the image file. This allows a debug to proceed even if
  2167. // the original image file is not accessable. This header is followed by
  2168. // zero of more IMAGE_SECTION_HEADER structures, followed by zero or more
  2169. // IMAGE_DEBUG_DIRECTORY structures. The latter structures and those in
  2170. // the image file contain file offsets relative to the beginning of the
  2171. // .DBG file.
  2172. //
  2173. // If symbols have been stripped from an image, the IMAGE_DEBUG_MISC structure
  2174. // is left in the image file, but not mapped. This allows a debugger to
  2175. // compute the name of the .DBG file, from the name of the image in the
  2176. // IMAGE_DEBUG_MISC structure.
  2177. //
  2178. PIMAGE_SEPARATE_DEBUG_HEADER = ^IMAGE_SEPARATE_DEBUG_HEADER;
  2179. {$EXTERNALSYM PIMAGE_SEPARATE_DEBUG_HEADER}
  2180. _IMAGE_SEPARATE_DEBUG_HEADER = record
  2181. Signature: Word;
  2182. Flags: Word;
  2183. Machine: Word;
  2184. Characteristics: Word;
  2185. TimeDateStamp: DWORD;
  2186. CheckSum: DWORD;
  2187. ImageBase: DWORD;
  2188. SizeOfImage: DWORD;
  2189. NumberOfSections: DWORD;
  2190. ExportedNamesSize: DWORD;
  2191. DebugDirectorySize: DWORD;
  2192. SectionAlignment: DWORD;
  2193. Reserved: array [0..1] of DWORD;
  2194. end;
  2195. {$EXTERNALSYM _IMAGE_SEPARATE_DEBUG_HEADER}
  2196. IMAGE_SEPARATE_DEBUG_HEADER = _IMAGE_SEPARATE_DEBUG_HEADER;
  2197. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_HEADER}
  2198. TImageSeparateDebugHeader = IMAGE_SEPARATE_DEBUG_HEADER;
  2199. PImageSeparateDebugHeader = PIMAGE_SEPARATE_DEBUG_HEADER;
  2200. _NON_PAGED_DEBUG_INFO = record
  2201. Signature: WORD;
  2202. Flags: WORD;
  2203. Size: DWORD;
  2204. Machine: WORD;
  2205. Characteristics: WORD;
  2206. TimeDateStamp: DWORD;
  2207. CheckSum: DWORD;
  2208. SizeOfImage: DWORD;
  2209. ImageBase: ULONGLONG;
  2210. //DebugDirectorySize
  2211. //IMAGE_DEBUG_DIRECTORY
  2212. end;
  2213. {$EXTERNALSYM _NON_PAGED_DEBUG_INFO}
  2214. NON_PAGED_DEBUG_INFO = _NON_PAGED_DEBUG_INFO;
  2215. {$EXTERNALSYM NON_PAGED_DEBUG_INFO}
  2216. PNON_PAGED_DEBUG_INFO = ^NON_PAGED_DEBUG_INFO;
  2217. {$EXTERNALSYM PNON_PAGED_DEBUG_INFO}
  2218. const
  2219. IMAGE_SEPARATE_DEBUG_SIGNATURE = $4944;
  2220. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_SIGNATURE}
  2221. NON_PAGED_DEBUG_SIGNATURE = $494E;
  2222. {$EXTERNALSYM NON_PAGED_DEBUG_SIGNATURE}
  2223. IMAGE_SEPARATE_DEBUG_FLAGS_MASK = $8000;
  2224. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_FLAGS_MASK}
  2225. IMAGE_SEPARATE_DEBUG_MISMATCH = $8000; // when DBG was updated, the old checksum didn't match.
  2226. {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_MISMATCH}
  2227. //
  2228. // The .arch section is made up of headers, each describing an amask position/value
  2229. // pointing to an array of IMAGE_ARCHITECTURE_ENTRY's. Each "array" (both the header
  2230. // and entry arrays) are terminiated by a quadword of 0xffffffffL.
  2231. //
  2232. // NOTE: There may be quadwords of 0 sprinkled around and must be skipped.
  2233. //
  2234. const
  2235. IAHMASK_VALUE = $00000001; // 1 -> code section depends on mask bit
  2236. // 0 -> new instruction depends on mask bit
  2237. IAHMASK_MBZ7 = $000000FE; // MBZ
  2238. IAHMASK_SHIFT = $0000FF00; // Amask bit in question for this fixup
  2239. IAHMASK_MBZ16 = DWORD($FFFF0000); // MBZ
  2240. type
  2241. PIMAGE_ARCHITECTURE_HEADER = ^IMAGE_ARCHITECTURE_HEADER;
  2242. {$EXTERNALSYM PIMAGE_ARCHITECTURE_HEADER}
  2243. _ImageArchitectureHeader = record
  2244. Mask: DWORD;
  2245. FirstEntryRVA: DWORD; // RVA into .arch section to array of ARCHITECTURE_ENTRY's
  2246. end;
  2247. {$EXTERNALSYM _ImageArchitectureHeader}
  2248. IMAGE_ARCHITECTURE_HEADER = _ImageArchitectureHeader;
  2249. {$EXTERNALSYM IMAGE_ARCHITECTURE_HEADER}
  2250. TImageArchitectureHeader = IMAGE_ARCHITECTURE_HEADER;
  2251. PImageArchitectureHeader = PIMAGE_ARCHITECTURE_HEADER;
  2252. PIMAGE_ARCHITECTURE_ENTRY = ^IMAGE_ARCHITECTURE_ENTRY;
  2253. {$EXTERNALSYM PIMAGE_ARCHITECTURE_ENTRY}
  2254. _ImageArchitectureEntry = record
  2255. FixupInstRVA: DWORD; // RVA of instruction to fixup
  2256. NewInst: DWORD; // fixup instruction (see alphaops.h)
  2257. end;
  2258. {$EXTERNALSYM _ImageArchitectureEntry}
  2259. IMAGE_ARCHITECTURE_ENTRY = _ImageArchitectureEntry;
  2260. {$EXTERNALSYM IMAGE_ARCHITECTURE_ENTRY}
  2261. TImageArchitectureEntry = IMAGE_ARCHITECTURE_ENTRY;
  2262. PImageArchitectureEntry = PIMAGE_ARCHITECTURE_ENTRY;
  2263. // #include "poppack.h" // Back to the initial value
  2264. // The following structure defines the new import object. Note the values of the first two fields,
  2265. // which must be set as stated in order to differentiate old and new import members.
  2266. // Following this structure, the linker emits two null-terminated strings used to recreate the
  2267. // import at the time of use. The first string is the import's name, the second is the dll's name.
  2268. const
  2269. IMPORT_OBJECT_HDR_SIG2 = $ffff;
  2270. {$EXTERNALSYM IMPORT_OBJECT_HDR_SIG2}
  2271. const
  2272. IOHFLAGS_TYPE = $0003; // IMPORT_TYPE
  2273. IAHFLAGS_NAMETYPE = $001C; // IMPORT_NAME_TYPE
  2274. IAHFLAGS_RESERVED = $FFE0; // Reserved. Must be zero.
  2275. type
  2276. PImportObjectHeader = ^IMPORT_OBJECT_HEADER;
  2277. IMPORT_OBJECT_HEADER = record
  2278. Sig1: WORD; // Must be IMAGE_FILE_MACHINE_UNKNOWN
  2279. Sig2: WORD; // Must be IMPORT_OBJECT_HDR_SIG2.
  2280. Version: WORD;
  2281. Machine: WORD;
  2282. TimeDateStamp: DWORD; // Time/date stamp
  2283. SizeOfData: DWORD; // particularly useful for incremental links
  2284. OrdinalOrHint: record
  2285. case Integer of
  2286. 0: (Ordinal: WORD); // if grf & IMPORT_OBJECT_ORDINAL
  2287. 1: (Flags: DWORD);
  2288. end;
  2289. Flags: WORD;
  2290. //WORD Type : 2; // IMPORT_TYPE
  2291. //WORD NameType : 3; // IMPORT_NAME_TYPE
  2292. //WORD Reserved : 11; // Reserved. Must be zero.
  2293. end;
  2294. {$EXTERNALSYM IMPORT_OBJECT_HEADER}
  2295. TImportObjectHeader = IMPORT_OBJECT_HEADER;
  2296. IMPORT_OBJECT_TYPE = (IMPORT_OBJECT_CODE, IMPORT_OBJECT_DATA, IMPORT_OBJECT_CONST);
  2297. {$EXTERNALSYM IMPORT_OBJECT_TYPE}
  2298. TImportObjectType = IMPORT_OBJECT_TYPE;
  2299. IMPORT_OBJECT_NAME_TYPE = (
  2300. IMPORT_OBJECT_ORDINAL, // Import by ordinal
  2301. IMPORT_OBJECT_NAME, // Import name == public symbol name.
  2302. IMPORT_OBJECT_NAME_NO_PREFIX, // Import name == public symbol name skipping leading ?, @, or optionally _.
  2303. IMPORT_OBJECT_NAME_UNDECORATE); // Import name == public symbol name skipping leading ?, @, or optionally _
  2304. // and truncating at first @
  2305. {$EXTERNALSYM IMPORT_OBJECT_NAME_TYPE}
  2306. TImportObjectNameType = IMPORT_OBJECT_NAME_TYPE;
  2307. ReplacesCorHdrNumericDefines = DWORD;
  2308. {$EXTERNALSYM ReplacesCorHdrNumericDefines}
  2309. const
  2310. // COM+ Header entry point flags.
  2311. COMIMAGE_FLAGS_ILONLY = $00000001;
  2312. {$EXTERNALSYM COMIMAGE_FLAGS_ILONLY}
  2313. COMIMAGE_FLAGS_32BITREQUIRED = $00000002;
  2314. {$EXTERNALSYM COMIMAGE_FLAGS_32BITREQUIRED}
  2315. COMIMAGE_FLAGS_IL_LIBRARY = $00000004;
  2316. {$EXTERNALSYM COMIMAGE_FLAGS_IL_LIBRARY}
  2317. COMIMAGE_FLAGS_STRONGNAMESIGNED = $00000008;
  2318. {$EXTERNALSYM COMIMAGE_FLAGS_STRONGNAMESIGNED}
  2319. COMIMAGE_FLAGS_TRACKDEBUGDATA = $00010000;
  2320. {$EXTERNALSYM COMIMAGE_FLAGS_TRACKDEBUGDATA}
  2321. // Version flags for image.
  2322. COR_VERSION_MAJOR_V2 = 2;
  2323. {$EXTERNALSYM COR_VERSION_MAJOR_V2}
  2324. COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2;
  2325. {$EXTERNALSYM COR_VERSION_MAJOR}
  2326. COR_VERSION_MINOR = 0;
  2327. {$EXTERNALSYM COR_VERSION_MINOR}
  2328. COR_DELETED_NAME_LENGTH = 8;
  2329. {$EXTERNALSYM COR_DELETED_NAME_LENGTH}
  2330. COR_VTABLEGAP_NAME_LENGTH = 8;
  2331. {$EXTERNALSYM COR_VTABLEGAP_NAME_LENGTH}
  2332. // Maximum size of a NativeType descriptor.
  2333. NATIVE_TYPE_MAX_CB = 1;
  2334. {$EXTERNALSYM NATIVE_TYPE_MAX_CB}
  2335. COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= $FF;
  2336. {$EXTERNALSYM COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE}
  2337. // #defines for the MIH FLAGS
  2338. IMAGE_COR_MIH_METHODRVA = $01;
  2339. {$EXTERNALSYM IMAGE_COR_MIH_METHODRVA}
  2340. IMAGE_COR_MIH_EHRVA = $02;
  2341. {$EXTERNALSYM IMAGE_COR_MIH_EHRVA}
  2342. IMAGE_COR_MIH_BASICBLOCK = $08;
  2343. {$EXTERNALSYM IMAGE_COR_MIH_BASICBLOCK}
  2344. // V-table constants
  2345. COR_VTABLE_32BIT = $01; // V-table slots are 32-bits in size.
  2346. {$EXTERNALSYM COR_VTABLE_32BIT}
  2347. COR_VTABLE_64BIT = $02; // V-table slots are 64-bits in size.
  2348. {$EXTERNALSYM COR_VTABLE_64BIT}
  2349. COR_VTABLE_FROM_UNMANAGED = $04; // If set, transition from unmanaged.
  2350. {$EXTERNALSYM COR_VTABLE_FROM_UNMANAGED}
  2351. COR_VTABLE_CALL_MOST_DERIVED = $10; // Call most derived method described by
  2352. {$EXTERNALSYM COR_VTABLE_CALL_MOST_DERIVED}
  2353. // EATJ constants
  2354. IMAGE_COR_EATJ_THUNK_SIZE = 32; // Size of a jump thunk reserved range.
  2355. {$EXTERNALSYM IMAGE_COR_EATJ_THUNK_SIZE}
  2356. // Max name lengths
  2357. // Change to unlimited name lengths.
  2358. MAX_CLASS_NAME = 1024;
  2359. {$EXTERNALSYM MAX_CLASS_NAME}
  2360. MAX_PACKAGE_NAME = 1024;
  2361. {$EXTERNALSYM MAX_PACKAGE_NAME}
  2362. // COM+ 2.0 header structure.
  2363. type
  2364. IMAGE_COR20_HEADER = record
  2365. // Header versioning
  2366. cb: DWORD;
  2367. MajorRuntimeVersion: WORD;
  2368. MinorRuntimeVersion: WORD;
  2369. // Symbol table and startup information
  2370. MetaData: IMAGE_DATA_DIRECTORY;
  2371. Flags: DWORD;
  2372. EntryPointToken: DWORD;
  2373. // Binding information
  2374. Resources: IMAGE_DATA_DIRECTORY;
  2375. StrongNameSignature: IMAGE_DATA_DIRECTORY;
  2376. // Regular fixup and binding information
  2377. CodeManagerTable: IMAGE_DATA_DIRECTORY;
  2378. VTableFixups: IMAGE_DATA_DIRECTORY;
  2379. ExportAddressTableJumps: IMAGE_DATA_DIRECTORY;
  2380. // Precompiled image info (internal use only - set to zero)
  2381. ManagedNativeHeader: IMAGE_DATA_DIRECTORY;
  2382. end;
  2383. PIMAGE_COR20_HEADER = ^IMAGE_COR20_HEADER;
  2384. TImageCor20Header = IMAGE_COR20_HEADER;
  2385. PImageCor20Header = PIMAGE_COR20_HEADER;
  2386. // line 7351
  2387. const
  2388. COMPRESSION_FORMAT_NONE = ($0000);
  2389. {$EXTERNALSYM COMPRESSION_FORMAT_NONE}
  2390. COMPRESSION_FORMAT_DEFAULT = ($0001);
  2391. {$EXTERNALSYM COMPRESSION_FORMAT_DEFAULT}
  2392. COMPRESSION_FORMAT_LZNT1 = ($0002);
  2393. {$EXTERNALSYM COMPRESSION_FORMAT_LZNT1}
  2394. COMPRESSION_ENGINE_STANDARD = ($0000);
  2395. {$EXTERNALSYM COMPRESSION_ENGINE_STANDARD}
  2396. COMPRESSION_ENGINE_MAXIMUM = ($0100);
  2397. {$EXTERNALSYM COMPRESSION_ENGINE_MAXIMUM}
  2398. COMPRESSION_ENGINE_HIBER = ($0200);
  2399. {$EXTERNALSYM COMPRESSION_ENGINE_HIBER}
  2400. // line 7462
  2401. type
  2402. POSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
  2403. {$EXTERNALSYM POSVERSIONINFOEXA}
  2404. _OSVERSIONINFOEXA = record
  2405. dwOSVersionInfoSize: DWORD;
  2406. dwMajorVersion: DWORD;
  2407. dwMinorVersion: DWORD;
  2408. dwBuildNumber: DWORD;
  2409. dwPlatformId: DWORD;
  2410. szCSDVersion: array [0..127] of ANSICHAR; // Maintenance string for PSS usage
  2411. wServicePackMajor: WORD;
  2412. wServicePackMinor: WORD;
  2413. wSuiteMask: WORD;
  2414. wProductType: BYTE;
  2415. wReserved: BYTE;
  2416. end;
  2417. {$EXTERNALSYM _OSVERSIONINFOEXA}
  2418. OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
  2419. {$EXTERNALSYM OSVERSIONINFOEXA}
  2420. LPOSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
  2421. {$EXTERNALSYM LPOSVERSIONINFOEXA}
  2422. TOSVersionInfoExA = _OSVERSIONINFOEXA;
  2423. POSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  2424. {$EXTERNALSYM POSVERSIONINFOEXW}
  2425. _OSVERSIONINFOEXW = record
  2426. dwOSVersionInfoSize: DWORD;
  2427. dwMajorVersion: DWORD;
  2428. dwMinorVersion: DWORD;
  2429. dwBuildNumber: DWORD;
  2430. dwPlatformId: DWORD;
  2431. szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
  2432. wServicePackMajor: WORD;
  2433. wServicePackMinor: WORD;
  2434. wSuiteMask: WORD;
  2435. wProductType: BYTE;
  2436. wReserved: BYTE;
  2437. end;
  2438. {$EXTERNALSYM _OSVERSIONINFOEXW}
  2439. OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
  2440. {$EXTERNALSYM OSVERSIONINFOEXW}
  2441. LPOSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
  2442. {$EXTERNALSYM LPOSVERSIONINFOEXW}
  2443. RTL_OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
  2444. {$EXTERNALSYM RTL_OSVERSIONINFOEXW}
  2445. PRTL_OSVERSIONINFOEXW = ^RTL_OSVERSIONINFOEXW;
  2446. {$EXTERNALSYM PRTL_OSVERSIONINFOEXW}
  2447. TOSVersionInfoExW = _OSVERSIONINFOEXW;
  2448. {$IFDEF SUPPORTS_UNICODE}
  2449. OSVERSIONINFOEX = OSVERSIONINFOEXW;
  2450. {$EXTERNALSYM OSVERSIONINFOEX}
  2451. POSVERSIONINFOEX = POSVERSIONINFOEXW;
  2452. {$EXTERNALSYM POSVERSIONINFOEX}
  2453. LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
  2454. {$EXTERNALSYM LPOSVERSIONINFOEX}
  2455. TOSVersionInfoEx = TOSVersionInfoExW;
  2456. {$ELSE ~SUPPORTS_UNICODE}
  2457. OSVERSIONINFOEX = OSVERSIONINFOEXA;
  2458. {$EXTERNALSYM OSVERSIONINFOEX}
  2459. POSVERSIONINFOEX = POSVERSIONINFOEXA;
  2460. {$EXTERNALSYM POSVERSIONINFOEX}
  2461. LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA;
  2462. {$EXTERNALSYM LPOSVERSIONINFOEX}
  2463. TOSVersionInfoEx = TOSVersionInfoExA;
  2464. {$ENDIF ~SUPPORTS_UNICODE}
  2465. //
  2466. // RtlVerifyVersionInfo() conditions
  2467. //
  2468. const
  2469. VER_EQUAL = 1;
  2470. {$EXTERNALSYM VER_EQUAL}
  2471. VER_GREATER = 2;
  2472. {$EXTERNALSYM VER_GREATER}
  2473. VER_GREATER_EQUAL = 3;
  2474. {$EXTERNALSYM VER_GREATER_EQUAL}
  2475. VER_LESS = 4;
  2476. {$EXTERNALSYM VER_LESS}
  2477. VER_LESS_EQUAL = 5;
  2478. {$EXTERNALSYM VER_LESS_EQUAL}
  2479. VER_AND = 6;
  2480. {$EXTERNALSYM VER_AND}
  2481. VER_OR = 7;
  2482. {$EXTERNALSYM VER_OR}
  2483. VER_CONDITION_MASK = 7;
  2484. {$EXTERNALSYM VER_CONDITION_MASK}
  2485. VER_NUM_BITS_PER_CONDITION_MASK = 3;
  2486. {$EXTERNALSYM VER_NUM_BITS_PER_CONDITION_MASK}
  2487. //
  2488. // RtlVerifyVersionInfo() type mask bits
  2489. //
  2490. VER_MINORVERSION = $0000001;
  2491. {$EXTERNALSYM VER_MINORVERSION}
  2492. VER_MAJORVERSION = $0000002;
  2493. {$EXTERNALSYM VER_MAJORVERSION}
  2494. VER_BUILDNUMBER = $0000004;
  2495. {$EXTERNALSYM VER_BUILDNUMBER}
  2496. VER_PLATFORMID = $0000008;
  2497. {$EXTERNALSYM VER_PLATFORMID}
  2498. VER_SERVICEPACKMINOR = $0000010;
  2499. {$EXTERNALSYM VER_SERVICEPACKMINOR}
  2500. VER_SERVICEPACKMAJOR = $0000020;
  2501. {$EXTERNALSYM VER_SERVICEPACKMAJOR}
  2502. VER_SUITENAME = $0000040;
  2503. {$EXTERNALSYM VER_SUITENAME}
  2504. VER_PRODUCT_TYPE = $0000080;
  2505. {$EXTERNALSYM VER_PRODUCT_TYPE}
  2506. //
  2507. // RtlVerifyVersionInfo() os product type values
  2508. //
  2509. VER_NT_WORKSTATION = $0000001;
  2510. {$EXTERNALSYM VER_NT_WORKSTATION}
  2511. VER_NT_DOMAIN_CONTROLLER = $0000002;
  2512. {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
  2513. VER_NT_SERVER = $0000003;
  2514. {$EXTERNALSYM VER_NT_SERVER}
  2515. //
  2516. // dwPlatformId defines:
  2517. //
  2518. VER_PLATFORM_WIN32s = 0;
  2519. {$EXTERNALSYM VER_PLATFORM_WIN32s}
  2520. VER_PLATFORM_WIN32_WINDOWS = 1;
  2521. {$EXTERNALSYM VER_PLATFORM_WIN32_WINDOWS}
  2522. VER_PLATFORM_WIN32_NT = 2;
  2523. {$EXTERNALSYM VER_PLATFORM_WIN32_NT}
  2524. const
  2525. //
  2526. //
  2527. // Predefined Value Types.
  2528. //
  2529. REG_NONE = ( 0 ); // No value type
  2530. {$EXTERNALSYM REG_NONE}
  2531. REG_SZ = ( 1 ); // Unicode nul terminated string
  2532. {$EXTERNALSYM REG_SZ}
  2533. REG_EXPAND_SZ = ( 2 ); // Unicode nul terminated string
  2534. {$EXTERNALSYM REG_EXPAND_SZ}
  2535. // (with environment variable references)
  2536. REG_BINARY = ( 3 ); // Free form binary
  2537. {$EXTERNALSYM REG_BINARY}
  2538. REG_DWORD = ( 4 ); // 32-bit number
  2539. {$EXTERNALSYM REG_DWORD}
  2540. REG_DWORD_LITTLE_ENDIAN = ( 4 ); // 32-bit number (same as REG_DWORD)
  2541. {$EXTERNALSYM REG_DWORD_LITTLE_ENDIAN}
  2542. REG_DWORD_BIG_ENDIAN = ( 5 ); // 32-bit number
  2543. {$EXTERNALSYM REG_DWORD_BIG_ENDIAN}
  2544. REG_LINK = ( 6 ); // Symbolic Link (unicode)
  2545. {$EXTERNALSYM REG_LINK}
  2546. REG_MULTI_SZ = ( 7 ); // Multiple Unicode strings
  2547. {$EXTERNALSYM REG_MULTI_SZ}
  2548. REG_RESOURCE_LIST = ( 8 ); // Resource list in the resource map
  2549. {$EXTERNALSYM REG_RESOURCE_LIST}
  2550. REG_FULL_RESOURCE_DESCRIPTOR = ( 9 ); // Resource list in the hardware description
  2551. {$EXTERNALSYM REG_FULL_RESOURCE_DESCRIPTOR}
  2552. REG_RESOURCE_REQUIREMENTS_LIST = ( 10 );
  2553. {$EXTERNALSYM REG_RESOURCE_REQUIREMENTS_LIST}
  2554. REG_QWORD = ( 11 ); // 64-bit number
  2555. {$EXTERNALSYM REG_QWORD}
  2556. REG_QWORD_LITTLE_ENDIAN = ( 11 ); // 64-bit number (same as REG_QWORD)
  2557. {$EXTERNALSYM REG_QWORD_LITTLE_ENDIAN}
  2558. // Windows 7 debugging types
  2559. type
  2560. _CONTEXT_CHUNK = packed record
  2561. Offset: Integer;
  2562. Length: DWORD;
  2563. end;
  2564. {$EXTERNALSYM _CONTEXT_CHUNK}
  2565. CONTEXT_CHUNK = _CONTEXT_CHUNK;
  2566. {$EXTERNALSYM CONTEXT_CHUNK}
  2567. PCONTEXT_CHUNK = ^_CONTEXT_CHUNK;
  2568. {$EXTERNALSYM PCONTEXT_CHUNK}
  2569. type
  2570. _CONTEXT_EX = packed record
  2571. //
  2572. // The total length of the structure starting from the chunk with
  2573. // the smallest offset. N.B. that the offset may be negative.
  2574. //
  2575. All: CONTEXT_CHUNK;
  2576. //
  2577. // Wrapper for the traditional CONTEXT structure. N.B. the size of
  2578. // the chunk may be less than sizeof(CONTEXT) is some cases (when
  2579. // CONTEXT_EXTENDED_REGISTERS is not set on x86 for instance).
  2580. //
  2581. Legacy: CONTEXT_CHUNK;
  2582. //
  2583. // CONTEXT_XSTATE: Extended processor state chunk. The state is
  2584. // stored in the same format XSAVE operation strores it with
  2585. // exception of the first 512 bytes, i.e. staring from
  2586. // XSAVE_AREA_HEADER. The lower two bits corresponding FP and
  2587. // SSE state must be zero.
  2588. //
  2589. XState: CONTEXT_CHUNK;
  2590. end;
  2591. {$EXTERNALSYM _CONTEXT_EX}
  2592. CONTEXT_EX = _CONTEXT_EX;
  2593. {$EXTERNALSYM CONTEXT_EX}
  2594. PCONTEXT_EX = ^_CONTEXT_EX;
  2595. {$EXTERNALSYM PCONTEXT_EX}
  2596. //
  2597. // Known extended CPU state feature IDs
  2598. //
  2599. const
  2600. XSTATE_LEGACY_FLOATING_POINT = 0;
  2601. {$EXTERNALSYM XSTATE_LEGACY_FLOATING_POINT}
  2602. XSTATE_LEGACY_SSE = 1;
  2603. {$EXTERNALSYM XSTATE_LEGACY_SSE}
  2604. XSTATE_GSSE = 2;
  2605. {$EXTERNALSYM XSTATE_GSSE}
  2606. XSTATE_MASK_LEGACY_FLOATING_POINT = Int64(1) shl XSTATE_LEGACY_FLOATING_POINT;
  2607. {$EXTERNALSYM XSTATE_MASK_LEGACY_FLOATING_POINT}
  2608. XSTATE_MASK_LEGACY_SSE = Int64(1) shl XSTATE_LEGACY_SSE;
  2609. {$EXTERNALSYM XSTATE_MASK_LEGACY_SSE}
  2610. XSTATE_MASK_LEGACY = XSTATE_MASK_LEGACY_FLOATING_POINT or XSTATE_MASK_LEGACY_SSE;
  2611. {$EXTERNALSYM XSTATE_MASK_LEGACY}
  2612. XSTATE_MASK_GSSE = Int64(1) shl XSTATE_GSSE;
  2613. {$EXTERNALSYM XSTATE_MASK_GSSE}
  2614. MAXIMUM_XSTATE_FEATURES = 64;
  2615. {$EXTERNALSYM MAXIMUM_XSTATE_FEATURES}
  2616. //
  2617. // The following flags control the contents of the CONTEXT structure.
  2618. //
  2619. const
  2620. CONTEXT_i386 = $00010000; // this assumes that i386 and
  2621. {$EXTERNALSYM CONTEXT_i386}
  2622. CONTEXT_i486 = $00010000; // i486 have identical context records
  2623. {$EXTERNALSYM CONTEXT_i486}
  2624. CONTEXT_CONTROL = CONTEXT_i386 or $00000001; // SS:SP, CS:IP, FLAGS, BP
  2625. {$EXTERNALSYM CONTEXT_CONTROL}
  2626. CONTEXT_INTEGER = CONTEXT_i386 or $00000002; // AX, BX, CX, DX, SI, DI
  2627. {$EXTERNALSYM CONTEXT_INTEGER}
  2628. CONTEXT_SEGMENTS = CONTEXT_i386 or $00000004; // DS, ES, FS, GS
  2629. {$EXTERNALSYM CONTEXT_SEGMENTS}
  2630. CONTEXT_FLOATING_POINT = CONTEXT_i386 or $00000008; // 387 state
  2631. {$EXTERNALSYM CONTEXT_FLOATING_POINT}
  2632. CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 or $00000010; // DB 0-3,6,7
  2633. {$EXTERNALSYM CONTEXT_DEBUG_REGISTERS}
  2634. CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 or $00000020; // cpu specific extensions
  2635. {$EXTERNALSYM CONTEXT_EXTENDED_REGISTERS}
  2636. CONTEXT_FULL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS;
  2637. {$EXTERNALSYM CONTEXT_FULL}
  2638. CONTEXT_ALL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS or CONTEXT_FLOATING_POINT or
  2639. CONTEXT_DEBUG_REGISTERS or CONTEXT_EXTENDED_REGISTERS;
  2640. {$EXTERNALSYM CONTEXT_ALL}
  2641. CONTEXT_XSTATE = CONTEXT_i386 or $00000040;
  2642. {$EXTERNALSYM CONTEXT_XSTATE}
  2643. // line 160
  2644. //
  2645. // File creation flags must start at the high end since they
  2646. // are combined with the attributes
  2647. //
  2648. const
  2649. FILE_FLAG_WRITE_THROUGH = DWORD($80000000);
  2650. {$EXTERNALSYM FILE_FLAG_WRITE_THROUGH}
  2651. FILE_FLAG_OVERLAPPED = $40000000;
  2652. {$EXTERNALSYM FILE_FLAG_OVERLAPPED}
  2653. FILE_FLAG_NO_BUFFERING = $20000000;
  2654. {$EXTERNALSYM FILE_FLAG_NO_BUFFERING}
  2655. FILE_FLAG_RANDOM_ACCESS = $10000000;
  2656. {$EXTERNALSYM FILE_FLAG_RANDOM_ACCESS}
  2657. FILE_FLAG_SEQUENTIAL_SCAN = $08000000;
  2658. {$EXTERNALSYM FILE_FLAG_SEQUENTIAL_SCAN}
  2659. FILE_FLAG_DELETE_ON_CLOSE = $04000000;
  2660. {$EXTERNALSYM FILE_FLAG_DELETE_ON_CLOSE}
  2661. FILE_FLAG_BACKUP_SEMANTICS = $02000000;
  2662. {$EXTERNALSYM FILE_FLAG_BACKUP_SEMANTICS}
  2663. FILE_FLAG_POSIX_SEMANTICS = $01000000;
  2664. {$EXTERNALSYM FILE_FLAG_POSIX_SEMANTICS}
  2665. FILE_FLAG_OPEN_REPARSE_POINT = $00200000;
  2666. {$EXTERNALSYM FILE_FLAG_OPEN_REPARSE_POINT}
  2667. FILE_FLAG_OPEN_NO_RECALL = $00100000;
  2668. {$EXTERNALSYM FILE_FLAG_OPEN_NO_RECALL}
  2669. FILE_FLAG_FIRST_PIPE_INSTANCE = $00080000;
  2670. {$EXTERNALSYM FILE_FLAG_FIRST_PIPE_INSTANCE}
  2671. // line 2727
  2672. type
  2673. _MEMORYSTATUSEX = packed record
  2674. dwLength: DWORD;
  2675. dwMemoryLoad: DWORD;
  2676. ullTotalPhys: Int64;
  2677. ullAvailPhys: Int64;
  2678. ullTotalPageFile: Int64;
  2679. ullAvailPageFile: Int64;
  2680. ullTotalVirtual: Int64;
  2681. ullAvailVirtual: Int64;
  2682. ullAvailExtendedVirtual: Int64;
  2683. end;
  2684. {$EXTERNALSYM _MEMORYSTATUSEX}
  2685. MEMORYSTATUSEX = _MEMORYSTATUSEX;
  2686. {$EXTERNALSYM MEMORYSTATUSEX}
  2687. LPMEMORYSTATUSEX = ^_MEMORYSTATUSEX;
  2688. {$EXTERNALSYM LPMEMORYSTATUSEX}
  2689. TMemoryStatusEx = _MEMORYSTATUSEX;
  2690. function GlobalMemoryStatusEx(out lpBuffer: TMemoryStatusEx): BOOL; stdcall;
  2691. // line 3189
  2692. function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD;
  2693. out lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD;
  2694. var lpContext: Pointer): BOOL; stdcall;
  2695. {$EXTERNALSYM BackupSeek}
  2696. // line 5454
  2697. function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
  2698. const NewState: TTokenPrivileges; BufferLength: DWORD;
  2699. PreviousState: PTokenPrivileges;
  2700. ReturnLength: PDWORD
  2701. ): BOOL; stdcall;
  2702. {$EXTERNALSYM AdjustTokenPrivileges}
  2703. {
  2704. From: Ray Lischner <[email protected]>
  2705. Subject: CreateMutex bug
  2706. Date: 1999/12/10
  2707. Message-ID: <[email protected]>#1/1
  2708. Content-Transfer-Encoding: 7bit
  2709. Organization: Tempest Software, Inc., Corvallis, Oregon
  2710. Content-Type: text/plain; charset=us-ascii
  2711. Mime-Version: 1.0
  2712. Newsgroups: borland.public.delphi.winapi
  2713. Windows NT 4 has a bug in CreateMutex. The second argument is documented
  2714. to be a BOOL, but in truth, the CreateMutex interprets 1 as True and all
  2715. other values as False. (Do I detect an "if (bInitialOwner == TRUE)" in
  2716. the implementation of CreateMutex?)
  2717. The problem is that Delphi declares CreateMutex according to the
  2718. documentation, so bInitialOwner is declared as LongBool. Delphi maps
  2719. True values to $FFFFFFFF, which should work, but doesn't in this case.
  2720. My workaround is to declare CreateMutex with a LongInt as the second
  2721. argument, and pass the value 1 for True.
  2722. I have not had this problem on Windows 98.
  2723. --
  2724. Ray Lischner, author of Delphi in a Nutshell (coming later this year)
  2725. http://www.bardware.com and http://www.tempest-sw.com
  2726. }
  2727. function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle; stdcall;
  2728. {$EXTERNALSYM CreateMutex}
  2729. // alternative conversion for WinNT 4.0 SP6 and later (OSVersionInfoEx instead of OSVersionInfo)
  2730. {$EXTERNALSYM GetVersionEx}
  2731. function GetVersionEx(var lpVersionInformation: TOSVersionInfoEx): BOOL; stdcall; overload;
  2732. {$EXTERNALSYM GetVersionEx}
  2733. function GetVersionEx(lpVersionInformation: POSVERSIONINFOEX): BOOL; stdcall; overload;
  2734. {$IFDEF SUPPORTS_DEPRECATED} deprecated; {$ENDIF}
  2735. // line 3585
  2736. function SetWaitableTimer(hTimer: THandle; var lpDueTime: TLargeInteger;
  2737. lPeriod: Longint; pfnCompletionRoutine: TFNTimerAPCRoutine;
  2738. lpArgToCompletionRoutine: Pointer; fResume: BOOL): BOOL; stdcall;
  2739. {$EXTERNALSYM SetWaitableTimer}
  2740. // WinBase.h line 8839
  2741. function SetFileSecurityA(lpFileName: LPCSTR; SecurityInformation: SECURITY_INFORMATION;
  2742. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  2743. {$EXTERNALSYM SetFileSecurityA}
  2744. function SetFileSecurityW(lpFileName: LPCWSTR; SecurityInformation: SECURITY_INFORMATION;
  2745. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  2746. {$EXTERNALSYM SetFileSecurityW}
  2747. function SetFileSecurity(lpFileName: LPCTSTR; SecurityInformation: SECURITY_INFORMATION;
  2748. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  2749. {$EXTERNALSYM SetFileSecurity}
  2750. function GetFileSecurityA(lpFileName: LPCSTR; RequestedInformation: SECURITY_INFORMATION;
  2751. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  2752. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  2753. {$EXTERNALSYM GetFileSecurityA}
  2754. function GetFileSecurityW(lpFileName: LPCWSTR; RequestedInformation: SECURITY_INFORMATION;
  2755. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  2756. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  2757. {$EXTERNALSYM GetFileSecurityW}
  2758. function GetFileSecurity(lpFileName: LPCTSTR; RequestedInformation: SECURITY_INFORMATION;
  2759. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  2760. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  2761. {$EXTERNALSYM GetFileSecurity}
  2762. // WinBase.h line 10251
  2763. function SetVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName: LPCWSTR): BOOL; stdcall;
  2764. {$EXTERNALSYM SetVolumeMountPointW}
  2765. function DeleteVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR): BOOL; stdcall;
  2766. {$EXTERNALSYM DeleteVolumeMountPointW}
  2767. function GetVolumeNameForVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR;
  2768. lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
  2769. {$EXTERNALSYM GetVolumeNameForVolumeMountPointW}
  2770. // new Windows 7 debugging API
  2771. function CopyExtendedContext(Destination: PCONTEXT_EX; ContextFlags: DWORD; Source: PCONTEXT_EX): BOOL; stdcall;
  2772. {$EXTERNALSYM CopyExtendedContext}
  2773. function InitializeExtendedContext(Context: Pointer; ContextFlags: DWORD; out ContextEx: PCONTEXT_EX): BOOL; stdcall;
  2774. {$EXTERNALSYM InitializeExtendedContext}
  2775. function GetEnabledExtendedFeatures(const FeatureMask: Int64): Int64; stdcall;
  2776. {$EXTERNALSYM GetEnabledExtendedFeatures}
  2777. function GetExtendedContextLength(ContextFlags: DWORD; ContextLength: PDWORD): BOOL; stdcall;
  2778. {$EXTERNALSYM GetExtendedContextLength}
  2779. function GetExtendedFeaturesMask(ContextEx: PCONTEXT_EX): Int64; stdcall;
  2780. {$EXTERNALSYM GetExtendedFeaturesMask}
  2781. function LocateExtendedFeature(ContextEx: PCONTEXT_EX; FeatureId: DWORD; Length: PDWORD): Pointer; stdcall;
  2782. {$EXTERNALSYM LocateExtendedFeature}
  2783. function LocateLegacyContext(ContextEx: PCONTEXT_EX; Length: PDWORD): PCONTEXT; stdcall;
  2784. {$EXTERNALSYM LocateLegacyContext}
  2785. procedure SetExtendedFeaturesMask(ContextEx: PCONTEXT_EX; const FeatureMask: Int64); stdcall;
  2786. {$EXTERNALSYM SetExtendedFeaturesMask}
  2787. function ProcessIdToSessionId(dwProcessId: DWORD; out dwSessionId: DWORD): BOOL; stdcall;
  2788. {$EXTERNALSYM ProcessIdToSessionId}
  2789. // From JwaAclApi
  2790. // line 185
  2791. function SetNamedSecurityInfoW(pObjectName: LPWSTR; ObjectType: SE_OBJECT_TYPE;
  2792. SecurityInfo: SECURITY_INFORMATION; psidOwner, psidGroup: PSID;
  2793. pDacl, pSacl: PACL): DWORD; stdcall;
  2794. {$EXTERNALSYM SetNamedSecurityInfoW}
  2795. const
  2796. IMAGE_SEPARATION = (64*1024);
  2797. {$EXTERNALSYM IMAGE_SEPARATION}
  2798. type
  2799. PLOADED_IMAGE = ^LOADED_IMAGE;
  2800. {$EXTERNALSYM PLOADED_IMAGE}
  2801. _LOADED_IMAGE = record
  2802. ModuleName: PAnsiChar;
  2803. hFile: THandle;
  2804. MappedAddress: PUCHAR;
  2805. FileHeader: PImageNtHeaders;
  2806. LastRvaSection: PImageSectionHeader;
  2807. NumberOfSections: ULONG;
  2808. Sections: PImageSectionHeader;
  2809. Characteristics: ULONG;
  2810. fSystemImage: ByteBool;
  2811. fDOSImage: ByteBool;
  2812. Links: LIST_ENTRY;
  2813. SizeOfImage: ULONG;
  2814. end;
  2815. {$EXTERNALSYM _LOADED_IMAGE}
  2816. LOADED_IMAGE = _LOADED_IMAGE;
  2817. {$EXTERNALSYM LOADED_IMAGE}
  2818. TLoadedImage = LOADED_IMAGE;
  2819. PLoadedImage = PLOADED_IMAGE;
  2820. PIMAGE_SYMBOL = ^IMAGE_SYMBOL;
  2821. {$EXTERNALSYM PIMAGE_SYMBOL}
  2822. _IMAGE_SYMBOL = packed record // MUST pack to obtain the right size
  2823. Name: array [0..7] of AnsiChar;
  2824. Value: ULONG;
  2825. SectionNumber: USHORT;
  2826. _Type: USHORT;
  2827. StorageClass: BYTE;
  2828. NumberOfAuxSymbols: BYTE;
  2829. end;
  2830. {$EXTERNALSYM _IMAGE_SYMBOL}
  2831. IMAGE_SYMBOL = _IMAGE_SYMBOL;
  2832. {$EXTERNALSYM IMAGE_SYMBOL}
  2833. TImageSymbol = IMAGE_SYMBOL;
  2834. PImageSymbol = PIMAGE_SYMBOL;
  2835. // line 152
  2836. function ReBaseImage(CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  2837. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  2838. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr;
  2839. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr; TimeStamp: ULONG): BOOL; stdcall;
  2840. {$EXTERNALSYM ReBaseImage}
  2841. function ReBaseImage64(CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  2842. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  2843. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr64;
  2844. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr64; TimeStamp: ULONG): BOOL; stdcall;
  2845. {$EXTERNALSYM ReBaseImage64}
  2846. // line 199
  2847. //
  2848. // Define checksum function prototypes.
  2849. //
  2850. function CheckSumMappedFile(BaseAddress: Pointer; FileLength: DWORD;
  2851. out HeaderSum, CheckSum: DWORD): PImageNtHeaders; stdcall;
  2852. {$EXTERNALSYM CheckSumMappedFile}
  2853. // line 227
  2854. function GetImageUnusedHeaderBytes(const LoadedImage: LOADED_IMAGE;
  2855. var SizeUnusedHeaderBytes: DWORD): DWORD; stdcall;
  2856. {$EXTERNALSYM GetImageUnusedHeaderBytes}
  2857. // line 285
  2858. function MapAndLoad(ImageName, DllPath: PAnsiChar; var LoadedImage: LOADED_IMAGE;
  2859. DotDll: BOOL; ReadOnly: BOOL): BOOL; stdcall;
  2860. {$EXTERNALSYM MapAndLoad}
  2861. function UnMapAndLoad(const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
  2862. {$EXTERNALSYM UnMapAndLoad}
  2863. function TouchFileTimes(const FileHandle: THandle; const pSystemTime: TSystemTime): BOOL; stdcall;
  2864. {$EXTERNALSYM TouchFileTimes}
  2865. // line 347
  2866. function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
  2867. DirectoryEntry: USHORT; var Size: ULONG): Pointer; stdcall;
  2868. {$EXTERNALSYM ImageDirectoryEntryToData}
  2869. function ImageRvaToSection(NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG): PImageSectionHeader; stdcall;
  2870. {$EXTERNALSYM ImageRvaToSection}
  2871. function ImageRvaToVa(NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG;
  2872. LastRvaSection: PPImageSectionHeader): Pointer; stdcall;
  2873. {$EXTERNALSYM ImageRvaToVa}
  2874. // line 461
  2875. //
  2876. // UnDecorateSymbolName Flags
  2877. //
  2878. const
  2879. UNDNAME_COMPLETE = ($0000); // Enable full undecoration
  2880. {$EXTERNALSYM UNDNAME_COMPLETE}
  2881. UNDNAME_NO_LEADING_UNDERSCORES = ($0001); // Remove leading underscores from MS extended keywords
  2882. {$EXTERNALSYM UNDNAME_NO_LEADING_UNDERSCORES}
  2883. UNDNAME_NO_MS_KEYWORDS = ($0002); // Disable expansion of MS extended keywords
  2884. {$EXTERNALSYM UNDNAME_NO_MS_KEYWORDS}
  2885. UNDNAME_NO_FUNCTION_RETURNS = ($0004); // Disable expansion of return type for primary declaration
  2886. {$EXTERNALSYM UNDNAME_NO_FUNCTION_RETURNS}
  2887. UNDNAME_NO_ALLOCATION_MODEL = ($0008); // Disable expansion of the declaration model
  2888. {$EXTERNALSYM UNDNAME_NO_ALLOCATION_MODEL}
  2889. UNDNAME_NO_ALLOCATION_LANGUAGE = ($0010); // Disable expansion of the declaration language specifier
  2890. {$EXTERNALSYM UNDNAME_NO_ALLOCATION_LANGUAGE}
  2891. UNDNAME_NO_MS_THISTYPE = ($0020); // NYI Disable expansion of MS keywords on the 'this' type for primary declaration
  2892. {$EXTERNALSYM UNDNAME_NO_MS_THISTYPE}
  2893. UNDNAME_NO_CV_THISTYPE = ($0040); // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration
  2894. {$EXTERNALSYM UNDNAME_NO_CV_THISTYPE}
  2895. UNDNAME_NO_THISTYPE = ($0060); // Disable all modifiers on the 'this' type
  2896. {$EXTERNALSYM UNDNAME_NO_THISTYPE}
  2897. UNDNAME_NO_ACCESS_SPECIFIERS = ($0080); // Disable expansion of access specifiers for members
  2898. {$EXTERNALSYM UNDNAME_NO_ACCESS_SPECIFIERS}
  2899. UNDNAME_NO_THROW_SIGNATURES = ($0100); // Disable expansion of 'throw-signatures' for functions and pointers to functions
  2900. {$EXTERNALSYM UNDNAME_NO_THROW_SIGNATURES}
  2901. UNDNAME_NO_MEMBER_TYPE = ($0200); // Disable expansion of 'static' or 'virtual'ness of members
  2902. {$EXTERNALSYM UNDNAME_NO_MEMBER_TYPE}
  2903. UNDNAME_NO_RETURN_UDT_MODEL = ($0400); // Disable expansion of MS model for UDT returns
  2904. {$EXTERNALSYM UNDNAME_NO_RETURN_UDT_MODEL}
  2905. UNDNAME_32_BIT_DECODE = ($0800); // Undecorate 32-bit decorated names
  2906. {$EXTERNALSYM UNDNAME_32_BIT_DECODE}
  2907. UNDNAME_NAME_ONLY = ($1000); // Crack only the name for primary declaration;
  2908. {$EXTERNALSYM UNDNAME_NAME_ONLY}
  2909. // return just [scope::]name. Does expand template params
  2910. UNDNAME_NO_ARGUMENTS = ($2000); // Don't undecorate arguments to function
  2911. {$EXTERNALSYM UNDNAME_NO_ARGUMENTS}
  2912. UNDNAME_NO_SPECIAL_SYMS = ($4000); // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc)
  2913. {$EXTERNALSYM UNDNAME_NO_SPECIAL_SYMS}
  2914. // line 1342
  2915. type
  2916. {$EXTERNALSYM SYM_TYPE}
  2917. SYM_TYPE = (
  2918. SymNone,
  2919. SymCoff,
  2920. SymCv,
  2921. SymPdb,
  2922. SymExport,
  2923. SymDeferred,
  2924. SymSym { .sym file }
  2925. );
  2926. TSymType = SYM_TYPE;
  2927. { symbol data structure }
  2928. {$EXTERNALSYM PImagehlpSymbolA}
  2929. PImagehlpSymbolA = ^TImagehlpSymbolA;
  2930. {$EXTERNALSYM _IMAGEHLP_SYMBOLA}
  2931. _IMAGEHLP_SYMBOLA = packed record
  2932. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_SYMBOL) }
  2933. Address: DWORD; { virtual address including dll base address }
  2934. Size: DWORD; { estimated size of symbol, can be zero }
  2935. Flags: DWORD; { info about the symbols, see the SYMF defines }
  2936. MaxNameLength: DWORD; { maximum size of symbol name in 'Name' }
  2937. Name: packed array[0..0] of AnsiChar; { symbol name (null terminated string) }
  2938. end;
  2939. {$EXTERNALSYM IMAGEHLP_SYMBOLA}
  2940. IMAGEHLP_SYMBOLA = _IMAGEHLP_SYMBOLA;
  2941. {$EXTERNALSYM TImagehlpSymbolA}
  2942. TImagehlpSymbolA = _IMAGEHLP_SYMBOLA;
  2943. { symbol data structure }
  2944. {$EXTERNALSYM PImagehlpSymbolA64}
  2945. PImagehlpSymbolA64 = ^TImagehlpSymbolA64;
  2946. {$EXTERNALSYM _IMAGEHLP_SYMBOLA64}
  2947. _IMAGEHLP_SYMBOLA64 = packed record
  2948. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_SYMBOL) }
  2949. Address: TJclAddr64; { virtual address including dll base address }
  2950. Size: DWORD; { estimated size of symbol, can be zero }
  2951. Flags: DWORD; { info about the symbols, see the SYMF defines }
  2952. MaxNameLength: DWORD; { maximum size of symbol name in 'Name' }
  2953. Name: packed array[0..0] of AnsiChar; { symbol name (null terminated string) }
  2954. end;
  2955. {$EXTERNALSYM IMAGEHLP_SYMBOLA64}
  2956. IMAGEHLP_SYMBOLA64 = _IMAGEHLP_SYMBOLA64;
  2957. {$EXTERNALSYM TImagehlpSymbolA64}
  2958. TImagehlpSymbolA64 = _IMAGEHLP_SYMBOLA64;
  2959. { symbol data structure }
  2960. {$EXTERNALSYM PImagehlpSymbolW}
  2961. PImagehlpSymbolW = ^TImagehlpSymbolW;
  2962. {$EXTERNALSYM _IMAGEHLP_SYMBOLW}
  2963. _IMAGEHLP_SYMBOLW = packed record
  2964. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_SYMBOL) }
  2965. Address: DWORD; { virtual address including dll base address }
  2966. Size: DWORD; { estimated size of symbol, can be zero }
  2967. Flags: DWORD; { info about the symbols, see the SYMF defines }
  2968. MaxNameLength: DWORD; { maximum size of symbol name in 'Name' }
  2969. Name: packed array[0..0] of WideChar; { symbol name (null terminated string) }
  2970. end;
  2971. {$EXTERNALSYM IMAGEHLP_SYMBOLW}
  2972. IMAGEHLP_SYMBOLW = _IMAGEHLP_SYMBOLW;
  2973. {$EXTERNALSYM TImagehlpSymbolW}
  2974. TImagehlpSymbolW = _IMAGEHLP_SYMBOLW;
  2975. { symbol data structure }
  2976. {$EXTERNALSYM PImagehlpSymbolW64}
  2977. PImagehlpSymbolW64 = ^TImagehlpSymbolW64;
  2978. {$EXTERNALSYM _IMAGEHLP_SYMBOLW64}
  2979. _IMAGEHLP_SYMBOLW64 = packed record
  2980. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_SYMBOL) }
  2981. Address: TJclAddr64; { virtual address including dll base address }
  2982. Size: DWORD; { estimated size of symbol, can be zero }
  2983. Flags: DWORD; { info about the symbols, see the SYMF defines }
  2984. MaxNameLength: DWORD; { maximum size of symbol name in 'Name' }
  2985. Name: packed array[0..0] of WideChar; { symbol name (null terminated string) }
  2986. end;
  2987. {$EXTERNALSYM IMAGEHLP_SYMBOLW64}
  2988. IMAGEHLP_SYMBOLW64 = _IMAGEHLP_SYMBOLW64;
  2989. {$EXTERNALSYM TImagehlpSymbolW64}
  2990. TImagehlpSymbolW64 = _IMAGEHLP_SYMBOLW64;
  2991. { module data structure }
  2992. {$EXTERNALSYM PImagehlpModuleA}
  2993. PImagehlpModuleA = ^TImagehlpModuleA;
  2994. {$EXTERNALSYM _IMAGEHLP_MODULEA}
  2995. _IMAGEHLP_MODULEA = record
  2996. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_MODULE) }
  2997. BaseOfImage: DWORD; { base load address of module }
  2998. ImageSize: DWORD; { virtual size of the loaded module }
  2999. TimeDateStamp: DWORD; { date/time stamp from pe header }
  3000. CheckSum: DWORD; { checksum from the pe header }
  3001. NumSyms: DWORD; { number of symbols in the symbol table }
  3002. SymType: TSymType; { type of symbols loaded }
  3003. ModuleName: packed array[0..31] of AnsiChar; { module name }
  3004. ImageName: packed array[0..255] of AnsiChar; { image name }
  3005. LoadedImageName: packed array[0..255] of AnsiChar; { symbol file name }
  3006. end;
  3007. {$EXTERNALSYM IMAGEHLP_MODULEA}
  3008. IMAGEHLP_MODULEA = _IMAGEHLP_MODULEA;
  3009. {$EXTERNALSYM TImagehlpModuleA}
  3010. TImagehlpModuleA = _IMAGEHLP_MODULEA;
  3011. { module data structure }
  3012. {$EXTERNALSYM PImagehlpModuleA64}
  3013. PImagehlpModuleA64 = ^TImagehlpModuleA64;
  3014. {$EXTERNALSYM _IMAGEHLP_MODULEA64}
  3015. _IMAGEHLP_MODULEA64 = record
  3016. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_MODULE) }
  3017. BaseOfImage: TJclAddr64; { base load address of module }
  3018. ImageSize: DWORD; { virtual size of the loaded module }
  3019. TimeDateStamp: DWORD; { date/time stamp from pe header }
  3020. CheckSum: DWORD; { checksum from the pe header }
  3021. NumSyms: DWORD; { number of symbols in the symbol table }
  3022. SymType: TSymType; { type of symbols loaded }
  3023. ModuleName: packed array[0..31] of AnsiChar; { module name }
  3024. ImageName: packed array[0..255] of AnsiChar; { image name }
  3025. LoadedImageName: packed array[0..255] of AnsiChar; { symbol file name }
  3026. end;
  3027. {$EXTERNALSYM IMAGEHLP_MODULEA64}
  3028. IMAGEHLP_MODULEA64 = _IMAGEHLP_MODULEA64;
  3029. {$EXTERNALSYM TImagehlpModuleA64}
  3030. TImagehlpModuleA64 = _IMAGEHLP_MODULEA64;
  3031. { module data structure }
  3032. {$EXTERNALSYM PImagehlpModuleW}
  3033. PImagehlpModuleW = ^TImagehlpModuleW;
  3034. {$EXTERNALSYM _IMAGEHLP_MODULEW}
  3035. _IMAGEHLP_MODULEW = record
  3036. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_MODULE) }
  3037. BaseOfImage: DWORD; { base load address of module }
  3038. ImageSize: DWORD; { virtual size of the loaded module }
  3039. TimeDateStamp: DWORD; { date/time stamp from pe header }
  3040. CheckSum: DWORD; { checksum from the pe header }
  3041. NumSyms: DWORD; { number of symbols in the symbol table }
  3042. SymType: TSymType; { type of symbols loaded }
  3043. ModuleName: packed array[0..31] of WideChar; { module name }
  3044. ImageName: packed array[0..255] of WideChar; { image name }
  3045. LoadedImageName: packed array[0..255] of WideChar; { symbol file name }
  3046. end;
  3047. {$EXTERNALSYM IMAGEHLP_MODULEW}
  3048. IMAGEHLP_MODULEW = _IMAGEHLP_MODULEW;
  3049. {$EXTERNALSYM TImagehlpModuleW}
  3050. TImagehlpModuleW = _IMAGEHLP_MODULEW;
  3051. { module data structure }
  3052. {$EXTERNALSYM PImagehlpModuleW64}
  3053. PImagehlpModuleW64 = ^TImagehlpModuleW64;
  3054. {$EXTERNALSYM _IMAGEHLP_MODULEW64}
  3055. _IMAGEHLP_MODULEW64 = record
  3056. SizeOfStruct: DWORD; { set to sizeof(IMAGEHLP_MODULE) }
  3057. BaseOfImage: TJclAddr64; { base load address of module }
  3058. ImageSize: DWORD; { virtual size of the loaded module }
  3059. TimeDateStamp: DWORD; { date/time stamp from pe header }
  3060. CheckSum: DWORD; { checksum from the pe header }
  3061. NumSyms: DWORD; { number of symbols in the symbol table }
  3062. SymType: TSymType; { type of symbols loaded }
  3063. ModuleName: packed array[0..31] of WideChar; { module name }
  3064. ImageName: packed array[0..255] of WideChar; { image name }
  3065. LoadedImageName: packed array[0..255] of WideChar; { symbol file name }
  3066. end;
  3067. {$EXTERNALSYM IMAGEHLP_MODULEW64}
  3068. IMAGEHLP_MODULEW64 = _IMAGEHLP_MODULEW64;
  3069. {$EXTERNALSYM TImagehlpModuleW64}
  3070. TImagehlpModuleW64 = _IMAGEHLP_MODULEW64;
  3071. _IMAGEHLP_LINEA = packed record
  3072. SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
  3073. Key: Pointer; // internal
  3074. LineNumber: DWORD; // line number in file
  3075. FileName: PAnsiChar; // full filename
  3076. Address: DWORD; // first instruction of line
  3077. end;
  3078. IMAGEHLP_LINEA = _IMAGEHLP_LINEA;
  3079. PIMAGEHLP_LINEA = ^_IMAGEHLP_LINEA;
  3080. TImageHlpLineA = _IMAGEHLP_LINEA;
  3081. PImageHlpLineA = PIMAGEHLP_LINEA;
  3082. _IMAGEHLP_LINEA64 = packed record
  3083. SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
  3084. Key: Pointer; // internal
  3085. LineNumber: DWORD; // line number in file
  3086. FileName: PAnsiChar; // full filename
  3087. Address: TJclAddr64; // first instruction of line
  3088. end;
  3089. IMAGEHLP_LINEA64 = _IMAGEHLP_LINEA64;
  3090. PIMAGEHLP_LINEA64 = ^_IMAGEHLP_LINEA64;
  3091. TImageHlpLineA64 = _IMAGEHLP_LINEA64;
  3092. PImageHlpLineA64 = PIMAGEHLP_LINEA64;
  3093. _IMAGEHLP_LINEW = packed record
  3094. SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
  3095. Key: Pointer; // internal
  3096. LineNumber: DWORD; // line number in file
  3097. FileName: PWideChar; // full filename
  3098. Address: DWORD; // first instruction of line
  3099. end;
  3100. IMAGEHLP_LINEW = _IMAGEHLP_LINEW;
  3101. PIMAGEHLP_LINEW = ^_IMAGEHLP_LINEW;
  3102. TImageHlpLineW = _IMAGEHLP_LINEW;
  3103. PImageHlpLineW = PIMAGEHLP_LINEW;
  3104. _IMAGEHLP_LINEW64 = packed record
  3105. SizeOfStruct: DWORD; // set to sizeof(IMAGEHLP_LINE)
  3106. Key: Pointer; // internal
  3107. LineNumber: DWORD; // line number in file
  3108. FileName: PWideChar; // full filename
  3109. Address: TJclAddr64; // first instruction of line
  3110. end;
  3111. IMAGEHLP_LINEW64 = _IMAGEHLP_LINEW64;
  3112. PIMAGEHLP_LINEW64 = ^_IMAGEHLP_LINEW64;
  3113. TImageHlpLineW64 = _IMAGEHLP_LINEW64;
  3114. PImageHlpLineW64 = PIMAGEHLP_LINEW64;
  3115. // line 1475
  3116. //
  3117. // options that are set/returned by SymSetOptions() & SymGetOptions()
  3118. // these are used as a mask
  3119. //
  3120. const
  3121. SYMOPT_CASE_INSENSITIVE = $00000001;
  3122. {$EXTERNALSYM SYMOPT_CASE_INSENSITIVE}
  3123. SYMOPT_UNDNAME = $00000002;
  3124. {$EXTERNALSYM SYMOPT_UNDNAME}
  3125. SYMOPT_DEFERRED_LOADS = $00000004;
  3126. {$EXTERNALSYM SYMOPT_DEFERRED_LOADS}
  3127. SYMOPT_NO_CPP = $00000008;
  3128. {$EXTERNALSYM SYMOPT_NO_CPP}
  3129. SYMOPT_LOAD_LINES = $00000010;
  3130. {$EXTERNALSYM SYMOPT_LOAD_LINES}
  3131. SYMOPT_OMAP_FIND_NEAREST = $00000020;
  3132. {$EXTERNALSYM SYMOPT_OMAP_FIND_NEAREST}
  3133. SYMOPT_LOAD_ANYTHING = $00000040;
  3134. {$EXTERNALSYM SYMOPT_LOAD_ANYTHING}
  3135. SYMOPT_IGNORE_CVREC = $00000080;
  3136. {$EXTERNALSYM SYMOPT_IGNORE_CVREC}
  3137. SYMOPT_NO_UNQUALIFIED_LOADS = $00000100;
  3138. {$EXTERNALSYM SYMOPT_NO_UNQUALIFIED_LOADS}
  3139. SYMOPT_FAIL_CRITICAL_ERRORS = $00000200;
  3140. {$EXTERNALSYM SYMOPT_FAIL_CRITICAL_ERRORS}
  3141. SYMOPT_EXACT_SYMBOLS = $00000400;
  3142. {$EXTERNALSYM SYMOPT_EXACT_SYMBOLS}
  3143. SYMOPT_ALLOW_ABSOLUTE_SYMBOLS = $00000800;
  3144. {$EXTERNALSYM SYMOPT_ALLOW_ABSOLUTE_SYMBOLS}
  3145. SYMOPT_IGNORE_NT_SYMPATH = $00001000;
  3146. {$EXTERNALSYM SYMOPT_IGNORE_NT_SYMPATH}
  3147. SYMOPT_INCLUDE_32BIT_MODULES = $00002000;
  3148. {$EXTERNALSYM SYMOPT_INCLUDE_32BIT_MODULES}
  3149. SYMOPT_PUBLICS_ONLY = $00004000;
  3150. {$EXTERNALSYM SYMOPT_PUBLICS_ONLY}
  3151. SYMOPT_NO_PUBLICS = $00008000;
  3152. {$EXTERNALSYM SYMOPT_NO_PUBLICS}
  3153. SYMOPT_AUTO_PUBLICS = $00010000;
  3154. {$EXTERNALSYM SYMOPT_AUTO_PUBLICS}
  3155. SYMOPT_NO_IMAGE_SEARCH = $00020000;
  3156. {$EXTERNALSYM SYMOPT_NO_IMAGE_SEARCH}
  3157. SYMOPT_SECURE = $00040000;
  3158. {$EXTERNALSYM SYMOPT_SECURE}
  3159. SYMOPT_NO_PROMPTS = $00080000;
  3160. {$EXTERNALSYM SYMOPT_NO_PROMPTS}
  3161. SYMOPT_DEBUG = $80000000;
  3162. {$EXTERNALSYM SYMOPT_DEBUG}
  3163. // IoAPI.h
  3164. function CancelIo(hFile: THandle): BOOL; stdcall;
  3165. {$EXTERNALSYM CancelIo}
  3166. const
  3167. NERR_Success = 0; // Success
  3168. {$EXTERNALSYM NERR_Success}
  3169. // ERROR_ equates can be intermixed with NERR_ equates.
  3170. // NERR_BASE is the base of error codes from network utilities,
  3171. // chosen to avoid conflict with system and redirector error codes.
  3172. // 2100 is a value that has been assigned to us by system.
  3173. NERR_BASE = 2100;
  3174. {$EXTERNALSYM NERR_BASE}
  3175. //*INTERNAL_ONLY*
  3176. {**********WARNING *****************
  3177. *See the comment in lmcons.h for *
  3178. *info on the allocation of errors *
  3179. ***********************************}
  3180. {**********WARNING *****************
  3181. *The range 2750-2799 has been *
  3182. *allocated to the IBM LAN Server *
  3183. ***********************************}
  3184. {**********WARNING *****************
  3185. *The range 2900-2999 has been *
  3186. *reserved for Microsoft OEMs *
  3187. ***********************************}
  3188. // UNUSED BASE+0
  3189. // UNUSED BASE+1
  3190. NERR_NetNotStarted = (NERR_BASE+2); // The workstation driver is not installed.
  3191. {$EXTERNALSYM NERR_NetNotStarted}
  3192. NERR_UnknownServer = (NERR_BASE+3); // The server could not be located.
  3193. {$EXTERNALSYM NERR_UnknownServer}
  3194. NERR_ShareMem = (NERR_BASE+4); // An internal error occurred. The network cannot access a shared memory segment.
  3195. {$EXTERNALSYM NERR_ShareMem}
  3196. NERR_NoNetworkResource = (NERR_BASE+5); // A network resource shortage occurred .
  3197. {$EXTERNALSYM NERR_NoNetworkResource}
  3198. NERR_RemoteOnly = (NERR_BASE+6); // This operation is not supported on workstations.
  3199. {$EXTERNALSYM NERR_RemoteOnly}
  3200. NERR_DevNotRedirected = (NERR_BASE+7); // The device is not connected.
  3201. {$EXTERNALSYM NERR_DevNotRedirected}
  3202. // NERR_BASE+8 is used for ERROR_CONNECTED_OTHER_PASSWORD
  3203. // NERR_BASE+9 is used for ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT
  3204. // UNUSED BASE+10
  3205. // UNUSED BASE+11
  3206. // UNUSED BASE+12
  3207. // UNUSED BASE+13
  3208. NERR_ServerNotStarted = (NERR_BASE+14); // The Server service is not started.
  3209. {$EXTERNALSYM NERR_ServerNotStarted}
  3210. NERR_ItemNotFound = (NERR_BASE+15); // The queue is empty.
  3211. {$EXTERNALSYM NERR_ItemNotFound}
  3212. NERR_UnknownDevDir = (NERR_BASE+16); // The device or directory does not exist.
  3213. {$EXTERNALSYM NERR_UnknownDevDir}
  3214. NERR_RedirectedPath = (NERR_BASE+17); // The operation is invalid on a redirected resource.
  3215. {$EXTERNALSYM NERR_RedirectedPath}
  3216. NERR_DuplicateShare = (NERR_BASE+18); // The name has already been shared.
  3217. {$EXTERNALSYM NERR_DuplicateShare}
  3218. NERR_NoRoom = (NERR_BASE+19); // The server is currently out of the requested resource.
  3219. {$EXTERNALSYM NERR_NoRoom}
  3220. // UNUSED BASE+20
  3221. NERR_TooManyItems = (NERR_BASE+21); // Requested addition of items exceeds the maximum allowed.
  3222. {$EXTERNALSYM NERR_TooManyItems}
  3223. NERR_InvalidMaxUsers = (NERR_BASE+22); // The Peer service supports only two simultaneous users.
  3224. {$EXTERNALSYM NERR_InvalidMaxUsers}
  3225. NERR_BufTooSmall = (NERR_BASE+23); // The API return buffer is too small.
  3226. {$EXTERNALSYM NERR_BufTooSmall}
  3227. // UNUSED BASE+24
  3228. // UNUSED BASE+25
  3229. // UNUSED BASE+26
  3230. NERR_RemoteErr = (NERR_BASE+27); // A remote API error occurred.
  3231. {$EXTERNALSYM NERR_RemoteErr}
  3232. // UNUSED BASE+28
  3233. // UNUSED BASE+29
  3234. // UNUSED BASE+30
  3235. NERR_LanmanIniError = (NERR_BASE+31); // An error occurred when opening or reading the configuration file.
  3236. {$EXTERNALSYM NERR_LanmanIniError}
  3237. // UNUSED BASE+32
  3238. // UNUSED BASE+33
  3239. // UNUSED BASE+34
  3240. // UNUSED BASE+35
  3241. NERR_NetworkError = (NERR_BASE+36); // A general network error occurred.
  3242. {$EXTERNALSYM NERR_NetworkError}
  3243. NERR_WkstaInconsistentState = (NERR_BASE+37);
  3244. {$EXTERNALSYM NERR_WkstaInconsistentState}
  3245. // The Workstation service is in an inconsistent state. Restart the computer before restarting the Workstation service.
  3246. NERR_WkstaNotStarted = (NERR_BASE+38); // The Workstation service has not been started.
  3247. {$EXTERNALSYM NERR_WkstaNotStarted}
  3248. NERR_BrowserNotStarted = (NERR_BASE+39); // The requested information is not available.
  3249. {$EXTERNALSYM NERR_BrowserNotStarted}
  3250. NERR_InternalError = (NERR_BASE+40); // An internal Windows 2000 error occurred.
  3251. {$EXTERNALSYM NERR_InternalError}
  3252. NERR_BadTransactConfig = (NERR_BASE+41); // The server is not configured for transactions.
  3253. {$EXTERNALSYM NERR_BadTransactConfig}
  3254. NERR_InvalidAPI = (NERR_BASE+42); // The requested API is not supported on the remote server.
  3255. {$EXTERNALSYM NERR_InvalidAPI}
  3256. NERR_BadEventName = (NERR_BASE+43); // The event name is invalid.
  3257. {$EXTERNALSYM NERR_BadEventName}
  3258. NERR_DupNameReboot = (NERR_BASE+44); // The computer name already exists on the network. Change it and restart the computer.
  3259. {$EXTERNALSYM NERR_DupNameReboot}
  3260. //
  3261. // Config API related
  3262. // Error codes from BASE+45 to BASE+49
  3263. // UNUSED BASE+45
  3264. NERR_CfgCompNotFound = (NERR_BASE+46); // The specified component could not be found in the configuration information.
  3265. {$EXTERNALSYM NERR_CfgCompNotFound}
  3266. NERR_CfgParamNotFound = (NERR_BASE+47); // The specified parameter could not be found in the configuration information.
  3267. {$EXTERNALSYM NERR_CfgParamNotFound}
  3268. NERR_LineTooLong = (NERR_BASE+49); // A line in the configuration file is too long.
  3269. {$EXTERNALSYM NERR_LineTooLong}
  3270. //
  3271. // Spooler API related
  3272. // Error codes from BASE+50 to BASE+79
  3273. NERR_QNotFound = (NERR_BASE+50); // The printer does not exist.
  3274. {$EXTERNALSYM NERR_QNotFound}
  3275. NERR_JobNotFound = (NERR_BASE+51); // The print job does not exist.
  3276. {$EXTERNALSYM NERR_JobNotFound}
  3277. NERR_DestNotFound = (NERR_BASE+52); // The printer destination cannot be found.
  3278. {$EXTERNALSYM NERR_DestNotFound}
  3279. NERR_DestExists = (NERR_BASE+53); // The printer destination already exists.
  3280. {$EXTERNALSYM NERR_DestExists}
  3281. NERR_QExists = (NERR_BASE+54); // The printer queue already exists.
  3282. {$EXTERNALSYM NERR_QExists}
  3283. NERR_QNoRoom = (NERR_BASE+55); // No more printers can be added.
  3284. {$EXTERNALSYM NERR_QNoRoom}
  3285. NERR_JobNoRoom = (NERR_BASE+56); // No more print jobs can be added.
  3286. {$EXTERNALSYM NERR_JobNoRoom}
  3287. NERR_DestNoRoom = (NERR_BASE+57); // No more printer destinations can be added.
  3288. {$EXTERNALSYM NERR_DestNoRoom}
  3289. NERR_DestIdle = (NERR_BASE+58); // This printer destination is idle and cannot accept control operations.
  3290. {$EXTERNALSYM NERR_DestIdle}
  3291. NERR_DestInvalidOp = (NERR_BASE+59); // This printer destination request contains an invalid control function.
  3292. {$EXTERNALSYM NERR_DestInvalidOp}
  3293. NERR_ProcNoRespond = (NERR_BASE+60); // The print processor is not responding.
  3294. {$EXTERNALSYM NERR_ProcNoRespond}
  3295. NERR_SpoolerNotLoaded = (NERR_BASE+61); // The spooler is not running.
  3296. {$EXTERNALSYM NERR_SpoolerNotLoaded}
  3297. NERR_DestInvalidState = (NERR_BASE+62); // This operation cannot be performed on the print destination in its current state.
  3298. {$EXTERNALSYM NERR_DestInvalidState}
  3299. NERR_QInvalidState = (NERR_BASE+63); // This operation cannot be performed on the printer queue in its current state.
  3300. {$EXTERNALSYM NERR_QInvalidState}
  3301. NERR_JobInvalidState = (NERR_BASE+64); // This operation cannot be performed on the print job in its current state.
  3302. {$EXTERNALSYM NERR_JobInvalidState}
  3303. NERR_SpoolNoMemory = (NERR_BASE+65); // A spooler memory allocation failure occurred.
  3304. {$EXTERNALSYM NERR_SpoolNoMemory}
  3305. NERR_DriverNotFound = (NERR_BASE+66); // The device driver does not exist.
  3306. {$EXTERNALSYM NERR_DriverNotFound}
  3307. NERR_DataTypeInvalid = (NERR_BASE+67); // The data type is not supported by the print processor.
  3308. {$EXTERNALSYM NERR_DataTypeInvalid}
  3309. NERR_ProcNotFound = (NERR_BASE+68); // The print processor is not installed.
  3310. {$EXTERNALSYM NERR_ProcNotFound}
  3311. //
  3312. // Service API related
  3313. // Error codes from BASE+80 to BASE+99
  3314. NERR_ServiceTableLocked = (NERR_BASE+80); // The service database is locked.
  3315. {$EXTERNALSYM NERR_ServiceTableLocked}
  3316. NERR_ServiceTableFull = (NERR_BASE+81); // The service table is full.
  3317. {$EXTERNALSYM NERR_ServiceTableFull}
  3318. NERR_ServiceInstalled = (NERR_BASE+82); // The requested service has already been started.
  3319. {$EXTERNALSYM NERR_ServiceInstalled}
  3320. NERR_ServiceEntryLocked = (NERR_BASE+83); // The service does not respond to control actions.
  3321. {$EXTERNALSYM NERR_ServiceEntryLocked}
  3322. NERR_ServiceNotInstalled = (NERR_BASE+84); // The service has not been started.
  3323. {$EXTERNALSYM NERR_ServiceNotInstalled}
  3324. NERR_BadServiceName = (NERR_BASE+85); // The service name is invalid.
  3325. {$EXTERNALSYM NERR_BadServiceName}
  3326. NERR_ServiceCtlTimeout = (NERR_BASE+86); // The service is not responding to the control function.
  3327. {$EXTERNALSYM NERR_ServiceCtlTimeout}
  3328. NERR_ServiceCtlBusy = (NERR_BASE+87); // The service control is busy.
  3329. {$EXTERNALSYM NERR_ServiceCtlBusy}
  3330. NERR_BadServiceProgName = (NERR_BASE+88); // The configuration file contains an invalid service program name.
  3331. {$EXTERNALSYM NERR_BadServiceProgName}
  3332. NERR_ServiceNotCtrl = (NERR_BASE+89); // The service could not be controlled in its present state.
  3333. {$EXTERNALSYM NERR_ServiceNotCtrl}
  3334. NERR_ServiceKillProc = (NERR_BASE+90); // The service ended abnormally.
  3335. {$EXTERNALSYM NERR_ServiceKillProc}
  3336. NERR_ServiceCtlNotValid = (NERR_BASE+91); // The requested pause,continue, or stop is not valid for this service.
  3337. {$EXTERNALSYM NERR_ServiceCtlNotValid}
  3338. NERR_NotInDispatchTbl = (NERR_BASE+92); // The service control dispatcher could not find the service name in the dispatch table.
  3339. {$EXTERNALSYM NERR_NotInDispatchTbl}
  3340. NERR_BadControlRecv = (NERR_BASE+93); // The service control dispatcher pipe read failed.
  3341. {$EXTERNALSYM NERR_BadControlRecv}
  3342. NERR_ServiceNotStarting = (NERR_BASE+94); // A thread for the new service could not be created.
  3343. {$EXTERNALSYM NERR_ServiceNotStarting}
  3344. //
  3345. // Wksta and Logon API related
  3346. // Error codes from BASE+100 to BASE+118
  3347. NERR_AlreadyLoggedOn = (NERR_BASE+100); // This workstation is already logged on to the local-area network.
  3348. {$EXTERNALSYM NERR_AlreadyLoggedOn}
  3349. NERR_NotLoggedOn = (NERR_BASE+101); // The workstation is not logged on to the local-area network.
  3350. {$EXTERNALSYM NERR_NotLoggedOn}
  3351. NERR_BadUsername = (NERR_BASE+102); // The user name or group name parameter is invalid.
  3352. {$EXTERNALSYM NERR_BadUsername}
  3353. NERR_BadPassword = (NERR_BASE+103); // The password parameter is invalid.
  3354. {$EXTERNALSYM NERR_BadPassword}
  3355. NERR_UnableToAddName_W = (NERR_BASE+104); // @W The logon processor did not add the message alias.
  3356. {$EXTERNALSYM NERR_UnableToAddName_W}
  3357. NERR_UnableToAddName_F = (NERR_BASE+105); // The logon processor did not add the message alias.
  3358. {$EXTERNALSYM NERR_UnableToAddName_F}
  3359. NERR_UnableToDelName_W = (NERR_BASE+106); // @W The logoff processor did not delete the message alias.
  3360. {$EXTERNALSYM NERR_UnableToDelName_W}
  3361. NERR_UnableToDelName_F = (NERR_BASE+107); // The logoff processor did not delete the message alias.
  3362. {$EXTERNALSYM NERR_UnableToDelName_F}
  3363. // UNUSED BASE+108
  3364. NERR_LogonsPaused = (NERR_BASE+109); // Network logons are paused.
  3365. {$EXTERNALSYM NERR_LogonsPaused}
  3366. NERR_LogonServerConflict = (NERR_BASE+110); // A centralized logon-server conflict occurred.
  3367. {$EXTERNALSYM NERR_LogonServerConflict}
  3368. NERR_LogonNoUserPath = (NERR_BASE+111); // The server is configured without a valid user path.
  3369. {$EXTERNALSYM NERR_LogonNoUserPath}
  3370. NERR_LogonScriptError = (NERR_BASE+112); // An error occurred while loading or running the logon script.
  3371. {$EXTERNALSYM NERR_LogonScriptError}
  3372. // UNUSED BASE+113
  3373. NERR_StandaloneLogon = (NERR_BASE+114); // The logon server was not specified. Your computer will be logged on as STANDALONE.
  3374. {$EXTERNALSYM NERR_StandaloneLogon}
  3375. NERR_LogonServerNotFound = (NERR_BASE+115); // The logon server could not be found.
  3376. {$EXTERNALSYM NERR_LogonServerNotFound}
  3377. NERR_LogonDomainExists = (NERR_BASE+116); // There is already a logon domain for this computer.
  3378. {$EXTERNALSYM NERR_LogonDomainExists}
  3379. NERR_NonValidatedLogon = (NERR_BASE+117); // The logon server could not validate the logon.
  3380. {$EXTERNALSYM NERR_NonValidatedLogon}
  3381. //
  3382. // ACF API related (access, user, group)
  3383. // Error codes from BASE+119 to BASE+149
  3384. NERR_ACFNotFound = (NERR_BASE+119); // The security database could not be found.
  3385. {$EXTERNALSYM NERR_ACFNotFound}
  3386. NERR_GroupNotFound = (NERR_BASE+120); // The group name could not be found.
  3387. {$EXTERNALSYM NERR_GroupNotFound}
  3388. NERR_UserNotFound = (NERR_BASE+121); // The user name could not be found.
  3389. {$EXTERNALSYM NERR_UserNotFound}
  3390. NERR_ResourceNotFound = (NERR_BASE+122); // The resource name could not be found.
  3391. {$EXTERNALSYM NERR_ResourceNotFound}
  3392. NERR_GroupExists = (NERR_BASE+123); // The group already exists.
  3393. {$EXTERNALSYM NERR_GroupExists}
  3394. NERR_UserExists = (NERR_BASE+124); // The account already exists.
  3395. {$EXTERNALSYM NERR_UserExists}
  3396. NERR_ResourceExists = (NERR_BASE+125); // The resource permission list already exists.
  3397. {$EXTERNALSYM NERR_ResourceExists}
  3398. NERR_NotPrimary = (NERR_BASE+126); // This operation is only allowed on the primary domain controller of the domain.
  3399. {$EXTERNALSYM NERR_NotPrimary}
  3400. NERR_ACFNotLoaded = (NERR_BASE+127); // The security database has not been started.
  3401. {$EXTERNALSYM NERR_ACFNotLoaded}
  3402. NERR_ACFNoRoom = (NERR_BASE+128); // There are too many names in the user accounts database.
  3403. {$EXTERNALSYM NERR_ACFNoRoom}
  3404. NERR_ACFFileIOFail = (NERR_BASE+129); // A disk I/O failure occurred.
  3405. {$EXTERNALSYM NERR_ACFFileIOFail}
  3406. NERR_ACFTooManyLists = (NERR_BASE+130); // The limit of 64 entries per resource was exceeded.
  3407. {$EXTERNALSYM NERR_ACFTooManyLists}
  3408. NERR_UserLogon = (NERR_BASE+131); // Deleting a user with a session is not allowed.
  3409. {$EXTERNALSYM NERR_UserLogon}
  3410. NERR_ACFNoParent = (NERR_BASE+132); // The parent directory could not be located.
  3411. {$EXTERNALSYM NERR_ACFNoParent}
  3412. NERR_CanNotGrowSegment = (NERR_BASE+133); // Unable to add to the security database session cache segment.
  3413. {$EXTERNALSYM NERR_CanNotGrowSegment}
  3414. NERR_SpeGroupOp = (NERR_BASE+134); // This operation is not allowed on this special group.
  3415. {$EXTERNALSYM NERR_SpeGroupOp}
  3416. NERR_NotInCache = (NERR_BASE+135); // This user is not cached in user accounts database session cache.
  3417. {$EXTERNALSYM NERR_NotInCache}
  3418. NERR_UserInGroup = (NERR_BASE+136); // The user already belongs to this group.
  3419. {$EXTERNALSYM NERR_UserInGroup}
  3420. NERR_UserNotInGroup = (NERR_BASE+137); // The user does not belong to this group.
  3421. {$EXTERNALSYM NERR_UserNotInGroup}
  3422. NERR_AccountUndefined = (NERR_BASE+138); // This user account is undefined.
  3423. {$EXTERNALSYM NERR_AccountUndefined}
  3424. NERR_AccountExpired = (NERR_BASE+139); // This user account has expired.
  3425. {$EXTERNALSYM NERR_AccountExpired}
  3426. NERR_InvalidWorkstation = (NERR_BASE+140); // The user is not allowed to log on from this workstation.
  3427. {$EXTERNALSYM NERR_InvalidWorkstation}
  3428. NERR_InvalidLogonHours = (NERR_BASE+141); // The user is not allowed to log on at this time.
  3429. {$EXTERNALSYM NERR_InvalidLogonHours}
  3430. NERR_PasswordExpired = (NERR_BASE+142); // The password of this user has expired.
  3431. {$EXTERNALSYM NERR_PasswordExpired}
  3432. NERR_PasswordCantChange = (NERR_BASE+143); // The password of this user cannot change.
  3433. {$EXTERNALSYM NERR_PasswordCantChange}
  3434. NERR_PasswordHistConflict = (NERR_BASE+144); // This password cannot be used now.
  3435. {$EXTERNALSYM NERR_PasswordHistConflict}
  3436. NERR_PasswordTooShort = (NERR_BASE+145); // The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements.
  3437. {$EXTERNALSYM NERR_PasswordTooShort}
  3438. NERR_PasswordTooRecent = (NERR_BASE+146); // The password of this user is too recent to change.
  3439. {$EXTERNALSYM NERR_PasswordTooRecent}
  3440. NERR_InvalidDatabase = (NERR_BASE+147); // The security database is corrupted.
  3441. {$EXTERNALSYM NERR_InvalidDatabase}
  3442. NERR_DatabaseUpToDate = (NERR_BASE+148); // No updates are necessary to this replicant network/local security database.
  3443. {$EXTERNALSYM NERR_DatabaseUpToDate}
  3444. NERR_SyncRequired = (NERR_BASE+149); // This replicant database is outdated; synchronization is required.
  3445. {$EXTERNALSYM NERR_SyncRequired}
  3446. //
  3447. // Use API related
  3448. // Error codes from BASE+150 to BASE+169
  3449. NERR_UseNotFound = (NERR_BASE+150); // The network connection could not be found.
  3450. {$EXTERNALSYM NERR_UseNotFound}
  3451. NERR_BadAsgType = (NERR_BASE+151); // This asg_type is invalid.
  3452. {$EXTERNALSYM NERR_BadAsgType}
  3453. NERR_DeviceIsShared = (NERR_BASE+152); // This device is currently being shared.
  3454. {$EXTERNALSYM NERR_DeviceIsShared}
  3455. //
  3456. // Message Server related
  3457. // Error codes BASE+170 to BASE+209
  3458. NERR_NoComputerName = (NERR_BASE+170); // The computer name could not be added as a message alias. The name may already exist on the network.
  3459. {$EXTERNALSYM NERR_NoComputerName}
  3460. NERR_MsgAlreadyStarted = (NERR_BASE+171); // The Messenger service is already started.
  3461. {$EXTERNALSYM NERR_MsgAlreadyStarted}
  3462. NERR_MsgInitFailed = (NERR_BASE+172); // The Messenger service failed to start.
  3463. {$EXTERNALSYM NERR_MsgInitFailed}
  3464. NERR_NameNotFound = (NERR_BASE+173); // The message alias could not be found on the network.
  3465. {$EXTERNALSYM NERR_NameNotFound}
  3466. NERR_AlreadyForwarded = (NERR_BASE+174); // This message alias has already been forwarded.
  3467. {$EXTERNALSYM NERR_AlreadyForwarded}
  3468. NERR_AddForwarded = (NERR_BASE+175); // This message alias has been added but is still forwarded.
  3469. {$EXTERNALSYM NERR_AddForwarded}
  3470. NERR_AlreadyExists = (NERR_BASE+176); // This message alias already exists locally.
  3471. {$EXTERNALSYM NERR_AlreadyExists}
  3472. NERR_TooManyNames = (NERR_BASE+177); // The maximum number of added message aliases has been exceeded.
  3473. {$EXTERNALSYM NERR_TooManyNames}
  3474. NERR_DelComputerName = (NERR_BASE+178); // The computer name could not be deleted.
  3475. {$EXTERNALSYM NERR_DelComputerName}
  3476. NERR_LocalForward = (NERR_BASE+179); // Messages cannot be forwarded back to the same workstation.
  3477. {$EXTERNALSYM NERR_LocalForward}
  3478. NERR_GrpMsgProcessor = (NERR_BASE+180); // An error occurred in the domain message processor.
  3479. {$EXTERNALSYM NERR_GrpMsgProcessor}
  3480. NERR_PausedRemote = (NERR_BASE+181); // The message was sent, but the recipient has paused the Messenger service.
  3481. {$EXTERNALSYM NERR_PausedRemote}
  3482. NERR_BadReceive = (NERR_BASE+182); // The message was sent but not received.
  3483. {$EXTERNALSYM NERR_BadReceive}
  3484. NERR_NameInUse = (NERR_BASE+183); // The message alias is currently in use. Try again later.
  3485. {$EXTERNALSYM NERR_NameInUse}
  3486. NERR_MsgNotStarted = (NERR_BASE+184); // The Messenger service has not been started.
  3487. {$EXTERNALSYM NERR_MsgNotStarted}
  3488. NERR_NotLocalName = (NERR_BASE+185); // The name is not on the local computer.
  3489. {$EXTERNALSYM NERR_NotLocalName}
  3490. NERR_NoForwardName = (NERR_BASE+186); // The forwarded message alias could not be found on the network.
  3491. {$EXTERNALSYM NERR_NoForwardName}
  3492. NERR_RemoteFull = (NERR_BASE+187); // The message alias table on the remote station is full.
  3493. {$EXTERNALSYM NERR_RemoteFull}
  3494. NERR_NameNotForwarded = (NERR_BASE+188); // Messages for this alias are not currently being forwarded.
  3495. {$EXTERNALSYM NERR_NameNotForwarded}
  3496. NERR_TruncatedBroadcast = (NERR_BASE+189); // The broadcast message was truncated.
  3497. {$EXTERNALSYM NERR_TruncatedBroadcast}
  3498. NERR_InvalidDevice = (NERR_BASE+194); // This is an invalid device name.
  3499. {$EXTERNALSYM NERR_InvalidDevice}
  3500. NERR_WriteFault = (NERR_BASE+195); // A write fault occurred.
  3501. {$EXTERNALSYM NERR_WriteFault}
  3502. // UNUSED BASE+196
  3503. NERR_DuplicateName = (NERR_BASE+197); // A duplicate message alias exists on the network.
  3504. {$EXTERNALSYM NERR_DuplicateName}
  3505. NERR_DeleteLater = (NERR_BASE+198); // @W This message alias will be deleted later.
  3506. {$EXTERNALSYM NERR_DeleteLater}
  3507. NERR_IncompleteDel = (NERR_BASE+199); // The message alias was not successfully deleted from all networks.
  3508. {$EXTERNALSYM NERR_IncompleteDel}
  3509. NERR_MultipleNets = (NERR_BASE+200); // This operation is not supported on computers with multiple networks.
  3510. {$EXTERNALSYM NERR_MultipleNets}
  3511. //
  3512. // Server API related
  3513. // Error codes BASE+210 to BASE+229
  3514. NERR_NetNameNotFound = (NERR_BASE+210); // This shared resource does not exist.
  3515. {$EXTERNALSYM NERR_NetNameNotFound}
  3516. NERR_DeviceNotShared = (NERR_BASE+211); // This device is not shared.
  3517. {$EXTERNALSYM NERR_DeviceNotShared}
  3518. NERR_ClientNameNotFound = (NERR_BASE+212); // A session does not exist with that computer name.
  3519. {$EXTERNALSYM NERR_ClientNameNotFound}
  3520. NERR_FileIdNotFound = (NERR_BASE+214); // There is not an open file with that identification number.
  3521. {$EXTERNALSYM NERR_FileIdNotFound}
  3522. NERR_ExecFailure = (NERR_BASE+215); // A failure occurred when executing a remote administration command.
  3523. {$EXTERNALSYM NERR_ExecFailure}
  3524. NERR_TmpFile = (NERR_BASE+216); // A failure occurred when opening a remote temporary file.
  3525. {$EXTERNALSYM NERR_TmpFile}
  3526. NERR_TooMuchData = (NERR_BASE+217); // The data returned from a remote administration command has been truncated to 64K.
  3527. {$EXTERNALSYM NERR_TooMuchData}
  3528. NERR_DeviceShareConflict = (NERR_BASE+218); // This device cannot be shared as both a spooled and a non-spooled resource.
  3529. {$EXTERNALSYM NERR_DeviceShareConflict}
  3530. NERR_BrowserTableIncomplete = (NERR_BASE+219); // The information in the list of servers may be incorrect.
  3531. {$EXTERNALSYM NERR_BrowserTableIncomplete}
  3532. NERR_NotLocalDomain = (NERR_BASE+220); // The computer is not active in this domain.
  3533. {$EXTERNALSYM NERR_NotLocalDomain}
  3534. NERR_IsDfsShare = (NERR_BASE+221); // The share must be removed from the Distributed File System before it can be deleted.
  3535. {$EXTERNALSYM NERR_IsDfsShare}
  3536. //
  3537. // CharDev API related
  3538. // Error codes BASE+230 to BASE+249
  3539. // UNUSED BASE+230
  3540. NERR_DevInvalidOpCode = (NERR_BASE+231); // The operation is invalid for this device.
  3541. {$EXTERNALSYM NERR_DevInvalidOpCode}
  3542. NERR_DevNotFound = (NERR_BASE+232); // This device cannot be shared.
  3543. {$EXTERNALSYM NERR_DevNotFound}
  3544. NERR_DevNotOpen = (NERR_BASE+233); // This device was not open.
  3545. {$EXTERNALSYM NERR_DevNotOpen}
  3546. NERR_BadQueueDevString = (NERR_BASE+234); // This device name list is invalid.
  3547. {$EXTERNALSYM NERR_BadQueueDevString}
  3548. NERR_BadQueuePriority = (NERR_BASE+235); // The queue priority is invalid.
  3549. {$EXTERNALSYM NERR_BadQueuePriority}
  3550. NERR_NoCommDevs = (NERR_BASE+237); // There are no shared communication devices.
  3551. {$EXTERNALSYM NERR_NoCommDevs}
  3552. NERR_QueueNotFound = (NERR_BASE+238); // The queue you specified does not exist.
  3553. {$EXTERNALSYM NERR_QueueNotFound}
  3554. NERR_BadDevString = (NERR_BASE+240); // This list of devices is invalid.
  3555. {$EXTERNALSYM NERR_BadDevString}
  3556. NERR_BadDev = (NERR_BASE+241); // The requested device is invalid.
  3557. {$EXTERNALSYM NERR_BadDev}
  3558. NERR_InUseBySpooler = (NERR_BASE+242); // This device is already in use by the spooler.
  3559. {$EXTERNALSYM NERR_InUseBySpooler}
  3560. NERR_CommDevInUse = (NERR_BASE+243); // This device is already in use as a communication device.
  3561. {$EXTERNALSYM NERR_CommDevInUse}
  3562. //
  3563. // NetICanonicalize and NetIType and NetIMakeLMFileName
  3564. // NetIListCanon and NetINameCheck
  3565. // Error codes BASE+250 to BASE+269
  3566. NERR_InvalidComputer = (NERR_BASE+251); // This computer name is invalid.
  3567. {$EXTERNALSYM NERR_InvalidComputer}
  3568. // UNUSED BASE+252
  3569. // UNUSED BASE+253
  3570. NERR_MaxLenExceeded = (NERR_BASE+254); // The string and prefix specified are too long.
  3571. {$EXTERNALSYM NERR_MaxLenExceeded}
  3572. // UNUSED BASE+255
  3573. NERR_BadComponent = (NERR_BASE+256); // This path component is invalid.
  3574. {$EXTERNALSYM NERR_BadComponent}
  3575. NERR_CantType = (NERR_BASE+257); // Could not determine the type of input.
  3576. {$EXTERNALSYM NERR_CantType}
  3577. // UNUSED BASE+258
  3578. // UNUSED BASE+259
  3579. NERR_TooManyEntries = (NERR_BASE+262); // The buffer for types is not big enough.
  3580. {$EXTERNALSYM NERR_TooManyEntries}
  3581. //
  3582. // NetProfile
  3583. // Error codes BASE+270 to BASE+276
  3584. NERR_ProfileFileTooBig = (NERR_BASE+270); // Profile files cannot exceed 64K.
  3585. {$EXTERNALSYM NERR_ProfileFileTooBig}
  3586. NERR_ProfileOffset = (NERR_BASE+271); // The start offset is out of range.
  3587. {$EXTERNALSYM NERR_ProfileOffset}
  3588. NERR_ProfileCleanup = (NERR_BASE+272); // The system cannot delete current connections to network resources.
  3589. {$EXTERNALSYM NERR_ProfileCleanup}
  3590. NERR_ProfileUnknownCmd = (NERR_BASE+273); // The system was unable to parse the command line in this file.
  3591. {$EXTERNALSYM NERR_ProfileUnknownCmd}
  3592. NERR_ProfileLoadErr = (NERR_BASE+274); // An error occurred while loading the profile file.
  3593. {$EXTERNALSYM NERR_ProfileLoadErr}
  3594. NERR_ProfileSaveErr = (NERR_BASE+275); // @W Errors occurred while saving the profile file. The profile was partially saved.
  3595. {$EXTERNALSYM NERR_ProfileSaveErr}
  3596. //
  3597. // NetAudit and NetErrorLog
  3598. // Error codes BASE+277 to BASE+279
  3599. NERR_LogOverflow = (NERR_BASE+277); // Log file %1 is full.
  3600. {$EXTERNALSYM NERR_LogOverflow}
  3601. NERR_LogFileChanged = (NERR_BASE+278); // This log file has changed between reads.
  3602. {$EXTERNALSYM NERR_LogFileChanged}
  3603. NERR_LogFileCorrupt = (NERR_BASE+279); // Log file %1 is corrupt.
  3604. {$EXTERNALSYM NERR_LogFileCorrupt}
  3605. //
  3606. // NetRemote
  3607. // Error codes BASE+280 to BASE+299
  3608. NERR_SourceIsDir = (NERR_BASE+280); // The source path cannot be a directory.
  3609. {$EXTERNALSYM NERR_SourceIsDir}
  3610. NERR_BadSource = (NERR_BASE+281); // The source path is illegal.
  3611. {$EXTERNALSYM NERR_BadSource}
  3612. NERR_BadDest = (NERR_BASE+282); // The destination path is illegal.
  3613. {$EXTERNALSYM NERR_BadDest}
  3614. NERR_DifferentServers = (NERR_BASE+283); // The source and destination paths are on different servers.
  3615. {$EXTERNALSYM NERR_DifferentServers}
  3616. // UNUSED BASE+284
  3617. NERR_RunSrvPaused = (NERR_BASE+285); // The Run server you requested is paused.
  3618. {$EXTERNALSYM NERR_RunSrvPaused}
  3619. // UNUSED BASE+286
  3620. // UNUSED BASE+287
  3621. // UNUSED BASE+288
  3622. NERR_ErrCommRunSrv = (NERR_BASE+289); // An error occurred when communicating with a Run server.
  3623. {$EXTERNALSYM NERR_ErrCommRunSrv}
  3624. // UNUSED BASE+290
  3625. NERR_ErrorExecingGhost = (NERR_BASE+291); // An error occurred when starting a background process.
  3626. {$EXTERNALSYM NERR_ErrorExecingGhost}
  3627. NERR_ShareNotFound = (NERR_BASE+292); // The shared resource you are connected to could not be found.
  3628. {$EXTERNALSYM NERR_ShareNotFound}
  3629. // UNUSED BASE+293
  3630. // UNUSED BASE+294
  3631. //
  3632. // NetWksta.sys (redir) returned error codes.
  3633. //
  3634. // NERR_BASE + (300-329)
  3635. NERR_InvalidLana = (NERR_BASE+300); // The LAN adapter number is invalid.
  3636. {$EXTERNALSYM NERR_InvalidLana}
  3637. NERR_OpenFiles = (NERR_BASE+301); // There are open files on the connection.
  3638. {$EXTERNALSYM NERR_OpenFiles}
  3639. NERR_ActiveConns = (NERR_BASE+302); // Active connections still exist.
  3640. {$EXTERNALSYM NERR_ActiveConns}
  3641. NERR_BadPasswordCore = (NERR_BASE+303); // This share name or password is invalid.
  3642. {$EXTERNALSYM NERR_BadPasswordCore}
  3643. NERR_DevInUse = (NERR_BASE+304); // The device is being accessed by an active process.
  3644. {$EXTERNALSYM NERR_DevInUse}
  3645. NERR_LocalDrive = (NERR_BASE+305); // The drive letter is in use locally.
  3646. {$EXTERNALSYM NERR_LocalDrive}
  3647. //
  3648. // Alert error codes.
  3649. //
  3650. // NERR_BASE + (330-339)
  3651. NERR_AlertExists = (NERR_BASE+330); // The specified client is already registered for the specified event.
  3652. {$EXTERNALSYM NERR_AlertExists}
  3653. NERR_TooManyAlerts = (NERR_BASE+331); // The alert table is full.
  3654. {$EXTERNALSYM NERR_TooManyAlerts}
  3655. NERR_NoSuchAlert = (NERR_BASE+332); // An invalid or nonexistent alert name was raised.
  3656. {$EXTERNALSYM NERR_NoSuchAlert}
  3657. NERR_BadRecipient = (NERR_BASE+333); // The alert recipient is invalid.
  3658. {$EXTERNALSYM NERR_BadRecipient}
  3659. NERR_AcctLimitExceeded = (NERR_BASE+334); // A user's session with this server has been deleted
  3660. {$EXTERNALSYM NERR_AcctLimitExceeded}
  3661. // because the user's logon hours are no longer valid.
  3662. //
  3663. // Additional Error and Audit log codes.
  3664. //
  3665. // NERR_BASE +(340-343)
  3666. NERR_InvalidLogSeek = (NERR_BASE+340); // The log file does not contain the requested record number.
  3667. {$EXTERNALSYM NERR_InvalidLogSeek}
  3668. // UNUSED BASE+341
  3669. // UNUSED BASE+342
  3670. // UNUSED BASE+343
  3671. //
  3672. // Additional UAS and NETLOGON codes
  3673. //
  3674. // NERR_BASE +(350-359)
  3675. NERR_BadUasConfig = (NERR_BASE+350); // The user accounts database is not configured correctly.
  3676. {$EXTERNALSYM NERR_BadUasConfig}
  3677. NERR_InvalidUASOp = (NERR_BASE+351); // This operation is not permitted when the Netlogon service is running.
  3678. {$EXTERNALSYM NERR_InvalidUASOp}
  3679. NERR_LastAdmin = (NERR_BASE+352); // This operation is not allowed on the last administrative account.
  3680. {$EXTERNALSYM NERR_LastAdmin}
  3681. NERR_DCNotFound = (NERR_BASE+353); // Could not find domain controller for this domain.
  3682. {$EXTERNALSYM NERR_DCNotFound}
  3683. NERR_LogonTrackingError = (NERR_BASE+354); // Could not set logon information for this user.
  3684. {$EXTERNALSYM NERR_LogonTrackingError}
  3685. NERR_NetlogonNotStarted = (NERR_BASE+355); // The Netlogon service has not been started.
  3686. {$EXTERNALSYM NERR_NetlogonNotStarted}
  3687. NERR_CanNotGrowUASFile = (NERR_BASE+356); // Unable to add to the user accounts database.
  3688. {$EXTERNALSYM NERR_CanNotGrowUASFile}
  3689. NERR_TimeDiffAtDC = (NERR_BASE+357); // This server's clock is not synchronized with the primary domain controller's clock.
  3690. {$EXTERNALSYM NERR_TimeDiffAtDC}
  3691. NERR_PasswordMismatch = (NERR_BASE+358); // A password mismatch has been detected.
  3692. {$EXTERNALSYM NERR_PasswordMismatch}
  3693. //
  3694. // Server Integration error codes.
  3695. //
  3696. // NERR_BASE +(360-369)
  3697. NERR_NoSuchServer = (NERR_BASE+360); // The server identification does not specify a valid server.
  3698. {$EXTERNALSYM NERR_NoSuchServer}
  3699. NERR_NoSuchSession = (NERR_BASE+361); // The session identification does not specify a valid session.
  3700. {$EXTERNALSYM NERR_NoSuchSession}
  3701. NERR_NoSuchConnection = (NERR_BASE+362); // The connection identification does not specify a valid connection.
  3702. {$EXTERNALSYM NERR_NoSuchConnection}
  3703. NERR_TooManyServers = (NERR_BASE+363); // There is no space for another entry in the table of available servers.
  3704. {$EXTERNALSYM NERR_TooManyServers}
  3705. NERR_TooManySessions = (NERR_BASE+364); // The server has reached the maximum number of sessions it supports.
  3706. {$EXTERNALSYM NERR_TooManySessions}
  3707. NERR_TooManyConnections = (NERR_BASE+365); // The server has reached the maximum number of connections it supports.
  3708. {$EXTERNALSYM NERR_TooManyConnections}
  3709. NERR_TooManyFiles = (NERR_BASE+366); // The server cannot open more files because it has reached its maximum number.
  3710. {$EXTERNALSYM NERR_TooManyFiles}
  3711. NERR_NoAlternateServers = (NERR_BASE+367); // There are no alternate servers registered on this server.
  3712. {$EXTERNALSYM NERR_NoAlternateServers}
  3713. // UNUSED BASE+368
  3714. // UNUSED BASE+369
  3715. NERR_TryDownLevel = (NERR_BASE+370); // Try down-level (remote admin protocol) version of API instead.
  3716. {$EXTERNALSYM NERR_TryDownLevel}
  3717. //
  3718. // UPS error codes.
  3719. //
  3720. // NERR_BASE + (380-384)
  3721. NERR_UPSDriverNotStarted = (NERR_BASE+380); // The UPS driver could not be accessed by the UPS service.
  3722. {$EXTERNALSYM NERR_UPSDriverNotStarted}
  3723. NERR_UPSInvalidConfig = (NERR_BASE+381); // The UPS service is not configured correctly.
  3724. {$EXTERNALSYM NERR_UPSInvalidConfig}
  3725. NERR_UPSInvalidCommPort = (NERR_BASE+382); // The UPS service could not access the specified Comm Port.
  3726. {$EXTERNALSYM NERR_UPSInvalidCommPort}
  3727. NERR_UPSSignalAsserted = (NERR_BASE+383); // The UPS indicated a line fail or low battery situation. Service not started.
  3728. {$EXTERNALSYM NERR_UPSSignalAsserted}
  3729. NERR_UPSShutdownFailed = (NERR_BASE+384); // The UPS service failed to perform a system shut down.
  3730. {$EXTERNALSYM NERR_UPSShutdownFailed}
  3731. //
  3732. // Remoteboot error codes.
  3733. //
  3734. // NERR_BASE + (400-419)
  3735. // Error codes 400 - 405 are used by RPLBOOT.SYS.
  3736. // Error codes 403, 407 - 416 are used by RPLLOADR.COM,
  3737. // Error code 417 is the alerter message of REMOTEBOOT (RPLSERVR.EXE).
  3738. // Error code 418 is for when REMOTEBOOT can't start
  3739. // Error code 419 is for a disallowed 2nd rpl connection
  3740. //
  3741. NERR_BadDosRetCode = (NERR_BASE+400); // The program below returned an MS-DOS error code:
  3742. {$EXTERNALSYM NERR_BadDosRetCode}
  3743. NERR_ProgNeedsExtraMem = (NERR_BASE+401); // The program below needs more memory:
  3744. {$EXTERNALSYM NERR_ProgNeedsExtraMem}
  3745. NERR_BadDosFunction = (NERR_BASE+402); // The program below called an unsupported MS-DOS function:
  3746. {$EXTERNALSYM NERR_BadDosFunction}
  3747. NERR_RemoteBootFailed = (NERR_BASE+403); // The workstation failed to boot.
  3748. {$EXTERNALSYM NERR_RemoteBootFailed}
  3749. NERR_BadFileCheckSum = (NERR_BASE+404); // The file below is corrupt.
  3750. {$EXTERNALSYM NERR_BadFileCheckSum}
  3751. NERR_NoRplBootSystem = (NERR_BASE+405); // No loader is specified in the boot-block definition file.
  3752. {$EXTERNALSYM NERR_NoRplBootSystem}
  3753. NERR_RplLoadrNetBiosErr = (NERR_BASE+406); // NetBIOS returned an error: The NCB and SMB are dumped above.
  3754. {$EXTERNALSYM NERR_RplLoadrNetBiosErr}
  3755. NERR_RplLoadrDiskErr = (NERR_BASE+407); // A disk I/O error occurred.
  3756. {$EXTERNALSYM NERR_RplLoadrDiskErr}
  3757. NERR_ImageParamErr = (NERR_BASE+408); // Image parameter substitution failed.
  3758. {$EXTERNALSYM NERR_ImageParamErr}
  3759. NERR_TooManyImageParams = (NERR_BASE+409); // Too many image parameters cross disk sector boundaries.
  3760. {$EXTERNALSYM NERR_TooManyImageParams}
  3761. NERR_NonDosFloppyUsed = (NERR_BASE+410); // The image was not generated from an MS-DOS diskette formatted with /S.
  3762. {$EXTERNALSYM NERR_NonDosFloppyUsed}
  3763. NERR_RplBootRestart = (NERR_BASE+411); // Remote boot will be restarted later.
  3764. {$EXTERNALSYM NERR_RplBootRestart}
  3765. NERR_RplSrvrCallFailed = (NERR_BASE+412); // The call to the Remoteboot server failed.
  3766. {$EXTERNALSYM NERR_RplSrvrCallFailed}
  3767. NERR_CantConnectRplSrvr = (NERR_BASE+413); // Cannot connect to the Remoteboot server.
  3768. {$EXTERNALSYM NERR_CantConnectRplSrvr}
  3769. NERR_CantOpenImageFile = (NERR_BASE+414); // Cannot open image file on the Remoteboot server.
  3770. {$EXTERNALSYM NERR_CantOpenImageFile}
  3771. NERR_CallingRplSrvr = (NERR_BASE+415); // Connecting to the Remoteboot server...
  3772. {$EXTERNALSYM NERR_CallingRplSrvr}
  3773. NERR_StartingRplBoot = (NERR_BASE+416); // Connecting to the Remoteboot server...
  3774. {$EXTERNALSYM NERR_StartingRplBoot}
  3775. NERR_RplBootServiceTerm = (NERR_BASE+417); // Remote boot service was stopped; check the error log for the cause of the problem.
  3776. {$EXTERNALSYM NERR_RplBootServiceTerm}
  3777. NERR_RplBootStartFailed = (NERR_BASE+418); // Remote boot startup failed; check the error log for the cause of the problem.
  3778. {$EXTERNALSYM NERR_RplBootStartFailed}
  3779. NERR_RPL_CONNECTED = (NERR_BASE+419); // A second connection to a Remoteboot resource is not allowed.
  3780. {$EXTERNALSYM NERR_RPL_CONNECTED}
  3781. //
  3782. // FTADMIN API error codes
  3783. //
  3784. // NERR_BASE + (425-434)
  3785. //
  3786. // (Currently not used in NT)
  3787. //
  3788. //
  3789. // Browser service API error codes
  3790. //
  3791. // NERR_BASE + (450-475)
  3792. //
  3793. NERR_BrowserConfiguredToNotRun = (NERR_BASE+450); // The browser service was configured with MaintainServerList=No.
  3794. {$EXTERNALSYM NERR_BrowserConfiguredToNotRun}
  3795. //
  3796. // Additional Remoteboot error codes.
  3797. //
  3798. // NERR_BASE + (510-550)
  3799. NERR_RplNoAdaptersStarted = (NERR_BASE+510); // Service failed to start since none of the network adapters started with this service.
  3800. {$EXTERNALSYM NERR_RplNoAdaptersStarted}
  3801. NERR_RplBadRegistry = (NERR_BASE+511); // Service failed to start due to bad startup information in the registry.
  3802. {$EXTERNALSYM NERR_RplBadRegistry}
  3803. NERR_RplBadDatabase = (NERR_BASE+512); // Service failed to start because its database is absent or corrupt.
  3804. {$EXTERNALSYM NERR_RplBadDatabase}
  3805. NERR_RplRplfilesShare = (NERR_BASE+513); // Service failed to start because RPLFILES share is absent.
  3806. {$EXTERNALSYM NERR_RplRplfilesShare}
  3807. NERR_RplNotRplServer = (NERR_BASE+514); // Service failed to start because RPLUSER group is absent.
  3808. {$EXTERNALSYM NERR_RplNotRplServer}
  3809. NERR_RplCannotEnum = (NERR_BASE+515); // Cannot enumerate service records.
  3810. {$EXTERNALSYM NERR_RplCannotEnum}
  3811. NERR_RplWkstaInfoCorrupted = (NERR_BASE+516); // Workstation record information has been corrupted.
  3812. {$EXTERNALSYM NERR_RplWkstaInfoCorrupted}
  3813. NERR_RplWkstaNotFound = (NERR_BASE+517); // Workstation record was not found.
  3814. {$EXTERNALSYM NERR_RplWkstaNotFound}
  3815. NERR_RplWkstaNameUnavailable = (NERR_BASE+518); // Workstation name is in use by some other workstation.
  3816. {$EXTERNALSYM NERR_RplWkstaNameUnavailable}
  3817. NERR_RplProfileInfoCorrupted = (NERR_BASE+519); // Profile record information has been corrupted.
  3818. {$EXTERNALSYM NERR_RplProfileInfoCorrupted}
  3819. NERR_RplProfileNotFound = (NERR_BASE+520); // Profile record was not found.
  3820. {$EXTERNALSYM NERR_RplProfileNotFound}
  3821. NERR_RplProfileNameUnavailable = (NERR_BASE+521); // Profile name is in use by some other profile.
  3822. {$EXTERNALSYM NERR_RplProfileNameUnavailable}
  3823. NERR_RplProfileNotEmpty = (NERR_BASE+522); // There are workstations using this profile.
  3824. {$EXTERNALSYM NERR_RplProfileNotEmpty}
  3825. NERR_RplConfigInfoCorrupted = (NERR_BASE+523); // Configuration record information has been corrupted.
  3826. {$EXTERNALSYM NERR_RplConfigInfoCorrupted}
  3827. NERR_RplConfigNotFound = (NERR_BASE+524); // Configuration record was not found.
  3828. {$EXTERNALSYM NERR_RplConfigNotFound}
  3829. NERR_RplAdapterInfoCorrupted = (NERR_BASE+525); // Adapter id record information has been corrupted.
  3830. {$EXTERNALSYM NERR_RplAdapterInfoCorrupted}
  3831. NERR_RplInternal = (NERR_BASE+526); // An internal service error has occurred.
  3832. {$EXTERNALSYM NERR_RplInternal}
  3833. NERR_RplVendorInfoCorrupted = (NERR_BASE+527); // Vendor id record information has been corrupted.
  3834. {$EXTERNALSYM NERR_RplVendorInfoCorrupted}
  3835. NERR_RplBootInfoCorrupted = (NERR_BASE+528); // Boot block record information has been corrupted.
  3836. {$EXTERNALSYM NERR_RplBootInfoCorrupted}
  3837. NERR_RplWkstaNeedsUserAcct = (NERR_BASE+529); // The user account for this workstation record is missing.
  3838. {$EXTERNALSYM NERR_RplWkstaNeedsUserAcct}
  3839. NERR_RplNeedsRPLUSERAcct = (NERR_BASE+530); // The RPLUSER local group could not be found.
  3840. {$EXTERNALSYM NERR_RplNeedsRPLUSERAcct}
  3841. NERR_RplBootNotFound = (NERR_BASE+531); // Boot block record was not found.
  3842. {$EXTERNALSYM NERR_RplBootNotFound}
  3843. NERR_RplIncompatibleProfile = (NERR_BASE+532); // Chosen profile is incompatible with this workstation.
  3844. {$EXTERNALSYM NERR_RplIncompatibleProfile}
  3845. NERR_RplAdapterNameUnavailable = (NERR_BASE+533); // Chosen network adapter id is in use by some other workstation.
  3846. {$EXTERNALSYM NERR_RplAdapterNameUnavailable}
  3847. NERR_RplConfigNotEmpty = (NERR_BASE+534); // There are profiles using this configuration.
  3848. {$EXTERNALSYM NERR_RplConfigNotEmpty}
  3849. NERR_RplBootInUse = (NERR_BASE+535); // There are workstations, profiles or configurations using this boot block.
  3850. {$EXTERNALSYM NERR_RplBootInUse}
  3851. NERR_RplBackupDatabase = (NERR_BASE+536); // Service failed to backup Remoteboot database.
  3852. {$EXTERNALSYM NERR_RplBackupDatabase}
  3853. NERR_RplAdapterNotFound = (NERR_BASE+537); // Adapter record was not found.
  3854. {$EXTERNALSYM NERR_RplAdapterNotFound}
  3855. NERR_RplVendorNotFound = (NERR_BASE+538); // Vendor record was not found.
  3856. {$EXTERNALSYM NERR_RplVendorNotFound}
  3857. NERR_RplVendorNameUnavailable = (NERR_BASE+539); // Vendor name is in use by some other vendor record.
  3858. {$EXTERNALSYM NERR_RplVendorNameUnavailable}
  3859. NERR_RplBootNameUnavailable = (NERR_BASE+540); // (boot name, vendor id) is in use by some other boot block record.
  3860. {$EXTERNALSYM NERR_RplBootNameUnavailable}
  3861. NERR_RplConfigNameUnavailable = (NERR_BASE+541); // Configuration name is in use by some other configuration.
  3862. {$EXTERNALSYM NERR_RplConfigNameUnavailable}
  3863. //*INTERNAL_ONLY*
  3864. //
  3865. // Dfs API error codes.
  3866. //
  3867. // NERR_BASE + (560-590)
  3868. NERR_DfsInternalCorruption = (NERR_BASE+560); // The internal database maintained by the DFS service is corrupt
  3869. {$EXTERNALSYM NERR_DfsInternalCorruption}
  3870. NERR_DfsVolumeDataCorrupt = (NERR_BASE+561); // One of the records in the internal DFS database is corrupt
  3871. {$EXTERNALSYM NERR_DfsVolumeDataCorrupt}
  3872. NERR_DfsNoSuchVolume = (NERR_BASE+562); // There is no DFS name whose entry path matches the input Entry Path
  3873. {$EXTERNALSYM NERR_DfsNoSuchVolume}
  3874. NERR_DfsVolumeAlreadyExists = (NERR_BASE+563); // A root or link with the given name already exists
  3875. {$EXTERNALSYM NERR_DfsVolumeAlreadyExists}
  3876. NERR_DfsAlreadyShared = (NERR_BASE+564); // The server share specified is already shared in the DFS
  3877. {$EXTERNALSYM NERR_DfsAlreadyShared}
  3878. NERR_DfsNoSuchShare = (NERR_BASE+565); // The indicated server share does not support the indicated DFS namespace
  3879. {$EXTERNALSYM NERR_DfsNoSuchShare}
  3880. NERR_DfsNotALeafVolume = (NERR_BASE+566); // The operation is not valid on this portion of the namespace
  3881. {$EXTERNALSYM NERR_DfsNotALeafVolume}
  3882. NERR_DfsLeafVolume = (NERR_BASE+567); // The operation is not valid on this portion of the namespace
  3883. {$EXTERNALSYM NERR_DfsLeafVolume}
  3884. NERR_DfsVolumeHasMultipleServers = (NERR_BASE+568); // The operation is ambiguous because the link has multiple servers
  3885. {$EXTERNALSYM NERR_DfsVolumeHasMultipleServers}
  3886. NERR_DfsCantCreateJunctionPoint = (NERR_BASE+569); // Unable to create a link
  3887. {$EXTERNALSYM NERR_DfsCantCreateJunctionPoint}
  3888. NERR_DfsServerNotDfsAware = (NERR_BASE+570); // The server is not DFS Aware
  3889. {$EXTERNALSYM NERR_DfsServerNotDfsAware}
  3890. NERR_DfsBadRenamePath = (NERR_BASE+571); // The specified rename target path is invalid
  3891. {$EXTERNALSYM NERR_DfsBadRenamePath}
  3892. NERR_DfsVolumeIsOffline = (NERR_BASE+572); // The specified DFS link is offline
  3893. {$EXTERNALSYM NERR_DfsVolumeIsOffline}
  3894. NERR_DfsNoSuchServer = (NERR_BASE+573); // The specified server is not a server for this link
  3895. {$EXTERNALSYM NERR_DfsNoSuchServer}
  3896. NERR_DfsCyclicalName = (NERR_BASE+574); // A cycle in the DFS name was detected
  3897. {$EXTERNALSYM NERR_DfsCyclicalName}
  3898. NERR_DfsNotSupportedInServerDfs = (NERR_BASE+575); // The operation is not supported on a server-based DFS
  3899. {$EXTERNALSYM NERR_DfsNotSupportedInServerDfs}
  3900. NERR_DfsDuplicateService = (NERR_BASE+576); // This link is already supported by the specified server-share
  3901. {$EXTERNALSYM NERR_DfsDuplicateService}
  3902. NERR_DfsCantRemoveLastServerShare = (NERR_BASE+577); // Can't remove the last server-share supporting this root or link
  3903. {$EXTERNALSYM NERR_DfsCantRemoveLastServerShare}
  3904. NERR_DfsVolumeIsInterDfs = (NERR_BASE+578); // The operation is not supported for an Inter-DFS link
  3905. {$EXTERNALSYM NERR_DfsVolumeIsInterDfs}
  3906. NERR_DfsInconsistent = (NERR_BASE+579); // The internal state of the DFS Service has become inconsistent
  3907. {$EXTERNALSYM NERR_DfsInconsistent}
  3908. NERR_DfsServerUpgraded = (NERR_BASE+580); // The DFS Service has been installed on the specified server
  3909. {$EXTERNALSYM NERR_DfsServerUpgraded}
  3910. NERR_DfsDataIsIdentical = (NERR_BASE+581); // The DFS data being reconciled is identical
  3911. {$EXTERNALSYM NERR_DfsDataIsIdentical}
  3912. NERR_DfsCantRemoveDfsRoot = (NERR_BASE+582); // The DFS root cannot be deleted - Uninstall DFS if required
  3913. {$EXTERNALSYM NERR_DfsCantRemoveDfsRoot}
  3914. NERR_DfsChildOrParentInDfs = (NERR_BASE+583); // A child or parent directory of the share is already in a DFS
  3915. {$EXTERNALSYM NERR_DfsChildOrParentInDfs}
  3916. NERR_DfsInternalError = (NERR_BASE+590); // DFS internal error
  3917. {$EXTERNALSYM NERR_DfsInternalError}
  3918. //
  3919. // Net setup error codes.
  3920. //
  3921. // NERR_BASE + (591-600)
  3922. NERR_SetupAlreadyJoined = (NERR_BASE+591); // This machine is already joined to a domain.
  3923. {$EXTERNALSYM NERR_SetupAlreadyJoined}
  3924. NERR_SetupNotJoined = (NERR_BASE+592); // This machine is not currently joined to a domain.
  3925. {$EXTERNALSYM NERR_SetupNotJoined}
  3926. NERR_SetupDomainController = (NERR_BASE+593); // This machine is a domain controller and cannot be unjoined from a domain.
  3927. {$EXTERNALSYM NERR_SetupDomainController}
  3928. NERR_DefaultJoinRequired = (NERR_BASE+594); // The destination domain controller does not support creating machine accounts in OUs.
  3929. {$EXTERNALSYM NERR_DefaultJoinRequired}
  3930. NERR_InvalidWorkgroupName = (NERR_BASE+595); // The specified workgroup name is invalid.
  3931. {$EXTERNALSYM NERR_InvalidWorkgroupName}
  3932. NERR_NameUsesIncompatibleCodePage = (NERR_BASE+596); // The specified computer name is incompatible with the default language used on the domain controller.
  3933. {$EXTERNALSYM NERR_NameUsesIncompatibleCodePage}
  3934. NERR_ComputerAccountNotFound = (NERR_BASE+597); // The specified computer account could not be found.
  3935. {$EXTERNALSYM NERR_ComputerAccountNotFound}
  3936. NERR_PersonalSku = (NERR_BASE+598); // This version of Windows cannot be joined to a domain.
  3937. {$EXTERNALSYM NERR_PersonalSku}
  3938. //
  3939. // Some Password and account error results
  3940. //
  3941. // NERR_BASE + (601 - 608)
  3942. //
  3943. NERR_PasswordMustChange = (NERR_BASE + 601); // Password must change at next logon
  3944. {$EXTERNALSYM NERR_PasswordMustChange}
  3945. NERR_AccountLockedOut = (NERR_BASE + 602); // Account is locked out
  3946. {$EXTERNALSYM NERR_AccountLockedOut}
  3947. NERR_PasswordTooLong = (NERR_BASE + 603); // Password is too long
  3948. {$EXTERNALSYM NERR_PasswordTooLong}
  3949. NERR_PasswordNotComplexEnough = (NERR_BASE + 604); // Password doesn't meet the complexity policy
  3950. {$EXTERNALSYM NERR_PasswordNotComplexEnough}
  3951. NERR_PasswordFilterError = (NERR_BASE + 605); // Password doesn't meet the requirements of the filter dll's
  3952. {$EXTERNALSYM NERR_PasswordFilterError}
  3953. //**********WARNING ****************
  3954. //The range 2750-2799 has been *
  3955. //allocated to the IBM LAN Server *
  3956. //*********************************
  3957. //**********WARNING ****************
  3958. //The range 2900-2999 has been *
  3959. //reserved for Microsoft OEMs *
  3960. //*********************************
  3961. //*END_INTERNAL*
  3962. MAX_NERR = (NERR_BASE+899); // This is the last error in NERR range.
  3963. {$EXTERNALSYM MAX_NERR}
  3964. //
  3965. // end of list
  3966. //
  3967. // WARNING: Do not exceed MAX_NERR; values above this are used by
  3968. // other error code ranges (errlog.h, service.h, apperr.h).
  3969. // JwaLmCons, complete
  3970. // LAN Manager common definitions
  3971. const
  3972. NetApi32 = 'netapi32.dll';
  3973. //
  3974. // NOTE: Lengths of strings are given as the maximum lengths of the
  3975. // string in characters (not bytes). This does not include space for the
  3976. // terminating 0-characters. When allocating space for such an item,
  3977. // use the form:
  3978. //
  3979. // TCHAR username[UNLEN+1];
  3980. //
  3981. // Definitions of the form LN20_* define those values in effect for
  3982. // LanMan 2.0.
  3983. //
  3984. //
  3985. // String Lengths for various LanMan names
  3986. //
  3987. const
  3988. CNLEN = 15; // Computer name length
  3989. {$EXTERNALSYM CNLEN}
  3990. LM20_CNLEN = 15; // LM 2.0 Computer name length
  3991. {$EXTERNALSYM LM20_CNLEN}
  3992. DNLEN = CNLEN; // Maximum domain name length
  3993. {$EXTERNALSYM DNLEN}
  3994. LM20_DNLEN = LM20_CNLEN; // LM 2.0 Maximum domain name length
  3995. {$EXTERNALSYM LM20_DNLEN}
  3996. //#if (CNLEN != DNLEN)
  3997. //#error CNLEN and DNLEN are not equal
  3998. //#endif
  3999. UNCLEN = (CNLEN+2); // UNC computer name length
  4000. {$EXTERNALSYM UNCLEN}
  4001. LM20_UNCLEN = (LM20_CNLEN+2); // LM 2.0 UNC computer name length
  4002. {$EXTERNALSYM LM20_UNCLEN}
  4003. NNLEN = 80; // Net name length (share name)
  4004. {$EXTERNALSYM NNLEN}
  4005. LM20_NNLEN = 12; // LM 2.0 Net name length
  4006. {$EXTERNALSYM LM20_NNLEN}
  4007. RMLEN = (UNCLEN+1+NNLEN); // Max remote name length
  4008. {$EXTERNALSYM RMLEN}
  4009. LM20_RMLEN = (LM20_UNCLEN+1+LM20_NNLEN); // LM 2.0 Max remote name length
  4010. {$EXTERNALSYM LM20_RMLEN}
  4011. SNLEN = 80; // Service name length
  4012. {$EXTERNALSYM SNLEN}
  4013. LM20_SNLEN = 15; // LM 2.0 Service name length
  4014. {$EXTERNALSYM LM20_SNLEN}
  4015. STXTLEN = 256; // Service text length
  4016. {$EXTERNALSYM STXTLEN}
  4017. LM20_STXTLEN = 63; // LM 2.0 Service text length
  4018. {$EXTERNALSYM LM20_STXTLEN}
  4019. PATHLEN = 256; // Max. path (not including drive name)
  4020. {$EXTERNALSYM PATHLEN}
  4021. LM20_PATHLEN = 256; // LM 2.0 Max. path
  4022. {$EXTERNALSYM LM20_PATHLEN}
  4023. DEVLEN = 80; // Device name length
  4024. {$EXTERNALSYM DEVLEN}
  4025. LM20_DEVLEN = 8; // LM 2.0 Device name length
  4026. {$EXTERNALSYM LM20_DEVLEN}
  4027. EVLEN = 16; // Event name length
  4028. {$EXTERNALSYM EVLEN}
  4029. //
  4030. // User, Group and Password lengths
  4031. //
  4032. UNLEN = 256; // Maximum user name length
  4033. {$EXTERNALSYM UNLEN}
  4034. LM20_UNLEN = 20; // LM 2.0 Maximum user name length
  4035. {$EXTERNALSYM LM20_UNLEN}
  4036. GNLEN = UNLEN; // Group name
  4037. {$EXTERNALSYM GNLEN}
  4038. LM20_GNLEN = LM20_UNLEN; // LM 2.0 Group name
  4039. {$EXTERNALSYM LM20_GNLEN}
  4040. PWLEN = 256; // Maximum password length
  4041. {$EXTERNALSYM PWLEN}
  4042. LM20_PWLEN = 14; // LM 2.0 Maximum password length
  4043. {$EXTERNALSYM LM20_PWLEN}
  4044. SHPWLEN = 8; // Share password length (bytes)
  4045. {$EXTERNALSYM SHPWLEN}
  4046. CLTYPE_LEN = 12; // Length of client type string
  4047. {$EXTERNALSYM CLTYPE_LEN}
  4048. MAXCOMMENTSZ = 256; // Multipurpose comment length
  4049. {$EXTERNALSYM MAXCOMMENTSZ}
  4050. LM20_MAXCOMMENTSZ = 48; // LM 2.0 Multipurpose comment length
  4051. {$EXTERNALSYM LM20_MAXCOMMENTSZ}
  4052. QNLEN = NNLEN; // Queue name maximum length
  4053. {$EXTERNALSYM QNLEN}
  4054. LM20_QNLEN = LM20_NNLEN; // LM 2.0 Queue name maximum length
  4055. {$EXTERNALSYM LM20_QNLEN}
  4056. //#if (QNLEN != NNLEN)
  4057. //# error QNLEN and NNLEN are not equal
  4058. //#endif
  4059. //
  4060. // The ALERTSZ and MAXDEVENTRIES defines have not yet been NT'ized.
  4061. // Whoever ports these components should change these values appropriately.
  4062. //
  4063. ALERTSZ = 128; // size of alert string in server
  4064. {$EXTERNALSYM ALERTSZ}
  4065. MAXDEVENTRIES = (SizeOf(Integer)*8); // Max number of device entries
  4066. {$EXTERNALSYM MAXDEVENTRIES}
  4067. //
  4068. // We use int bitmap to represent
  4069. //
  4070. NETBIOS_NAME_LEN = 16; // NetBIOS net name (bytes)
  4071. {$EXTERNALSYM NETBIOS_NAME_LEN}
  4072. //
  4073. // Value to be used with APIs which have a "preferred maximum length"
  4074. // parameter. This value indicates that the API should just allocate
  4075. // "as much as it takes."
  4076. //
  4077. MAX_PREFERRED_LENGTH = DWORD(-1);
  4078. {$EXTERNALSYM MAX_PREFERRED_LENGTH}
  4079. //
  4080. // Constants used with encryption
  4081. //
  4082. CRYPT_KEY_LEN = 7;
  4083. {$EXTERNALSYM CRYPT_KEY_LEN}
  4084. CRYPT_TXT_LEN = 8;
  4085. {$EXTERNALSYM CRYPT_TXT_LEN}
  4086. ENCRYPTED_PWLEN = 16;
  4087. {$EXTERNALSYM ENCRYPTED_PWLEN}
  4088. SESSION_PWLEN = 24;
  4089. {$EXTERNALSYM SESSION_PWLEN}
  4090. SESSION_CRYPT_KLEN = 21;
  4091. {$EXTERNALSYM SESSION_CRYPT_KLEN}
  4092. //
  4093. // Value to be used with SetInfo calls to allow setting of all
  4094. // settable parameters (parmnum zero option)
  4095. //
  4096. PARMNUM_ALL = 0;
  4097. {$EXTERNALSYM PARMNUM_ALL}
  4098. PARM_ERROR_UNKNOWN = DWORD(-1);
  4099. {$EXTERNALSYM PARM_ERROR_UNKNOWN}
  4100. PARM_ERROR_NONE = 0;
  4101. {$EXTERNALSYM PARM_ERROR_NONE}
  4102. PARMNUM_BASE_INFOLEVEL = 1000;
  4103. {$EXTERNALSYM PARMNUM_BASE_INFOLEVEL}
  4104. //
  4105. // Only the UNICODE version of the LM APIs are available on NT.
  4106. // Non-UNICODE version on other platforms
  4107. //
  4108. //#if defined( _WIN32_WINNT ) || defined( WINNT ) || defined( FORCE_UNICODE )
  4109. {$IFDEF _WIN32_WINNT}
  4110. {$DEFINE LM_USE_UNICODE}
  4111. {$ENDIF}
  4112. {$IFDEF FORCE_UNICODE}
  4113. {$DEFINE LM_USE_UNICODE}
  4114. {$ENDIF}
  4115. {$IFDEF LM_USE_UNICODE}
  4116. type
  4117. LMSTR = LPWSTR;
  4118. {$EXTERNALSYM LMSTR}
  4119. LMCSTR = LPCWSTR;
  4120. {$EXTERNALSYM LMCSTR}
  4121. PLMSTR = ^LMSTR;
  4122. {$NODEFINE PLMSTR}
  4123. {$ELSE ~LM_USE_UNICODE}
  4124. type
  4125. LMSTR = LPSTR;
  4126. {$EXTERNALSYM LMSTR}
  4127. LMCSTR = LPCSTR;
  4128. {$EXTERNALSYM LMCSTR}
  4129. {$ENDIF ~LM_USE_UNICODE}
  4130. //
  4131. // Message File Names
  4132. //
  4133. const
  4134. MESSAGE_FILENAME = 'NETMSG';
  4135. {$EXTERNALSYM MESSAGE_FILENAME}
  4136. OS2MSG_FILENAME = 'BASE';
  4137. {$EXTERNALSYM OS2MSG_FILENAME}
  4138. HELP_MSG_FILENAME = 'NETH';
  4139. {$EXTERNALSYM HELP_MSG_FILENAME}
  4140. // ** INTERNAL_ONLY **
  4141. // The backup message file named here is a duplicate of net.msg. It
  4142. // is not shipped with the product, but is used at buildtime to
  4143. // msgbind certain messages to netapi.dll and some of the services.
  4144. // This allows for OEMs to modify the message text in net.msg and
  4145. // have those changes show up. Only in case there is an error in
  4146. // retrieving the messages from net.msg do we then get the bound
  4147. // messages out of bak.msg (really out of the message segment).
  4148. BACKUP_MSG_FILENAME = 'BAK.MSG';
  4149. {$EXTERNALSYM BACKUP_MSG_FILENAME}
  4150. // ** END_INTERNAL **
  4151. //
  4152. // Keywords used in Function Prototypes
  4153. //
  4154. type
  4155. NET_API_STATUS = DWORD;
  4156. {$EXTERNALSYM NET_API_STATUS}
  4157. TNetApiStatus = NET_API_STATUS;
  4158. //
  4159. // The platform ID indicates the levels to use for platform-specific
  4160. // information.
  4161. //
  4162. const
  4163. PLATFORM_ID_DOS = 300;
  4164. {$EXTERNALSYM PLATFORM_ID_DOS}
  4165. PLATFORM_ID_OS2 = 400;
  4166. {$EXTERNALSYM PLATFORM_ID_OS2}
  4167. PLATFORM_ID_NT = 500;
  4168. {$EXTERNALSYM PLATFORM_ID_NT}
  4169. PLATFORM_ID_OSF = 600;
  4170. {$EXTERNALSYM PLATFORM_ID_OSF}
  4171. PLATFORM_ID_VMS = 700;
  4172. {$EXTERNALSYM PLATFORM_ID_VMS}
  4173. //
  4174. // There message numbers assigned to different LANMAN components
  4175. // are as defined below.
  4176. //
  4177. // lmerr.h: 2100 - 2999 NERR_BASE
  4178. // alertmsg.h: 3000 - 3049 ALERT_BASE
  4179. // lmsvc.h: 3050 - 3099 SERVICE_BASE
  4180. // lmerrlog.h: 3100 - 3299 ERRLOG_BASE
  4181. // msgtext.h: 3300 - 3499 MTXT_BASE
  4182. // apperr.h: 3500 - 3999 APPERR_BASE
  4183. // apperrfs.h: 4000 - 4299 APPERRFS_BASE
  4184. // apperr2.h: 4300 - 5299 APPERR2_BASE
  4185. // ncberr.h: 5300 - 5499 NRCERR_BASE
  4186. // alertmsg.h: 5500 - 5599 ALERT2_BASE
  4187. // lmsvc.h: 5600 - 5699 SERVICE2_BASE
  4188. // lmerrlog.h 5700 - 5899 ERRLOG2_BASE
  4189. //
  4190. MIN_LANMAN_MESSAGE_ID = NERR_BASE;
  4191. {$EXTERNALSYM MIN_LANMAN_MESSAGE_ID}
  4192. MAX_LANMAN_MESSAGE_ID = 5899;
  4193. {$EXTERNALSYM MAX_LANMAN_MESSAGE_ID}
  4194. // line 59
  4195. //
  4196. // Function Prototypes - User
  4197. //
  4198. function NetUserAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4199. {$EXTERNALSYM NetUserAdd}
  4200. function NetUserEnum(servername: LPCWSTR; level, filter: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  4201. {$EXTERNALSYM NetUserEnum}
  4202. function NetUserGetInfo(servername, username: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  4203. {$EXTERNALSYM NetUserGetInfo}
  4204. function NetUserSetInfo(servername, username: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4205. {$EXTERNALSYM NetUserSetInfo}
  4206. function NetUserDel(servername: LPCWSTR; username: LPCWSTR): NET_API_STATUS; stdcall;
  4207. {$EXTERNALSYM NetUserDel}
  4208. function NetUserGetGroups(servername, username: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS; stdcall;
  4209. {$EXTERNALSYM NetUserGetGroups}
  4210. function NetUserSetGroups(servername, username: LPCWSTR; level: DWORD; buf: PByte; num_entries: DWORD): NET_API_STATUS; stdcall;
  4211. {$EXTERNALSYM NetUserSetGroups}
  4212. function NetUserGetLocalGroups(servername, username: LPCWSTR; level, flags: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS; stdcall;
  4213. {$EXTERNALSYM NetUserGetLocalGroups}
  4214. function NetUserModalsGet(servername: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  4215. {$EXTERNALSYM NetUserModalsGet}
  4216. function NetUserModalsSet(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4217. {$EXTERNALSYM NetUserModalsSet}
  4218. function NetUserChangePassword(domainname, username, oldpassword, newpassword: LPCWSTR): NET_API_STATUS; stdcall;
  4219. {$EXTERNALSYM NetUserChangePassword}
  4220. //
  4221. // Data Structures - User
  4222. //
  4223. type
  4224. {$IFNDEF FPC}
  4225. LPUSER_INFO_0 = ^USER_INFO_0;
  4226. {$EXTERNALSYM LPUSER_INFO_0}
  4227. PUSER_INFO_0 = ^USER_INFO_0;
  4228. {$EXTERNALSYM PUSER_INFO_0}
  4229. _USER_INFO_0 = record
  4230. usri0_name: LPWSTR;
  4231. end;
  4232. {$EXTERNALSYM _USER_INFO_0}
  4233. USER_INFO_0 = _USER_INFO_0;
  4234. {$EXTERNALSYM USER_INFO_0}
  4235. TUserInfo0 = USER_INFO_0;
  4236. PUserInfo0 = PUSER_INFO_0;
  4237. {$ENDIF ~FPC}
  4238. LPUSER_INFO_1 = ^USER_INFO_1;
  4239. {$EXTERNALSYM LPUSER_INFO_1}
  4240. PUSER_INFO_1 = ^USER_INFO_1;
  4241. {$EXTERNALSYM PUSER_INFO_1}
  4242. _USER_INFO_1 = record
  4243. usri1_name: LPWSTR;
  4244. usri1_password: LPWSTR;
  4245. usri1_password_age: DWORD;
  4246. usri1_priv: DWORD;
  4247. usri1_home_dir: LPWSTR;
  4248. usri1_comment: LPWSTR;
  4249. usri1_flags: DWORD;
  4250. usri1_script_path: LPWSTR;
  4251. end;
  4252. {$EXTERNALSYM _USER_INFO_1}
  4253. USER_INFO_1 = _USER_INFO_1;
  4254. {$EXTERNALSYM USER_INFO_1}
  4255. TUserInfo1 = USER_INFO_1;
  4256. PUserInfo1 = PUSER_INFO_1;
  4257. {$IFNDEF FPC}
  4258. LPUSER_INFO_2 = ^USER_INFO_2;
  4259. {$EXTERNALSYM LPUSER_INFO_2}
  4260. PUSER_INFO_2 = ^USER_INFO_2;
  4261. {$EXTERNALSYM PUSER_INFO_2}
  4262. _USER_INFO_2 = record
  4263. usri2_name: LPWSTR;
  4264. usri2_password: LPWSTR;
  4265. usri2_password_age: DWORD;
  4266. usri2_priv: DWORD;
  4267. usri2_home_dir: LPWSTR;
  4268. usri2_comment: LPWSTR;
  4269. usri2_flags: DWORD;
  4270. usri2_script_path: LPWSTR;
  4271. usri2_auth_flags: DWORD;
  4272. usri2_full_name: LPWSTR;
  4273. usri2_usr_comment: LPWSTR;
  4274. usri2_parms: LPWSTR;
  4275. usri2_workstations: LPWSTR;
  4276. usri2_last_logon: DWORD;
  4277. usri2_last_logoff: DWORD;
  4278. usri2_acct_expires: DWORD;
  4279. usri2_max_storage: DWORD;
  4280. usri2_units_per_week: DWORD;
  4281. usri2_logon_hours: PBYTE;
  4282. usri2_bad_pw_count: DWORD;
  4283. usri2_num_logons: DWORD;
  4284. usri2_logon_server: LPWSTR;
  4285. usri2_country_code: DWORD;
  4286. usri2_code_page: DWORD;
  4287. end;
  4288. {$EXTERNALSYM _USER_INFO_2}
  4289. USER_INFO_2 = _USER_INFO_2;
  4290. {$EXTERNALSYM USER_INFO_2}
  4291. TUserInfo2 = USER_INFO_2;
  4292. PUserInfo2 = puser_info_2;
  4293. {$ENDIF ~FPC}
  4294. // line 799
  4295. //
  4296. // Special Values and Constants - User
  4297. //
  4298. //
  4299. // Bit masks for field usriX_flags of USER_INFO_X (X = 0/1).
  4300. //
  4301. const
  4302. UF_SCRIPT = $0001;
  4303. {$EXTERNALSYM UF_SCRIPT}
  4304. UF_ACCOUNTDISABLE = $0002;
  4305. {$EXTERNALSYM UF_ACCOUNTDISABLE}
  4306. UF_HOMEDIR_REQUIRED = $0008;
  4307. {$EXTERNALSYM UF_HOMEDIR_REQUIRED}
  4308. UF_LOCKOUT = $0010;
  4309. {$EXTERNALSYM UF_LOCKOUT}
  4310. UF_PASSWD_NOTREQD = $0020;
  4311. {$EXTERNALSYM UF_PASSWD_NOTREQD}
  4312. UF_PASSWD_CANT_CHANGE = $0040;
  4313. {$EXTERNALSYM UF_PASSWD_CANT_CHANGE}
  4314. UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = $0080;
  4315. {$EXTERNALSYM UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED}
  4316. //
  4317. // Account type bits as part of usri_flags.
  4318. //
  4319. UF_TEMP_DUPLICATE_ACCOUNT = $0100;
  4320. {$EXTERNALSYM UF_TEMP_DUPLICATE_ACCOUNT}
  4321. UF_NORMAL_ACCOUNT = $0200;
  4322. {$EXTERNALSYM UF_NORMAL_ACCOUNT}
  4323. UF_INTERDOMAIN_TRUST_ACCOUNT = $0800;
  4324. {$EXTERNALSYM UF_INTERDOMAIN_TRUST_ACCOUNT}
  4325. UF_WORKSTATION_TRUST_ACCOUNT = $1000;
  4326. {$EXTERNALSYM UF_WORKSTATION_TRUST_ACCOUNT}
  4327. UF_SERVER_TRUST_ACCOUNT = $2000;
  4328. {$EXTERNALSYM UF_SERVER_TRUST_ACCOUNT}
  4329. UF_MACHINE_ACCOUNT_MASK = UF_INTERDOMAIN_TRUST_ACCOUNT or UF_WORKSTATION_TRUST_ACCOUNT or UF_SERVER_TRUST_ACCOUNT;
  4330. {$EXTERNALSYM UF_MACHINE_ACCOUNT_MASK}
  4331. UF_ACCOUNT_TYPE_MASK = UF_TEMP_DUPLICATE_ACCOUNT or UF_NORMAL_ACCOUNT or
  4332. UF_INTERDOMAIN_TRUST_ACCOUNT or UF_WORKSTATION_TRUST_ACCOUNT or UF_SERVER_TRUST_ACCOUNT;
  4333. {$EXTERNALSYM UF_ACCOUNT_TYPE_MASK}
  4334. UF_DONT_EXPIRE_PASSWD = $10000;
  4335. {$EXTERNALSYM UF_DONT_EXPIRE_PASSWD}
  4336. UF_MNS_LOGON_ACCOUNT = $20000;
  4337. {$EXTERNALSYM UF_MNS_LOGON_ACCOUNT}
  4338. UF_SMARTCARD_REQUIRED = $40000;
  4339. {$EXTERNALSYM UF_SMARTCARD_REQUIRED}
  4340. UF_TRUSTED_FOR_DELEGATION = $80000;
  4341. {$EXTERNALSYM UF_TRUSTED_FOR_DELEGATION}
  4342. UF_NOT_DELEGATED = $100000;
  4343. {$EXTERNALSYM UF_NOT_DELEGATED}
  4344. UF_USE_DES_KEY_ONLY = $200000;
  4345. {$EXTERNALSYM UF_USE_DES_KEY_ONLY}
  4346. UF_DONT_REQUIRE_PREAUTH = $400000;
  4347. {$EXTERNALSYM UF_DONT_REQUIRE_PREAUTH}
  4348. UF_PASSWORD_EXPIRED = DWORD($800000);
  4349. {$EXTERNALSYM UF_PASSWORD_EXPIRED}
  4350. UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION = $1000000;
  4351. {$EXTERNALSYM UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION}
  4352. UF_SETTABLE_BITS =
  4353. UF_SCRIPT or
  4354. UF_ACCOUNTDISABLE or
  4355. UF_LOCKOUT or
  4356. UF_HOMEDIR_REQUIRED or
  4357. UF_PASSWD_NOTREQD or
  4358. UF_PASSWD_CANT_CHANGE or
  4359. UF_ACCOUNT_TYPE_MASK or
  4360. UF_DONT_EXPIRE_PASSWD or
  4361. UF_MNS_LOGON_ACCOUNT or
  4362. UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED or
  4363. UF_SMARTCARD_REQUIRED or
  4364. UF_TRUSTED_FOR_DELEGATION or
  4365. UF_NOT_DELEGATED or
  4366. UF_USE_DES_KEY_ONLY or
  4367. UF_DONT_REQUIRE_PREAUTH or
  4368. UF_PASSWORD_EXPIRED or
  4369. UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION;
  4370. {$EXTERNALSYM UF_SETTABLE_BITS}
  4371. // line 1056
  4372. //
  4373. // For SetInfo call (parmnum 0) when password change not required
  4374. //
  4375. NULL_USERSETINFO_PASSWD = ' ';
  4376. {$EXTERNALSYM NULL_USERSETINFO_PASSWD}
  4377. TIMEQ_FOREVER = ULONG(-1);
  4378. {$EXTERNALSYM TIMEQ_FOREVER}
  4379. USER_MAXSTORAGE_UNLIMITED = ULONG(-1);
  4380. {$EXTERNALSYM USER_MAXSTORAGE_UNLIMITED}
  4381. USER_NO_LOGOFF = ULONG(-1);
  4382. {$EXTERNALSYM USER_NO_LOGOFF}
  4383. UNITS_PER_DAY = 24;
  4384. {$EXTERNALSYM UNITS_PER_DAY}
  4385. UNITS_PER_WEEK = UNITS_PER_DAY * 7;
  4386. {$EXTERNALSYM UNITS_PER_WEEK}
  4387. //
  4388. // Privilege levels (USER_INFO_X field usriX_priv (X = 0/1)).
  4389. //
  4390. USER_PRIV_MASK = $3;
  4391. {$EXTERNALSYM USER_PRIV_MASK}
  4392. USER_PRIV_GUEST = 0;
  4393. {$EXTERNALSYM USER_PRIV_GUEST}
  4394. USER_PRIV_USER = 1;
  4395. {$EXTERNALSYM USER_PRIV_USER}
  4396. USER_PRIV_ADMIN = 2;
  4397. {$EXTERNALSYM USER_PRIV_ADMIN}
  4398. // line 1177
  4399. //
  4400. // Group Class
  4401. //
  4402. //
  4403. // Function Prototypes
  4404. //
  4405. function NetGroupAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4406. {$EXTERNALSYM NetGroupAdd}
  4407. function NetGroupAddUser(servername, GroupName, username: LPCWSTR): NET_API_STATUS; stdcall;
  4408. {$EXTERNALSYM NetGroupAddUser}
  4409. function NetGroupEnum(servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  4410. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resume_handle: PDWORD_PTR): NET_API_STATUS; stdcall;
  4411. {$EXTERNALSYM NetGroupEnum}
  4412. function NetGroupGetInfo(servername, groupname: LPCWSTR; level: DWORD; bufptr: PByte): NET_API_STATUS; stdcall;
  4413. {$EXTERNALSYM NetGroupGetInfo}
  4414. function NetGroupSetInfo(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4415. {$EXTERNALSYM NetGroupSetInfo}
  4416. function NetGroupDel(servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS; stdcall;
  4417. {$EXTERNALSYM NetGroupDel}
  4418. function NetGroupDelUser(servername: LPCWSTR; GroupName: LPCWSTR; Username: LPCWSTR): NET_API_STATUS; stdcall;
  4419. {$EXTERNALSYM NetGroupDelUser}
  4420. function NetGroupGetUsers(servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; ResumeHandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  4421. {$EXTERNALSYM NetGroupGetUsers}
  4422. function NetGroupSetUsers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  4423. {$EXTERNALSYM NetGroupSetUsers}
  4424. //
  4425. // Data Structures - Group
  4426. //
  4427. type
  4428. LPGROUP_INFO_0 = ^GROUP_INFO_0;
  4429. {$EXTERNALSYM LPGROUP_INFO_0}
  4430. PGROUP_INFO_0 = ^GROUP_INFO_0;
  4431. {$EXTERNALSYM PGROUP_INFO_0}
  4432. _GROUP_INFO_0 = record
  4433. grpi0_name: LPWSTR;
  4434. end;
  4435. {$EXTERNALSYM _GROUP_INFO_0}
  4436. GROUP_INFO_0 = _GROUP_INFO_0;
  4437. {$EXTERNALSYM GROUP_INFO_0}
  4438. TGroupInfo0 = GROUP_INFO_0;
  4439. PGroupInfo0 = PGROUP_INFO_0;
  4440. LPGROUP_INFO_1 = ^GROUP_INFO_1;
  4441. {$EXTERNALSYM LPGROUP_INFO_1}
  4442. PGROUP_INFO_1 = ^GROUP_INFO_1;
  4443. {$EXTERNALSYM PGROUP_INFO_1}
  4444. _GROUP_INFO_1 = record
  4445. grpi1_name: LPWSTR;
  4446. grpi1_comment: LPWSTR;
  4447. end;
  4448. {$EXTERNALSYM _GROUP_INFO_1}
  4449. GROUP_INFO_1 = _GROUP_INFO_1;
  4450. {$EXTERNALSYM GROUP_INFO_1}
  4451. TGroupInfo1 = GROUP_INFO_1;
  4452. PGroupInfo1 = PGROUP_INFO_1;
  4453. // line 1380
  4454. //
  4455. // LocalGroup Class
  4456. //
  4457. //
  4458. // Function Prototypes
  4459. //
  4460. function NetLocalGroupAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4461. {$EXTERNALSYM NetLocalGroupAdd}
  4462. function NetLocalGroupAddMember(servername, groupname: LPCWSTR; membersid: PSID): NET_API_STATUS; stdcall;
  4463. {$EXTERNALSYM NetLocalGroupAddMember}
  4464. function NetLocalGroupEnum(servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  4465. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resumehandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  4466. {$EXTERNALSYM NetLocalGroupEnum}
  4467. function NetLocalGroupGetInfo(servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  4468. {$EXTERNALSYM NetLocalGroupGetInfo}
  4469. function NetLocalGroupSetInfo(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  4470. {$EXTERNALSYM NetLocalGroupSetInfo}
  4471. function NetLocalGroupDel(servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS; stdcall;
  4472. {$EXTERNALSYM NetLocalGroupDel}
  4473. function NetLocalGroupDelMember(servername: LPCWSTR; groupname: LPCWSTR; membersid: PSID): NET_API_STATUS; stdcall;
  4474. {$EXTERNALSYM NetLocalGroupDelMember}
  4475. function NetLocalGroupGetMembers(servername, localgroupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; resumehandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  4476. {$EXTERNALSYM NetLocalGroupGetMembers}
  4477. function NetLocalGroupSetMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  4478. {$EXTERNALSYM NetLocalGroupSetMembers}
  4479. function NetLocalGroupAddMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  4480. {$EXTERNALSYM NetLocalGroupAddMembers}
  4481. function NetLocalGroupDelMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  4482. {$EXTERNALSYM NetLocalGroupDelMembers}
  4483. //
  4484. // Data Structures - LocalGroup
  4485. //
  4486. type
  4487. {$IFNDEF FPC}
  4488. LPLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
  4489. {$EXTERNALSYM LPLOCALGROUP_INFO_0}
  4490. PLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
  4491. {$EXTERNALSYM PLOCALGROUP_INFO_0}
  4492. _LOCALGROUP_INFO_0 = record
  4493. lgrpi0_name: LPWSTR;
  4494. end;
  4495. {$EXTERNALSYM _LOCALGROUP_INFO_0}
  4496. LOCALGROUP_INFO_0 = _LOCALGROUP_INFO_0;
  4497. {$EXTERNALSYM LOCALGROUP_INFO_0}
  4498. TLocalGroupInfo0 = LOCALGROUP_INFO_0;
  4499. PLocalGroupInfo0 = PLOCALGROUP_INFO_0;
  4500. {$ENDIF ~FPC}
  4501. LPLOCALGROUP_INFO_1 = ^LOCALGROUP_INFO_1;
  4502. {$EXTERNALSYM LPLOCALGROUP_INFO_1}
  4503. PLOCALGROUP_INFO_1 = ^LOCALGROUP_INFO_1;
  4504. {$EXTERNALSYM PLOCALGROUP_INFO_1}
  4505. _LOCALGROUP_INFO_1 = record
  4506. lgrpi1_name: LPWSTR;
  4507. lgrpi1_comment: LPWSTR;
  4508. end;
  4509. {$EXTERNALSYM _LOCALGROUP_INFO_1}
  4510. LOCALGROUP_INFO_1 = _LOCALGROUP_INFO_1;
  4511. {$EXTERNALSYM LOCALGROUP_INFO_1}
  4512. TLocalGroupInfo1 = LOCALGROUP_INFO_1;
  4513. PLocalGroupInfo1 = PLOCALGROUP_INFO_1;
  4514. LPLOCALGROUP_INFO_1002 = ^LOCALGROUP_INFO_1002;
  4515. {$EXTERNALSYM LPLOCALGROUP_INFO_1002}
  4516. PLOCALGROUP_INFO_1002 = ^LOCALGROUP_INFO_1002;
  4517. {$EXTERNALSYM PLOCALGROUP_INFO_1002}
  4518. _LOCALGROUP_INFO_1002 = record
  4519. lgrpi1002_comment: LPWSTR;
  4520. end;
  4521. {$EXTERNALSYM _LOCALGROUP_INFO_1002}
  4522. LOCALGROUP_INFO_1002 = _LOCALGROUP_INFO_1002;
  4523. {$EXTERNALSYM LOCALGROUP_INFO_1002}
  4524. TLocalGroupInfo1002 = LOCALGROUP_INFO_1002;
  4525. PLocalGroupInfo1002 = PLOCALGROUP_INFO_1002;
  4526. {$IFNDEF FPC}
  4527. LPLOCALGROUP_MEMBERS_INFO_0 = ^LOCALGROUP_MEMBERS_INFO_0;
  4528. {$EXTERNALSYM LPLOCALGROUP_MEMBERS_INFO_0}
  4529. PLOCALGROUP_MEMBERS_INFO_0 = ^LOCALGROUP_MEMBERS_INFO_0;
  4530. {$EXTERNALSYM PLOCALGROUP_MEMBERS_INFO_0}
  4531. _LOCALGROUP_MEMBERS_INFO_0 = record
  4532. lgrmi0_sid: PSID;
  4533. end;
  4534. {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_0}
  4535. LOCALGROUP_MEMBERS_INFO_0 = _LOCALGROUP_MEMBERS_INFO_0;
  4536. {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_0}
  4537. TLocalGroupMembersInfo0 = LOCALGROUP_MEMBERS_INFO_0;
  4538. PLocalGroupMembersInfo0 = PLOCALGROUP_MEMBERS_INFO_0;
  4539. {$ENDIF ~FPC}
  4540. LPLOCALGROUP_MEMBERS_INFO_1 = ^LOCALGROUP_MEMBERS_INFO_1;
  4541. {$EXTERNALSYM LPLOCALGROUP_MEMBERS_INFO_1}
  4542. PLOCALGROUP_MEMBERS_INFO_1 = ^LOCALGROUP_MEMBERS_INFO_1;
  4543. {$EXTERNALSYM PLOCALGROUP_MEMBERS_INFO_1}
  4544. _LOCALGROUP_MEMBERS_INFO_1 = record
  4545. lgrmi1_sid: PSID;
  4546. lgrmi1_sidusage: SID_NAME_USE;
  4547. lgrmi1_name: LPWSTR;
  4548. end;
  4549. {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_1}
  4550. LOCALGROUP_MEMBERS_INFO_1 = _LOCALGROUP_MEMBERS_INFO_1;
  4551. {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_1}
  4552. TLocalGroupMembersInfo1 = LOCALGROUP_MEMBERS_INFO_1;
  4553. PLocalGroupMembersInfo1 = PLOCALGROUP_MEMBERS_INFO_1;
  4554. LPLOCALGROUP_MEMBERS_INFO_2 = ^LOCALGROUP_MEMBERS_INFO_2;
  4555. {$EXTERNALSYM LPLOCALGROUP_MEMBERS_INFO_2}
  4556. PLOCALGROUP_MEMBERS_INFO_2 = ^LOCALGROUP_MEMBERS_INFO_2;
  4557. {$EXTERNALSYM PLOCALGROUP_MEMBERS_INFO_2}
  4558. _LOCALGROUP_MEMBERS_INFO_2 = record
  4559. lgrmi2_sid: PSID;
  4560. lgrmi2_sidusage: SID_NAME_USE;
  4561. lgrmi2_domainandname: LPWSTR;
  4562. end;
  4563. {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_2}
  4564. LOCALGROUP_MEMBERS_INFO_2 = _LOCALGROUP_MEMBERS_INFO_2;
  4565. {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_2}
  4566. TLocalGroupMembersInfo2 = LOCALGROUP_MEMBERS_INFO_2;
  4567. PLocalGroupMembersInfo2 = PLOCALGROUP_MEMBERS_INFO_2;
  4568. {$IFNDEF FPC}
  4569. LPLOCALGROUP_MEMBERS_INFO_3 = ^LOCALGROUP_MEMBERS_INFO_3;
  4570. {$EXTERNALSYM LPLOCALGROUP_MEMBERS_INFO_3}
  4571. PLOCALGROUP_MEMBERS_INFO_3 = ^LOCALGROUP_MEMBERS_INFO_3;
  4572. {$EXTERNALSYM PLOCALGROUP_MEMBERS_INFO_3}
  4573. _LOCALGROUP_MEMBERS_INFO_3 = record
  4574. lgrmi3_domainandname: LPWSTR;
  4575. end;
  4576. {$EXTERNALSYM _LOCALGROUP_MEMBERS_INFO_3}
  4577. LOCALGROUP_MEMBERS_INFO_3 = _LOCALGROUP_MEMBERS_INFO_3;
  4578. {$EXTERNALSYM LOCALGROUP_MEMBERS_INFO_3}
  4579. TLocalGroupMembersInfo3 = LOCALGROUP_MEMBERS_INFO_3;
  4580. PLocalGroupMembersInfo3 = PLOCALGROUP_MEMBERS_INFO_3;
  4581. {$ENDIF ~FPC}
  4582. function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall;
  4583. {$EXTERNALSYM NetApiBufferFree}
  4584. type
  4585. _WKSTA_INFO_100 = record
  4586. wki100_platform_id: DWORD;
  4587. wki100_computername: LMSTR;
  4588. wki100_langroup: LMSTR;
  4589. wki100_ver_major: DWORD;
  4590. wki100_ver_minor: DWORD;
  4591. end;
  4592. {$EXTERNALSYM _WKSTA_INFO_100}
  4593. WKSTA_INFO_100 = _WKSTA_INFO_100;
  4594. {$EXTERNALSYM WKSTA_INFO_100}
  4595. PWKSTA_INFO_100 = ^_WKSTA_INFO_100;
  4596. {$EXTERNALSYM PWKSTA_INFO_100}
  4597. LPWKSTA_INFO_100 = ^_WKSTA_INFO_100;
  4598. {$EXTERNALSYM LPWKSTA_INFO_100}
  4599. function NetWkstaGetInfo(servername: PWideChar; level: DWORD; out bufptr: PByte): NET_API_STATUS; stdcall;
  4600. {$EXTERNALSYM NetWkstaGetInfo}
  4601. (****************************************************************
  4602. * *
  4603. * Data structure templates *
  4604. * *
  4605. ****************************************************************)
  4606. const
  4607. NCBNAMSZ = 16; // absolute length of a net name
  4608. {$EXTERNALSYM NCBNAMSZ}
  4609. MAX_LANA = 254; // lana's in range 0 to MAX_LANA inclusive
  4610. {$EXTERNALSYM MAX_LANA}
  4611. //
  4612. // Network Control Block
  4613. //
  4614. type
  4615. {$IFNDEF FPC}
  4616. PNCB = ^NCB;
  4617. {$ENDIF ~FPC}
  4618. TNcbPost = procedure (P: PNCB); stdcall;
  4619. {$IFNDEF FPC}
  4620. _NCB = record
  4621. ncb_command: UCHAR; // command code
  4622. ncb_retcode: UCHAR; // return code
  4623. ncb_lsn: UCHAR; // local session number
  4624. ncb_num: UCHAR; // number of our network name
  4625. ncb_buffer: PUCHAR; // address of message buffer
  4626. ncb_length: Word; // size of message buffer
  4627. ncb_callname: array [0..NCBNAMSZ - 1] of UCHAR; // blank-padded name of remote
  4628. ncb_name: array [0..NCBNAMSZ - 1] of UCHAR; // our blank-padded netname
  4629. ncb_rto: UCHAR; // rcv timeout/retry count
  4630. ncb_sto: UCHAR; // send timeout/sys timeout
  4631. ncb_post: TNcbPost; // POST routine address
  4632. ncb_lana_num: UCHAR; // lana (adapter) number
  4633. ncb_cmd_cplt: UCHAR; // 0xff => commmand pending
  4634. {$IFDEF _WIN64}
  4635. ncb_reserve: array [0..17] of UCHAR; // reserved, used by BIOS
  4636. {$ELSE ~_WIN64}
  4637. ncb_reserve: array [0..9] of UCHAR; // reserved, used by BIOS
  4638. {$ENDIF ~_WIN64}
  4639. ncb_event: THandle; // HANDLE to Win32 event which
  4640. // will be set to the signalled
  4641. // state when an ASYNCH command
  4642. // completes
  4643. end;
  4644. {$EXTERNALSYM _NCB}
  4645. NCB = _NCB;
  4646. {$EXTERNALSYM NCB}
  4647. TNcb = NCB;
  4648. {$ENDIF ~FPC}
  4649. //
  4650. // Structure returned to the NCB command NCBASTAT is ADAPTER_STATUS followed
  4651. // by an array of NAME_BUFFER structures.
  4652. //
  4653. {$IFNDEF FPC}
  4654. type
  4655. _ADAPTER_STATUS = record
  4656. adapter_address: array [0..5] of UCHAR;
  4657. rev_major: UCHAR;
  4658. reserved0: UCHAR;
  4659. adapter_type: UCHAR;
  4660. rev_minor: UCHAR;
  4661. duration: WORD;
  4662. frmr_recv: WORD;
  4663. frmr_xmit: WORD;
  4664. iframe_recv_err: WORD;
  4665. xmit_aborts: WORD;
  4666. xmit_success: DWORD;
  4667. recv_success: DWORD;
  4668. iframe_xmit_err: WORD;
  4669. recv_buff_unavail: WORD;
  4670. t1_timeouts: WORD;
  4671. ti_timeouts: WORD;
  4672. reserved1: DWORD;
  4673. free_ncbs: WORD;
  4674. max_cfg_ncbs: WORD;
  4675. max_ncbs: WORD;
  4676. xmit_buf_unavail: WORD;
  4677. max_dgram_size: WORD;
  4678. pending_sess: WORD;
  4679. max_cfg_sess: WORD;
  4680. max_sess: WORD;
  4681. max_sess_pkt_size: WORD;
  4682. name_count: WORD;
  4683. end;
  4684. {$EXTERNALSYM _ADAPTER_STATUS}
  4685. ADAPTER_STATUS = _ADAPTER_STATUS;
  4686. {$EXTERNALSYM ADAPTER_STATUS}
  4687. PADAPTER_STATUS = ^ADAPTER_STATUS;
  4688. {$EXTERNALSYM PADAPTER_STATUS}
  4689. TAdapterStatus = ADAPTER_STATUS;
  4690. PAdapterStatus = PADAPTER_STATUS;
  4691. _NAME_BUFFER = record
  4692. name: array [0..NCBNAMSZ - 1] of UCHAR;
  4693. name_num: UCHAR;
  4694. name_flags: UCHAR;
  4695. end;
  4696. {$EXTERNALSYM _NAME_BUFFER}
  4697. NAME_BUFFER = _NAME_BUFFER;
  4698. {$EXTERNALSYM NAME_BUFFER}
  4699. PNAME_BUFFER = ^NAME_BUFFER;
  4700. {$EXTERNALSYM PNAME_BUFFER}
  4701. TNameBuffer = NAME_BUFFER;
  4702. PNameBuffer = PNAME_BUFFER;
  4703. {$ENDIF ~FPC}
  4704. // values for name_flags bits.
  4705. const
  4706. NAME_FLAGS_MASK = $87;
  4707. {$EXTERNALSYM NAME_FLAGS_MASK}
  4708. GROUP_NAME = $80;
  4709. {$EXTERNALSYM GROUP_NAME}
  4710. UNIQUE_NAME = $00;
  4711. {$EXTERNALSYM UNIQUE_NAME}
  4712. REGISTERING = $00;
  4713. {$EXTERNALSYM REGISTERING}
  4714. REGISTERED = $04;
  4715. {$EXTERNALSYM REGISTERED}
  4716. DEREGISTERED = $05;
  4717. {$EXTERNALSYM DEREGISTERED}
  4718. DUPLICATE = $06;
  4719. {$EXTERNALSYM DUPLICATE}
  4720. DUPLICATE_DEREG = $07;
  4721. {$EXTERNALSYM DUPLICATE_DEREG}
  4722. //
  4723. // Structure returned to the NCB command NCBSSTAT is SESSION_HEADER followed
  4724. // by an array of SESSION_BUFFER structures. If the NCB_NAME starts with an
  4725. // asterisk then an array of these structures is returned containing the
  4726. // status for all names.
  4727. //
  4728. {$IFNDEF FPC}
  4729. type
  4730. _SESSION_HEADER = record
  4731. sess_name: UCHAR;
  4732. num_sess: UCHAR;
  4733. rcv_dg_outstanding: UCHAR;
  4734. rcv_any_outstanding: UCHAR;
  4735. end;
  4736. {$EXTERNALSYM _SESSION_HEADER}
  4737. SESSION_HEADER = _SESSION_HEADER;
  4738. {$EXTERNALSYM SESSION_HEADER}
  4739. PSESSION_HEADER = ^SESSION_HEADER;
  4740. {$EXTERNALSYM PSESSION_HEADER}
  4741. TSessionHeader = SESSION_HEADER;
  4742. PSessionHeader = PSESSION_HEADER;
  4743. _SESSION_BUFFER = record
  4744. lsn: UCHAR;
  4745. state: UCHAR;
  4746. local_name: array [0..NCBNAMSZ - 1] of UCHAR;
  4747. remote_name: array [0..NCBNAMSZ - 1] of UCHAR;
  4748. rcvs_outstanding: UCHAR;
  4749. sends_outstanding: UCHAR;
  4750. end;
  4751. {$EXTERNALSYM _SESSION_BUFFER}
  4752. SESSION_BUFFER = _SESSION_BUFFER;
  4753. {$EXTERNALSYM SESSION_BUFFER}
  4754. PSESSION_BUFFER = ^SESSION_BUFFER;
  4755. {$EXTERNALSYM PSESSION_BUFFER}
  4756. TSessionBuffer = SESSION_BUFFER;
  4757. PSessionBuffer = PSESSION_BUFFER;
  4758. {$ENDIF ~FPC}
  4759. // Values for state
  4760. const
  4761. LISTEN_OUTSTANDING = $01;
  4762. {$EXTERNALSYM LISTEN_OUTSTANDING}
  4763. CALL_PENDING = $02;
  4764. {$EXTERNALSYM CALL_PENDING}
  4765. SESSION_ESTABLISHED = $03;
  4766. {$EXTERNALSYM SESSION_ESTABLISHED}
  4767. HANGUP_PENDING = $04;
  4768. {$EXTERNALSYM HANGUP_PENDING}
  4769. HANGUP_COMPLETE = $05;
  4770. {$EXTERNALSYM HANGUP_COMPLETE}
  4771. SESSION_ABORTED = $06;
  4772. {$EXTERNALSYM SESSION_ABORTED}
  4773. //
  4774. // Structure returned to the NCB command NCBENUM.
  4775. //
  4776. // On a system containing lana's 0, 2 and 3, a structure with
  4777. // length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.
  4778. //
  4779. {$IFNDEF FPC}
  4780. type
  4781. _LANA_ENUM = record
  4782. length: UCHAR; // Number of valid entries in lana[]
  4783. lana: array [0..MAX_LANA] of UCHAR;
  4784. end;
  4785. {$EXTERNALSYM _LANA_ENUM}
  4786. LANA_ENUM = _LANA_ENUM;
  4787. {$EXTERNALSYM LANA_ENUM}
  4788. PLANA_ENUM = ^LANA_ENUM;
  4789. {$EXTERNALSYM PLANA_ENUM}
  4790. TLanaEnum = LANA_ENUM;
  4791. PLanaEnum = PLANA_ENUM;
  4792. {$ENDIF ~FPC}
  4793. //
  4794. // Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER followed
  4795. // by an array of FIND_NAME_BUFFER structures.
  4796. //
  4797. {$IFNDEF FPC}
  4798. type
  4799. _FIND_NAME_HEADER = record
  4800. node_count: WORD;
  4801. reserved: UCHAR;
  4802. unique_group: UCHAR;
  4803. end;
  4804. {$EXTERNALSYM _FIND_NAME_HEADER}
  4805. FIND_NAME_HEADER = _FIND_NAME_HEADER;
  4806. {$EXTERNALSYM FIND_NAME_HEADER}
  4807. PFIND_NAME_HEADER = ^FIND_NAME_HEADER;
  4808. {$EXTERNALSYM PFIND_NAME_HEADER}
  4809. TFindNameHeader = FIND_NAME_HEADER;
  4810. PFindNameHeader = PFIND_NAME_HEADER;
  4811. _FIND_NAME_BUFFER = record
  4812. length: UCHAR;
  4813. access_control: UCHAR;
  4814. frame_control: UCHAR;
  4815. destination_addr: array [0..5] of UCHAR;
  4816. source_addr: array [0..5] of UCHAR;
  4817. routing_info: array [0..17] of UCHAR;
  4818. end;
  4819. {$EXTERNALSYM _FIND_NAME_BUFFER}
  4820. FIND_NAME_BUFFER = _FIND_NAME_BUFFER;
  4821. {$EXTERNALSYM FIND_NAME_BUFFER}
  4822. PFIND_NAME_BUFFER = ^FIND_NAME_BUFFER;
  4823. {$EXTERNALSYM PFIND_NAME_BUFFER}
  4824. TFindNameBuffer = FIND_NAME_BUFFER;
  4825. PFindNameBuffer = PFIND_NAME_BUFFER;
  4826. //
  4827. // Structure provided with NCBACTION. The purpose of NCBACTION is to provide
  4828. // transport specific extensions to netbios.
  4829. //
  4830. _ACTION_HEADER = record
  4831. transport_id: ULONG;
  4832. action_code: USHORT;
  4833. reserved: USHORT;
  4834. end;
  4835. {$EXTERNALSYM _ACTION_HEADER}
  4836. ACTION_HEADER = _ACTION_HEADER;
  4837. {$EXTERNALSYM ACTION_HEADER}
  4838. PACTION_HEADER = ^ACTION_HEADER;
  4839. {$EXTERNALSYM PACTION_HEADER}
  4840. TActionHeader = ACTION_HEADER;
  4841. PActionHeader = PACTION_HEADER;
  4842. {$ENDIF ~FPC}
  4843. // Values for transport_id
  4844. const
  4845. ALL_TRANSPORTS = 'M'#0#0#0;
  4846. {$EXTERNALSYM ALL_TRANSPORTS}
  4847. MS_NBF = 'MNBF';
  4848. {$EXTERNALSYM MS_NBF}
  4849. (****************************************************************
  4850. * *
  4851. * Special values and constants *
  4852. * *
  4853. ****************************************************************)
  4854. //
  4855. // NCB Command codes
  4856. //
  4857. const
  4858. NCBCALL = $10; // NCB CALL
  4859. {$EXTERNALSYM NCBCALL}
  4860. NCBLISTEN = $11; // NCB LISTEN
  4861. {$EXTERNALSYM NCBLISTEN}
  4862. NCBHANGUP = $12; // NCB HANG UP
  4863. {$EXTERNALSYM NCBHANGUP}
  4864. NCBSEND = $14; // NCB SEND
  4865. {$EXTERNALSYM NCBSEND}
  4866. NCBRECV = $15; // NCB RECEIVE
  4867. {$EXTERNALSYM NCBRECV}
  4868. NCBRECVANY = $16; // NCB RECEIVE ANY
  4869. {$EXTERNALSYM NCBRECVANY}
  4870. NCBCHAINSEND = $17; // NCB CHAIN SEND
  4871. {$EXTERNALSYM NCBCHAINSEND}
  4872. NCBDGSEND = $20; // NCB SEND DATAGRAM
  4873. {$EXTERNALSYM NCBDGSEND}
  4874. NCBDGRECV = $21; // NCB RECEIVE DATAGRAM
  4875. {$EXTERNALSYM NCBDGRECV}
  4876. NCBDGSENDBC = $22; // NCB SEND BROADCAST DATAGRAM
  4877. {$EXTERNALSYM NCBDGSENDBC}
  4878. NCBDGRECVBC = $23; // NCB RECEIVE BROADCAST DATAGRAM
  4879. {$EXTERNALSYM NCBDGRECVBC}
  4880. NCBADDNAME = $30; // NCB ADD NAME
  4881. {$EXTERNALSYM NCBADDNAME}
  4882. NCBDELNAME = $31; // NCB DELETE NAME
  4883. {$EXTERNALSYM NCBDELNAME}
  4884. NCBRESET = $32; // NCB RESET
  4885. {$EXTERNALSYM NCBRESET}
  4886. NCBASTAT = $33; // NCB ADAPTER STATUS
  4887. {$EXTERNALSYM NCBASTAT}
  4888. NCBSSTAT = $34; // NCB SESSION STATUS
  4889. {$EXTERNALSYM NCBSSTAT}
  4890. NCBCANCEL = $35; // NCB CANCEL
  4891. {$EXTERNALSYM NCBCANCEL}
  4892. NCBADDGRNAME = $36; // NCB ADD GROUP NAME
  4893. {$EXTERNALSYM NCBADDGRNAME}
  4894. NCBENUM = $37; // NCB ENUMERATE LANA NUMBERS
  4895. {$EXTERNALSYM NCBENUM}
  4896. NCBUNLINK = $70; // NCB UNLINK
  4897. {$EXTERNALSYM NCBUNLINK}
  4898. NCBSENDNA = $71; // NCB SEND NO ACK
  4899. {$EXTERNALSYM NCBSENDNA}
  4900. NCBCHAINSENDNA = $72; // NCB CHAIN SEND NO ACK
  4901. {$EXTERNALSYM NCBCHAINSENDNA}
  4902. NCBLANSTALERT = $73; // NCB LAN STATUS ALERT
  4903. {$EXTERNALSYM NCBLANSTALERT}
  4904. NCBACTION = $77; // NCB ACTION
  4905. {$EXTERNALSYM NCBACTION}
  4906. NCBFINDNAME = $78; // NCB FIND NAME
  4907. {$EXTERNALSYM NCBFINDNAME}
  4908. NCBTRACE = $79; // NCB TRACE
  4909. {$EXTERNALSYM NCBTRACE}
  4910. ASYNCH = $80; // high bit set == asynchronous
  4911. {$EXTERNALSYM ASYNCH}
  4912. //
  4913. // NCB Return codes
  4914. //
  4915. NRC_GOODRET = $00; // good return also returned when ASYNCH request accepted
  4916. {$EXTERNALSYM NRC_GOODRET}
  4917. NRC_BUFLEN = $01; // illegal buffer length
  4918. {$EXTERNALSYM NRC_BUFLEN}
  4919. NRC_ILLCMD = $03; // illegal command
  4920. {$EXTERNALSYM NRC_ILLCMD}
  4921. NRC_CMDTMO = $05; // command timed out
  4922. {$EXTERNALSYM NRC_CMDTMO}
  4923. NRC_INCOMP = $06; // message incomplete, issue another command
  4924. {$EXTERNALSYM NRC_INCOMP}
  4925. NRC_BADDR = $07; // illegal buffer address
  4926. {$EXTERNALSYM NRC_BADDR}
  4927. NRC_SNUMOUT = $08; // session number out of range
  4928. {$EXTERNALSYM NRC_SNUMOUT}
  4929. NRC_NORES = $09; // no resource available
  4930. {$EXTERNALSYM NRC_NORES}
  4931. NRC_SCLOSED = $0a; // session closed
  4932. {$EXTERNALSYM NRC_SCLOSED}
  4933. NRC_CMDCAN = $0b; // command cancelled
  4934. {$EXTERNALSYM NRC_CMDCAN}
  4935. NRC_DUPNAME = $0d; // duplicate name
  4936. {$EXTERNALSYM NRC_DUPNAME}
  4937. NRC_NAMTFUL = $0e; // name table full
  4938. {$EXTERNALSYM NRC_NAMTFUL}
  4939. NRC_ACTSES = $0f; // no deletions, name has active sessions
  4940. {$EXTERNALSYM NRC_ACTSES}
  4941. NRC_LOCTFUL = $11; // local session table full
  4942. {$EXTERNALSYM NRC_LOCTFUL}
  4943. NRC_REMTFUL = $12; // remote session table full
  4944. {$EXTERNALSYM NRC_REMTFUL}
  4945. NRC_ILLNN = $13; // illegal name number
  4946. {$EXTERNALSYM NRC_ILLNN}
  4947. NRC_NOCALL = $14; // no callname
  4948. {$EXTERNALSYM NRC_NOCALL}
  4949. NRC_NOWILD = $15; // cannot put * in NCB_NAME
  4950. {$EXTERNALSYM NRC_NOWILD}
  4951. NRC_INUSE = $16; // name in use on remote adapter
  4952. {$EXTERNALSYM NRC_INUSE}
  4953. NRC_NAMERR = $17; // name deleted
  4954. {$EXTERNALSYM NRC_NAMERR}
  4955. NRC_SABORT = $18; // session ended abnormally
  4956. {$EXTERNALSYM NRC_SABORT}
  4957. NRC_NAMCONF = $19; // name conflict detected
  4958. {$EXTERNALSYM NRC_NAMCONF}
  4959. NRC_IFBUSY = $21; // interface busy, IRET before retrying
  4960. {$EXTERNALSYM NRC_IFBUSY}
  4961. NRC_TOOMANY = $22; // too many commands outstanding, retry later
  4962. {$EXTERNALSYM NRC_TOOMANY}
  4963. NRC_BRIDGE = $23; // ncb_lana_num field invalid
  4964. {$EXTERNALSYM NRC_BRIDGE}
  4965. NRC_CANOCCR = $24; // command completed while cancel occurring
  4966. {$EXTERNALSYM NRC_CANOCCR}
  4967. NRC_CANCEL = $26; // command not valid to cancel
  4968. {$EXTERNALSYM NRC_CANCEL}
  4969. NRC_DUPENV = $30; // name defined by anther local process
  4970. {$EXTERNALSYM NRC_DUPENV}
  4971. NRC_ENVNOTDEF = $34; // environment undefined. RESET required
  4972. {$EXTERNALSYM NRC_ENVNOTDEF}
  4973. NRC_OSRESNOTAV = $35; // required OS resources exhausted
  4974. {$EXTERNALSYM NRC_OSRESNOTAV}
  4975. NRC_MAXAPPS = $36; // max number of applications exceeded
  4976. {$EXTERNALSYM NRC_MAXAPPS}
  4977. NRC_NOSAPS = $37; // no saps available for netbios
  4978. {$EXTERNALSYM NRC_NOSAPS}
  4979. NRC_NORESOURCES = $38; // requested resources are not available
  4980. {$EXTERNALSYM NRC_NORESOURCES}
  4981. NRC_INVADDRESS = $39; // invalid ncb address or length > segment
  4982. {$EXTERNALSYM NRC_INVADDRESS}
  4983. NRC_INVDDID = $3B; // invalid NCB DDID
  4984. {$EXTERNALSYM NRC_INVDDID}
  4985. NRC_LOCKFAIL = $3C; // lock of user area failed
  4986. {$EXTERNALSYM NRC_LOCKFAIL}
  4987. NRC_OPENERR = $3f; // NETBIOS not loaded
  4988. {$EXTERNALSYM NRC_OPENERR}
  4989. NRC_SYSTEM = $40; // system error
  4990. {$EXTERNALSYM NRC_SYSTEM}
  4991. NRC_PENDING = $ff; // asynchronous command is not yet finished
  4992. {$EXTERNALSYM NRC_PENDING}
  4993. (****************************************************************
  4994. * *
  4995. * main user entry point for NetBIOS 3.0 *
  4996. * *
  4997. * Usage: result = Netbios( pncb ); *
  4998. ****************************************************************)
  4999. function Netbios(pncb: PNCB): UCHAR; stdcall;
  5000. {$EXTERNALSYM Netbios}
  5001. type
  5002. PRasDialDlg = ^TRasDialDlg;
  5003. tagRASDIALDLG = packed record
  5004. dwSize: DWORD;
  5005. hwndOwner: HWND;
  5006. dwFlags: DWORD;
  5007. xDlg: Longint;
  5008. yDlg: Longint;
  5009. dwSubEntry: DWORD;
  5010. dwError: DWORD;
  5011. reserved: Longword;
  5012. reserved2: Longword;
  5013. end;
  5014. {$EXTERNALSYM tagRASDIALDLG}
  5015. RASDIALDLG = tagRASDIALDLG;
  5016. {$EXTERNALSYM RASDIALDLG}
  5017. TRasDialDlg = tagRASDIALDLG;
  5018. // Reason flags
  5019. // Flags used by the various UIs.
  5020. const
  5021. SHTDN_REASON_FLAG_COMMENT_REQUIRED = $01000000;
  5022. {$EXTERNALSYM SHTDN_REASON_FLAG_COMMENT_REQUIRED}
  5023. SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = $02000000;
  5024. {$EXTERNALSYM SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED}
  5025. SHTDN_REASON_FLAG_CLEAN_UI = $04000000;
  5026. {$EXTERNALSYM SHTDN_REASON_FLAG_CLEAN_UI}
  5027. SHTDN_REASON_FLAG_DIRTY_UI = $08000000;
  5028. {$EXTERNALSYM SHTDN_REASON_FLAG_DIRTY_UI}
  5029. // Flags that end up in the event log code.
  5030. SHTDN_REASON_FLAG_USER_DEFINED = $40000000;
  5031. {$EXTERNALSYM SHTDN_REASON_FLAG_USER_DEFINED}
  5032. SHTDN_REASON_FLAG_PLANNED = DWORD($80000000);
  5033. {$EXTERNALSYM SHTDN_REASON_FLAG_PLANNED}
  5034. // Microsoft major reasons.
  5035. SHTDN_REASON_MAJOR_OTHER = $00000000;
  5036. {$EXTERNALSYM SHTDN_REASON_MAJOR_OTHER}
  5037. SHTDN_REASON_MAJOR_NONE = $00000000;
  5038. {$EXTERNALSYM SHTDN_REASON_MAJOR_NONE}
  5039. SHTDN_REASON_MAJOR_HARDWARE = $00010000;
  5040. {$EXTERNALSYM SHTDN_REASON_MAJOR_HARDWARE}
  5041. SHTDN_REASON_MAJOR_OPERATINGSYSTEM = $00020000;
  5042. {$EXTERNALSYM SHTDN_REASON_MAJOR_OPERATINGSYSTEM}
  5043. SHTDN_REASON_MAJOR_SOFTWARE = $00030000;
  5044. {$EXTERNALSYM SHTDN_REASON_MAJOR_SOFTWARE}
  5045. SHTDN_REASON_MAJOR_APPLICATION = $00040000;
  5046. {$EXTERNALSYM SHTDN_REASON_MAJOR_APPLICATION}
  5047. SHTDN_REASON_MAJOR_SYSTEM = $00050000;
  5048. {$EXTERNALSYM SHTDN_REASON_MAJOR_SYSTEM}
  5049. SHTDN_REASON_MAJOR_POWER = $00060000;
  5050. {$EXTERNALSYM SHTDN_REASON_MAJOR_POWER}
  5051. SHTDN_REASON_MAJOR_LEGACY_API = $00070000;
  5052. {$EXTERNALSYM SHTDN_REASON_MAJOR_LEGACY_API}
  5053. // Microsoft minor reasons.
  5054. SHTDN_REASON_MINOR_OTHER = $00000000;
  5055. {$EXTERNALSYM SHTDN_REASON_MINOR_OTHER}
  5056. SHTDN_REASON_MINOR_NONE = $000000ff;
  5057. {$EXTERNALSYM SHTDN_REASON_MINOR_NONE}
  5058. SHTDN_REASON_MINOR_MAINTENANCE = $00000001;
  5059. {$EXTERNALSYM SHTDN_REASON_MINOR_MAINTENANCE}
  5060. SHTDN_REASON_MINOR_INSTALLATION = $00000002;
  5061. {$EXTERNALSYM SHTDN_REASON_MINOR_INSTALLATION}
  5062. SHTDN_REASON_MINOR_UPGRADE = $00000003;
  5063. {$EXTERNALSYM SHTDN_REASON_MINOR_UPGRADE}
  5064. SHTDN_REASON_MINOR_RECONFIG = $00000004;
  5065. {$EXTERNALSYM SHTDN_REASON_MINOR_RECONFIG}
  5066. SHTDN_REASON_MINOR_HUNG = $00000005;
  5067. {$EXTERNALSYM SHTDN_REASON_MINOR_HUNG}
  5068. SHTDN_REASON_MINOR_UNSTABLE = $00000006;
  5069. {$EXTERNALSYM SHTDN_REASON_MINOR_UNSTABLE}
  5070. SHTDN_REASON_MINOR_DISK = $00000007;
  5071. {$EXTERNALSYM SHTDN_REASON_MINOR_DISK}
  5072. SHTDN_REASON_MINOR_PROCESSOR = $00000008;
  5073. {$EXTERNALSYM SHTDN_REASON_MINOR_PROCESSOR}
  5074. SHTDN_REASON_MINOR_NETWORKCARD = $00000009;
  5075. {$EXTERNALSYM SHTDN_REASON_MINOR_NETWORKCARD}
  5076. SHTDN_REASON_MINOR_POWER_SUPPLY = $0000000a;
  5077. {$EXTERNALSYM SHTDN_REASON_MINOR_POWER_SUPPLY}
  5078. SHTDN_REASON_MINOR_CORDUNPLUGGED = $0000000b;
  5079. {$EXTERNALSYM SHTDN_REASON_MINOR_CORDUNPLUGGED}
  5080. SHTDN_REASON_MINOR_ENVIRONMENT = $0000000c;
  5081. {$EXTERNALSYM SHTDN_REASON_MINOR_ENVIRONMENT}
  5082. SHTDN_REASON_MINOR_HARDWARE_DRIVER = $0000000d;
  5083. {$EXTERNALSYM SHTDN_REASON_MINOR_HARDWARE_DRIVER}
  5084. SHTDN_REASON_MINOR_OTHERDRIVER = $0000000e;
  5085. {$EXTERNALSYM SHTDN_REASON_MINOR_OTHERDRIVER}
  5086. SHTDN_REASON_MINOR_BLUESCREEN = $0000000F;
  5087. {$EXTERNALSYM SHTDN_REASON_MINOR_BLUESCREEN}
  5088. SHTDN_REASON_MINOR_SERVICEPACK = $00000010;
  5089. {$EXTERNALSYM SHTDN_REASON_MINOR_SERVICEPACK}
  5090. SHTDN_REASON_MINOR_HOTFIX = $00000011;
  5091. {$EXTERNALSYM SHTDN_REASON_MINOR_HOTFIX}
  5092. SHTDN_REASON_MINOR_SECURITYFIX = $00000012;
  5093. {$EXTERNALSYM SHTDN_REASON_MINOR_SECURITYFIX}
  5094. SHTDN_REASON_MINOR_SECURITY = $00000013;
  5095. {$EXTERNALSYM SHTDN_REASON_MINOR_SECURITY}
  5096. SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = $00000014;
  5097. {$EXTERNALSYM SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY}
  5098. SHTDN_REASON_MINOR_WMI = $00000015;
  5099. {$EXTERNALSYM SHTDN_REASON_MINOR_WMI}
  5100. SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL = $00000016;
  5101. {$EXTERNALSYM SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL}
  5102. SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = $00000017;
  5103. {$EXTERNALSYM SHTDN_REASON_MINOR_HOTFIX_UNINSTALL}
  5104. SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL = $00000018;
  5105. {$EXTERNALSYM SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL}
  5106. SHTDN_REASON_MINOR_MMC = $00000019;
  5107. {$EXTERNALSYM SHTDN_REASON_MINOR_MMC}
  5108. SHTDN_REASON_MINOR_TERMSRV = $00000020;
  5109. {$EXTERNALSYM SHTDN_REASON_MINOR_TERMSRV}
  5110. SHTDN_REASON_MINOR_DC_PROMOTION = $00000021;
  5111. {$EXTERNALSYM SHTDN_REASON_MINOR_DC_PROMOTION}
  5112. SHTDN_REASON_MINOR_DC_DEMOTION = $00000022;
  5113. {$EXTERNALSYM SHTDN_REASON_MINOR_DC_DEMOTION}
  5114. SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE;
  5115. {$EXTERNALSYM SHTDN_REASON_UNKNOWN}
  5116. SHTDN_REASON_LEGACY_API = (SHTDN_REASON_MAJOR_LEGACY_API or SHTDN_REASON_FLAG_PLANNED);
  5117. {$EXTERNALSYM SHTDN_REASON_LEGACY_API}
  5118. // This mask cuts out UI flags.
  5119. SHTDN_REASON_VALID_BIT_MASK = DWORD($c0ffffff);
  5120. {$EXTERNALSYM SHTDN_REASON_VALID_BIT_MASK}
  5121. // Convenience flags.
  5122. PCLEANUI = (SHTDN_REASON_FLAG_PLANNED or SHTDN_REASON_FLAG_CLEAN_UI);
  5123. {$EXTERNALSYM PCLEANUI}
  5124. UCLEANUI = (SHTDN_REASON_FLAG_CLEAN_UI);
  5125. {$EXTERNALSYM UCLEANUI}
  5126. PDIRTYUI = (SHTDN_REASON_FLAG_PLANNED or SHTDN_REASON_FLAG_DIRTY_UI);
  5127. {$EXTERNALSYM PDIRTYUI}
  5128. UDIRTYUI = (SHTDN_REASON_FLAG_DIRTY_UI);
  5129. {$EXTERNALSYM UDIRTYUI}
  5130. const
  5131. CSIDL_LOCAL_APPDATA = $001C; { <user name>\Local Settings\Application Data (non roaming) }
  5132. CSIDL_COMMON_APPDATA = $0023; { All Users\Application Data }
  5133. CSIDL_WINDOWS = $0024; { GetWindowsDirectory() }
  5134. CSIDL_SYSTEM = $0025; { GetSystemDirectory() }
  5135. CSIDL_PROGRAM_FILES = $0026; { C:\Program Files }
  5136. CSIDL_MYPICTURES = $0027; { C:\Program Files\My Pictures }
  5137. CSIDL_PROFILE = $0028; { USERPROFILE }
  5138. CSIDL_PROGRAM_FILESX86 = $002A; { C:\Program Files (x86)\My Pictures }
  5139. CSIDL_PROGRAM_FILES_COMMON = $002B; { C:\Program Files\Common }
  5140. CSIDL_COMMON_TEMPLATES = $002D; { All Users\Templates }
  5141. CSIDL_COMMON_DOCUMENTS = $002E; { All Users\Documents }
  5142. CSIDL_COMMON_ADMINTOOLS = $002F; { All Users\Start Menu\Programs\Administrative Tools }
  5143. CSIDL_ADMINTOOLS = $0030; { <user name>\Start Menu\Programs\Administrative Tools }
  5144. CSIDL_CONNECTIONS = $0031; { Network and Dial-up Connections }
  5145. CSIDL_COMMON_MUSIC = $0035; { All Users\My Music }
  5146. CSIDL_COMMON_PICTURES = $0036; { All Users\My Pictures }
  5147. CSIDL_COMMON_VIDEO = $0037; { All Users\My Video }
  5148. CSIDL_RESOURCES = $0038; { Resource Directory }
  5149. CSIDL_RESOURCES_LOCALIZED = $0039; { Localized Resource Directory }
  5150. CSIDL_COMMON_OEM_LINKS = $003A; { Links to All Users OEM specific apps }
  5151. CSIDL_CDBURN_AREA = $003B; { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning }
  5152. CSIDL_COMPUTERSNEARME = $003D; { Computers Near Me (computered from Workgroup membership) }
  5153. {$EXTERNALSYM CSIDL_LOCAL_APPDATA}
  5154. {$EXTERNALSYM CSIDL_COMMON_APPDATA}
  5155. {$EXTERNALSYM CSIDL_WINDOWS}
  5156. {$EXTERNALSYM CSIDL_SYSTEM}
  5157. {$EXTERNALSYM CSIDL_PROGRAM_FILES}
  5158. {$EXTERNALSYM CSIDL_MYPICTURES}
  5159. {$EXTERNALSYM CSIDL_PROFILE}
  5160. {$EXTERNALSYM CSIDL_PROGRAM_FILESX86}
  5161. {$EXTERNALSYM CSIDL_PROGRAM_FILES_COMMON}
  5162. {$EXTERNALSYM CSIDL_COMMON_TEMPLATES}
  5163. {$EXTERNALSYM CSIDL_COMMON_DOCUMENTS}
  5164. {$EXTERNALSYM CSIDL_COMMON_ADMINTOOLS}
  5165. {$EXTERNALSYM CSIDL_ADMINTOOLS}
  5166. {$EXTERNALSYM CSIDL_CONNECTIONS}
  5167. {$EXTERNALSYM CSIDL_COMMON_MUSIC}
  5168. {$EXTERNALSYM CSIDL_COMMON_PICTURES}
  5169. {$EXTERNALSYM CSIDL_COMMON_VIDEO}
  5170. {$EXTERNALSYM CSIDL_RESOURCES}
  5171. {$EXTERNALSYM CSIDL_RESOURCES_LOCALIZED}
  5172. {$EXTERNALSYM CSIDL_COMMON_OEM_LINKS}
  5173. {$EXTERNALSYM CSIDL_CDBURN_AREA}
  5174. {$EXTERNALSYM CSIDL_COMPUTERSNEARME}
  5175. type
  5176. ITaskbarList = interface(IUnknown)
  5177. ['{56FDF342-FD6D-11D0-958A-006097C9A090}']
  5178. function HrInit: HRESULT; stdcall;
  5179. function AddTab(hwnd: HWND): HRESULT; stdcall;
  5180. function DeleteTab(hwnd: HWND): HRESULT; stdcall;
  5181. function ActivateTab(hwnd: HWND): HRESULT; stdcall;
  5182. function SetActiveAlt(hwnd: HWND): HRESULT; stdcall;
  5183. end;
  5184. {$EXTERNALSYM ITaskbarList}
  5185. ITaskbarList2 = interface(ITaskbarList)
  5186. ['{602D4995-B13A-429B-A66E-1935E44F4317}']
  5187. function MarkFullscreenWindow(hwnd: HWND; fFullscreen: BOOL): HRESULT; stdcall;
  5188. end;
  5189. {$EXTERNALSYM ITaskbarList2}
  5190. type
  5191. THUMBBUTTON = record
  5192. dwMask: DWORD;
  5193. iId: UINT;
  5194. iBitmap: UINT;
  5195. hIcon: HICON;
  5196. szTip: packed array[0..259] of WCHAR;
  5197. dwFlags: DWORD;
  5198. end;
  5199. {$EXTERNALSYM THUMBBUTTON}
  5200. tagTHUMBBUTTON = THUMBBUTTON;
  5201. {$EXTERNALSYM tagTHUMBBUTTON}
  5202. TThumbButton = THUMBBUTTON;
  5203. {$EXTERNALSYM TThumbButton}
  5204. PThumbButton = ^TThumbButton;
  5205. {$EXTERNALSYM PThumbButton}
  5206. // for ThumbButtons.dwFlags
  5207. const
  5208. THBF_ENABLED = $0000;
  5209. {$EXTERNALSYM THBF_ENABLED}
  5210. THBF_DISABLED = $0001;
  5211. {$EXTERNALSYM THBF_DISABLED}
  5212. THBF_DISMISSONCLICK = $0002;
  5213. {$EXTERNALSYM THBF_DISMISSONCLICK}
  5214. THBF_NOBACKGROUND = $0004;
  5215. {$EXTERNALSYM THBF_NOBACKGROUND}
  5216. THBF_HIDDEN = $0008;
  5217. {$EXTERNALSYM THBF_HIDDEN}
  5218. THBF_NONINTERACTIVE = $0010;
  5219. {$EXTERNALSYM THBF_NONINTERACTIVE}
  5220. // for ThumbButton.dwMask
  5221. const
  5222. THB_BITMAP = $0001;
  5223. {$EXTERNALSYM THB_BITMAP}
  5224. THB_ICON = $0002;
  5225. {$EXTERNALSYM THB_ICON}
  5226. THB_TOOLTIP = $0004;
  5227. {$EXTERNALSYM THB_TOOLTIP}
  5228. THB_FLAGS = $0008;
  5229. {$EXTERNALSYM THB_FLAGS}
  5230. // wParam for WM_COMMAND message (lParam = Button ID)
  5231. const
  5232. THBN_CLICKED = $1800;
  5233. {$EXTERNALSYM THBN_CLICKED}
  5234. // for ITaskBarList3.SetProgressState
  5235. const
  5236. TBPF_NOPROGRESS = 0;
  5237. {$EXTERNALSYM TBPF_NOPROGRESS}
  5238. TBPF_INDETERMINATE = $1;
  5239. {$EXTERNALSYM TBPF_INDETERMINATE}
  5240. TBPF_NORMAL = $2;
  5241. {$EXTERNALSYM TBPF_NORMAL}
  5242. TBPF_ERROR = $4;
  5243. {$EXTERNALSYM TBPF_ERROR}
  5244. TBPF_PAUSED = $8;
  5245. {$EXTERNALSYM TBPF_PAUSED}
  5246. type
  5247. ITaskbarList3 = interface(ITaskbarList2)
  5248. ['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}']
  5249. function SetProgressValue(hwnd: HWND; ullCompleted: ULONGLONG;
  5250. ullTotal: ULONGLONG): HRESULT; stdcall;
  5251. function SetProgressState(hwnd: HWND; tbpFlags: Integer): HRESULT; stdcall;
  5252. function RegisterTab(hwndTab: HWND; hwndMDI: HWND): HRESULT; stdcall;
  5253. function UnregisterTab(hwndTab: HWND): HRESULT; stdcall;
  5254. function SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND): HRESULT; stdcall;
  5255. function SetTabActive(hwndTab: HWND; hwndMDI: HWND;
  5256. tbatFlags: Integer): HRESULT; stdcall;
  5257. function ThumbBarAddButtons(hwnd: HWND; cButtons: UINT;
  5258. pButton: PThumbButton): HRESULT; stdcall;
  5259. function ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT;
  5260. pButton: PThumbButton): HRESULT; stdcall;
  5261. function ThumbBarSetImageList(hwnd: HWND; himl: THandle): HRESULT; stdcall;
  5262. function SetOverlayIcon(hwnd: HWND; hIcon: HICON;
  5263. pszDescription: LPCWSTR): HRESULT; stdcall;
  5264. function SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR): HRESULT; stdcall;
  5265. function SetThumbnailClip(hwnd: HWND; var prcClip: TRect): HRESULT; stdcall;
  5266. end;
  5267. {$EXTERNALSYM ITaskbarList3}
  5268. type
  5269. STPFLAG = Integer;
  5270. {$EXTERNALSYM STPFLAG}
  5271. const
  5272. STPF_NONE = 0;
  5273. {$EXTERNALSYM STPF_NONE}
  5274. STPF_USEAPPTHUMBNAILALWAYS = $1;
  5275. {$EXTERNALSYM STPF_USEAPPTHUMBNAILALWAYS}
  5276. STPF_USEAPPTHUMBNAILWHENACTIVE = $2;
  5277. {$EXTERNALSYM STPF_USEAPPTHUMBNAILWHENACTIVE}
  5278. STPF_USEAPPPEEKALWAYS = $4;
  5279. {$EXTERNALSYM STPF_USEAPPPEEKALWAYS}
  5280. STPF_USEAPPPEEKWHENACTIVE = $8;
  5281. {$EXTERNALSYM STPF_USEAPPPEEKWHENACTIVE}
  5282. type
  5283. ITaskbarList4 = interface(ITaskbarList3)
  5284. ['{C43DC798-95D1-4BEA-9030-BB99E2983A1A}']
  5285. function SetTabProperties(hwndTab: HWND; stpFlags: STPFLAG): HRESULT; stdcall;
  5286. end;
  5287. {$EXTERNALSYM ITaskbarList4}
  5288. const
  5289. CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11d0-958A-006097C9A090}';
  5290. {$EXTERNALSYM CLSID_TaskbarList}
  5291. { TODO BCB-compatibility}
  5292. const
  5293. DLLVER_PLATFORM_WINDOWS = $00000001;
  5294. {$EXTERNALSYM DLLVER_PLATFORM_WINDOWS}
  5295. DLLVER_PLATFORM_NT = $00000002;
  5296. {$EXTERNALSYM DLLVER_PLATFORM_NT}
  5297. type
  5298. PDllVersionInfo = ^TDllVersionInfo;
  5299. _DLLVERSIONINFO = packed record
  5300. cbSize: DWORD;
  5301. dwMajorVersion: DWORD;
  5302. dwMinorVersion: DWORD;
  5303. dwBuildNumber: DWORD;
  5304. dwPlatformId: DWORD;
  5305. end;
  5306. {$EXTERNALSYM _DLLVERSIONINFO}
  5307. TDllVersionInfo = _DLLVERSIONINFO;
  5308. DLLVERSIONINFO = _DLLVERSIONINFO;
  5309. {$EXTERNALSYM DLLVERSIONINFO}
  5310. // JwaWinError
  5311. // line 22146
  5312. const
  5313. //
  5314. // Task Scheduler errors
  5315. //
  5316. //
  5317. // MessageId: SCHED_S_TASK_READY
  5318. //
  5319. // MessageText:
  5320. //
  5321. // The task is ready to run at its next scheduled time.
  5322. //
  5323. SCHED_S_TASK_READY = HRESULT($00041300);
  5324. {$EXTERNALSYM SCHED_S_TASK_READY}
  5325. //
  5326. // MessageId: SCHED_S_TASK_RUNNING
  5327. //
  5328. // MessageText:
  5329. //
  5330. // The task is currently running.
  5331. //
  5332. SCHED_S_TASK_RUNNING = HRESULT($00041301);
  5333. {$EXTERNALSYM SCHED_S_TASK_RUNNING}
  5334. //
  5335. // MessageId: SCHED_S_TASK_DISABLED
  5336. //
  5337. // MessageText:
  5338. //
  5339. // The task will not run at the scheduled times because it has been disabled.
  5340. //
  5341. SCHED_S_TASK_DISABLED = HRESULT($00041302);
  5342. {$EXTERNALSYM SCHED_S_TASK_DISABLED}
  5343. //
  5344. // MessageId: SCHED_S_TASK_HAS_NOT_RUN
  5345. //
  5346. // MessageText:
  5347. //
  5348. // The task has not yet run.
  5349. //
  5350. SCHED_S_TASK_HAS_NOT_RUN = HRESULT($00041303);
  5351. {$EXTERNALSYM SCHED_S_TASK_HAS_NOT_RUN}
  5352. //
  5353. // MessageId: SCHED_S_TASK_NO_MORE_RUNS
  5354. //
  5355. // MessageText:
  5356. //
  5357. // There are no more runs scheduled for this task.
  5358. //
  5359. SCHED_S_TASK_NO_MORE_RUNS = HRESULT($00041304);
  5360. {$EXTERNALSYM SCHED_S_TASK_NO_MORE_RUNS}
  5361. //
  5362. // MessageId: SCHED_S_TASK_NOT_SCHEDULED
  5363. //
  5364. // MessageText:
  5365. //
  5366. // One or more of the properties that are needed to run this task on a schedule have not been set.
  5367. //
  5368. SCHED_S_TASK_NOT_SCHEDULED = HRESULT($00041305);
  5369. {$EXTERNALSYM SCHED_S_TASK_NOT_SCHEDULED}
  5370. //
  5371. // MessageId: SCHED_S_TASK_TERMINATED
  5372. //
  5373. // MessageText:
  5374. //
  5375. // The last run of the task was terminated by the user.
  5376. //
  5377. SCHED_S_TASK_TERMINATED = HRESULT($00041306);
  5378. {$EXTERNALSYM SCHED_S_TASK_TERMINATED}
  5379. //
  5380. // MessageId: SCHED_S_TASK_NO_VALID_TRIGGERS
  5381. //
  5382. // MessageText:
  5383. //
  5384. // Either the task has no triggers or the existing triggers are disabled or not set.
  5385. //
  5386. SCHED_S_TASK_NO_VALID_TRIGGERS = HRESULT($00041307);
  5387. {$EXTERNALSYM SCHED_S_TASK_NO_VALID_TRIGGERS}
  5388. //
  5389. // MessageId: SCHED_S_EVENT_TRIGGER
  5390. //
  5391. // MessageText:
  5392. //
  5393. // Event triggers don't have set run times.
  5394. //
  5395. SCHED_S_EVENT_TRIGGER = HRESULT($00041308);
  5396. {$EXTERNALSYM SCHED_S_EVENT_TRIGGER}
  5397. //
  5398. // MessageId: SCHED_E_TRIGGER_NOT_FOUND
  5399. //
  5400. // MessageText:
  5401. //
  5402. // Trigger not found.
  5403. //
  5404. SCHED_E_TRIGGER_NOT_FOUND = HRESULT($80041309);
  5405. {$EXTERNALSYM SCHED_E_TRIGGER_NOT_FOUND}
  5406. //
  5407. // MessageId: SCHED_E_TASK_NOT_READY
  5408. //
  5409. // MessageText:
  5410. //
  5411. // One or more of the properties that are needed to run this task have not been set.
  5412. //
  5413. SCHED_E_TASK_NOT_READY = HRESULT($8004130A);
  5414. {$EXTERNALSYM SCHED_E_TASK_NOT_READY}
  5415. //
  5416. // MessageId: SCHED_E_TASK_NOT_RUNNING
  5417. //
  5418. // MessageText:
  5419. //
  5420. // There is no running instance of the task to terminate.
  5421. //
  5422. SCHED_E_TASK_NOT_RUNNING = HRESULT($8004130B);
  5423. {$EXTERNALSYM SCHED_E_TASK_NOT_RUNNING}
  5424. //
  5425. // MessageId: SCHED_E_SERVICE_NOT_INSTALLED
  5426. //
  5427. // MessageText:
  5428. //
  5429. // The Task Scheduler Service is not installed on this computer.
  5430. //
  5431. SCHED_E_SERVICE_NOT_INSTALLED = HRESULT($8004130C);
  5432. {$EXTERNALSYM SCHED_E_SERVICE_NOT_INSTALLED}
  5433. //
  5434. // MessageId: SCHED_E_CANNOT_OPEN_TASK
  5435. //
  5436. // MessageText:
  5437. //
  5438. // The task object could not be opened.
  5439. //
  5440. SCHED_E_CANNOT_OPEN_TASK = HRESULT($8004130D);
  5441. {$EXTERNALSYM SCHED_E_CANNOT_OPEN_TASK}
  5442. //
  5443. // MessageId: SCHED_E_INVALID_TASK
  5444. //
  5445. // MessageText:
  5446. //
  5447. // The object is either an invalid task object or is not a task object.
  5448. //
  5449. SCHED_E_INVALID_TASK = HRESULT($8004130E);
  5450. {$EXTERNALSYM SCHED_E_INVALID_TASK}
  5451. //
  5452. // MessageId: SCHED_E_ACCOUNT_INFORMATION_NOT_SET
  5453. //
  5454. // MessageText:
  5455. //
  5456. // No account information could be found in the Task Scheduler security database for the task indicated.
  5457. //
  5458. SCHED_E_ACCOUNT_INFORMATION_NOT_SET = HRESULT($8004130F);
  5459. {$EXTERNALSYM SCHED_E_ACCOUNT_INFORMATION_NOT_SET}
  5460. //
  5461. // MessageId: SCHED_E_ACCOUNT_NAME_NOT_FOUND
  5462. //
  5463. // MessageText:
  5464. //
  5465. // Unable to establish existence of the account specified.
  5466. //
  5467. SCHED_E_ACCOUNT_NAME_NOT_FOUND = HRESULT($80041310);
  5468. {$EXTERNALSYM SCHED_E_ACCOUNT_NAME_NOT_FOUND}
  5469. //
  5470. // MessageId: SCHED_E_ACCOUNT_DBASE_CORRUPT
  5471. //
  5472. // MessageText:
  5473. //
  5474. // Corruption was detected in the Task Scheduler security database; the database has been reset.
  5475. //
  5476. SCHED_E_ACCOUNT_DBASE_CORRUPT = HRESULT($80041311);
  5477. {$EXTERNALSYM SCHED_E_ACCOUNT_DBASE_CORRUPT}
  5478. //
  5479. // MessageId: SCHED_E_NO_SECURITY_SERVICES
  5480. //
  5481. // MessageText:
  5482. //
  5483. // Task Scheduler security services are available only on Windows NT.
  5484. //
  5485. SCHED_E_NO_SECURITY_SERVICES = HRESULT($80041312);
  5486. {$EXTERNALSYM SCHED_E_NO_SECURITY_SERVICES}
  5487. //
  5488. // MessageId: SCHED_E_UNKNOWN_OBJECT_VERSION
  5489. //
  5490. // MessageText:
  5491. //
  5492. // The task object version is either unsupported or invalid.
  5493. //
  5494. SCHED_E_UNKNOWN_OBJECT_VERSION = HRESULT($80041313);
  5495. {$EXTERNALSYM SCHED_E_UNKNOWN_OBJECT_VERSION}
  5496. //
  5497. // MessageId: SCHED_E_UNSUPPORTED_ACCOUNT_OPTION
  5498. //
  5499. // MessageText:
  5500. //
  5501. // The task has been configured with an unsupported combination of account settings and run time options.
  5502. //
  5503. SCHED_E_UNSUPPORTED_ACCOUNT_OPTION = HRESULT($80041314);
  5504. {$EXTERNALSYM SCHED_E_UNSUPPORTED_ACCOUNT_OPTION}
  5505. //
  5506. // MessageId: SCHED_E_SERVICE_NOT_RUNNING
  5507. //
  5508. // MessageText:
  5509. //
  5510. // The Task Scheduler Service is not running.
  5511. //
  5512. SCHED_E_SERVICE_NOT_RUNNING = HRESULT($80041315);
  5513. {$EXTERNALSYM SCHED_E_SERVICE_NOT_RUNNING}
  5514. // line 151
  5515. //
  5516. // Define the various device type values. Note that values used by Microsoft
  5517. // Corporation are in the range 0-32767, and 32768-65535 are reserved for use
  5518. // by customers.
  5519. //
  5520. type
  5521. DEVICE_TYPE = DWORD;
  5522. {$EXTERNALSYM DEVICE_TYPE}
  5523. const
  5524. FILE_DEVICE_BEEP = $00000001;
  5525. {$EXTERNALSYM FILE_DEVICE_BEEP}
  5526. FILE_DEVICE_CD_ROM = $00000002;
  5527. {$EXTERNALSYM FILE_DEVICE_CD_ROM}
  5528. FILE_DEVICE_CD_ROM_FILE_SYSTEM = $00000003;
  5529. {$EXTERNALSYM FILE_DEVICE_CD_ROM_FILE_SYSTEM}
  5530. FILE_DEVICE_CONTROLLER = $00000004;
  5531. {$EXTERNALSYM FILE_DEVICE_CONTROLLER}
  5532. FILE_DEVICE_DATALINK = $00000005;
  5533. {$EXTERNALSYM FILE_DEVICE_DATALINK}
  5534. FILE_DEVICE_DFS = $00000006;
  5535. {$EXTERNALSYM FILE_DEVICE_DFS}
  5536. FILE_DEVICE_DISK = $00000007;
  5537. {$EXTERNALSYM FILE_DEVICE_DISK}
  5538. FILE_DEVICE_DISK_FILE_SYSTEM = $00000008;
  5539. {$EXTERNALSYM FILE_DEVICE_DISK_FILE_SYSTEM}
  5540. FILE_DEVICE_FILE_SYSTEM = $00000009;
  5541. {$EXTERNALSYM FILE_DEVICE_FILE_SYSTEM}
  5542. FILE_DEVICE_INPORT_PORT = $0000000a;
  5543. {$EXTERNALSYM FILE_DEVICE_INPORT_PORT}
  5544. FILE_DEVICE_KEYBOARD = $0000000b;
  5545. {$EXTERNALSYM FILE_DEVICE_KEYBOARD}
  5546. FILE_DEVICE_MAILSLOT = $0000000c;
  5547. {$EXTERNALSYM FILE_DEVICE_MAILSLOT}
  5548. FILE_DEVICE_MIDI_IN = $0000000d;
  5549. {$EXTERNALSYM FILE_DEVICE_MIDI_IN}
  5550. FILE_DEVICE_MIDI_OUT = $0000000e;
  5551. {$EXTERNALSYM FILE_DEVICE_MIDI_OUT}
  5552. FILE_DEVICE_MOUSE = $0000000f;
  5553. {$EXTERNALSYM FILE_DEVICE_MOUSE}
  5554. FILE_DEVICE_MULTI_UNC_PROVIDER = $00000010;
  5555. {$EXTERNALSYM FILE_DEVICE_MULTI_UNC_PROVIDER}
  5556. FILE_DEVICE_NAMED_PIPE = $00000011;
  5557. {$EXTERNALSYM FILE_DEVICE_NAMED_PIPE}
  5558. FILE_DEVICE_NETWORK = $00000012;
  5559. {$EXTERNALSYM FILE_DEVICE_NETWORK}
  5560. FILE_DEVICE_NETWORK_BROWSER = $00000013;
  5561. {$EXTERNALSYM FILE_DEVICE_NETWORK_BROWSER}
  5562. FILE_DEVICE_NETWORK_FILE_SYSTEM = $00000014;
  5563. {$EXTERNALSYM FILE_DEVICE_NETWORK_FILE_SYSTEM}
  5564. FILE_DEVICE_NULL = $00000015;
  5565. {$EXTERNALSYM FILE_DEVICE_NULL}
  5566. FILE_DEVICE_PARALLEL_PORT = $00000016;
  5567. {$EXTERNALSYM FILE_DEVICE_PARALLEL_PORT}
  5568. FILE_DEVICE_PHYSICAL_NETCARD = $00000017;
  5569. {$EXTERNALSYM FILE_DEVICE_PHYSICAL_NETCARD}
  5570. FILE_DEVICE_PRINTER = $00000018;
  5571. {$EXTERNALSYM FILE_DEVICE_PRINTER}
  5572. FILE_DEVICE_SCANNER = $00000019;
  5573. {$EXTERNALSYM FILE_DEVICE_SCANNER}
  5574. FILE_DEVICE_SERIAL_MOUSE_PORT = $0000001a;
  5575. {$EXTERNALSYM FILE_DEVICE_SERIAL_MOUSE_PORT}
  5576. FILE_DEVICE_SERIAL_PORT = $0000001b;
  5577. {$EXTERNALSYM FILE_DEVICE_SERIAL_PORT}
  5578. FILE_DEVICE_SCREEN = $0000001c;
  5579. {$EXTERNALSYM FILE_DEVICE_SCREEN}
  5580. FILE_DEVICE_SOUND = $0000001d;
  5581. {$EXTERNALSYM FILE_DEVICE_SOUND}
  5582. FILE_DEVICE_STREAMS = $0000001e;
  5583. {$EXTERNALSYM FILE_DEVICE_STREAMS}
  5584. FILE_DEVICE_TAPE = $0000001f;
  5585. {$EXTERNALSYM FILE_DEVICE_TAPE}
  5586. FILE_DEVICE_TAPE_FILE_SYSTEM = $00000020;
  5587. {$EXTERNALSYM FILE_DEVICE_TAPE_FILE_SYSTEM}
  5588. FILE_DEVICE_TRANSPORT = $00000021;
  5589. {$EXTERNALSYM FILE_DEVICE_TRANSPORT}
  5590. FILE_DEVICE_UNKNOWN = $00000022;
  5591. {$EXTERNALSYM FILE_DEVICE_UNKNOWN}
  5592. FILE_DEVICE_VIDEO = $00000023;
  5593. {$EXTERNALSYM FILE_DEVICE_VIDEO}
  5594. FILE_DEVICE_VIRTUAL_DISK = $00000024;
  5595. {$EXTERNALSYM FILE_DEVICE_VIRTUAL_DISK}
  5596. FILE_DEVICE_WAVE_IN = $00000025;
  5597. {$EXTERNALSYM FILE_DEVICE_WAVE_IN}
  5598. FILE_DEVICE_WAVE_OUT = $00000026;
  5599. {$EXTERNALSYM FILE_DEVICE_WAVE_OUT}
  5600. FILE_DEVICE_8042_PORT = $00000027;
  5601. {$EXTERNALSYM FILE_DEVICE_8042_PORT}
  5602. FILE_DEVICE_NETWORK_REDIRECTOR = $00000028;
  5603. {$EXTERNALSYM FILE_DEVICE_NETWORK_REDIRECTOR}
  5604. FILE_DEVICE_BATTERY = $00000029;
  5605. {$EXTERNALSYM FILE_DEVICE_BATTERY}
  5606. FILE_DEVICE_BUS_EXTENDER = $0000002a;
  5607. {$EXTERNALSYM FILE_DEVICE_BUS_EXTENDER}
  5608. FILE_DEVICE_MODEM = $0000002b;
  5609. {$EXTERNALSYM FILE_DEVICE_MODEM}
  5610. FILE_DEVICE_VDM = $0000002c;
  5611. {$EXTERNALSYM FILE_DEVICE_VDM}
  5612. FILE_DEVICE_MASS_STORAGE = $0000002d;
  5613. {$EXTERNALSYM FILE_DEVICE_MASS_STORAGE}
  5614. FILE_DEVICE_SMB = $0000002e;
  5615. {$EXTERNALSYM FILE_DEVICE_SMB}
  5616. FILE_DEVICE_KS = $0000002f;
  5617. {$EXTERNALSYM FILE_DEVICE_KS}
  5618. FILE_DEVICE_CHANGER = $00000030;
  5619. {$EXTERNALSYM FILE_DEVICE_CHANGER}
  5620. FILE_DEVICE_SMARTCARD = $00000031;
  5621. {$EXTERNALSYM FILE_DEVICE_SMARTCARD}
  5622. FILE_DEVICE_ACPI = $00000032;
  5623. {$EXTERNALSYM FILE_DEVICE_ACPI}
  5624. FILE_DEVICE_DVD = $00000033;
  5625. {$EXTERNALSYM FILE_DEVICE_DVD}
  5626. FILE_DEVICE_FULLSCREEN_VIDEO = $00000034;
  5627. {$EXTERNALSYM FILE_DEVICE_FULLSCREEN_VIDEO}
  5628. FILE_DEVICE_DFS_FILE_SYSTEM = $00000035;
  5629. {$EXTERNALSYM FILE_DEVICE_DFS_FILE_SYSTEM}
  5630. FILE_DEVICE_DFS_VOLUME = $00000036;
  5631. {$EXTERNALSYM FILE_DEVICE_DFS_VOLUME}
  5632. FILE_DEVICE_SERENUM = $00000037;
  5633. {$EXTERNALSYM FILE_DEVICE_SERENUM}
  5634. FILE_DEVICE_TERMSRV = $00000038;
  5635. {$EXTERNALSYM FILE_DEVICE_TERMSRV}
  5636. FILE_DEVICE_KSEC = $00000039;
  5637. {$EXTERNALSYM FILE_DEVICE_KSEC}
  5638. FILE_DEVICE_FIPS = $0000003A;
  5639. {$EXTERNALSYM FILE_DEVICE_FIPS}
  5640. FILE_DEVICE_INFINIBAND = $0000003B;
  5641. {$EXTERNALSYM FILE_DEVICE_INFINIBAND}
  5642. // line 297
  5643. //
  5644. // Define the method codes for how buffers are passed for I/O and FS controls
  5645. //
  5646. const
  5647. METHOD_BUFFERED = 0;
  5648. {$EXTERNALSYM METHOD_BUFFERED}
  5649. METHOD_IN_DIRECT = 1;
  5650. {$EXTERNALSYM METHOD_IN_DIRECT}
  5651. METHOD_OUT_DIRECT = 2;
  5652. {$EXTERNALSYM METHOD_OUT_DIRECT}
  5653. METHOD_NEITHER = 3;
  5654. {$EXTERNALSYM METHOD_NEITHER}
  5655. //
  5656. // Define some easier to comprehend aliases:
  5657. // METHOD_DIRECT_TO_HARDWARE (writes, aka METHOD_IN_DIRECT)
  5658. // METHOD_DIRECT_FROM_HARDWARE (reads, aka METHOD_OUT_DIRECT)
  5659. //
  5660. METHOD_DIRECT_TO_HARDWARE = METHOD_IN_DIRECT;
  5661. {$EXTERNALSYM METHOD_DIRECT_TO_HARDWARE}
  5662. METHOD_DIRECT_FROM_HARDWARE = METHOD_OUT_DIRECT;
  5663. {$EXTERNALSYM METHOD_DIRECT_FROM_HARDWARE}
  5664. //
  5665. // Define the access check value for any access
  5666. //
  5667. //
  5668. // The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in
  5669. // ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these
  5670. // constants *MUST* always be in sync.
  5671. //
  5672. //
  5673. // FILE_SPECIAL_ACCESS is checked by the NT I/O system the same as FILE_ANY_ACCESS.
  5674. // The file systems, however, may add additional access checks for I/O and FS controls
  5675. // that use this value.
  5676. //
  5677. const
  5678. FILE_ANY_ACCESS = 0;
  5679. {$EXTERNALSYM FILE_ANY_ACCESS}
  5680. FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS;
  5681. {$EXTERNALSYM FILE_SPECIAL_ACCESS}
  5682. FILE_READ_ACCESS = $0001; // file & pipe
  5683. {$EXTERNALSYM FILE_READ_ACCESS}
  5684. FILE_WRITE_ACCESS = $0002; // file & pipe
  5685. {$EXTERNALSYM FILE_WRITE_ACCESS}
  5686. // line 3425
  5687. //
  5688. // The following is a list of the native file system fsctls followed by
  5689. // additional network file system fsctls. Some values have been
  5690. // decommissioned.
  5691. //
  5692. const
  5693. FSCTL_REQUEST_OPLOCK_LEVEL_1 = (
  5694. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5695. (0 shl 2) or METHOD_BUFFERED);
  5696. {$EXTERNALSYM FSCTL_REQUEST_OPLOCK_LEVEL_1}
  5697. FSCTL_REQUEST_OPLOCK_LEVEL_2 = (
  5698. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5699. (1 shl 2) or METHOD_BUFFERED);
  5700. {$EXTERNALSYM FSCTL_REQUEST_OPLOCK_LEVEL_2}
  5701. FSCTL_REQUEST_BATCH_OPLOCK = (
  5702. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5703. (2 shl 2) or METHOD_BUFFERED);
  5704. {$EXTERNALSYM FSCTL_REQUEST_BATCH_OPLOCK}
  5705. FSCTL_OPLOCK_BREAK_ACKNOWLEDGE = (
  5706. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5707. (3 shl 2) or METHOD_BUFFERED);
  5708. {$EXTERNALSYM FSCTL_OPLOCK_BREAK_ACKNOWLEDGE}
  5709. FSCTL_OPBATCH_ACK_CLOSE_PENDING = (
  5710. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5711. (4 shl 2) or METHOD_BUFFERED);
  5712. {$EXTERNALSYM FSCTL_OPBATCH_ACK_CLOSE_PENDING}
  5713. FSCTL_OPLOCK_BREAK_NOTIFY = (
  5714. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5715. (5 shl 2) or METHOD_BUFFERED);
  5716. {$EXTERNALSYM FSCTL_OPLOCK_BREAK_NOTIFY}
  5717. FSCTL_LOCK_VOLUME = ((FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or (6 shl 2) or METHOD_BUFFERED);
  5718. {$EXTERNALSYM FSCTL_LOCK_VOLUME}
  5719. FSCTL_UNLOCK_VOLUME = (
  5720. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5721. (7 shl 2) or METHOD_BUFFERED);
  5722. {$EXTERNALSYM FSCTL_UNLOCK_VOLUME}
  5723. FSCTL_DISMOUNT_VOLUME = (
  5724. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5725. (8 shl 2) or METHOD_BUFFERED);
  5726. {$EXTERNALSYM FSCTL_DISMOUNT_VOLUME}
  5727. // decommissioned fsctl value 9
  5728. FSCTL_IS_VOLUME_MOUNTED = (
  5729. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5730. (10 shl 2) or METHOD_BUFFERED);
  5731. {$EXTERNALSYM FSCTL_IS_VOLUME_MOUNTED}
  5732. FSCTL_IS_PATHNAME_VALID = (
  5733. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5734. (11 shl 2) or METHOD_BUFFERED); // PATHNAME_BUFFER,
  5735. {$EXTERNALSYM FSCTL_IS_PATHNAME_VALID}
  5736. FSCTL_MARK_VOLUME_DIRTY = (
  5737. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5738. (12 shl 2) or METHOD_BUFFERED);
  5739. {$EXTERNALSYM FSCTL_MARK_VOLUME_DIRTY}
  5740. // decommissioned fsctl value 13
  5741. FSCTL_QUERY_RETRIEVAL_POINTERS = (
  5742. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5743. (14 shl 2) or METHOD_NEITHER);
  5744. {$EXTERNALSYM FSCTL_QUERY_RETRIEVAL_POINTERS}
  5745. FSCTL_GET_COMPRESSION = (
  5746. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5747. (15 shl 2) or METHOD_BUFFERED);
  5748. {$EXTERNALSYM FSCTL_GET_COMPRESSION}
  5749. FSCTL_SET_COMPRESSION = (
  5750. (FILE_DEVICE_FILE_SYSTEM shl 16) or ((FILE_READ_DATA or FILE_WRITE_DATA) shl 14) or
  5751. (16 shl 2) or METHOD_BUFFERED);
  5752. {$EXTERNALSYM FSCTL_SET_COMPRESSION}
  5753. // decommissioned fsctl value 17
  5754. // decommissioned fsctl value 18
  5755. FSCTL_MARK_AS_SYSTEM_HIVE = (
  5756. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5757. (19 shl 2) or METHOD_NEITHER);
  5758. {$EXTERNALSYM FSCTL_MARK_AS_SYSTEM_HIVE}
  5759. FSCTL_OPLOCK_BREAK_ACK_NO_2 = (
  5760. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5761. (20 shl 2) or METHOD_BUFFERED);
  5762. {$EXTERNALSYM FSCTL_OPLOCK_BREAK_ACK_NO_2}
  5763. FSCTL_INVALIDATE_VOLUMES = (
  5764. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5765. (21 shl 2) or METHOD_BUFFERED);
  5766. {$EXTERNALSYM FSCTL_INVALIDATE_VOLUMES}
  5767. FSCTL_QUERY_FAT_BPB = (
  5768. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5769. (22 shl 2) or METHOD_BUFFERED); // FSCTL_QUERY_FAT_BPB_BUFFER
  5770. {$EXTERNALSYM FSCTL_QUERY_FAT_BPB}
  5771. FSCTL_REQUEST_FILTER_OPLOCK = (
  5772. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5773. (23 shl 2) or METHOD_BUFFERED);
  5774. {$EXTERNALSYM FSCTL_REQUEST_FILTER_OPLOCK}
  5775. FSCTL_FILESYSTEM_GET_STATISTICS = (
  5776. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5777. (24 shl 2) or METHOD_BUFFERED); // FILESYSTEM_STATISTICS
  5778. {$EXTERNALSYM FSCTL_FILESYSTEM_GET_STATISTICS}
  5779. FSCTL_GET_NTFS_VOLUME_DATA = (
  5780. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5781. (25 shl 2) or METHOD_BUFFERED);
  5782. {$EXTERNALSYM FSCTL_GET_NTFS_VOLUME_DATA}
  5783. FSCTL_GET_NTFS_FILE_RECORD = (
  5784. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5785. (26 shl 2) or METHOD_BUFFERED);
  5786. {$EXTERNALSYM FSCTL_GET_NTFS_FILE_RECORD}
  5787. FSCTL_GET_VOLUME_BITMAP = (
  5788. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5789. (27 shl 2) or METHOD_NEITHER);
  5790. {$EXTERNALSYM FSCTL_GET_VOLUME_BITMAP}
  5791. FSCTL_GET_RETRIEVAL_POINTERS = (
  5792. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5793. (28 shl 2) or METHOD_NEITHER);
  5794. {$EXTERNALSYM FSCTL_GET_RETRIEVAL_POINTERS}
  5795. FSCTL_MOVE_FILE = (
  5796. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5797. (29 shl 2) or METHOD_BUFFERED);
  5798. {$EXTERNALSYM FSCTL_MOVE_FILE}
  5799. FSCTL_IS_VOLUME_DIRTY = (
  5800. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5801. (30 shl 2) or METHOD_BUFFERED);
  5802. {$EXTERNALSYM FSCTL_IS_VOLUME_DIRTY}
  5803. // decomissioned fsctl value 31
  5804. (* FSCTL_GET_HFS_INFORMATION = (
  5805. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5806. (31 shl 2) or METHOD_BUFFERED);
  5807. {$EXTERNALSYM FSCTL_GET_HFS_INFORMATION}
  5808. *)
  5809. FSCTL_ALLOW_EXTENDED_DASD_IO = (
  5810. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5811. (32 shl 2) or METHOD_NEITHER);
  5812. {$EXTERNALSYM FSCTL_ALLOW_EXTENDED_DASD_IO}
  5813. // decommissioned fsctl value 33
  5814. // decommissioned fsctl value 34
  5815. (*
  5816. FSCTL_READ_PROPERTY_DATA = (
  5817. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5818. (33 shl 2) or METHOD_NEITHER);
  5819. {$EXTERNALSYM FSCTL_READ_PROPERTY_DATA}
  5820. FSCTL_WRITE_PROPERTY_DATA = (
  5821. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5822. (34 shl 2) or METHOD_NEITHER);
  5823. {$EXTERNALSYM FSCTL_WRITE_PROPERTY_DATA}
  5824. *)
  5825. FSCTL_FIND_FILES_BY_SID = (
  5826. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5827. (35 shl 2) or METHOD_NEITHER);
  5828. {$EXTERNALSYM FSCTL_FIND_FILES_BY_SID}
  5829. // decommissioned fsctl value 36
  5830. // decommissioned fsctl value 37
  5831. (* FSCTL_DUMP_PROPERTY_DATA = (
  5832. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5833. (37 shl 2) or METHOD_NEITHER);
  5834. {$EXTERNALSYM FSCTL_DUMP_PROPERTY_DATA}
  5835. *)
  5836. FSCTL_SET_OBJECT_ID = (
  5837. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5838. (38 shl 2) or METHOD_BUFFERED);
  5839. {$EXTERNALSYM FSCTL_SET_OBJECT_ID}
  5840. FSCTL_GET_OBJECT_ID = (
  5841. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5842. (39 shl 2) or METHOD_BUFFERED);
  5843. {$EXTERNALSYM FSCTL_GET_OBJECT_ID}
  5844. FSCTL_DELETE_OBJECT_ID = (
  5845. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5846. (40 shl 2) or METHOD_BUFFERED);
  5847. {$EXTERNALSYM FSCTL_DELETE_OBJECT_ID}
  5848. FSCTL_SET_REPARSE_POINT = (
  5849. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5850. (41 shl 2) or METHOD_BUFFERED);
  5851. {$EXTERNALSYM FSCTL_SET_REPARSE_POINT}
  5852. FSCTL_GET_REPARSE_POINT = (
  5853. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5854. (42 shl 2) or METHOD_BUFFERED);
  5855. {$EXTERNALSYM FSCTL_GET_REPARSE_POINT}
  5856. FSCTL_DELETE_REPARSE_POINT = (
  5857. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5858. (43 shl 2) or METHOD_BUFFERED);
  5859. {$EXTERNALSYM FSCTL_DELETE_REPARSE_POINT}
  5860. FSCTL_ENUM_USN_DATA = (
  5861. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5862. (44 shl 2) or METHOD_NEITHER);
  5863. {$EXTERNALSYM FSCTL_ENUM_USN_DATA}
  5864. FSCTL_SECURITY_ID_CHECK = (
  5865. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_READ_DATA shl 14) or
  5866. (45 shl 2) or METHOD_NEITHER);
  5867. {$EXTERNALSYM FSCTL_SECURITY_ID_CHECK}
  5868. FSCTL_READ_USN_JOURNAL = (
  5869. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5870. (46 shl 2) or METHOD_NEITHER);
  5871. {$EXTERNALSYM FSCTL_READ_USN_JOURNAL}
  5872. FSCTL_SET_OBJECT_ID_EXTENDED = (
  5873. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5874. (47 shl 2) or METHOD_BUFFERED);
  5875. {$EXTERNALSYM FSCTL_SET_OBJECT_ID_EXTENDED}
  5876. FSCTL_CREATE_OR_GET_OBJECT_ID = (
  5877. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5878. (48 shl 2) or METHOD_BUFFERED);
  5879. {$EXTERNALSYM FSCTL_CREATE_OR_GET_OBJECT_ID}
  5880. FSCTL_SET_SPARSE = (
  5881. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5882. (49 shl 2) or METHOD_BUFFERED);
  5883. {$EXTERNALSYM FSCTL_SET_SPARSE}
  5884. FSCTL_SET_ZERO_DATA = (
  5885. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_WRITE_DATA shl 14) or
  5886. (50 shl 2) or METHOD_BUFFERED);
  5887. {$EXTERNALSYM FSCTL_SET_ZERO_DATA}
  5888. FSCTL_QUERY_ALLOCATED_RANGES = (
  5889. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_READ_DATA shl 14) or
  5890. (51 shl 2) or METHOD_NEITHER);
  5891. {$EXTERNALSYM FSCTL_QUERY_ALLOCATED_RANGES}
  5892. // decommissioned fsctl value 52
  5893. (*
  5894. FSCTL_ENABLE_UPGRADE = (
  5895. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_WRITE_DATA shl 14) or
  5896. (52 shl 2) or METHOD_BUFFERED);
  5897. {$EXTERNALSYM FSCTL_ENABLE_UPGRADE}
  5898. *)
  5899. FSCTL_SET_ENCRYPTION = (
  5900. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5901. (53 shl 2) or METHOD_NEITHER);
  5902. {$EXTERNALSYM FSCTL_SET_ENCRYPTION}
  5903. FSCTL_ENCRYPTION_FSCTL_IO = (
  5904. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5905. (54 shl 2) or METHOD_NEITHER);
  5906. {$EXTERNALSYM FSCTL_ENCRYPTION_FSCTL_IO}
  5907. FSCTL_WRITE_RAW_ENCRYPTED = (
  5908. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5909. (55 shl 2) or METHOD_NEITHER);
  5910. {$EXTERNALSYM FSCTL_WRITE_RAW_ENCRYPTED}
  5911. FSCTL_READ_RAW_ENCRYPTED = (
  5912. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5913. (56 shl 2) or METHOD_NEITHER);
  5914. {$EXTERNALSYM FSCTL_READ_RAW_ENCRYPTED}
  5915. FSCTL_CREATE_USN_JOURNAL = (
  5916. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5917. (57 shl 2) or METHOD_NEITHER);
  5918. {$EXTERNALSYM FSCTL_CREATE_USN_JOURNAL}
  5919. FSCTL_READ_FILE_USN_DATA = (
  5920. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5921. (58 shl 2) or METHOD_NEITHER);
  5922. {$EXTERNALSYM FSCTL_READ_FILE_USN_DATA}
  5923. FSCTL_WRITE_USN_CLOSE_RECORD = (
  5924. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5925. (59 shl 2) or METHOD_NEITHER);
  5926. {$EXTERNALSYM FSCTL_WRITE_USN_CLOSE_RECORD}
  5927. FSCTL_EXTEND_VOLUME = (
  5928. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5929. (60 shl 2) or METHOD_BUFFERED);
  5930. {$EXTERNALSYM FSCTL_EXTEND_VOLUME}
  5931. FSCTL_QUERY_USN_JOURNAL = (
  5932. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5933. (61 shl 2) or METHOD_BUFFERED);
  5934. {$EXTERNALSYM FSCTL_QUERY_USN_JOURNAL}
  5935. FSCTL_DELETE_USN_JOURNAL = (
  5936. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5937. (62 shl 2) or METHOD_BUFFERED);
  5938. {$EXTERNALSYM FSCTL_DELETE_USN_JOURNAL}
  5939. FSCTL_MARK_HANDLE = (
  5940. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5941. (63 shl 2) or METHOD_BUFFERED);
  5942. {$EXTERNALSYM FSCTL_MARK_HANDLE}
  5943. FSCTL_SIS_COPYFILE = (
  5944. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5945. (64 shl 2) or METHOD_BUFFERED);
  5946. {$EXTERNALSYM FSCTL_SIS_COPYFILE}
  5947. FSCTL_SIS_LINK_FILES = (
  5948. (FILE_DEVICE_FILE_SYSTEM shl 16) or ((FILE_READ_DATA or FILE_WRITE_DATA) shl 14) or
  5949. (65 shl 2) or METHOD_BUFFERED);
  5950. {$EXTERNALSYM FSCTL_SIS_LINK_FILES}
  5951. FSCTL_HSM_MSG = (
  5952. (FILE_DEVICE_FILE_SYSTEM shl 16) or ((FILE_READ_DATA or FILE_WRITE_DATA) shl 14) or
  5953. (66 shl 2) or METHOD_BUFFERED);
  5954. {$EXTERNALSYM FSCTL_HSM_MSG}
  5955. // decommissioned fsctl value 67
  5956. (*
  5957. FSCTL_NSS_CONTROL = (
  5958. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_WRITE_DATA shl 14) or
  5959. (67 shl 2) or METHOD_BUFFERED);
  5960. {$EXTERNALSYM FSCTL_NSS_CONTROL}
  5961. *)
  5962. FSCTL_HSM_DATA = (
  5963. (FILE_DEVICE_FILE_SYSTEM shl 16) or ((FILE_READ_DATA or FILE_WRITE_DATA) shl 14) or
  5964. (68 shl 2) or METHOD_NEITHER);
  5965. {$EXTERNALSYM FSCTL_HSM_DATA}
  5966. FSCTL_RECALL_FILE = (
  5967. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_ANY_ACCESS shl 14) or
  5968. (69 shl 2) or METHOD_NEITHER);
  5969. {$EXTERNALSYM FSCTL_RECALL_FILE}
  5970. // decommissioned fsctl value 70
  5971. (*
  5972. FSCTL_NSS_RCONTROL = (
  5973. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_READ_DATA shl 14) or
  5974. (70 shl 2) or METHOD_BUFFERED);
  5975. {$EXTERNALSYM FSCTL_NSS_RCONTROL}
  5976. *)
  5977. FSCTL_READ_FROM_PLEX = (
  5978. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_READ_DATA shl 14) or
  5979. (71 shl 2) or METHOD_OUT_DIRECT);
  5980. {$EXTERNALSYM FSCTL_READ_FROM_PLEX}
  5981. FSCTL_FILE_PREFETCH = (
  5982. (FILE_DEVICE_FILE_SYSTEM shl 16) or (FILE_SPECIAL_ACCESS shl 14) or
  5983. (72 shl 2) or METHOD_BUFFERED);
  5984. {$EXTERNALSYM FSCTL_FILE_PREFETCH}
  5985. // line 4553
  5986. //
  5987. // Structure for FSCTL_SET_ZERO_DATA
  5988. //
  5989. type
  5990. PFILE_ZERO_DATA_INFORMATION = ^FILE_ZERO_DATA_INFORMATION;
  5991. {$EXTERNALSYM PFILE_ZERO_DATA_INFORMATION}
  5992. _FILE_ZERO_DATA_INFORMATION = record
  5993. FileOffset: LARGE_INTEGER;
  5994. BeyondFinalZero: LARGE_INTEGER;
  5995. end;
  5996. {$EXTERNALSYM _FILE_ZERO_DATA_INFORMATION}
  5997. FILE_ZERO_DATA_INFORMATION = _FILE_ZERO_DATA_INFORMATION;
  5998. {$EXTERNALSYM FILE_ZERO_DATA_INFORMATION}
  5999. TFileZeroDataInformation = FILE_ZERO_DATA_INFORMATION;
  6000. PFileZeroDataInformation = PFILE_ZERO_DATA_INFORMATION;
  6001. //
  6002. // Structure for FSCTL_QUERY_ALLOCATED_RANGES
  6003. //
  6004. //
  6005. // Querying the allocated ranges requires an output buffer to store the
  6006. // allocated ranges and an input buffer to specify the range to query.
  6007. // The input buffer contains a single entry, the output buffer is an
  6008. // array of the following structure.
  6009. //
  6010. PFILE_ALLOCATED_RANGE_BUFFER = ^FILE_ALLOCATED_RANGE_BUFFER;
  6011. {$EXTERNALSYM PFILE_ALLOCATED_RANGE_BUFFER}
  6012. _FILE_ALLOCATED_RANGE_BUFFER = record
  6013. FileOffset: LARGE_INTEGER;
  6014. Length: LARGE_INTEGER;
  6015. end;
  6016. {$EXTERNALSYM _FILE_ALLOCATED_RANGE_BUFFER}
  6017. FILE_ALLOCATED_RANGE_BUFFER = _FILE_ALLOCATED_RANGE_BUFFER;
  6018. {$EXTERNALSYM FILE_ALLOCATED_RANGE_BUFFER}
  6019. TFileAllocatedRangeBuffer = FILE_ALLOCATED_RANGE_BUFFER;
  6020. PFileAllocatedRangeBuffer = PFILE_ALLOCATED_RANGE_BUFFER;
  6021. // line 340
  6022. //
  6023. // Code Page Default Values.
  6024. //
  6025. const
  6026. CP_ACP = 0; // default to ANSI code page
  6027. {$EXTERNALSYM CP_ACP}
  6028. CP_OEMCP = 1; // default to OEM code page
  6029. {$EXTERNALSYM CP_OEMCP}
  6030. CP_MACCP = 2; // default to MAC code page
  6031. {$EXTERNALSYM CP_MACCP}
  6032. CP_THREAD_ACP = 3; // current thread's ANSI code page
  6033. {$EXTERNALSYM CP_THREAD_ACP}
  6034. CP_SYMBOL = 42; // SYMBOL translations
  6035. {$EXTERNALSYM CP_SYMBOL}
  6036. CP_UTF7 = 65000; // UTF-7 translation
  6037. {$EXTERNALSYM CP_UTF7}
  6038. CP_UTF8 = 65001; // UTF-8 translation
  6039. {$EXTERNALSYM CP_UTF8}
  6040. // line 597
  6041. const
  6042. //
  6043. // The following LCTypes may be used in combination with any other LCTypes.
  6044. //
  6045. // LOCALE_NOUSEROVERRIDE is also used in GetTimeFormat and
  6046. // GetDateFormat.
  6047. //
  6048. // LOCALE_USE_CP_ACP is used in many of the A (Ansi) apis that need
  6049. // to do string translation.
  6050. //
  6051. // LOCALE_RETURN_NUMBER will return the result from GetLocaleInfo as a
  6052. // number instead of a string. This flag is only valid for the LCTypes
  6053. // beginning with LOCALE_I.
  6054. //
  6055. LOCALE_NOUSEROVERRIDE = DWORD($80000000); // do not use user overrides
  6056. {$EXTERNALSYM LOCALE_NOUSEROVERRIDE}
  6057. LOCALE_USE_CP_ACP = $40000000; // use the system ACP
  6058. {$EXTERNALSYM LOCALE_USE_CP_ACP}
  6059. LOCALE_RETURN_NUMBER = $20000000; // return number instead of string
  6060. {$EXTERNALSYM LOCALE_RETURN_NUMBER}
  6061. // line 841
  6062. const
  6063. LOCALE_IDEFAULTEBCDICCODEPAGE = $00001012; // default ebcdic code page
  6064. {$EXTERNALSYM LOCALE_IDEFAULTEBCDICCODEPAGE}
  6065. LOCALE_IPAPERSIZE = $0000100A; // 1 = letter, 5 = legal, 8 = a3, 9 = a4
  6066. {$EXTERNALSYM LOCALE_IPAPERSIZE}
  6067. LOCALE_SENGCURRNAME = $00001007; // english name of currency
  6068. {$EXTERNALSYM LOCALE_SENGCURRNAME}
  6069. LOCALE_SNATIVECURRNAME = $00001008; // native name of currency
  6070. {$EXTERNALSYM LOCALE_SNATIVECURRNAME}
  6071. LOCALE_SYEARMONTH = $00001006; // year month format string
  6072. {$EXTERNALSYM LOCALE_SYEARMONTH}
  6073. LOCALE_SSORTNAME = $00001013; // sort name
  6074. {$EXTERNALSYM LOCALE_SSORTNAME}
  6075. LOCALE_IDIGITSUBSTITUTION = $00001014; // 0 = context, 1 = none, 2 = national
  6076. {$EXTERNALSYM LOCALE_IDIGITSUBSTITUTION}
  6077. // line 880
  6078. DATE_YEARMONTH = $00000008; // use year month picture
  6079. {$EXTERNALSYM DATE_YEARMONTH}
  6080. DATE_LTRREADING = $00000010; // add marks for left to right reading order layout
  6081. {$EXTERNALSYM DATE_LTRREADING}
  6082. DATE_RTLREADING = $00000020; // add marks for right to left reading order layout
  6083. {$EXTERNALSYM DATE_RTLREADING}
  6084. //
  6085. // Calendar Types.
  6086. //
  6087. // These types are used for the EnumCalendarInfo and GetCalendarInfo
  6088. // NLS API routines.
  6089. // Some of these types are also used for the SetCalendarInfo NLS API
  6090. // routine.
  6091. //
  6092. //
  6093. // The following CalTypes may be used in combination with any other CalTypes.
  6094. //
  6095. // CAL_NOUSEROVERRIDE
  6096. //
  6097. // CAL_USE_CP_ACP is used in the A (Ansi) apis that need to do string
  6098. // translation.
  6099. //
  6100. // CAL_RETURN_NUMBER will return the result from GetCalendarInfo as a
  6101. // number instead of a string. This flag is only valid for the CalTypes
  6102. // beginning with CAL_I.
  6103. //
  6104. CAL_NOUSEROVERRIDE = LOCALE_NOUSEROVERRIDE; // do not use user overrides
  6105. {$EXTERNALSYM CAL_NOUSEROVERRIDE}
  6106. CAL_USE_CP_ACP = LOCALE_USE_CP_ACP; // use the system ACP
  6107. {$EXTERNALSYM CAL_USE_CP_ACP}
  6108. CAL_RETURN_NUMBER = LOCALE_RETURN_NUMBER; // return number instead of string
  6109. {$EXTERNALSYM CAL_RETURN_NUMBER}
  6110. // line 1014
  6111. CAL_SYEARMONTH = $0000002f; // year month format string
  6112. {$EXTERNALSYM CAL_SYEARMONTH}
  6113. CAL_ITWODIGITYEARMAX = $00000030; // two digit year max
  6114. {$EXTERNALSYM CAL_ITWODIGITYEARMAX}
  6115. // line 1424
  6116. type
  6117. CALINFO_ENUMPROCEXW = function (lpCalendarInfoString: LPWSTR; Calendar: CALID): BOOL; stdcall;
  6118. {$EXTERNALSYM CALINFO_ENUMPROCEXW}
  6119. TCalInfoEnumProcExW = CALINFO_ENUMPROCEXW;
  6120. // line 1635
  6121. function GetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  6122. lpCalData: LPSTR; cchData: Integer; lpValue: LPDWORD): Integer; stdcall;
  6123. {$EXTERNALSYM GetCalendarInfoA}
  6124. function GetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  6125. lpCalData: LPWSTR; cchData: Integer; lpValue: LPDWORD): Integer; stdcall;
  6126. {$EXTERNALSYM GetCalendarInfoW}
  6127. // line 1754
  6128. function EnumCalendarInfoExW(lpCalInfoEnumProcEx: CALINFO_ENUMPROCEXW;
  6129. Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL; stdcall;
  6130. {$EXTERNALSYM EnumCalendarInfoExW}
  6131. {$IFNDEF FPC}
  6132. type
  6133. MAKEINTRESOURCEA = LPSTR;
  6134. {$EXTERNALSYM MAKEINTRESOURCEA}
  6135. MAKEINTRESOURCEW = LPWSTR;
  6136. {$EXTERNALSYM MAKEINTRESOURCEW}
  6137. {$IFDEF SUPPORTS_UNICODE}
  6138. MAKEINTRESOURCE = MAKEINTRESOURCEW;
  6139. {$EXTERNALSYM MAKEINTRESOURCE}
  6140. {$ELSE ~SUPPORTS_UNICODE}
  6141. MAKEINTRESOURCE = MAKEINTRESOURCEA;
  6142. {$EXTERNALSYM MAKEINTRESOURCE}
  6143. {$ENDIF ~SUPPORTS_UNICODE}
  6144. {$ENDIF ~FPC}
  6145. //
  6146. // Predefined Resource Types
  6147. //
  6148. const
  6149. RT_CURSOR = MAKEINTRESOURCE(1);
  6150. {$EXTERNALSYM RT_CURSOR}
  6151. RT_BITMAP = MAKEINTRESOURCE(2);
  6152. {$EXTERNALSYM RT_BITMAP}
  6153. RT_ICON = MAKEINTRESOURCE(3);
  6154. {$EXTERNALSYM RT_ICON}
  6155. RT_MENU = MAKEINTRESOURCE(4);
  6156. {$EXTERNALSYM RT_MENU}
  6157. RT_DIALOG = MAKEINTRESOURCE(5);
  6158. {$EXTERNALSYM RT_DIALOG}
  6159. RT_STRING = MAKEINTRESOURCE(6);
  6160. {$EXTERNALSYM RT_STRING}
  6161. RT_FONTDIR = MAKEINTRESOURCE(7);
  6162. {$EXTERNALSYM RT_FONTDIR}
  6163. RT_FONT = MAKEINTRESOURCE(8);
  6164. {$EXTERNALSYM RT_FONT}
  6165. RT_ACCELERATOR = MAKEINTRESOURCE(9);
  6166. {$EXTERNALSYM RT_ACCELERATOR}
  6167. RT_RCDATA = MAKEINTRESOURCE(10);
  6168. {$EXTERNALSYM RT_RCDATA}
  6169. RT_MESSAGETABLE = MAKEINTRESOURCE(11);
  6170. {$EXTERNALSYM RT_MESSAGETABLE}
  6171. DIFFERENCE = 11;
  6172. {$EXTERNALSYM DIFFERENCE}
  6173. RT_GROUP_CURSOR = MAKEINTRESOURCE(ULONG_PTR(RT_CURSOR) + DIFFERENCE);
  6174. {$EXTERNALSYM RT_GROUP_CURSOR}
  6175. RT_GROUP_ICON = MAKEINTRESOURCE(ULONG_PTR(RT_ICON) + DIFFERENCE);
  6176. {$EXTERNALSYM RT_GROUP_ICON}
  6177. RT_VERSION = MAKEINTRESOURCE(16);
  6178. {$EXTERNALSYM RT_VERSION}
  6179. RT_DLGINCLUDE = MAKEINTRESOURCE(17);
  6180. {$EXTERNALSYM RT_DLGINCLUDE}
  6181. RT_PLUGPLAY = MAKEINTRESOURCE(19);
  6182. {$EXTERNALSYM RT_PLUGPLAY}
  6183. RT_VXD = MAKEINTRESOURCE(20);
  6184. {$EXTERNALSYM RT_VXD}
  6185. RT_ANICURSOR = MAKEINTRESOURCE(21);
  6186. {$EXTERNALSYM RT_ANICURSOR}
  6187. RT_ANIICON = MAKEINTRESOURCE(22);
  6188. {$EXTERNALSYM RT_ANIICON}
  6189. RT_HTML = MAKEINTRESOURCE(23);
  6190. {$EXTERNALSYM RT_HTML}
  6191. RT_MANIFEST = MAKEINTRESOURCE(24);
  6192. CREATEPROCESS_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE(1);
  6193. {$EXTERNALSYM CREATEPROCESS_MANIFEST_RESOURCE_ID}
  6194. ISOLATIONAWARE_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE(2);
  6195. {$EXTERNALSYM ISOLATIONAWARE_MANIFEST_RESOURCE_ID}
  6196. ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE(3);
  6197. {$EXTERNALSYM ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID}
  6198. MINIMUM_RESERVED_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE(1{inclusive});
  6199. {$EXTERNALSYM MINIMUM_RESERVED_MANIFEST_RESOURCE_ID}
  6200. MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE(16{inclusive});
  6201. {$EXTERNALSYM MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID}
  6202. // line 1451
  6203. KLF_SETFORPROCESS = $00000100;
  6204. {$EXTERNALSYM KLF_SETFORPROCESS}
  6205. KLF_SHIFTLOCK = $00010000;
  6206. {$EXTERNALSYM KLF_SHIFTLOCK}
  6207. KLF_RESET = $40000000;
  6208. {$EXTERNALSYM KLF_RESET}
  6209. // 64 compatible version of GetWindowLong and SetWindowLong
  6210. const
  6211. GWLP_WNDPROC = -4;
  6212. {$EXTERNALSYM GWLP_WNDPROC}
  6213. GWLP_HINSTANCE = -6;
  6214. {$EXTERNALSYM GWLP_HINSTANCE}
  6215. GWLP_HWNDPARENT = -8;
  6216. {$EXTERNALSYM GWLP_HWNDPARENT}
  6217. GWLP_USERDATA = -21;
  6218. {$EXTERNALSYM GWLP_USERDATA}
  6219. GWLP_ID = -12;
  6220. {$EXTERNALSYM GWLP_ID}
  6221. {$EXTERNALSYM GetWindowLongPtr}
  6222. function GetWindowLongPtr(hWnd: HWND; nIndex: Integer): TJclAddr; stdcall;
  6223. {$EXTERNALSYM SetWindowLongPtr}
  6224. function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: TJclAddr): Longint; stdcall;
  6225. function IsPwrSuspendAllowed: BOOL; stdcall;
  6226. function IsPwrHibernateAllowed: BOOL; stdcall;
  6227. function IsPwrShutdownAllowed: BOOL; stdcall;
  6228. function SetSuspendState(Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL; stdcall;
  6229. type
  6230. // Microsoft version (64 bit SDK)
  6231. {$EXTERNALSYM RVA}
  6232. RVA = DWORD;
  6233. // 64-bit PE
  6234. {$EXTERNALSYM ImgDelayDescrV2}
  6235. ImgDelayDescrV2 = packed record
  6236. grAttrs: DWORD; // attributes
  6237. rvaDLLName: RVA; // RVA to dll name
  6238. rvaHmod: RVA; // RVA of module handle
  6239. rvaIAT: RVA; // RVA of the IAT
  6240. rvaINT: RVA; // RVA of the INT
  6241. rvaBoundIAT: RVA; // RVA of the optional bound IAT
  6242. rvaUnloadIAT: RVA; // RVA of optional copy of original IAT
  6243. dwTimeStamp: DWORD; // 0 if not bound,
  6244. // O.W. date/time stamp of DLL bound to (Old BIND)
  6245. end;
  6246. {$EXTERNALSYM TImgDelayDescrV2}
  6247. TImgDelayDescrV2 = ImgDelayDescrV2;
  6248. {$EXTERNALSYM PImgDelayDescrV2}
  6249. PImgDelayDescrV2 = ^ImgDelayDescrV2;
  6250. {$EXTERNALSYM PHMODULE}
  6251. PHMODULE = ^HMODULE;
  6252. // 32-bit PE
  6253. {$EXTERNALSYM ImgDelayDescrV1}
  6254. ImgDelayDescrV1 = packed record
  6255. grAttrs: DWORD; // attributes
  6256. szName: LPCSTR; // pointer to dll name
  6257. phmod: PHMODULE; // address of module handle
  6258. pIAT: PImageThunkData32; // address of the IAT
  6259. pINT: PImageThunkData32; // address of the INT
  6260. pBoundIAT: PImageThunkData32; // address of the optional bound IAT
  6261. pUnloadIAT: PImageThunkData32; // address of optional copy of original IAT
  6262. dwTimeStamp: DWORD; // 0 if not bound,
  6263. // O.W. date/time stamp of DLL bound to (Old BIND)
  6264. end;
  6265. {$EXTERNALSYM TImgDelayDescrV1}
  6266. TImgDelayDescrV1 = ImgDelayDescrV1;
  6267. {$EXTERNALSYM PImgDelayDescrV1}
  6268. PImgDelayDescrV1 = ^ImgDelayDescrV1;
  6269. //{$EXTERNALSYM PImgDelayDescr}
  6270. //PImgDelayDescr = ImgDelayDescr;
  6271. //TImgDelayDescr = ImgDelayDescr;
  6272. // msidefs.h line 349
  6273. // PIDs given specific meanings for Installer
  6274. const
  6275. PID_MSIVERSION = $0000000E; // integer, Installer version number (major*100+minor)
  6276. {$EXTERNALSYM PID_MSIVERSION}
  6277. PID_MSISOURCE = $0000000F; // integer, type of file image, short/long, media/tree
  6278. {$EXTERNALSYM PID_MSISOURCE}
  6279. PID_MSIRESTRICT = $00000010; // integer, transform restrictions
  6280. {$EXTERNALSYM PID_MSIRESTRICT}
  6281. // shlguid.h line 404
  6282. const
  6283. FMTID_ShellDetails: TGUID = '{28636aa6-953d-11d2-b5d6-00c04fd918d0}';
  6284. {$EXTERNALSYM FMTID_ShellDetails}
  6285. PID_FINDDATA = 0;
  6286. {$EXTERNALSYM PID_FINDDATA}
  6287. PID_NETRESOURCE = 1;
  6288. {$EXTERNALSYM PID_NETRESOURCE}
  6289. PID_DESCRIPTIONID = 2;
  6290. {$EXTERNALSYM PID_DESCRIPTIONID}
  6291. PID_WHICHFOLDER = 3;
  6292. {$EXTERNALSYM PID_WHICHFOLDER}
  6293. PID_NETWORKLOCATION = 4;
  6294. {$EXTERNALSYM PID_NETWORKLOCATION}
  6295. PID_COMPUTERNAME = 5;
  6296. {$EXTERNALSYM PID_COMPUTERNAME}
  6297. // PSGUID_STORAGE comes from ntquery.h
  6298. const
  6299. FMTID_Storage: TGUID = '{b725f130-47ef-101a-a5f1-02608c9eebac}';
  6300. {$EXTERNALSYM FMTID_Storage}
  6301. // Image properties
  6302. const
  6303. FMTID_ImageProperties: TGUID = '{14b81da1-0135-4d31-96d9-6cbfc9671a99}';
  6304. {$EXTERNALSYM FMTID_ImageProperties}
  6305. // The GUIDs used to identify shell item attributes (columns). See IShellFolder2::GetDetailsEx implementations...
  6306. const
  6307. FMTID_Displaced: TGUID = '{9B174B33-40FF-11d2-A27E-00C04FC30871}';
  6308. {$EXTERNALSYM FMTID_Displaced}
  6309. PID_DISPLACED_FROM = 2;
  6310. {$EXTERNALSYM PID_DISPLACED_FROM}
  6311. PID_DISPLACED_DATE = 3;
  6312. {$EXTERNALSYM PID_DISPLACED_DATE}
  6313. const
  6314. FMTID_Briefcase: TGUID = '{328D8B21-7729-4bfc-954C-902B329D56B0}';
  6315. {$EXTERNALSYM FMTID_Briefcase}
  6316. PID_SYNC_COPY_IN = 2;
  6317. {$EXTERNALSYM PID_SYNC_COPY_IN}
  6318. const
  6319. FMTID_Misc: TGUID = '{9B174B34-40FF-11d2-A27E-00C04FC30871}';
  6320. {$EXTERNALSYM FMTID_Misc}
  6321. PID_MISC_STATUS = 2;
  6322. {$EXTERNALSYM PID_MISC_STATUS}
  6323. PID_MISC_ACCESSCOUNT = 3;
  6324. {$EXTERNALSYM PID_MISC_ACCESSCOUNT}
  6325. PID_MISC_OWNER = 4;
  6326. {$EXTERNALSYM PID_MISC_OWNER}
  6327. PID_HTMLINFOTIPFILE = 5;
  6328. {$EXTERNALSYM PID_HTMLINFOTIPFILE}
  6329. PID_MISC_PICS = 6;
  6330. {$EXTERNALSYM PID_MISC_PICS}
  6331. const
  6332. FMTID_WebView: TGUID = '{F2275480-F782-4291-BD94-F13693513AEC}';
  6333. {$EXTERNALSYM FMTID_WebView}
  6334. PID_DISPLAY_PROPERTIES = 0;
  6335. {$EXTERNALSYM PID_DISPLAY_PROPERTIES}
  6336. PID_INTROTEXT = 1;
  6337. {$EXTERNALSYM PID_INTROTEXT}
  6338. const
  6339. FMTID_MUSIC: TGUID = '{56A3372E-CE9C-11d2-9F0E-006097C686F6}';
  6340. {$EXTERNALSYM FMTID_MUSIC}
  6341. PIDSI_ARTIST = 2;
  6342. {$EXTERNALSYM PIDSI_ARTIST}
  6343. PIDSI_SONGTITLE = 3;
  6344. {$EXTERNALSYM PIDSI_SONGTITLE}
  6345. PIDSI_ALBUM = 4;
  6346. {$EXTERNALSYM PIDSI_ALBUM}
  6347. PIDSI_YEAR = 5;
  6348. {$EXTERNALSYM PIDSI_YEAR}
  6349. PIDSI_COMMENT = 6;
  6350. {$EXTERNALSYM PIDSI_COMMENT}
  6351. PIDSI_TRACK = 7;
  6352. {$EXTERNALSYM PIDSI_TRACK}
  6353. PIDSI_GENRE = 11;
  6354. {$EXTERNALSYM PIDSI_GENRE}
  6355. PIDSI_LYRICS = 12;
  6356. {$EXTERNALSYM PIDSI_LYRICS}
  6357. const
  6358. FMTID_DRM: TGUID = '{AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED}';
  6359. {$EXTERNALSYM FMTID_DRM}
  6360. PIDDRSI_PROTECTED = 2;
  6361. {$EXTERNALSYM PIDDRSI_PROTECTED}
  6362. PIDDRSI_DESCRIPTION = 3;
  6363. {$EXTERNALSYM PIDDRSI_DESCRIPTION}
  6364. PIDDRSI_PLAYCOUNT = 4;
  6365. {$EXTERNALSYM PIDDRSI_PLAYCOUNT}
  6366. PIDDRSI_PLAYSTARTS = 5;
  6367. {$EXTERNALSYM PIDDRSI_PLAYSTARTS}
  6368. PIDDRSI_PLAYEXPIRES = 6;
  6369. {$EXTERNALSYM PIDDRSI_PLAYEXPIRES}
  6370. // FMTID_VideoSummaryInformation property identifiers
  6371. const
  6372. FMTID_Video: TGUID = '{64440491-4c8b-11d1-8b70-080036b11a03}';
  6373. {$EXTERNALSYM FMTID_Video}
  6374. PIDVSI_STREAM_NAME = $00000002; // "StreamName", VT_LPWSTR
  6375. {$EXTERNALSYM PIDVSI_STREAM_NAME}
  6376. PIDVSI_FRAME_WIDTH = $00000003; // "FrameWidth", VT_UI4
  6377. {$EXTERNALSYM PIDVSI_FRAME_WIDTH}
  6378. PIDVSI_FRAME_HEIGHT = $00000004; // "FrameHeight", VT_UI4
  6379. {$EXTERNALSYM PIDVSI_FRAME_HEIGHT}
  6380. PIDVSI_TIMELENGTH = $00000007; // "TimeLength", VT_UI4, milliseconds
  6381. {$EXTERNALSYM PIDVSI_TIMELENGTH}
  6382. PIDVSI_FRAME_COUNT = $00000005; // "FrameCount". VT_UI4
  6383. {$EXTERNALSYM PIDVSI_FRAME_COUNT}
  6384. PIDVSI_FRAME_RATE = $00000006; // "FrameRate", VT_UI4, frames/millisecond
  6385. {$EXTERNALSYM PIDVSI_FRAME_RATE}
  6386. PIDVSI_DATA_RATE = $00000008; // "DataRate", VT_UI4, bytes/second
  6387. {$EXTERNALSYM PIDVSI_DATA_RATE}
  6388. PIDVSI_SAMPLE_SIZE = $00000009; // "SampleSize", VT_UI4
  6389. {$EXTERNALSYM PIDVSI_SAMPLE_SIZE}
  6390. PIDVSI_COMPRESSION = $0000000A; // "Compression", VT_LPWSTR
  6391. {$EXTERNALSYM PIDVSI_COMPRESSION}
  6392. PIDVSI_STREAM_NUMBER = $0000000B; // "StreamNumber", VT_UI2
  6393. {$EXTERNALSYM PIDVSI_STREAM_NUMBER}
  6394. // FMTID_AudioSummaryInformation property identifiers
  6395. const
  6396. FMTID_Audio: TGUID = '{64440490-4c8b-11d1-8b70-080036b11a03}';
  6397. {$EXTERNALSYM FMTID_Audio}
  6398. PIDASI_FORMAT = $00000002; // VT_BSTR
  6399. {$EXTERNALSYM PIDASI_FORMAT}
  6400. PIDASI_TIMELENGTH = $00000003; // VT_UI4, milliseconds
  6401. {$EXTERNALSYM PIDASI_TIMELENGTH}
  6402. PIDASI_AVG_DATA_RATE = $00000004; // VT_UI4, Hz
  6403. {$EXTERNALSYM PIDASI_AVG_DATA_RATE}
  6404. PIDASI_SAMPLE_RATE = $00000005; // VT_UI4, bits
  6405. {$EXTERNALSYM PIDASI_SAMPLE_RATE}
  6406. PIDASI_SAMPLE_SIZE = $00000006; // VT_UI4, bits
  6407. {$EXTERNALSYM PIDASI_SAMPLE_SIZE}
  6408. PIDASI_CHANNEL_COUNT = $00000007; // VT_UI4
  6409. {$EXTERNALSYM PIDASI_CHANNEL_COUNT}
  6410. PIDASI_STREAM_NUMBER = $00000008; // VT_UI2
  6411. {$EXTERNALSYM PIDASI_STREAM_NUMBER}
  6412. PIDASI_STREAM_NAME = $00000009; // VT_LPWSTR
  6413. {$EXTERNALSYM PIDASI_STREAM_NAME}
  6414. PIDASI_COMPRESSION = $0000000A; // VT_LPWSTR
  6415. {$EXTERNALSYM PIDASI_COMPRESSION}
  6416. const
  6417. FMTID_ControlPanel: TGUID = '{305CA226-D286-468e-B848-2B2E8E697B74}';
  6418. {$EXTERNALSYM FMTID_ControlPanel}
  6419. PID_CONTROLPANEL_CATEGORY = 2;
  6420. {$EXTERNALSYM PID_CONTROLPANEL_CATEGORY}
  6421. const
  6422. FMTID_Volume: TGUID = '{9B174B35-40FF-11d2-A27E-00C04FC30871}';
  6423. {$EXTERNALSYM FMTID_Volume}
  6424. PID_VOLUME_FREE = 2;
  6425. {$EXTERNALSYM PID_VOLUME_FREE}
  6426. PID_VOLUME_CAPACITY = 3;
  6427. {$EXTERNALSYM PID_VOLUME_CAPACITY}
  6428. PID_VOLUME_FILESYSTEM = 4;
  6429. {$EXTERNALSYM PID_VOLUME_FILESYSTEM}
  6430. const
  6431. FMTID_Share: TGUID = '{D8C3986F-813B-449c-845D-87B95D674ADE}';
  6432. {$EXTERNALSYM FMTID_Share}
  6433. PID_SHARE_CSC_STATUS = 2;
  6434. {$EXTERNALSYM PID_SHARE_CSC_STATUS}
  6435. const
  6436. FMTID_Link: TGUID = '{B9B4B3FC-2B51-4a42-B5D8-324146AFCF25}';
  6437. {$EXTERNALSYM FMTID_Link}
  6438. PID_LINK_TARGET = 2;
  6439. {$EXTERNALSYM PID_LINK_TARGET}
  6440. const
  6441. FMTID_Query: TGUID = '{49691c90-7e17-101a-a91c-08002b2ecda9}';
  6442. {$EXTERNALSYM FMTID_Query}
  6443. PID_QUERY_RANK = 2;
  6444. {$EXTERNALSYM PID_QUERY_RANK}
  6445. const
  6446. FMTID_SummaryInformation: TGUID = '{f29f85e0-4ff9-1068-ab91-08002b27b3d9}';
  6447. {$EXTERNALSYM FMTID_SummaryInformation}
  6448. FMTID_DocumentSummaryInformation: TGUID = '{d5cdd502-2e9c-101b-9397-08002b2cf9ae}';
  6449. {$EXTERNALSYM FMTID_DocumentSummaryInformation}
  6450. FMTID_MediaFileSummaryInformation: TGUID = '{64440492-4c8b-11d1-8b70-080036b11a03}';
  6451. {$EXTERNALSYM FMTID_MediaFileSummaryInformation}
  6452. FMTID_ImageSummaryInformation: TGUID = '{6444048f-4c8b-11d1-8b70-080036b11a03}';
  6453. {$EXTERNALSYM FMTID_ImageSummaryInformation}
  6454. // imgguids.h line 75
  6455. // Property sets
  6456. const
  6457. FMTID_ImageInformation: TGUID = '{e5836cbe-5eef-4f1d-acde-ae4c43b608ce}';
  6458. {$EXTERNALSYM FMTID_ImageInformation}
  6459. FMTID_JpegAppHeaders: TGUID = '{1c4afdcd-6177-43cf-abc7-5f51af39ee85}';
  6460. {$EXTERNALSYM FMTID_JpegAppHeaders}
  6461. // objbase.h line 390
  6462. const
  6463. STGFMT_STORAGE = 0;
  6464. {$EXTERNALSYM STGFMT_STORAGE}
  6465. STGFMT_NATIVE = 1;
  6466. {$EXTERNALSYM STGFMT_NATIVE}
  6467. STGFMT_FILE = 3;
  6468. {$EXTERNALSYM STGFMT_FILE}
  6469. STGFMT_ANY = 4;
  6470. {$EXTERNALSYM STGFMT_ANY}
  6471. STGFMT_DOCFILE = 5;
  6472. {$EXTERNALSYM STGFMT_DOCFILE}
  6473. // This is a legacy define to allow old component to builds
  6474. STGFMT_DOCUMENT = 0;
  6475. {$EXTERNALSYM STGFMT_DOCUMENT}
  6476. // objbase.h line 913
  6477. type
  6478. tagSTGOPTIONS = record
  6479. usVersion: Word; // Versions 1 and 2 supported
  6480. reserved: Word; // must be 0 for padding
  6481. ulSectorSize: Cardinal; // docfile header sector size (512)
  6482. pwcsTemplateFile: PWideChar; // version 2 or above
  6483. end;
  6484. {$EXTERNALSYM tagSTGOPTIONS}
  6485. STGOPTIONS = tagSTGOPTIONS;
  6486. {$EXTERNALSYM STGOPTIONS}
  6487. PSTGOPTIONS = ^STGOPTIONS;
  6488. {$EXTERNALSYM PSTGOPTIONS}
  6489. function StgCreateStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
  6490. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  6491. riid: PGUID; out stgOpen: IInterface): HResult; stdcall;
  6492. {$EXTERNALSYM StgCreateStorageEx}
  6493. function StgOpenStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
  6494. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  6495. riid: PGUID; out stgOpen: IInterface): HResult; stdcall;
  6496. {$EXTERNALSYM StgOpenStorageEx}
  6497. // propidl.h line 386
  6498. // Reserved global Property IDs
  6499. const
  6500. PID_DICTIONARY = $00000000; // integer count + array of entries
  6501. {$EXTERNALSYM PID_DICTIONARY}
  6502. PID_CODEPAGE = $00000001; // short integer
  6503. {$EXTERNALSYM PID_CODEPAGE}
  6504. PID_FIRST_USABLE = $00000002;
  6505. {$EXTERNALSYM PID_FIRST_USABLE}
  6506. PID_FIRST_NAME_DEFAULT = $00000FFF;
  6507. {$EXTERNALSYM PID_FIRST_NAME_DEFAULT}
  6508. PID_LOCALE = $80000000;
  6509. {$EXTERNALSYM PID_LOCALE}
  6510. PID_MODIFY_TIME = $80000001;
  6511. {$EXTERNALSYM PID_MODIFY_TIME}
  6512. PID_SECURITY = $80000002;
  6513. {$EXTERNALSYM PID_SECURITY}
  6514. PID_BEHAVIOR = $80000003;
  6515. {$EXTERNALSYM PID_BEHAVIOR}
  6516. PID_ILLEGAL = $FFFFFFFF;
  6517. {$EXTERNALSYM PID_ILLEGAL}
  6518. // Range which is read-only to downlevel implementations
  6519. const
  6520. PID_MIN_READONLY = $80000000;
  6521. {$EXTERNALSYM PID_MIN_READONLY}
  6522. PID_MAX_READONLY = $BFFFFFFF;
  6523. {$EXTERNALSYM PID_MAX_READONLY}
  6524. // Property IDs for the DiscardableInformation Property Set
  6525. const
  6526. PIDDI_THUMBNAIL = $00000002; // VT_BLOB
  6527. {$EXTERNALSYM PIDDI_THUMBNAIL}
  6528. // Property IDs for the SummaryInformation Property Set
  6529. const
  6530. PIDSI_TITLE = $00000002; // VT_LPSTR
  6531. {$EXTERNALSYM PIDSI_TITLE}
  6532. PIDSI_SUBJECT = $00000003; // VT_LPSTR
  6533. {$EXTERNALSYM PIDSI_SUBJECT}
  6534. PIDSI_AUTHOR = $00000004; // VT_LPSTR
  6535. {$EXTERNALSYM PIDSI_AUTHOR}
  6536. PIDSI_KEYWORDS = $00000005; // VT_LPSTR
  6537. {$EXTERNALSYM PIDSI_KEYWORDS}
  6538. PIDSI_COMMENTS = $00000006; // VT_LPSTR
  6539. {$EXTERNALSYM PIDSI_COMMENTS}
  6540. PIDSI_TEMPLATE = $00000007; // VT_LPSTR
  6541. {$EXTERNALSYM PIDSI_TEMPLATE}
  6542. PIDSI_LASTAUTHOR = $00000008; // VT_LPSTR
  6543. {$EXTERNALSYM PIDSI_LASTAUTHOR}
  6544. PIDSI_REVNUMBER = $00000009; // VT_LPSTR
  6545. {$EXTERNALSYM PIDSI_REVNUMBER}
  6546. PIDSI_EDITTIME = $0000000A; // VT_FILETIME (UTC)
  6547. {$EXTERNALSYM PIDSI_EDITTIME}
  6548. PIDSI_LASTPRINTED = $0000000B; // VT_FILETIME (UTC)
  6549. {$EXTERNALSYM PIDSI_LASTPRINTED}
  6550. PIDSI_CREATE_DTM = $0000000C; // VT_FILETIME (UTC)
  6551. {$EXTERNALSYM PIDSI_CREATE_DTM}
  6552. PIDSI_LASTSAVE_DTM = $0000000D; // VT_FILETIME (UTC)
  6553. {$EXTERNALSYM PIDSI_LASTSAVE_DTM}
  6554. PIDSI_PAGECOUNT = $0000000E; // VT_I4
  6555. {$EXTERNALSYM PIDSI_PAGECOUNT}
  6556. PIDSI_WORDCOUNT = $0000000F; // VT_I4
  6557. {$EXTERNALSYM PIDSI_WORDCOUNT}
  6558. PIDSI_CHARCOUNT = $00000010; // VT_I4
  6559. {$EXTERNALSYM PIDSI_CHARCOUNT}
  6560. PIDSI_THUMBNAIL = $00000011; // VT_CF
  6561. {$EXTERNALSYM PIDSI_THUMBNAIL}
  6562. PIDSI_APPNAME = $00000012; // VT_LPSTR
  6563. {$EXTERNALSYM PIDSI_APPNAME}
  6564. PIDSI_DOC_SECURITY = $00000013; // VT_I4
  6565. {$EXTERNALSYM PIDSI_DOC_SECURITY}
  6566. // Property IDs for the DocSummaryInformation Property Set
  6567. const
  6568. PIDDSI_CATEGORY = $00000002; // VT_LPSTR
  6569. {$EXTERNALSYM PIDDSI_CATEGORY}
  6570. PIDDSI_PRESFORMAT = $00000003; // VT_LPSTR
  6571. {$EXTERNALSYM PIDDSI_PRESFORMAT}
  6572. PIDDSI_BYTECOUNT = $00000004; // VT_I4
  6573. {$EXTERNALSYM PIDDSI_BYTECOUNT}
  6574. PIDDSI_LINECOUNT = $00000005; // VT_I4
  6575. {$EXTERNALSYM PIDDSI_LINECOUNT}
  6576. PIDDSI_PARCOUNT = $00000006; // VT_I4
  6577. {$EXTERNALSYM PIDDSI_PARCOUNT}
  6578. PIDDSI_SLIDECOUNT = $00000007; // VT_I4
  6579. {$EXTERNALSYM PIDDSI_SLIDECOUNT}
  6580. PIDDSI_NOTECOUNT = $00000008; // VT_I4
  6581. {$EXTERNALSYM PIDDSI_NOTECOUNT}
  6582. PIDDSI_HIDDENCOUNT = $00000009; // VT_I4
  6583. {$EXTERNALSYM PIDDSI_HIDDENCOUNT}
  6584. PIDDSI_MMCLIPCOUNT = $0000000A; // VT_I4
  6585. {$EXTERNALSYM PIDDSI_MMCLIPCOUNT}
  6586. PIDDSI_SCALE = $0000000B; // VT_BOOL
  6587. {$EXTERNALSYM PIDDSI_SCALE}
  6588. PIDDSI_HEADINGPAIR = $0000000C; // VT_VARIANT | VT_VECTOR
  6589. {$EXTERNALSYM PIDDSI_HEADINGPAIR}
  6590. PIDDSI_DOCPARTS = $0000000D; // VT_LPSTR | VT_VECTOR
  6591. {$EXTERNALSYM PIDDSI_DOCPARTS}
  6592. PIDDSI_MANAGER = $0000000E; // VT_LPSTR
  6593. {$EXTERNALSYM PIDDSI_MANAGER}
  6594. PIDDSI_COMPANY = $0000000F; // VT_LPSTR
  6595. {$EXTERNALSYM PIDDSI_COMPANY}
  6596. PIDDSI_LINKSDIRTY = $00000010; // VT_BOOL
  6597. {$EXTERNALSYM PIDDSI_LINKSDIRTY}
  6598. // FMTID_MediaFileSummaryInfo - Property IDs
  6599. const
  6600. PIDMSI_EDITOR = $00000002; // VT_LPWSTR
  6601. {$EXTERNALSYM PIDMSI_EDITOR}
  6602. PIDMSI_SUPPLIER = $00000003; // VT_LPWSTR
  6603. {$EXTERNALSYM PIDMSI_SUPPLIER}
  6604. PIDMSI_SOURCE = $00000004; // VT_LPWSTR
  6605. {$EXTERNALSYM PIDMSI_SOURCE}
  6606. PIDMSI_SEQUENCE_NO = $00000005; // VT_LPWSTR
  6607. {$EXTERNALSYM PIDMSI_SEQUENCE_NO}
  6608. PIDMSI_PROJECT = $00000006; // VT_LPWSTR
  6609. {$EXTERNALSYM PIDMSI_PROJECT}
  6610. PIDMSI_STATUS = $00000007; // VT_UI4
  6611. {$EXTERNALSYM PIDMSI_STATUS}
  6612. PIDMSI_OWNER = $00000008; // VT_LPWSTR
  6613. {$EXTERNALSYM PIDMSI_OWNER}
  6614. PIDMSI_RATING = $00000009; // VT_LPWSTR
  6615. {$EXTERNALSYM PIDMSI_RATING}
  6616. PIDMSI_PRODUCTION = $0000000A; // VT_FILETIME (UTC)
  6617. {$EXTERNALSYM PIDMSI_PRODUCTION}
  6618. PIDMSI_COPYRIGHT = $0000000B; // VT_LPWSTR
  6619. {$EXTERNALSYM PIDMSI_COPYRIGHT}
  6620. function PropVariantClear(var Prop: TPropVariant): HResult; stdcall;
  6621. {$EXTERNALSYM PropVariantClear}
  6622. // NtSecApi.h line 566
  6623. type
  6624. PLSA_UNICODE_STRING = ^LSA_UNICODE_STRING;
  6625. _LSA_UNICODE_STRING = record
  6626. Length: USHORT;
  6627. MaximumLength: USHORT;
  6628. Buffer: {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.LPWSTR;
  6629. end;
  6630. LSA_UNICODE_STRING = _LSA_UNICODE_STRING;
  6631. TLsaUnicodeString = LSA_UNICODE_STRING;
  6632. PLsaUnicodeString = PLSA_UNICODE_STRING;
  6633. PLSA_STRING = ^LSA_STRING;
  6634. _LSA_STRING = record
  6635. Length: USHORT;
  6636. MaximumLength: USHORT;
  6637. Buffer: PANSICHAR;
  6638. end;
  6639. LSA_STRING = _LSA_STRING;
  6640. TLsaString = LSA_STRING;
  6641. PLsaString = PLSA_STRING;
  6642. PLSA_OBJECT_ATTRIBUTES = ^LSA_OBJECT_ATTRIBUTES;
  6643. _LSA_OBJECT_ATTRIBUTES = record
  6644. Length: ULONG;
  6645. RootDirectory: {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.THandle;
  6646. ObjectName: PLSA_UNICODE_STRING;
  6647. Attributes: ULONG;
  6648. SecurityDescriptor: Pointer; // Points to type SECURITY_DESCRIPTOR
  6649. SecurityQualityOfService: Pointer; // Points to type SECURITY_QUALITY_OF_SERVICE
  6650. end;
  6651. LSA_OBJECT_ATTRIBUTES = _LSA_OBJECT_ATTRIBUTES;
  6652. TLsaObjectAttributes = _LSA_OBJECT_ATTRIBUTES;
  6653. PLsaObjectAttributes = PLSA_OBJECT_ATTRIBUTES;
  6654. // NtSecApi.h line 680
  6655. ////////////////////////////////////////////////////////////////////////////
  6656. // //
  6657. // Local Security Policy Administration API datatypes and defines //
  6658. // //
  6659. ////////////////////////////////////////////////////////////////////////////
  6660. //
  6661. // Access types for the Policy object
  6662. //
  6663. const
  6664. POLICY_VIEW_LOCAL_INFORMATION = $00000001;
  6665. {$EXTERNALSYM POLICY_VIEW_LOCAL_INFORMATION}
  6666. POLICY_VIEW_AUDIT_INFORMATION = $00000002;
  6667. {$EXTERNALSYM POLICY_VIEW_AUDIT_INFORMATION}
  6668. POLICY_GET_PRIVATE_INFORMATION = $00000004;
  6669. {$EXTERNALSYM POLICY_GET_PRIVATE_INFORMATION}
  6670. POLICY_TRUST_ADMIN = $00000008;
  6671. {$EXTERNALSYM POLICY_TRUST_ADMIN}
  6672. POLICY_CREATE_ACCOUNT = $00000010;
  6673. {$EXTERNALSYM POLICY_CREATE_ACCOUNT}
  6674. POLICY_CREATE_SECRET = $00000020;
  6675. {$EXTERNALSYM POLICY_CREATE_SECRET}
  6676. POLICY_CREATE_PRIVILEGE = $00000040;
  6677. {$EXTERNALSYM POLICY_CREATE_PRIVILEGE}
  6678. POLICY_SET_DEFAULT_QUOTA_LIMITS = $00000080;
  6679. {$EXTERNALSYM POLICY_SET_DEFAULT_QUOTA_LIMITS}
  6680. POLICY_SET_AUDIT_REQUIREMENTS = $00000100;
  6681. {$EXTERNALSYM POLICY_SET_AUDIT_REQUIREMENTS}
  6682. POLICY_AUDIT_LOG_ADMIN = $00000200;
  6683. {$EXTERNALSYM POLICY_AUDIT_LOG_ADMIN}
  6684. POLICY_SERVER_ADMIN = $00000400;
  6685. {$EXTERNALSYM POLICY_SERVER_ADMIN}
  6686. POLICY_LOOKUP_NAMES = $00000800;
  6687. {$EXTERNALSYM POLICY_LOOKUP_NAMES}
  6688. POLICY_NOTIFICATION = $00001000;
  6689. {$EXTERNALSYM POLICY_NOTIFICATION}
  6690. POLICY_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or
  6691. POLICY_VIEW_LOCAL_INFORMATION or
  6692. POLICY_VIEW_AUDIT_INFORMATION or
  6693. POLICY_GET_PRIVATE_INFORMATION or
  6694. POLICY_TRUST_ADMIN or
  6695. POLICY_CREATE_ACCOUNT or
  6696. POLICY_CREATE_SECRET or
  6697. POLICY_CREATE_PRIVILEGE or
  6698. POLICY_SET_DEFAULT_QUOTA_LIMITS or
  6699. POLICY_SET_AUDIT_REQUIREMENTS or
  6700. POLICY_AUDIT_LOG_ADMIN or
  6701. POLICY_SERVER_ADMIN or
  6702. POLICY_LOOKUP_NAMES);
  6703. {$EXTERNALSYM POLICY_ALL_ACCESS}
  6704. POLICY_READ = (STANDARD_RIGHTS_READ or
  6705. POLICY_VIEW_AUDIT_INFORMATION or
  6706. POLICY_GET_PRIVATE_INFORMATION);
  6707. {$EXTERNALSYM POLICY_READ}
  6708. POLICY_WRITE = (STANDARD_RIGHTS_WRITE or
  6709. POLICY_TRUST_ADMIN or
  6710. POLICY_CREATE_ACCOUNT or
  6711. POLICY_CREATE_SECRET or
  6712. POLICY_CREATE_PRIVILEGE or
  6713. POLICY_SET_DEFAULT_QUOTA_LIMITS or
  6714. POLICY_SET_AUDIT_REQUIREMENTS or
  6715. POLICY_AUDIT_LOG_ADMIN or
  6716. POLICY_SERVER_ADMIN);
  6717. {$EXTERNALSYM POLICY_WRITE}
  6718. POLICY_EXECUTE = (STANDARD_RIGHTS_EXECUTE or
  6719. POLICY_VIEW_LOCAL_INFORMATION or
  6720. POLICY_LOOKUP_NAMES);
  6721. {$EXTERNALSYM POLICY_EXECUTE}
  6722. // NtSecApi.h line 914
  6723. type
  6724. _POLICY_INFORMATION_CLASS = (
  6725. picFill0,
  6726. PolicyAuditLogInformation,
  6727. PolicyAuditEventsInformation,
  6728. PolicyPrimaryDomainInformation,
  6729. PolicyPdAccountInformation,
  6730. PolicyAccountDomainInformation,
  6731. PolicyLsaServerRoleInformation,
  6732. PolicyReplicaSourceInformation,
  6733. PolicyDefaultQuotaInformation,
  6734. PolicyModificationInformation,
  6735. PolicyAuditFullSetInformation,
  6736. PolicyAuditFullQueryInformation,
  6737. PolicyDnsDomainInformation,
  6738. PolicyDnsDomainInformationInt);
  6739. {$EXTERNALSYM _POLICY_INFORMATION_CLASS}
  6740. POLICY_INFORMATION_CLASS = _POLICY_INFORMATION_CLASS;
  6741. {$EXTERNALSYM POLICY_INFORMATION_CLASS}
  6742. PPOLICY_INFORMATION_CLASS = ^POLICY_INFORMATION_CLASS;
  6743. {$EXTERNALSYM PPOLICY_INFORMATION_CLASS}
  6744. TPolicyInformationClass = POLICY_INFORMATION_CLASS;
  6745. {$EXTERNALSYM TPolicyInformationClass}
  6746. PPolicyInformationClass = PPOLICY_INFORMATION_CLASS;
  6747. {$EXTERNALSYM PPolicyInformationClass}
  6748. // NtSecApi.h line 1031
  6749. //
  6750. // The following structure corresponds to the PolicyAccountDomainInformation
  6751. // information class.
  6752. //
  6753. type
  6754. PPOLICY_ACCOUNT_DOMAIN_INFO = ^POLICY_ACCOUNT_DOMAIN_INFO;
  6755. _POLICY_ACCOUNT_DOMAIN_INFO = record
  6756. DomainName: LSA_UNICODE_STRING;
  6757. DomainSid: {$IFDEF HAS_UNITSCOPE}Winapi.{$ENDIF}Windows.PSID;
  6758. end;
  6759. POLICY_ACCOUNT_DOMAIN_INFO = _POLICY_ACCOUNT_DOMAIN_INFO;
  6760. TPolicyAccountDomainInfo = POLICY_ACCOUNT_DOMAIN_INFO;
  6761. PPolicyAccountDomainInfo = PPOLICY_ACCOUNT_DOMAIN_INFO;
  6762. // NtSecApi.h line 1298
  6763. type
  6764. LSA_HANDLE = Pointer;
  6765. PLSA_HANDLE = ^LSA_HANDLE;
  6766. TLsaHandle = LSA_HANDLE;
  6767. // NtSecApi.h line 1714
  6768. type
  6769. NTSTATUS = DWORD;
  6770. function LsaOpenPolicy(SystemName: PLSA_UNICODE_STRING;
  6771. var ObjectAttributes: LSA_OBJECT_ATTRIBUTES; DesiredAccess: ACCESS_MASK;
  6772. var PolicyHandle: LSA_HANDLE): NTSTATUS; stdcall;
  6773. function LsaQueryInformationPolicy(PolicyHandle: LSA_HANDLE;
  6774. InformationClass: POLICY_INFORMATION_CLASS; var Buffer: Pointer): NTSTATUS; stdcall;
  6775. function LsaFreeMemory(Buffer: Pointer): NTSTATUS; stdcall;
  6776. function LsaFreeReturnBuffer(Buffer: Pointer): NTSTATUS; stdcall;
  6777. function LsaClose(ObjectHandle: LSA_HANDLE): NTSTATUS; stdcall;
  6778. function LsaNtStatusToWinError(Status: NTSTATUS): ULONG; stdcall;
  6779. // Snapshot function
  6780. function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; stdcall;
  6781. {$EXTERNALSYM CreateToolhelp32Snapshot}
  6782. //
  6783. // The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or
  6784. // TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current
  6785. // process.
  6786. //
  6787. // NOTE that all of the snapshots are global except for the heap and module
  6788. // lists which are process specific. To enumerate the heap or module
  6789. // state for all WIN32 processes call with TH32CS_SNAPALL and the
  6790. // current process. Then for each process in the TH32CS_SNAPPROCESS
  6791. // list that isn't the current process, do a call with just
  6792. // TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.
  6793. //
  6794. // dwFlags
  6795. //
  6796. const
  6797. TH32CS_SNAPHEAPLIST = $00000001;
  6798. {$EXTERNALSYM TH32CS_SNAPHEAPLIST}
  6799. TH32CS_SNAPPROCESS = $00000002;
  6800. {$EXTERNALSYM TH32CS_SNAPPROCESS}
  6801. TH32CS_SNAPTHREAD = $00000004;
  6802. {$EXTERNALSYM TH32CS_SNAPTHREAD}
  6803. TH32CS_SNAPMODULE = $00000008;
  6804. {$EXTERNALSYM TH32CS_SNAPMODULE}
  6805. TH32CS_SNAPMODULE32 = $00000010;
  6806. {$EXTERNALSYM TH32CS_SNAPMODULE32}
  6807. TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or
  6808. TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
  6809. {$EXTERNALSYM TH32CS_SNAPALL}
  6810. TH32CS_INHERIT = $80000000;
  6811. {$EXTERNALSYM TH32CS_INHERIT}
  6812. //
  6813. // Use CloseHandle to destroy the snapshot
  6814. //
  6815. // Thread walking
  6816. type
  6817. PTHREADENTRY32 = ^THREADENTRY32;
  6818. {$EXTERNALSYM PTHREADENTRY32}
  6819. tagTHREADENTRY32 = record
  6820. dwSize: DWORD;
  6821. cntUsage: DWORD;
  6822. th32ThreadID: DWORD; // this thread
  6823. th32OwnerProcessID: DWORD; // Process this thread is associated with
  6824. tpBasePri: Longint;
  6825. tpDeltaPri: Longint;
  6826. dwFlags: DWORD;
  6827. end;
  6828. {$EXTERNALSYM tagTHREADENTRY32}
  6829. THREADENTRY32 = tagTHREADENTRY32;
  6830. {$EXTERNALSYM THREADENTRY32}
  6831. LPTHREADENTRY32 = ^THREADENTRY32;
  6832. {$EXTERNALSYM LPTHREADENTRY32}
  6833. TThreadEntry32 = THREADENTRY32;
  6834. {$EXTERNALSYM TThreadEntry32}
  6835. function Thread32First(hSnapshot: THandle; var lpte: THREADENTRY32): BOOL; stdcall;
  6836. {$EXTERNALSYM Thread32First}
  6837. function Thread32Next(hSnapshot: THandle; var lpte: THREADENTRY32): BOOL; stdcall;
  6838. {$EXTERNALSYM Thread32Next}
  6839. type
  6840. _THREAD_INFORMATION_CLASS = type Cardinal;
  6841. {$EXTERNALSYM _THREAD_INFORMATION_CLASS}
  6842. THREAD_INFORMATION_CLASS = _THREAD_INFORMATION_CLASS;
  6843. {$EXTERNALSYM THREAD_INFORMATION_CLASS}
  6844. PTHREAD_INFORMATION_CLASS = ^_THREAD_INFORMATION_CLASS;
  6845. {$EXTERNALSYM PTHREAD_INFORMATION_CLASS}
  6846. const
  6847. ThreadBasicInformation = 0;
  6848. {$EXTERNALSYM ThreadBasicInformation}
  6849. ThreadTimes = 1;
  6850. {$EXTERNALSYM ThreadTimes}
  6851. ThreadPriority = 2;
  6852. {$EXTERNALSYM ThreadPriority}
  6853. ThreadBasePriority = 3;
  6854. {$EXTERNALSYM ThreadBasePriority}
  6855. ThreadAffinityMask = 4;
  6856. {$EXTERNALSYM ThreadAffinityMask}
  6857. ThreadImpersonationToken = 5;
  6858. {$EXTERNALSYM ThreadImpersonationToken}
  6859. ThreadDescriptorTableEntry = 6;
  6860. {$EXTERNALSYM ThreadDescriptorTableEntry}
  6861. ThreadEnableAlignmentFaultFixup = 7;
  6862. {$EXTERNALSYM ThreadEnableAlignmentFaultFixup}
  6863. ThreadEventPair = 8;
  6864. {$EXTERNALSYM ThreadEventPair}
  6865. ThreadQuerySetWin32StartAddress = 9;
  6866. {$EXTERNALSYM ThreadQuerySetWin32StartAddress}
  6867. ThreadZeroTlsCell = 10;
  6868. {$EXTERNALSYM ThreadZeroTlsCell}
  6869. ThreadPerformanceCount = 11;
  6870. {$EXTERNALSYM ThreadPerformanceCount}
  6871. ThreadAmILastThread = 12;
  6872. {$EXTERNALSYM ThreadAmILastThread}
  6873. ThreadIdealProcessor = 13;
  6874. {$EXTERNALSYM ThreadIdealProcessor}
  6875. ThreadPriorityBoost = 14;
  6876. {$EXTERNALSYM ThreadPriorityBoost}
  6877. ThreadSetTlsArrayAddress = 15;
  6878. {$EXTERNALSYM ThreadSetTlsArrayAddress}
  6879. ThreadIsIoPending = 16;
  6880. {$EXTERNALSYM ThreadIsIoPending}
  6881. ThreadHideFromDebugger = 17;
  6882. {$EXTERNALSYM ThreadHideFromDebugger}
  6883. type
  6884. _CLIENT_ID = record
  6885. UniqueProcess: THandle;
  6886. UniqueThread: THandle;
  6887. end;
  6888. {$EXTERNALSYM _CLIENT_ID}
  6889. CLIENT_ID = _CLIENT_ID;
  6890. {$EXTERNALSYM CLIENT_ID}
  6891. PCLIENT_ID = ^CLIENT_ID;
  6892. {$EXTERNALSYM PCLIENT_ID}
  6893. KAFFINITY = ULONG;
  6894. {$EXTERNALSYM KAFFINITY}
  6895. KPRIORITY = LongInt;
  6896. {$EXTERNALSYM KPRIORITY}
  6897. _THREAD_BASIC_INFORMATION = record
  6898. ExitStatus: NTSTATUS;
  6899. TebBaseAddress: Pointer;
  6900. ClientId: CLIENT_ID;
  6901. AffinityMask: KAFFINITY;
  6902. Priority: KPRIORITY;
  6903. BasePriority: KPRIORITY;
  6904. end;
  6905. {$EXTERNALSYM _THREAD_BASIC_INFORMATION}
  6906. THREAD_BASIC_INFORMATION = _THREAD_BASIC_INFORMATION;
  6907. {$EXTERNALSYM THREAD_BASIC_INFORMATION}
  6908. PTHREAD_BASIC_INFORMATION = ^_THREAD_BASIC_INFORMATION;
  6909. {$EXTERNALSYM PTHREAD_BASIC_INFORMATION}
  6910. function NtQueryInformationThread(ThreadHandle: THandle; ThreadInformationClass: THREAD_INFORMATION_CLASS;
  6911. ThreadInformation: Pointer; ThreadInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall;
  6912. {$EXTERNALSYM NtQueryInformationThread}
  6913. //DOM-IGNORE-END
  6914. const
  6915. RtdlSetNamedSecurityInfoW: function(pObjectName: LPWSTR; ObjectType: SE_OBJECT_TYPE;
  6916. SecurityInfo: SECURITY_INFORMATION; psidOwner, psidGroup: PSID;
  6917. pDacl, pSacl: PACL): DWORD stdcall = SetNamedSecurityInfoW;
  6918. RtdlSetWaitableTimer: function(hTimer: THandle; var lpDueTime: TLargeInteger;
  6919. lPeriod: Longint; pfnCompletionRoutine: TFNTimerAPCRoutine;
  6920. lpArgToCompletionRoutine: Pointer; fResume: BOOL): BOOL stdcall = SetWaitableTimer;
  6921. RtdlNetUserAdd: function(servername: LPCWSTR; level: DWORD;
  6922. buf: PByte; parm_err: PDWord): NET_API_STATUS stdcall = NetUserAdd;
  6923. RtdlNetUserDel: function(servername: LPCWSTR;
  6924. username: LPCWSTR): NET_API_STATUS stdcall = NetUserDel;
  6925. RtdlNetGroupAdd: function(servername: LPCWSTR; level: DWORD; buf: PByte;
  6926. parm_err: PDWord): NET_API_STATUS stdcall = NetGroupAdd;
  6927. RtdlNetGroupEnum: function(servername: LPCWSTR; level: DWORD;
  6928. out bufptr: PByte; prefmaxlen: DWORD; out entriesread, totalentries: DWORD;
  6929. resume_handle: PDWORD_PTR): NET_API_STATUS stdcall = NetGroupEnum;
  6930. RtdlNetGroupDel: function(servername: LPCWSTR;
  6931. groupname: LPCWSTR): NET_API_STATUS stdcall = NetGroupDel;
  6932. RtdlNetLocalGroupAdd: function(servername: LPCWSTR; level: DWORD;
  6933. buf: PByte; parm_err: PDWord): NET_API_STATUS stdcall = NetLocalGroupAdd;
  6934. RtdlNetLocalGroupEnum: function(servername: LPCWSTR; level: DWORD;
  6935. out bufptr: PByte; prefmaxlen: DWORD; out entriesread, totalentries: DWORD;
  6936. resumehandle: PDWORD_PTR): NET_API_STATUS stdcall = NetLocalGroupEnum;
  6937. RtdlNetLocalGroupDel: function(servername: LPCWSTR;
  6938. groupname: LPCWSTR): NET_API_STATUS stdcall = NetLocalGroupDel;
  6939. RtdlNetLocalGroupAddMembers: function(servername: LPCWSTR; groupname: LPCWSTR;
  6940. level: DWORD; buf: PByte;
  6941. totalentries: DWORD): NET_API_STATUS stdcall = NetLocalGroupAddMembers;
  6942. RtdlNetApiBufferFree: function(Buffer: Pointer): NET_API_STATUS stdcall = NetApiBufferFree;
  6943. RtdlGetCalendarInfoA: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  6944. lpCalData: PAnsiChar; cchData: Integer;
  6945. lpValue: PDWORD): Integer stdcall = GetCalendarInfoA;
  6946. RtdlGetCalendarInfoW: function(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  6947. lpCalData: PWideChar; cchData: Integer;
  6948. lpValue: PDWORD): Integer stdcall = GetCalendarInfoW;
  6949. RtdlEnumCalendarInfoExW: function(lpCalInfoEnumProc: TCalInfoEnumProcExW;
  6950. Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL stdcall = EnumCalendarInfoExW;
  6951. RtdlGetVolumeNameForVolumeMountPointW: function(lpszVolumeMountPoint: LPCWSTR;
  6952. lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL stdcall = GetVolumeNameForVolumeMountPointW;
  6953. RtdlSetVolumeMountPointW: function(lpszVolumeMountPoint: LPCWSTR;
  6954. lpszVolumeName: LPCWSTR): BOOL stdcall = SetVolumeMountPointW;
  6955. RtdlDeleteVolumeMountPointW: function(lpszVolumeMountPoint: LPCWSTR): BOOL
  6956. stdcall = DeleteVolumeMountPointW;
  6957. RtdlNetBios: function(P: PNCB): UCHAR stdcall = NetBios;
  6958. {$IFDEF UNITVERSIONING}
  6959. const
  6960. UnitVersioning: TUnitVersionInfo = (
  6961. RCSfile: '$URL$';
  6962. Revision: '$Revision$';
  6963. Date: '$Date$';
  6964. LogPath: 'JCL\source\windows'
  6965. );
  6966. {$ENDIF UNITVERSIONING}
  6967. implementation
  6968. uses
  6969. JclResources;
  6970. procedure GetProcedureAddress(var P: Pointer; const ModuleName, ProcName: string);
  6971. var
  6972. ModuleHandle: HMODULE;
  6973. begin
  6974. if not Assigned(P) then
  6975. begin
  6976. ModuleHandle := GetModuleHandle(PChar(ModuleName));
  6977. if ModuleHandle = 0 then
  6978. begin
  6979. ModuleHandle := SafeLoadLibrary(PChar(ModuleName));
  6980. if ModuleHandle = 0 then
  6981. raise EJclError.CreateResFmt(@RsELibraryNotFound, [ModuleName]);
  6982. end;
  6983. P := GetProcAddress(ModuleHandle, PChar(ProcName));
  6984. if not Assigned(P) then
  6985. raise EJclError.CreateResFmt(@RsEFunctionNotFound, [ModuleName, ProcName]);
  6986. end;
  6987. end;
  6988. //== { EJclWin32Error } ======================================================
  6989. constructor EJclWin32Error.Create(const Msg: string);
  6990. begin
  6991. FLastError := GetLastError;
  6992. FLastErrorMsg := SysErrorMessage(FLastError);
  6993. inherited CreateResFmt(@RsWin32Error, [FLastErrorMsg, FLastError, NativeLineBreak, Msg]);
  6994. end;
  6995. constructor EJclWin32Error.CreateFmt(const Msg: string; const Args: array of const);
  6996. begin
  6997. FLastError := GetLastError;
  6998. FLastErrorMsg := SysErrorMessage(FLastError);
  6999. inherited CreateResFmt(@RsWin32Error, [FLastErrorMsg, FLastError, NativeLineBreak, Format(Msg, Args)]);
  7000. end;
  7001. constructor EJclWin32Error.CreateRes(Ident: Integer);
  7002. begin
  7003. FLastError := GetLastError;
  7004. FLastErrorMsg := SysErrorMessage(FLastError);
  7005. inherited CreateResFmt(@RsWin32Error, [FLastErrorMsg, FLastError, NativeLineBreak, LoadStr(Ident)]);
  7006. end;
  7007. constructor EJclWin32Error.CreateRes(ResStringRec: PResStringRec);
  7008. begin
  7009. FLastError := GetLastError;
  7010. FLastErrorMsg := SysErrorMessage(FLastError);
  7011. inherited CreateResFmt(@RsWin32Error, [FLastErrorMsg, FLastError, NativeLineBreak, LoadResString(ResStringRec)]);
  7012. end;
  7013. const
  7014. aclapilib = 'advapi32.dll';
  7015. type
  7016. TSetNamedSecurityInfoW = function (pObjectName: LPWSTR; ObjectType: SE_OBJECT_TYPE;
  7017. SecurityInfo: SECURITY_INFORMATION; psidOwner, psidGroup: PSID;
  7018. pDacl, pSacl: PACL): DWORD; stdcall;
  7019. var
  7020. _SetNamedSecurityInfoW: TSetNamedSecurityInfoW = nil;
  7021. function SetNamedSecurityInfoW(pObjectName: LPWSTR; ObjectType: SE_OBJECT_TYPE;
  7022. SecurityInfo: SECURITY_INFORMATION; psidOwner, psidGroup: PSID;
  7023. pDacl, pSacl: PACL): DWORD;
  7024. begin
  7025. GetProcedureAddress(Pointer(@_SetNamedSecurityInfoW), aclapilib, 'SetNamedSecurityInfoW');
  7026. Result := _SetNamedSecurityInfoW(pObjectName, ObjectType, SecurityInfo, psidOwner, psidGroup, pDacl, pSacl);
  7027. end;
  7028. const
  7029. ImageHlpLib = 'imagehlp.dll';
  7030. type
  7031. TReBaseImage = function (CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  7032. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  7033. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr;
  7034. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr; TimeStamp: ULONG): BOOL; stdcall;
  7035. var
  7036. _ReBaseImage: TReBaseImage = nil;
  7037. function ReBaseImage(CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  7038. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  7039. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr;
  7040. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr; TimeStamp: ULONG): BOOL;
  7041. begin
  7042. GetProcedureAddress(Pointer(@_ReBaseImage), ImageHlpLib, 'ReBaseImage');
  7043. Result := _ReBaseImage(CurrentImageName, SymbolPath, fReBase, fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize, OldImageBase, NewImageSize, NewImageBase, TimeStamp);
  7044. end;
  7045. type
  7046. TReBaseImage64 = function (CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  7047. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  7048. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr64;
  7049. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr64; TimeStamp: ULONG): BOOL; stdcall;
  7050. var
  7051. _ReBaseImage64: TReBaseImage64 = nil;
  7052. function ReBaseImage64(CurrentImageName: PAnsiChar; SymbolPath: PAnsiChar; fReBase: BOOL;
  7053. fRebaseSysfileOk: BOOL; fGoingDown: BOOL; CheckImageSize: ULONG;
  7054. var OldImageSize: TJclAddr32; var OldImageBase: TJclAddr64;
  7055. var NewImageSize: TJclAddr32; var NewImageBase: TJclAddr64; TimeStamp: ULONG): BOOL;
  7056. begin
  7057. GetProcedureAddress(Pointer(@_ReBaseImage64), ImageHlpLib, 'ReBaseImage64');
  7058. Result := _ReBaseImage64(CurrentImageName, SymbolPath, fReBase, fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize, OldImageBase, NewImageSize, NewImageBase, TimeStamp);
  7059. end;
  7060. type
  7061. TCheckSumMappedFile = function (BaseAddress: Pointer; FileLength: DWORD;
  7062. out HeaderSum, CheckSum: DWORD): PImageNtHeaders; stdcall;
  7063. var
  7064. _CheckSumMappedFile: TCheckSumMappedFile = nil;
  7065. function CheckSumMappedFile(BaseAddress: Pointer; FileLength: DWORD;
  7066. out HeaderSum, CheckSum: DWORD): PImageNtHeaders;
  7067. begin
  7068. GetProcedureAddress(Pointer(@_CheckSumMappedFile), ImageHlpLib, 'CheckSumMappedFile');
  7069. Result := _CheckSumMappedFile(BaseAddress, FileLength, HeaderSum, CheckSum);
  7070. end;
  7071. type
  7072. TGetImageUnusedHeaderBytes = function (const LoadedImage: LOADED_IMAGE;
  7073. var SizeUnusedHeaderBytes: DWORD): DWORD; stdcall;
  7074. var
  7075. _GetImageUnusedHeaderBytes: TGetImageUnusedHeaderBytes = nil;
  7076. function GetImageUnusedHeaderBytes(const LoadedImage: LOADED_IMAGE;
  7077. var SizeUnusedHeaderBytes: DWORD): DWORD;
  7078. begin
  7079. GetProcedureAddress(Pointer(@_GetImageUnusedHeaderBytes), ImageHlpLib, 'GetImageUnusedHeaderBytes');
  7080. Result := _GetImageUnusedHeaderBytes(LoadedImage, SizeUnusedHeaderBytes);
  7081. end;
  7082. type
  7083. TMapAndLoad = function (ImageName, DllPath: PAnsiChar; var LoadedImage: LOADED_IMAGE;
  7084. DotDll: BOOL; ReadOnly: BOOL): BOOL; stdcall;
  7085. var
  7086. _MapAndLoad: TMapAndLoad = nil;
  7087. function MapAndLoad(ImageName, DllPath: PAnsiChar; var LoadedImage: LOADED_IMAGE;
  7088. DotDll: BOOL; ReadOnly: BOOL): BOOL;
  7089. begin
  7090. GetProcedureAddress(Pointer(@_MapAndLoad), ImageHlpLib, 'MapAndLoad');
  7091. Result := _MapAndLoad(ImageName, DllPath, LoadedImage, DotDll, ReadOnly);
  7092. end;
  7093. type
  7094. TUnMapAndLoad = function (const LoadedImage: LOADED_IMAGE): BOOL; stdcall;
  7095. var
  7096. _UnMapAndLoad: TUnMapAndLoad = nil;
  7097. function UnMapAndLoad(const LoadedImage: LOADED_IMAGE): BOOL;
  7098. begin
  7099. GetProcedureAddress(Pointer(@_UnMapAndLoad), ImageHlpLib, 'UnMapAndLoad');
  7100. Result := _UnMapAndLoad(LoadedImage);
  7101. end;
  7102. type
  7103. TTouchFileTimes = function (const FileHandle: THandle; const pSystemTime: TSystemTime): BOOL; stdcall;
  7104. var
  7105. _TouchFileTimes: TTouchFileTimes = nil;
  7106. function TouchFileTimes(const FileHandle: THandle; const pSystemTime: TSystemTime): BOOL;
  7107. begin
  7108. GetProcedureAddress(Pointer(@_TouchFileTimes), ImageHlpLib, 'TouchFileTimes');
  7109. Result := _TouchFileTimes(FileHandle, pSystemTime);
  7110. end;
  7111. type
  7112. TImageDirectoryEntryToData = function (Base: Pointer; MappedAsImage: ByteBool;
  7113. DirectoryEntry: USHORT; var Size: ULONG): Pointer; stdcall;
  7114. var
  7115. _ImageDirectoryEntryToData: TImageDirectoryEntryToData = nil;
  7116. function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
  7117. DirectoryEntry: USHORT; var Size: ULONG): Pointer;
  7118. begin
  7119. GetProcedureAddress(Pointer(@_ImageDirectoryEntryToData), ImageHlpLib, 'ImageDirectoryEntryToData');
  7120. Result := _ImageDirectoryEntryToData(Base, MappedAsImage, DirectoryEntry, Size);
  7121. end;
  7122. type
  7123. TImageRvaToSection = function (NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG): PImageSectionHeader; stdcall;
  7124. var
  7125. _ImageRvaToSection: TImageRvaToSection = nil;
  7126. function ImageRvaToSection(NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG): PImageSectionHeader;
  7127. begin
  7128. GetProcedureAddress(Pointer(@_ImageRvaToSection), ImageHlpLib, 'ImageRvaToSection');
  7129. Result := _ImageRvaToSection(NtHeaders, Base, Rva);
  7130. end;
  7131. type
  7132. TImageRvaToVa = function (NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG;
  7133. LastRvaSection: PPImageSectionHeader): Pointer; stdcall;
  7134. var
  7135. _ImageRvaToVa: TImageRvaToVa = nil;
  7136. function ImageRvaToVa(NtHeaders: PImageNtHeaders; Base: Pointer; Rva: ULONG;
  7137. LastRvaSection: PPImageSectionHeader): Pointer;
  7138. begin
  7139. GetProcedureAddress(Pointer(@_ImageRvaToVa), ImageHlpLib, 'ImageRvaToVa');
  7140. Result := _ImageRvaToVa(NtHeaders, Base, Rva, LastRvaSection);
  7141. end;
  7142. type
  7143. TCancelIo = function (hFile: THandle): BOOL; stdcall;
  7144. var
  7145. _CancelIo: TCancelIo = nil;
  7146. function CancelIo(hFile: THandle): BOOL;
  7147. begin
  7148. GetProcedureAddress(Pointer(@_CancelIo), kernel32, 'CancelIo');
  7149. Result := _CancelIo(hFile);
  7150. end;
  7151. type
  7152. TNetUserAdd = function (servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7153. var
  7154. _NetUserAdd: TNetUserAdd = nil;
  7155. function NetUserAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7156. begin
  7157. GetProcedureAddress(Pointer(@_NetUserAdd), netapi32, 'NetUserAdd');
  7158. Result := _NetUserAdd(servername, level, buf, parm_err);
  7159. end;
  7160. type
  7161. TNetUserEnum = function (servername: LPCWSTR; level, filter: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS; stdcall;
  7162. var
  7163. _NetUserEnum: TNetUserEnum = nil;
  7164. function NetUserEnum(servername: LPCWSTR; level, filter: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries, resume_handle: LPDWORD): NET_API_STATUS;
  7165. begin
  7166. GetProcedureAddress(Pointer(@_NetUserEnum), netapi32, 'NetUserEnum');
  7167. Result := _NetUserEnum(servername, level, filter, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
  7168. end;
  7169. type
  7170. TNetUserGetInfo = function (servername, username: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  7171. var
  7172. _NetUserGetInfo: TNetUserGetInfo = nil;
  7173. function NetUserGetInfo(servername, username: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS;
  7174. begin
  7175. GetProcedureAddress(Pointer(@_NetUserGetInfo), netapi32, 'NetUserGetInfo');
  7176. Result := _NetUserGetInfo(servername, username, level, bufptr);
  7177. end;
  7178. type
  7179. TNetUserSetInfo = function (servername, username: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7180. var
  7181. _NetUserSetInfo: TNetUserSetInfo = nil;
  7182. function NetUserSetInfo(servername, username: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7183. begin
  7184. GetProcedureAddress(Pointer(@_NetUserSetInfo), netapi32, 'NetUserSetInfo');
  7185. Result := _NetUserSetInfo(servername, username, level, buf, parm_err);
  7186. end;
  7187. type
  7188. TNetUserDel = function (servername: LPCWSTR; username: LPCWSTR): NET_API_STATUS; stdcall;
  7189. var
  7190. _NetUserDel: TNetUserDel = nil;
  7191. function NetUserDel(servername: LPCWSTR; username: LPCWSTR): NET_API_STATUS;
  7192. begin
  7193. GetProcedureAddress(Pointer(@_NetUserDel), netapi32, 'NetUserDel');
  7194. Result := _NetUserDel(servername, username);
  7195. end;
  7196. type
  7197. TNetUserGetGroups = function (servername, username: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS; stdcall;
  7198. var
  7199. _NetUserGetGroups: TNetUserGetGroups = nil;
  7200. function NetUserGetGroups(servername, username: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS;
  7201. begin
  7202. GetProcedureAddress(Pointer(@_NetUserGetGroups), netapi32, 'NetUserGetGroups');
  7203. Result := _NetUserGetGroups(servername, username, level, bufptr, prefmaxlen, entriesread, totalentries);
  7204. end;
  7205. type
  7206. TNetUserSetGroups = function (servername, username: LPCWSTR; level: DWORD; buf: PByte; num_entries: DWORD): NET_API_STATUS; stdcall;
  7207. var
  7208. _NetUserSetGroups: TNetUserSetGroups = nil;
  7209. function NetUserSetGroups(servername, username: LPCWSTR; level: DWORD; buf: PByte; num_entries: DWORD): NET_API_STATUS;
  7210. begin
  7211. GetProcedureAddress(Pointer(@_NetUserSetGroups), netapi32, 'NetUserSetGroups');
  7212. Result := _NetUserSetGroups(servername, username, level, buf, num_entries);
  7213. end;
  7214. type
  7215. TNetUserGetLocalGroups = function (servername, username: LPCWSTR; level, flags: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS; stdcall;
  7216. var
  7217. _NetUserGetLocalGroups: TNetUserGetLocalGroups = nil;
  7218. function NetUserGetLocalGroups(servername, username: LPCWSTR; level, flags: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD): NET_API_STATUS;
  7219. begin
  7220. GetProcedureAddress(Pointer(@_NetUserGetLocalGroups), netapi32, 'NetUserGetLocalGroups');
  7221. Result := _NetUserGetLocalGroups(servername, username, level, flags, bufptr, prefmaxlen, entriesread, totalentries);
  7222. end;
  7223. type
  7224. TNetUserModalsGet = function (servername: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  7225. var
  7226. _NetUserModalsGet: TNetUserModalsGet = nil;
  7227. function NetUserModalsGet(servername: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS;
  7228. begin
  7229. GetProcedureAddress(Pointer(@_NetUserModalsGet), netapi32, 'NetUserModalsGet');
  7230. Result := _NetUserModalsGet(servername, level, bufptr);
  7231. end;
  7232. type
  7233. TNetUserModalsSet = function (servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7234. var
  7235. _NetUserModalsSet: TNetUserModalsSet = nil;
  7236. function NetUserModalsSet(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7237. begin
  7238. GetProcedureAddress(Pointer(@_NetUserModalsSet), netapi32, 'NetUserModalsSet');
  7239. Result := _NetUserModalsSet(servername, level, buf, parm_err);
  7240. end;
  7241. type
  7242. TNetUserChangePassword = function (domainname, username, oldpassword, newpassword: LPCWSTR): NET_API_STATUS; stdcall;
  7243. var
  7244. _NetUserChangePassword: TNetUserChangePassword = nil;
  7245. function NetUserChangePassword(domainname, username, oldpassword, newpassword: LPCWSTR): NET_API_STATUS;
  7246. begin
  7247. GetProcedureAddress(Pointer(@_NetUserChangePassword), netapi32, 'NetUserChangePassword');
  7248. Result := _NetUserChangePassword(domainname, username, oldpassword, newpassword);
  7249. end;
  7250. type
  7251. TNetGroupAdd = function (servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7252. var
  7253. _NetGroupAdd: TNetGroupAdd = nil;
  7254. function NetGroupAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7255. begin
  7256. GetProcedureAddress(Pointer(@_NetGroupAdd), netapi32, 'NetGroupAdd');
  7257. Result := _NetGroupAdd(servername, level, buf, parm_err);
  7258. end;
  7259. type
  7260. TNetGroupAddUser = function (servername, GroupName, username: LPCWSTR): NET_API_STATUS; stdcall;
  7261. var
  7262. _NetGroupAddUser: TNetGroupAddUser = nil;
  7263. function NetGroupAddUser(servername, GroupName, username: LPCWSTR): NET_API_STATUS;
  7264. begin
  7265. GetProcedureAddress(Pointer(@_NetGroupAddUser), netapi32, 'NetGroupAddUser');
  7266. Result := _NetGroupAddUser(servername, GroupName, username);
  7267. end;
  7268. type
  7269. TNetGroupEnum = function (servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  7270. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resume_handle: PDWORD_PTR): NET_API_STATUS; stdcall;
  7271. var
  7272. _NetGroupEnum: TNetGroupEnum = nil;
  7273. function NetGroupEnum(servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  7274. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resume_handle: PDWORD_PTR): NET_API_STATUS;
  7275. begin
  7276. GetProcedureAddress(Pointer(@_NetGroupEnum), netapi32, 'NetGroupEnum');
  7277. Result := _NetGroupEnum(servername, level, bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
  7278. end;
  7279. type
  7280. TNetGroupGetInfo = function (servername, groupname: LPCWSTR; level: DWORD; bufptr: PByte): NET_API_STATUS; stdcall;
  7281. var
  7282. _NetGroupGetInfo: TNetGroupGetInfo = nil;
  7283. function NetGroupGetInfo(servername, groupname: LPCWSTR; level: DWORD; bufptr: PByte): NET_API_STATUS;
  7284. begin
  7285. GetProcedureAddress(Pointer(@_NetGroupGetInfo), netapi32, 'NetGroupGetInfo');
  7286. Result := _NetGroupGetInfo(servername, groupname, level, bufptr);
  7287. end;
  7288. type
  7289. TNetGroupSetInfo = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7290. var
  7291. _NetGroupSetInfo: TNetGroupSetInfo = nil;
  7292. function NetGroupSetInfo(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7293. begin
  7294. GetProcedureAddress(Pointer(@_NetGroupSetInfo), netapi32, 'NetGroupSetInfo');
  7295. Result := _NetGroupSetInfo(servername, groupname, level, buf, parm_err);
  7296. end;
  7297. type
  7298. TNetGroupDel = function (servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS; stdcall;
  7299. var
  7300. _NetGroupDel: TNetGroupDel = nil;
  7301. function NetGroupDel(servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS;
  7302. begin
  7303. GetProcedureAddress(Pointer(@_NetGroupDel), netapi32, 'NetGroupDel');
  7304. Result := _NetGroupDel(servername, groupname);
  7305. end;
  7306. type
  7307. TNetGroupDelUser = function (servername: LPCWSTR; GroupName: LPCWSTR; Username: LPCWSTR): NET_API_STATUS; stdcall;
  7308. var
  7309. _NetGroupDelUser: TNetGroupDelUser = nil;
  7310. function NetGroupDelUser(servername: LPCWSTR; GroupName: LPCWSTR; Username: LPCWSTR): NET_API_STATUS;
  7311. begin
  7312. GetProcedureAddress(Pointer(@_NetGroupDelUser), netapi32, 'NetGroupDelUser');
  7313. Result := _NetGroupDelUser(servername, GroupName, Username);
  7314. end;
  7315. type
  7316. TNetGroupGetUsers = function (servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; ResumeHandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  7317. var
  7318. _NetGroupGetUsers: TNetGroupGetUsers = nil;
  7319. function NetGroupGetUsers(servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; ResumeHandle: PDWORD_PTR): NET_API_STATUS;
  7320. begin
  7321. GetProcedureAddress(Pointer(@_NetGroupGetUsers), netapi32, 'NetGroupGetUsers');
  7322. Result := _NetGroupGetUsers(servername, groupname, level, bufptr, prefmaxlen, entriesread, totalentries, ResumeHandle);
  7323. end;
  7324. type
  7325. TNetGroupSetUsers = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  7326. var
  7327. _NetGroupSetUsers: TNetGroupSetUsers = nil;
  7328. function NetGroupSetUsers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS;
  7329. begin
  7330. GetProcedureAddress(Pointer(@_NetGroupSetUsers), netapi32, 'NetGroupSetUsers');
  7331. Result := _NetGroupSetUsers(servername, groupname, level, buf, totalentries);
  7332. end;
  7333. type
  7334. TNetLocalGroupAdd = function (servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7335. var
  7336. _NetLocalGroupAdd: TNetLocalGroupAdd = nil;
  7337. function NetLocalGroupAdd(servername: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7338. begin
  7339. GetProcedureAddress(Pointer(@_NetLocalGroupAdd), netapi32, 'NetLocalGroupAdd');
  7340. Result := _NetLocalGroupAdd(servername, level, buf, parm_err);
  7341. end;
  7342. type
  7343. TNetLocalGroupAddMember = function (servername, groupname: LPCWSTR; membersid: PSID): NET_API_STATUS; stdcall;
  7344. var
  7345. _NetLocalGroupAddMember: TNetLocalGroupAddMember = nil;
  7346. function NetLocalGroupAddMember(servername, groupname: LPCWSTR; membersid: PSID): NET_API_STATUS;
  7347. begin
  7348. GetProcedureAddress(Pointer(@_NetLocalGroupAddMember), netapi32, 'NetLocalGroupAddMember');
  7349. Result := _NetLocalGroupAddMember(servername, groupname, membersid);
  7350. end;
  7351. type
  7352. TNetLocalGroupEnum = function (servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  7353. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resumehandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  7354. var
  7355. _NetLocalGroupEnum: TNetLocalGroupEnum = nil;
  7356. function NetLocalGroupEnum(servername: LPCWSTR; level: DWORD; out bufptr: PByte;
  7357. prefmaxlen: DWORD; out entriesread, totalentries: DWORD; resumehandle: PDWORD_PTR): NET_API_STATUS;
  7358. begin
  7359. GetProcedureAddress(Pointer(@_NetLocalGroupEnum), netapi32, 'NetLocalGroupEnum');
  7360. Result := _NetLocalGroupEnum(servername, level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
  7361. end;
  7362. type
  7363. TNetLocalGroupGetInfo = function (servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS; stdcall;
  7364. var
  7365. _NetLocalGroupGetInfo: TNetLocalGroupGetInfo = nil;
  7366. function NetLocalGroupGetInfo(servername, groupname: LPCWSTR; level: DWORD; var bufptr: PByte): NET_API_STATUS;
  7367. begin
  7368. GetProcedureAddress(Pointer(@_NetLocalGroupGetInfo), netapi32, 'NetLocalGroupGetInfo');
  7369. Result := _NetLocalGroupGetInfo(servername, groupname, level, bufptr);
  7370. end;
  7371. type
  7372. TNetLocalGroupSetInfo = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS; stdcall;
  7373. var
  7374. _NetLocalGroupSetInfo: TNetLocalGroupSetInfo = nil;
  7375. function NetLocalGroupSetInfo(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; parm_err: LPDWORD): NET_API_STATUS;
  7376. begin
  7377. GetProcedureAddress(Pointer(@_NetLocalGroupSetInfo), netapi32, 'NetLocalGroupSetInfo');
  7378. Result := _NetLocalGroupSetInfo(servername, groupname, level, buf, parm_err);
  7379. end;
  7380. type
  7381. TNetLocalGroupDel = function (servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS; stdcall;
  7382. var
  7383. _NetLocalGroupDel: TNetLocalGroupDel = nil;
  7384. function NetLocalGroupDel(servername: LPCWSTR; groupname: LPCWSTR): NET_API_STATUS;
  7385. begin
  7386. GetProcedureAddress(Pointer(@_NetLocalGroupDel), netapi32, 'NetLocalGroupDel');
  7387. Result := _NetLocalGroupDel(servername, groupname);
  7388. end;
  7389. type
  7390. TNetLocalGroupDelMember = function (servername: LPCWSTR; groupname: LPCWSTR; membersid: PSID): NET_API_STATUS; stdcall;
  7391. var
  7392. _NetLocalGroupDelMember: TNetLocalGroupDelMember = nil;
  7393. function NetLocalGroupDelMember(servername: LPCWSTR; groupname: LPCWSTR; membersid: PSID): NET_API_STATUS;
  7394. begin
  7395. GetProcedureAddress(Pointer(@_NetLocalGroupDelMember), netapi32, 'NetLocalGroupDelMember');
  7396. Result := _NetLocalGroupDelMember(servername, groupname, membersid);
  7397. end;
  7398. type
  7399. TNetLocalGroupGetMembers = function (servername, localgroupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; resumehandle: PDWORD_PTR): NET_API_STATUS; stdcall;
  7400. var
  7401. _NetLocalGroupGetMembers: TNetLocalGroupGetMembers = nil;
  7402. function NetLocalGroupGetMembers(servername, localgroupname: LPCWSTR; level: DWORD; var bufptr: PByte; prefmaxlen: DWORD; entriesread, totalentries: LPDWORD; resumehandle: PDWORD_PTR): NET_API_STATUS;
  7403. begin
  7404. GetProcedureAddress(Pointer(@_NetLocalGroupGetMembers), netapi32, 'NetLocalGroupGetMembers');
  7405. Result := _NetLocalGroupGetMembers(servername, localgroupname, level, bufptr, prefmaxlen, entriesread, totalentries, resumehandle);
  7406. end;
  7407. type
  7408. TNetLocalGroupSetMembers = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  7409. var
  7410. _NetLocalGroupSetMembers: TNetLocalGroupSetMembers = nil;
  7411. function NetLocalGroupSetMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS;
  7412. begin
  7413. GetProcedureAddress(Pointer(@_NetLocalGroupSetMembers), netapi32, 'NetLocalGroupSetMembers');
  7414. Result := _NetLocalGroupSetMembers(servername, groupname, level, buf, totalentries);
  7415. end;
  7416. type
  7417. TNetLocalGroupAddMembers = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  7418. var
  7419. _NetLocalGroupAddMembers: TNetLocalGroupAddMembers = nil;
  7420. function NetLocalGroupAddMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS;
  7421. begin
  7422. GetProcedureAddress(Pointer(@_NetLocalGroupAddMembers), netapi32, 'NetLocalGroupAddMembers');
  7423. Result := _NetLocalGroupAddMembers(servername, groupname, level, buf, totalentries);
  7424. end;
  7425. type
  7426. TNetLocalGroupDelMembers = function (servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS; stdcall;
  7427. var
  7428. _NetLocalGroupDelMembers: TNetLocalGroupDelMembers = nil;
  7429. function NetLocalGroupDelMembers(servername, groupname: LPCWSTR; level: DWORD; buf: PByte; totalentries: DWORD): NET_API_STATUS;
  7430. begin
  7431. GetProcedureAddress(Pointer(@_NetLocalGroupDelMembers), netapi32, 'NetLocalGroupDelMembers');
  7432. Result := _NetLocalGroupDelMembers(servername, groupname, level, buf, totalentries);
  7433. end;
  7434. type
  7435. TNetApiBufferFree = function (Buffer: Pointer): NET_API_STATUS; stdcall;
  7436. var
  7437. _NetApiBufferFree: TNetApiBufferFree = nil;
  7438. function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS;
  7439. begin
  7440. GetProcedureAddress(Pointer(@_NetApiBufferFree), netapi32, 'NetApiBufferFree');
  7441. Result := _NetApiBufferFree(Buffer);
  7442. end;
  7443. type
  7444. TNetWkstaGetInfo = function (servername: PWideChar; level: DWORD; out bufptr: PByte): NET_API_STATUS; stdcall;
  7445. var
  7446. _NetWkstaGetInfo: TNetWkstaGetInfo = nil;
  7447. function NetWkstaGetInfo(servername: PWideChar; level: DWORD; out bufptr: PByte): NET_API_STATUS; stdcall;
  7448. begin
  7449. GetProcedureAddress(Pointer(@_NetWkstaGetInfo), netapi32, 'NetWkstaGetInfo');
  7450. Result := _NetWkstaGetInfo(servername, level, bufptr);
  7451. end;
  7452. type
  7453. TNetbios = function (pncb: PNCB): UCHAR; stdcall;
  7454. var
  7455. _Netbios: TNetbios = nil;
  7456. function Netbios(pncb: PNCB): UCHAR;
  7457. begin
  7458. GetProcedureAddress(Pointer(@_Netbios), 'netapi32.dll', 'Netbios');
  7459. Result := _Netbios(pncb);
  7460. end;
  7461. type
  7462. TGlobalMemoryStatusEx = function (out lpBuffer: TMemoryStatusEx): BOOL; stdcall;
  7463. var
  7464. _GlobalMemoryStatusEx: TGlobalMemoryStatusEx = nil;
  7465. function GlobalMemoryStatusEx(out lpBuffer: TMemoryStatusEx): BOOL; stdcall;
  7466. begin
  7467. GetProcedureAddress(Pointer(@_GlobalMemoryStatusEx), kernel32, 'GlobalMemoryStatusEx');
  7468. Result := _GlobalMemoryStatusEx(lpBuffer);
  7469. end;
  7470. type
  7471. TBackupSeek = function (hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD;
  7472. out lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD;
  7473. var lpContext: Pointer): BOOL; stdcall;
  7474. var
  7475. _BackupSeek: TBackupSeek = nil;
  7476. function BackupSeek(hFile: THandle; dwLowBytesToSeek, dwHighBytesToSeek: DWORD;
  7477. out lpdwLowByteSeeked, lpdwHighByteSeeked: DWORD;
  7478. var lpContext: Pointer): BOOL;
  7479. begin
  7480. GetProcedureAddress(Pointer(@_BackupSeek), kernel32, 'BackupSeek');
  7481. Result := _BackupSeek(hFile, dwLowBytesToSeek, dwHighBytesToSeek, lpdwLowByteSeeked, lpdwHighByteSeeked, lpContext);
  7482. end;
  7483. type
  7484. TAdjustTokenPrivileges = function (TokenHandle: THandle; DisableAllPrivileges: BOOL;
  7485. const NewState: TTokenPrivileges; BufferLength: DWORD;
  7486. PreviousState: PTokenPrivileges;
  7487. ReturnLength: PDWORD
  7488. ): BOOL; stdcall;
  7489. var
  7490. _AdjustTokenPrivileges: TAdjustTokenPrivileges = nil;
  7491. function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
  7492. const NewState: TTokenPrivileges; BufferLength: DWORD;
  7493. PreviousState: PTokenPrivileges;
  7494. ReturnLength: PDWORD
  7495. ): BOOL;
  7496. begin
  7497. GetProcedureAddress(Pointer(@_AdjustTokenPrivileges), advapi32, 'AdjustTokenPrivileges');
  7498. Result := _AdjustTokenPrivileges(TokenHandle, DisableAllPrivileges, NewState, BufferLength, PreviousState, ReturnLength);
  7499. end;
  7500. function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle; stdcall;
  7501. external kernel32 name 'CreateMutex' + AWSuffix;
  7502. function GetVersionEx(var lpVersionInformation: TOSVersionInfoEx): BOOL; stdcall;
  7503. external kernel32 name 'GetVersionEx' + AWSuffix;
  7504. function GetVersionEx(lpVersionInformation: POSVersionInfoEx): BOOL; stdcall;
  7505. external kernel32 name 'GetVersionEx' + AWSuffix;
  7506. type
  7507. TSetWaitableTimer = function (hTimer: THandle; var lpDueTime: TLargeInteger;
  7508. lPeriod: Longint; pfnCompletionRoutine: TFNTimerAPCRoutine;
  7509. lpArgToCompletionRoutine: Pointer; fResume: BOOL): BOOL; stdcall;
  7510. var
  7511. _SetWaitableTimer: TSetWaitableTimer = nil;
  7512. function SetWaitableTimer(hTimer: THandle; var lpDueTime: TLargeInteger;
  7513. lPeriod: Longint; pfnCompletionRoutine: TFNTimerAPCRoutine;
  7514. lpArgToCompletionRoutine: Pointer; fResume: BOOL): BOOL;
  7515. begin
  7516. GetProcedureAddress(Pointer(@_SetWaitableTimer), kernel32, 'SetWaitableTimer');
  7517. Result := _SetWaitableTimer(hTimer, lpDueTime, lPeriod, pfnCompletionRoutine, lpArgToCompletionRoutine, fResume);
  7518. end;
  7519. type
  7520. TSetFileSecurityA = function (lpFileName: LPCSTR; SecurityInformation: SECURITY_INFORMATION;
  7521. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  7522. var
  7523. _SetFileSecurityA: TSetFileSecurityA = nil;
  7524. function SetFileSecurityA(lpFileName: LPCSTR; SecurityInformation: SECURITY_INFORMATION;
  7525. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL;
  7526. begin
  7527. GetProcedureAddress(Pointer(@_SetFileSecurityA), advapi32, 'SetFileSecurityA');
  7528. Result := _SetFileSecurityA(lpFileName, SecurityInformation, pSecurityDescriptor);
  7529. end;
  7530. type
  7531. TSetFileSecurityW = function (lpFileName: LPCWSTR; SecurityInformation: SECURITY_INFORMATION;
  7532. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  7533. var
  7534. _SetFileSecurityW: TSetFileSecurityW = nil;
  7535. function SetFileSecurityW(lpFileName: LPCWSTR; SecurityInformation: SECURITY_INFORMATION;
  7536. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL;
  7537. begin
  7538. GetProcedureAddress(Pointer(@_SetFileSecurityW), advapi32, 'SetFileSecurityW');
  7539. Result := _SetFileSecurityW(lpFileName, SecurityInformation, pSecurityDescriptor);
  7540. end;
  7541. type
  7542. TSetFileSecurity = function (lpFileName: LPCTSTR; SecurityInformation: SECURITY_INFORMATION;
  7543. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL; stdcall;
  7544. var
  7545. _SetFileSecurity: TSetFileSecurity = nil;
  7546. function SetFileSecurity(lpFileName: LPCTSTR; SecurityInformation: SECURITY_INFORMATION;
  7547. pSecurityDescriptor: PSECURITY_DESCRIPTOR): BOOL;
  7548. begin
  7549. GetProcedureAddress(Pointer(@_SetFileSecurity), advapi32, 'SetFileSecurity' + AWSuffix);
  7550. Result := _SetFileSecurity(lpFileName, SecurityInformation, pSecurityDescriptor);
  7551. end;
  7552. type
  7553. TGetFileSecurityA = function (lpFileName: LPCSTR; RequestedInformation: SECURITY_INFORMATION;
  7554. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7555. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  7556. var
  7557. _GetFileSecurityA: TGetFileSecurityA = nil;
  7558. function GetFileSecurityA(lpFileName: LPCSTR; RequestedInformation: SECURITY_INFORMATION;
  7559. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7560. var lpnLengthNeeded: DWORD): BOOL;
  7561. begin
  7562. GetProcedureAddress(Pointer(@_GetFileSecurityA), advapi32, 'GetFileSecurityA');
  7563. Result := _GetFileSecurityA(lpFileName, RequestedInformation, pSecurityDescriptor, nLength, lpnLengthNeeded);
  7564. end;
  7565. type
  7566. TGetFileSecurityW = function (lpFileName: LPCWSTR; RequestedInformation: SECURITY_INFORMATION;
  7567. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7568. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  7569. var
  7570. _GetFileSecurityW: TGetFileSecurityW = nil;
  7571. function GetFileSecurityW(lpFileName: LPCWSTR; RequestedInformation: SECURITY_INFORMATION;
  7572. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7573. var lpnLengthNeeded: DWORD): BOOL;
  7574. begin
  7575. GetProcedureAddress(Pointer(@_GetFileSecurityW), advapi32, 'GetFileSecurityW');
  7576. Result := _GetFileSecurityW(lpFileName, RequestedInformation, pSecurityDescriptor, nLength, lpnLengthNeeded);
  7577. end;
  7578. type
  7579. TGetFileSecurity = function (lpFileName: LPCTSTR; RequestedInformation: SECURITY_INFORMATION;
  7580. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7581. var lpnLengthNeeded: DWORD): BOOL; stdcall;
  7582. var
  7583. _GetFileSecurity: TGetFileSecurity = nil;
  7584. function GetFileSecurity(lpFileName: LPCTSTR; RequestedInformation: SECURITY_INFORMATION;
  7585. pSecurityDescriptor: PSECURITY_DESCRIPTOR; nLength: DWORD;
  7586. var lpnLengthNeeded: DWORD): BOOL;
  7587. begin
  7588. GetProcedureAddress(Pointer(@_GetFileSecurity), advapi32, 'GetFileSecurity' + AWSuffix);
  7589. Result := _GetFileSecurity(lpFileName, RequestedInformation, pSecurityDescriptor, nLength, lpnLengthNeeded);
  7590. end;
  7591. type
  7592. TSetVolumeMountPointW = function (lpszVolumeMountPoint, lpszVolumeName: LPCWSTR): BOOL; stdcall;
  7593. var
  7594. _SetVolumeMountPointW: TSetVolumeMountPointW = nil;
  7595. function SetVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName: LPCWSTR): BOOL;
  7596. begin
  7597. GetProcedureAddress(Pointer(@_SetVolumeMountPointW), kernel32, 'SetVolumeMountPointW');
  7598. Result := _SetVolumeMountPointW(lpszVolumeMountPoint, lpszVolumeName);
  7599. end;
  7600. type
  7601. TDeleteVolumeMountPointW = function (lpszVolumeMountPoint: LPCWSTR): BOOL; stdcall;
  7602. var
  7603. _DeleteVolumeMountPointW: TDeleteVolumeMountPointW = nil;
  7604. function DeleteVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR): BOOL;
  7605. begin
  7606. GetProcedureAddress(Pointer(@_DeleteVolumeMountPointW), kernel32, 'DeleteVolumeMountPointW');
  7607. Result := _DeleteVolumeMountPointW(lpszVolumeMountPoint);
  7608. end;
  7609. type
  7610. TGetVolumeNameForVolumeMountPointW = function (lpszVolumeMountPoint: LPCWSTR;
  7611. lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL; stdcall;
  7612. var
  7613. _GetVolumeNameForVolMountPointW: TGetVolumeNameForVolumeMountPointW = nil;
  7614. function GetVolumeNameForVolumeMountPointW(lpszVolumeMountPoint: LPCWSTR;
  7615. lpszVolumeName: LPWSTR; cchBufferLength: DWORD): BOOL;
  7616. begin
  7617. GetProcedureAddress(Pointer(@_GetVolumeNameForVolMountPointW), kernel32, 'GetVolumeNameForVolumeMountPointW');
  7618. Result := _GetVolumeNameForVolMountPointW(lpszVolumeMountPoint, lpszVolumeName, cchBufferLength);
  7619. end;
  7620. type
  7621. TCopyExtendedContext = function (Destination: PCONTEXT_EX; ContextFlags: DWORD; Source: PCONTEXT_EX): BOOL; stdcall;
  7622. var
  7623. _CopyExtendedContext: TCopyExtendedContext = nil;
  7624. function CopyExtendedContext(Destination: PCONTEXT_EX; ContextFlags: DWORD; Source: PCONTEXT_EX): BOOL;
  7625. begin
  7626. GetProcedureAddress(Pointer(@_CopyExtendedContext), kernel32, 'CopyExtendedContext');
  7627. Result := _CopyExtendedContext(Destination, ContextFlags, Source);
  7628. end;
  7629. type
  7630. TInitializeExtendedContext = function (Context: Pointer; ContextFlags: DWORD; out ContextEx: PCONTEXT_EX): BOOL; stdcall;
  7631. var
  7632. _InitializeExtendedContext: TInitializeExtendedContext = nil;
  7633. function InitializeExtendedContext(Context: Pointer; ContextFlags: DWORD; out ContextEx: PCONTEXT_EX): BOOL;
  7634. begin
  7635. GetProcedureAddress(Pointer(@_InitializeExtendedContext), kernel32, 'InitializeExtendedContext');
  7636. Result := _InitializeExtendedContext(Context, ContextFlags, ContextEx);
  7637. end;
  7638. type
  7639. TGetEnabledExtendedFeatures = function (const FeatureMask: Int64): Int64; stdcall;
  7640. var
  7641. _GetEnabledExtendedFeatures: TGetEnabledExtendedFeatures = nil;
  7642. function GetEnabledExtendedFeatures(const FeatureMask: Int64): Int64;
  7643. begin
  7644. GetProcedureAddress(Pointer(@_GetEnabledExtendedFeatures), kernel32, 'GetEnabledExtendedFeatures');
  7645. Result := _GetEnabledExtendedFeatures(FeatureMask);
  7646. end;
  7647. type
  7648. TGetExtendedContextLength = function (ContextFlags: DWORD; ContextLength: PDWORD): BOOL; stdcall;
  7649. var
  7650. _GetExtendedContextLength: TGetExtendedContextLength = nil;
  7651. function GetExtendedContextLength(ContextFlags: DWORD; ContextLength: PDWORD): BOOL;
  7652. begin
  7653. GetProcedureAddress(Pointer(@_GetExtendedContextLength), kernel32, 'GetExtendedContextLength');
  7654. Result := _GetExtendedContextLength(ContextFlags, ContextLength);
  7655. end;
  7656. type
  7657. TGetExtendedFeaturesMask = function (ContextEx: PCONTEXT_EX): Int64; stdcall;
  7658. var
  7659. _GetExtendedFeaturesMask: TGetExtendedFeaturesMask = nil;
  7660. function GetExtendedFeaturesMask(ContextEx: PCONTEXT_EX): Int64;
  7661. begin
  7662. GetProcedureAddress(Pointer(@_GetExtendedFeaturesMask), kernel32, 'GetExtendedFeaturesMask');
  7663. Result := _GetExtendedFeaturesMask(ContextEx);
  7664. end;
  7665. type
  7666. TLocateExtendedFeature = function (ContextEx: PCONTEXT_EX; FeatureId: DWORD; Length: PDWORD): Pointer; stdcall;
  7667. var
  7668. _LocateExtendedFeature: TLocateExtendedFeature = nil;
  7669. function LocateExtendedFeature(ContextEx: PCONTEXT_EX; FeatureId: DWORD; Length: PDWORD): Pointer;
  7670. begin
  7671. GetProcedureAddress(Pointer(@_LocateExtendedFeature), kernel32, 'LocateExtendedFeature');
  7672. Result := _LocateExtendedFeature(ContextEx, FeatureId, Length);
  7673. end;
  7674. type
  7675. TLocateLegacyContext = function (ContextEx: PCONTEXT_EX; Length: PDWORD): PCONTEXT; stdcall;
  7676. var
  7677. _LocateLegacyContext: TLocateLegacyContext = nil;
  7678. function LocateLegacyContext(ContextEx: PCONTEXT_EX; Length: PDWORD): PCONTEXT;
  7679. begin
  7680. GetProcedureAddress(Pointer(@_LocateLegacyContext), kernel32, 'LocateLegacyContext');
  7681. Result := _LocateLegacyContext(ContextEx, Length);
  7682. end;
  7683. type
  7684. TSetExtendedFeaturesMask = procedure (ContextEx: PCONTEXT_EX; const FeatureMask: Int64); stdcall;
  7685. var
  7686. _SetExtendedFeaturesMask: TSetExtendedFeaturesMask = nil;
  7687. procedure SetExtendedFeaturesMask(ContextEx: PCONTEXT_EX; const FeatureMask: Int64);
  7688. begin
  7689. GetProcedureAddress(Pointer(@_SetExtendedFeaturesMask), kernel32, 'SetExtendedFeaturesMask');
  7690. _SetExtendedFeaturesMask(ContextEx, FeatureMask);
  7691. end;
  7692. type
  7693. TProcessIdToSessionId = function (dwProcessId: DWORD; out dwSessionId: DWORD): BOOL; stdcall;
  7694. var
  7695. _ProcessIdToSessionId: TProcessIdToSessionId = nil;
  7696. function ProcessIdToSessionId(dwProcessId: DWORD; out dwSessionId: DWORD): BOOL;
  7697. begin
  7698. GetProcedureAddress(Pointer(@_ProcessIdToSessionId), kernel32, 'ProcessIdToSessionId');
  7699. Result := _ProcessIdToSessionId(dwProcessId, dwSessionId);
  7700. end;
  7701. type
  7702. TGetCalendarInfoA = function (Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  7703. lpCalData: LPSTR; cchData: Integer; lpValue: LPDWORD): Integer; stdcall;
  7704. var
  7705. _GetCalendarInfoA: TGetCalendarInfoA = nil;
  7706. function GetCalendarInfoA(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  7707. lpCalData: LPSTR; cchData: Integer; lpValue: LPDWORD): Integer;
  7708. begin
  7709. GetProcedureAddress(Pointer(@_GetCalendarInfoA), kernel32, 'GetCalendarInfoA');
  7710. Result := _GetCalendarInfoA(Locale, Calendar, CalType, lpCalData, cchData, lpValue);
  7711. end;
  7712. type
  7713. TGetCalendarInfoW = function (Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  7714. lpCalData: LPWSTR; cchData: Integer; lpValue: LPDWORD): Integer; stdcall;
  7715. var
  7716. _GetCalendarInfoW: TGetCalendarInfoW = nil;
  7717. function GetCalendarInfoW(Locale: LCID; Calendar: CALID; CalType: CALTYPE;
  7718. lpCalData: LPWSTR; cchData: Integer; lpValue: LPDWORD): Integer;
  7719. begin
  7720. GetProcedureAddress(Pointer(@_GetCalendarInfoW), kernel32, 'GetCalendarInfoW');
  7721. Result := _GetCalendarInfoW(Locale, Calendar, CalType, lpCalData, cchData, lpValue);
  7722. end;
  7723. type
  7724. TEnumCalendarInfoExW = function (lpCalInfoEnumProcEx: CALINFO_ENUMPROCEXW;
  7725. Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL; stdcall;
  7726. var
  7727. _EnumCalendarInfoExW: TEnumCalendarInfoExW = nil;
  7728. function EnumCalendarInfoExW(lpCalInfoEnumProcEx: CALINFO_ENUMPROCEXW;
  7729. Locale: LCID; Calendar: CALID; CalType: CALTYPE): BOOL;
  7730. begin
  7731. GetProcedureAddress(Pointer(@_EnumCalendarInfoExW), kernel32, 'EnumCalendarInfoExW');
  7732. Result := _EnumCalendarInfoExW(lpCalInfoEnumProcEx, Locale, Calendar, CalType);
  7733. end;
  7734. type
  7735. TGetWindowLongPtr = function (hWnd: HWND; nIndex: Integer): TJclAddr; stdcall;
  7736. var
  7737. _GetWindowLongPtr: TGetWindowLongPtr = nil;
  7738. function GetWindowLongPtr(hWnd: HWND; nIndex: Integer): TJclAddr;
  7739. begin
  7740. GetProcedureAddress(Pointer(@_GetWindowLongPtr), user32, 'GetWindowLong' + AWSuffix);
  7741. Result := _GetWindowLongPtr(hWnd, nIndex);
  7742. end;
  7743. type
  7744. TSetWindowLongPtr = function (hWnd: HWND; nIndex: Integer; dwNewLong: TJclAddr): Longint; stdcall;
  7745. var
  7746. _SetWindowLongPtr: TSetWindowLongPtr = nil;
  7747. function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: TJclAddr): Longint;
  7748. begin
  7749. GetProcedureAddress(Pointer(@_SetWindowLongPtr), user32, 'SetWindowLong' + AWSuffix);
  7750. Result := _SetWindowLongPtr(hWnd, nIndex, dwNewLong);
  7751. end;
  7752. // line 9078
  7753. function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
  7754. begin
  7755. Result := (SubLang shl 10) or PrimaryLang;
  7756. end;
  7757. function PRIMARYLANGID(LangId: WORD): WORD;
  7758. begin
  7759. Result := LangId and $03FF;
  7760. end;
  7761. function SUBLANGID(LangId: WORD): WORD;
  7762. begin
  7763. Result := LangId shr 10;
  7764. end;
  7765. function MAKELCID(LangId, SortId: WORD): DWORD;
  7766. begin
  7767. Result := (DWORD(SortId) shl 16) or DWORD(LangId);
  7768. end;
  7769. function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
  7770. begin
  7771. Result := MAKELCID(LangId, SortId) or (SortVersion shl 20);
  7772. end;
  7773. function LANGIDFROMLCID(LocaleId: LCID): WORD;
  7774. begin
  7775. Result := WORD(LocaleId);
  7776. end;
  7777. function SORTIDFROMLCID(LocaleId: LCID): WORD;
  7778. begin
  7779. Result := WORD((DWORD(LocaleId) shr 16) and $000F);
  7780. end;
  7781. function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
  7782. begin
  7783. Result := WORD((DWORD(LocaleId) shr 20) and $000F);
  7784. end;
  7785. type
  7786. TCaptureStackBackTrace = function(FramesToSkip, FramesToCapture: DWORD;
  7787. BackTrace: Pointer; out BackTraceHash: DWORD): Word; stdcall;
  7788. var
  7789. _CaptureStackBackTrace: TCaptureStackBackTrace = nil;
  7790. function CaptureStackBackTrace(FramesToSkip, FramesToCapture: DWORD;
  7791. BackTrace: Pointer; out BackTraceHash: DWORD): Word; stdcall;
  7792. begin
  7793. GetProcedureAddress(Pointer(@_CaptureStackBackTrace), kernel32, 'RtlCaptureStackBackTrace');
  7794. Result := _CaptureStackBackTrace(FramesToSkip, FramesToCapture, BackTrace, BackTraceHash);
  7795. end;
  7796. // line 9149
  7797. function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
  7798. begin
  7799. Result := (Tag and ULONG($80000000)) <> 0;
  7800. end;
  7801. function IsReparseTagHighLatency(Tag: ULONG): Boolean;
  7802. begin
  7803. Result := (Tag and ULONG($40000000)) <> 0;
  7804. end;
  7805. function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
  7806. begin
  7807. Result := (Tag and ULONG($20000000)) <> 0;
  7808. end;
  7809. // IMAGE_FIRST_SECTION by Nico Bendlin - supplied by Markus Fuchs
  7810. function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
  7811. var
  7812. OptionalHeaderAddr: PByte;
  7813. begin
  7814. OptionalHeaderAddr := @NtHeader^.OptionalHeader;
  7815. Inc(OptionalHeaderAddr, NtHeader^.FileHeader.SizeOfOptionalHeader);
  7816. Result := PImageSectionHeader(OptionalHeaderAddr);
  7817. end;
  7818. // line 9204
  7819. function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
  7820. begin
  7821. Result := (Ordinal and $FFFF);
  7822. end;
  7823. function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
  7824. begin
  7825. Result := (Ordinal and $0000FFFF);
  7826. end;
  7827. function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
  7828. begin
  7829. Result := (Ordinal and $0000FFFF);
  7830. end;
  7831. function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
  7832. begin
  7833. Result := ((Ordinal and IMAGE_ORDINAL_FLAG64) <> 0);
  7834. end;
  7835. function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
  7836. begin
  7837. Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
  7838. end;
  7839. function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
  7840. begin
  7841. Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
  7842. end;
  7843. const
  7844. PowrprofLib = 'PowrProf.dll';
  7845. type
  7846. TIsPwrSuspendAllowed = function : BOOL; stdcall;
  7847. var
  7848. _IsPwrSuspendAllowed: TIsPwrSuspendAllowed = nil;
  7849. function IsPwrSuspendAllowed: BOOL;
  7850. begin
  7851. GetProcedureAddress(Pointer(@_IsPwrSuspendAllowed), PowrprofLib, 'IsPwrSuspendAllowed');
  7852. Result := _IsPwrSuspendAllowed;
  7853. end;
  7854. type
  7855. TIsPwrHibernateAllowed = function : BOOL; stdcall;
  7856. var
  7857. _IsPwrHibernateAllowed: TIsPwrHibernateAllowed = nil;
  7858. function IsPwrHibernateAllowed: BOOL;
  7859. begin
  7860. GetProcedureAddress(Pointer(@_IsPwrHibernateAllowed), PowrprofLib, 'IsPwrHibernateAllowed');
  7861. Result := _IsPwrHibernateAllowed;
  7862. end;
  7863. type
  7864. TIsPwrShutdownAllowed = function : BOOL; stdcall;
  7865. var
  7866. _IsPwrShutdownAllowed: TIsPwrShutdownAllowed = nil;
  7867. function IsPwrShutdownAllowed: BOOL;
  7868. begin
  7869. GetProcedureAddress(Pointer(@_IsPwrShutdownAllowed), PowrprofLib, 'IsPwrShutdownAllowed');
  7870. Result := _IsPwrShutdownAllowed;
  7871. end;
  7872. type
  7873. TSetSuspendState = function (Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL; stdcall;
  7874. var
  7875. _SetSuspendState: TSetSuspendState = nil;
  7876. function SetSuspendState(Hibernate, ForceCritical, DisableWakeEvent: BOOL): BOOL;
  7877. begin
  7878. GetProcedureAddress(Pointer(@_SetSuspendState), PowrprofLib, 'SetSuspendState');
  7879. Result := _SetSuspendState(Hibernate, ForceCritical, DisableWakeEvent);
  7880. end;
  7881. const
  7882. Ole32Lib = 'ole32.dll';
  7883. type
  7884. TStgCreateStorageEx = function (const pwcsName: PWideChar; grfMode: DWORD;
  7885. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  7886. riid: PGUID; out stgOpen: IInterface): HResult; stdcall;
  7887. var
  7888. _StgCreateStorageEx: TStgCreateStorageEx = nil;
  7889. function StgCreateStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
  7890. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  7891. riid: PGUID; out stgOpen: IInterface): HResult;
  7892. begin
  7893. GetProcedureAddress(Pointer(@_StgCreateStorageEx), Ole32Lib, 'StgCreateStorageEx');
  7894. Result := _StgCreateStorageEx(pwcsName, grfMode, stgfmt, grfAttrs, pStgOptions, reserved2, riid, stgOpen);
  7895. end;
  7896. type
  7897. TStgOpenStorageEx = function (const pwcsName: PWideChar; grfMode: DWORD;
  7898. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  7899. riid: PGUID; out stgOpen: IInterface): HResult; stdcall;
  7900. var
  7901. _StgOpenStorageEx: TStgOpenStorageEx = nil;
  7902. function StgOpenStorageEx(const pwcsName: PWideChar; grfMode: DWORD;
  7903. stgfmt: DWORD; grfAttrs: DWORD; pStgOptions: PSTGOPTIONS; reserved2: Pointer;
  7904. riid: PGUID; out stgOpen: IInterface): HResult;
  7905. begin
  7906. GetProcedureAddress(Pointer(@_StgOpenStorageEx), Ole32Lib, 'StgOpenStorageEx');
  7907. Result := _StgOpenStorageEx(pwcsName, grfMode, stgfmt, grfAttrs, pStgOptions, reserved2, riid, stgOpen);
  7908. end;
  7909. type
  7910. TPropVariantClear = function (var Prop: TPropVariant): HResult; stdcall;
  7911. var
  7912. _PropVariantClear: TPropVariantClear = nil;
  7913. function PropVariantClear(var Prop: TPropVariant): HResult;
  7914. begin
  7915. GetProcedureAddress(Pointer(@_PropVariantClear), Ole32Lib, 'PropVariantClear');
  7916. Result := _PropVariantClear(Prop);
  7917. end;
  7918. type
  7919. TLsaOpenPolicy = function (SystemName: PLSA_UNICODE_STRING;
  7920. var ObjectAttributes: LSA_OBJECT_ATTRIBUTES; DesiredAccess: ACCESS_MASK;
  7921. var PolicyHandle: LSA_HANDLE): NTSTATUS; stdcall;
  7922. var
  7923. _LsaOpenPolicy: TLsaOpenPolicy = nil;
  7924. function LsaOpenPolicy(SystemName: PLSA_UNICODE_STRING;
  7925. var ObjectAttributes: LSA_OBJECT_ATTRIBUTES; DesiredAccess: ACCESS_MASK;
  7926. var PolicyHandle: LSA_HANDLE): NTSTATUS;
  7927. begin
  7928. GetProcedureAddress(Pointer(@_LsaOpenPolicy), advapi32, 'LsaOpenPolicy');
  7929. Result := _LsaOpenPolicy(SystemName, ObjectAttributes, DesiredAccess, PolicyHandle);
  7930. end;
  7931. type
  7932. TLsaQueryInformationPolicy = function (PolicyHandle: LSA_HANDLE;
  7933. InformationClass: POLICY_INFORMATION_CLASS; var Buffer: Pointer): NTSTATUS; stdcall;
  7934. var
  7935. _LsaQueryInformationPolicy: TLsaQueryInformationPolicy = nil;
  7936. function LsaQueryInformationPolicy(PolicyHandle: LSA_HANDLE;
  7937. InformationClass: POLICY_INFORMATION_CLASS; var Buffer: Pointer): NTSTATUS;
  7938. begin
  7939. GetProcedureAddress(Pointer(@_LsaQueryInformationPolicy), advapi32, 'LsaQueryInformationPolicy');
  7940. Result := _LsaQueryInformationPolicy(PolicyHandle, InformationClass, Buffer);
  7941. end;
  7942. type
  7943. TLsaFreeMemory = function (Buffer: Pointer): NTSTATUS; stdcall;
  7944. var
  7945. _LsaFreeMemory: TLsaFreeMemory = nil;
  7946. function LsaFreeMemory(Buffer: Pointer): NTSTATUS;
  7947. begin
  7948. GetProcedureAddress(Pointer(@_LsaFreeMemory), advapi32, 'LsaFreeMemory');
  7949. Result := _LsaFreeMemory(Buffer);
  7950. end;
  7951. type
  7952. TLsaFreeReturnBuffer = function (Buffer: Pointer): NTSTATUS; stdcall;
  7953. var
  7954. _LsaFreeReturnBuffer: TLsaFreeReturnBuffer = nil;
  7955. function LsaFreeReturnBuffer(Buffer: Pointer): NTSTATUS;
  7956. begin
  7957. GetProcedureAddress(Pointer(@_LsaFreeReturnBuffer), advapi32, 'LsaFreeReturnBuffer');
  7958. Result := _LsaFreeReturnBuffer(Buffer);
  7959. end;
  7960. type
  7961. TLsaClose = function (ObjectHandle: LSA_HANDLE): NTSTATUS; stdcall;
  7962. var
  7963. _LsaClose: TLsaClose = nil;
  7964. function LsaClose(ObjectHandle: LSA_HANDLE): NTSTATUS;
  7965. begin
  7966. GetProcedureAddress(Pointer(@_LsaClose), advapi32, 'LsaClose');
  7967. Result := _LsaClose(ObjectHandle);
  7968. end;
  7969. type
  7970. TLsaNtStatusToWinError = function (Status: NTSTATUS): ULONG; stdcall;
  7971. var
  7972. _LsaNtStatusToWinError: TLsaNtStatusToWinError = nil;
  7973. function LsaNtStatusToWinError(Status: NTSTATUS): ULONG;
  7974. begin
  7975. GetProcedureAddress(Pointer(@_LsaNtStatusToWinError), advapi32, 'LsaNtStatusToWinError');
  7976. Result := _LsaNtStatusToWinError(Status);
  7977. end;
  7978. type
  7979. TCreateToolhelp32Snapshot = function (dwFlags, th32ProcessID: DWORD): THandle; stdcall;
  7980. var
  7981. _CreateToolhelp32Snapshot: TCreateToolhelp32Snapshot = nil;
  7982. function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle;
  7983. begin
  7984. GetProcedureAddress(Pointer(@_CreateToolhelp32Snapshot), kernel32, 'CreateToolhelp32Snapshot');
  7985. Result := _CreateToolhelp32Snapshot(dwFlags, th32ProcessID);
  7986. end;
  7987. type
  7988. TThread32First = function (hSnapshot: THandle; var lpte: THREADENTRY32): BOOL; stdcall;
  7989. var
  7990. _Thread32First: TThread32First = nil;
  7991. function Thread32First(hSnapshot: THandle; var lpte: THREADENTRY32): BOOL;
  7992. begin
  7993. GetProcedureAddress(Pointer(@_Thread32First), kernel32, 'Thread32First');
  7994. Result := _Thread32First(hSnapshot, lpte);
  7995. end;
  7996. type
  7997. TThread32Next = function (hSnapshot: THandle; var lpte: THREADENTRY32): BOOL; stdcall;
  7998. var
  7999. _Thread32Next: TThread32Next = nil;
  8000. function Thread32Next(hSnapshot: THandle; var lpte: THREADENTRY32): BOOL;
  8001. begin
  8002. GetProcedureAddress(Pointer(@_Thread32Next), kernel32, 'Thread32Next');
  8003. Result := _Thread32Next(hSnapshot, lpte);
  8004. end;
  8005. const
  8006. ntdll = 'ntdll.dll';
  8007. type
  8008. TNtQueryInformationThread = function (ThreadHandle: THandle; ThreadInformationClass: THREAD_INFORMATION_CLASS;
  8009. ThreadInformation: Pointer; ThreadInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS; stdcall;
  8010. var
  8011. _NtQueryInformationThread: TNtQueryInformationThread = nil;
  8012. function NtQueryInformationThread(ThreadHandle: THandle; ThreadInformationClass: THREAD_INFORMATION_CLASS;
  8013. ThreadInformation: Pointer; ThreadInformationLength: ULONG; ReturnLength: PULONG): NTSTATUS;
  8014. begin
  8015. GetProcedureAddress(Pointer(@_NtQueryInformationThread), ntdll, 'NtQueryInformationThread');
  8016. Result := _NtQueryInformationThread(ThreadHandle, ThreadInformationClass, ThreadInformation, ThreadInformationLength, ReturnLength);
  8017. end;
  8018. {$IFDEF UNITVERSIONING}
  8019. initialization
  8020. RegisterUnitVersion(HInstance, UnitVersioning);
  8021. finalization
  8022. UnregisterUnitVersion(HInstance);
  8023. {$ENDIF UNITVERSIONING}
  8024. end.