ntddk.h 141 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774
  1. /*
  2. * ntddk.h
  3. *
  4. * Windows NT Device Driver Kit
  5. *
  6. * This file is part of the ReactOS DDK package.
  7. *
  8. * Contributors:
  9. * Amine Khaldi
  10. * Timo Kreuzer (timo.kreuzer@reactos.org)
  11. *
  12. * THIS SOFTWARE IS NOT COPYRIGHTED
  13. *
  14. * This source code is offered for use in the public domain. You may
  15. * use, modify or distribute it freely.
  16. *
  17. * This code is distributed in the hope that it will be useful but
  18. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  19. * DISCLAIMED. This includes but is not limited to warranties of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  21. *
  22. */
  23. #pragma once
  24. #define _NTDDK_
  25. #if !defined(_NTHAL_) && !defined(_NTIFS_)
  26. #define _NTDDK_INCLUDED_
  27. #define _DDK_DRIVER_
  28. #endif
  29. /* Dependencies */
  30. #define NT_INCLUDED
  31. #define _CTYPE_DISABLE_MACROS
  32. #include <wdm.h>
  33. #include <excpt.h>
  34. #include <ntdef.h>
  35. #include <ntstatus.h>
  36. #include <mce.h>
  37. #include <bugcodes.h>
  38. #include <ntiologc.h>
  39. #include <stdarg.h> // FIXME
  40. #include <basetyps.h> // FIXME
  41. #ifdef __cplusplus
  42. extern "C" {
  43. #endif
  44. /* GUID and UUID */
  45. #ifndef _NTLSA_IFS_
  46. #ifndef _NTLSA_AUDIT_
  47. #define _NTLSA_AUDIT_
  48. #ifndef GUID_DEFINED
  49. #include <guiddef.h>
  50. #endif
  51. #endif /* _NTLSA_AUDIT_ */
  52. #endif /* _NTLSA_IFS_ */
  53. typedef GUID UUID;
  54. struct _LOADER_PARAMETER_BLOCK;
  55. struct _CREATE_DISK;
  56. struct _DRIVE_LAYOUT_INFORMATION_EX;
  57. struct _SET_PARTITION_INFORMATION_EX;
  58. struct _DISK_GEOMETRY_EX;
  59. typedef struct _BUS_HANDLER *PBUS_HANDLER;
  60. typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
  61. #if defined(_NTHAL_INCLUDED_)
  62. typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
  63. #endif
  64. typedef struct _PEB *PPEB;
  65. #ifndef _NTIMAGE_
  66. typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
  67. typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
  68. #ifdef _WIN64
  69. typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
  70. #else
  71. typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
  72. #endif
  73. #endif /* _NTIMAGE_ */
  74. /******************************************************************************
  75. * Executive Types *
  76. ******************************************************************************/
  77. typedef struct _ZONE_SEGMENT_HEADER {
  78. SINGLE_LIST_ENTRY SegmentList;
  79. PVOID Reserved;
  80. } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
  81. typedef struct _ZONE_HEADER {
  82. SINGLE_LIST_ENTRY FreeList;
  83. SINGLE_LIST_ENTRY SegmentList;
  84. ULONG BlockSize;
  85. ULONG TotalSegmentSize;
  86. } ZONE_HEADER, *PZONE_HEADER;
  87. #define PROTECTED_POOL 0x80000000
  88. /******************************************************************************
  89. * I/O Manager Types *
  90. ******************************************************************************/
  91. /* DEVICE_OBJECT.Flags */
  92. #define DO_DEVICE_HAS_NAME 0x00000040
  93. #define DO_SYSTEM_BOOT_PARTITION 0x00000100
  94. #define DO_LONG_TERM_REQUESTS 0x00000200
  95. #define DO_NEVER_LAST_DEVICE 0x00000400
  96. #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
  97. #define DO_SUPPORTS_TRANSACTIONS 0x00040000
  98. #define DO_FORCE_NEITHER_IO 0x00080000
  99. #define DO_VOLUME_DEVICE_OBJECT 0x00100000
  100. #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
  101. #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
  102. #define DO_DISALLOW_EXECUTE 0x00800000
  103. #ifndef _ARC_DDK_
  104. #define _ARC_DDK_
  105. typedef enum _CONFIGURATION_TYPE {
  106. ArcSystem,
  107. CentralProcessor,
  108. FloatingPointProcessor,
  109. PrimaryIcache,
  110. PrimaryDcache,
  111. SecondaryIcache,
  112. SecondaryDcache,
  113. SecondaryCache,
  114. EisaAdapter,
  115. TcAdapter,
  116. ScsiAdapter,
  117. DtiAdapter,
  118. MultiFunctionAdapter,
  119. DiskController,
  120. TapeController,
  121. CdromController,
  122. WormController,
  123. SerialController,
  124. NetworkController,
  125. DisplayController,
  126. ParallelController,
  127. PointerController,
  128. KeyboardController,
  129. AudioController,
  130. OtherController,
  131. DiskPeripheral,
  132. FloppyDiskPeripheral,
  133. TapePeripheral,
  134. ModemPeripheral,
  135. MonitorPeripheral,
  136. PrinterPeripheral,
  137. PointerPeripheral,
  138. KeyboardPeripheral,
  139. TerminalPeripheral,
  140. OtherPeripheral,
  141. LinePeripheral,
  142. NetworkPeripheral,
  143. SystemMemory,
  144. DockingInformation,
  145. RealModeIrqRoutingTable,
  146. RealModePCIEnumeration,
  147. MaximumType
  148. } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
  149. #endif /* !_ARC_DDK_ */
  150. /*
  151. ** IRP function codes
  152. */
  153. #define IRP_MN_QUERY_DIRECTORY 0x01
  154. #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
  155. #define IRP_MN_USER_FS_REQUEST 0x00
  156. #define IRP_MN_MOUNT_VOLUME 0x01
  157. #define IRP_MN_VERIFY_VOLUME 0x02
  158. #define IRP_MN_LOAD_FILE_SYSTEM 0x03
  159. #define IRP_MN_TRACK_LINK 0x04
  160. #define IRP_MN_KERNEL_CALL 0x04
  161. #define IRP_MN_LOCK 0x01
  162. #define IRP_MN_UNLOCK_SINGLE 0x02
  163. #define IRP_MN_UNLOCK_ALL 0x03
  164. #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
  165. #define IRP_MN_FLUSH_AND_PURGE 0x01
  166. #define IRP_MN_NORMAL 0x00
  167. #define IRP_MN_DPC 0x01
  168. #define IRP_MN_MDL 0x02
  169. #define IRP_MN_COMPLETE 0x04
  170. #define IRP_MN_COMPRESSED 0x08
  171. #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
  172. #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
  173. #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
  174. #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
  175. #define IO_CHECK_CREATE_PARAMETERS 0x0200
  176. #define IO_ATTACH_DEVICE 0x0400
  177. #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
  178. typedef NTSTATUS
  179. (NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
  180. IN PVOID Context,
  181. IN PUNICODE_STRING PathName,
  182. IN INTERFACE_TYPE BusType,
  183. IN ULONG BusNumber,
  184. IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
  185. IN CONFIGURATION_TYPE ControllerType,
  186. IN ULONG ControllerNumber,
  187. IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
  188. IN CONFIGURATION_TYPE PeripheralType,
  189. IN ULONG PeripheralNumber,
  190. IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
  191. typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
  192. IoQueryDeviceIdentifier = 0,
  193. IoQueryDeviceConfigurationData,
  194. IoQueryDeviceComponentInformation,
  195. IoQueryDeviceMaxData
  196. } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
  197. typedef VOID
  198. (NTAPI *PDRIVER_REINITIALIZE)(
  199. IN struct _DRIVER_OBJECT *DriverObject,
  200. IN PVOID Context OPTIONAL,
  201. IN ULONG Count);
  202. typedef struct _CONTROLLER_OBJECT {
  203. CSHORT Type;
  204. CSHORT Size;
  205. PVOID ControllerExtension;
  206. KDEVICE_QUEUE DeviceWaitQueue;
  207. ULONG Spare1;
  208. LARGE_INTEGER Spare2;
  209. } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
  210. #define DRVO_REINIT_REGISTERED 0x00000008
  211. #define DRVO_INITIALIZED 0x00000010
  212. #define DRVO_BOOTREINIT_REGISTERED 0x00000020
  213. #define DRVO_LEGACY_RESOURCES 0x00000040
  214. typedef struct _CONFIGURATION_INFORMATION {
  215. ULONG DiskCount;
  216. ULONG FloppyCount;
  217. ULONG CdRomCount;
  218. ULONG TapeCount;
  219. ULONG ScsiPortCount;
  220. ULONG SerialCount;
  221. ULONG ParallelCount;
  222. BOOLEAN AtDiskPrimaryAddressClaimed;
  223. BOOLEAN AtDiskSecondaryAddressClaimed;
  224. ULONG Version;
  225. ULONG MediumChangerCount;
  226. } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
  227. typedef struct _DISK_SIGNATURE {
  228. ULONG PartitionStyle;
  229. _ANONYMOUS_UNION union {
  230. struct {
  231. ULONG Signature;
  232. ULONG CheckSum;
  233. } Mbr;
  234. struct {
  235. GUID DiskId;
  236. } Gpt;
  237. } DUMMYUNIONNAME;
  238. } DISK_SIGNATURE, *PDISK_SIGNATURE;
  239. typedef struct _TXN_PARAMETER_BLOCK {
  240. USHORT Length;
  241. USHORT TxFsContext;
  242. PVOID TransactionObject;
  243. } TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
  244. #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
  245. typedef struct _IO_DRIVER_CREATE_CONTEXT {
  246. CSHORT Size;
  247. struct _ECP_LIST *ExtraCreateParameter;
  248. PVOID DeviceObjectHint;
  249. PTXN_PARAMETER_BLOCK TxnParameters;
  250. } IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
  251. typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
  252. USHORT Size;
  253. USHORT Version;
  254. PVOID Context;
  255. PINTERFACE_REFERENCE InterfaceReference;
  256. PINTERFACE_DEREFERENCE InterfaceDereference;
  257. PGET_SET_DEVICE_DATA SetBusData;
  258. PGET_SET_DEVICE_DATA GetBusData;
  259. UCHAR CapabilityID;
  260. } AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
  261. typedef NTSTATUS
  262. (NTAPI *PGET_LOCATION_STRING)(
  263. IN OUT PVOID Context OPTIONAL,
  264. OUT PWCHAR *LocationStrings);
  265. typedef struct _PNP_LOCATION_INTERFACE {
  266. USHORT Size;
  267. USHORT Version;
  268. PVOID Context;
  269. PINTERFACE_REFERENCE InterfaceReference;
  270. PINTERFACE_DEREFERENCE InterfaceDereference;
  271. PGET_LOCATION_STRING GetLocationString;
  272. } PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
  273. typedef enum _ARBITER_ACTION {
  274. ArbiterActionTestAllocation,
  275. ArbiterActionRetestAllocation,
  276. ArbiterActionCommitAllocation,
  277. ArbiterActionRollbackAllocation,
  278. ArbiterActionQueryAllocatedResources,
  279. ArbiterActionWriteReservedResources,
  280. ArbiterActionQueryConflict,
  281. ArbiterActionQueryArbitrate,
  282. ArbiterActionAddReserved,
  283. ArbiterActionBootAllocation
  284. } ARBITER_ACTION, *PARBITER_ACTION;
  285. typedef struct _ARBITER_CONFLICT_INFO {
  286. PDEVICE_OBJECT OwningObject;
  287. ULONGLONG Start;
  288. ULONGLONG End;
  289. } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
  290. typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
  291. IN OUT PLIST_ENTRY ArbitrationList;
  292. IN ULONG AllocateFromCount;
  293. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
  294. } ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
  295. typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
  296. IN OUT PLIST_ENTRY ArbitrationList;
  297. IN ULONG AllocateFromCount;
  298. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
  299. } ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
  300. typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
  301. IN OUT PLIST_ENTRY ArbitrationList;
  302. } ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
  303. typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
  304. OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
  305. } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
  306. typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
  307. IN PDEVICE_OBJECT PhysicalDeviceObject;
  308. IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
  309. OUT PULONG ConflictCount;
  310. OUT PARBITER_CONFLICT_INFO *Conflicts;
  311. } ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
  312. typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
  313. IN PLIST_ENTRY ArbitrationList;
  314. } ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
  315. typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
  316. IN PDEVICE_OBJECT ReserveDevice;
  317. } ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
  318. typedef struct _ARBITER_PARAMETERS {
  319. union {
  320. ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
  321. ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
  322. ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
  323. ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
  324. ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
  325. ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
  326. ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
  327. } Parameters;
  328. } ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
  329. typedef enum _ARBITER_REQUEST_SOURCE {
  330. ArbiterRequestUndefined = -1,
  331. ArbiterRequestLegacyReported,
  332. ArbiterRequestHalReported,
  333. ArbiterRequestLegacyAssigned,
  334. ArbiterRequestPnpDetected,
  335. ArbiterRequestPnpEnumerated
  336. } ARBITER_REQUEST_SOURCE;
  337. typedef enum _ARBITER_RESULT {
  338. ArbiterResultUndefined = -1,
  339. ArbiterResultSuccess,
  340. ArbiterResultExternalConflict,
  341. ArbiterResultNullRequest
  342. } ARBITER_RESULT;
  343. #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
  344. typedef struct _ARBITER_LIST_ENTRY {
  345. LIST_ENTRY ListEntry;
  346. ULONG AlternativeCount;
  347. PIO_RESOURCE_DESCRIPTOR Alternatives;
  348. PDEVICE_OBJECT PhysicalDeviceObject;
  349. ARBITER_REQUEST_SOURCE RequestSource;
  350. ULONG Flags;
  351. LONG_PTR WorkSpace;
  352. INTERFACE_TYPE InterfaceType;
  353. ULONG SlotNumber;
  354. ULONG BusNumber;
  355. PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
  356. PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
  357. ARBITER_RESULT Result;
  358. } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
  359. typedef NTSTATUS
  360. (NTAPI *PARBITER_HANDLER)(
  361. IN OUT PVOID Context,
  362. IN ARBITER_ACTION Action,
  363. IN OUT PARBITER_PARAMETERS Parameters);
  364. #define ARBITER_PARTIAL 0x00000001
  365. typedef struct _ARBITER_INTERFACE {
  366. USHORT Size;
  367. USHORT Version;
  368. PVOID Context;
  369. PINTERFACE_REFERENCE InterfaceReference;
  370. PINTERFACE_DEREFERENCE InterfaceDereference;
  371. PARBITER_HANDLER ArbiterHandler;
  372. ULONG Flags;
  373. } ARBITER_INTERFACE, *PARBITER_INTERFACE;
  374. typedef enum _RESOURCE_TRANSLATION_DIRECTION {
  375. TranslateChildToParent,
  376. TranslateParentToChild
  377. } RESOURCE_TRANSLATION_DIRECTION;
  378. typedef NTSTATUS
  379. (NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
  380. IN OUT PVOID Context OPTIONAL,
  381. IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
  382. IN RESOURCE_TRANSLATION_DIRECTION Direction,
  383. IN ULONG AlternativesCount OPTIONAL,
  384. IN IO_RESOURCE_DESCRIPTOR Alternatives[],
  385. IN PDEVICE_OBJECT PhysicalDeviceObject,
  386. OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
  387. typedef NTSTATUS
  388. (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
  389. IN OUT PVOID Context OPTIONAL,
  390. IN PIO_RESOURCE_DESCRIPTOR Source,
  391. IN PDEVICE_OBJECT PhysicalDeviceObject,
  392. OUT PULONG TargetCount,
  393. OUT PIO_RESOURCE_DESCRIPTOR *Target);
  394. typedef struct _TRANSLATOR_INTERFACE {
  395. USHORT Size;
  396. USHORT Version;
  397. PVOID Context;
  398. PINTERFACE_REFERENCE InterfaceReference;
  399. PINTERFACE_DEREFERENCE InterfaceDereference;
  400. PTRANSLATE_RESOURCE_HANDLER TranslateResources;
  401. PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
  402. } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
  403. typedef struct _PCI_AGP_CAPABILITY {
  404. PCI_CAPABILITIES_HEADER Header;
  405. USHORT Minor:4;
  406. USHORT Major:4;
  407. USHORT Rsvd1:8;
  408. struct _PCI_AGP_STATUS {
  409. ULONG Rate:3;
  410. ULONG Agp3Mode:1;
  411. ULONG FastWrite:1;
  412. ULONG FourGB:1;
  413. ULONG HostTransDisable:1;
  414. ULONG Gart64:1;
  415. ULONG ITA_Coherent:1;
  416. ULONG SideBandAddressing:1;
  417. ULONG CalibrationCycle:3;
  418. ULONG AsyncRequestSize:3;
  419. ULONG Rsvd1:1;
  420. ULONG Isoch:1;
  421. ULONG Rsvd2:6;
  422. ULONG RequestQueueDepthMaximum:8;
  423. } AGPStatus;
  424. struct _PCI_AGP_COMMAND {
  425. ULONG Rate:3;
  426. ULONG Rsvd1:1;
  427. ULONG FastWriteEnable:1;
  428. ULONG FourGBEnable:1;
  429. ULONG Rsvd2:1;
  430. ULONG Gart64:1;
  431. ULONG AGPEnable:1;
  432. ULONG SBAEnable:1;
  433. ULONG CalibrationCycle:3;
  434. ULONG AsyncReqSize:3;
  435. ULONG Rsvd3:8;
  436. ULONG RequestQueueDepth:8;
  437. } AGPCommand;
  438. } PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
  439. typedef enum _EXTENDED_AGP_REGISTER {
  440. IsochStatus,
  441. AgpControl,
  442. ApertureSize,
  443. AperturePageSize,
  444. GartLow,
  445. GartHigh,
  446. IsochCommand
  447. } EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
  448. typedef struct _PCI_AGP_ISOCH_STATUS {
  449. ULONG ErrorCode:2;
  450. ULONG Rsvd1:1;
  451. ULONG Isoch_L:3;
  452. ULONG Isoch_Y:2;
  453. ULONG Isoch_N:8;
  454. ULONG Rsvd2:16;
  455. } PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
  456. typedef struct _PCI_AGP_CONTROL {
  457. ULONG Rsvd1:7;
  458. ULONG GTLB_Enable:1;
  459. ULONG AP_Enable:1;
  460. ULONG CAL_Disable:1;
  461. ULONG Rsvd2:22;
  462. } PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
  463. typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
  464. USHORT PageSizeMask:11;
  465. USHORT Rsvd1:1;
  466. USHORT PageSizeSelect:4;
  467. } PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
  468. typedef struct _PCI_AGP_ISOCH_COMMAND {
  469. USHORT Rsvd1:6;
  470. USHORT Isoch_Y:2;
  471. USHORT Isoch_N:8;
  472. } PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
  473. typedef struct PCI_AGP_EXTENDED_CAPABILITY {
  474. PCI_AGP_ISOCH_STATUS IsochStatus;
  475. PCI_AGP_CONTROL AgpControl;
  476. USHORT ApertureSize;
  477. PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
  478. ULONG GartLow;
  479. ULONG GartHigh;
  480. PCI_AGP_ISOCH_COMMAND IsochCommand;
  481. } PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
  482. #define PCI_AGP_RATE_1X 0x1
  483. #define PCI_AGP_RATE_2X 0x2
  484. #define PCI_AGP_RATE_4X 0x4
  485. #define PCIX_MODE_CONVENTIONAL_PCI 0x0
  486. #define PCIX_MODE1_66MHZ 0x1
  487. #define PCIX_MODE1_100MHZ 0x2
  488. #define PCIX_MODE1_133MHZ 0x3
  489. #define PCIX_MODE2_266_66MHZ 0x9
  490. #define PCIX_MODE2_266_100MHZ 0xA
  491. #define PCIX_MODE2_266_133MHZ 0xB
  492. #define PCIX_MODE2_533_66MHZ 0xD
  493. #define PCIX_MODE2_533_100MHZ 0xE
  494. #define PCIX_MODE2_533_133MHZ 0xF
  495. #define PCIX_VERSION_MODE1_ONLY 0x0
  496. #define PCIX_VERSION_MODE2_ECC 0x1
  497. #define PCIX_VERSION_DUAL_MODE_ECC 0x2
  498. typedef struct _PCIX_BRIDGE_CAPABILITY {
  499. PCI_CAPABILITIES_HEADER Header;
  500. union {
  501. _ANONYMOUS_STRUCT struct {
  502. USHORT Bus64Bit:1;
  503. USHORT Bus133MHzCapable:1;
  504. USHORT SplitCompletionDiscarded:1;
  505. USHORT UnexpectedSplitCompletion:1;
  506. USHORT SplitCompletionOverrun:1;
  507. USHORT SplitRequestDelayed:1;
  508. USHORT BusModeFrequency:4;
  509. USHORT Rsvd:2;
  510. USHORT Version:2;
  511. USHORT Bus266MHzCapable:1;
  512. USHORT Bus533MHzCapable:1;
  513. } DUMMYSTRUCTNAME;
  514. USHORT AsUSHORT;
  515. } SecondaryStatus;
  516. union {
  517. _ANONYMOUS_STRUCT struct {
  518. ULONG FunctionNumber:3;
  519. ULONG DeviceNumber:5;
  520. ULONG BusNumber:8;
  521. ULONG Device64Bit:1;
  522. ULONG Device133MHzCapable:1;
  523. ULONG SplitCompletionDiscarded:1;
  524. ULONG UnexpectedSplitCompletion:1;
  525. ULONG SplitCompletionOverrun:1;
  526. ULONG SplitRequestDelayed:1;
  527. ULONG Rsvd:7;
  528. ULONG DIMCapable:1;
  529. ULONG Device266MHzCapable:1;
  530. ULONG Device533MHzCapable:1;
  531. } DUMMYSTRUCTNAME;
  532. ULONG AsULONG;
  533. } BridgeStatus;
  534. USHORT UpstreamSplitTransactionCapacity;
  535. USHORT UpstreamSplitTransactionLimit;
  536. USHORT DownstreamSplitTransactionCapacity;
  537. USHORT DownstreamSplitTransactionLimit;
  538. union {
  539. _ANONYMOUS_STRUCT struct {
  540. ULONG SelectSecondaryRegisters:1;
  541. ULONG ErrorPresentInOtherBank:1;
  542. ULONG AdditionalCorrectableError:1;
  543. ULONG AdditionalUncorrectableError:1;
  544. ULONG ErrorPhase:3;
  545. ULONG ErrorCorrected:1;
  546. ULONG Syndrome:8;
  547. ULONG ErrorFirstCommand:4;
  548. ULONG ErrorSecondCommand:4;
  549. ULONG ErrorUpperAttributes:4;
  550. ULONG ControlUpdateEnable:1;
  551. ULONG Rsvd:1;
  552. ULONG DisableSingleBitCorrection:1;
  553. ULONG EccMode:1;
  554. } DUMMYSTRUCTNAME;
  555. ULONG AsULONG;
  556. } EccControlStatus;
  557. ULONG EccFirstAddress;
  558. ULONG EccSecondAddress;
  559. ULONG EccAttribute;
  560. } PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
  561. typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
  562. PCI_CAPABILITIES_HEADER Header;
  563. USHORT Reserved;
  564. USHORT SubVendorID;
  565. USHORT SubSystemID;
  566. } PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
  567. #define OSC_FIRMWARE_FAILURE 0x02
  568. #define OSC_UNRECOGNIZED_UUID 0x04
  569. #define OSC_UNRECOGNIZED_REVISION 0x08
  570. #define OSC_CAPABILITIES_MASKED 0x10
  571. #define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION 0x01
  572. typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
  573. union {
  574. _ANONYMOUS_STRUCT struct {
  575. ULONG ExtendedConfigOpRegions:1;
  576. ULONG ActiveStatePowerManagement:1;
  577. ULONG ClockPowerManagement:1;
  578. ULONG SegmentGroups:1;
  579. ULONG MessageSignaledInterrupts:1;
  580. ULONG WindowsHardwareErrorArchitecture:1;
  581. ULONG Reserved:26;
  582. } DUMMYSTRUCTNAME;
  583. ULONG AsULONG;
  584. } u;
  585. } PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
  586. typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
  587. union {
  588. _ANONYMOUS_STRUCT struct {
  589. ULONG ExpressNativeHotPlug:1;
  590. ULONG ShpcNativeHotPlug:1;
  591. ULONG ExpressNativePME:1;
  592. ULONG ExpressAdvancedErrorReporting:1;
  593. ULONG ExpressCapabilityStructure:1;
  594. ULONG Reserved:27;
  595. } DUMMYSTRUCTNAME;
  596. ULONG AsULONG;
  597. } u;
  598. } PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
  599. typedef enum _PCI_HARDWARE_INTERFACE {
  600. PciConventional,
  601. PciXMode1,
  602. PciXMode2,
  603. PciExpress
  604. } PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
  605. typedef enum {
  606. BusWidth32Bits,
  607. BusWidth64Bits
  608. } PCI_BUS_WIDTH;
  609. typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
  610. PCI_HARDWARE_INTERFACE SecondaryInterface;
  611. _ANONYMOUS_STRUCT struct {
  612. BOOLEAN BusCapabilitiesFound;
  613. ULONG CurrentSpeedAndMode;
  614. ULONG SupportedSpeedsAndModes;
  615. BOOLEAN DeviceIDMessagingCapable;
  616. PCI_BUS_WIDTH SecondaryBusWidth;
  617. } DUMMYSTRUCTNAME;
  618. PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
  619. PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
  620. PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
  621. } PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
  622. typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
  623. _ANONYMOUS_STRUCT struct {
  624. USHORT CapabilityVersion:4;
  625. USHORT DeviceType:4;
  626. USHORT SlotImplemented:1;
  627. USHORT InterruptMessageNumber:5;
  628. USHORT Rsvd:2;
  629. } DUMMYSTRUCTNAME;
  630. USHORT AsUSHORT;
  631. } PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
  632. typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
  633. _ANONYMOUS_STRUCT struct {
  634. ULONG MaxPayloadSizeSupported:3;
  635. ULONG PhantomFunctionsSupported:2;
  636. ULONG ExtendedTagSupported:1;
  637. ULONG L0sAcceptableLatency:3;
  638. ULONG L1AcceptableLatency:3;
  639. ULONG Undefined:3;
  640. ULONG RoleBasedErrorReporting:1;
  641. ULONG Rsvd1:2;
  642. ULONG CapturedSlotPowerLimit:8;
  643. ULONG CapturedSlotPowerLimitScale:2;
  644. ULONG Rsvd2:4;
  645. } DUMMYSTRUCTNAME;
  646. ULONG AsULONG;
  647. } PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
  648. #define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
  649. typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
  650. _ANONYMOUS_STRUCT struct {
  651. USHORT CorrectableErrorEnable:1;
  652. USHORT NonFatalErrorEnable:1;
  653. USHORT FatalErrorEnable:1;
  654. USHORT UnsupportedRequestErrorEnable:1;
  655. USHORT EnableRelaxedOrder:1;
  656. USHORT MaxPayloadSize:3;
  657. USHORT ExtendedTagEnable:1;
  658. USHORT PhantomFunctionsEnable:1;
  659. USHORT AuxPowerEnable:1;
  660. USHORT NoSnoopEnable:1;
  661. USHORT MaxReadRequestSize:3;
  662. USHORT BridgeConfigRetryEnable:1;
  663. } DUMMYSTRUCTNAME;
  664. USHORT AsUSHORT;
  665. } PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
  666. #define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
  667. typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
  668. _ANONYMOUS_STRUCT struct {
  669. USHORT CorrectableErrorDetected:1;
  670. USHORT NonFatalErrorDetected:1;
  671. USHORT FatalErrorDetected:1;
  672. USHORT UnsupportedRequestDetected:1;
  673. USHORT AuxPowerDetected:1;
  674. USHORT TransactionsPending:1;
  675. USHORT Rsvd:10;
  676. } DUMMYSTRUCTNAME;
  677. USHORT AsUSHORT;
  678. } PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
  679. typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
  680. _ANONYMOUS_STRUCT struct {
  681. ULONG MaximumLinkSpeed:4;
  682. ULONG MaximumLinkWidth:6;
  683. ULONG ActiveStatePMSupport:2;
  684. ULONG L0sExitLatency:3;
  685. ULONG L1ExitLatency:3;
  686. ULONG ClockPowerManagement:1;
  687. ULONG SurpriseDownErrorReportingCapable:1;
  688. ULONG DataLinkLayerActiveReportingCapable:1;
  689. ULONG Rsvd:3;
  690. ULONG PortNumber:8;
  691. } DUMMYSTRUCTNAME;
  692. ULONG AsULONG;
  693. } PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
  694. typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
  695. _ANONYMOUS_STRUCT struct {
  696. USHORT ActiveStatePMControl:2;
  697. USHORT Rsvd1:1;
  698. USHORT ReadCompletionBoundary:1;
  699. USHORT LinkDisable:1;
  700. USHORT RetrainLink:1;
  701. USHORT CommonClockConfig:1;
  702. USHORT ExtendedSynch:1;
  703. USHORT EnableClockPowerManagement:1;
  704. USHORT Rsvd2:7;
  705. } DUMMYSTRUCTNAME;
  706. USHORT AsUSHORT;
  707. } PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
  708. typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
  709. _ANONYMOUS_STRUCT struct {
  710. USHORT LinkSpeed:4;
  711. USHORT LinkWidth:6;
  712. USHORT Undefined:1;
  713. USHORT LinkTraining:1;
  714. USHORT SlotClockConfig:1;
  715. USHORT DataLinkLayerActive:1;
  716. USHORT Rsvd:2;
  717. } DUMMYSTRUCTNAME;
  718. USHORT AsUSHORT;
  719. } PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
  720. typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
  721. _ANONYMOUS_STRUCT struct {
  722. ULONG AttentionButtonPresent:1;
  723. ULONG PowerControllerPresent:1;
  724. ULONG MRLSensorPresent:1;
  725. ULONG AttentionIndicatorPresent:1;
  726. ULONG PowerIndicatorPresent:1;
  727. ULONG HotPlugSurprise:1;
  728. ULONG HotPlugCapable:1;
  729. ULONG SlotPowerLimit:8;
  730. ULONG SlotPowerLimitScale:2;
  731. ULONG ElectromechanicalLockPresent:1;
  732. ULONG NoCommandCompletedSupport:1;
  733. ULONG PhysicalSlotNumber:13;
  734. } DUMMYSTRUCTNAME;
  735. ULONG AsULONG;
  736. } PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
  737. typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
  738. _ANONYMOUS_STRUCT struct {
  739. USHORT AttentionButtonEnable:1;
  740. USHORT PowerFaultDetectEnable:1;
  741. USHORT MRLSensorEnable:1;
  742. USHORT PresenceDetectEnable:1;
  743. USHORT CommandCompletedEnable:1;
  744. USHORT HotPlugInterruptEnable:1;
  745. USHORT AttentionIndicatorControl:2;
  746. USHORT PowerIndicatorControl:2;
  747. USHORT PowerControllerControl:1;
  748. USHORT ElectromechanicalLockControl:1;
  749. USHORT DataLinkStateChangeEnable:1;
  750. USHORT Rsvd:3;
  751. } DUMMYSTRUCTNAME;
  752. USHORT AsUSHORT;
  753. } PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
  754. typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
  755. _ANONYMOUS_STRUCT struct {
  756. USHORT AttentionButtonPressed:1;
  757. USHORT PowerFaultDetected:1;
  758. USHORT MRLSensorChanged:1;
  759. USHORT PresenceDetectChanged:1;
  760. USHORT CommandCompleted:1;
  761. USHORT MRLSensorState:1;
  762. USHORT PresenceDetectState:1;
  763. USHORT ElectromechanicalLockEngaged:1;
  764. USHORT DataLinkStateChanged:1;
  765. USHORT Rsvd:7;
  766. } DUMMYSTRUCTNAME;
  767. USHORT AsUSHORT;
  768. } PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
  769. typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
  770. _ANONYMOUS_STRUCT struct {
  771. USHORT CorrectableSerrEnable:1;
  772. USHORT NonFatalSerrEnable:1;
  773. USHORT FatalSerrEnable:1;
  774. USHORT PMEInterruptEnable:1;
  775. USHORT CRSSoftwareVisibilityEnable:1;
  776. USHORT Rsvd:11;
  777. } DUMMYSTRUCTNAME;
  778. USHORT AsUSHORT;
  779. } PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
  780. typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
  781. _ANONYMOUS_STRUCT struct {
  782. USHORT CRSSoftwareVisibility:1;
  783. USHORT Rsvd:15;
  784. } DUMMYSTRUCTNAME;
  785. USHORT AsUSHORT;
  786. } PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
  787. typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
  788. _ANONYMOUS_STRUCT struct {
  789. ULONG PMERequestorId:16;
  790. ULONG PMEStatus:1;
  791. ULONG PMEPending:1;
  792. ULONG Rsvd:14;
  793. } DUMMYSTRUCTNAME;
  794. ULONG AsULONG;
  795. } PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
  796. typedef struct _PCI_EXPRESS_CAPABILITY {
  797. PCI_CAPABILITIES_HEADER Header;
  798. PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
  799. PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
  800. PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
  801. PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
  802. PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
  803. PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
  804. PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
  805. PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
  806. PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
  807. PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
  808. PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
  809. PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
  810. PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
  811. } PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
  812. typedef enum {
  813. MRLClosed = 0,
  814. MRLOpen
  815. } PCI_EXPRESS_MRL_STATE;
  816. typedef enum {
  817. SlotEmpty = 0,
  818. CardPresent
  819. } PCI_EXPRESS_CARD_PRESENCE;
  820. typedef enum {
  821. IndicatorOn = 1,
  822. IndicatorBlink,
  823. IndicatorOff
  824. } PCI_EXPRESS_INDICATOR_STATE;
  825. typedef enum {
  826. PowerOn = 0,
  827. PowerOff
  828. } PCI_EXPRESS_POWER_STATE;
  829. typedef enum {
  830. L0sEntrySupport = 1,
  831. L0sAndL1EntrySupport = 3
  832. } PCI_EXPRESS_ASPM_SUPPORT;
  833. typedef enum {
  834. L0sAndL1EntryDisabled,
  835. L0sEntryEnabled,
  836. L1EntryEnabled,
  837. L0sAndL1EntryEnabled
  838. } PCI_EXPRESS_ASPM_CONTROL;
  839. typedef enum {
  840. L0s_Below64ns = 0,
  841. L0s_64ns_128ns,
  842. L0s_128ns_256ns,
  843. L0s_256ns_512ns,
  844. L0s_512ns_1us,
  845. L0s_1us_2us,
  846. L0s_2us_4us,
  847. L0s_Above4us
  848. } PCI_EXPRESS_L0s_EXIT_LATENCY;
  849. typedef enum {
  850. L1_Below1us = 0,
  851. L1_1us_2us,
  852. L1_2us_4us,
  853. L1_4us_8us,
  854. L1_8us_16us,
  855. L1_16us_32us,
  856. L1_32us_64us,
  857. L1_Above64us
  858. } PCI_EXPRESS_L1_EXIT_LATENCY;
  859. typedef enum {
  860. PciExpressEndpoint = 0,
  861. PciExpressLegacyEndpoint,
  862. PciExpressRootPort = 4,
  863. PciExpressUpstreamSwitchPort,
  864. PciExpressDownstreamSwitchPort,
  865. PciExpressToPciXBridge,
  866. PciXToExpressBridge,
  867. PciExpressRootComplexIntegratedEndpoint,
  868. PciExpressRootComplexEventCollector
  869. } PCI_EXPRESS_DEVICE_TYPE;
  870. typedef enum {
  871. MaxPayload128Bytes = 0,
  872. MaxPayload256Bytes,
  873. MaxPayload512Bytes,
  874. MaxPayload1024Bytes,
  875. MaxPayload2048Bytes,
  876. MaxPayload4096Bytes
  877. } PCI_EXPRESS_MAX_PAYLOAD_SIZE;
  878. typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
  879. _ANONYMOUS_STRUCT struct {
  880. USHORT FunctionNumber:3;
  881. USHORT DeviceNumber:5;
  882. USHORT BusNumber:8;
  883. } DUMMYSTRUCTNAME;
  884. USHORT AsUSHORT;
  885. } PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
  886. typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
  887. ResourceTypeSingle = 0,
  888. ResourceTypeRange,
  889. ResourceTypeExtendedCounterConfiguration,
  890. ResourceTypeOverflow,
  891. ResourceTypeMax
  892. } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
  893. typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
  894. PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
  895. ULONG Flags;
  896. union {
  897. ULONG CounterIndex;
  898. ULONG ExtendedRegisterAddress;
  899. struct {
  900. ULONG Begin;
  901. ULONG End;
  902. } Range;
  903. } u;
  904. } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
  905. typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
  906. ULONG Count;
  907. PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
  908. } PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
  909. typedef VOID
  910. (NTAPI *PciPin2Line)(
  911. IN struct _BUS_HANDLER *BusHandler,
  912. IN struct _BUS_HANDLER *RootHandler,
  913. IN PCI_SLOT_NUMBER SlotNumber,
  914. IN PPCI_COMMON_CONFIG PciData);
  915. typedef VOID
  916. (NTAPI *PciLine2Pin)(
  917. IN struct _BUS_HANDLER *BusHandler,
  918. IN struct _BUS_HANDLER *RootHandler,
  919. IN PCI_SLOT_NUMBER SlotNumber,
  920. IN PPCI_COMMON_CONFIG PciNewData,
  921. IN PPCI_COMMON_CONFIG PciOldData);
  922. typedef VOID
  923. (NTAPI *PciReadWriteConfig)(
  924. IN struct _BUS_HANDLER *BusHandler,
  925. IN PCI_SLOT_NUMBER Slot,
  926. IN PVOID Buffer,
  927. IN ULONG Offset,
  928. IN ULONG Length);
  929. #define PCI_DATA_TAG ' ICP'
  930. #define PCI_DATA_VERSION 1
  931. typedef struct _PCIBUSDATA {
  932. ULONG Tag;
  933. ULONG Version;
  934. PciReadWriteConfig ReadConfig;
  935. PciReadWriteConfig WriteConfig;
  936. PciPin2Line Pin2Line;
  937. PciLine2Pin Line2Pin;
  938. PCI_SLOT_NUMBER ParentSlot;
  939. PVOID Reserved[4];
  940. } PCIBUSDATA, *PPCIBUSDATA;
  941. #ifndef _PCIINTRF_X_
  942. #define _PCIINTRF_X_
  943. typedef ULONG
  944. (NTAPI *PCI_READ_WRITE_CONFIG)(
  945. IN PVOID Context,
  946. IN ULONG BusOffset,
  947. IN ULONG Slot,
  948. IN PVOID Buffer,
  949. IN ULONG Offset,
  950. IN ULONG Length);
  951. typedef VOID
  952. (NTAPI *PCI_PIN_TO_LINE)(
  953. IN PVOID Context,
  954. IN PPCI_COMMON_CONFIG PciData);
  955. typedef VOID
  956. (NTAPI *PCI_LINE_TO_PIN)(
  957. IN PVOID Context,
  958. IN PPCI_COMMON_CONFIG PciNewData,
  959. IN PPCI_COMMON_CONFIG PciOldData);
  960. typedef VOID
  961. (NTAPI *PCI_ROOT_BUS_CAPABILITY)(
  962. IN PVOID Context,
  963. OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
  964. typedef VOID
  965. (NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
  966. IN PVOID Context,
  967. IN BOOLEAN EnableWake);
  968. typedef struct _PCI_BUS_INTERFACE_STANDARD {
  969. USHORT Size;
  970. USHORT Version;
  971. PVOID Context;
  972. PINTERFACE_REFERENCE InterfaceReference;
  973. PINTERFACE_DEREFERENCE InterfaceDereference;
  974. PCI_READ_WRITE_CONFIG ReadConfig;
  975. PCI_READ_WRITE_CONFIG WriteConfig;
  976. PCI_PIN_TO_LINE PinToLine;
  977. PCI_LINE_TO_PIN LineToPin;
  978. PCI_ROOT_BUS_CAPABILITY RootBusCapability;
  979. PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
  980. } PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
  981. #define PCI_BUS_INTERFACE_STANDARD_VERSION 1
  982. #endif /* _PCIINTRF_X_ */
  983. #if (NTDDI_VERSION >= NTDDI_WIN7)
  984. #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
  985. #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
  986. #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
  987. (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
  988. FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
  989. #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
  990. #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
  991. #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
  992. #else
  993. #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
  994. #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
  995. #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
  996. #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
  997. #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
  998. #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
  999. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  1000. #define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA | \
  1001. FILE_READ_ONLY_DEVICE | \
  1002. FILE_FLOPPY_DISKETTE | \
  1003. FILE_WRITE_ONCE_MEDIA | \
  1004. FILE_DEVICE_SECURE_OPEN)
  1005. typedef struct _FILE_ALIGNMENT_INFORMATION {
  1006. ULONG AlignmentRequirement;
  1007. } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
  1008. typedef struct _FILE_NAME_INFORMATION {
  1009. ULONG FileNameLength;
  1010. WCHAR FileName[1];
  1011. } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
  1012. typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
  1013. ULONG FileAttributes;
  1014. ULONG ReparseTag;
  1015. } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
  1016. typedef struct _FILE_DISPOSITION_INFORMATION {
  1017. BOOLEAN DeleteFile;
  1018. } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
  1019. typedef struct _FILE_END_OF_FILE_INFORMATION {
  1020. LARGE_INTEGER EndOfFile;
  1021. } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
  1022. typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
  1023. LARGE_INTEGER ValidDataLength;
  1024. } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
  1025. typedef struct _FILE_FS_LABEL_INFORMATION {
  1026. ULONG VolumeLabelLength;
  1027. WCHAR VolumeLabel[1];
  1028. } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
  1029. typedef struct _FILE_FS_VOLUME_INFORMATION {
  1030. LARGE_INTEGER VolumeCreationTime;
  1031. ULONG VolumeSerialNumber;
  1032. ULONG VolumeLabelLength;
  1033. BOOLEAN SupportsObjects;
  1034. WCHAR VolumeLabel[1];
  1035. } FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
  1036. typedef struct _FILE_FS_SIZE_INFORMATION {
  1037. LARGE_INTEGER TotalAllocationUnits;
  1038. LARGE_INTEGER AvailableAllocationUnits;
  1039. ULONG SectorsPerAllocationUnit;
  1040. ULONG BytesPerSector;
  1041. } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
  1042. typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
  1043. LARGE_INTEGER TotalAllocationUnits;
  1044. LARGE_INTEGER CallerAvailableAllocationUnits;
  1045. LARGE_INTEGER ActualAvailableAllocationUnits;
  1046. ULONG SectorsPerAllocationUnit;
  1047. ULONG BytesPerSector;
  1048. } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
  1049. typedef struct _FILE_FS_OBJECTID_INFORMATION {
  1050. UCHAR ObjectId[16];
  1051. UCHAR ExtendedInfo[48];
  1052. } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
  1053. typedef union _FILE_SEGMENT_ELEMENT {
  1054. PVOID64 Buffer;
  1055. ULONGLONG Alignment;
  1056. }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
  1057. #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1058. #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1059. #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1060. typedef enum _BUS_DATA_TYPE {
  1061. ConfigurationSpaceUndefined = -1,
  1062. Cmos,
  1063. EisaConfiguration,
  1064. Pos,
  1065. CbusConfiguration,
  1066. PCIConfiguration,
  1067. VMEConfiguration,
  1068. NuBusConfiguration,
  1069. PCMCIAConfiguration,
  1070. MPIConfiguration,
  1071. MPSAConfiguration,
  1072. PNPISAConfiguration,
  1073. SgiInternalConfiguration,
  1074. MaximumBusDataType
  1075. } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
  1076. /* Some Server 2003 DDK definitions */
  1077. #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
  1078. typedef NTSTATUS
  1079. (NTAPI *PLEGACY_DEVICE_DETECTION_HANDLER)(
  1080. IN PVOID Context,
  1081. IN INTERFACE_TYPE LegacyBusType,
  1082. IN ULONG BusNumber,
  1083. IN ULONG SlotNumber,
  1084. OUT PDEVICE_OBJECT *PhysicalDeviceObject);
  1085. typedef struct _ROUTING_TOKEN {
  1086. PVOID LinkNode;
  1087. ULONG StaticVector;
  1088. UCHAR Flags;
  1089. } ROUTING_TOKEN, *PROUTING_TOKEN;
  1090. typedef NTSTATUS
  1091. (NTAPI *PGET_INTERRUPT_ROUTING)(
  1092. IN PDEVICE_OBJECT Pdo,
  1093. OUT ULONG *Bus,
  1094. OUT ULONG *PciSlot,
  1095. OUT UCHAR *InterruptLine,
  1096. OUT UCHAR *InterruptPin,
  1097. OUT UCHAR *ClassCode,
  1098. OUT UCHAR *SubClassCode,
  1099. OUT PDEVICE_OBJECT *ParentPdo,
  1100. OUT ROUTING_TOKEN *RoutingToken,
  1101. OUT UCHAR *Flags);
  1102. typedef NTSTATUS
  1103. (NTAPI *PSET_INTERRUPT_ROUTING_TOKEN)(
  1104. IN PDEVICE_OBJECT Pdo,
  1105. IN PROUTING_TOKEN RoutingToken);
  1106. typedef VOID
  1107. (NTAPI *PUPDATE_INTERRUPT_LINE)(
  1108. IN PDEVICE_OBJECT Pdo,
  1109. IN UCHAR LineRegister);
  1110. typedef struct _INT_ROUTE_INTERFACE_STANDARD {
  1111. USHORT Size;
  1112. USHORT Version;
  1113. PVOID Context;
  1114. PINTERFACE_REFERENCE InterfaceReference;
  1115. PINTERFACE_DEREFERENCE InterfaceDereference;
  1116. PGET_INTERRUPT_ROUTING GetInterruptRouting;
  1117. PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken;
  1118. PUPDATE_INTERRUPT_LINE UpdateInterruptLine;
  1119. } INT_ROUTE_INTERFACE_STANDARD, *PINT_ROUTE_INTERFACE_STANDARD;
  1120. typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE {
  1121. USHORT Size;
  1122. USHORT Version;
  1123. PVOID Context;
  1124. PINTERFACE_REFERENCE InterfaceReference;
  1125. PINTERFACE_DEREFERENCE InterfaceDereference;
  1126. PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection;
  1127. } LEGACY_DEVICE_DETECTION_INTERFACE, *PLEGACY_DEVICE_DETECTION_INTERFACE;
  1128. /* FIXME : These definitions don't exist in public headers */
  1129. #define PCI_CB_INTRF_VERSION 1
  1130. #define PCI_PME_INTRF_STANDARD_VER 1
  1131. #define PNP_LOCATION_INTERFACE_VERSION 1
  1132. DEFINE_GUID(GUID_PCI_CARDBUS_INTERFACE_PRIVATE, 0xcca82f31, 0x54d6, 0x11d1, 0x82, 0x24, 0x00, 0xa0, 0xc9, 0x32, 0x43, 0x85);
  1133. DEFINE_GUID(GUID_PCI_PME_INTERFACE, 0xaac7e6ac, 0xbb0b, 0x11d2, 0xb4, 0x84, 0x00, 0xc0, 0x4f, 0x72, 0xde, 0x8b);
  1134. typedef NTSTATUS
  1135. (NTAPI *PCARDBUSADD)(
  1136. IN PDEVICE_OBJECT DeviceObject,
  1137. IN OUT PVOID *DeviceContext);
  1138. typedef NTSTATUS
  1139. (NTAPI *PCARDBUSDELETE)(
  1140. IN PVOID DeviceContext);
  1141. typedef NTSTATUS
  1142. (NTAPI *PCARDBUSPCIDISPATCH)(
  1143. IN PVOID DeviceContext,
  1144. IN PIRP Irp);
  1145. typedef VOID
  1146. (NTAPI *PPME_SET_PME_ENABLE)(
  1147. IN PDEVICE_OBJECT Pdo,
  1148. IN BOOLEAN PmeEnable);
  1149. typedef VOID
  1150. (NTAPI *PPME_CLEAR_PME_STATUS)(
  1151. IN PDEVICE_OBJECT Pdo);
  1152. typedef VOID
  1153. (NTAPI *PPME_GET_INFORMATION)(
  1154. IN PDEVICE_OBJECT Pdo,
  1155. OUT PBOOLEAN PmeCapable,
  1156. OUT PBOOLEAN PmeStatus,
  1157. OUT PBOOLEAN PmeEnable);
  1158. typedef struct _PCI_CARDBUS_INTERFACE_PRIVATE {
  1159. USHORT Size;
  1160. USHORT Version;
  1161. PVOID Context;
  1162. PINTERFACE_REFERENCE InterfaceReference;
  1163. PINTERFACE_DEREFERENCE InterfaceDereference;
  1164. PDRIVER_OBJECT DriverObject;
  1165. PCARDBUSADD AddCardBus;
  1166. PCARDBUSDELETE DeleteCardBus;
  1167. PCARDBUSPCIDISPATCH DispatchPnp;
  1168. } PCI_CARDBUS_INTERFACE_PRIVATE, *PPCI_CARDBUS_INTERFACE_PRIVATE;
  1169. typedef struct _PCI_PME_INTERFACE {
  1170. USHORT Size;
  1171. USHORT Version;
  1172. PVOID Context;
  1173. PINTERFACE_REFERENCE InterfaceReference;
  1174. PINTERFACE_DEREFERENCE InterfaceDereference;
  1175. PPME_GET_INFORMATION GetPmeInformation;
  1176. PPME_CLEAR_PME_STATUS ClearPmeStatus;
  1177. PPME_SET_PME_ENABLE UpdateEnable;
  1178. } PCI_PME_INTERFACE, *PPCI_PME_INTERFACE;
  1179. /* Hardware Abstraction Layer Types */
  1180. typedef BOOLEAN
  1181. (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
  1182. IN ULONG Columns,
  1183. IN ULONG Rows);
  1184. typedef PBUS_HANDLER
  1185. (FASTCALL *pHalHandlerForBus)(
  1186. IN INTERFACE_TYPE InterfaceType,
  1187. IN ULONG BusNumber);
  1188. typedef VOID
  1189. (FASTCALL *pHalReferenceBusHandler)(
  1190. IN PBUS_HANDLER BusHandler);
  1191. typedef enum _HAL_QUERY_INFORMATION_CLASS {
  1192. HalInstalledBusInformation,
  1193. HalProfileSourceInformation,
  1194. HalInformationClassUnused1,
  1195. HalPowerInformation,
  1196. HalProcessorSpeedInformation,
  1197. HalCallbackInformation,
  1198. HalMapRegisterInformation,
  1199. HalMcaLogInformation,
  1200. HalFrameBufferCachingInformation,
  1201. HalDisplayBiosInformation,
  1202. HalProcessorFeatureInformation,
  1203. HalNumaTopologyInterface,
  1204. HalErrorInformation,
  1205. HalCmcLogInformation,
  1206. HalCpeLogInformation,
  1207. HalQueryMcaInterface,
  1208. HalQueryAMLIIllegalIOPortAddresses,
  1209. HalQueryMaxHotPlugMemoryAddress,
  1210. HalPartitionIpiInterface,
  1211. HalPlatformInformation,
  1212. HalQueryProfileSourceList,
  1213. HalInitLogInformation,
  1214. HalFrequencyInformation,
  1215. HalProcessorBrandString,
  1216. HalHypervisorInformation,
  1217. HalPlatformTimerInformation,
  1218. HalAcpiAuditInformation
  1219. } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
  1220. typedef enum _HAL_SET_INFORMATION_CLASS {
  1221. HalProfileSourceInterval,
  1222. HalProfileSourceInterruptHandler,
  1223. HalMcaRegisterDriver,
  1224. HalKernelErrorHandler,
  1225. HalCmcRegisterDriver,
  1226. HalCpeRegisterDriver,
  1227. HalMcaLog,
  1228. HalCmcLog,
  1229. HalCpeLog,
  1230. HalGenerateCmcInterrupt,
  1231. HalProfileSourceTimerHandler,
  1232. HalEnlightenment,
  1233. HalProfileDpgoSourceInterruptHandler
  1234. } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
  1235. typedef NTSTATUS
  1236. (NTAPI *pHalQuerySystemInformation)(
  1237. IN HAL_QUERY_INFORMATION_CLASS InformationClass,
  1238. IN ULONG BufferSize,
  1239. IN OUT PVOID Buffer,
  1240. OUT PULONG ReturnedLength);
  1241. typedef NTSTATUS
  1242. (NTAPI *pHalSetSystemInformation)(
  1243. IN HAL_SET_INFORMATION_CLASS InformationClass,
  1244. IN ULONG BufferSize,
  1245. IN PVOID Buffer);
  1246. typedef VOID
  1247. (FASTCALL *pHalExamineMBR)(
  1248. IN PDEVICE_OBJECT DeviceObject,
  1249. IN ULONG SectorSize,
  1250. IN ULONG MBRTypeIdentifier,
  1251. OUT PVOID *Buffer);
  1252. typedef NTSTATUS
  1253. (FASTCALL *pHalIoReadPartitionTable)(
  1254. IN PDEVICE_OBJECT DeviceObject,
  1255. IN ULONG SectorSize,
  1256. IN BOOLEAN ReturnRecognizedPartitions,
  1257. OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
  1258. typedef NTSTATUS
  1259. (FASTCALL *pHalIoSetPartitionInformation)(
  1260. IN PDEVICE_OBJECT DeviceObject,
  1261. IN ULONG SectorSize,
  1262. IN ULONG PartitionNumber,
  1263. IN ULONG PartitionType);
  1264. typedef NTSTATUS
  1265. (FASTCALL *pHalIoWritePartitionTable)(
  1266. IN PDEVICE_OBJECT DeviceObject,
  1267. IN ULONG SectorSize,
  1268. IN ULONG SectorsPerTrack,
  1269. IN ULONG NumberOfHeads,
  1270. IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
  1271. typedef NTSTATUS
  1272. (NTAPI *pHalQueryBusSlots)(
  1273. IN PBUS_HANDLER BusHandler,
  1274. IN ULONG BufferSize,
  1275. OUT PULONG SlotNumbers,
  1276. OUT PULONG ReturnedLength);
  1277. typedef NTSTATUS
  1278. (NTAPI *pHalInitPnpDriver)(
  1279. VOID);
  1280. typedef struct _PM_DISPATCH_TABLE {
  1281. ULONG Signature;
  1282. ULONG Version;
  1283. PVOID Function[1];
  1284. } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
  1285. typedef NTSTATUS
  1286. (NTAPI *pHalInitPowerManagement)(
  1287. IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
  1288. OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
  1289. typedef struct _DMA_ADAPTER*
  1290. (NTAPI *pHalGetDmaAdapter)(
  1291. IN PVOID Context,
  1292. IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
  1293. OUT PULONG NumberOfMapRegisters);
  1294. typedef NTSTATUS
  1295. (NTAPI *pHalGetInterruptTranslator)(
  1296. IN INTERFACE_TYPE ParentInterfaceType,
  1297. IN ULONG ParentBusNumber,
  1298. IN INTERFACE_TYPE BridgeInterfaceType,
  1299. IN USHORT Size,
  1300. IN USHORT Version,
  1301. OUT PTRANSLATOR_INTERFACE Translator,
  1302. OUT PULONG BridgeBusNumber);
  1303. typedef NTSTATUS
  1304. (NTAPI *pHalStartMirroring)(
  1305. VOID);
  1306. typedef NTSTATUS
  1307. (NTAPI *pHalEndMirroring)(
  1308. IN ULONG PassNumber);
  1309. typedef NTSTATUS
  1310. (NTAPI *pHalMirrorPhysicalMemory)(
  1311. IN PHYSICAL_ADDRESS PhysicalAddress,
  1312. IN LARGE_INTEGER NumberOfBytes);
  1313. typedef NTSTATUS
  1314. (NTAPI *pHalMirrorVerify)(
  1315. IN PHYSICAL_ADDRESS PhysicalAddress,
  1316. IN LARGE_INTEGER NumberOfBytes);
  1317. typedef BOOLEAN
  1318. (NTAPI *pHalTranslateBusAddress)(
  1319. IN INTERFACE_TYPE InterfaceType,
  1320. IN ULONG BusNumber,
  1321. IN PHYSICAL_ADDRESS BusAddress,
  1322. IN OUT PULONG AddressSpace,
  1323. OUT PPHYSICAL_ADDRESS TranslatedAddress);
  1324. typedef NTSTATUS
  1325. (NTAPI *pHalAssignSlotResources)(
  1326. IN PUNICODE_STRING RegistryPath,
  1327. IN PUNICODE_STRING DriverClassName OPTIONAL,
  1328. IN PDRIVER_OBJECT DriverObject,
  1329. IN PDEVICE_OBJECT DeviceObject,
  1330. IN INTERFACE_TYPE BusType,
  1331. IN ULONG BusNumber,
  1332. IN ULONG SlotNumber,
  1333. IN OUT PCM_RESOURCE_LIST *AllocatedResources);
  1334. typedef VOID
  1335. (NTAPI *pHalHaltSystem)(
  1336. VOID);
  1337. typedef BOOLEAN
  1338. (NTAPI *pHalResetDisplay)(
  1339. VOID);
  1340. typedef struct _MAP_REGISTER_ENTRY {
  1341. PVOID MapRegister;
  1342. BOOLEAN WriteToDevice;
  1343. } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
  1344. typedef UCHAR
  1345. (NTAPI *pHalVectorToIDTEntry)(
  1346. ULONG Vector);
  1347. typedef BOOLEAN
  1348. (NTAPI *pHalFindBusAddressTranslation)(
  1349. IN PHYSICAL_ADDRESS BusAddress,
  1350. IN OUT PULONG AddressSpace,
  1351. OUT PPHYSICAL_ADDRESS TranslatedAddress,
  1352. IN OUT PULONG_PTR Context,
  1353. IN BOOLEAN NextBus);
  1354. typedef VOID
  1355. (NTAPI *pHalEndOfBoot)(
  1356. VOID);
  1357. typedef PVOID
  1358. (NTAPI *pHalGetAcpiTable)(
  1359. IN ULONG Signature,
  1360. IN PCSTR OemId OPTIONAL,
  1361. IN PCSTR OemTableId OPTIONAL);
  1362. #if defined(_IA64_)
  1363. typedef NTSTATUS
  1364. (*pHalGetErrorCapList)(
  1365. IN OUT PULONG CapsListLength,
  1366. IN OUT PUCHAR ErrorCapList);
  1367. typedef NTSTATUS
  1368. (*pHalInjectError)(
  1369. IN ULONG BufferLength,
  1370. IN PUCHAR Buffer);
  1371. #endif
  1372. typedef VOID
  1373. (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
  1374. VOID);
  1375. typedef VOID
  1376. (NTAPI *pHalSetPciErrorHandlerCallback)(
  1377. IN PCI_ERROR_HANDLER_CALLBACK Callback);
  1378. #if 1 /* Not present in WDK 7600 */
  1379. typedef VOID
  1380. (FASTCALL *pHalIoAssignDriveLetters)(
  1381. IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
  1382. IN PSTRING NtDeviceName,
  1383. OUT PUCHAR NtSystemPath,
  1384. OUT PSTRING NtSystemPathString);
  1385. #endif
  1386. typedef struct {
  1387. ULONG Version;
  1388. pHalQuerySystemInformation HalQuerySystemInformation;
  1389. pHalSetSystemInformation HalSetSystemInformation;
  1390. pHalQueryBusSlots HalQueryBusSlots;
  1391. ULONG Spare1;
  1392. pHalExamineMBR HalExamineMBR;
  1393. #if 1 /* Not present in WDK 7600 */
  1394. pHalIoAssignDriveLetters HalIoAssignDriveLetters;
  1395. #endif
  1396. pHalIoReadPartitionTable HalIoReadPartitionTable;
  1397. pHalIoSetPartitionInformation HalIoSetPartitionInformation;
  1398. pHalIoWritePartitionTable HalIoWritePartitionTable;
  1399. pHalHandlerForBus HalReferenceHandlerForBus;
  1400. pHalReferenceBusHandler HalReferenceBusHandler;
  1401. pHalReferenceBusHandler HalDereferenceBusHandler;
  1402. pHalInitPnpDriver HalInitPnpDriver;
  1403. pHalInitPowerManagement HalInitPowerManagement;
  1404. pHalGetDmaAdapter HalGetDmaAdapter;
  1405. pHalGetInterruptTranslator HalGetInterruptTranslator;
  1406. pHalStartMirroring HalStartMirroring;
  1407. pHalEndMirroring HalEndMirroring;
  1408. pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
  1409. pHalEndOfBoot HalEndOfBoot;
  1410. pHalMirrorVerify HalMirrorVerify;
  1411. pHalGetAcpiTable HalGetCachedAcpiTable;
  1412. pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback;
  1413. #if defined(_IA64_)
  1414. pHalGetErrorCapList HalGetErrorCapList;
  1415. pHalInjectError HalInjectError;
  1416. #endif
  1417. } HAL_DISPATCH, *PHAL_DISPATCH;
  1418. /* GCC/MSVC and WDK compatible declaration */
  1419. extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
  1420. #if defined(_NTOSKRNL_) || defined(_BLDR_)
  1421. #define HALDISPATCH (&HalDispatchTable)
  1422. #else
  1423. /* This is a WDK compatibility definition */
  1424. #define HalDispatchTable (&HalDispatchTable)
  1425. #define HALDISPATCH HalDispatchTable
  1426. #endif
  1427. #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
  1428. #define HalDispatchTableVersion HALDISPATCH->Version
  1429. #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
  1430. #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
  1431. #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
  1432. #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
  1433. #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
  1434. #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
  1435. #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
  1436. #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
  1437. #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
  1438. #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
  1439. #define HalStartMirroring HALDISPATCH->HalStartMirroring
  1440. #define HalEndMirroring HALDISPATCH->HalEndMirroring
  1441. #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
  1442. #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
  1443. #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
  1444. #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
  1445. #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
  1446. #if defined(_IA64_)
  1447. #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
  1448. #define HalInjectError HALDISPATCH->HalInjectError
  1449. #endif
  1450. typedef struct _HAL_BUS_INFORMATION {
  1451. INTERFACE_TYPE BusType;
  1452. BUS_DATA_TYPE ConfigurationType;
  1453. ULONG BusNumber;
  1454. ULONG Reserved;
  1455. } HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
  1456. typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
  1457. KPROFILE_SOURCE Source;
  1458. BOOLEAN Supported;
  1459. ULONG Interval;
  1460. } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
  1461. typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
  1462. KPROFILE_SOURCE Source;
  1463. BOOLEAN Supported;
  1464. ULONG_PTR Interval;
  1465. ULONG_PTR DefInterval;
  1466. ULONG_PTR MaxInterval;
  1467. ULONG_PTR MinInterval;
  1468. } HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
  1469. typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
  1470. KPROFILE_SOURCE Source;
  1471. ULONG_PTR Interval;
  1472. } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
  1473. typedef struct _HAL_PROFILE_SOURCE_LIST {
  1474. KPROFILE_SOURCE Source;
  1475. PWSTR Description;
  1476. } HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
  1477. typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
  1478. HalDisplayInt10Bios,
  1479. HalDisplayEmulatedBios,
  1480. HalDisplayNoBios
  1481. } HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
  1482. typedef struct _HAL_POWER_INFORMATION {
  1483. ULONG TBD;
  1484. } HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
  1485. typedef struct _HAL_PROCESSOR_SPEED_INFO {
  1486. ULONG ProcessorSpeed;
  1487. } HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
  1488. typedef struct _HAL_CALLBACKS {
  1489. PCALLBACK_OBJECT SetSystemInformation;
  1490. PCALLBACK_OBJECT BusCheck;
  1491. } HAL_CALLBACKS, *PHAL_CALLBACKS;
  1492. typedef struct _HAL_PROCESSOR_FEATURE {
  1493. ULONG UsableFeatureBits;
  1494. } HAL_PROCESSOR_FEATURE;
  1495. typedef NTSTATUS
  1496. (NTAPI *PHALIOREADWRITEHANDLER)(
  1497. IN BOOLEAN fRead,
  1498. IN ULONG dwAddr,
  1499. IN ULONG dwSize,
  1500. IN OUT PULONG pdwData);
  1501. typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
  1502. ULONG BadAddrBegin;
  1503. ULONG BadAddrSize;
  1504. ULONG OSVersionTrigger;
  1505. PHALIOREADWRITEHANDLER IOHandler;
  1506. } HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
  1507. #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
  1508. typedef VOID
  1509. (NTAPI *PHALMCAINTERFACELOCK)(
  1510. VOID);
  1511. typedef VOID
  1512. (NTAPI *PHALMCAINTERFACEUNLOCK)(
  1513. VOID);
  1514. typedef NTSTATUS
  1515. (NTAPI *PHALMCAINTERFACEREADREGISTER)(
  1516. IN UCHAR BankNumber,
  1517. IN OUT PVOID Exception);
  1518. typedef struct _HAL_MCA_INTERFACE {
  1519. PHALMCAINTERFACELOCK Lock;
  1520. PHALMCAINTERFACEUNLOCK Unlock;
  1521. PHALMCAINTERFACEREADREGISTER ReadRegister;
  1522. } HAL_MCA_INTERFACE;
  1523. typedef enum {
  1524. ApicDestinationModePhysical = 1,
  1525. ApicDestinationModeLogicalFlat,
  1526. ApicDestinationModeLogicalClustered,
  1527. ApicDestinationModeUnknown
  1528. } HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
  1529. #if defined(_AMD64_)
  1530. struct _KTRAP_FRAME;
  1531. struct _KEXCEPTION_FRAME;
  1532. typedef ERROR_SEVERITY
  1533. (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
  1534. IN PVOID Context,
  1535. IN struct _KTRAP_FRAME *TrapFrame,
  1536. IN struct _KEXCEPTION_FRAME *ExceptionFrame,
  1537. IN PMCA_EXCEPTION Exception);
  1538. #endif
  1539. #if defined(_X86_) || defined(_IA64_)
  1540. typedef
  1541. #if defined(_IA64_)
  1542. ERROR_SEVERITY
  1543. #else
  1544. VOID
  1545. #endif
  1546. (NTAPI *PDRIVER_EXCPTN_CALLBACK)(
  1547. IN PVOID Context,
  1548. IN PMCA_EXCEPTION BankLog);
  1549. #endif
  1550. typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
  1551. typedef struct _MCA_DRIVER_INFO {
  1552. PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
  1553. PKDEFERRED_ROUTINE DpcCallback;
  1554. PVOID DeviceContext;
  1555. } MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
  1556. typedef struct _HAL_ERROR_INFO {
  1557. ULONG Version;
  1558. ULONG InitMaxSize;
  1559. ULONG McaMaxSize;
  1560. ULONG McaPreviousEventsCount;
  1561. ULONG McaCorrectedEventsCount;
  1562. ULONG McaKernelDeliveryFails;
  1563. ULONG McaDriverDpcQueueFails;
  1564. ULONG McaReserved;
  1565. ULONG CmcMaxSize;
  1566. ULONG CmcPollingInterval;
  1567. ULONG CmcInterruptsCount;
  1568. ULONG CmcKernelDeliveryFails;
  1569. ULONG CmcDriverDpcQueueFails;
  1570. ULONG CmcGetStateFails;
  1571. ULONG CmcClearStateFails;
  1572. ULONG CmcReserved;
  1573. ULONGLONG CmcLogId;
  1574. ULONG CpeMaxSize;
  1575. ULONG CpePollingInterval;
  1576. ULONG CpeInterruptsCount;
  1577. ULONG CpeKernelDeliveryFails;
  1578. ULONG CpeDriverDpcQueueFails;
  1579. ULONG CpeGetStateFails;
  1580. ULONG CpeClearStateFails;
  1581. ULONG CpeInterruptSources;
  1582. ULONGLONG CpeLogId;
  1583. ULONGLONG KernelReserved[4];
  1584. } HAL_ERROR_INFO, *PHAL_ERROR_INFO;
  1585. #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
  1586. #define HAL_MCE_DISABLED ((ULONG)0)
  1587. #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1588. #define HAL_CMC_DISABLED HAL_MCE_DISABLED
  1589. #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1590. #define HAL_CPE_DISABLED HAL_MCE_DISABLED
  1591. #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
  1592. #define HAL_MCA_DISABLED HAL_MCE_DISABLED
  1593. typedef VOID
  1594. (NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
  1595. IN PVOID Context,
  1596. IN PCMC_EXCEPTION CmcLog);
  1597. typedef VOID
  1598. (NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
  1599. IN PVOID Context,
  1600. IN PCPE_EXCEPTION CmcLog);
  1601. typedef struct _CMC_DRIVER_INFO {
  1602. PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
  1603. PKDEFERRED_ROUTINE DpcCallback;
  1604. PVOID DeviceContext;
  1605. } CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
  1606. typedef struct _CPE_DRIVER_INFO {
  1607. PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
  1608. PKDEFERRED_ROUTINE DpcCallback;
  1609. PVOID DeviceContext;
  1610. } CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
  1611. #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
  1612. #if defined(_IA64_)
  1613. typedef NTSTATUS
  1614. (*HALSENDCROSSPARTITIONIPI)(
  1615. IN USHORT ProcessorID,
  1616. IN UCHAR HardwareVector);
  1617. typedef NTSTATUS
  1618. (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
  1619. OUT PULONG Vector,
  1620. OUT PKIRQL Irql,
  1621. IN OUT PGROUP_AFFINITY Affinity,
  1622. OUT PUCHAR HardwareVector);
  1623. typedef VOID
  1624. (*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
  1625. IN ULONG Vector,
  1626. IN PGROUP_AFFINITY Affinity);
  1627. typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
  1628. HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
  1629. HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
  1630. HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
  1631. } HAL_CROSS_PARTITION_IPI_INTERFACE;
  1632. #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
  1633. FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
  1634. HalFreeCrossPartitionInterruptVector)
  1635. #endif /* defined(_IA64_) */
  1636. typedef struct _HAL_PLATFORM_INFORMATION {
  1637. ULONG PlatformFlags;
  1638. } HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
  1639. #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
  1640. #define HAL_PLATFORM_DISABLE_PTCG 0x04L
  1641. #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
  1642. #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
  1643. #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
  1644. /******************************************************************************
  1645. * Kernel Types *
  1646. ******************************************************************************/
  1647. #define NX_SUPPORT_POLICY_ALWAYSOFF 0
  1648. #define NX_SUPPORT_POLICY_ALWAYSON 1
  1649. #define NX_SUPPORT_POLICY_OPTIN 2
  1650. #define NX_SUPPORT_POLICY_OPTOUT 3
  1651. typedef VOID
  1652. (NTAPI *PEXPAND_STACK_CALLOUT)(
  1653. IN PVOID Parameter OPTIONAL);
  1654. typedef VOID
  1655. (NTAPI *PTIMER_APC_ROUTINE)(
  1656. IN PVOID TimerContext,
  1657. IN ULONG TimerLowValue,
  1658. IN LONG TimerHighValue);
  1659. typedef enum _TIMER_SET_INFORMATION_CLASS {
  1660. TimerSetCoalescableTimer,
  1661. MaxTimerInfoClass
  1662. } TIMER_SET_INFORMATION_CLASS;
  1663. #if (NTDDI_VERSION >= NTDDI_WIN7)
  1664. typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
  1665. IN LARGE_INTEGER DueTime;
  1666. IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL;
  1667. IN PVOID TimerContext OPTIONAL;
  1668. IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL;
  1669. IN ULONG Period OPTIONAL;
  1670. IN ULONG TolerableDelay;
  1671. OUT PBOOLEAN PreviousState OPTIONAL;
  1672. } TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
  1673. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  1674. #define XSTATE_LEGACY_FLOATING_POINT 0
  1675. #define XSTATE_LEGACY_SSE 1
  1676. #define XSTATE_GSSE 2
  1677. #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
  1678. #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
  1679. #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
  1680. #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
  1681. #define MAXIMUM_XSTATE_FEATURES 64
  1682. typedef struct _XSTATE_FEATURE {
  1683. ULONG Offset;
  1684. ULONG Size;
  1685. } XSTATE_FEATURE, *PXSTATE_FEATURE;
  1686. typedef struct _XSTATE_CONFIGURATION {
  1687. ULONG64 EnabledFeatures;
  1688. ULONG Size;
  1689. ULONG OptimizedSave:1;
  1690. XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
  1691. } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
  1692. #define MAX_WOW64_SHARED_ENTRIES 16
  1693. typedef struct _KUSER_SHARED_DATA {
  1694. ULONG TickCountLowDeprecated;
  1695. ULONG TickCountMultiplier;
  1696. volatile KSYSTEM_TIME InterruptTime;
  1697. volatile KSYSTEM_TIME SystemTime;
  1698. volatile KSYSTEM_TIME TimeZoneBias;
  1699. USHORT ImageNumberLow;
  1700. USHORT ImageNumberHigh;
  1701. WCHAR NtSystemRoot[260];
  1702. ULONG MaxStackTraceDepth;
  1703. ULONG CryptoExponent;
  1704. ULONG TimeZoneId;
  1705. ULONG LargePageMinimum;
  1706. ULONG Reserved2[7];
  1707. NT_PRODUCT_TYPE NtProductType;
  1708. BOOLEAN ProductTypeIsValid;
  1709. ULONG NtMajorVersion;
  1710. ULONG NtMinorVersion;
  1711. BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
  1712. ULONG Reserved1;
  1713. ULONG Reserved3;
  1714. volatile ULONG TimeSlip;
  1715. ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
  1716. ULONG AltArchitecturePad[1];
  1717. LARGE_INTEGER SystemExpirationDate;
  1718. ULONG SuiteMask;
  1719. BOOLEAN KdDebuggerEnabled;
  1720. #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
  1721. UCHAR NXSupportPolicy;
  1722. #endif
  1723. volatile ULONG ActiveConsoleId;
  1724. volatile ULONG DismountCount;
  1725. ULONG ComPlusPackage;
  1726. ULONG LastSystemRITEventTickCount;
  1727. ULONG NumberOfPhysicalPages;
  1728. BOOLEAN SafeBootMode;
  1729. #if (NTDDI_VERSION >= NTDDI_WIN7)
  1730. _ANONYMOUS_UNION union {
  1731. UCHAR TscQpcData;
  1732. _ANONYMOUS_STRUCT struct {
  1733. UCHAR TscQpcEnabled:1;
  1734. UCHAR TscQpcSpareFlag:1;
  1735. UCHAR TscQpcShift:6;
  1736. } DUMMYSTRUCTNAME;
  1737. } DUMMYUNIONNAME;
  1738. UCHAR TscQpcPad[2];
  1739. #endif
  1740. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1741. _ANONYMOUS_UNION union {
  1742. ULONG SharedDataFlags;
  1743. _ANONYMOUS_STRUCT struct {
  1744. ULONG DbgErrorPortPresent:1;
  1745. ULONG DbgElevationEnabled:1;
  1746. ULONG DbgVirtEnabled:1;
  1747. ULONG DbgInstallerDetectEnabled:1;
  1748. ULONG DbgSystemDllRelocated:1;
  1749. ULONG DbgDynProcessorEnabled:1;
  1750. ULONG DbgSEHValidationEnabled:1;
  1751. ULONG SpareBits:25;
  1752. } DUMMYSTRUCTNAME2;
  1753. } DUMMYUNIONNAME2;
  1754. #else
  1755. ULONG TraceLogging;
  1756. #endif
  1757. ULONG DataFlagsPad[1];
  1758. ULONGLONG TestRetInstruction;
  1759. ULONG SystemCall;
  1760. ULONG SystemCallReturn;
  1761. ULONGLONG SystemCallPad[3];
  1762. _ANONYMOUS_UNION union {
  1763. volatile KSYSTEM_TIME TickCount;
  1764. volatile ULONG64 TickCountQuad;
  1765. _ANONYMOUS_STRUCT struct {
  1766. ULONG ReservedTickCountOverlay[3];
  1767. ULONG TickCountPad[1];
  1768. } DUMMYSTRUCTNAME;
  1769. } DUMMYUNIONNAME3;
  1770. ULONG Cookie;
  1771. ULONG CookiePad[1];
  1772. #if (NTDDI_VERSION >= NTDDI_WS03)
  1773. LONGLONG ConsoleSessionForegroundProcessId;
  1774. ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
  1775. #endif
  1776. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1777. #if (NTDDI_VERSION >= NTDDI_WIN7)
  1778. USHORT UserModeGlobalLogger[16];
  1779. #else
  1780. USHORT UserModeGlobalLogger[8];
  1781. ULONG HeapTracingPid[2];
  1782. ULONG CritSecTracingPid[2];
  1783. #endif
  1784. ULONG ImageFileExecutionOptions;
  1785. #if (NTDDI_VERSION >= NTDDI_VISTASP1)
  1786. ULONG LangGenerationCount;
  1787. #else
  1788. /* 4 bytes padding */
  1789. #endif
  1790. ULONGLONG Reserved5;
  1791. volatile ULONG64 InterruptTimeBias;
  1792. #endif
  1793. #if (NTDDI_VERSION >= NTDDI_WIN7)
  1794. volatile ULONG64 TscQpcBias;
  1795. volatile ULONG ActiveProcessorCount;
  1796. volatile USHORT ActiveGroupCount;
  1797. USHORT Reserved4;
  1798. volatile ULONG AitSamplingValue;
  1799. volatile ULONG AppCompatFlag;
  1800. ULONGLONG SystemDllNativeRelocation;
  1801. ULONG SystemDllWowRelocation;
  1802. ULONG XStatePad[1];
  1803. XSTATE_CONFIGURATION XState;
  1804. #endif
  1805. } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
  1806. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1807. extern NTSYSAPI volatile CCHAR KeNumberProcessors;
  1808. #elif (NTDDI_VERSION >= NTDDI_WINXP)
  1809. extern NTSYSAPI CCHAR KeNumberProcessors;
  1810. #else
  1811. extern PCCHAR KeNumberProcessors;
  1812. #endif
  1813. /******************************************************************************
  1814. * Kernel Debugger Types *
  1815. ******************************************************************************/
  1816. typedef struct _DEBUG_DEVICE_ADDRESS {
  1817. UCHAR Type;
  1818. BOOLEAN Valid;
  1819. UCHAR Reserved[2];
  1820. PUCHAR TranslatedAddress;
  1821. ULONG Length;
  1822. } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
  1823. typedef struct _DEBUG_MEMORY_REQUIREMENTS {
  1824. PHYSICAL_ADDRESS Start;
  1825. PHYSICAL_ADDRESS MaxEnd;
  1826. PVOID VirtualAddress;
  1827. ULONG Length;
  1828. BOOLEAN Cached;
  1829. BOOLEAN Aligned;
  1830. } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
  1831. typedef struct _DEBUG_DEVICE_DESCRIPTOR {
  1832. ULONG Bus;
  1833. ULONG Slot;
  1834. USHORT Segment;
  1835. USHORT VendorID;
  1836. USHORT DeviceID;
  1837. UCHAR BaseClass;
  1838. UCHAR SubClass;
  1839. UCHAR ProgIf;
  1840. BOOLEAN Initialized;
  1841. BOOLEAN Configured;
  1842. DEBUG_DEVICE_ADDRESS BaseAddress[6];
  1843. DEBUG_MEMORY_REQUIREMENTS Memory;
  1844. } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
  1845. typedef NTSTATUS
  1846. (NTAPI *pKdSetupPciDeviceForDebugging)(
  1847. IN PVOID LoaderBlock OPTIONAL,
  1848. IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
  1849. typedef NTSTATUS
  1850. (NTAPI *pKdReleasePciDeviceForDebugging)(
  1851. IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
  1852. typedef PVOID
  1853. (NTAPI *pKdGetAcpiTablePhase0)(
  1854. IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
  1855. IN ULONG Signature);
  1856. typedef VOID
  1857. (NTAPI *pKdCheckPowerButton)(
  1858. VOID);
  1859. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1860. typedef PVOID
  1861. (NTAPI *pKdMapPhysicalMemory64)(
  1862. IN PHYSICAL_ADDRESS PhysicalAddress,
  1863. IN ULONG NumberPages,
  1864. IN BOOLEAN FlushCurrentTLB);
  1865. typedef VOID
  1866. (NTAPI *pKdUnmapVirtualAddress)(
  1867. IN PVOID VirtualAddress,
  1868. IN ULONG NumberPages,
  1869. IN BOOLEAN FlushCurrentTLB);
  1870. #else
  1871. typedef PVOID
  1872. (NTAPI *pKdMapPhysicalMemory64)(
  1873. IN PHYSICAL_ADDRESS PhysicalAddress,
  1874. IN ULONG NumberPages);
  1875. typedef VOID
  1876. (NTAPI *pKdUnmapVirtualAddress)(
  1877. IN PVOID VirtualAddress,
  1878. IN ULONG NumberPages);
  1879. #endif
  1880. typedef ULONG
  1881. (NTAPI *pKdGetPciDataByOffset)(
  1882. IN ULONG BusNumber,
  1883. IN ULONG SlotNumber,
  1884. OUT PVOID Buffer,
  1885. IN ULONG Offset,
  1886. IN ULONG Length);
  1887. typedef ULONG
  1888. (NTAPI *pKdSetPciDataByOffset)(
  1889. IN ULONG BusNumber,
  1890. IN ULONG SlotNumber,
  1891. IN PVOID Buffer,
  1892. IN ULONG Offset,
  1893. IN ULONG Length);
  1894. /******************************************************************************
  1895. * Memory manager Types *
  1896. ******************************************************************************/
  1897. typedef struct _PHYSICAL_MEMORY_RANGE {
  1898. PHYSICAL_ADDRESS BaseAddress;
  1899. LARGE_INTEGER NumberOfBytes;
  1900. } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
  1901. typedef NTSTATUS
  1902. (NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
  1903. IN PMDL DestinationMdl,
  1904. IN PMDL SourceMdl,
  1905. IN PVOID Context);
  1906. typedef enum _MM_ROTATE_DIRECTION {
  1907. MmToFrameBuffer,
  1908. MmToFrameBufferNoCopy,
  1909. MmToRegularMemory,
  1910. MmToRegularMemoryNoCopy,
  1911. MmMaximumRotateDirection
  1912. } MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
  1913. /******************************************************************************
  1914. * Process Manager Types *
  1915. ******************************************************************************/
  1916. #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
  1917. #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
  1918. #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
  1919. #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
  1920. #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
  1921. typedef struct _QUOTA_LIMITS {
  1922. SIZE_T PagedPoolLimit;
  1923. SIZE_T NonPagedPoolLimit;
  1924. SIZE_T MinimumWorkingSetSize;
  1925. SIZE_T MaximumWorkingSetSize;
  1926. SIZE_T PagefileLimit;
  1927. LARGE_INTEGER TimeLimit;
  1928. } QUOTA_LIMITS, *PQUOTA_LIMITS;
  1929. typedef union _RATE_QUOTA_LIMIT {
  1930. ULONG RateData;
  1931. _ANONYMOUS_STRUCT struct {
  1932. ULONG RatePercent:7;
  1933. ULONG Reserved0:25;
  1934. } DUMMYSTRUCTNAME;
  1935. } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
  1936. typedef struct _QUOTA_LIMITS_EX {
  1937. SIZE_T PagedPoolLimit;
  1938. SIZE_T NonPagedPoolLimit;
  1939. SIZE_T MinimumWorkingSetSize;
  1940. SIZE_T MaximumWorkingSetSize;
  1941. SIZE_T PagefileLimit;
  1942. LARGE_INTEGER TimeLimit;
  1943. SIZE_T WorkingSetLimit;
  1944. SIZE_T Reserved2;
  1945. SIZE_T Reserved3;
  1946. SIZE_T Reserved4;
  1947. ULONG Flags;
  1948. RATE_QUOTA_LIMIT CpuRateLimit;
  1949. } QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
  1950. typedef struct _IO_COUNTERS {
  1951. ULONGLONG ReadOperationCount;
  1952. ULONGLONG WriteOperationCount;
  1953. ULONGLONG OtherOperationCount;
  1954. ULONGLONG ReadTransferCount;
  1955. ULONGLONG WriteTransferCount;
  1956. ULONGLONG OtherTransferCount;
  1957. } IO_COUNTERS, *PIO_COUNTERS;
  1958. typedef struct _VM_COUNTERS {
  1959. SIZE_T PeakVirtualSize;
  1960. SIZE_T VirtualSize;
  1961. ULONG PageFaultCount;
  1962. SIZE_T PeakWorkingSetSize;
  1963. SIZE_T WorkingSetSize;
  1964. SIZE_T QuotaPeakPagedPoolUsage;
  1965. SIZE_T QuotaPagedPoolUsage;
  1966. SIZE_T QuotaPeakNonPagedPoolUsage;
  1967. SIZE_T QuotaNonPagedPoolUsage;
  1968. SIZE_T PagefileUsage;
  1969. SIZE_T PeakPagefileUsage;
  1970. } VM_COUNTERS, *PVM_COUNTERS;
  1971. typedef struct _VM_COUNTERS_EX {
  1972. SIZE_T PeakVirtualSize;
  1973. SIZE_T VirtualSize;
  1974. ULONG PageFaultCount;
  1975. SIZE_T PeakWorkingSetSize;
  1976. SIZE_T WorkingSetSize;
  1977. SIZE_T QuotaPeakPagedPoolUsage;
  1978. SIZE_T QuotaPagedPoolUsage;
  1979. SIZE_T QuotaPeakNonPagedPoolUsage;
  1980. SIZE_T QuotaNonPagedPoolUsage;
  1981. SIZE_T PagefileUsage;
  1982. SIZE_T PeakPagefileUsage;
  1983. SIZE_T PrivateUsage;
  1984. } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
  1985. #define MAX_HW_COUNTERS 16
  1986. #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
  1987. typedef enum _HARDWARE_COUNTER_TYPE {
  1988. PMCCounter,
  1989. MaxHardwareCounterType
  1990. } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
  1991. typedef struct _HARDWARE_COUNTER {
  1992. HARDWARE_COUNTER_TYPE Type;
  1993. ULONG Reserved;
  1994. ULONG64 Index;
  1995. } HARDWARE_COUNTER, *PHARDWARE_COUNTER;
  1996. typedef struct _POOLED_USAGE_AND_LIMITS {
  1997. SIZE_T PeakPagedPoolUsage;
  1998. SIZE_T PagedPoolUsage;
  1999. SIZE_T PagedPoolLimit;
  2000. SIZE_T PeakNonPagedPoolUsage;
  2001. SIZE_T NonPagedPoolUsage;
  2002. SIZE_T NonPagedPoolLimit;
  2003. SIZE_T PeakPagefileUsage;
  2004. SIZE_T PagefileUsage;
  2005. SIZE_T PagefileLimit;
  2006. } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
  2007. typedef struct _PROCESS_ACCESS_TOKEN {
  2008. HANDLE Token;
  2009. HANDLE Thread;
  2010. } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
  2011. #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
  2012. #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
  2013. typedef struct _PROCESS_EXCEPTION_PORT {
  2014. IN HANDLE ExceptionPortHandle;
  2015. IN OUT ULONG StateFlags;
  2016. } PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
  2017. typedef VOID
  2018. (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
  2019. IN HANDLE ParentId,
  2020. IN HANDLE ProcessId,
  2021. IN BOOLEAN Create);
  2022. typedef struct _PS_CREATE_NOTIFY_INFO {
  2023. IN SIZE_T Size;
  2024. _ANONYMOUS_UNION union {
  2025. IN ULONG Flags;
  2026. _ANONYMOUS_STRUCT struct {
  2027. IN ULONG FileOpenNameAvailable:1;
  2028. IN ULONG Reserved:31;
  2029. } DUMMYSTRUCTNAME;
  2030. } DUMMYUNIONNAME;
  2031. IN HANDLE ParentProcessId;
  2032. IN CLIENT_ID CreatingThreadId;
  2033. IN OUT struct _FILE_OBJECT *FileObject;
  2034. IN PCUNICODE_STRING ImageFileName;
  2035. IN PCUNICODE_STRING CommandLine OPTIONAL;
  2036. IN OUT NTSTATUS CreationStatus;
  2037. } PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
  2038. typedef VOID
  2039. (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)(
  2040. IN OUT PEPROCESS Process,
  2041. IN HANDLE ProcessId,
  2042. IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL);
  2043. typedef VOID
  2044. (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
  2045. IN HANDLE ProcessId,
  2046. IN HANDLE ThreadId,
  2047. IN BOOLEAN Create);
  2048. #define IMAGE_ADDRESSING_MODE_32BIT 3
  2049. typedef struct _IMAGE_INFO {
  2050. _ANONYMOUS_UNION union {
  2051. ULONG Properties;
  2052. _ANONYMOUS_STRUCT struct {
  2053. ULONG ImageAddressingMode:8;
  2054. ULONG SystemModeImage:1;
  2055. ULONG ImageMappedToAllPids:1;
  2056. ULONG ExtendedInfoPresent:1;
  2057. ULONG Reserved:21;
  2058. } DUMMYSTRUCTNAME;
  2059. } DUMMYUNIONNAME;
  2060. PVOID ImageBase;
  2061. ULONG ImageSelector;
  2062. SIZE_T ImageSize;
  2063. ULONG ImageSectionNumber;
  2064. } IMAGE_INFO, *PIMAGE_INFO;
  2065. typedef struct _IMAGE_INFO_EX {
  2066. SIZE_T Size;
  2067. IMAGE_INFO ImageInfo;
  2068. struct _FILE_OBJECT *FileObject;
  2069. } IMAGE_INFO_EX, *PIMAGE_INFO_EX;
  2070. typedef VOID
  2071. (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
  2072. IN PUNICODE_STRING FullImageName,
  2073. IN HANDLE ProcessId,
  2074. IN PIMAGE_INFO ImageInfo);
  2075. #define THREAD_CSWITCH_PMU_DISABLE FALSE
  2076. #define THREAD_CSWITCH_PMU_ENABLE TRUE
  2077. #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
  2078. #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
  2079. typedef struct _NT_TIB {
  2080. struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
  2081. PVOID StackBase;
  2082. PVOID StackLimit;
  2083. PVOID SubSystemTib;
  2084. _ANONYMOUS_UNION union {
  2085. PVOID FiberData;
  2086. ULONG Version;
  2087. } DUMMYUNIONNAME;
  2088. PVOID ArbitraryUserPointer;
  2089. struct _NT_TIB *Self;
  2090. } NT_TIB, *PNT_TIB;
  2091. typedef struct _NT_TIB32 {
  2092. ULONG ExceptionList;
  2093. ULONG StackBase;
  2094. ULONG StackLimit;
  2095. ULONG SubSystemTib;
  2096. _ANONYMOUS_UNION union {
  2097. ULONG FiberData;
  2098. ULONG Version;
  2099. } DUMMYUNIONNAME;
  2100. ULONG ArbitraryUserPointer;
  2101. ULONG Self;
  2102. } NT_TIB32,*PNT_TIB32;
  2103. typedef struct _NT_TIB64 {
  2104. ULONG64 ExceptionList;
  2105. ULONG64 StackBase;
  2106. ULONG64 StackLimit;
  2107. ULONG64 SubSystemTib;
  2108. _ANONYMOUS_UNION union {
  2109. ULONG64 FiberData;
  2110. ULONG Version;
  2111. } DUMMYUNIONNAME;
  2112. ULONG64 ArbitraryUserPointer;
  2113. ULONG64 Self;
  2114. } NT_TIB64,*PNT_TIB64;
  2115. typedef enum _PROCESSINFOCLASS {
  2116. ProcessBasicInformation,
  2117. ProcessQuotaLimits,
  2118. ProcessIoCounters,
  2119. ProcessVmCounters,
  2120. ProcessTimes,
  2121. ProcessBasePriority,
  2122. ProcessRaisePriority,
  2123. ProcessDebugPort,
  2124. ProcessExceptionPort,
  2125. ProcessAccessToken,
  2126. ProcessLdtInformation,
  2127. ProcessLdtSize,
  2128. ProcessDefaultHardErrorMode,
  2129. ProcessIoPortHandlers,
  2130. ProcessPooledUsageAndLimits,
  2131. ProcessWorkingSetWatch,
  2132. ProcessUserModeIOPL,
  2133. ProcessEnableAlignmentFaultFixup,
  2134. ProcessPriorityClass,
  2135. ProcessWx86Information,
  2136. ProcessHandleCount,
  2137. ProcessAffinityMask,
  2138. ProcessPriorityBoost,
  2139. ProcessDeviceMap,
  2140. ProcessSessionInformation,
  2141. ProcessForegroundInformation,
  2142. ProcessWow64Information,
  2143. ProcessImageFileName,
  2144. ProcessLUIDDeviceMapsEnabled,
  2145. ProcessBreakOnTermination,
  2146. ProcessDebugObjectHandle,
  2147. ProcessDebugFlags,
  2148. ProcessHandleTracing,
  2149. ProcessIoPriority,
  2150. ProcessExecuteFlags,
  2151. ProcessTlsInformation,
  2152. ProcessCookie,
  2153. ProcessImageInformation,
  2154. ProcessCycleTime,
  2155. ProcessPagePriority,
  2156. ProcessInstrumentationCallback,
  2157. ProcessThreadStackAllocation,
  2158. ProcessWorkingSetWatchEx,
  2159. ProcessImageFileNameWin32,
  2160. ProcessImageFileMapping,
  2161. ProcessAffinityUpdateMode,
  2162. ProcessMemoryAllocationMode,
  2163. ProcessGroupInformation,
  2164. ProcessTokenVirtualizationEnabled,
  2165. ProcessConsoleHostProcess,
  2166. ProcessWindowInformation,
  2167. MaxProcessInfoClass
  2168. } PROCESSINFOCLASS;
  2169. typedef enum _THREADINFOCLASS {
  2170. ThreadBasicInformation,
  2171. ThreadTimes,
  2172. ThreadPriority,
  2173. ThreadBasePriority,
  2174. ThreadAffinityMask,
  2175. ThreadImpersonationToken,
  2176. ThreadDescriptorTableEntry,
  2177. ThreadEnableAlignmentFaultFixup,
  2178. ThreadEventPair_Reusable,
  2179. ThreadQuerySetWin32StartAddress,
  2180. ThreadZeroTlsCell,
  2181. ThreadPerformanceCount,
  2182. ThreadAmILastThread,
  2183. ThreadIdealProcessor,
  2184. ThreadPriorityBoost,
  2185. ThreadSetTlsArrayAddress,
  2186. ThreadIsIoPending,
  2187. ThreadHideFromDebugger,
  2188. ThreadBreakOnTermination,
  2189. ThreadSwitchLegacyState,
  2190. ThreadIsTerminated,
  2191. ThreadLastSystemCall,
  2192. ThreadIoPriority,
  2193. ThreadCycleTime,
  2194. ThreadPagePriority,
  2195. ThreadActualBasePriority,
  2196. ThreadTebInformation,
  2197. ThreadCSwitchMon,
  2198. ThreadCSwitchPmu,
  2199. ThreadWow64Context,
  2200. ThreadGroupInformation,
  2201. ThreadUmsInformation,
  2202. ThreadCounterProfiling,
  2203. ThreadIdealProcessorEx,
  2204. MaxThreadInfoClass
  2205. } THREADINFOCLASS;
  2206. typedef struct _PAGE_PRIORITY_INFORMATION {
  2207. ULONG PagePriority;
  2208. } PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
  2209. typedef struct _PROCESS_WS_WATCH_INFORMATION {
  2210. PVOID FaultingPc;
  2211. PVOID FaultingVa;
  2212. } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
  2213. typedef struct _PROCESS_BASIC_INFORMATION {
  2214. NTSTATUS ExitStatus;
  2215. struct _PEB *PebBaseAddress;
  2216. ULONG_PTR AffinityMask;
  2217. KPRIORITY BasePriority;
  2218. ULONG_PTR UniqueProcessId;
  2219. ULONG_PTR InheritedFromUniqueProcessId;
  2220. } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
  2221. typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
  2222. SIZE_T Size;
  2223. PROCESS_BASIC_INFORMATION BasicInfo;
  2224. _ANONYMOUS_UNION union {
  2225. ULONG Flags;
  2226. _ANONYMOUS_STRUCT struct {
  2227. ULONG IsProtectedProcess:1;
  2228. ULONG IsWow64Process:1;
  2229. ULONG IsProcessDeleting:1;
  2230. ULONG IsCrossSessionCreate:1;
  2231. ULONG SpareBits:28;
  2232. } DUMMYSTRUCTNAME;
  2233. } DUMMYUNIONNAME;
  2234. } PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;
  2235. typedef struct _PROCESS_DEVICEMAP_INFORMATION {
  2236. _ANONYMOUS_UNION union {
  2237. struct {
  2238. HANDLE DirectoryHandle;
  2239. } Set;
  2240. struct {
  2241. ULONG DriveMap;
  2242. UCHAR DriveType[32];
  2243. } Query;
  2244. } DUMMYUNIONNAME;
  2245. } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
  2246. typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
  2247. _ANONYMOUS_UNION union {
  2248. struct {
  2249. HANDLE DirectoryHandle;
  2250. } Set;
  2251. struct {
  2252. ULONG DriveMap;
  2253. UCHAR DriveType[32];
  2254. } Query;
  2255. } DUMMYUNIONNAME;
  2256. ULONG Flags;
  2257. } PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX;
  2258. typedef struct _PROCESS_SESSION_INFORMATION {
  2259. ULONG SessionId;
  2260. } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
  2261. typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
  2262. ULONG Flags;
  2263. } PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
  2264. typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
  2265. ULONG Flags;
  2266. ULONG TotalSlots;
  2267. } PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
  2268. typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
  2269. HANDLE Handle;
  2270. CLIENT_ID ClientId;
  2271. ULONG Type;
  2272. PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
  2273. } PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
  2274. typedef struct _PROCESS_HANDLE_TRACING_QUERY {
  2275. HANDLE Handle;
  2276. ULONG TotalTraces;
  2277. PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
  2278. } PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
  2279. extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
  2280. /******************************************************************************
  2281. * Runtime Library Types *
  2282. ******************************************************************************/
  2283. #ifndef _RTL_RUN_ONCE_DEF
  2284. #define _RTL_RUN_ONCE_DEF
  2285. #define RTL_RUN_ONCE_INIT {0}
  2286. #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
  2287. #define RTL_RUN_ONCE_ASYNC 0x00000002UL
  2288. #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
  2289. #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
  2290. #define RTL_HASH_ALLOCATED_HEADER 0x00000001
  2291. #define RTL_HASH_RESERVED_SIGNATURE 0
  2292. /* RtlVerifyVersionInfo() ComparisonType */
  2293. #define VER_EQUAL 1
  2294. #define VER_GREATER 2
  2295. #define VER_GREATER_EQUAL 3
  2296. #define VER_LESS 4
  2297. #define VER_LESS_EQUAL 5
  2298. #define VER_AND 6
  2299. #define VER_OR 7
  2300. #define VER_CONDITION_MASK 7
  2301. #define VER_NUM_BITS_PER_CONDITION_MASK 3
  2302. /* RtlVerifyVersionInfo() TypeMask */
  2303. #define VER_MINORVERSION 0x0000001
  2304. #define VER_MAJORVERSION 0x0000002
  2305. #define VER_BUILDNUMBER 0x0000004
  2306. #define VER_PLATFORMID 0x0000008
  2307. #define VER_SERVICEPACKMINOR 0x0000010
  2308. #define VER_SERVICEPACKMAJOR 0x0000020
  2309. #define VER_SUITENAME 0x0000040
  2310. #define VER_PRODUCT_TYPE 0x0000080
  2311. #define VER_NT_WORKSTATION 0x0000001
  2312. #define VER_NT_DOMAIN_CONTROLLER 0x0000002
  2313. #define VER_NT_SERVER 0x0000003
  2314. #define VER_PLATFORM_WIN32s 0
  2315. #define VER_PLATFORM_WIN32_WINDOWS 1
  2316. #define VER_PLATFORM_WIN32_NT 2
  2317. typedef union _RTL_RUN_ONCE {
  2318. PVOID Ptr;
  2319. } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
  2320. typedef ULONG /* LOGICAL */
  2321. (NTAPI *PRTL_RUN_ONCE_INIT_FN) (
  2322. IN OUT PRTL_RUN_ONCE RunOnce,
  2323. IN OUT PVOID Parameter OPTIONAL,
  2324. IN OUT PVOID *Context OPTIONAL);
  2325. #endif /* _RTL_RUN_ONCE_DEF */
  2326. typedef enum _TABLE_SEARCH_RESULT {
  2327. TableEmptyTree,
  2328. TableFoundNode,
  2329. TableInsertAsLeft,
  2330. TableInsertAsRight
  2331. } TABLE_SEARCH_RESULT;
  2332. typedef enum _RTL_GENERIC_COMPARE_RESULTS {
  2333. GenericLessThan,
  2334. GenericGreaterThan,
  2335. GenericEqual
  2336. } RTL_GENERIC_COMPARE_RESULTS;
  2337. // Forwarder
  2338. struct _RTL_AVL_TABLE;
  2339. typedef RTL_GENERIC_COMPARE_RESULTS
  2340. (NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
  2341. IN struct _RTL_AVL_TABLE *Table,
  2342. IN PVOID FirstStruct,
  2343. IN PVOID SecondStruct);
  2344. typedef PVOID
  2345. (NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
  2346. IN struct _RTL_AVL_TABLE *Table,
  2347. IN CLONG ByteSize);
  2348. typedef VOID
  2349. (NTAPI *PRTL_AVL_FREE_ROUTINE) (
  2350. IN struct _RTL_AVL_TABLE *Table,
  2351. IN PVOID Buffer);
  2352. typedef NTSTATUS
  2353. (NTAPI *PRTL_AVL_MATCH_FUNCTION) (
  2354. IN struct _RTL_AVL_TABLE *Table,
  2355. IN PVOID UserData,
  2356. IN PVOID MatchData);
  2357. typedef struct _RTL_BALANCED_LINKS {
  2358. struct _RTL_BALANCED_LINKS *Parent;
  2359. struct _RTL_BALANCED_LINKS *LeftChild;
  2360. struct _RTL_BALANCED_LINKS *RightChild;
  2361. CHAR Balance;
  2362. UCHAR Reserved[3];
  2363. } RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
  2364. typedef struct _RTL_AVL_TABLE {
  2365. RTL_BALANCED_LINKS BalancedRoot;
  2366. PVOID OrderedPointer;
  2367. ULONG WhichOrderedElement;
  2368. ULONG NumberGenericTableElements;
  2369. ULONG DepthOfTree;
  2370. PRTL_BALANCED_LINKS RestartKey;
  2371. ULONG DeleteCount;
  2372. PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
  2373. PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
  2374. PRTL_AVL_FREE_ROUTINE FreeRoutine;
  2375. PVOID TableContext;
  2376. } RTL_AVL_TABLE, *PRTL_AVL_TABLE;
  2377. #ifndef RTL_USE_AVL_TABLES
  2378. struct _RTL_GENERIC_TABLE;
  2379. typedef RTL_GENERIC_COMPARE_RESULTS
  2380. (NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
  2381. IN struct _RTL_GENERIC_TABLE *Table,
  2382. IN PVOID FirstStruct,
  2383. IN PVOID SecondStruct);
  2384. typedef PVOID
  2385. (NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
  2386. IN struct _RTL_GENERIC_TABLE *Table,
  2387. IN CLONG ByteSize);
  2388. typedef VOID
  2389. (NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
  2390. IN struct _RTL_GENERIC_TABLE *Table,
  2391. IN PVOID Buffer);
  2392. typedef struct _RTL_SPLAY_LINKS {
  2393. struct _RTL_SPLAY_LINKS *Parent;
  2394. struct _RTL_SPLAY_LINKS *LeftChild;
  2395. struct _RTL_SPLAY_LINKS *RightChild;
  2396. } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
  2397. typedef struct _RTL_GENERIC_TABLE {
  2398. PRTL_SPLAY_LINKS TableRoot;
  2399. LIST_ENTRY InsertOrderList;
  2400. PLIST_ENTRY OrderedPointer;
  2401. ULONG WhichOrderedElement;
  2402. ULONG NumberGenericTableElements;
  2403. PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
  2404. PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
  2405. PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
  2406. PVOID TableContext;
  2407. } RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
  2408. #endif /* !RTL_USE_AVL_TABLES */
  2409. #ifdef RTL_USE_AVL_TABLES
  2410. #undef PRTL_GENERIC_COMPARE_ROUTINE
  2411. #undef RTL_GENERIC_COMPARE_ROUTINE
  2412. #undef PRTL_GENERIC_ALLOCATE_ROUTINE
  2413. #undef RTL_GENERIC_ALLOCATE_ROUTINE
  2414. #undef PRTL_GENERIC_FREE_ROUTINE
  2415. #undef RTL_GENERIC_FREE_ROUTINE
  2416. #undef RTL_GENERIC_TABLE
  2417. #undef PRTL_GENERIC_TABLE
  2418. #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
  2419. #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
  2420. #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
  2421. #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
  2422. #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
  2423. #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
  2424. #define RTL_GENERIC_TABLE RTL_AVL_TABLE
  2425. #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
  2426. #endif /* RTL_USE_AVL_TABLES */
  2427. typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
  2428. LIST_ENTRY Linkage;
  2429. ULONG_PTR Signature;
  2430. } RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
  2431. typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
  2432. PLIST_ENTRY ChainHead;
  2433. PLIST_ENTRY PrevLinkage;
  2434. ULONG_PTR Signature;
  2435. } RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
  2436. typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
  2437. RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
  2438. PLIST_ENTRY ChainHead;
  2439. ULONG BucketIndex;
  2440. } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
  2441. typedef struct _RTL_DYNAMIC_HASH_TABLE {
  2442. ULONG Flags;
  2443. ULONG Shift;
  2444. ULONG TableSize;
  2445. ULONG Pivot;
  2446. ULONG DivisorMask;
  2447. ULONG NumEntries;
  2448. ULONG NonEmptyBuckets;
  2449. ULONG NumEnumerators;
  2450. PVOID Directory;
  2451. } RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
  2452. typedef struct _OSVERSIONINFOA {
  2453. ULONG dwOSVersionInfoSize;
  2454. ULONG dwMajorVersion;
  2455. ULONG dwMinorVersion;
  2456. ULONG dwBuildNumber;
  2457. ULONG dwPlatformId;
  2458. CHAR szCSDVersion[128];
  2459. } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
  2460. typedef struct _OSVERSIONINFOW {
  2461. ULONG dwOSVersionInfoSize;
  2462. ULONG dwMajorVersion;
  2463. ULONG dwMinorVersion;
  2464. ULONG dwBuildNumber;
  2465. ULONG dwPlatformId;
  2466. WCHAR szCSDVersion[128];
  2467. } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
  2468. typedef struct _OSVERSIONINFOEXA {
  2469. ULONG dwOSVersionInfoSize;
  2470. ULONG dwMajorVersion;
  2471. ULONG dwMinorVersion;
  2472. ULONG dwBuildNumber;
  2473. ULONG dwPlatformId;
  2474. CHAR szCSDVersion[128];
  2475. USHORT wServicePackMajor;
  2476. USHORT wServicePackMinor;
  2477. USHORT wSuiteMask;
  2478. UCHAR wProductType;
  2479. UCHAR wReserved;
  2480. } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
  2481. typedef struct _OSVERSIONINFOEXW {
  2482. ULONG dwOSVersionInfoSize;
  2483. ULONG dwMajorVersion;
  2484. ULONG dwMinorVersion;
  2485. ULONG dwBuildNumber;
  2486. ULONG dwPlatformId;
  2487. WCHAR szCSDVersion[128];
  2488. USHORT wServicePackMajor;
  2489. USHORT wServicePackMinor;
  2490. USHORT wSuiteMask;
  2491. UCHAR wProductType;
  2492. UCHAR wReserved;
  2493. } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
  2494. #ifdef UNICODE
  2495. typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
  2496. typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
  2497. typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
  2498. typedef OSVERSIONINFOW OSVERSIONINFO;
  2499. typedef POSVERSIONINFOW POSVERSIONINFO;
  2500. typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
  2501. #else
  2502. typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
  2503. typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
  2504. typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
  2505. typedef OSVERSIONINFOA OSVERSIONINFO;
  2506. typedef POSVERSIONINFOA POSVERSIONINFO;
  2507. typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
  2508. #endif /* UNICODE */
  2509. #define HASH_ENTRY_KEY(x) ((x)->Signature)
  2510. /******************************************************************************
  2511. * Security Manager Types *
  2512. ******************************************************************************/
  2513. #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
  2514. typedef enum _WELL_KNOWN_SID_TYPE {
  2515. WinNullSid = 0,
  2516. WinWorldSid = 1,
  2517. WinLocalSid = 2,
  2518. WinCreatorOwnerSid = 3,
  2519. WinCreatorGroupSid = 4,
  2520. WinCreatorOwnerServerSid = 5,
  2521. WinCreatorGroupServerSid = 6,
  2522. WinNtAuthoritySid = 7,
  2523. WinDialupSid = 8,
  2524. WinNetworkSid = 9,
  2525. WinBatchSid = 10,
  2526. WinInteractiveSid = 11,
  2527. WinServiceSid = 12,
  2528. WinAnonymousSid = 13,
  2529. WinProxySid = 14,
  2530. WinEnterpriseControllersSid = 15,
  2531. WinSelfSid = 16,
  2532. WinAuthenticatedUserSid = 17,
  2533. WinRestrictedCodeSid = 18,
  2534. WinTerminalServerSid = 19,
  2535. WinRemoteLogonIdSid = 20,
  2536. WinLogonIdsSid = 21,
  2537. WinLocalSystemSid = 22,
  2538. WinLocalServiceSid = 23,
  2539. WinNetworkServiceSid = 24,
  2540. WinBuiltinDomainSid = 25,
  2541. WinBuiltinAdministratorsSid = 26,
  2542. WinBuiltinUsersSid = 27,
  2543. WinBuiltinGuestsSid = 28,
  2544. WinBuiltinPowerUsersSid = 29,
  2545. WinBuiltinAccountOperatorsSid = 30,
  2546. WinBuiltinSystemOperatorsSid = 31,
  2547. WinBuiltinPrintOperatorsSid = 32,
  2548. WinBuiltinBackupOperatorsSid = 33,
  2549. WinBuiltinReplicatorSid = 34,
  2550. WinBuiltinPreWindows2000CompatibleAccessSid = 35,
  2551. WinBuiltinRemoteDesktopUsersSid = 36,
  2552. WinBuiltinNetworkConfigurationOperatorsSid = 37,
  2553. WinAccountAdministratorSid = 38,
  2554. WinAccountGuestSid = 39,
  2555. WinAccountKrbtgtSid = 40,
  2556. WinAccountDomainAdminsSid = 41,
  2557. WinAccountDomainUsersSid = 42,
  2558. WinAccountDomainGuestsSid = 43,
  2559. WinAccountComputersSid = 44,
  2560. WinAccountControllersSid = 45,
  2561. WinAccountCertAdminsSid = 46,
  2562. WinAccountSchemaAdminsSid = 47,
  2563. WinAccountEnterpriseAdminsSid = 48,
  2564. WinAccountPolicyAdminsSid = 49,
  2565. WinAccountRasAndIasServersSid = 50,
  2566. WinNTLMAuthenticationSid = 51,
  2567. WinDigestAuthenticationSid = 52,
  2568. WinSChannelAuthenticationSid = 53,
  2569. WinThisOrganizationSid = 54,
  2570. WinOtherOrganizationSid = 55,
  2571. WinBuiltinIncomingForestTrustBuildersSid = 56,
  2572. WinBuiltinPerfMonitoringUsersSid = 57,
  2573. WinBuiltinPerfLoggingUsersSid = 58,
  2574. WinBuiltinAuthorizationAccessSid = 59,
  2575. WinBuiltinTerminalServerLicenseServersSid = 60,
  2576. WinBuiltinDCOMUsersSid = 61,
  2577. WinBuiltinIUsersSid = 62,
  2578. WinIUserSid = 63,
  2579. WinBuiltinCryptoOperatorsSid = 64,
  2580. WinUntrustedLabelSid = 65,
  2581. WinLowLabelSid = 66,
  2582. WinMediumLabelSid = 67,
  2583. WinHighLabelSid = 68,
  2584. WinSystemLabelSid = 69,
  2585. WinWriteRestrictedCodeSid = 70,
  2586. WinCreatorOwnerRightsSid = 71,
  2587. WinCacheablePrincipalsGroupSid = 72,
  2588. WinNonCacheablePrincipalsGroupSid = 73,
  2589. WinEnterpriseReadonlyControllersSid = 74,
  2590. WinAccountReadonlyControllersSid = 75,
  2591. WinBuiltinEventLogReadersGroup = 76,
  2592. WinNewEnterpriseReadonlyControllersSid = 77,
  2593. WinBuiltinCertSvcDComAccessGroup = 78,
  2594. WinMediumPlusLabelSid = 79,
  2595. WinLocalLogonSid = 80,
  2596. WinConsoleLogonSid = 81,
  2597. WinThisOrganizationCertificateSid = 82,
  2598. } WELL_KNOWN_SID_TYPE;
  2599. #if defined(_M_IX86)
  2600. #define PAUSE_PROCESSOR YieldProcessor();
  2601. #define KERNEL_STACK_SIZE 12288
  2602. #define KERNEL_LARGE_STACK_SIZE 61440
  2603. #define KERNEL_LARGE_STACK_COMMIT 12288
  2604. #define SIZE_OF_80387_REGISTERS 80
  2605. #if !defined(RC_INVOKED)
  2606. #define CONTEXT_i386 0x10000
  2607. #define CONTEXT_i486 0x10000
  2608. #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
  2609. #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
  2610. #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
  2611. #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
  2612. #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
  2613. #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
  2614. #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
  2615. #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
  2616. CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
  2617. CONTEXT_EXTENDED_REGISTERS)
  2618. #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
  2619. #endif /* !defined(RC_INVOKED) */
  2620. typedef struct _FLOATING_SAVE_AREA {
  2621. ULONG ControlWord;
  2622. ULONG StatusWord;
  2623. ULONG TagWord;
  2624. ULONG ErrorOffset;
  2625. ULONG ErrorSelector;
  2626. ULONG DataOffset;
  2627. ULONG DataSelector;
  2628. UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
  2629. ULONG Cr0NpxState;
  2630. } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
  2631. #include "pshpack4.h"
  2632. typedef struct _CONTEXT {
  2633. ULONG ContextFlags;
  2634. ULONG Dr0;
  2635. ULONG Dr1;
  2636. ULONG Dr2;
  2637. ULONG Dr3;
  2638. ULONG Dr6;
  2639. ULONG Dr7;
  2640. FLOATING_SAVE_AREA FloatSave;
  2641. ULONG SegGs;
  2642. ULONG SegFs;
  2643. ULONG SegEs;
  2644. ULONG SegDs;
  2645. ULONG Edi;
  2646. ULONG Esi;
  2647. ULONG Ebx;
  2648. ULONG Edx;
  2649. ULONG Ecx;
  2650. ULONG Eax;
  2651. ULONG Ebp;
  2652. ULONG Eip;
  2653. ULONG SegCs;
  2654. ULONG EFlags;
  2655. ULONG Esp;
  2656. ULONG SegSs;
  2657. UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
  2658. } CONTEXT;
  2659. #include "poppack.h"
  2660. #define KeGetPcr() PCR
  2661. #define PCR_MINOR_VERSION 1
  2662. #define PCR_MAJOR_VERSION 1
  2663. typedef struct _KPCR {
  2664. union {
  2665. NT_TIB NtTib;
  2666. struct {
  2667. struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
  2668. PVOID Used_StackBase;
  2669. PVOID Spare2;
  2670. PVOID TssCopy;
  2671. ULONG ContextSwitches;
  2672. KAFFINITY SetMemberCopy;
  2673. PVOID Used_Self;
  2674. };
  2675. };
  2676. struct _KPCR *SelfPcr;
  2677. struct _KPRCB *Prcb;
  2678. KIRQL Irql;
  2679. ULONG IRR;
  2680. ULONG IrrActive;
  2681. ULONG IDR;
  2682. PVOID KdVersionBlock;
  2683. struct _KIDTENTRY *IDT;
  2684. struct _KGDTENTRY *GDT;
  2685. struct _KTSS *TSS;
  2686. USHORT MajorVersion;
  2687. USHORT MinorVersion;
  2688. KAFFINITY SetMember;
  2689. ULONG StallScaleFactor;
  2690. UCHAR SpareUnused;
  2691. UCHAR Number;
  2692. UCHAR Spare0;
  2693. UCHAR SecondLevelCacheAssociativity;
  2694. ULONG VdmAlert;
  2695. ULONG KernelReserved[14];
  2696. ULONG SecondLevelCacheSize;
  2697. ULONG HalReserved[16];
  2698. } KPCR, *PKPCR;
  2699. FORCEINLINE
  2700. ULONG
  2701. KeGetCurrentProcessorNumber(VOID)
  2702. {
  2703. return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
  2704. }
  2705. extern NTKERNELAPI PVOID MmHighestUserAddress;
  2706. extern NTKERNELAPI PVOID MmSystemRangeStart;
  2707. extern NTKERNELAPI ULONG MmUserProbeAddress;
  2708. #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
  2709. #define MM_SYSTEM_RANGE_START MmSystemRangeStart
  2710. #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
  2711. #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
  2712. extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
  2713. #else
  2714. #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
  2715. #endif
  2716. #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
  2717. #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
  2718. #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
  2719. #if !defined (_X86PAE_)
  2720. #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
  2721. #else
  2722. #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
  2723. #endif
  2724. #elif defined(_M_AMD64)
  2725. #define PAUSE_PROCESSOR YieldProcessor();
  2726. #define KERNEL_STACK_SIZE 0x6000
  2727. #define KERNEL_LARGE_STACK_SIZE 0x12000
  2728. #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
  2729. #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
  2730. #define EXCEPTION_READ_FAULT 0
  2731. #define EXCEPTION_WRITE_FAULT 1
  2732. #define EXCEPTION_EXECUTE_FAULT 8
  2733. #if !defined(RC_INVOKED)
  2734. #define CONTEXT_AMD64 0x100000
  2735. #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
  2736. #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
  2737. #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
  2738. #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
  2739. #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
  2740. #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
  2741. #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
  2742. #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
  2743. #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
  2744. #define CONTEXT_SERVICE_ACTIVE 0x10000000
  2745. #define CONTEXT_EXCEPTION_REQUEST 0x40000000
  2746. #define CONTEXT_EXCEPTION_REPORTING 0x80000000
  2747. #endif /* !defined(RC_INVOKED) */
  2748. #define INITIAL_MXCSR 0x1f80
  2749. #define INITIAL_FPCSR 0x027f
  2750. typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
  2751. ULONG64 P1Home;
  2752. ULONG64 P2Home;
  2753. ULONG64 P3Home;
  2754. ULONG64 P4Home;
  2755. ULONG64 P5Home;
  2756. ULONG64 P6Home;
  2757. ULONG ContextFlags;
  2758. ULONG MxCsr;
  2759. USHORT SegCs;
  2760. USHORT SegDs;
  2761. USHORT SegEs;
  2762. USHORT SegFs;
  2763. USHORT SegGs;
  2764. USHORT SegSs;
  2765. ULONG EFlags;
  2766. ULONG64 Dr0;
  2767. ULONG64 Dr1;
  2768. ULONG64 Dr2;
  2769. ULONG64 Dr3;
  2770. ULONG64 Dr6;
  2771. ULONG64 Dr7;
  2772. ULONG64 Rax;
  2773. ULONG64 Rcx;
  2774. ULONG64 Rdx;
  2775. ULONG64 Rbx;
  2776. ULONG64 Rsp;
  2777. ULONG64 Rbp;
  2778. ULONG64 Rsi;
  2779. ULONG64 Rdi;
  2780. ULONG64 R8;
  2781. ULONG64 R9;
  2782. ULONG64 R10;
  2783. ULONG64 R11;
  2784. ULONG64 R12;
  2785. ULONG64 R13;
  2786. ULONG64 R14;
  2787. ULONG64 R15;
  2788. ULONG64 Rip;
  2789. _ANONYMOUS_UNION union {
  2790. XMM_SAVE_AREA32 FltSave;
  2791. _ANONYMOUS_STRUCT struct {
  2792. M128A Header[2];
  2793. M128A Legacy[8];
  2794. M128A Xmm0;
  2795. M128A Xmm1;
  2796. M128A Xmm2;
  2797. M128A Xmm3;
  2798. M128A Xmm4;
  2799. M128A Xmm5;
  2800. M128A Xmm6;
  2801. M128A Xmm7;
  2802. M128A Xmm8;
  2803. M128A Xmm9;
  2804. M128A Xmm10;
  2805. M128A Xmm11;
  2806. M128A Xmm12;
  2807. M128A Xmm13;
  2808. M128A Xmm14;
  2809. M128A Xmm15;
  2810. } DUMMYSTRUCTNAME;
  2811. } DUMMYUNIONNAME;
  2812. M128A VectorRegister[26];
  2813. ULONG64 VectorControl;
  2814. ULONG64 DebugControl;
  2815. ULONG64 LastBranchToRip;
  2816. ULONG64 LastBranchFromRip;
  2817. ULONG64 LastExceptionToRip;
  2818. ULONG64 LastExceptionFromRip;
  2819. } CONTEXT;
  2820. #define PCR_MINOR_VERSION 1
  2821. #define PCR_MAJOR_VERSION 1
  2822. typedef struct _KPCR {
  2823. _ANONYMOUS_UNION union {
  2824. NT_TIB NtTib;
  2825. _ANONYMOUS_STRUCT struct {
  2826. union _KGDTENTRY64 *GdtBase;
  2827. struct _KTSS64 *TssBase;
  2828. ULONG64 UserRsp;
  2829. struct _KPCR *Self;
  2830. struct _KPRCB *CurrentPrcb;
  2831. PKSPIN_LOCK_QUEUE LockArray;
  2832. PVOID Used_Self;
  2833. };
  2834. };
  2835. union _KIDTENTRY64 *IdtBase;
  2836. ULONG64 Unused[2];
  2837. KIRQL Irql;
  2838. UCHAR SecondLevelCacheAssociativity;
  2839. UCHAR ObsoleteNumber;
  2840. UCHAR Fill0;
  2841. ULONG Unused0[3];
  2842. USHORT MajorVersion;
  2843. USHORT MinorVersion;
  2844. ULONG StallScaleFactor;
  2845. PVOID Unused1[3];
  2846. ULONG KernelReserved[15];
  2847. ULONG SecondLevelCacheSize;
  2848. ULONG HalReserved[16];
  2849. ULONG Unused2;
  2850. PVOID KdVersionBlock;
  2851. PVOID Unused3;
  2852. ULONG PcrAlign1[24];
  2853. } KPCR, *PKPCR;
  2854. FORCEINLINE
  2855. PKPCR
  2856. KeGetPcr(VOID)
  2857. {
  2858. return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
  2859. }
  2860. FORCEINLINE
  2861. ULONG
  2862. KeGetCurrentProcessorNumber(VOID)
  2863. {
  2864. return (ULONG)__readgsword(0x184);
  2865. }
  2866. #define PTI_SHIFT 12L
  2867. #define PDI_SHIFT 21L
  2868. #define PPI_SHIFT 30L
  2869. #define PXI_SHIFT 39L
  2870. #define PTE_PER_PAGE 512
  2871. #define PDE_PER_PAGE 512
  2872. #define PPE_PER_PAGE 512
  2873. #define PXE_PER_PAGE 512
  2874. #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
  2875. #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
  2876. #define PPI_MASK (PPE_PER_PAGE - 1)
  2877. #define PXI_MASK (PXE_PER_PAGE - 1)
  2878. #define PXE_BASE 0xFFFFF6FB7DBED000ULL
  2879. #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
  2880. #define PPE_BASE 0xFFFFF6FB7DA00000ULL
  2881. #define PDE_BASE 0xFFFFF6FB40000000ULL
  2882. #define PTE_BASE 0xFFFFF68000000000ULL
  2883. #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
  2884. #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
  2885. #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
  2886. #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
  2887. extern NTKERNELAPI PVOID MmHighestUserAddress;
  2888. extern NTKERNELAPI PVOID MmSystemRangeStart;
  2889. extern NTKERNELAPI ULONG64 MmUserProbeAddress;
  2890. #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
  2891. #define MM_SYSTEM_RANGE_START MmSystemRangeStart
  2892. #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
  2893. #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
  2894. #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
  2895. #elif defined(_M_IA64)
  2896. #elif defined(_M_PPC)
  2897. #elif defined(_M_MIPS)
  2898. #elif defined(_M_ARM)
  2899. #else
  2900. #error Unknown Architecture
  2901. #endif
  2902. /******************************************************************************
  2903. * Executive Functions *
  2904. ******************************************************************************/
  2905. static __inline PVOID
  2906. ExAllocateFromZone(
  2907. IN PZONE_HEADER Zone)
  2908. {
  2909. PVOID Result = (PVOID)Zone->FreeList.Next;
  2910. if (Zone->FreeList.Next)
  2911. Zone->FreeList.Next = Zone->FreeList.Next->Next;
  2912. return Result;
  2913. }
  2914. static __inline PVOID
  2915. ExFreeToZone(
  2916. IN PZONE_HEADER Zone,
  2917. IN PVOID Block)
  2918. {
  2919. ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
  2920. Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
  2921. return ((PSINGLE_LIST_ENTRY) Block)->Next;
  2922. }
  2923. /*
  2924. * PVOID
  2925. * ExInterlockedAllocateFromZone(
  2926. * IN PZONE_HEADER Zone,
  2927. * IN PKSPIN_LOCK Lock)
  2928. */
  2929. #define ExInterlockedAllocateFromZone(Zone, Lock) \
  2930. ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
  2931. /* PVOID
  2932. * ExInterlockedFreeToZone(
  2933. * IN PZONE_HEADER Zone,
  2934. * IN PVOID Block,
  2935. * IN PKSPIN_LOCK Lock);
  2936. */
  2937. #define ExInterlockedFreeToZone(Zone, Block, Lock) \
  2938. ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
  2939. /*
  2940. * BOOLEAN
  2941. * ExIsFullZone(
  2942. * IN PZONE_HEADER Zone)
  2943. */
  2944. #define ExIsFullZone(Zone) \
  2945. ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
  2946. /* BOOLEAN
  2947. * ExIsObjectInFirstZoneSegment(
  2948. * IN PZONE_HEADER Zone,
  2949. * IN PVOID Object);
  2950. */
  2951. #define ExIsObjectInFirstZoneSegment(Zone,Object) \
  2952. ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
  2953. ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
  2954. (Zone)->TotalSegmentSize)) )
  2955. #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
  2956. #define ExAcquireResourceShared ExAcquireResourceSharedLite
  2957. #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
  2958. #define ExDeleteResource ExDeleteResourceLite
  2959. #define ExInitializeResource ExInitializeResourceLite
  2960. #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
  2961. #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
  2962. #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
  2963. #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
  2964. #ifndef _M_IX86
  2965. #define RESULT_ZERO 0
  2966. #define RESULT_NEGATIVE 1
  2967. #define RESULT_POSITIVE 2
  2968. #endif
  2969. typedef enum _INTERLOCKED_RESULT {
  2970. ResultNegative = RESULT_NEGATIVE,
  2971. ResultZero = RESULT_ZERO,
  2972. ResultPositive = RESULT_POSITIVE
  2973. } INTERLOCKED_RESULT;
  2974. #ifdef _X86_
  2975. NTKERNELAPI
  2976. INTERLOCKED_RESULT
  2977. FASTCALL
  2978. Exfi386InterlockedIncrementLong(
  2979. IN OUT LONG volatile *Addend);
  2980. NTKERNELAPI
  2981. INTERLOCKED_RESULT
  2982. FASTCALL
  2983. Exfi386InterlockedDecrementLong(
  2984. IN PLONG Addend);
  2985. NTKERNELAPI
  2986. ULONG
  2987. FASTCALL
  2988. Exfi386InterlockedExchangeUlong(
  2989. IN PULONG Target,
  2990. IN ULONG Value);
  2991. #endif
  2992. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  2993. NTKERNELAPI
  2994. NTSTATUS
  2995. NTAPI
  2996. ExExtendZone(
  2997. IN OUT PZONE_HEADER Zone,
  2998. IN OUT PVOID Segment,
  2999. IN ULONG SegmentSize);
  3000. NTKERNELAPI
  3001. NTSTATUS
  3002. NTAPI
  3003. ExInitializeZone(
  3004. OUT PZONE_HEADER Zone,
  3005. IN ULONG BlockSize,
  3006. IN OUT PVOID InitialSegment,
  3007. IN ULONG InitialSegmentSize);
  3008. NTKERNELAPI
  3009. NTSTATUS
  3010. NTAPI
  3011. ExInterlockedExtendZone(
  3012. IN OUT PZONE_HEADER Zone,
  3013. IN OUT PVOID Segment,
  3014. IN ULONG SegmentSize,
  3015. IN OUT PKSPIN_LOCK Lock);
  3016. NTKERNELAPI
  3017. NTSTATUS
  3018. NTAPI
  3019. ExUuidCreate(
  3020. OUT UUID *Uuid);
  3021. NTKERNELAPI
  3022. DECLSPEC_NORETURN
  3023. VOID
  3024. NTAPI
  3025. ExRaiseAccessViolation(VOID);
  3026. NTKERNELAPI
  3027. DECLSPEC_NORETURN
  3028. VOID
  3029. NTAPI
  3030. ExRaiseDatatypeMisalignment(VOID);
  3031. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  3032. /* Hardware Abstraction Layer Functions */
  3033. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  3034. #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
  3035. /* Nothing here */
  3036. #else /* USE_DMA_MACROS ... */
  3037. //DECLSPEC_DEPRECATED_DDK
  3038. NTHALAPI
  3039. VOID
  3040. NTAPI
  3041. IoFreeAdapterChannel(
  3042. IN PADAPTER_OBJECT AdapterObject);
  3043. //DECLSPEC_DEPRECATED_DDK
  3044. NTHALAPI
  3045. BOOLEAN
  3046. NTAPI
  3047. IoFlushAdapterBuffers(
  3048. IN PADAPTER_OBJECT AdapterObject,
  3049. IN PMDL Mdl,
  3050. IN PVOID MapRegisterBase,
  3051. IN PVOID CurrentVa,
  3052. IN ULONG Length,
  3053. IN BOOLEAN WriteToDevice);
  3054. //DECLSPEC_DEPRECATED_DDK
  3055. NTHALAPI
  3056. VOID
  3057. NTAPI
  3058. IoFreeMapRegisters(
  3059. IN PADAPTER_OBJECT AdapterObject,
  3060. IN PVOID MapRegisterBase,
  3061. IN ULONG NumberOfMapRegisters);
  3062. //DECLSPEC_DEPRECATED_DDK
  3063. NTHALAPI
  3064. PVOID
  3065. NTAPI
  3066. HalAllocateCommonBuffer(
  3067. IN PADAPTER_OBJECT AdapterObject,
  3068. IN ULONG Length,
  3069. OUT PPHYSICAL_ADDRESS LogicalAddress,
  3070. IN BOOLEAN CacheEnabled);
  3071. //DECLSPEC_DEPRECATED_DDK
  3072. NTHALAPI
  3073. VOID
  3074. NTAPI
  3075. HalFreeCommonBuffer(
  3076. IN PADAPTER_OBJECT AdapterObject,
  3077. IN ULONG Length,
  3078. IN PHYSICAL_ADDRESS LogicalAddress,
  3079. IN PVOID VirtualAddress,
  3080. IN BOOLEAN CacheEnabled);
  3081. //DECLSPEC_DEPRECATED_DDK
  3082. NTHALAPI
  3083. ULONG
  3084. NTAPI
  3085. HalReadDmaCounter(
  3086. IN PADAPTER_OBJECT AdapterObject);
  3087. NTHALAPI
  3088. NTSTATUS
  3089. NTAPI
  3090. HalAllocateAdapterChannel(
  3091. IN PADAPTER_OBJECT AdapterObject,
  3092. IN PWAIT_CONTEXT_BLOCK Wcb,
  3093. IN ULONG NumberOfMapRegisters,
  3094. IN PDRIVER_CONTROL ExecutionRoutine);
  3095. #endif /* USE_DMA_MACROS ... */
  3096. #if !defined(NO_LEGACY_DRIVERS)
  3097. NTHALAPI
  3098. NTSTATUS
  3099. NTAPI
  3100. HalAssignSlotResources(
  3101. IN PUNICODE_STRING RegistryPath,
  3102. IN PUNICODE_STRING DriverClassName,
  3103. IN PDRIVER_OBJECT DriverObject,
  3104. IN PDEVICE_OBJECT DeviceObject,
  3105. IN INTERFACE_TYPE BusType,
  3106. IN ULONG BusNumber,
  3107. IN ULONG SlotNumber,
  3108. IN OUT PCM_RESOURCE_LIST *AllocatedResources);
  3109. NTHALAPI
  3110. ULONG
  3111. NTAPI
  3112. HalGetInterruptVector(
  3113. IN INTERFACE_TYPE InterfaceType,
  3114. IN ULONG BusNumber,
  3115. IN ULONG BusInterruptLevel,
  3116. IN ULONG BusInterruptVector,
  3117. OUT PKIRQL Irql,
  3118. OUT PKAFFINITY Affinity);
  3119. NTHALAPI
  3120. ULONG
  3121. NTAPI
  3122. HalSetBusData(
  3123. IN BUS_DATA_TYPE BusDataType,
  3124. IN ULONG BusNumber,
  3125. IN ULONG SlotNumber,
  3126. IN PVOID Buffer,
  3127. IN ULONG Length);
  3128. NTHALAPI
  3129. ULONG
  3130. NTAPI
  3131. HalGetBusData(
  3132. IN BUS_DATA_TYPE BusDataType,
  3133. IN ULONG BusNumber,
  3134. IN ULONG SlotNumber,
  3135. OUT PVOID Buffer,
  3136. IN ULONG Length);
  3137. NTHALAPI
  3138. BOOLEAN
  3139. NTAPI
  3140. HalMakeBeep(
  3141. IN ULONG Frequency);
  3142. #endif /* !defined(NO_LEGACY_DRIVERS) */
  3143. NTHALAPI
  3144. PADAPTER_OBJECT
  3145. NTAPI
  3146. HalGetAdapter(
  3147. IN PDEVICE_DESCRIPTION DeviceDescription,
  3148. OUT PULONG NumberOfMapRegisters);
  3149. VOID
  3150. NTAPI
  3151. HalPutDmaAdapter(
  3152. IN PADAPTER_OBJECT DmaAdapter);
  3153. NTHALAPI
  3154. VOID
  3155. NTAPI
  3156. HalAcquireDisplayOwnership(
  3157. IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
  3158. NTHALAPI
  3159. ULONG
  3160. NTAPI
  3161. HalGetBusDataByOffset(
  3162. IN BUS_DATA_TYPE BusDataType,
  3163. IN ULONG BusNumber,
  3164. IN ULONG SlotNumber,
  3165. OUT PVOID Buffer,
  3166. IN ULONG Offset,
  3167. IN ULONG Length);
  3168. NTHALAPI
  3169. ULONG
  3170. NTAPI
  3171. HalSetBusDataByOffset(
  3172. IN BUS_DATA_TYPE BusDataType,
  3173. IN ULONG BusNumber,
  3174. IN ULONG SlotNumber,
  3175. IN PVOID Buffer,
  3176. IN ULONG Offset,
  3177. IN ULONG Length);
  3178. NTHALAPI
  3179. BOOLEAN
  3180. NTAPI
  3181. HalTranslateBusAddress(
  3182. IN INTERFACE_TYPE InterfaceType,
  3183. IN ULONG BusNumber,
  3184. IN PHYSICAL_ADDRESS BusAddress,
  3185. IN OUT PULONG AddressSpace,
  3186. OUT PPHYSICAL_ADDRESS TranslatedAddress);
  3187. NTHALAPI
  3188. PVOID
  3189. NTAPI
  3190. HalAllocateCrashDumpRegisters(
  3191. IN PADAPTER_OBJECT AdapterObject,
  3192. IN OUT PULONG NumberOfMapRegisters);
  3193. NTSTATUS
  3194. NTAPI
  3195. HalGetScatterGatherList(
  3196. IN PADAPTER_OBJECT DmaAdapter,
  3197. IN PDEVICE_OBJECT DeviceObject,
  3198. IN PMDL Mdl,
  3199. IN PVOID CurrentVa,
  3200. IN ULONG Length,
  3201. IN PDRIVER_LIST_CONTROL ExecutionRoutine,
  3202. IN PVOID Context,
  3203. IN BOOLEAN WriteToDevice);
  3204. VOID
  3205. NTAPI
  3206. HalPutScatterGatherList(
  3207. IN PADAPTER_OBJECT DmaAdapter,
  3208. IN PSCATTER_GATHER_LIST ScatterGather,
  3209. IN BOOLEAN WriteToDevice);
  3210. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  3211. #if (NTDDI_VERSION >= NTDDI_WINXP)
  3212. NTKERNELAPI
  3213. VOID
  3214. FASTCALL
  3215. HalExamineMBR(
  3216. IN PDEVICE_OBJECT DeviceObject,
  3217. IN ULONG SectorSize,
  3218. IN ULONG MBRTypeIdentifier,
  3219. OUT PVOID *Buffer);
  3220. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  3221. #if (NTDDI_VERSION >= NTDDI_WIN7)
  3222. NTSTATUS
  3223. NTAPI
  3224. HalAllocateHardwareCounters(
  3225. IN PGROUP_AFFINITY GroupAffinty,
  3226. IN ULONG GroupCount,
  3227. IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
  3228. OUT PHANDLE CounterSetHandle);
  3229. NTSTATUS
  3230. NTAPI
  3231. HalFreeHardwareCounters(
  3232. IN HANDLE CounterSetHandle);
  3233. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  3234. #if defined(_IA64_)
  3235. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  3236. NTHALAPI
  3237. ULONG
  3238. NTAPI
  3239. HalGetDmaAlignmentRequirement(VOID);
  3240. #endif
  3241. #endif /* defined(_IA64_) */
  3242. #if defined(_M_IX86) || defined(_M_AMD64)
  3243. #define HalGetDmaAlignmentRequirement() 1L
  3244. #endif
  3245. #if (NTDDI_VERSION >= NTDDI_WIN7)
  3246. typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
  3247. typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
  3248. NTHALAPI
  3249. VOID
  3250. NTAPI
  3251. HalBugCheckSystem(
  3252. IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
  3253. IN PWHEA_ERROR_RECORD ErrorRecord);
  3254. #else
  3255. typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
  3256. NTHALAPI
  3257. VOID
  3258. NTAPI
  3259. HalBugCheckSystem(
  3260. IN PWHEA_ERROR_RECORD ErrorRecord);
  3261. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  3262. /******************************************************************************
  3263. * I/O Manager Functions *
  3264. ******************************************************************************/
  3265. /*
  3266. * VOID IoAssignArcName(
  3267. * IN PUNICODE_STRING ArcName,
  3268. * IN PUNICODE_STRING DeviceName);
  3269. */
  3270. #define IoAssignArcName(_ArcName, _DeviceName) ( \
  3271. IoCreateSymbolicLink((_ArcName), (_DeviceName)))
  3272. /*
  3273. * VOID
  3274. * IoDeassignArcName(
  3275. * IN PUNICODE_STRING ArcName)
  3276. */
  3277. #define IoDeassignArcName IoDeleteSymbolicLink
  3278. FORCEINLINE
  3279. VOID
  3280. NTAPI
  3281. IoInitializeDriverCreateContext(
  3282. PIO_DRIVER_CREATE_CONTEXT DriverContext)
  3283. {
  3284. RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
  3285. DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
  3286. }
  3287. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  3288. #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
  3289. NTKERNELAPI
  3290. NTSTATUS
  3291. NTAPI
  3292. IoAllocateAdapterChannel(
  3293. IN PADAPTER_OBJECT AdapterObject,
  3294. IN PDEVICE_OBJECT DeviceObject,
  3295. IN ULONG NumberOfMapRegisters,
  3296. IN PDRIVER_CONTROL ExecutionRoutine,
  3297. IN PVOID Context);
  3298. #endif
  3299. #if !defined(DMA_MACROS_DEFINED)
  3300. //DECLSPEC_DEPRECATED_DDK
  3301. NTHALAPI
  3302. PHYSICAL_ADDRESS
  3303. NTAPI
  3304. IoMapTransfer(
  3305. IN PADAPTER_OBJECT AdapterObject,
  3306. IN PMDL Mdl,
  3307. IN PVOID MapRegisterBase,
  3308. IN PVOID CurrentVa,
  3309. IN OUT PULONG Length,
  3310. IN BOOLEAN WriteToDevice);
  3311. #endif
  3312. NTKERNELAPI
  3313. VOID
  3314. NTAPI
  3315. IoAllocateController(
  3316. IN PCONTROLLER_OBJECT ControllerObject,
  3317. IN PDEVICE_OBJECT DeviceObject,
  3318. IN PDRIVER_CONTROL ExecutionRoutine,
  3319. IN PVOID Context OPTIONAL);
  3320. NTKERNELAPI
  3321. PCONTROLLER_OBJECT
  3322. NTAPI
  3323. IoCreateController(
  3324. IN ULONG Size);
  3325. NTKERNELAPI
  3326. VOID
  3327. NTAPI
  3328. IoDeleteController(
  3329. IN PCONTROLLER_OBJECT ControllerObject);
  3330. NTKERNELAPI
  3331. VOID
  3332. NTAPI
  3333. IoFreeController(
  3334. IN PCONTROLLER_OBJECT ControllerObject);
  3335. NTKERNELAPI
  3336. PCONFIGURATION_INFORMATION
  3337. NTAPI
  3338. IoGetConfigurationInformation(VOID);
  3339. NTKERNELAPI
  3340. PDEVICE_OBJECT
  3341. NTAPI
  3342. IoGetDeviceToVerify(
  3343. IN PETHREAD Thread);
  3344. NTKERNELAPI
  3345. VOID
  3346. NTAPI
  3347. IoCancelFileOpen(
  3348. IN PDEVICE_OBJECT DeviceObject,
  3349. IN PFILE_OBJECT FileObject);
  3350. NTKERNELAPI
  3351. PGENERIC_MAPPING
  3352. NTAPI
  3353. IoGetFileObjectGenericMapping(VOID);
  3354. NTKERNELAPI
  3355. PIRP
  3356. NTAPI
  3357. IoMakeAssociatedIrp(
  3358. IN PIRP Irp,
  3359. IN CCHAR StackSize);
  3360. NTKERNELAPI
  3361. NTSTATUS
  3362. NTAPI
  3363. IoQueryDeviceDescription(
  3364. IN PINTERFACE_TYPE BusType OPTIONAL,
  3365. IN PULONG BusNumber OPTIONAL,
  3366. IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
  3367. IN PULONG ControllerNumber OPTIONAL,
  3368. IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
  3369. IN PULONG PeripheralNumber OPTIONAL,
  3370. IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
  3371. IN OUT PVOID Context OPTIONAL);
  3372. NTKERNELAPI
  3373. VOID
  3374. NTAPI
  3375. IoRaiseHardError(
  3376. IN PIRP Irp,
  3377. IN PVPB Vpb OPTIONAL,
  3378. IN PDEVICE_OBJECT RealDeviceObject);
  3379. NTKERNELAPI
  3380. BOOLEAN
  3381. NTAPI
  3382. IoRaiseInformationalHardError(
  3383. IN NTSTATUS ErrorStatus,
  3384. IN PUNICODE_STRING String OPTIONAL,
  3385. IN PKTHREAD Thread OPTIONAL);
  3386. NTKERNELAPI
  3387. VOID
  3388. NTAPI
  3389. IoRegisterBootDriverReinitialization(
  3390. IN PDRIVER_OBJECT DriverObject,
  3391. IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
  3392. IN PVOID Context OPTIONAL);
  3393. NTKERNELAPI
  3394. VOID
  3395. NTAPI
  3396. IoRegisterDriverReinitialization(
  3397. IN PDRIVER_OBJECT DriverObject,
  3398. IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
  3399. IN PVOID Context OPTIONAL);
  3400. NTKERNELAPI
  3401. NTSTATUS
  3402. NTAPI
  3403. IoAttachDeviceByPointer(
  3404. IN PDEVICE_OBJECT SourceDevice,
  3405. IN PDEVICE_OBJECT TargetDevice);
  3406. NTKERNELAPI
  3407. NTSTATUS
  3408. NTAPI
  3409. IoReportDetectedDevice(
  3410. IN PDRIVER_OBJECT DriverObject,
  3411. IN INTERFACE_TYPE LegacyBusType,
  3412. IN ULONG BusNumber,
  3413. IN ULONG SlotNumber,
  3414. IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
  3415. IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
  3416. IN BOOLEAN ResourceAssigned,
  3417. IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
  3418. NTKERNELAPI
  3419. NTSTATUS
  3420. NTAPI
  3421. IoReportResourceForDetection(
  3422. IN PDRIVER_OBJECT DriverObject,
  3423. IN PCM_RESOURCE_LIST DriverList OPTIONAL,
  3424. IN ULONG DriverListSize OPTIONAL,
  3425. IN PDEVICE_OBJECT DeviceObject OPTIONAL,
  3426. IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
  3427. IN ULONG DeviceListSize OPTIONAL,
  3428. OUT PBOOLEAN ConflictDetected);
  3429. NTKERNELAPI
  3430. NTSTATUS
  3431. NTAPI
  3432. IoReportResourceUsage(
  3433. IN PUNICODE_STRING DriverClassName OPTIONAL,
  3434. IN PDRIVER_OBJECT DriverObject,
  3435. IN PCM_RESOURCE_LIST DriverList OPTIONAL,
  3436. IN ULONG DriverListSize OPTIONAL,
  3437. IN PDEVICE_OBJECT DeviceObject,
  3438. IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
  3439. IN ULONG DeviceListSize OPTIONAL,
  3440. IN BOOLEAN OverrideConflict,
  3441. OUT PBOOLEAN ConflictDetected);
  3442. NTKERNELAPI
  3443. VOID
  3444. NTAPI
  3445. IoSetHardErrorOrVerifyDevice(
  3446. IN PIRP Irp,
  3447. IN PDEVICE_OBJECT DeviceObject);
  3448. NTKERNELAPI
  3449. NTSTATUS
  3450. NTAPI
  3451. IoAssignResources(
  3452. IN PUNICODE_STRING RegistryPath,
  3453. IN PUNICODE_STRING DriverClassName OPTIONAL,
  3454. IN PDRIVER_OBJECT DriverObject,
  3455. IN PDEVICE_OBJECT DeviceObject OPTIONAL,
  3456. IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
  3457. IN OUT PCM_RESOURCE_LIST *AllocatedResources);
  3458. NTKERNELAPI
  3459. BOOLEAN
  3460. NTAPI
  3461. IoSetThreadHardErrorMode(
  3462. IN BOOLEAN EnableHardErrors);
  3463. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  3464. #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
  3465. NTKERNELAPI
  3466. BOOLEAN
  3467. NTAPI
  3468. IoIsFileOriginRemote(
  3469. IN PFILE_OBJECT FileObject);
  3470. NTKERNELAPI
  3471. NTSTATUS
  3472. NTAPI
  3473. IoSetFileOrigin(
  3474. IN PFILE_OBJECT FileObject,
  3475. IN BOOLEAN Remote);
  3476. #endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
  3477. #if (NTDDI_VERSION >= NTDDI_WINXP)
  3478. NTKERNELAPI
  3479. NTSTATUS
  3480. FASTCALL
  3481. IoReadPartitionTable(
  3482. IN PDEVICE_OBJECT DeviceObject,
  3483. IN ULONG SectorSize,
  3484. IN BOOLEAN ReturnRecognizedPartitions,
  3485. OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
  3486. NTKERNELAPI
  3487. NTSTATUS
  3488. FASTCALL
  3489. IoSetPartitionInformation(
  3490. IN PDEVICE_OBJECT DeviceObject,
  3491. IN ULONG SectorSize,
  3492. IN ULONG PartitionNumber,
  3493. IN ULONG PartitionType);
  3494. NTKERNELAPI
  3495. NTSTATUS
  3496. FASTCALL
  3497. IoWritePartitionTable(
  3498. IN PDEVICE_OBJECT DeviceObject,
  3499. IN ULONG SectorSize,
  3500. IN ULONG SectorsPerTrack,
  3501. IN ULONG NumberOfHeads,
  3502. IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
  3503. NTKERNELAPI
  3504. NTSTATUS
  3505. NTAPI
  3506. IoCreateDisk(
  3507. IN PDEVICE_OBJECT DeviceObject,
  3508. IN struct _CREATE_DISK* Disk OPTIONAL);
  3509. NTKERNELAPI
  3510. NTSTATUS
  3511. NTAPI
  3512. IoReadDiskSignature(
  3513. IN PDEVICE_OBJECT DeviceObject,
  3514. IN ULONG BytesPerSector,
  3515. OUT PDISK_SIGNATURE Signature);
  3516. NTKERNELAPI
  3517. NTSTATUS
  3518. NTAPI
  3519. IoReadPartitionTableEx(
  3520. IN PDEVICE_OBJECT DeviceObject,
  3521. OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
  3522. NTKERNELAPI
  3523. NTSTATUS
  3524. NTAPI
  3525. IoSetPartitionInformationEx(
  3526. IN PDEVICE_OBJECT DeviceObject,
  3527. IN ULONG PartitionNumber,
  3528. IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
  3529. NTKERNELAPI
  3530. NTSTATUS
  3531. NTAPI
  3532. IoSetSystemPartition(
  3533. IN PUNICODE_STRING VolumeNameString);
  3534. NTKERNELAPI
  3535. NTSTATUS
  3536. NTAPI
  3537. IoVerifyPartitionTable(
  3538. IN PDEVICE_OBJECT DeviceObject,
  3539. IN BOOLEAN FixErrors);
  3540. NTKERNELAPI
  3541. NTSTATUS
  3542. NTAPI
  3543. IoVolumeDeviceToDosName(
  3544. IN PVOID VolumeDeviceObject,
  3545. OUT PUNICODE_STRING DosName);
  3546. NTKERNELAPI
  3547. NTSTATUS
  3548. NTAPI
  3549. IoWritePartitionTableEx(
  3550. IN PDEVICE_OBJECT DeviceObject,
  3551. IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
  3552. NTKERNELAPI
  3553. NTSTATUS
  3554. NTAPI
  3555. IoCreateFileSpecifyDeviceObjectHint(
  3556. OUT PHANDLE FileHandle,
  3557. IN ACCESS_MASK DesiredAccess,
  3558. IN POBJECT_ATTRIBUTES ObjectAttributes,
  3559. OUT PIO_STATUS_BLOCK IoStatusBlock,
  3560. IN PLARGE_INTEGER AllocationSize OPTIONAL,
  3561. IN ULONG FileAttributes,
  3562. IN ULONG ShareAccess,
  3563. IN ULONG Disposition,
  3564. IN ULONG CreateOptions,
  3565. IN PVOID EaBuffer OPTIONAL,
  3566. IN ULONG EaLength,
  3567. IN CREATE_FILE_TYPE CreateFileType,
  3568. IN PVOID InternalParameters OPTIONAL,
  3569. IN ULONG Options,
  3570. IN PVOID DeviceObject OPTIONAL);
  3571. NTKERNELAPI
  3572. NTSTATUS
  3573. NTAPI
  3574. IoAttachDeviceToDeviceStackSafe(
  3575. IN PDEVICE_OBJECT SourceDevice,
  3576. IN PDEVICE_OBJECT TargetDevice,
  3577. OUT PDEVICE_OBJECT *AttachedToDeviceObject);
  3578. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  3579. #if (NTDDI_VERSION >= NTDDI_WS03)
  3580. NTKERNELAPI
  3581. IO_PAGING_PRIORITY
  3582. FASTCALL
  3583. IoGetPagingIoPriority(
  3584. IN PIRP Irp);
  3585. #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
  3586. #if (NTDDI_VERSION >= NTDDI_WS03SP1)
  3587. BOOLEAN
  3588. NTAPI
  3589. IoTranslateBusAddress(
  3590. IN INTERFACE_TYPE InterfaceType,
  3591. IN ULONG BusNumber,
  3592. IN PHYSICAL_ADDRESS BusAddress,
  3593. IN OUT PULONG AddressSpace,
  3594. OUT PPHYSICAL_ADDRESS TranslatedAddress);
  3595. #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
  3596. #if (NTDDI_VERSION >= NTDDI_VISTA)
  3597. NTKERNELAPI
  3598. NTSTATUS
  3599. NTAPI
  3600. IoUpdateDiskGeometry(
  3601. IN PDEVICE_OBJECT DeviceObject,
  3602. IN struct _DISK_GEOMETRY_EX* OldDiskGeometry,
  3603. IN struct _DISK_GEOMETRY_EX* NewDiskGeometry);
  3604. PTXN_PARAMETER_BLOCK
  3605. NTAPI
  3606. IoGetTransactionParameterBlock(
  3607. IN PFILE_OBJECT FileObject);
  3608. NTKERNELAPI
  3609. NTSTATUS
  3610. NTAPI
  3611. IoCreateFileEx(
  3612. OUT PHANDLE FileHandle,
  3613. IN ACCESS_MASK DesiredAccess,
  3614. IN POBJECT_ATTRIBUTES ObjectAttributes,
  3615. OUT PIO_STATUS_BLOCK IoStatusBlock,
  3616. IN PLARGE_INTEGER AllocationSize OPTIONAL,
  3617. IN ULONG FileAttributes,
  3618. IN ULONG ShareAccess,
  3619. IN ULONG Disposition,
  3620. IN ULONG CreateOptions,
  3621. IN PVOID EaBuffer OPTIONAL,
  3622. IN ULONG EaLength,
  3623. IN CREATE_FILE_TYPE CreateFileType,
  3624. IN PVOID InternalParameters OPTIONAL,
  3625. IN ULONG Options,
  3626. IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL);
  3627. NTSTATUS
  3628. NTAPI
  3629. IoSetIrpExtraCreateParameter(
  3630. IN OUT PIRP Irp,
  3631. IN struct _ECP_LIST *ExtraCreateParameter);
  3632. VOID
  3633. NTAPI
  3634. IoClearIrpExtraCreateParameter(
  3635. IN OUT PIRP Irp);
  3636. NTSTATUS
  3637. NTAPI
  3638. IoGetIrpExtraCreateParameter(
  3639. IN PIRP Irp,
  3640. OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL);
  3641. BOOLEAN
  3642. NTAPI
  3643. IoIsFileObjectIgnoringSharing(
  3644. IN PFILE_OBJECT FileObject);
  3645. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  3646. #if (NTDDI_VERSION >= NTDDI_WIN7)
  3647. NTSTATUS
  3648. NTAPI
  3649. IoSetFileObjectIgnoreSharing(
  3650. IN PFILE_OBJECT FileObject);
  3651. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  3652. /******************************************************************************
  3653. * Kernel Debugger Functions *
  3654. ******************************************************************************/
  3655. NTSYSAPI
  3656. ULONG
  3657. NTAPI
  3658. DbgPrompt(
  3659. IN PCCH Prompt,
  3660. OUT PCH Response,
  3661. IN ULONG MaximumResponseLength);
  3662. /******************************************************************************
  3663. * Kernel Functions *
  3664. ******************************************************************************/
  3665. NTKERNELAPI
  3666. VOID
  3667. FASTCALL
  3668. KeInvalidateRangeAllCaches(
  3669. IN PVOID BaseAddress,
  3670. IN ULONG Length);
  3671. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  3672. NTKERNELAPI
  3673. VOID
  3674. NTAPI
  3675. KeSetImportanceDpc(
  3676. IN OUT PRKDPC Dpc,
  3677. IN KDPC_IMPORTANCE Importance);
  3678. NTKERNELAPI
  3679. LONG
  3680. NTAPI
  3681. KePulseEvent(
  3682. IN OUT PRKEVENT Event,
  3683. IN KPRIORITY Increment,
  3684. IN BOOLEAN Wait);
  3685. NTKERNELAPI
  3686. LONG
  3687. NTAPI
  3688. KeSetBasePriorityThread(
  3689. IN OUT PRKTHREAD Thread,
  3690. IN LONG Increment);
  3691. NTKERNELAPI
  3692. VOID
  3693. NTAPI
  3694. KeEnterCriticalRegion(VOID);
  3695. NTKERNELAPI
  3696. VOID
  3697. NTAPI
  3698. KeLeaveCriticalRegion(VOID);
  3699. NTKERNELAPI
  3700. DECLSPEC_NORETURN
  3701. VOID
  3702. NTAPI
  3703. KeBugCheck(
  3704. IN ULONG BugCheckCode);
  3705. #if defined(SINGLE_GROUP_LEGACY_API)
  3706. NTKERNELAPI
  3707. VOID
  3708. NTAPI
  3709. KeSetTargetProcessorDpc(
  3710. IN OUT PRKDPC Dpc,
  3711. IN CCHAR Number);
  3712. NTKERNELAPI
  3713. KAFFINITY
  3714. NTAPI
  3715. KeQueryActiveProcessors(VOID);
  3716. #endif /* defined(SINGLE_GROUP_LEGACY_API) */
  3717. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  3718. #if (NTDDI_VERSION >= NTDDI_WINXP)
  3719. NTKERNELAPI
  3720. BOOLEAN
  3721. NTAPI
  3722. KeAreApcsDisabled(VOID);
  3723. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  3724. #if (NTDDI_VERSION >= NTDDI_WS03)
  3725. NTKERNELAPI
  3726. BOOLEAN
  3727. NTAPI
  3728. KeInvalidateAllCaches(VOID);
  3729. #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
  3730. #if (NTDDI_VERSION >= NTDDI_WS03SP1)
  3731. NTKERNELAPI
  3732. NTSTATUS
  3733. NTAPI
  3734. KeExpandKernelStackAndCallout(
  3735. IN PEXPAND_STACK_CALLOUT Callout,
  3736. IN PVOID Parameter OPTIONAL,
  3737. IN SIZE_T Size);
  3738. NTKERNELAPI
  3739. VOID
  3740. NTAPI
  3741. KeEnterGuardedRegion(VOID);
  3742. NTKERNELAPI
  3743. VOID
  3744. NTAPI
  3745. KeLeaveGuardedRegion(VOID);
  3746. #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
  3747. #if (NTDDI_VERSION >= NTDDI_VISTA)
  3748. #if defined(SINGLE_GROUP_LEGACY_API)
  3749. NTKERNELAPI
  3750. ULONG
  3751. NTAPI
  3752. KeQueryActiveProcessorCount(
  3753. OUT PKAFFINITY ActiveProcessors OPTIONAL);
  3754. NTKERNELAPI
  3755. ULONG
  3756. NTAPI
  3757. KeQueryMaximumProcessorCount(VOID);
  3758. #endif /* SINGLE_GROUP_LEGACY_API */
  3759. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  3760. #if (NTDDI_VERSION >= NTDDI_WIN7)
  3761. NTKERNELAPI
  3762. ULONG
  3763. NTAPI
  3764. KeQueryActiveProcessorCountEx(
  3765. IN USHORT GroupNumber);
  3766. NTKERNELAPI
  3767. ULONG
  3768. NTAPI
  3769. KeQueryMaximumProcessorCountEx(
  3770. IN USHORT GroupNumber);
  3771. NTKERNELAPI
  3772. USHORT
  3773. NTAPI
  3774. KeQueryActiveGroupCount(VOID);
  3775. NTKERNELAPI
  3776. USHORT
  3777. NTAPI
  3778. KeQueryMaximumGroupCount(VOID);
  3779. NTKERNELAPI
  3780. KAFFINITY
  3781. NTAPI
  3782. KeQueryGroupAffinity(
  3783. IN USHORT GroupNumber);
  3784. NTKERNELAPI
  3785. ULONG
  3786. NTAPI
  3787. KeGetCurrentProcessorNumberEx(
  3788. OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
  3789. NTKERNELAPI
  3790. VOID
  3791. NTAPI
  3792. KeQueryNodeActiveAffinity(
  3793. IN USHORT NodeNumber,
  3794. OUT PGROUP_AFFINITY Affinity OPTIONAL,
  3795. OUT PUSHORT Count OPTIONAL);
  3796. NTKERNELAPI
  3797. USHORT
  3798. NTAPI
  3799. KeQueryNodeMaximumProcessorCount(
  3800. IN USHORT NodeNumber);
  3801. NTKERNELAPI
  3802. USHORT
  3803. NTAPI
  3804. KeQueryHighestNodeNumber(VOID);
  3805. NTKERNELAPI
  3806. USHORT
  3807. NTAPI
  3808. KeGetCurrentNodeNumber(VOID);
  3809. NTKERNELAPI
  3810. NTSTATUS
  3811. NTAPI
  3812. KeQueryLogicalProcessorRelationship(
  3813. IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
  3814. IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
  3815. OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
  3816. IN OUT PULONG Length);
  3817. NTKERNELAPI
  3818. NTSTATUS
  3819. NTAPI
  3820. KeSetHardwareCounterConfiguration(
  3821. IN PHARDWARE_COUNTER CounterArray,
  3822. IN ULONG Count);
  3823. NTKERNELAPI
  3824. NTSTATUS
  3825. NTAPI
  3826. KeQueryHardwareCounterConfiguration(
  3827. OUT PHARDWARE_COUNTER CounterArray,
  3828. IN ULONG MaximumCount,
  3829. OUT PULONG Count);
  3830. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  3831. /******************************************************************************
  3832. * Memory manager Functions *
  3833. ******************************************************************************/
  3834. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  3835. NTKERNELAPI
  3836. PPHYSICAL_MEMORY_RANGE
  3837. NTAPI
  3838. MmGetPhysicalMemoryRanges(VOID);
  3839. NTKERNELAPI
  3840. PHYSICAL_ADDRESS
  3841. NTAPI
  3842. MmGetPhysicalAddress(
  3843. IN PVOID BaseAddress);
  3844. NTKERNELAPI
  3845. BOOLEAN
  3846. NTAPI
  3847. MmIsNonPagedSystemAddressValid(
  3848. IN PVOID VirtualAddress);
  3849. NTKERNELAPI
  3850. PVOID
  3851. NTAPI
  3852. MmAllocateNonCachedMemory(
  3853. IN SIZE_T NumberOfBytes);
  3854. NTKERNELAPI
  3855. VOID
  3856. NTAPI
  3857. MmFreeNonCachedMemory(
  3858. IN PVOID BaseAddress,
  3859. IN SIZE_T NumberOfBytes);
  3860. NTKERNELAPI
  3861. PVOID
  3862. NTAPI
  3863. MmGetVirtualForPhysical(
  3864. IN PHYSICAL_ADDRESS PhysicalAddress);
  3865. NTKERNELAPI
  3866. NTSTATUS
  3867. NTAPI
  3868. MmMapUserAddressesToPage(
  3869. IN PVOID BaseAddress,
  3870. IN SIZE_T NumberOfBytes,
  3871. IN PVOID PageAddress);
  3872. NTKERNELAPI
  3873. PVOID
  3874. NTAPI
  3875. MmMapVideoDisplay(
  3876. IN PHYSICAL_ADDRESS PhysicalAddress,
  3877. IN SIZE_T NumberOfBytes,
  3878. IN MEMORY_CACHING_TYPE CacheType);
  3879. NTKERNELAPI
  3880. NTSTATUS
  3881. NTAPI
  3882. MmMapViewInSessionSpace(
  3883. IN PVOID Section,
  3884. OUT PVOID *MappedBase,
  3885. IN OUT PSIZE_T ViewSize);
  3886. NTKERNELAPI
  3887. NTSTATUS
  3888. NTAPI
  3889. MmMapViewInSystemSpace(
  3890. IN PVOID Section,
  3891. OUT PVOID *MappedBase,
  3892. IN OUT PSIZE_T ViewSize);
  3893. NTKERNELAPI
  3894. BOOLEAN
  3895. NTAPI
  3896. MmIsAddressValid(
  3897. IN PVOID VirtualAddress);
  3898. NTKERNELAPI
  3899. BOOLEAN
  3900. NTAPI
  3901. MmIsThisAnNtAsSystem(VOID);
  3902. NTKERNELAPI
  3903. VOID
  3904. NTAPI
  3905. MmLockPagableSectionByHandle(
  3906. IN PVOID ImageSectionHandle);
  3907. NTKERNELAPI
  3908. NTSTATUS
  3909. NTAPI
  3910. MmUnmapViewInSessionSpace(
  3911. IN PVOID MappedBase);
  3912. NTKERNELAPI
  3913. NTSTATUS
  3914. NTAPI
  3915. MmUnmapViewInSystemSpace(
  3916. IN PVOID MappedBase);
  3917. NTKERNELAPI
  3918. VOID
  3919. NTAPI
  3920. MmUnsecureVirtualMemory(
  3921. IN HANDLE SecureHandle);
  3922. NTKERNELAPI
  3923. NTSTATUS
  3924. NTAPI
  3925. MmRemovePhysicalMemory(
  3926. IN PPHYSICAL_ADDRESS StartAddress,
  3927. IN OUT PLARGE_INTEGER NumberOfBytes);
  3928. NTKERNELAPI
  3929. HANDLE
  3930. NTAPI
  3931. MmSecureVirtualMemory(
  3932. IN PVOID Address,
  3933. IN SIZE_T Size,
  3934. IN ULONG ProbeMode);
  3935. NTKERNELAPI
  3936. VOID
  3937. NTAPI
  3938. MmUnmapVideoDisplay(
  3939. IN PVOID BaseAddress,
  3940. IN SIZE_T NumberOfBytes);
  3941. NTKERNELAPI
  3942. NTSTATUS
  3943. NTAPI
  3944. MmAddPhysicalMemory(
  3945. IN PPHYSICAL_ADDRESS StartAddress,
  3946. IN OUT PLARGE_INTEGER NumberOfBytes);
  3947. NTKERNELAPI
  3948. PVOID
  3949. NTAPI
  3950. MmAllocateContiguousMemory(
  3951. IN SIZE_T NumberOfBytes,
  3952. IN PHYSICAL_ADDRESS HighestAcceptableAddress);
  3953. NTKERNELAPI
  3954. PVOID
  3955. NTAPI
  3956. MmAllocateContiguousMemorySpecifyCache(
  3957. IN SIZE_T NumberOfBytes,
  3958. IN PHYSICAL_ADDRESS LowestAcceptableAddress,
  3959. IN PHYSICAL_ADDRESS HighestAcceptableAddress,
  3960. IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
  3961. IN MEMORY_CACHING_TYPE CacheType);
  3962. NTKERNELAPI
  3963. PVOID
  3964. NTAPI
  3965. MmAllocateContiguousMemorySpecifyCacheNode(
  3966. IN SIZE_T NumberOfBytes,
  3967. IN PHYSICAL_ADDRESS LowestAcceptableAddress,
  3968. IN PHYSICAL_ADDRESS HighestAcceptableAddress,
  3969. IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
  3970. IN MEMORY_CACHING_TYPE CacheType,
  3971. IN NODE_REQUIREMENT PreferredNode);
  3972. NTKERNELAPI
  3973. VOID
  3974. NTAPI
  3975. MmFreeContiguousMemory(
  3976. IN PVOID BaseAddress);
  3977. NTKERNELAPI
  3978. VOID
  3979. NTAPI
  3980. MmFreeContiguousMemorySpecifyCache(
  3981. IN PVOID BaseAddress,
  3982. IN SIZE_T NumberOfBytes,
  3983. IN MEMORY_CACHING_TYPE CacheType);
  3984. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  3985. #if (NTDDI_VERSION >= NTDDI_WS03)
  3986. NTKERNELAPI
  3987. NTSTATUS
  3988. NTAPI
  3989. MmCreateMirror(VOID);
  3990. #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
  3991. #if (NTDDI_VERSION >= NTDDI_VISTA)
  3992. NTSTATUS
  3993. NTAPI
  3994. MmRotatePhysicalView(
  3995. IN PVOID VirtualAddress,
  3996. IN OUT PSIZE_T NumberOfBytes,
  3997. IN PMDLX NewMdl OPTIONAL,
  3998. IN MM_ROTATE_DIRECTION Direction,
  3999. IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
  4000. IN PVOID Context OPTIONAL);
  4001. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4002. /******************************************************************************
  4003. * Process Manager Functions *
  4004. ******************************************************************************/
  4005. NTSYSCALLAPI
  4006. NTSTATUS
  4007. NTAPI
  4008. NtOpenProcess(
  4009. OUT PHANDLE ProcessHandle,
  4010. IN ACCESS_MASK DesiredAccess,
  4011. IN POBJECT_ATTRIBUTES ObjectAttributes,
  4012. IN PCLIENT_ID ClientId OPTIONAL);
  4013. NTSYSCALLAPI
  4014. NTSTATUS
  4015. NTAPI
  4016. NtQueryInformationProcess(
  4017. IN HANDLE ProcessHandle,
  4018. IN PROCESSINFOCLASS ProcessInformationClass,
  4019. OUT PVOID ProcessInformation OPTIONAL,
  4020. IN ULONG ProcessInformationLength,
  4021. OUT PULONG ReturnLength OPTIONAL);
  4022. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4023. NTKERNELAPI
  4024. NTSTATUS
  4025. NTAPI
  4026. PsSetCreateProcessNotifyRoutine(
  4027. IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
  4028. IN BOOLEAN Remove);
  4029. NTKERNELAPI
  4030. NTSTATUS
  4031. NTAPI
  4032. PsSetCreateThreadNotifyRoutine(
  4033. IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
  4034. NTKERNELAPI
  4035. NTSTATUS
  4036. NTAPI
  4037. PsSetLoadImageNotifyRoutine(
  4038. IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
  4039. NTKERNELAPI
  4040. HANDLE
  4041. NTAPI
  4042. PsGetCurrentProcessId(VOID);
  4043. NTKERNELAPI
  4044. HANDLE
  4045. NTAPI
  4046. PsGetCurrentThreadId(VOID);
  4047. NTKERNELAPI
  4048. BOOLEAN
  4049. NTAPI
  4050. PsGetVersion(
  4051. OUT PULONG MajorVersion OPTIONAL,
  4052. OUT PULONG MinorVersion OPTIONAL,
  4053. OUT PULONG BuildNumber OPTIONAL,
  4054. OUT PUNICODE_STRING CSDVersion OPTIONAL);
  4055. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4056. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4057. NTKERNELAPI
  4058. HANDLE
  4059. NTAPI
  4060. PsGetProcessId(
  4061. IN PEPROCESS Process);
  4062. NTKERNELAPI
  4063. HANDLE
  4064. NTAPI
  4065. PsGetThreadId(
  4066. IN PETHREAD Thread);
  4067. NTKERNELAPI
  4068. NTSTATUS
  4069. NTAPI
  4070. PsRemoveCreateThreadNotifyRoutine(
  4071. IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
  4072. NTKERNELAPI
  4073. NTSTATUS
  4074. NTAPI
  4075. PsRemoveLoadImageNotifyRoutine(
  4076. IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
  4077. NTKERNELAPI
  4078. LONGLONG
  4079. NTAPI
  4080. PsGetProcessCreateTimeQuadPart(
  4081. IN PEPROCESS Process);
  4082. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4083. #if (NTDDI_VERSION >= NTDDI_WS03)
  4084. NTKERNELAPI
  4085. HANDLE
  4086. NTAPI
  4087. PsGetThreadProcessId(
  4088. IN PETHREAD Thread);
  4089. #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
  4090. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4091. NTKERNELAPI
  4092. BOOLEAN
  4093. NTAPI
  4094. PsSetCurrentThreadPrefetching(
  4095. IN BOOLEAN Prefetching);
  4096. NTKERNELAPI
  4097. BOOLEAN
  4098. NTAPI
  4099. PsIsCurrentThreadPrefetching(VOID);
  4100. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4101. #if (NTDDI_VERSION >= NTDDI_VISTASP1)
  4102. NTKERNELAPI
  4103. NTSTATUS
  4104. NTAPI
  4105. PsSetCreateProcessNotifyRoutineEx(
  4106. IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
  4107. IN BOOLEAN Remove);
  4108. #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
  4109. /******************************************************************************
  4110. * Runtime Library Functions *
  4111. ******************************************************************************/
  4112. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4113. #ifndef RTL_USE_AVL_TABLES
  4114. NTSYSAPI
  4115. VOID
  4116. NTAPI
  4117. RtlInitializeGenericTable(
  4118. OUT PRTL_GENERIC_TABLE Table,
  4119. IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
  4120. IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
  4121. IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
  4122. IN PVOID TableContext OPTIONAL);
  4123. NTSYSAPI
  4124. PVOID
  4125. NTAPI
  4126. RtlInsertElementGenericTable(
  4127. IN PRTL_GENERIC_TABLE Table,
  4128. IN PVOID Buffer,
  4129. IN CLONG BufferSize,
  4130. OUT PBOOLEAN NewElement OPTIONAL);
  4131. NTSYSAPI
  4132. PVOID
  4133. NTAPI
  4134. RtlInsertElementGenericTableFull(
  4135. IN PRTL_GENERIC_TABLE Table,
  4136. IN PVOID Buffer,
  4137. IN CLONG BufferSize,
  4138. OUT PBOOLEAN NewElement OPTIONAL,
  4139. IN PVOID NodeOrParent,
  4140. IN TABLE_SEARCH_RESULT SearchResult);
  4141. NTSYSAPI
  4142. BOOLEAN
  4143. NTAPI
  4144. RtlDeleteElementGenericTable(
  4145. IN PRTL_GENERIC_TABLE Table,
  4146. IN PVOID Buffer);
  4147. NTSYSAPI
  4148. PVOID
  4149. NTAPI
  4150. RtlLookupElementGenericTable(
  4151. IN PRTL_GENERIC_TABLE Table,
  4152. IN PVOID Buffer);
  4153. NTSYSAPI
  4154. PVOID
  4155. NTAPI
  4156. RtlLookupElementGenericTableFull(
  4157. IN PRTL_GENERIC_TABLE Table,
  4158. IN PVOID Buffer,
  4159. OUT PVOID *NodeOrParent,
  4160. OUT TABLE_SEARCH_RESULT *SearchResult);
  4161. NTSYSAPI
  4162. PVOID
  4163. NTAPI
  4164. RtlEnumerateGenericTable(
  4165. IN PRTL_GENERIC_TABLE Table,
  4166. IN BOOLEAN Restart);
  4167. NTSYSAPI
  4168. PVOID
  4169. NTAPI
  4170. RtlEnumerateGenericTableWithoutSplaying(
  4171. IN PRTL_GENERIC_TABLE Table,
  4172. IN OUT PVOID *RestartKey);
  4173. NTSYSAPI
  4174. PVOID
  4175. NTAPI
  4176. RtlGetElementGenericTable(
  4177. IN PRTL_GENERIC_TABLE Table,
  4178. IN ULONG I);
  4179. NTSYSAPI
  4180. ULONG
  4181. NTAPI
  4182. RtlNumberGenericTableElements(
  4183. IN PRTL_GENERIC_TABLE Table);
  4184. NTSYSAPI
  4185. BOOLEAN
  4186. NTAPI
  4187. RtlIsGenericTableEmpty(
  4188. IN PRTL_GENERIC_TABLE Table);
  4189. #endif /* !RTL_USE_AVL_TABLES */
  4190. #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
  4191. NTSYSAPI
  4192. PRTL_SPLAY_LINKS
  4193. NTAPI
  4194. RtlSplay(
  4195. IN OUT PRTL_SPLAY_LINKS Links);
  4196. NTSYSAPI
  4197. PRTL_SPLAY_LINKS
  4198. NTAPI
  4199. RtlDelete(
  4200. IN PRTL_SPLAY_LINKS Links);
  4201. NTSYSAPI
  4202. VOID
  4203. NTAPI
  4204. RtlDeleteNoSplay(
  4205. IN PRTL_SPLAY_LINKS Links,
  4206. IN OUT PRTL_SPLAY_LINKS *Root);
  4207. NTSYSAPI
  4208. PRTL_SPLAY_LINKS
  4209. NTAPI
  4210. RtlSubtreeSuccessor(
  4211. IN PRTL_SPLAY_LINKS Links);
  4212. NTSYSAPI
  4213. PRTL_SPLAY_LINKS
  4214. NTAPI
  4215. RtlSubtreePredecessor(
  4216. IN PRTL_SPLAY_LINKS Links);
  4217. NTSYSAPI
  4218. PRTL_SPLAY_LINKS
  4219. NTAPI
  4220. RtlRealSuccessor(
  4221. IN PRTL_SPLAY_LINKS Links);
  4222. NTSYSAPI
  4223. PRTL_SPLAY_LINKS
  4224. NTAPI
  4225. RtlRealPredecessor(
  4226. IN PRTL_SPLAY_LINKS Links);
  4227. NTSYSAPI
  4228. BOOLEAN
  4229. NTAPI
  4230. RtlPrefixUnicodeString(
  4231. IN PCUNICODE_STRING String1,
  4232. IN PCUNICODE_STRING String2,
  4233. IN BOOLEAN CaseInSensitive);
  4234. NTSYSAPI
  4235. VOID
  4236. NTAPI
  4237. RtlUpperString(
  4238. IN OUT PSTRING DestinationString,
  4239. IN const PSTRING SourceString);
  4240. NTSYSAPI
  4241. NTSTATUS
  4242. NTAPI
  4243. RtlUpcaseUnicodeString(
  4244. IN OUT PUNICODE_STRING DestinationString,
  4245. IN PCUNICODE_STRING SourceString,
  4246. IN BOOLEAN AllocateDestinationString);
  4247. NTSYSAPI
  4248. VOID
  4249. NTAPI
  4250. RtlMapGenericMask(
  4251. IN OUT PACCESS_MASK AccessMask,
  4252. IN PGENERIC_MAPPING GenericMapping);
  4253. NTSYSAPI
  4254. NTSTATUS
  4255. NTAPI
  4256. RtlVolumeDeviceToDosName(
  4257. IN PVOID VolumeDeviceObject,
  4258. OUT PUNICODE_STRING DosName);
  4259. NTSYSAPI
  4260. NTSTATUS
  4261. NTAPI
  4262. RtlGetVersion(
  4263. IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
  4264. NTSYSAPI
  4265. NTSTATUS
  4266. NTAPI
  4267. RtlVerifyVersionInfo(
  4268. IN PRTL_OSVERSIONINFOEXW VersionInfo,
  4269. IN ULONG TypeMask,
  4270. IN ULONGLONG ConditionMask);
  4271. NTSYSAPI
  4272. LONG
  4273. NTAPI
  4274. RtlCompareString(
  4275. IN const PSTRING String1,
  4276. IN const PSTRING String2,
  4277. IN BOOLEAN CaseInSensitive);
  4278. NTSYSAPI
  4279. VOID
  4280. NTAPI
  4281. RtlCopyString(
  4282. OUT PSTRING DestinationString,
  4283. IN const PSTRING SourceString OPTIONAL);
  4284. NTSYSAPI
  4285. BOOLEAN
  4286. NTAPI
  4287. RtlEqualString(
  4288. IN const PSTRING String1,
  4289. IN const PSTRING String2,
  4290. IN BOOLEAN CaseInSensitive);
  4291. NTSYSAPI
  4292. NTSTATUS
  4293. NTAPI
  4294. RtlCharToInteger(
  4295. IN PCSZ String,
  4296. IN ULONG Base OPTIONAL,
  4297. OUT PULONG Value);
  4298. NTSYSAPI
  4299. CHAR
  4300. NTAPI
  4301. RtlUpperChar(
  4302. IN CHAR Character);
  4303. NTSYSAPI
  4304. ULONG
  4305. NTAPI
  4306. RtlWalkFrameChain(
  4307. OUT PVOID *Callers,
  4308. IN ULONG Count,
  4309. IN ULONG Flags);
  4310. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4311. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4312. NTSYSAPI
  4313. VOID
  4314. NTAPI
  4315. RtlInitializeGenericTableAvl(
  4316. OUT PRTL_AVL_TABLE Table,
  4317. IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
  4318. IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
  4319. IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
  4320. IN PVOID TableContext OPTIONAL);
  4321. NTSYSAPI
  4322. PVOID
  4323. NTAPI
  4324. RtlInsertElementGenericTableAvl(
  4325. IN PRTL_AVL_TABLE Table,
  4326. IN PVOID Buffer,
  4327. IN CLONG BufferSize,
  4328. OUT PBOOLEAN NewElement OPTIONAL);
  4329. NTSYSAPI
  4330. PVOID
  4331. NTAPI
  4332. RtlInsertElementGenericTableFullAvl(
  4333. IN PRTL_AVL_TABLE Table,
  4334. IN PVOID Buffer,
  4335. IN CLONG BufferSize,
  4336. OUT PBOOLEAN NewElement OPTIONAL,
  4337. IN PVOID NodeOrParent,
  4338. IN TABLE_SEARCH_RESULT SearchResult);
  4339. NTSYSAPI
  4340. BOOLEAN
  4341. NTAPI
  4342. RtlDeleteElementGenericTableAvl(
  4343. IN PRTL_AVL_TABLE Table,
  4344. IN PVOID Buffer);
  4345. NTSYSAPI
  4346. PVOID
  4347. NTAPI
  4348. RtlLookupElementGenericTableAvl(
  4349. IN PRTL_AVL_TABLE Table,
  4350. IN PVOID Buffer);
  4351. NTSYSAPI
  4352. PVOID
  4353. NTAPI
  4354. RtlLookupElementGenericTableFullAvl(
  4355. IN PRTL_AVL_TABLE Table,
  4356. IN PVOID Buffer,
  4357. OUT PVOID *NodeOrParent,
  4358. OUT TABLE_SEARCH_RESULT *SearchResult);
  4359. NTSYSAPI
  4360. PVOID
  4361. NTAPI
  4362. RtlEnumerateGenericTableAvl(
  4363. IN PRTL_AVL_TABLE Table,
  4364. IN BOOLEAN Restart);
  4365. NTSYSAPI
  4366. PVOID
  4367. NTAPI
  4368. RtlEnumerateGenericTableWithoutSplayingAvl(
  4369. IN PRTL_AVL_TABLE Table,
  4370. IN OUT PVOID *RestartKey);
  4371. NTSYSAPI
  4372. PVOID
  4373. NTAPI
  4374. RtlLookupFirstMatchingElementGenericTableAvl(
  4375. IN PRTL_AVL_TABLE Table,
  4376. IN PVOID Buffer,
  4377. OUT PVOID *RestartKey);
  4378. NTSYSAPI
  4379. PVOID
  4380. NTAPI
  4381. RtlEnumerateGenericTableLikeADirectory(
  4382. IN PRTL_AVL_TABLE Table,
  4383. IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
  4384. IN PVOID MatchData OPTIONAL,
  4385. IN ULONG NextFlag,
  4386. IN OUT PVOID *RestartKey,
  4387. IN OUT PULONG DeleteCount,
  4388. IN PVOID Buffer);
  4389. NTSYSAPI
  4390. PVOID
  4391. NTAPI
  4392. RtlGetElementGenericTableAvl(
  4393. IN PRTL_AVL_TABLE Table,
  4394. IN ULONG I);
  4395. NTSYSAPI
  4396. ULONG
  4397. NTAPI
  4398. RtlNumberGenericTableElementsAvl(
  4399. IN PRTL_AVL_TABLE Table);
  4400. NTSYSAPI
  4401. BOOLEAN
  4402. NTAPI
  4403. RtlIsGenericTableEmptyAvl(
  4404. IN PRTL_AVL_TABLE Table);
  4405. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4406. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4407. NTSYSAPI
  4408. VOID
  4409. NTAPI
  4410. RtlRunOnceInitialize(
  4411. OUT PRTL_RUN_ONCE RunOnce);
  4412. NTSYSAPI
  4413. NTSTATUS
  4414. NTAPI
  4415. RtlRunOnceExecuteOnce(
  4416. IN OUT PRTL_RUN_ONCE RunOnce,
  4417. IN PRTL_RUN_ONCE_INIT_FN InitFn,
  4418. IN OUT PVOID Parameter OPTIONAL,
  4419. OUT PVOID *Context OPTIONAL);
  4420. NTSYSAPI
  4421. NTSTATUS
  4422. NTAPI
  4423. RtlRunOnceBeginInitialize(
  4424. IN OUT PRTL_RUN_ONCE RunOnce,
  4425. IN ULONG Flags,
  4426. OUT PVOID *Context OPTIONAL);
  4427. NTSYSAPI
  4428. NTSTATUS
  4429. NTAPI
  4430. RtlRunOnceComplete(
  4431. IN OUT PRTL_RUN_ONCE RunOnce,
  4432. IN ULONG Flags,
  4433. IN PVOID Context OPTIONAL);
  4434. NTSYSAPI
  4435. BOOLEAN
  4436. NTAPI
  4437. RtlGetProductInfo(
  4438. IN ULONG OSMajorVersion,
  4439. IN ULONG OSMinorVersion,
  4440. IN ULONG SpMajorVersion,
  4441. IN ULONG SpMinorVersion,
  4442. OUT PULONG ReturnedProductType);
  4443. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4444. #if (NTDDI_VERSION >= NTDDI_WIN7)
  4445. NTSYSAPI
  4446. BOOLEAN
  4447. NTAPI
  4448. RtlCreateHashTable(
  4449. IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL,
  4450. IN ULONG Shift,
  4451. IN ULONG Flags);
  4452. NTSYSAPI
  4453. VOID
  4454. NTAPI
  4455. RtlDeleteHashTable(
  4456. IN PRTL_DYNAMIC_HASH_TABLE HashTable);
  4457. NTSYSAPI
  4458. BOOLEAN
  4459. NTAPI
  4460. RtlInsertEntryHashTable(
  4461. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4462. IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
  4463. IN ULONG_PTR Signature,
  4464. IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
  4465. NTSYSAPI
  4466. BOOLEAN
  4467. NTAPI
  4468. RtlRemoveEntryHashTable(
  4469. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4470. IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
  4471. IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
  4472. NTSYSAPI
  4473. PRTL_DYNAMIC_HASH_TABLE_ENTRY
  4474. NTAPI
  4475. RtlLookupEntryHashTable(
  4476. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4477. IN ULONG_PTR Signature,
  4478. OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
  4479. NTSYSAPI
  4480. PRTL_DYNAMIC_HASH_TABLE_ENTRY
  4481. NTAPI
  4482. RtlGetNextEntryHashTable(
  4483. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4484. IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
  4485. NTSYSAPI
  4486. BOOLEAN
  4487. NTAPI
  4488. RtlInitEnumerationHashTable(
  4489. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4490. OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4491. NTSYSAPI
  4492. PRTL_DYNAMIC_HASH_TABLE_ENTRY
  4493. NTAPI
  4494. RtlEnumerateEntryHashTable(
  4495. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4496. IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4497. NTSYSAPI
  4498. VOID
  4499. NTAPI
  4500. RtlEndEnumerationHashTable(
  4501. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4502. IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4503. NTSYSAPI
  4504. BOOLEAN
  4505. NTAPI
  4506. RtlInitWeakEnumerationHashTable(
  4507. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4508. OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4509. NTSYSAPI
  4510. PRTL_DYNAMIC_HASH_TABLE_ENTRY
  4511. NTAPI
  4512. RtlWeaklyEnumerateEntryHashTable(
  4513. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4514. IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4515. NTSYSAPI
  4516. VOID
  4517. NTAPI
  4518. RtlEndWeakEnumerationHashTable(
  4519. IN PRTL_DYNAMIC_HASH_TABLE HashTable,
  4520. IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
  4521. NTSYSAPI
  4522. BOOLEAN
  4523. NTAPI
  4524. RtlExpandHashTable(
  4525. IN PRTL_DYNAMIC_HASH_TABLE HashTable);
  4526. NTSYSAPI
  4527. BOOLEAN
  4528. NTAPI
  4529. RtlContractHashTable(
  4530. IN PRTL_DYNAMIC_HASH_TABLE HashTable);
  4531. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  4532. #if defined(_AMD64_) || defined(_IA64_)
  4533. //DECLSPEC_DEPRECATED_DDK_WINXP
  4534. FORCEINLINE
  4535. LARGE_INTEGER
  4536. NTAPI_INLINE
  4537. RtlLargeIntegerDivide(
  4538. IN LARGE_INTEGER Dividend,
  4539. IN LARGE_INTEGER Divisor,
  4540. OUT PLARGE_INTEGER Remainder OPTIONAL)
  4541. {
  4542. LARGE_INTEGER ret;
  4543. ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
  4544. if (Remainder)
  4545. Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
  4546. return ret;
  4547. }
  4548. #else
  4549. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4550. NTSYSAPI
  4551. LARGE_INTEGER
  4552. NTAPI
  4553. RtlLargeIntegerDivide(
  4554. IN LARGE_INTEGER Dividend,
  4555. IN LARGE_INTEGER Divisor,
  4556. OUT PLARGE_INTEGER Remainder OPTIONAL);
  4557. #endif
  4558. #endif /* defined(_AMD64_) || defined(_IA64_) */
  4559. #ifdef RTL_USE_AVL_TABLES
  4560. #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
  4561. #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
  4562. #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
  4563. #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
  4564. #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
  4565. #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
  4566. #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
  4567. #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
  4568. #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
  4569. #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
  4570. #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
  4571. #endif /* RTL_USE_AVL_TABLES */
  4572. #define RtlInitializeSplayLinks(Links) { \
  4573. PRTL_SPLAY_LINKS _SplayLinks; \
  4574. _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
  4575. _SplayLinks->Parent = _SplayLinks; \
  4576. _SplayLinks->LeftChild = NULL; \
  4577. _SplayLinks->RightChild = NULL; \
  4578. }
  4579. #define RtlIsLeftChild(Links) \
  4580. (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
  4581. #define RtlIsRightChild(Links) \
  4582. (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
  4583. #define RtlRightChild(Links) \
  4584. ((PRTL_SPLAY_LINKS)(Links))->RightChild
  4585. #define RtlIsRoot(Links) \
  4586. (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
  4587. #define RtlLeftChild(Links) \
  4588. ((PRTL_SPLAY_LINKS)(Links))->LeftChild
  4589. #define RtlParent(Links) \
  4590. ((PRTL_SPLAY_LINKS)(Links))->Parent
  4591. #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
  4592. { \
  4593. PRTL_SPLAY_LINKS _SplayParent; \
  4594. PRTL_SPLAY_LINKS _SplayChild; \
  4595. _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
  4596. _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
  4597. _SplayParent->LeftChild = _SplayChild; \
  4598. _SplayChild->Parent = _SplayParent; \
  4599. }
  4600. #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
  4601. { \
  4602. PRTL_SPLAY_LINKS _SplayParent; \
  4603. PRTL_SPLAY_LINKS _SplayChild; \
  4604. _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
  4605. _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
  4606. _SplayParent->RightChild = _SplayChild; \
  4607. _SplayChild->Parent = _SplayParent; \
  4608. }
  4609. #if !defined(MIDL_PASS)
  4610. FORCEINLINE
  4611. LUID
  4612. NTAPI_INLINE
  4613. RtlConvertLongToLuid(
  4614. IN LONG Val)
  4615. {
  4616. LUID Luid;
  4617. LARGE_INTEGER Temp;
  4618. Temp.QuadPart = Val;
  4619. Luid.LowPart = Temp.u.LowPart;
  4620. Luid.HighPart = Temp.u.HighPart;
  4621. return Luid;
  4622. }
  4623. FORCEINLINE
  4624. LUID
  4625. NTAPI_INLINE
  4626. RtlConvertUlongToLuid(
  4627. IN ULONG Val)
  4628. {
  4629. LUID Luid;
  4630. Luid.LowPart = Val;
  4631. Luid.HighPart = 0;
  4632. return Luid;
  4633. }
  4634. #endif /* !defined(MIDL_PASS) */
  4635. #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
  4636. #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
  4637. *CallersAddress = (PVOID)_ReturnAddress(); \
  4638. *CallersCaller = NULL;
  4639. #else
  4640. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4641. NTSYSAPI
  4642. VOID
  4643. NTAPI
  4644. RtlGetCallersAddress(
  4645. OUT PVOID *CallersAddress,
  4646. OUT PVOID *CallersCaller);
  4647. #endif
  4648. #endif
  4649. #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
  4650. #if (NTDDI_VERSION >= NTDDI_WIN7)
  4651. FORCEINLINE
  4652. VOID
  4653. NTAPI
  4654. RtlInitHashTableContext(
  4655. IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
  4656. {
  4657. Context->ChainHead = NULL;
  4658. Context->PrevLinkage = NULL;
  4659. }
  4660. FORCEINLINE
  4661. VOID
  4662. NTAPI
  4663. RtlInitHashTableContextFromEnumerator(
  4664. IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context,
  4665. IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator)
  4666. {
  4667. Context->ChainHead = Enumerator->ChainHead;
  4668. Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink;
  4669. }
  4670. FORCEINLINE
  4671. VOID
  4672. NTAPI
  4673. RtlReleaseHashTableContext(
  4674. IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
  4675. {
  4676. UNREFERENCED_PARAMETER(Context);
  4677. return;
  4678. }
  4679. FORCEINLINE
  4680. ULONG
  4681. NTAPI
  4682. RtlTotalBucketsHashTable(
  4683. IN PRTL_DYNAMIC_HASH_TABLE HashTable)
  4684. {
  4685. return HashTable->TableSize;
  4686. }
  4687. FORCEINLINE
  4688. ULONG
  4689. NTAPI
  4690. RtlNonEmptyBucketsHashTable(
  4691. IN PRTL_DYNAMIC_HASH_TABLE HashTable)
  4692. {
  4693. return HashTable->NonEmptyBuckets;
  4694. }
  4695. FORCEINLINE
  4696. ULONG
  4697. NTAPI
  4698. RtlEmptyBucketsHashTable(
  4699. IN PRTL_DYNAMIC_HASH_TABLE HashTable)
  4700. {
  4701. return HashTable->TableSize - HashTable->NonEmptyBuckets;
  4702. }
  4703. FORCEINLINE
  4704. ULONG
  4705. NTAPI
  4706. RtlTotalEntriesHashTable(
  4707. IN PRTL_DYNAMIC_HASH_TABLE HashTable)
  4708. {
  4709. return HashTable->NumEntries;
  4710. }
  4711. FORCEINLINE
  4712. ULONG
  4713. NTAPI
  4714. RtlActiveEnumeratorsHashTable(
  4715. IN PRTL_DYNAMIC_HASH_TABLE HashTable)
  4716. {
  4717. return HashTable->NumEnumerators;
  4718. }
  4719. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  4720. #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
  4721. /******************************************************************************
  4722. * Security Manager Functions *
  4723. ******************************************************************************/
  4724. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4725. NTKERNELAPI
  4726. BOOLEAN
  4727. NTAPI
  4728. SeSinglePrivilegeCheck(
  4729. IN LUID PrivilegeValue,
  4730. IN KPROCESSOR_MODE PreviousMode);
  4731. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4732. /******************************************************************************
  4733. * ZwXxx Functions *
  4734. ******************************************************************************/
  4735. NTSYSAPI
  4736. NTSTATUS
  4737. NTAPI
  4738. ZwAllocateLocallyUniqueId(
  4739. OUT PLUID Luid);
  4740. NTSYSAPI
  4741. NTSTATUS
  4742. NTAPI
  4743. ZwTerminateProcess(
  4744. IN HANDLE ProcessHandle OPTIONAL,
  4745. IN NTSTATUS ExitStatus);
  4746. NTSYSAPI
  4747. NTSTATUS
  4748. NTAPI
  4749. ZwOpenProcess(
  4750. OUT PHANDLE ProcessHandle,
  4751. IN ACCESS_MASK DesiredAccess,
  4752. IN POBJECT_ATTRIBUTES ObjectAttributes,
  4753. IN PCLIENT_ID ClientId OPTIONAL);
  4754. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4755. NTSTATUS
  4756. NTAPI
  4757. ZwCancelTimer(
  4758. IN HANDLE TimerHandle,
  4759. OUT PBOOLEAN CurrentState OPTIONAL);
  4760. NTSTATUS
  4761. NTAPI
  4762. ZwCreateTimer(
  4763. OUT PHANDLE TimerHandle,
  4764. IN ACCESS_MASK DesiredAccess,
  4765. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  4766. IN TIMER_TYPE TimerType);
  4767. NTSTATUS
  4768. NTAPI
  4769. ZwOpenTimer(
  4770. OUT PHANDLE TimerHandle,
  4771. IN ACCESS_MASK DesiredAccess,
  4772. IN POBJECT_ATTRIBUTES ObjectAttributes);
  4773. NTSYSAPI
  4774. NTSTATUS
  4775. NTAPI
  4776. ZwSetInformationThread(
  4777. IN HANDLE ThreadHandle,
  4778. IN THREADINFOCLASS ThreadInformationClass,
  4779. IN PVOID ThreadInformation,
  4780. IN ULONG ThreadInformationLength);
  4781. NTSTATUS
  4782. NTAPI
  4783. ZwSetTimer(
  4784. IN HANDLE TimerHandle,
  4785. IN PLARGE_INTEGER DueTime,
  4786. IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
  4787. IN PVOID TimerContext OPTIONAL,
  4788. IN BOOLEAN ResumeTimer,
  4789. IN LONG Period OPTIONAL,
  4790. OUT PBOOLEAN PreviousState OPTIONAL);
  4791. NTSYSAPI
  4792. NTSTATUS
  4793. NTAPI
  4794. ZwDisplayString(
  4795. IN PUNICODE_STRING String);
  4796. NTSYSAPI
  4797. NTSTATUS
  4798. NTAPI
  4799. ZwPowerInformation(
  4800. IN POWER_INFORMATION_LEVEL PowerInformationLevel,
  4801. IN PVOID InputBuffer OPTIONAL,
  4802. IN ULONG InputBufferLength,
  4803. OUT PVOID OutputBuffer OPTIONAL,
  4804. IN ULONG OutputBufferLength);
  4805. NTSYSAPI
  4806. NTSTATUS
  4807. NTAPI
  4808. ZwQueryVolumeInformationFile(
  4809. IN HANDLE FileHandle,
  4810. OUT PIO_STATUS_BLOCK IoStatusBlock,
  4811. OUT PVOID FsInformation,
  4812. IN ULONG Length,
  4813. IN FS_INFORMATION_CLASS FsInformationClass);
  4814. NTSYSAPI
  4815. NTSTATUS
  4816. NTAPI
  4817. ZwDeviceIoControlFile(
  4818. IN HANDLE FileHandle,
  4819. IN HANDLE Event OPTIONAL,
  4820. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  4821. IN PVOID ApcContext OPTIONAL,
  4822. OUT PIO_STATUS_BLOCK IoStatusBlock,
  4823. IN ULONG IoControlCode,
  4824. IN PVOID InputBuffer OPTIONAL,
  4825. IN ULONG InputBufferLength,
  4826. OUT PVOID OutputBuffer OPTIONAL,
  4827. IN ULONG OutputBufferLength);
  4828. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4829. #if (NTDDI_VERSION >= NTDDI_WIN7)
  4830. NTSTATUS
  4831. NTAPI
  4832. ZwSetTimerEx(
  4833. IN HANDLE TimerHandle,
  4834. IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
  4835. IN OUT PVOID TimerSetInformation,
  4836. IN ULONG TimerSetInformationLength);
  4837. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  4838. /* UNSORTED */
  4839. #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
  4840. ((ConditionMask) = VerSetConditionMask((ConditionMask), \
  4841. (TypeBitMask), (ComparisonType)))
  4842. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4843. NTSYSAPI
  4844. ULONGLONG
  4845. NTAPI
  4846. VerSetConditionMask(
  4847. IN ULONGLONG ConditionMask,
  4848. IN ULONG TypeMask,
  4849. IN UCHAR Condition);
  4850. #endif
  4851. typedef struct _KERNEL_USER_TIMES {
  4852. LARGE_INTEGER CreateTime;
  4853. LARGE_INTEGER ExitTime;
  4854. LARGE_INTEGER KernelTime;
  4855. LARGE_INTEGER UserTime;
  4856. } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
  4857. /* NtXxx Functions */
  4858. typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
  4859. SystemFirmwareTable_Enumerate,
  4860. SystemFirmwareTable_Get
  4861. } SYSTEM_FIRMWARE_TABLE_ACTION;
  4862. typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
  4863. ULONG ProviderSignature;
  4864. SYSTEM_FIRMWARE_TABLE_ACTION Action;
  4865. ULONG TableID;
  4866. ULONG TableBufferLength;
  4867. UCHAR TableBuffer[ANYSIZE_ARRAY];
  4868. } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
  4869. typedef NTSTATUS
  4870. (__cdecl *PFNFTH)(
  4871. IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
  4872. typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
  4873. ULONG ProviderSignature;
  4874. BOOLEAN Register;
  4875. PFNFTH FirmwareTableHandler;
  4876. PVOID DriverObject;
  4877. } SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
  4878. typedef ULONG_PTR
  4879. (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
  4880. IN PVOID Context);
  4881. typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
  4882. PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
  4883. PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
  4884. } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
  4885. #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
  4886. #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
  4887. #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
  4888. #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
  4889. #define DRIVER_VERIFIER_IO_CHECKING 0x0010
  4890. #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
  4891. #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
  4892. #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
  4893. #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
  4894. #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
  4895. #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
  4896. #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
  4897. #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
  4898. (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
  4899. #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
  4900. #define SHARED_GLOBAL_FLAGS_SPARE \
  4901. (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
  4902. #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
  4903. #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
  4904. (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
  4905. #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
  4906. #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
  4907. (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
  4908. #define EX_INIT_BITS(Flags, Bit) \
  4909. *((Flags)) |= (Bit) // Safe to use before concurrently accessible
  4910. #define EX_TEST_SET_BIT(Flags, Bit) \
  4911. InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
  4912. #define EX_TEST_CLEAR_BIT(Flags, Bit) \
  4913. InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
  4914. #define PCCARD_MAP_ERROR 0x01
  4915. #define PCCARD_DEVICE_PCI 0x10
  4916. #define PCCARD_SCAN_DISABLED 0x01
  4917. #define PCCARD_MAP_ZERO 0x02
  4918. #define PCCARD_NO_TIMER 0x03
  4919. #define PCCARD_NO_PIC 0x04
  4920. #define PCCARD_NO_LEGACY_BASE 0x05
  4921. #define PCCARD_DUP_LEGACY_BASE 0x06
  4922. #define PCCARD_NO_CONTROLLERS 0x07
  4923. #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
  4924. /* Filesystem runtime library routines */
  4925. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4926. NTKERNELAPI
  4927. BOOLEAN
  4928. NTAPI
  4929. FsRtlIsTotalDeviceFailure(
  4930. IN NTSTATUS Status);
  4931. #endif
  4932. #ifdef __cplusplus
  4933. }
  4934. #endif