12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197 |
- /*
- * wdm.h
- *
- * Windows NT WDM Driver Developer Kit
- *
- * This file is part of the ReactOS DDK package.
- *
- * Contributors:
- * Amine Khaldi
- * Timo Kreuzer (timo.kreuzer@reactos.org)
- *
- * THIS SOFTWARE IS NOT COPYRIGHTED
- *
- * This source code is offered for use in the public domain. You may
- * use, modify or distribute it freely.
- *
- * This code is distributed in the hope that it will be useful but
- * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
- * DISCLAIMED. This includes but is not limited to warranties of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
- #pragma once
- #ifndef _WDMDDK_
- #define _WDMDDK_
- #define WDM_MAJORVERSION 0x06
- #define WDM_MINORVERSION 0x00
- /* Included via ntddk.h? */
- #ifndef _NTDDK_
- #define _NTDDK_
- #define _WDM_INCLUDED_
- #define _DDK_DRIVER_
- #define NO_INTERLOCKED_INTRINSICS
- #endif /* _NTDDK_ */
- /* Dependencies */
- #define NT_INCLUDED
- #include <excpt.h>
- #include <ntdef.h>
- #include <ntstatus.h>
- #include <ntiologc.h>
- #ifndef GUID_DEFINED
- #include <guiddef.h>
- #endif
- #ifdef _MAC
- #ifndef _INC_STRING
- #include <string.h>
- #endif /* _INC_STRING */
- #else
- #include <string.h>
- #endif /* _MAC */
- #ifndef _KTMTYPES_
- typedef GUID UOW, *PUOW;
- #endif
- typedef GUID *PGUID;
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- #include <dpfilter.h>
- #endif
- #include "intrin.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if !defined(_NTHALDLL_) && !defined(_BLDR_)
- #define NTHALAPI DECLSPEC_IMPORT
- #else
- #define NTHALAPI
- #endif
- /* For ReactOS */
- #if !defined(_NTOSKRNL_) && !defined(_BLDR_)
- #define NTKERNELAPI DECLSPEC_IMPORT
- #else
- #define NTKERNELAPI
- #endif
- #if defined(_X86_) && !defined(_NTHAL_)
- #define _DECL_HAL_KE_IMPORT DECLSPEC_IMPORT
- #elif defined(_X86_)
- #define _DECL_HAL_KE_IMPORT
- #else
- #define _DECL_HAL_KE_IMPORT NTKERNELAPI
- #endif
- #if defined(_WIN64)
- #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
- #else
- #define POINTER_ALIGNMENT
- #endif
- #if defined(_MSC_VER)
- /* Disable some warnings */
- #pragma warning(disable:4115) /* Named type definition in parentheses */
- #pragma warning(disable:4201) /* Nameless unions and structs */
- #pragma warning(disable:4214) /* Bit fields of other types than int */
- #pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */
- /* Indicate if #pragma alloc_text() is supported */
- #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
- #define ALLOC_PRAGMA 1
- #endif
- /* Indicate if #pragma data_seg() is supported */
- #if defined(_M_IX86) || defined(_M_AMD64)
- #define ALLOC_DATA_PRAGMA 1
- #endif
- #endif /* _MSC_VER */
- #if defined(_WIN64)
- #if !defined(USE_DMA_MACROS) && !defined(_NTHAL_)
- #define USE_DMA_MACROS
- #endif
- #if !defined(NO_LEGACY_DRIVERS) && !defined(__REACTOS__)
- #define NO_LEGACY_DRIVERS
- #endif
- #endif /* defined(_WIN64) */
- /* Forward declarations */
- struct _IRP;
- struct _MDL;
- struct _KAPC;
- struct _KDPC;
- struct _FILE_OBJECT;
- struct _DMA_ADAPTER;
- struct _DEVICE_OBJECT;
- struct _DRIVER_OBJECT;
- struct _IO_STATUS_BLOCK;
- struct _DEVICE_DESCRIPTION;
- struct _SCATTER_GATHER_LIST;
- struct _DRIVE_LAYOUT_INFORMATION;
- struct _COMPRESSED_DATA_INFO;
- struct _IO_RESOURCE_DESCRIPTOR;
- /* Structures not exposed to drivers */
- typedef struct _OBJECT_TYPE *POBJECT_TYPE;
- typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
- typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
- typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
- typedef struct _EPROCESS *PEPROCESS;
- typedef struct _ETHREAD *PETHREAD;
- typedef struct _IO_TIMER *PIO_TIMER;
- typedef struct _KINTERRUPT *PKINTERRUPT;
- typedef struct _KPROCESS *PKPROCESS;
- typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
- typedef struct _CONTEXT *PCONTEXT;
- #if defined(USE_DMA_MACROS) && !defined(_NTHAL_)
- typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
- #elif defined(_WDM_INCLUDED_)
- typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
- #else
- typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
- #endif
- #ifndef DEFINE_GUIDEX
- #ifdef _MSC_VER
- #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
- #else
- #define DEFINE_GUIDEX(name) EXTERN_C const GUID name
- #endif
- #endif /* DEFINE_GUIDEX */
- #ifndef STATICGUIDOF
- #define STATICGUIDOF(guid) STATIC_##guid
- #endif
- /* GUID Comparison */
- #ifndef __IID_ALIGNED__
- #define __IID_ALIGNED__
- #ifdef __cplusplus
- inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
- {
- return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) &&
- (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
- }
- #else
- #define IsEqualGUIDAligned(guid1, guid2) \
- ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
- (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
- #endif /* __cplusplus */
- #endif /* !__IID_ALIGNED__ */
- /******************************************************************************
- * INTERLOCKED Functions *
- ******************************************************************************/
- //
- // Intrinsics (note: taken from our winnt.h)
- // FIXME: 64-bit
- //
- #if defined(__GNUC__)
- static __inline__ BOOLEAN
- InterlockedBitTestAndSet(
- IN LONG volatile *Base,
- IN LONG Bit)
- {
- #if defined(_M_IX86)
- LONG OldBit;
- __asm__ __volatile__("lock "
- "btsl %2,%1\n\t"
- "sbbl %0,%0\n\t"
- :"=r" (OldBit),"+m" (*Base)
- :"Ir" (Bit)
- : "memory");
- return OldBit;
- #else
- return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
- #endif
- }
- static __inline__ BOOLEAN
- InterlockedBitTestAndReset(
- IN LONG volatile *Base,
- IN LONG Bit)
- {
- #if defined(_M_IX86)
- LONG OldBit;
- __asm__ __volatile__("lock "
- "btrl %2,%1\n\t"
- "sbbl %0,%0\n\t"
- :"=r" (OldBit),"+m" (*Base)
- :"Ir" (Bit)
- : "memory");
- return OldBit;
- #else
- return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
- #endif
- }
- #endif /* defined(__GNUC__) */
- #define BitScanForward _BitScanForward
- #define BitScanReverse _BitScanReverse
- #define BitTest _bittest
- #define BitTestAndComplement _bittestandcomplement
- #define BitTestAndSet _bittestandset
- #define BitTestAndReset _bittestandreset
- #define InterlockedBitTestAndSet _interlockedbittestandset
- #define InterlockedBitTestAndReset _interlockedbittestandreset
- #ifdef _M_AMD64
- #define BitTest64 _bittest64
- #define BitTestAndComplement64 _bittestandcomplement64
- #define BitTestAndSet64 _bittestandset64
- #define BitTestAndReset64 _bittestandreset64
- #define InterlockedBitTestAndSet64 _interlockedbittestandset64
- #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
- #endif
- #if !defined(__INTERLOCKED_DECLARED)
- #define __INTERLOCKED_DECLARED
- #if defined (_X86_)
- #if defined(NO_INTERLOCKED_INTRINSICS)
- NTKERNELAPI
- LONG
- FASTCALL
- InterlockedIncrement(
- IN OUT LONG volatile *Addend);
- NTKERNELAPI
- LONG
- FASTCALL
- InterlockedDecrement(
- IN OUT LONG volatile *Addend);
- NTKERNELAPI
- LONG
- FASTCALL
- InterlockedCompareExchange(
- IN OUT LONG volatile *Destination,
- IN LONG Exchange,
- IN LONG Comparand);
- NTKERNELAPI
- LONG
- FASTCALL
- InterlockedExchange(
- IN OUT LONG volatile *Destination,
- IN LONG Value);
- NTKERNELAPI
- LONG
- FASTCALL
- InterlockedExchangeAdd(
- IN OUT LONG volatile *Addend,
- IN LONG Value);
- #else /* !defined(NO_INTERLOCKED_INTRINSICS) */
- #define InterlockedExchange _InterlockedExchange
- #define InterlockedIncrement _InterlockedIncrement
- #define InterlockedDecrement _InterlockedDecrement
- #define InterlockedExchangeAdd _InterlockedExchangeAdd
- #define InterlockedCompareExchange _InterlockedCompareExchange
- #define InterlockedOr _InterlockedOr
- #define InterlockedAnd _InterlockedAnd
- #define InterlockedXor _InterlockedXor
- #endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
- #endif /* defined (_X86_) */
- #if !defined (_WIN64)
- /*
- * PVOID
- * InterlockedExchangePointer(
- * IN OUT PVOID volatile *Target,
- * IN PVOID Value)
- */
- #define InterlockedExchangePointer(Target, Value) \
- ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
- /*
- * PVOID
- * InterlockedCompareExchangePointer(
- * IN OUT PVOID *Destination,
- * IN PVOID Exchange,
- * IN PVOID Comparand)
- */
- #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
- ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
- #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
- #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
- #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
- #endif // !defined (_WIN64)
- #if defined (_M_AMD64)
- #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
- #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
- #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
- #define InterlockedAnd _InterlockedAnd
- #define InterlockedOr _InterlockedOr
- #define InterlockedXor _InterlockedXor
- #define InterlockedIncrement _InterlockedIncrement
- #define InterlockedDecrement _InterlockedDecrement
- #define InterlockedAdd _InterlockedAdd
- #define InterlockedExchange _InterlockedExchange
- #define InterlockedExchangeAdd _InterlockedExchangeAdd
- #define InterlockedCompareExchange _InterlockedCompareExchange
- #define InterlockedAnd64 _InterlockedAnd64
- #define InterlockedOr64 _InterlockedOr64
- #define InterlockedXor64 _InterlockedXor64
- #define InterlockedIncrement64 _InterlockedIncrement64
- #define InterlockedDecrement64 _InterlockedDecrement64
- #define InterlockedAdd64 _InterlockedAdd64
- #define InterlockedExchange64 _InterlockedExchange64
- #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
- #define InterlockedCompareExchange64 _InterlockedCompareExchange64
- #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
- #define InterlockedExchangePointer _InterlockedExchangePointer
- #define InterlockedBitTestAndSet64 _interlockedbittestandset64
- #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
- #endif // _M_AMD64
- #endif /* !__INTERLOCKED_DECLARED */
- /******************************************************************************
- * Runtime Library Types *
- ******************************************************************************/
- #define RTL_REGISTRY_ABSOLUTE 0
- #define RTL_REGISTRY_SERVICES 1
- #define RTL_REGISTRY_CONTROL 2
- #define RTL_REGISTRY_WINDOWS_NT 3
- #define RTL_REGISTRY_DEVICEMAP 4
- #define RTL_REGISTRY_USER 5
- #define RTL_REGISTRY_MAXIMUM 6
- #define RTL_REGISTRY_HANDLE 0x40000000
- #define RTL_REGISTRY_OPTIONAL 0x80000000
- /* RTL_QUERY_REGISTRY_TABLE.Flags */
- #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
- #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
- #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
- #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
- #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
- #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
- #define RTL_QUERY_REGISTRY_DELETE 0x00000040
- #define HASH_STRING_ALGORITHM_DEFAULT 0
- #define HASH_STRING_ALGORITHM_X65599 1
- #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
- typedef struct _RTL_BITMAP {
- ULONG SizeOfBitMap;
- PULONG Buffer;
- } RTL_BITMAP, *PRTL_BITMAP;
- typedef struct _RTL_BITMAP_RUN {
- ULONG StartingIndex;
- ULONG NumberOfBits;
- } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
- typedef NTSTATUS
- (NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
- IN PWSTR ValueName,
- IN ULONG ValueType,
- IN PVOID ValueData,
- IN ULONG ValueLength,
- IN PVOID Context,
- IN PVOID EntryContext);
- typedef struct _RTL_QUERY_REGISTRY_TABLE {
- PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
- ULONG Flags;
- PCWSTR Name;
- PVOID EntryContext;
- ULONG DefaultType;
- PVOID DefaultData;
- ULONG DefaultLength;
- } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
- typedef struct _TIME_FIELDS {
- CSHORT Year;
- CSHORT Month;
- CSHORT Day;
- CSHORT Hour;
- CSHORT Minute;
- CSHORT Second;
- CSHORT Milliseconds;
- CSHORT Weekday;
- } TIME_FIELDS, *PTIME_FIELDS;
- /* Slist Header */
- #ifndef _SLIST_HEADER_
- #define _SLIST_HEADER_
- #if defined(_WIN64)
- typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
- struct _SLIST_ENTRY *Next;
- } SLIST_ENTRY, *PSLIST_ENTRY;
- typedef struct _SLIST_ENTRY32 {
- ULONG Next;
- } SLIST_ENTRY32, *PSLIST_ENTRY32;
- typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
- _ANONYMOUS_STRUCT struct {
- ULONGLONG Alignment;
- ULONGLONG Region;
- } DUMMYSTRUCTNAME;
- struct {
- ULONGLONG Depth:16;
- ULONGLONG Sequence:9;
- ULONGLONG NextEntry:39;
- ULONGLONG HeaderType:1;
- ULONGLONG Init:1;
- ULONGLONG Reserved:59;
- ULONGLONG Region:3;
- } Header8;
- struct {
- ULONGLONG Depth:16;
- ULONGLONG Sequence:48;
- ULONGLONG HeaderType:1;
- ULONGLONG Init:1;
- ULONGLONG Reserved:2;
- ULONGLONG NextEntry:60;
- } Header16;
- struct {
- ULONGLONG Depth:16;
- ULONGLONG Sequence:48;
- ULONGLONG HeaderType:1;
- ULONGLONG Reserved:3;
- ULONGLONG NextEntry:60;
- } HeaderX64;
- } SLIST_HEADER, *PSLIST_HEADER;
- typedef union _SLIST_HEADER32 {
- ULONGLONG Alignment;
- _ANONYMOUS_STRUCT struct {
- SLIST_ENTRY32 Next;
- USHORT Depth;
- USHORT Sequence;
- } DUMMYSTRUCTNAME;
- } SLIST_HEADER32, *PSLIST_HEADER32;
- #else
- #define SLIST_ENTRY SINGLE_LIST_ENTRY
- #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
- #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
- typedef SLIST_ENTRY SLIST_ENTRY32, *PSLIST_ENTRY32;
- typedef union _SLIST_HEADER {
- ULONGLONG Alignment;
- _ANONYMOUS_STRUCT struct {
- SLIST_ENTRY Next;
- USHORT Depth;
- USHORT Sequence;
- } DUMMYSTRUCTNAME;
- } SLIST_HEADER, *PSLIST_HEADER;
- typedef SLIST_HEADER SLIST_HEADER32, *PSLIST_HEADER32;
- #endif /* defined(_WIN64) */
- #endif /* _SLIST_HEADER_ */
- /* MS definition is broken! */
- extern BOOLEAN NTSYSAPI NlsMbCodePageTag;
- extern BOOLEAN NTSYSAPI NlsMbOemCodePageTag;
- #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag
- #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag
- #define SHORT_LEAST_SIGNIFICANT_BIT 0
- #define SHORT_MOST_SIGNIFICANT_BIT 1
- #define LONG_LEAST_SIGNIFICANT_BIT 0
- #define LONG_3RD_MOST_SIGNIFICANT_BIT 1
- #define LONG_2ND_MOST_SIGNIFICANT_BIT 2
- #define LONG_MOST_SIGNIFICANT_BIT 3
- #define RTLVERLIB_DDI(x) Wdmlib##x
- typedef BOOLEAN
- (*PFN_RTL_IS_NTDDI_VERSION_AVAILABLE)(
- IN ULONG Version);
- typedef BOOLEAN
- (*PFN_RTL_IS_SERVICE_PACK_VERSION_INSTALLED)(
- IN ULONG Version);
- /******************************************************************************
- * Kernel Types *
- ******************************************************************************/
- typedef UCHAR KIRQL, *PKIRQL;
- typedef CCHAR KPROCESSOR_MODE;
- typedef LONG KPRIORITY;
- typedef enum _MODE {
- KernelMode,
- UserMode,
- MaximumMode
- } MODE;
- #define CACHE_FULLY_ASSOCIATIVE 0xFF
- #define MAXIMUM_SUSPEND_COUNT MAXCHAR
- #define EVENT_QUERY_STATE (0x0001)
- #define EVENT_MODIFY_STATE (0x0002)
- #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
- #define LTP_PC_SMT 0x1
- #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
- #define SINGLE_GROUP_LEGACY_API 1
- #endif
- #define SEMAPHORE_QUERY_STATE (0x0001)
- #define SEMAPHORE_MODIFY_STATE (0x0002)
- #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3)
- typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
- RelationProcessorCore,
- RelationNumaNode,
- RelationCache,
- RelationProcessorPackage,
- RelationGroup,
- RelationAll = 0xffff
- } LOGICAL_PROCESSOR_RELATIONSHIP;
- typedef enum _PROCESSOR_CACHE_TYPE {
- CacheUnified,
- CacheInstruction,
- CacheData,
- CacheTrace
- } PROCESSOR_CACHE_TYPE;
- typedef struct _CACHE_DESCRIPTOR {
- UCHAR Level;
- UCHAR Associativity;
- USHORT LineSize;
- ULONG Size;
- PROCESSOR_CACHE_TYPE Type;
- } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
- typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
- ULONG_PTR ProcessorMask;
- LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
- _ANONYMOUS_UNION union {
- struct {
- UCHAR Flags;
- } ProcessorCore;
- struct {
- ULONG NodeNumber;
- } NumaNode;
- CACHE_DESCRIPTOR Cache;
- ULONGLONG Reserved[2];
- } DUMMYUNIONNAME;
- } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
- typedef struct _PROCESSOR_RELATIONSHIP {
- UCHAR Flags;
- UCHAR Reserved[21];
- USHORT GroupCount;
- GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
- } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
- typedef struct _NUMA_NODE_RELATIONSHIP {
- ULONG NodeNumber;
- UCHAR Reserved[20];
- GROUP_AFFINITY GroupMask;
- } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
- typedef struct _CACHE_RELATIONSHIP {
- UCHAR Level;
- UCHAR Associativity;
- USHORT LineSize;
- ULONG CacheSize;
- PROCESSOR_CACHE_TYPE Type;
- UCHAR Reserved[20];
- GROUP_AFFINITY GroupMask;
- } CACHE_RELATIONSHIP, *PCACHE_RELATIONSHIP;
- typedef struct _PROCESSOR_GROUP_INFO {
- UCHAR MaximumProcessorCount;
- UCHAR ActiveProcessorCount;
- UCHAR Reserved[38];
- KAFFINITY ActiveProcessorMask;
- } PROCESSOR_GROUP_INFO, *PPROCESSOR_GROUP_INFO;
- typedef struct _GROUP_RELATIONSHIP {
- USHORT MaximumGroupCount;
- USHORT ActiveGroupCount;
- UCHAR Reserved[20];
- PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
- } GROUP_RELATIONSHIP, *PGROUP_RELATIONSHIP;
- typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
- LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
- ULONG Size;
- _ANONYMOUS_UNION union {
- PROCESSOR_RELATIONSHIP Processor;
- NUMA_NODE_RELATIONSHIP NumaNode;
- CACHE_RELATIONSHIP Cache;
- GROUP_RELATIONSHIP Group;
- } DUMMYUNIONNAME;
- } SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
- /* Processor features */
- #define PF_FLOATING_POINT_PRECISION_ERRATA 0
- #define PF_FLOATING_POINT_EMULATED 1
- #define PF_COMPARE_EXCHANGE_DOUBLE 2
- #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
- #define PF_PPC_MOVEMEM_64BIT_OK 4
- #define PF_ALPHA_BYTE_INSTRUCTIONS 5
- #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
- #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
- #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
- #define PF_PAE_ENABLED 9
- #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
- #define PF_SSE_DAZ_MODE_AVAILABLE 11
- #define PF_NX_ENABLED 12
- #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
- #define PF_COMPARE_EXCHANGE128 14
- #define PF_COMPARE64_EXCHANGE128 15
- #define PF_CHANNELS_ENABLED 16
- #define PF_XSAVE_ENABLED 17
- #define MAXIMUM_WAIT_OBJECTS 64
- #define ASSERT_APC(Object) NT_ASSERT((Object)->Type == ApcObject)
- #define ASSERT_DPC(Object) \
- ASSERT(((Object)->Type == 0) || \
- ((Object)->Type == DpcObject) || \
- ((Object)->Type == ThreadedDpcObject))
- #define ASSERT_GATE(object) \
- NT_ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \
- (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject))
- #define ASSERT_DEVICE_QUEUE(Object) \
- NT_ASSERT((Object)->Type == DeviceQueueObject)
- #define ASSERT_TIMER(E) \
- NT_ASSERT(((E)->Header.Type == TimerNotificationObject) || \
- ((E)->Header.Type == TimerSynchronizationObject))
- #define ASSERT_MUTANT(E) \
- NT_ASSERT((E)->Header.Type == MutantObject)
- #define ASSERT_SEMAPHORE(E) \
- NT_ASSERT((E)->Header.Type == SemaphoreObject)
- #define ASSERT_EVENT(E) \
- NT_ASSERT(((E)->Header.Type == NotificationEvent) || \
- ((E)->Header.Type == SynchronizationEvent))
- #define DPC_NORMAL 0
- #define DPC_THREADED 1
- #define GM_LOCK_BIT 0x1
- #define GM_LOCK_BIT_V 0x0
- #define GM_LOCK_WAITER_WOKEN 0x2
- #define GM_LOCK_WAITER_INC 0x4
- #define LOCK_QUEUE_WAIT_BIT 0
- #define LOCK_QUEUE_OWNER_BIT 1
- #define LOCK_QUEUE_WAIT 1
- #define LOCK_QUEUE_OWNER 2
- #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
- #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
- #define PROCESSOR_FEATURE_MAX 64
- #define DBG_STATUS_CONTROL_C 1
- #define DBG_STATUS_SYSRQ 2
- #define DBG_STATUS_BUGCHECK_FIRST 3
- #define DBG_STATUS_BUGCHECK_SECOND 4
- #define DBG_STATUS_FATAL 5
- #define DBG_STATUS_DEBUG_CONTROL 6
- #define DBG_STATUS_WORKER 7
- #if defined(_WIN64)
- #define MAXIMUM_PROC_PER_GROUP 64
- #else
- #define MAXIMUM_PROC_PER_GROUP 32
- #endif
- #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
- /* Exception Records */
- #define EXCEPTION_NONCONTINUABLE 1
- #define EXCEPTION_MAXIMUM_PARAMETERS 15
- #define EXCEPTION_DIVIDED_BY_ZERO 0
- #define EXCEPTION_DEBUG 1
- #define EXCEPTION_NMI 2
- #define EXCEPTION_INT3 3
- #define EXCEPTION_BOUND_CHECK 5
- #define EXCEPTION_INVALID_OPCODE 6
- #define EXCEPTION_NPX_NOT_AVAILABLE 7
- #define EXCEPTION_DOUBLE_FAULT 8
- #define EXCEPTION_NPX_OVERRUN 9
- #define EXCEPTION_INVALID_TSS 0x0A
- #define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
- #define EXCEPTION_STACK_FAULT 0x0C
- #define EXCEPTION_GP_FAULT 0x0D
- #define EXCEPTION_RESERVED_TRAP 0x0F
- #define EXCEPTION_NPX_ERROR 0x010
- #define EXCEPTION_ALIGNMENT_CHECK 0x011
- typedef struct _EXCEPTION_RECORD {
- NTSTATUS ExceptionCode;
- ULONG ExceptionFlags;
- struct _EXCEPTION_RECORD *ExceptionRecord;
- PVOID ExceptionAddress;
- ULONG NumberParameters;
- ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
- } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
- typedef struct _EXCEPTION_RECORD32 {
- NTSTATUS ExceptionCode;
- ULONG ExceptionFlags;
- ULONG ExceptionRecord;
- ULONG ExceptionAddress;
- ULONG NumberParameters;
- ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
- } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
- typedef struct _EXCEPTION_RECORD64 {
- NTSTATUS ExceptionCode;
- ULONG ExceptionFlags;
- ULONG64 ExceptionRecord;
- ULONG64 ExceptionAddress;
- ULONG NumberParameters;
- ULONG __unusedAlignment;
- ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
- } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
- typedef struct _EXCEPTION_POINTERS {
- PEXCEPTION_RECORD ExceptionRecord;
- PCONTEXT ContextRecord;
- } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
- typedef enum _KBUGCHECK_CALLBACK_REASON {
- KbCallbackInvalid,
- KbCallbackReserved1,
- KbCallbackSecondaryDumpData,
- KbCallbackDumpIo,
- KbCallbackAddPages,
- KbCallbackSecondaryMultiPartDumpData,
- KbCallbackRemovePages,
- KbCallbackTriageDumpData
- } KBUGCHECK_CALLBACK_REASON;
- struct _KBUGCHECK_REASON_CALLBACK_RECORD;
- typedef VOID
- (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)(
- IN KBUGCHECK_CALLBACK_REASON Reason,
- IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record,
- IN OUT PVOID ReasonSpecificData,
- IN ULONG ReasonSpecificDataLength);
- typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE;
- typedef struct _KBUGCHECK_ADD_PAGES {
- IN OUT PVOID Context;
- IN OUT ULONG Flags;
- IN ULONG BugCheckCode;
- OUT ULONG_PTR Address;
- OUT ULONG_PTR Count;
- } KBUGCHECK_ADD_PAGES, *PKBUGCHECK_ADD_PAGES;
- typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA {
- IN PVOID InBuffer;
- IN ULONG InBufferLength;
- IN ULONG MaximumAllowed;
- OUT GUID Guid;
- OUT PVOID OutBuffer;
- OUT ULONG OutBufferLength;
- } KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA;
- typedef enum _KBUGCHECK_DUMP_IO_TYPE {
- KbDumpIoInvalid,
- KbDumpIoHeader,
- KbDumpIoBody,
- KbDumpIoSecondaryData,
- KbDumpIoComplete
- } KBUGCHECK_DUMP_IO_TYPE;
- typedef struct _KBUGCHECK_DUMP_IO {
- IN ULONG64 Offset;
- IN PVOID Buffer;
- IN ULONG BufferLength;
- IN KBUGCHECK_DUMP_IO_TYPE Type;
- } KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO;
- #define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001UL
- #define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002UL
- #define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000UL
- typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
- LIST_ENTRY Entry;
- PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
- PUCHAR Component;
- ULONG_PTR Checksum;
- KBUGCHECK_CALLBACK_REASON Reason;
- UCHAR State;
- } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD;
- typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
- BufferEmpty,
- BufferInserted,
- BufferStarted,
- BufferFinished,
- BufferIncomplete
- } KBUGCHECK_BUFFER_DUMP_STATE;
- typedef VOID
- (NTAPI KBUGCHECK_CALLBACK_ROUTINE)(
- IN PVOID Buffer,
- IN ULONG Length);
- typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
- typedef struct _KBUGCHECK_CALLBACK_RECORD {
- LIST_ENTRY Entry;
- PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
- PVOID Buffer;
- ULONG Length;
- PUCHAR Component;
- ULONG_PTR Checksum;
- UCHAR State;
- } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
- typedef BOOLEAN
- (NTAPI NMI_CALLBACK)(
- IN PVOID Context,
- IN BOOLEAN Handled);
- typedef NMI_CALLBACK *PNMI_CALLBACK;
- typedef enum _KE_PROCESSOR_CHANGE_NOTIFY_STATE {
- KeProcessorAddStartNotify = 0,
- KeProcessorAddCompleteNotify,
- KeProcessorAddFailureNotify
- } KE_PROCESSOR_CHANGE_NOTIFY_STATE;
- typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT {
- KE_PROCESSOR_CHANGE_NOTIFY_STATE State;
- ULONG NtNumber;
- NTSTATUS Status;
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- PROCESSOR_NUMBER ProcNumber;
- #endif
- } KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
- typedef VOID
- (NTAPI PROCESSOR_CALLBACK_FUNCTION)(
- IN PVOID CallbackContext,
- IN PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT ChangeContext,
- IN OUT PNTSTATUS OperationStatus);
- typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION;
- #define KE_PROCESSOR_CHANGE_ADD_EXISTING 1
- #define INVALID_PROCESSOR_INDEX 0xffffffff
- typedef enum _KINTERRUPT_POLARITY {
- InterruptPolarityUnknown,
- InterruptActiveHigh,
- InterruptRisingEdge = InterruptActiveHigh,
- InterruptActiveLow,
- InterruptFallingEdge = InterruptActiveLow,
- #if NTDDI_VERSION >= NTDDI_WIN8
- InterruptActiveBoth,
- #endif
- #if NTDDI_VERSION >= NTDDI_WINBLUE
- InterruptActiveBothTriggerLow = InterruptActiveBoth,
- InterruptActiveBothTriggerHigh
- #endif
- } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY;
- typedef enum _KPROFILE_SOURCE {
- ProfileTime,
- ProfileAlignmentFixup,
- ProfileTotalIssues,
- ProfilePipelineDry,
- ProfileLoadInstructions,
- ProfilePipelineFrozen,
- ProfileBranchInstructions,
- ProfileTotalNonissues,
- ProfileDcacheMisses,
- ProfileIcacheMisses,
- ProfileCacheMisses,
- ProfileBranchMispredictions,
- ProfileStoreInstructions,
- ProfileFpInstructions,
- ProfileIntegerInstructions,
- Profile2Issue,
- Profile3Issue,
- Profile4Issue,
- ProfileSpecialInstructions,
- ProfileTotalCycles,
- ProfileIcacheIssues,
- ProfileDcacheAccesses,
- ProfileMemoryBarrierCycles,
- ProfileLoadLinkedIssues,
- ProfileMaximum
- } KPROFILE_SOURCE;
- typedef enum _KWAIT_REASON {
- Executive,
- FreePage,
- PageIn,
- PoolAllocation,
- DelayExecution,
- Suspended,
- UserRequest,
- WrExecutive,
- WrFreePage,
- WrPageIn,
- WrPoolAllocation,
- WrDelayExecution,
- WrSuspended,
- WrUserRequest,
- WrSpare0,
- WrQueue,
- WrLpcReceive,
- WrLpcReply,
- WrVirtualMemory,
- WrPageOut,
- WrRendezvous,
- WrKeyedEvent,
- WrTerminated,
- WrProcessInSwap,
- WrCpuRateControl,
- WrCalloutStack,
- WrKernel,
- WrResource,
- WrPushLock,
- WrMutex,
- WrQuantumEnd,
- WrDispatchInt,
- WrPreempted,
- WrYieldExecution,
- WrFastMutex,
- WrGuardedMutex,
- WrRundown,
- WrAlertByThreadId,
- WrDeferredPreempt,
- WrPhysicalFault,
- MaximumWaitReason
- } KWAIT_REASON;
- typedef struct _KWAIT_BLOCK {
- LIST_ENTRY WaitListEntry;
- struct _KTHREAD *Thread;
- PVOID Object;
- struct _KWAIT_BLOCK *NextWaitBlock;
- USHORT WaitKey;
- UCHAR WaitType;
- volatile UCHAR BlockState;
- #if defined(_WIN64)
- LONG SpareLong;
- #endif
- } KWAIT_BLOCK, *PKWAIT_BLOCK, *PRKWAIT_BLOCK;
- typedef enum _KINTERRUPT_MODE {
- LevelSensitive,
- Latched
- } KINTERRUPT_MODE;
- #define THREAD_WAIT_OBJECTS 3
- typedef VOID
- (NTAPI KSTART_ROUTINE)(
- IN PVOID StartContext);
- typedef KSTART_ROUTINE *PKSTART_ROUTINE;
- typedef VOID
- (NTAPI *PKINTERRUPT_ROUTINE)(
- VOID);
- typedef BOOLEAN
- (NTAPI KSERVICE_ROUTINE)(
- IN struct _KINTERRUPT *Interrupt,
- IN PVOID ServiceContext);
- typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
- typedef BOOLEAN
- (NTAPI KMESSAGE_SERVICE_ROUTINE)(
- IN struct _KINTERRUPT *Interrupt,
- IN PVOID ServiceContext,
- IN ULONG MessageID);
- typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE;
- typedef enum _KD_OPTION {
- KD_OPTION_SET_BLOCK_ENABLE,
- } KD_OPTION;
- typedef VOID
- (NTAPI *PKNORMAL_ROUTINE)(
- IN PVOID NormalContext OPTIONAL,
- IN PVOID SystemArgument1 OPTIONAL,
- IN PVOID SystemArgument2 OPTIONAL);
- typedef VOID
- (NTAPI *PKRUNDOWN_ROUTINE)(
- IN struct _KAPC *Apc);
- typedef VOID
- (NTAPI *PKKERNEL_ROUTINE)(
- IN struct _KAPC *Apc,
- IN OUT PKNORMAL_ROUTINE *NormalRoutine OPTIONAL,
- IN OUT PVOID *NormalContext OPTIONAL,
- IN OUT PVOID *SystemArgument1 OPTIONAL,
- IN OUT PVOID *SystemArgument2 OPTIONAL);
- typedef struct _KAPC {
- UCHAR Type;
- UCHAR SpareByte0;
- UCHAR Size;
- UCHAR SpareByte1;
- ULONG SpareLong0;
- struct _KTHREAD *Thread;
- LIST_ENTRY ApcListEntry;
- PKKERNEL_ROUTINE KernelRoutine;
- PKRUNDOWN_ROUTINE RundownRoutine;
- PKNORMAL_ROUTINE NormalRoutine;
- PVOID NormalContext;
- PVOID SystemArgument1;
- PVOID SystemArgument2;
- CCHAR ApcStateIndex;
- KPROCESSOR_MODE ApcMode;
- BOOLEAN Inserted;
- } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
- #define KAPC_OFFSET_TO_SPARE_BYTE0 FIELD_OFFSET(KAPC, SpareByte0)
- #define KAPC_OFFSET_TO_SPARE_BYTE1 FIELD_OFFSET(KAPC, SpareByte1)
- #define KAPC_OFFSET_TO_SPARE_LONG FIELD_OFFSET(KAPC, SpareLong0)
- #define KAPC_OFFSET_TO_SYSTEMARGUMENT1 FIELD_OFFSET(KAPC, SystemArgument1)
- #define KAPC_OFFSET_TO_SYSTEMARGUMENT2 FIELD_OFFSET(KAPC, SystemArgument2)
- #define KAPC_OFFSET_TO_APCSTATEINDEX FIELD_OFFSET(KAPC, ApcStateIndex)
- #define KAPC_ACTUAL_LENGTH (FIELD_OFFSET(KAPC, Inserted) + sizeof(BOOLEAN))
- typedef struct _KDEVICE_QUEUE_ENTRY {
- LIST_ENTRY DeviceListEntry;
- ULONG SortKey;
- BOOLEAN Inserted;
- } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
- *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
- typedef PVOID PKIPI_CONTEXT;
- typedef VOID
- (NTAPI *PKIPI_WORKER)(
- IN OUT PKIPI_CONTEXT PacketContext,
- IN PVOID Parameter1 OPTIONAL,
- IN PVOID Parameter2 OPTIONAL,
- IN PVOID Parameter3 OPTIONAL);
- typedef struct _KIPI_COUNTS {
- ULONG Freeze;
- ULONG Packet;
- ULONG DPC;
- ULONG APC;
- ULONG FlushSingleTb;
- ULONG FlushMultipleTb;
- ULONG FlushEntireTb;
- ULONG GenericCall;
- ULONG ChangeColor;
- ULONG SweepDcache;
- ULONG SweepIcache;
- ULONG SweepIcacheRange;
- ULONG FlushIoBuffers;
- ULONG GratuitousDPC;
- } KIPI_COUNTS, *PKIPI_COUNTS;
- typedef ULONG_PTR
- (NTAPI KIPI_BROADCAST_WORKER)(
- IN ULONG_PTR Argument);
- typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
- typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
- typedef struct _KSPIN_LOCK_QUEUE {
- struct _KSPIN_LOCK_QUEUE *volatile Next;
- PKSPIN_LOCK volatile Lock;
- } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
- typedef struct _KLOCK_QUEUE_HANDLE {
- KSPIN_LOCK_QUEUE LockQueue;
- KIRQL OldIrql;
- } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
- #if defined(_AMD64_)
- typedef ULONG64 KSPIN_LOCK_QUEUE_NUMBER;
- #define LockQueueUnusedSpare0 0
- #define LockQueueUnusedSpare1 1
- #define LockQueueUnusedSpare2 2
- #define LockQueueUnusedSpare3 3
- #define LockQueueVacbLock 4
- #define LockQueueMasterLock 5
- #define LockQueueNonPagedPoolLock 6
- #define LockQueueIoCancelLock 7
- #define LockQueueUnusedSpare8 8
- #define LockQueueIoVpbLock 9
- #define LockQueueIoDatabaseLock 10
- #define LockQueueIoCompletionLock 11
- #define LockQueueNtfsStructLock 12
- #define LockQueueAfdWorkQueueLock 13
- #define LockQueueBcbLock 14
- #define LockQueueUnusedSpare15 15
- #define LockQueueUnusedSpare16 16
- #define LockQueueMaximumLock 17
- #else
- typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
- LockQueueUnusedSpare0,
- LockQueueUnusedSpare1,
- LockQueueUnusedSpare2,
- LockQueueUnusedSpare3,
- LockQueueVacbLock,
- LockQueueMasterLock,
- LockQueueNonPagedPoolLock,
- LockQueueIoCancelLock,
- LockQueueUnusedSpare8,
- LockQueueIoVpbLock,
- LockQueueIoDatabaseLock,
- LockQueueIoCompletionLock,
- LockQueueNtfsStructLock,
- LockQueueAfdWorkQueueLock,
- LockQueueBcbLock,
- LockQueueUnusedSpare15,
- LockQueueUnusedSpare16,
- LockQueueMaximumLock = LockQueueUnusedSpare16 + 1
- } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
- #endif /* defined(_AMD64_) */
- typedef VOID
- (NTAPI KDEFERRED_ROUTINE)(
- IN struct _KDPC *Dpc,
- IN PVOID DeferredContext OPTIONAL,
- IN PVOID SystemArgument1 OPTIONAL,
- IN PVOID SystemArgument2 OPTIONAL);
- typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE;
- typedef enum _KDPC_IMPORTANCE {
- LowImportance,
- MediumImportance,
- HighImportance,
- MediumHighImportance
- } KDPC_IMPORTANCE;
- typedef struct _KDPC {
- UCHAR Type;
- UCHAR Importance;
- volatile USHORT Number;
- LIST_ENTRY DpcListEntry;
- PKDEFERRED_ROUTINE DeferredRoutine;
- PVOID DeferredContext;
- PVOID SystemArgument1;
- PVOID SystemArgument2;
- volatile PVOID DpcData;
- } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
- typedef struct _KDPC_WATCHDOG_INFORMATION {
- ULONG DpcTimeLimit;
- ULONG DpcTimeCount;
- ULONG DpcWatchdogLimit;
- ULONG DpcWatchdogCount;
- ULONG Reserved;
- } KDPC_WATCHDOG_INFORMATION, *PKDPC_WATCHDOG_INFORMATION;
- typedef struct _KDEVICE_QUEUE {
- CSHORT Type;
- CSHORT Size;
- LIST_ENTRY DeviceListHead;
- KSPIN_LOCK Lock;
- # if defined(_AMD64_)
- _ANONYMOUS_UNION union {
- BOOLEAN Busy;
- _ANONYMOUS_STRUCT struct {
- LONG64 Reserved:8;
- LONG64 Hint:56;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- # else
- BOOLEAN Busy;
- # endif
- } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
- #define TIMER_EXPIRED_INDEX_BITS 6
- #define TIMER_PROCESSOR_INDEX_BITS 5
- typedef struct _DISPATCHER_HEADER {
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- UCHAR Type;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_UNION union {
- UCHAR TimerControlFlags;
- _ANONYMOUS_STRUCT struct {
- UCHAR Absolute:1;
- UCHAR Coalescable:1;
- UCHAR KeepShifting:1;
- UCHAR EncodedTolerableDelay:5;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- UCHAR Abandoned;
- #if (NTDDI_VERSION < NTDDI_WIN7)
- UCHAR NpxIrql;
- #endif
- BOOLEAN Signalling;
- } DUMMYUNIONNAME;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_UNION union {
- UCHAR ThreadControlFlags;
- _ANONYMOUS_STRUCT struct {
- UCHAR CpuThrottled:1;
- UCHAR CycleProfiling:1;
- UCHAR CounterProfiling:1;
- UCHAR Reserved:5;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- UCHAR Size;
- UCHAR Hand;
- } DUMMYUNIONNAME2;
- _ANONYMOUS_UNION union {
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- _ANONYMOUS_UNION union {
- UCHAR TimerMiscFlags;
- _ANONYMOUS_STRUCT struct {
- #if !defined(_X86_)
- UCHAR Index:TIMER_EXPIRED_INDEX_BITS;
- #else
- UCHAR Index:1;
- UCHAR Processor:TIMER_PROCESSOR_INDEX_BITS;
- #endif
- UCHAR Inserted:1;
- volatile UCHAR Expired:1;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- #else
- /* Pre Win7 compatibility fix to latest WDK */
- UCHAR Inserted;
- #endif
- _ANONYMOUS_UNION union {
- BOOLEAN DebugActive;
- _ANONYMOUS_STRUCT struct {
- BOOLEAN ActiveDR7:1;
- BOOLEAN Instrumented:1;
- BOOLEAN Reserved2:4;
- BOOLEAN UmsScheduled:1;
- BOOLEAN UmsPrimary:1;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME; /* should probably be DUMMYUNIONNAME2, but this is what WDK says */
- BOOLEAN DpcActive;
- } DUMMYUNIONNAME3;
- } DUMMYSTRUCTNAME;
- volatile LONG Lock;
- } DUMMYUNIONNAME;
- LONG SignalState;
- LIST_ENTRY WaitListHead;
- } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
- typedef struct _KEVENT {
- DISPATCHER_HEADER Header;
- } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
- typedef struct _KSEMAPHORE {
- DISPATCHER_HEADER Header;
- LONG Limit;
- } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
- #define KSEMAPHORE_ACTUAL_LENGTH (FIELD_OFFSET(KSEMAPHORE, Limit) + sizeof(LONG))
- typedef struct _KGATE {
- DISPATCHER_HEADER Header;
- } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE;
- typedef struct _KGUARDED_MUTEX {
- volatile LONG Count;
- PKTHREAD Owner;
- ULONG Contention;
- KGATE Gate;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- SHORT KernelApcDisable;
- SHORT SpecialApcDisable;
- } DUMMYSTRUCTNAME;
- ULONG CombinedApcDisable;
- } DUMMYUNIONNAME;
- } KGUARDED_MUTEX, *PKGUARDED_MUTEX;
- typedef struct _KMUTANT {
- DISPATCHER_HEADER Header;
- LIST_ENTRY MutantListEntry;
- struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
- BOOLEAN Abandoned;
- UCHAR ApcDisable;
- } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
- #define TIMER_TABLE_SIZE 512
- #define TIMER_TABLE_SHIFT 9
- typedef struct _KTIMER {
- DISPATCHER_HEADER Header;
- ULARGE_INTEGER DueTime;
- LIST_ENTRY TimerListEntry;
- struct _KDPC *Dpc;
- # if !defined(_X86_)
- ULONG Processor;
- # endif
- ULONG Period;
- } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
- typedef enum _LOCK_OPERATION {
- IoReadAccess,
- IoWriteAccess,
- IoModifyAccess
- } LOCK_OPERATION;
- #define KTIMER_ACTUAL_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
- typedef BOOLEAN (NTAPI KSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
- typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE;
- typedef enum _POOL_TYPE {
- NonPagedPool,
- NonPagedPoolExecute = NonPagedPool,
- PagedPool,
- NonPagedPoolMustSucceed,
- DontUseThisType,
- NonPagedPoolCacheAligned,
- PagedPoolCacheAligned,
- NonPagedPoolCacheAlignedMustS,
- MaxPoolType,
- NonPagedPoolBase = 0,
- NonPagedPoolBaseMustSucceed = 2,
- NonPagedPoolBaseCacheAligned = 4,
- NonPagedPoolBaseCacheAlignedMustS = 6,
- NonPagedPoolSession = 32,
- PagedPoolSession,
- NonPagedPoolMustSucceedSession,
- DontUseThisTypeSession,
- NonPagedPoolCacheAlignedSession,
- PagedPoolCacheAlignedSession,
- NonPagedPoolCacheAlignedMustSSession,
- NonPagedPoolNx = 512,
- NonPagedPoolNxCacheAligned = 516,
- NonPagedPoolSessionNx = 544,
- } POOL_TYPE;
- typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
- StandardDesign,
- NEC98x86,
- EndAlternatives
- } ALTERNATIVE_ARCHITECTURE_TYPE;
- #ifndef _X86_
- #ifndef IsNEC_98
- #define IsNEC_98 (FALSE)
- #endif
- #ifndef IsNotNEC_98
- #define IsNotNEC_98 (TRUE)
- #endif
- #ifndef SetNEC_98
- #define SetNEC_98
- #endif
- #ifndef SetNotNEC_98
- #define SetNotNEC_98
- #endif
- #endif
- typedef struct _KSYSTEM_TIME {
- ULONG LowPart;
- LONG High1Time;
- LONG High2Time;
- } KSYSTEM_TIME, *PKSYSTEM_TIME;
- typedef struct DECLSPEC_ALIGN(16) _M128A {
- ULONGLONG Low;
- LONGLONG High;
- } M128A, *PM128A;
- typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
- USHORT ControlWord;
- USHORT StatusWord;
- UCHAR TagWord;
- UCHAR Reserved1;
- USHORT ErrorOpcode;
- ULONG ErrorOffset;
- USHORT ErrorSelector;
- USHORT Reserved2;
- ULONG DataOffset;
- USHORT DataSelector;
- USHORT Reserved3;
- ULONG MxCsr;
- ULONG MxCsr_Mask;
- M128A FloatRegisters[8];
- #if defined(_WIN64)
- M128A XmmRegisters[16];
- UCHAR Reserved4[96];
- #else
- M128A XmmRegisters[8];
- UCHAR Reserved4[192];
- ULONG StackControl[7];
- ULONG Cr0NpxState;
- #endif
- } XSAVE_FORMAT, *PXSAVE_FORMAT;
- typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
- ULONG64 Mask;
- ULONG64 Reserved[7];
- } XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER;
- typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
- XSAVE_FORMAT LegacyState;
- XSAVE_AREA_HEADER Header;
- } XSAVE_AREA, *PXSAVE_AREA;
- typedef struct _XSTATE_CONTEXT {
- ULONG64 Mask;
- ULONG Length;
- ULONG Reserved1;
- PXSAVE_AREA Area;
- #if defined(_X86_)
- ULONG Reserved2;
- #endif
- PVOID Buffer;
- #if defined(_X86_)
- ULONG Reserved3;
- #endif
- } XSTATE_CONTEXT, *PXSTATE_CONTEXT;
- typedef struct _XSTATE_SAVE {
- #if defined(_AMD64_)
- struct _XSTATE_SAVE* Prev;
- struct _KTHREAD* Thread;
- UCHAR Level;
- XSTATE_CONTEXT XStateContext;
- #elif defined(_IA64_)
- ULONG Dummy;
- #elif defined(_X86_)
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- LONG64 Reserved1;
- ULONG Reserved2;
- struct _XSTATE_SAVE* Prev;
- PXSAVE_AREA Reserved3;
- struct _KTHREAD* Thread;
- PVOID Reserved4;
- UCHAR Level;
- } DUMMYSTRUCTNAME;
- XSTATE_CONTEXT XStateContext;
- } DUMMYUNIONNAME;
- #endif
- } XSTATE_SAVE, *PXSTATE_SAVE;
- #ifdef _X86_
- #define MAXIMUM_SUPPORTED_EXTENSION 512
- #if !defined(__midl) && !defined(MIDL_PASS)
- C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION);
- #endif
- #endif /* _X86_ */
- #define XSAVE_ALIGN 64
- #define MINIMAL_XSTATE_AREA_LENGTH sizeof(XSAVE_AREA)
- #if !defined(__midl) && !defined(MIDL_PASS)
- C_ASSERT((sizeof(XSAVE_FORMAT) & (XSAVE_ALIGN - 1)) == 0);
- C_ASSERT((FIELD_OFFSET(XSAVE_AREA, Header) & (XSAVE_ALIGN - 1)) == 0);
- C_ASSERT(MINIMAL_XSTATE_AREA_LENGTH == 512 + 64);
- #endif
- typedef struct _CONTEXT_CHUNK {
- LONG Offset;
- ULONG Length;
- } CONTEXT_CHUNK, *PCONTEXT_CHUNK;
- typedef struct _CONTEXT_EX {
- CONTEXT_CHUNK All;
- CONTEXT_CHUNK Legacy;
- CONTEXT_CHUNK XState;
- } CONTEXT_EX, *PCONTEXT_EX;
- #define CONTEXT_EX_LENGTH ALIGN_UP_BY(sizeof(CONTEXT_EX), STACK_ALIGN)
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- extern NTSYSAPI volatile CCHAR KeNumberProcessors;
- #elif (NTDDI_VERSION >= NTDDI_WINXP)
- extern NTSYSAPI CCHAR KeNumberProcessors;
- #else
- extern PCCHAR KeNumberProcessors;
- #endif
- /******************************************************************************
- * Memory manager Types *
- ******************************************************************************/
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- typedef ULONG NODE_REQUIREMENT;
- #define MM_ANY_NODE_OK 0x80000000
- #endif
- #define MM_DONT_ZERO_ALLOCATION 0x00000001
- #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002
- #define MM_ALLOCATE_FULLY_REQUIRED 0x00000004
- #define MM_ALLOCATE_NO_WAIT 0x00000008
- #define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010
- #define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020
- #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
- #define MDL_PAGES_LOCKED 0x0002
- #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
- #define MDL_ALLOCATED_FIXED_SIZE 0x0008
- #define MDL_PARTIAL 0x0010
- #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
- #define MDL_IO_PAGE_READ 0x0040
- #define MDL_WRITE_OPERATION 0x0080
- #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
- #define MDL_FREE_EXTRA_PTES 0x0200
- #define MDL_DESCRIBES_AWE 0x0400
- #define MDL_IO_SPACE 0x0800
- #define MDL_NETWORK_HEADER 0x1000
- #define MDL_MAPPING_CAN_FAIL 0x2000
- #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
- #define MDL_INTERNAL 0x8000
- #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
- MDL_PAGES_LOCKED | \
- MDL_SOURCE_IS_NONPAGED_POOL | \
- MDL_PARTIAL_HAS_BEEN_MAPPED | \
- MDL_PARENT_MAPPED_SYSTEM_VA | \
- MDL_SYSTEM_VA | \
- MDL_IO_SPACE)
- #define FLUSH_MULTIPLE_MAXIMUM 32
- /* Section access rights */
- #define SECTION_QUERY 0x0001
- #define SECTION_MAP_WRITE 0x0002
- #define SECTION_MAP_READ 0x0004
- #define SECTION_MAP_EXECUTE 0x0008
- #define SECTION_EXTEND_SIZE 0x0010
- #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
- #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| \
- SECTION_MAP_WRITE | \
- SECTION_MAP_READ | \
- SECTION_MAP_EXECUTE | \
- SECTION_EXTEND_SIZE)
- #define SESSION_QUERY_ACCESS 0x0001
- #define SESSION_MODIFY_ACCESS 0x0002
- #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
- SESSION_QUERY_ACCESS | \
- SESSION_MODIFY_ACCESS)
- #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
- #define PAGE_NOACCESS 0x01
- #define PAGE_READONLY 0x02
- #define PAGE_READWRITE 0x04
- #define PAGE_WRITECOPY 0x08
- #define PAGE_EXECUTE 0x10
- #define PAGE_EXECUTE_READ 0x20
- #define PAGE_EXECUTE_READWRITE 0x40
- #define PAGE_EXECUTE_WRITECOPY 0x80
- #define PAGE_GUARD 0x100
- #define PAGE_NOCACHE 0x200
- #define PAGE_WRITECOMBINE 0x400
- #define MEM_COMMIT 0x1000
- #define MEM_RESERVE 0x2000
- #define MEM_DECOMMIT 0x4000
- #define MEM_RELEASE 0x8000
- #define MEM_FREE 0x10000
- #define MEM_PRIVATE 0x20000
- #define MEM_MAPPED 0x40000
- #define MEM_RESET 0x80000
- #define MEM_TOP_DOWN 0x100000
- #define MEM_LARGE_PAGES 0x20000000
- #define MEM_4MB_PAGES 0x80000000
- #define SEC_RESERVE 0x4000000
- #define SEC_COMMIT 0x8000000
- #define SEC_LARGE_PAGES 0x80000000
- /* Section map options */
- typedef enum _SECTION_INHERIT {
- ViewShare = 1,
- ViewUnmap = 2
- } SECTION_INHERIT;
- typedef ULONG PFN_COUNT;
- typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER;
- typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
- typedef struct _MDL {
- struct _MDL *Next;
- CSHORT Size;
- CSHORT MdlFlags;
- struct _EPROCESS *Process;
- PVOID MappedSystemVa;
- PVOID StartVa;
- ULONG ByteCount;
- ULONG ByteOffset;
- } MDL, *PMDL;
- typedef MDL *PMDLX;
- typedef enum _MEMORY_CACHING_TYPE_ORIG {
- MmFrameBufferCached = 2
- } MEMORY_CACHING_TYPE_ORIG;
- typedef enum _MEMORY_CACHING_TYPE {
- MmNonCached = FALSE,
- MmCached = TRUE,
- MmWriteCombined = MmFrameBufferCached,
- MmHardwareCoherentCached,
- MmNonCachedUnordered,
- MmUSWCCached,
- MmMaximumCacheType,
- MmNotMapped = -1
- } MEMORY_CACHING_TYPE;
- typedef enum _MM_PAGE_PRIORITY {
- LowPagePriority,
- NormalPagePriority = 16,
- HighPagePriority = 32
- } MM_PAGE_PRIORITY;
- typedef enum _MM_SYSTEM_SIZE {
- MmSmallSystem,
- MmMediumSystem,
- MmLargeSystem
- } MM_SYSTEMSIZE;
- extern NTKERNELAPI BOOLEAN Mm64BitPhysicalAddress;
- extern PVOID MmBadPointer;
- /******************************************************************************
- * Executive Types *
- ******************************************************************************/
- #define EX_RUNDOWN_ACTIVE 0x1
- #define EX_RUNDOWN_COUNT_SHIFT 0x1
- #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT)
- typedef struct _FAST_MUTEX {
- volatile LONG Count;
- PKTHREAD Owner;
- ULONG Contention;
- KEVENT Event;
- ULONG OldIrql;
- } FAST_MUTEX, *PFAST_MUTEX;
- typedef enum _SUITE_TYPE {
- SmallBusiness,
- Enterprise,
- BackOffice,
- CommunicationServer,
- TerminalServer,
- SmallBusinessRestricted,
- EmbeddedNT,
- DataCenter,
- SingleUserTS,
- Personal,
- Blade,
- EmbeddedRestricted,
- SecurityAppliance,
- StorageServer,
- ComputeServer,
- WHServer,
- MaxSuiteType
- } SUITE_TYPE;
- typedef enum _EX_POOL_PRIORITY {
- LowPoolPriority,
- LowPoolPrioritySpecialPoolOverrun = 8,
- LowPoolPrioritySpecialPoolUnderrun = 9,
- NormalPoolPriority = 16,
- NormalPoolPrioritySpecialPoolOverrun = 24,
- NormalPoolPrioritySpecialPoolUnderrun = 25,
- HighPoolPriority = 32,
- HighPoolPrioritySpecialPoolOverrun = 40,
- HighPoolPrioritySpecialPoolUnderrun = 41
- } EX_POOL_PRIORITY;
- #if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_))
- #define LOOKASIDE_ALIGN
- #else
- #define LOOKASIDE_ALIGN DECLSPEC_CACHEALIGN
- #endif
- typedef struct _LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
- typedef PVOID
- (NTAPI *PALLOCATE_FUNCTION)(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag);
- typedef PVOID
- (NTAPI *PALLOCATE_FUNCTION_EX)(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag,
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
- typedef VOID
- (NTAPI *PFREE_FUNCTION)(
- IN PVOID Buffer);
- typedef VOID
- (NTAPI *PFREE_FUNCTION_EX)(
- IN PVOID Buffer,
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
- typedef VOID
- (NTAPI CALLBACK_FUNCTION)(
- IN PVOID CallbackContext OPTIONAL,
- IN PVOID Argument1 OPTIONAL,
- IN PVOID Argument2 OPTIONAL);
- typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
- #define GENERAL_LOOKASIDE_LAYOUT \
- _ANONYMOUS_UNION union { \
- SLIST_HEADER ListHead; \
- SINGLE_LIST_ENTRY SingleListHead; \
- } DUMMYUNIONNAME; \
- USHORT Depth; \
- USHORT MaximumDepth; \
- ULONG TotalAllocates; \
- _ANONYMOUS_UNION union { \
- ULONG AllocateMisses; \
- ULONG AllocateHits; \
- } DUMMYUNIONNAME2; \
- ULONG TotalFrees; \
- _ANONYMOUS_UNION union { \
- ULONG FreeMisses; \
- ULONG FreeHits; \
- } DUMMYUNIONNAME3; \
- POOL_TYPE Type; \
- ULONG Tag; \
- ULONG Size; \
- _ANONYMOUS_UNION union { \
- PALLOCATE_FUNCTION_EX AllocateEx; \
- PALLOCATE_FUNCTION Allocate; \
- } DUMMYUNIONNAME4; \
- _ANONYMOUS_UNION union { \
- PFREE_FUNCTION_EX FreeEx; \
- PFREE_FUNCTION Free; \
- } DUMMYUNIONNAME5; \
- LIST_ENTRY ListEntry; \
- ULONG LastTotalAllocates; \
- _ANONYMOUS_UNION union { \
- ULONG LastAllocateMisses; \
- ULONG LastAllocateHits; \
- } DUMMYUNIONNAME6; \
- ULONG Future[2];
- typedef struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE {
- GENERAL_LOOKASIDE_LAYOUT
- } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
- typedef struct _GENERAL_LOOKASIDE_POOL {
- GENERAL_LOOKASIDE_LAYOUT
- } GENERAL_LOOKASIDE_POOL, *PGENERAL_LOOKASIDE_POOL;
- #define LOOKASIDE_CHECK(f) \
- C_ASSERT(FIELD_OFFSET(GENERAL_LOOKASIDE,f) == FIELD_OFFSET(GENERAL_LOOKASIDE_POOL,f))
- LOOKASIDE_CHECK(TotalFrees);
- LOOKASIDE_CHECK(Tag);
- LOOKASIDE_CHECK(Future);
- typedef struct _PAGED_LOOKASIDE_LIST {
- GENERAL_LOOKASIDE L;
- #if !defined(_AMD64_) && !defined(_IA64_)
- FAST_MUTEX Lock__ObsoleteButDoNotDelete;
- #endif
- } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
- typedef struct LOOKASIDE_ALIGN _NPAGED_LOOKASIDE_LIST {
- GENERAL_LOOKASIDE L;
- #if !defined(_AMD64_) && !defined(_IA64_)
- KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
- #endif
- } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
- #define LOOKASIDE_MINIMUM_BLOCK_SIZE (RTL_SIZEOF_THROUGH_FIELD (SLIST_ENTRY, Next))
- typedef struct _LOOKASIDE_LIST_EX {
- GENERAL_LOOKASIDE_POOL L;
- } LOOKASIDE_LIST_EX;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001UL
- #define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002UL
- #define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
- #define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- typedef struct _EX_RUNDOWN_REF {
- _ANONYMOUS_UNION union {
- volatile ULONG_PTR Count;
- volatile PVOID Ptr;
- } DUMMYUNIONNAME;
- } EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
- typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
- typedef enum _WORK_QUEUE_TYPE {
- CriticalWorkQueue,
- DelayedWorkQueue,
- HyperCriticalWorkQueue,
- NormalWorkQueue,
- BackgroundWorkQueue,
- RealTimeWorkQueue,
- SuperCriticalWorkQueue,
- MaximumWorkQueue,
- CustomPriorityWorkQueue = 32
- } WORK_QUEUE_TYPE;
- typedef VOID
- (NTAPI WORKER_THREAD_ROUTINE)(
- IN PVOID Parameter);
- typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
- typedef struct _WORK_QUEUE_ITEM {
- LIST_ENTRY List;
- PWORKER_THREAD_ROUTINE WorkerRoutine;
- volatile PVOID Parameter;
- } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
- typedef ULONG_PTR ERESOURCE_THREAD, *PERESOURCE_THREAD;
- typedef struct _OWNER_ENTRY {
- ERESOURCE_THREAD OwnerThread;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- ULONG IoPriorityBoosted:1;
- ULONG OwnerReferenced:1;
- ULONG OwnerCount:30;
- } DUMMYSTRUCTNAME;
- ULONG TableSize;
- } DUMMYUNIONNAME;
- } OWNER_ENTRY, *POWNER_ENTRY;
- typedef struct _ERESOURCE {
- LIST_ENTRY SystemResourcesList;
- POWNER_ENTRY OwnerTable;
- SHORT ActiveCount;
- USHORT Flag;
- volatile PKSEMAPHORE SharedWaiters;
- volatile PKEVENT ExclusiveWaiters;
- OWNER_ENTRY OwnerEntry;
- ULONG ActiveEntries;
- ULONG ContentionCount;
- ULONG NumberOfSharedWaiters;
- ULONG NumberOfExclusiveWaiters;
- #if defined(_WIN64)
- PVOID Reserved2;
- #endif
- _ANONYMOUS_UNION union {
- PVOID Address;
- ULONG_PTR CreatorBackTraceIndex;
- } DUMMYUNIONNAME;
- KSPIN_LOCK SpinLock;
- } ERESOURCE, *PERESOURCE;
- /* ERESOURCE.Flag */
- #define ResourceNeverExclusive 0x0010
- #define ResourceReleaseByOtherThread 0x0020
- #define ResourceOwnedExclusive 0x0080
- #define RESOURCE_HASH_TABLE_SIZE 64
- typedef struct _RESOURCE_HASH_ENTRY {
- LIST_ENTRY ListEntry;
- PVOID Address;
- ULONG ContentionCount;
- ULONG Number;
- } RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY;
- typedef struct _RESOURCE_PERFORMANCE_DATA {
- ULONG ActiveResourceCount;
- ULONG TotalResourceCount;
- ULONG ExclusiveAcquire;
- ULONG SharedFirstLevel;
- ULONG SharedSecondLevel;
- ULONG StarveFirstLevel;
- ULONG StarveSecondLevel;
- ULONG WaitForExclusive;
- ULONG OwnerTableExpands;
- ULONG MaximumTableExpand;
- LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
- } RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA;
- /* Global debug flag */
- #if DEVL
- extern ULONG NtGlobalFlag;
- #define IF_NTOS_DEBUG(FlagName) if (NtGlobalFlag & (FLG_##FlagName))
- #else
- #define IF_NTOS_DEBUG(FlagName) if(FALSE)
- #endif
- /******************************************************************************
- * Security Manager Types *
- ******************************************************************************/
- /* Simple types */
- typedef PVOID PSECURITY_DESCRIPTOR;
- typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
- typedef ULONG ACCESS_MASK, *PACCESS_MASK;
- typedef PVOID PACCESS_TOKEN;
- typedef PVOID PSID;
- #define DELETE 0x00010000L
- #define READ_CONTROL 0x00020000L
- #define WRITE_DAC 0x00040000L
- #define WRITE_OWNER 0x00080000L
- #define SYNCHRONIZE 0x00100000L
- #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
- #define STANDARD_RIGHTS_READ READ_CONTROL
- #define STANDARD_RIGHTS_WRITE READ_CONTROL
- #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
- #define STANDARD_RIGHTS_ALL 0x001F0000L
- #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
- #define ACCESS_SYSTEM_SECURITY 0x01000000L
- #define MAXIMUM_ALLOWED 0x02000000L
- #define GENERIC_READ 0x80000000L
- #define GENERIC_WRITE 0x40000000L
- #define GENERIC_EXECUTE 0x20000000L
- #define GENERIC_ALL 0x10000000L
- typedef struct _GENERIC_MAPPING {
- ACCESS_MASK GenericRead;
- ACCESS_MASK GenericWrite;
- ACCESS_MASK GenericExecute;
- ACCESS_MASK GenericAll;
- } GENERIC_MAPPING, *PGENERIC_MAPPING;
- #define ACL_REVISION 2
- #define ACL_REVISION_DS 4
- #define ACL_REVISION1 1
- #define ACL_REVISION2 2
- #define ACL_REVISION3 3
- #define ACL_REVISION4 4
- #define MIN_ACL_REVISION ACL_REVISION2
- #define MAX_ACL_REVISION ACL_REVISION4
- typedef struct _ACL {
- UCHAR AclRevision;
- UCHAR Sbz1;
- USHORT AclSize;
- USHORT AceCount;
- USHORT Sbz2;
- } ACL, *PACL;
- /* Current security descriptor revision value */
- #define SECURITY_DESCRIPTOR_REVISION (1)
- #define SECURITY_DESCRIPTOR_REVISION1 (1)
- /* Privilege attributes */
- #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
- #define SE_PRIVILEGE_ENABLED (0x00000002L)
- #define SE_PRIVILEGE_REMOVED (0X00000004L)
- #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
- #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
- SE_PRIVILEGE_ENABLED | \
- SE_PRIVILEGE_REMOVED | \
- SE_PRIVILEGE_USED_FOR_ACCESS)
- #include <pshpack4.h>
- typedef struct _LUID_AND_ATTRIBUTES {
- LUID Luid;
- ULONG Attributes;
- } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
- #include <poppack.h>
- typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
- typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
- /* Privilege sets */
- #define PRIVILEGE_SET_ALL_NECESSARY (1)
- typedef struct _PRIVILEGE_SET {
- ULONG PrivilegeCount;
- ULONG Control;
- LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
- } PRIVILEGE_SET,*PPRIVILEGE_SET;
- typedef enum _SECURITY_IMPERSONATION_LEVEL {
- SecurityAnonymous,
- SecurityIdentification,
- SecurityImpersonation,
- SecurityDelegation
- } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
- #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
- #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
- #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
- #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
- #define SECURITY_DYNAMIC_TRACKING (TRUE)
- #define SECURITY_STATIC_TRACKING (FALSE)
- typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
- typedef struct _SECURITY_QUALITY_OF_SERVICE {
- ULONG Length;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
- SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
- BOOLEAN EffectiveOnly;
- } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
- typedef struct _SE_IMPERSONATION_STATE {
- PACCESS_TOKEN Token;
- BOOLEAN CopyOnOpen;
- BOOLEAN EffectiveOnly;
- SECURITY_IMPERSONATION_LEVEL Level;
- } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
- #define OWNER_SECURITY_INFORMATION (0x00000001L)
- #define GROUP_SECURITY_INFORMATION (0x00000002L)
- #define DACL_SECURITY_INFORMATION (0x00000004L)
- #define SACL_SECURITY_INFORMATION (0x00000008L)
- #define LABEL_SECURITY_INFORMATION (0x00000010L)
- #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
- #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
- #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
- #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
- typedef enum _SECURITY_OPERATION_CODE {
- SetSecurityDescriptor,
- QuerySecurityDescriptor,
- DeleteSecurityDescriptor,
- AssignSecurityDescriptor
- } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
- #define INITIAL_PRIVILEGE_COUNT 3
- typedef struct _INITIAL_PRIVILEGE_SET {
- ULONG PrivilegeCount;
- ULONG Control;
- LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
- } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
- #define SE_MIN_WELL_KNOWN_PRIVILEGE 2
- #define SE_CREATE_TOKEN_PRIVILEGE 2
- #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
- #define SE_LOCK_MEMORY_PRIVILEGE 4
- #define SE_INCREASE_QUOTA_PRIVILEGE 5
- #define SE_MACHINE_ACCOUNT_PRIVILEGE 6
- #define SE_TCB_PRIVILEGE 7
- #define SE_SECURITY_PRIVILEGE 8
- #define SE_TAKE_OWNERSHIP_PRIVILEGE 9
- #define SE_LOAD_DRIVER_PRIVILEGE 10
- #define SE_SYSTEM_PROFILE_PRIVILEGE 11
- #define SE_SYSTEMTIME_PRIVILEGE 12
- #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
- #define SE_INC_BASE_PRIORITY_PRIVILEGE 14
- #define SE_CREATE_PAGEFILE_PRIVILEGE 15
- #define SE_CREATE_PERMANENT_PRIVILEGE 16
- #define SE_BACKUP_PRIVILEGE 17
- #define SE_RESTORE_PRIVILEGE 18
- #define SE_SHUTDOWN_PRIVILEGE 19
- #define SE_DEBUG_PRIVILEGE 20
- #define SE_AUDIT_PRIVILEGE 21
- #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
- #define SE_CHANGE_NOTIFY_PRIVILEGE 23
- #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
- #define SE_UNDOCK_PRIVILEGE 25
- #define SE_SYNC_AGENT_PRIVILEGE 26
- #define SE_ENABLE_DELEGATION_PRIVILEGE 27
- #define SE_MANAGE_VOLUME_PRIVILEGE 28
- #define SE_IMPERSONATE_PRIVILEGE 29
- #define SE_CREATE_GLOBAL_PRIVILEGE 30
- #define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31
- #define SE_RELABEL_PRIVILEGE 32
- #define SE_INC_WORKING_SET_PRIVILEGE 33
- #define SE_TIME_ZONE_PRIVILEGE 34
- #define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35
- #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
- typedef struct _SECURITY_SUBJECT_CONTEXT {
- PACCESS_TOKEN ClientToken;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
- PACCESS_TOKEN PrimaryToken;
- PVOID ProcessAuditId;
- } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
- typedef struct _ACCESS_STATE {
- LUID OperationID;
- BOOLEAN SecurityEvaluated;
- BOOLEAN GenerateAudit;
- BOOLEAN GenerateOnClose;
- BOOLEAN PrivilegesAllocated;
- ULONG Flags;
- ACCESS_MASK RemainingDesiredAccess;
- ACCESS_MASK PreviouslyGrantedAccess;
- ACCESS_MASK OriginalDesiredAccess;
- SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PVOID AuxData;
- union {
- INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
- PRIVILEGE_SET PrivilegeSet;
- } Privileges;
- BOOLEAN AuditPrivileges;
- UNICODE_STRING ObjectName;
- UNICODE_STRING ObjectTypeName;
- } ACCESS_STATE, *PACCESS_STATE;
- typedef VOID
- (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)(
- IN PVOID Vcb,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
- #ifndef _NTLSA_IFS_
- #ifndef _NTLSA_AUDIT_
- #define _NTLSA_AUDIT_
- #define SE_MAX_AUDIT_PARAMETERS 32
- #define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
- #define SE_ADT_OBJECT_ONLY 0x1
- #define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001
- #define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002
- #define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004
- #define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008
- #define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010
- #define LSAP_SE_ADT_PARAMETER_ARRAY_TRUE_SIZE(Parameters) \
- ( sizeof(SE_ADT_PARAMETER_ARRAY) - sizeof(SE_ADT_PARAMETER_ARRAY_ENTRY) * \
- (SE_MAX_AUDIT_PARAMETERS - Parameters->ParameterCount) )
- typedef enum _SE_ADT_PARAMETER_TYPE {
- SeAdtParmTypeNone = 0,
- SeAdtParmTypeString,
- SeAdtParmTypeFileSpec,
- SeAdtParmTypeUlong,
- SeAdtParmTypeSid,
- SeAdtParmTypeLogonId,
- SeAdtParmTypeNoLogonId,
- SeAdtParmTypeAccessMask,
- SeAdtParmTypePrivs,
- SeAdtParmTypeObjectTypes,
- SeAdtParmTypeHexUlong,
- SeAdtParmTypePtr,
- SeAdtParmTypeTime,
- SeAdtParmTypeGuid,
- SeAdtParmTypeLuid,
- SeAdtParmTypeHexInt64,
- SeAdtParmTypeStringList,
- SeAdtParmTypeSidList,
- SeAdtParmTypeDuration,
- SeAdtParmTypeUserAccountControl,
- SeAdtParmTypeNoUac,
- SeAdtParmTypeMessage,
- SeAdtParmTypeDateTime,
- SeAdtParmTypeSockAddr,
- SeAdtParmTypeSD,
- SeAdtParmTypeLogonHours,
- SeAdtParmTypeLogonIdNoSid,
- SeAdtParmTypeUlongNoConv,
- SeAdtParmTypeSockAddrNoPort,
- SeAdtParmTypeAccessReason,
- SeAdtParmTypeStagingReason,
- SeAdtParmTypeResourceAttribute,
- SeAdtParmTypeClaims,
- SeAdtParmTypeLogonIdAsSid,
- SeAdtParmTypeMultiSzString,
- SeAdtParmTypeLogonIdEx
- } SE_ADT_PARAMETER_TYPE, *PSE_ADT_PARAMETER_TYPE;
- typedef struct _SE_ADT_OBJECT_TYPE {
- GUID ObjectType;
- USHORT Flags;
- USHORT Level;
- ACCESS_MASK AccessMask;
- } SE_ADT_OBJECT_TYPE, *PSE_ADT_OBJECT_TYPE;
- typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
- SE_ADT_PARAMETER_TYPE Type;
- ULONG Length;
- ULONG_PTR Data[2];
- PVOID Address;
- } SE_ADT_PARAMETER_ARRAY_ENTRY, *PSE_ADT_PARAMETER_ARRAY_ENTRY;
- typedef struct _SE_ADT_ACCESS_REASON {
- ACCESS_MASK AccessMask;
- ULONG AccessReasons[32];
- ULONG ObjectTypeIndex;
- ULONG AccessGranted;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- } SE_ADT_ACCESS_REASON, *PSE_ADT_ACCESS_REASON;
- typedef struct _SE_ADT_PARAMETER_ARRAY {
- ULONG CategoryId;
- ULONG AuditId;
- ULONG ParameterCount;
- ULONG Length;
- USHORT FlatSubCategoryId;
- USHORT Type;
- ULONG Flags;
- SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[ SE_MAX_AUDIT_PARAMETERS ];
- } SE_ADT_PARAMETER_ARRAY, *PSE_ADT_PARAMETER_ARRAY;
- #endif /* !_NTLSA_AUDIT_ */
- #endif /* !_NTLSA_IFS_ */
- /******************************************************************************
- * Power Management Support Types *
- ******************************************************************************/
- #ifndef _PO_DDK_
- #define _PO_DDK_
- #define PO_CB_SYSTEM_POWER_POLICY 0
- #define PO_CB_AC_STATUS 1
- #define PO_CB_BUTTON_COLLISION 2
- #define PO_CB_SYSTEM_STATE_LOCK 3
- #define PO_CB_LID_SWITCH_STATE 4
- #define PO_CB_PROCESSOR_POWER_POLICY 5
- /* Power States/Levels */
- typedef enum _SYSTEM_POWER_STATE {
- PowerSystemUnspecified = 0,
- PowerSystemWorking,
- PowerSystemSleeping1,
- PowerSystemSleeping2,
- PowerSystemSleeping3,
- PowerSystemHibernate,
- PowerSystemShutdown,
- PowerSystemMaximum
- } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
- #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
- typedef enum _POWER_INFORMATION_LEVEL {
- SystemPowerPolicyAc,
- SystemPowerPolicyDc,
- VerifySystemPolicyAc,
- VerifySystemPolicyDc,
- SystemPowerCapabilities,
- SystemBatteryState,
- SystemPowerStateHandler,
- ProcessorStateHandler,
- SystemPowerPolicyCurrent,
- AdministratorPowerPolicy,
- SystemReserveHiberFile,
- ProcessorInformation,
- SystemPowerInformation,
- ProcessorStateHandler2,
- LastWakeTime,
- LastSleepTime,
- SystemExecutionState,
- SystemPowerStateNotifyHandler,
- ProcessorPowerPolicyAc,
- ProcessorPowerPolicyDc,
- VerifyProcessorPowerPolicyAc,
- VerifyProcessorPowerPolicyDc,
- ProcessorPowerPolicyCurrent,
- SystemPowerStateLogging,
- SystemPowerLoggingEntry,
- SetPowerSettingValue,
- NotifyUserPowerSetting,
- PowerInformationLevelUnused0,
- SystemMonitorHiberBootPowerOff,
- SystemVideoState,
- TraceApplicationPowerMessage,
- TraceApplicationPowerMessageEnd,
- ProcessorPerfStates,
- ProcessorIdleStates,
- ProcessorCap,
- SystemWakeSource,
- SystemHiberFileInformation,
- TraceServicePowerMessage,
- ProcessorLoad,
- PowerShutdownNotification,
- MonitorCapabilities,
- SessionPowerInit,
- SessionDisplayState,
- PowerRequestCreate,
- PowerRequestAction,
- GetPowerRequestList,
- ProcessorInformationEx,
- NotifyUserModeLegacyPowerEvent,
- GroupPark,
- ProcessorIdleDomains,
- WakeTimerList,
- SystemHiberFileSize,
- ProcessorIdleStatesHv,
- ProcessorPerfStatesHv,
- ProcessorPerfCapHv,
- ProcessorSetIdle,
- LogicalProcessorIdling,
- UserPresence,
- PowerSettingNotificationName,
- GetPowerSettingValue,
- IdleResiliency,
- SessionRITState,
- SessionConnectNotification,
- SessionPowerCleanup,
- SessionLockState,
- SystemHiberbootState,
- PlatformInformation,
- PdcInvocation,
- MonitorInvocation,
- FirmwareTableInformationRegistered,
- SetShutdownSelectedTime,
- SuspendResumeInvocation,
- PlmPowerRequestCreate,
- ScreenOff,
- CsDeviceNotification,
- PlatformRole,
- LastResumePerformance,
- DisplayBurst,
- ExitLatencySamplingPercentage,
- RegisterSpmPowerSettings,
- PlatformIdleStates,
- ProcessorIdleVeto,
- PlatformIdleVeto,
- SystemBatteryStatePrecise,
- ThermalEvent,
- PowerRequestActionInternal,
- BatteryDeviceState,
- PowerInformationInternal,
- ThermalStandby,
- SystemHiberFileType,
- PhysicalPowerButtonPress,
- QueryPotentialDripsConstraint,
- EnergyTrackerCreate,
- EnergyTrackerQuery,
- UpdateBlackBoxRecorder,
- SessionAllowExternalDmaDevices,
- PowerInformationLevelMaximum
- } POWER_INFORMATION_LEVEL;
- typedef enum {
- PowerActionNone = 0,
- PowerActionReserved,
- PowerActionSleep,
- PowerActionHibernate,
- PowerActionShutdown,
- PowerActionShutdownReset,
- PowerActionShutdownOff,
- PowerActionWarmEject,
- PowerActionDisplayOff
- } POWER_ACTION, *PPOWER_ACTION;
- typedef enum _DEVICE_POWER_STATE {
- PowerDeviceUnspecified = 0,
- PowerDeviceD0,
- PowerDeviceD1,
- PowerDeviceD2,
- PowerDeviceD3,
- PowerDeviceMaximum
- } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
- typedef enum _MONITOR_DISPLAY_STATE {
- PowerMonitorOff = 0,
- PowerMonitorOn,
- PowerMonitorDim
- } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
- typedef union _POWER_STATE {
- SYSTEM_POWER_STATE SystemState;
- DEVICE_POWER_STATE DeviceState;
- } POWER_STATE, *PPOWER_STATE;
- typedef enum _POWER_STATE_TYPE {
- SystemPowerState = 0,
- DevicePowerState
- } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef struct _SYSTEM_POWER_STATE_CONTEXT {
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- ULONG Reserved1:8;
- ULONG TargetSystemState:4;
- ULONG EffectiveSystemState:4;
- ULONG CurrentSystemState:4;
- ULONG IgnoreHibernationPath:1;
- ULONG PseudoTransition:1;
- ULONG Reserved2:10;
- } DUMMYSTRUCTNAME;
- ULONG ContextAsUlong;
- } DUMMYUNIONNAME;
- } SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
- #endif
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef struct _COUNTED_REASON_CONTEXT {
- ULONG Version;
- ULONG Flags;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- UNICODE_STRING ResourceFileName;
- USHORT ResourceReasonId;
- ULONG StringCount;
- PUNICODE_STRING ReasonStrings;
- } DUMMYSTRUCTNAME;
- UNICODE_STRING SimpleString;
- } DUMMYUNIONNAME;
- } COUNTED_REASON_CONTEXT, *PCOUNTED_REASON_CONTEXT;
- #endif
- #define IOCTL_QUERY_DEVICE_POWER_STATE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS)
- #define IOCTL_SET_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
- #define IOCTL_CANCEL_DEVICE_WAKE \
- CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
- #define ES_SYSTEM_REQUIRED 0x00000001
- #define ES_DISPLAY_REQUIRED 0x00000002
- #define ES_USER_PRESENT 0x00000004
- #define ES_CONTINUOUS 0x80000000
- typedef ULONG EXECUTION_STATE, *PEXECUTION_STATE;
- typedef enum {
- LT_DONT_CARE,
- LT_LOWEST_LATENCY
- } LATENCY_TIME;
- #if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
- #define DIAGNOSTIC_REASON_VERSION 0
- #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
- #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
- #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
- #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
- #endif
- #define POWER_REQUEST_CONTEXT_VERSION 0
- #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
- #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
- #define PowerRequestMaximum 3
- typedef enum _POWER_REQUEST_TYPE {
- PowerRequestDisplayRequired,
- PowerRequestSystemRequired,
- PowerRequestAwayModeRequired,
- PowerRequestExecutionRequired
- } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- #define PDCAP_D0_SUPPORTED 0x00000001
- #define PDCAP_D1_SUPPORTED 0x00000002
- #define PDCAP_D2_SUPPORTED 0x00000004
- #define PDCAP_D3_SUPPORTED 0x00000008
- #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
- #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
- #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
- #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
- #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
- typedef struct CM_Power_Data_s {
- ULONG PD_Size;
- DEVICE_POWER_STATE PD_MostRecentPowerState;
- ULONG PD_Capabilities;
- ULONG PD_D1Latency;
- ULONG PD_D2Latency;
- ULONG PD_D3Latency;
- DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
- SYSTEM_POWER_STATE PD_DeepestSystemWake;
- } CM_POWER_DATA, *PCM_POWER_DATA;
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- typedef enum _SYSTEM_POWER_CONDITION {
- PoAc,
- PoDc,
- PoHot,
- PoConditionMaximum
- } SYSTEM_POWER_CONDITION;
- typedef struct _SET_POWER_SETTING_VALUE {
- ULONG Version;
- GUID Guid;
- SYSTEM_POWER_CONDITION PowerCondition;
- ULONG DataLength;
- UCHAR Data[ANYSIZE_ARRAY];
- } SET_POWER_SETTING_VALUE, *PSET_POWER_SETTING_VALUE;
- #define POWER_SETTING_VALUE_VERSION (0x1)
- typedef struct _NOTIFY_USER_POWER_SETTING {
- GUID Guid;
- } NOTIFY_USER_POWER_SETTING, *PNOTIFY_USER_POWER_SETTING;
- typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
- LARGE_INTEGER ActivationTime;
- ULONG Flags;
- ULONG ButtonInstanceID;
- } APPLICATIONLAUNCH_SETTING_VALUE, *PAPPLICATIONLAUNCH_SETTING_VALUE;
- typedef enum _POWER_PLATFORM_ROLE {
- PlatformRoleUnspecified = 0,
- PlatformRoleDesktop,
- PlatformRoleMobile,
- PlatformRoleWorkstation,
- PlatformRoleEnterpriseServer,
- PlatformRoleSOHOServer,
- PlatformRoleAppliancePC,
- PlatformRolePerformanceServer,
- PlatformRoleSlate,
- PlatformRoleMaximum
- } POWER_PLATFORM_ROLE;
- #if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
- typedef struct {
- ULONG Granularity;
- ULONG Capacity;
- } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_) */
- #endif /* !_PO_DDK_ */
- #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
- #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
- #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
- #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_ROCKET
- DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A);
- DEFINE_GUID(GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C);
- DEFINE_GUID(GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E);
- DEFINE_GUID(NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94);
- DEFINE_GUID(ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0);
- DEFINE_GUID(GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7);
- DEFINE_GUID(GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63);
- DEFINE_GUID(GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99);
- DEFINE_GUID(GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E);
- DEFINE_GUID(GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64);
- DEFINE_GUID(GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B);
- DEFINE_GUID(GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA);
- DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
- DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
- DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
- DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
- DEFINE_GUID(GUID_SESSION_DISPLAY_STATE, 0x73A5E93A, 0x5BB1, 0x4F93, 0x89, 0x5B, 0xDB, 0xD0, 0xDA, 0x85, 0x59, 0x67);
- DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
- DEFINE_GUID(GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23);
- DEFINE_GUID(GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42);
- DEFINE_GUID(GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E);
- DEFINE_GUID(GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
- DEFINE_GUID(GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67);
- DEFINE_GUID(GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20);
- DEFINE_GUID(GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
- DEFINE_GUID(GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA);
- DEFINE_GUID(GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
- DEFINE_GUID(GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64);
- DEFINE_GUID(GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E);
- DEFINE_GUID(GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
- DEFINE_GUID(GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0);
- DEFINE_GUID(GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
- DEFINE_GUID(GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
- DEFINE_GUID(GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D);
- DEFINE_GUID(GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2);
- DEFINE_GUID(GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47);
- DEFINE_GUID(GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80);
- DEFINE_GUID(GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78);
- DEFINE_GUID(GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB);
- DEFINE_GUID(GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93);
- DEFINE_GUID(GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5);
- DEFINE_GUID(GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36);
- DEFINE_GUID(GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B);
- DEFINE_GUID(GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4);
- DEFINE_GUID(GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65);
- DEFINE_GUID(GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
- DEFINE_GUID(GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC);
- DEFINE_GUID(GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C);
- DEFINE_GUID(GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
- DEFINE_GUID(GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
- DEFINE_GUID(GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
- DEFINE_GUID(GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
- DEFINE_GUID(GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
- DEFINE_GUID(GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
- DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
- DEFINE_GUID(GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
- DEFINE_GUID(GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
- DEFINE_GUID(GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
- DEFINE_GUID(GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
- DEFINE_GUID(GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
- DEFINE_GUID(GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
- DEFINE_GUID(GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51);
- DEFINE_GUID(GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
- DEFINE_GUID(GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48);
- DEFINE_GUID(GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3);
- DEFINE_GUID(GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1);
- DEFINE_GUID(GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1);
- DEFINE_GUID(GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E);
- DEFINE_GUID(GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA);
- DEFINE_GUID(GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
- DEFINE_GUID(GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
- DEFINE_GUID(GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
- #define PERFSTATE_POLICY_CHANGE_IDEAL 0
- #define PERFSTATE_POLICY_CHANGE_SINGLE 1
- #define PERFSTATE_POLICY_CHANGE_ROCKET 2
- #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
- #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
- #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
- #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
- #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
- typedef VOID
- (NTAPI REQUEST_POWER_COMPLETE)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN UCHAR MinorFunction,
- IN POWER_STATE PowerState,
- IN PVOID Context,
- IN struct _IO_STATUS_BLOCK *IoStatus);
- typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE;
- typedef
- NTSTATUS
- (NTAPI POWER_SETTING_CALLBACK)(
- IN LPCGUID SettingGuid,
- IN PVOID Value,
- IN ULONG ValueLength,
- IN OUT PVOID Context OPTIONAL);
- typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
- DECLARE_HANDLE(POHANDLE);
- #define PO_FX_VERSION_V1 1
- #define PO_FX_VERSION_V2 2
- #define PO_FX_VERSION PO_FX_VERSION_V2
- typedef void (NTAPI PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK)(void *context, ULONG component);
- typedef PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK *PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK;
- typedef void (NTAPI PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK)(void *context, ULONG component);
- typedef PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK *PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK;
- typedef void (NTAPI PO_FX_COMPONENT_IDLE_STATE_CALLBACK)(void *context, ULONG component, ULONG state);
- typedef PO_FX_COMPONENT_IDLE_STATE_CALLBACK *PPO_FX_COMPONENT_IDLE_STATE_CALLBACK;
- typedef NTSTATUS (NTAPI PO_FX_POWER_CONTROL_CALLBACK)(void *context, const GUID *code, void *in, SIZE_T in_size, void *out, SIZE_T out_size, SIZE_T *ret_size);
- typedef PO_FX_POWER_CONTROL_CALLBACK *PPO_FX_POWER_CONTROL_CALLBACK;
- typedef struct _PO_FX_COMPONENT_IDLE_STATE
- {
- ULONGLONG TransitionLatency;
- ULONGLONG ResidencyRequirement;
- ULONG NominalPower;
- } PO_FX_COMPONENT_IDLE_STATE, *PPO_FX_COMPONENT_IDLE_STATE;
- typedef struct _PO_FX_COMPONENT_V1
- {
- GUID Id;
- ULONG IdleStateCount;
- ULONG DeepestWakeableIdleState;
- PO_FX_COMPONENT_IDLE_STATE *IdleStates;
- } PO_FX_COMPONENT_V1, *PPO_FX_COMPONENT_V1;
- typedef struct _PO_FX_COMPONENT_V2
- {
- GUID Id;
- ULONGLONG Flags;
- ULONG DeepestWakeableIdleState;
- ULONG IdleStateCount;
- PO_FX_COMPONENT_IDLE_STATE *IdleStates;
- ULONG ProviderCount;
- ULONG *Providers;
- } PO_FX_COMPONENT_V2, *PPO_FX_COMPONENT_V2;
- #if PO_FX_VERSION == PO_FX_VERSION_V1
- typedef PO_FX_COMPONENT_V1 PO_FX_COMPONENT, *PPO_FX_COMPONENT;
- #else
- typedef PO_FX_COMPONENT_V2 PO_FX_COMPONENT, *PPO_FX_COMPONENT;
- #endif
- /******************************************************************************
- * Configuration Manager Types *
- ******************************************************************************/
- /* Resource list definitions */
- typedef int CM_RESOURCE_TYPE;
- #define CmResourceTypeNull 0
- #define CmResourceTypePort 1
- #define CmResourceTypeInterrupt 2
- #define CmResourceTypeMemory 3
- #define CmResourceTypeDma 4
- #define CmResourceTypeDeviceSpecific 5
- #define CmResourceTypeBusNumber 6
- #define CmResourceTypeNonArbitrated 128
- #define CmResourceTypeConfigData 128
- #define CmResourceTypeDevicePrivate 129
- #define CmResourceTypePcCardConfig 130
- #define CmResourceTypeMfCardConfig 131
- /* KEY_VALUE_Xxx.Type */
- #define REG_NONE 0
- #define REG_SZ 1
- #define REG_EXPAND_SZ 2
- #define REG_BINARY 3
- #define REG_DWORD 4
- #define REG_DWORD_LITTLE_ENDIAN 4
- #define REG_DWORD_BIG_ENDIAN 5
- #define REG_LINK 6
- #define REG_MULTI_SZ 7
- #define REG_RESOURCE_LIST 8
- #define REG_FULL_RESOURCE_DESCRIPTOR 9
- #define REG_RESOURCE_REQUIREMENTS_LIST 10
- #define REG_QWORD 11
- #define REG_QWORD_LITTLE_ENDIAN 11
- /* Registry Access Rights */
- #define KEY_QUERY_VALUE (0x0001)
- #define KEY_SET_VALUE (0x0002)
- #define KEY_CREATE_SUB_KEY (0x0004)
- #define KEY_ENUMERATE_SUB_KEYS (0x0008)
- #define KEY_NOTIFY (0x0010)
- #define KEY_CREATE_LINK (0x0020)
- #define KEY_WOW64_32KEY (0x0200)
- #define KEY_WOW64_64KEY (0x0100)
- #define KEY_WOW64_RES (0x0300)
- #define KEY_READ ((STANDARD_RIGHTS_READ |\
- KEY_QUERY_VALUE |\
- KEY_ENUMERATE_SUB_KEYS |\
- KEY_NOTIFY) \
- & \
- (~SYNCHRONIZE))
- #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
- KEY_SET_VALUE |\
- KEY_CREATE_SUB_KEY) \
- & \
- (~SYNCHRONIZE))
- #define KEY_EXECUTE ((KEY_READ) \
- & \
- (~SYNCHRONIZE))
- #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
- KEY_QUERY_VALUE |\
- KEY_SET_VALUE |\
- KEY_CREATE_SUB_KEY |\
- KEY_ENUMERATE_SUB_KEYS |\
- KEY_NOTIFY |\
- KEY_CREATE_LINK) \
- & \
- (~SYNCHRONIZE))
- /* Registry Open/Create Options */
- #define REG_OPTION_RESERVED (0x00000000L)
- #define REG_OPTION_NON_VOLATILE (0x00000000L)
- #define REG_OPTION_VOLATILE (0x00000001L)
- #define REG_OPTION_CREATE_LINK (0x00000002L)
- #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
- #define REG_OPTION_OPEN_LINK (0x00000008L)
- #define REG_LEGAL_OPTION \
- (REG_OPTION_RESERVED |\
- REG_OPTION_NON_VOLATILE |\
- REG_OPTION_VOLATILE |\
- REG_OPTION_CREATE_LINK |\
- REG_OPTION_BACKUP_RESTORE |\
- REG_OPTION_OPEN_LINK)
- #define REG_OPEN_LEGAL_OPTION \
- (REG_OPTION_RESERVED |\
- REG_OPTION_BACKUP_RESTORE |\
- REG_OPTION_OPEN_LINK)
- #define REG_STANDARD_FORMAT 1
- #define REG_LATEST_FORMAT 2
- #define REG_NO_COMPRESSION 4
- /* Key creation/open disposition */
- #define REG_CREATED_NEW_KEY (0x00000001L)
- #define REG_OPENED_EXISTING_KEY (0x00000002L)
- /* Key restore & hive load flags */
- #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
- #define REG_REFRESH_HIVE (0x00000002L)
- #define REG_NO_LAZY_FLUSH (0x00000004L)
- #define REG_FORCE_RESTORE (0x00000008L)
- #define REG_APP_HIVE (0x00000010L)
- #define REG_PROCESS_PRIVATE (0x00000020L)
- #define REG_START_JOURNAL (0x00000040L)
- #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
- #define REG_HIVE_NO_RM (0x00000100L)
- #define REG_HIVE_SINGLE_LOG (0x00000200L)
- #define REG_BOOT_HIVE (0x00000400L)
- /* Unload Flags */
- #define REG_FORCE_UNLOAD 1
- /* Notify Filter Values */
- #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
- #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
- #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
- #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
- #define REG_LEGAL_CHANGE_FILTER \
- (REG_NOTIFY_CHANGE_NAME |\
- REG_NOTIFY_CHANGE_ATTRIBUTES |\
- REG_NOTIFY_CHANGE_LAST_SET |\
- REG_NOTIFY_CHANGE_SECURITY)
- #include <pshpack4.h>
- typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
- UCHAR Type;
- UCHAR ShareDisposition;
- USHORT Flags;
- union {
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Generic;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Port;
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Level;
- USHORT Group;
- #else
- ULONG Level;
- #endif
- ULONG Vector;
- KAFFINITY Affinity;
- } Interrupt;
- #if (NTDDI_VERSION >= NTDDI_LONGHORN)
- struct {
- _ANONYMOUS_UNION union {
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Group;
- #else
- USHORT Reserved;
- #endif
- USHORT MessageCount;
- ULONG Vector;
- KAFFINITY Affinity;
- } Raw;
- struct {
- #if defined(NT_PROCESSOR_GROUPS)
- USHORT Level;
- USHORT Group;
- #else
- ULONG Level;
- #endif
- ULONG Vector;
- KAFFINITY Affinity;
- } Translated;
- } DUMMYUNIONNAME;
- } MessageInterrupt;
- #endif
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length;
- } Memory;
- struct {
- ULONG Channel;
- ULONG Port;
- ULONG Reserved1;
- } Dma;
- struct {
- ULONG Data[3];
- } DevicePrivate;
- struct {
- ULONG Start;
- ULONG Length;
- ULONG Reserved;
- } BusNumber;
- struct {
- ULONG DataSize;
- ULONG Reserved1;
- ULONG Reserved2;
- } DeviceSpecificData;
- #if (NTDDI_VERSION >= NTDDI_LONGHORN)
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length40;
- } Memory40;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length48;
- } Memory48;
- struct {
- PHYSICAL_ADDRESS Start;
- ULONG Length64;
- } Memory64;
- #endif
- } u;
- } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
- #include <poppack.h>
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
- #define CmResourceTypeNull 0
- #define CmResourceTypePort 1
- #define CmResourceTypeInterrupt 2
- #define CmResourceTypeMemory 3
- #define CmResourceTypeDma 4
- #define CmResourceTypeDeviceSpecific 5
- #define CmResourceTypeBusNumber 6
- #define CmResourceTypeMemoryLarge 7
- #define CmResourceTypeNonArbitrated 128
- #define CmResourceTypeConfigData 128
- #define CmResourceTypeDevicePrivate 129
- #define CmResourceTypePcCardConfig 130
- #define CmResourceTypeMfCardConfig 131
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
- typedef enum _CM_SHARE_DISPOSITION {
- CmResourceShareUndetermined = 0,
- CmResourceShareDeviceExclusive,
- CmResourceShareDriverExclusive,
- CmResourceShareShared
- } CM_SHARE_DISPOSITION;
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
- #define CM_RESOURCE_PORT_MEMORY 0x0000
- #define CM_RESOURCE_PORT_IO 0x0001
- #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
- #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
- #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
- #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
- #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
- #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
- #define CM_RESOURCE_PORT_BAR 0x0100
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
- #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
- #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
- #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
- #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
- #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
- #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
- #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
- #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
- #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
- #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
- #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
- #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
- #define CM_RESOURCE_MEMORY_24 0x0010
- #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
- #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
- #define CM_RESOURCE_MEMORY_BAR 0x0080
- #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
- #define CM_RESOURCE_MEMORY_LARGE 0x0E00
- #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
- #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
- #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
- #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
- #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
- #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
- /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
- #define CM_RESOURCE_DMA_8 0x0000
- #define CM_RESOURCE_DMA_16 0x0001
- #define CM_RESOURCE_DMA_32 0x0002
- #define CM_RESOURCE_DMA_8_AND_16 0x0004
- #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
- #define CM_RESOURCE_DMA_TYPE_A 0x0010
- #define CM_RESOURCE_DMA_TYPE_B 0x0020
- #define CM_RESOURCE_DMA_TYPE_F 0x0040
- typedef struct _DEVICE_FLAGS {
- ULONG Failed:1;
- ULONG ReadOnly:1;
- ULONG Removable:1;
- ULONG ConsoleIn:1;
- ULONG ConsoleOut:1;
- ULONG Input:1;
- ULONG Output:1;
- } DEVICE_FLAGS, *PDEVICE_FLAGS;
- typedef enum _INTERFACE_TYPE {
- InterfaceTypeUndefined = -1,
- Internal,
- Isa,
- Eisa,
- MicroChannel,
- TurboChannel,
- PCIBus,
- VMEBus,
- NuBus,
- PCMCIABus,
- CBus,
- MPIBus,
- MPSABus,
- ProcessorInternal,
- InternalPowerBus,
- PNPISABus,
- PNPBus,
- Vmcs,
- ACPIBus,
- MaximumInterfaceType
- } INTERFACE_TYPE, *PINTERFACE_TYPE;
- typedef struct _CM_COMPONENT_INFORMATION {
- DEVICE_FLAGS Flags;
- ULONG Version;
- ULONG Key;
- KAFFINITY AffinityMask;
- } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
- typedef struct _CM_ROM_BLOCK {
- ULONG Address;
- ULONG Size;
- } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
- typedef struct _CM_PARTIAL_RESOURCE_LIST {
- USHORT Version;
- USHORT Revision;
- ULONG Count;
- CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
- } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
- typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
- INTERFACE_TYPE InterfaceType;
- ULONG BusNumber;
- CM_PARTIAL_RESOURCE_LIST PartialResourceList;
- } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
- typedef struct _CM_RESOURCE_LIST {
- ULONG Count;
- CM_FULL_RESOURCE_DESCRIPTOR List[1];
- } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
- typedef struct _PNP_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
- } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
- #include <pshpack1.h>
- typedef struct _CM_INT13_DRIVE_PARAMETER {
- USHORT DriveSelect;
- ULONG MaxCylinders;
- USHORT SectorsPerTrack;
- USHORT MaxHeads;
- USHORT NumberDrives;
- } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
- typedef struct _CM_MCA_POS_DATA {
- USHORT AdapterId;
- UCHAR PosData1;
- UCHAR PosData2;
- UCHAR PosData3;
- UCHAR PosData4;
- } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
- typedef struct _CM_PNP_BIOS_DEVICE_NODE {
- USHORT Size;
- UCHAR Node;
- ULONG ProductId;
- UCHAR DeviceType[3];
- USHORT DeviceAttributes;
- } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
- typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
- UCHAR Signature[4];
- UCHAR Revision;
- UCHAR Length;
- USHORT ControlField;
- UCHAR Checksum;
- ULONG EventFlagAddress;
- USHORT RealModeEntryOffset;
- USHORT RealModeEntrySegment;
- USHORT ProtectedModeEntryOffset;
- ULONG ProtectedModeCodeBaseAddress;
- ULONG OemDeviceId;
- USHORT RealModeDataBaseAddress;
- ULONG ProtectedModeDataBaseAddress;
- } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
- #include <poppack.h>
- typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
- ULONG BytesPerSector;
- ULONG NumberOfCylinders;
- ULONG SectorsPerTrack;
- ULONG NumberOfHeads;
- } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
- typedef struct _CM_KEYBOARD_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- UCHAR Type;
- UCHAR Subtype;
- USHORT KeyboardFlags;
- } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
- typedef struct _CM_SCSI_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- UCHAR HostIdentifier;
- } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
- typedef struct _CM_VIDEO_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- ULONG VideoClock;
- } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
- typedef struct _CM_SONIC_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT DataConfigurationRegister;
- UCHAR EthernetAddress[8];
- } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
- typedef struct _CM_SERIAL_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- ULONG BaudClock;
- } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
- typedef struct _CM_MONITOR_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- USHORT HorizontalScreenSize;
- USHORT VerticalScreenSize;
- USHORT HorizontalResolution;
- USHORT VerticalResolution;
- USHORT HorizontalDisplayTimeLow;
- USHORT HorizontalDisplayTime;
- USHORT HorizontalDisplayTimeHigh;
- USHORT HorizontalBackPorchLow;
- USHORT HorizontalBackPorch;
- USHORT HorizontalBackPorchHigh;
- USHORT HorizontalFrontPorchLow;
- USHORT HorizontalFrontPorch;
- USHORT HorizontalFrontPorchHigh;
- USHORT HorizontalSyncLow;
- USHORT HorizontalSync;
- USHORT HorizontalSyncHigh;
- USHORT VerticalBackPorchLow;
- USHORT VerticalBackPorch;
- USHORT VerticalBackPorchHigh;
- USHORT VerticalFrontPorchLow;
- USHORT VerticalFrontPorch;
- USHORT VerticalFrontPorchHigh;
- USHORT VerticalSyncLow;
- USHORT VerticalSync;
- USHORT VerticalSyncHigh;
- } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
- typedef struct _CM_FLOPPY_DEVICE_DATA {
- USHORT Version;
- USHORT Revision;
- CHAR Size[8];
- ULONG MaxDensity;
- ULONG MountDensity;
- UCHAR StepRateHeadUnloadTime;
- UCHAR HeadLoadTime;
- UCHAR MotorOffTime;
- UCHAR SectorLengthCode;
- UCHAR SectorPerTrack;
- UCHAR ReadWriteGapLength;
- UCHAR DataTransferLength;
- UCHAR FormatGapLength;
- UCHAR FormatFillCharacter;
- UCHAR HeadSettleTime;
- UCHAR MotorSettleTime;
- UCHAR MaximumTrackValue;
- UCHAR DataTransferRate;
- } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
- typedef enum _KEY_INFORMATION_CLASS {
- KeyBasicInformation,
- KeyNodeInformation,
- KeyFullInformation,
- KeyNameInformation,
- KeyCachedInformation,
- KeyFlagsInformation,
- KeyVirtualizationInformation,
- KeyHandleTagsInformation,
- KeyTrustInformation,
- KeyLayerInformation,
- MaxKeyInfoClass
- } KEY_INFORMATION_CLASS;
- typedef struct _KEY_BASIC_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
- typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
- ULONG ControlFlags;
- } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
- typedef struct _KEY_FULL_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG SubKeys;
- ULONG MaxNameLen;
- ULONG MaxClassLen;
- ULONG Values;
- ULONG MaxValueNameLen;
- ULONG MaxValueDataLen;
- WCHAR Class[1];
- } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
- typedef struct _KEY_HANDLE_TAGS_INFORMATION {
- ULONG HandleTags;
- } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
- typedef struct _KEY_NODE_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- ULONG TitleIndex;
- ULONG ClassOffset;
- ULONG ClassLength;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
- typedef enum _KEY_SET_INFORMATION_CLASS {
- KeyWriteTimeInformation,
- KeyWow64FlagsInformation,
- KeyControlFlagsInformation,
- KeySetVirtualizationInformation,
- KeySetDebugInformation,
- KeySetHandleTagsInformation,
- KeySetLayerInformation,
- MaxKeySetInfoClass
- } KEY_SET_INFORMATION_CLASS;
- typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
- ULONG VirtualTarget:1;
- ULONG VirtualStore:1;
- ULONG VirtualSource:1;
- ULONG Reserved:29;
- } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
- typedef struct _KEY_VALUE_BASIC_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
- typedef struct _KEY_VALUE_FULL_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataOffset;
- ULONG DataLength;
- ULONG NameLength;
- WCHAR Name[1];
- } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
- typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
- ULONG TitleIndex;
- ULONG Type;
- ULONG DataLength;
- UCHAR Data[1];
- } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
- typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
- ULONG Type;
- ULONG DataLength;
- UCHAR Data[1];
- } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
- typedef struct _KEY_VALUE_ENTRY {
- PUNICODE_STRING ValueName;
- ULONG DataLength;
- ULONG DataOffset;
- ULONG Type;
- } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
- typedef enum _KEY_VALUE_INFORMATION_CLASS {
- KeyValueBasicInformation,
- KeyValueFullInformation,
- KeyValuePartialInformation,
- KeyValueFullInformationAlign64,
- KeyValuePartialInformationAlign64,
- KeyValueLayerInformation,
- MaxKeyValueInfoClass
- } KEY_VALUE_INFORMATION_CLASS;
- typedef struct _KEY_WOW64_FLAGS_INFORMATION {
- ULONG UserFlags;
- } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
- typedef struct _KEY_WRITE_TIME_INFORMATION {
- LARGE_INTEGER LastWriteTime;
- } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
- typedef enum _REG_NOTIFY_CLASS {
- RegNtDeleteKey,
- RegNtPreDeleteKey = RegNtDeleteKey,
- RegNtSetValueKey,
- RegNtPreSetValueKey = RegNtSetValueKey,
- RegNtDeleteValueKey,
- RegNtPreDeleteValueKey = RegNtDeleteValueKey,
- RegNtSetInformationKey,
- RegNtPreSetInformationKey = RegNtSetInformationKey,
- RegNtRenameKey,
- RegNtPreRenameKey = RegNtRenameKey,
- RegNtEnumerateKey,
- RegNtPreEnumerateKey = RegNtEnumerateKey,
- RegNtEnumerateValueKey,
- RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
- RegNtQueryKey,
- RegNtPreQueryKey = RegNtQueryKey,
- RegNtQueryValueKey,
- RegNtPreQueryValueKey = RegNtQueryValueKey,
- RegNtQueryMultipleValueKey,
- RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
- RegNtPreCreateKey,
- RegNtPostCreateKey,
- RegNtPreOpenKey,
- RegNtPostOpenKey,
- RegNtKeyHandleClose,
- RegNtPreKeyHandleClose = RegNtKeyHandleClose,
- RegNtPostDeleteKey,
- RegNtPostSetValueKey,
- RegNtPostDeleteValueKey,
- RegNtPostSetInformationKey,
- RegNtPostRenameKey,
- RegNtPostEnumerateKey,
- RegNtPostEnumerateValueKey,
- RegNtPostQueryKey,
- RegNtPostQueryValueKey,
- RegNtPostQueryMultipleValueKey,
- RegNtPostKeyHandleClose,
- RegNtPreCreateKeyEx,
- RegNtPostCreateKeyEx,
- RegNtPreOpenKeyEx,
- RegNtPostOpenKeyEx,
- RegNtPreFlushKey,
- RegNtPostFlushKey,
- RegNtPreLoadKey,
- RegNtPostLoadKey,
- RegNtPreUnLoadKey,
- RegNtPostUnLoadKey,
- RegNtPreQueryKeySecurity,
- RegNtPostQueryKeySecurity,
- RegNtPreSetKeySecurity,
- RegNtPostSetKeySecurity,
- RegNtCallbackObjectContextCleanup,
- RegNtPreRestoreKey,
- RegNtPostRestoreKey,
- RegNtPreSaveKey,
- RegNtPostSaveKey,
- RegNtPreReplaceKey,
- RegNtPostReplaceKey,
- RegNtPreQueryKeyName,
- RegNtPostQueryKeyName,
- MaxRegNtNotifyClass
- } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
- typedef NTSTATUS
- (NTAPI EX_CALLBACK_FUNCTION)(
- IN PVOID CallbackContext,
- IN PVOID Argument1,
- IN PVOID Argument2);
- typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
- typedef struct _REG_DELETE_KEY_INFORMATION {
- PVOID Object;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
- #endif
- ;
- typedef struct _REG_SET_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- ULONG TitleIndex;
- ULONG Type;
- PVOID Data;
- ULONG DataSize;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
- typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
- typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
- PVOID Object;
- KEY_SET_INFORMATION_CLASS KeySetInformationClass;
- PVOID KeySetInformation;
- ULONG KeySetInformationLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
- typedef struct _REG_ENUMERATE_KEY_INFORMATION {
- PVOID Object;
- ULONG Index;
- KEY_INFORMATION_CLASS KeyInformationClass;
- PVOID KeyInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
- typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
- PVOID Object;
- ULONG Index;
- KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
- PVOID KeyValueInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
- typedef struct _REG_QUERY_KEY_INFORMATION {
- PVOID Object;
- KEY_INFORMATION_CLASS KeyInformationClass;
- PVOID KeyInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
- typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING ValueName;
- KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
- PVOID KeyValueInformation;
- ULONG Length;
- PULONG ResultLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
- typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
- PVOID Object;
- PKEY_VALUE_ENTRY ValueEntries;
- ULONG EntryCount;
- PVOID ValueBuffer;
- PULONG BufferLength;
- PULONG RequiredBufferLength;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
- typedef struct _REG_RENAME_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING NewName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
- typedef struct _REG_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG CreateOptions;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- PVOID Reserved;
- } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
- typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
- PUNICODE_STRING CompleteName;
- PVOID RootObject;
- PVOID ObjectType;
- ULONG Options;
- PUNICODE_STRING Class;
- PVOID SecurityDescriptor;
- PVOID SecurityQualityOfService;
- ACCESS_MASK DesiredAccess;
- ACCESS_MASK GrantedAccess;
- PULONG Disposition;
- PVOID *ResultObject;
- PVOID CallContext;
- PVOID RootObjectContext;
- PVOID Transaction;
- ULONG_PTR Version;
- PUNICODE_STRING RemainingName;
- ULONG Wow64Flags;
- ULONG Attributes;
- KPROCESSOR_MODE CheckAccessMode;
- } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
- typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;
- typedef struct _REG_POST_CREATE_KEY_INFORMATION {
- PUNICODE_STRING CompleteName;
- PVOID Object;
- NTSTATUS Status;
- } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
- typedef struct _REG_POST_OPERATION_INFORMATION {
- PVOID Object;
- NTSTATUS Status;
- PVOID PreInformation;
- NTSTATUS ReturnStatus;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
- typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
- PVOID Object;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef struct _REG_LOAD_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING KeyName;
- PUNICODE_STRING SourceFile;
- ULONG Flags;
- PVOID TrustClassObject;
- PVOID UserEvent;
- ACCESS_MASK DesiredAccess;
- PHANDLE RootHandle;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
- typedef struct _REG_UNLOAD_KEY_INFORMATION {
- PVOID Object;
- PVOID UserEvent;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
- typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
- PVOID Object;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
- typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PULONG Length;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
- typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
- PVOID Object;
- PSECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
- typedef struct _REG_RESTORE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Flags;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
- typedef struct _REG_SAVE_KEY_INFORMATION {
- PVOID Object;
- HANDLE FileHandle;
- ULONG Format;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
- typedef struct _REG_REPLACE_KEY_INFORMATION {
- PVOID Object;
- PUNICODE_STRING OldFileName;
- PUNICODE_STRING NewFileName;
- PVOID CallContext;
- PVOID ObjectContext;
- PVOID Reserved;
- } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
- #endif /* NTDDI_VERSION >= NTDDI_VISTA */
- #define SERVICE_KERNEL_DRIVER 0x00000001
- #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
- #define SERVICE_ADAPTER 0x00000004
- #define SERVICE_RECOGNIZER_DRIVER 0x00000008
- #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
- SERVICE_FILE_SYSTEM_DRIVER | \
- SERVICE_RECOGNIZER_DRIVER)
- #define SERVICE_WIN32_OWN_PROCESS 0x00000010
- #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
- #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
- SERVICE_WIN32_SHARE_PROCESS)
- #define SERVICE_INTERACTIVE_PROCESS 0x00000100
- #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
- SERVICE_ADAPTER | \
- SERVICE_DRIVER | \
- SERVICE_INTERACTIVE_PROCESS)
- /* Service Start Types */
- #define SERVICE_BOOT_START 0x00000000
- #define SERVICE_SYSTEM_START 0x00000001
- #define SERVICE_AUTO_START 0x00000002
- #define SERVICE_DEMAND_START 0x00000003
- #define SERVICE_DISABLED 0x00000004
- #define SERVICE_ERROR_IGNORE 0x00000000
- #define SERVICE_ERROR_NORMAL 0x00000001
- #define SERVICE_ERROR_SEVERE 0x00000002
- #define SERVICE_ERROR_CRITICAL 0x00000003
- typedef enum _CM_SERVICE_NODE_TYPE {
- DriverType = SERVICE_KERNEL_DRIVER,
- FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
- Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
- Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
- AdapterType = SERVICE_ADAPTER,
- RecognizerType = SERVICE_RECOGNIZER_DRIVER
- } SERVICE_NODE_TYPE;
- typedef enum _CM_SERVICE_LOAD_TYPE {
- BootLoad = SERVICE_BOOT_START,
- SystemLoad = SERVICE_SYSTEM_START,
- AutoLoad = SERVICE_AUTO_START,
- DemandLoad = SERVICE_DEMAND_START,
- DisableLoad = SERVICE_DISABLED
- } SERVICE_LOAD_TYPE;
- typedef enum _CM_ERROR_CONTROL_TYPE {
- IgnoreError = SERVICE_ERROR_IGNORE,
- NormalError = SERVICE_ERROR_NORMAL,
- SevereError = SERVICE_ERROR_SEVERE,
- CriticalError = SERVICE_ERROR_CRITICAL
- } SERVICE_ERROR_TYPE;
- #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
- #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
- #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
- #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
- CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
- CM_SERVICE_USB_DISK_BOOT_LOAD)
- /******************************************************************************
- * I/O Manager Types *
- ******************************************************************************/
- #define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
- #define CONNECT_FULLY_SPECIFIED 0x1
- #define CONNECT_LINE_BASED 0x2
- #define CONNECT_MESSAGE_BASED 0x3
- #define CONNECT_FULLY_SPECIFIED_GROUP 0x4
- #define CONNECT_CURRENT_VERSION 0x4
- #define POOL_COLD_ALLOCATION 256
- #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
- #define POOL_RAISE_IF_ALLOCATION_FAILURE 16
- #define IO_TYPE_ADAPTER 1
- #define IO_TYPE_CONTROLLER 2
- #define IO_TYPE_DEVICE 3
- #define IO_TYPE_DRIVER 4
- #define IO_TYPE_FILE 5
- #define IO_TYPE_IRP 6
- #define IO_TYPE_MASTER_ADAPTER 7
- #define IO_TYPE_OPEN_PACKET 8
- #define IO_TYPE_TIMER 9
- #define IO_TYPE_VPB 10
- #define IO_TYPE_ERROR_LOG 11
- #define IO_TYPE_ERROR_MESSAGE 12
- #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13
- #define IO_TYPE_CSQ_IRP_CONTEXT 1
- #define IO_TYPE_CSQ 2
- #define IO_TYPE_CSQ_EX 3
- /* IO_RESOURCE_DESCRIPTOR.Option */
- #define IO_RESOURCE_PREFERRED 0x01
- #define IO_RESOURCE_DEFAULT 0x02
- #define IO_RESOURCE_ALTERNATIVE 0x08
- #define FILE_DEVICE_BEEP 0x00000001
- #define FILE_DEVICE_CD_ROM 0x00000002
- #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
- #define FILE_DEVICE_CONTROLLER 0x00000004
- #define FILE_DEVICE_DATALINK 0x00000005
- #define FILE_DEVICE_DFS 0x00000006
- #define FILE_DEVICE_DISK 0x00000007
- #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
- #define FILE_DEVICE_FILE_SYSTEM 0x00000009
- #define FILE_DEVICE_INPORT_PORT 0x0000000a
- #define FILE_DEVICE_KEYBOARD 0x0000000b
- #define FILE_DEVICE_MAILSLOT 0x0000000c
- #define FILE_DEVICE_MIDI_IN 0x0000000d
- #define FILE_DEVICE_MIDI_OUT 0x0000000e
- #define FILE_DEVICE_MOUSE 0x0000000f
- #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
- #define FILE_DEVICE_NAMED_PIPE 0x00000011
- #define FILE_DEVICE_NETWORK 0x00000012
- #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
- #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
- #define FILE_DEVICE_NULL 0x00000015
- #define FILE_DEVICE_PARALLEL_PORT 0x00000016
- #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
- #define FILE_DEVICE_PRINTER 0x00000018
- #define FILE_DEVICE_SCANNER 0x00000019
- #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
- #define FILE_DEVICE_SERIAL_PORT 0x0000001b
- #define FILE_DEVICE_SCREEN 0x0000001c
- #define FILE_DEVICE_SOUND 0x0000001d
- #define FILE_DEVICE_STREAMS 0x0000001e
- #define FILE_DEVICE_TAPE 0x0000001f
- #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
- #define FILE_DEVICE_TRANSPORT 0x00000021
- #define FILE_DEVICE_UNKNOWN 0x00000022
- #define FILE_DEVICE_VIDEO 0x00000023
- #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
- #define FILE_DEVICE_WAVE_IN 0x00000025
- #define FILE_DEVICE_WAVE_OUT 0x00000026
- #define FILE_DEVICE_8042_PORT 0x00000027
- #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
- #define FILE_DEVICE_BATTERY 0x00000029
- #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
- #define FILE_DEVICE_MODEM 0x0000002b
- #define FILE_DEVICE_VDM 0x0000002c
- #define FILE_DEVICE_MASS_STORAGE 0x0000002d
- #define FILE_DEVICE_SMB 0x0000002e
- #define FILE_DEVICE_KS 0x0000002f
- #define FILE_DEVICE_CHANGER 0x00000030
- #define FILE_DEVICE_SMARTCARD 0x00000031
- #define FILE_DEVICE_ACPI 0x00000032
- #define FILE_DEVICE_DVD 0x00000033
- #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
- #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
- #define FILE_DEVICE_DFS_VOLUME 0x00000036
- #define FILE_DEVICE_SERENUM 0x00000037
- #define FILE_DEVICE_TERMSRV 0x00000038
- #define FILE_DEVICE_KSEC 0x00000039
- #define FILE_DEVICE_FIPS 0x0000003A
- #define FILE_DEVICE_INFINIBAND 0x0000003B
- #define FILE_DEVICE_VMBUS 0x0000003E
- #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
- #define FILE_DEVICE_WPD 0x00000040
- #define FILE_DEVICE_BLUETOOTH 0x00000041
- #define FILE_DEVICE_MT_COMPOSITE 0x00000042
- #define FILE_DEVICE_MT_TRANSPORT 0x00000043
- #define FILE_DEVICE_BIOMETRIC 0x00000044
- #define FILE_DEVICE_PMI 0x00000045
- #if defined(NT_PROCESSOR_GROUPS)
- typedef USHORT IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
- typedef enum _IRQ_DEVICE_POLICY_USHORT {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors = 1,
- IrqPolicyOneCloseProcessor = 2,
- IrqPolicyAllProcessorsInMachine = 3,
- IrqPolicyAllProcessorsInGroup = 3,
- IrqPolicySpecifiedProcessors = 4,
- IrqPolicySpreadMessagesAcrossAllProcessors = 5,
- IrqPolicyAllProcessorsInMachineWhenSteered = 6,
- IrqPolicyAllProcessorsInGroupWhenSteered = 6
- };
- #else /* defined(NT_PROCESSOR_GROUPS) */
- typedef enum _IRQ_DEVICE_POLICY {
- IrqPolicyMachineDefault = 0,
- IrqPolicyAllCloseProcessors,
- IrqPolicyOneCloseProcessor,
- IrqPolicyAllProcessorsInMachine,
- IrqPolicySpecifiedProcessors,
- IrqPolicySpreadMessagesAcrossAllProcessors,
- IrqPolicyAllProcessorsInMachineWhenSteered
- } IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
- #endif
- typedef enum _IRQ_PRIORITY {
- IrqPriorityUndefined = 0,
- IrqPriorityLow,
- IrqPriorityNormal,
- IrqPriorityHigh
- } IRQ_PRIORITY, *PIRQ_PRIORITY;
- typedef enum _IRQ_GROUP_POLICY {
- GroupAffinityAllGroupZero = 0,
- GroupAffinityDontCare
- } IRQ_GROUP_POLICY, *PIRQ_GROUP_POLICY;
- #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
- typedef struct _OBJECT_HANDLE_INFORMATION {
- ULONG HandleAttributes;
- ACCESS_MASK GrantedAccess;
- } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
- typedef struct _CLIENT_ID {
- HANDLE UniqueProcess;
- HANDLE UniqueThread;
- } CLIENT_ID, *PCLIENT_ID;
- typedef struct _VPB {
- CSHORT Type;
- CSHORT Size;
- USHORT Flags;
- USHORT VolumeLabelLength;
- struct _DEVICE_OBJECT *DeviceObject;
- struct _DEVICE_OBJECT *RealDevice;
- ULONG SerialNumber;
- ULONG ReferenceCount;
- WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
- } VPB, *PVPB;
- typedef enum _IO_ALLOCATION_ACTION {
- KeepObject = 1,
- DeallocateObject,
- DeallocateObjectKeepRegisters
- } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
- typedef IO_ALLOCATION_ACTION
- (NTAPI DRIVER_CONTROL)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp,
- IN PVOID MapRegisterBase,
- IN PVOID Context);
- typedef DRIVER_CONTROL *PDRIVER_CONTROL;
- typedef struct _WAIT_CONTEXT_BLOCK {
- KDEVICE_QUEUE_ENTRY WaitQueueEntry;
- PDRIVER_CONTROL DeviceRoutine;
- PVOID DeviceContext;
- ULONG NumberOfMapRegisters;
- PVOID DeviceObject;
- PVOID CurrentIrp;
- PKDPC BufferChainingDpc;
- } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
- /* DEVICE_OBJECT.Flags */
- #define DO_VERIFY_VOLUME 0x00000002
- #define DO_BUFFERED_IO 0x00000004
- #define DO_EXCLUSIVE 0x00000008
- #define DO_DIRECT_IO 0x00000010
- #define DO_MAP_IO_BUFFER 0x00000020
- #define DO_DEVICE_INITIALIZING 0x00000080
- #define DO_SHUTDOWN_REGISTERED 0x00000800
- #define DO_BUS_ENUMERATED_DEVICE 0x00001000
- #define DO_POWER_PAGABLE 0x00002000
- #define DO_POWER_INRUSH 0x00004000
- /* DEVICE_OBJECT.Characteristics */
- #define FILE_REMOVABLE_MEDIA 0x00000001
- #define FILE_READ_ONLY_DEVICE 0x00000002
- #define FILE_FLOPPY_DISKETTE 0x00000004
- #define FILE_WRITE_ONCE_MEDIA 0x00000008
- #define FILE_REMOTE_DEVICE 0x00000010
- #define FILE_DEVICE_IS_MOUNTED 0x00000020
- #define FILE_VIRTUAL_VOLUME 0x00000040
- #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
- #define FILE_DEVICE_SECURE_OPEN 0x00000100
- #define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800
- #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
- #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
- /* DEVICE_OBJECT.AlignmentRequirement */
- #define FILE_BYTE_ALIGNMENT 0x00000000
- #define FILE_WORD_ALIGNMENT 0x00000001
- #define FILE_LONG_ALIGNMENT 0x00000003
- #define FILE_QUAD_ALIGNMENT 0x00000007
- #define FILE_OCTA_ALIGNMENT 0x0000000f
- #define FILE_32_BYTE_ALIGNMENT 0x0000001f
- #define FILE_64_BYTE_ALIGNMENT 0x0000003f
- #define FILE_128_BYTE_ALIGNMENT 0x0000007f
- #define FILE_256_BYTE_ALIGNMENT 0x000000ff
- #define FILE_512_BYTE_ALIGNMENT 0x000001ff
- /* DEVICE_OBJECT.DeviceType */
- #define DEVICE_TYPE ULONG
- typedef struct _DEVICE_OBJECT {
- CSHORT Type;
- USHORT Size;
- LONG ReferenceCount;
- struct _DRIVER_OBJECT *DriverObject;
- struct _DEVICE_OBJECT *NextDevice;
- struct _DEVICE_OBJECT *AttachedDevice;
- struct _IRP *CurrentIrp;
- PIO_TIMER Timer;
- ULONG Flags;
- ULONG Characteristics;
- volatile PVPB Vpb;
- PVOID DeviceExtension;
- DEVICE_TYPE DeviceType;
- CCHAR StackSize;
- union {
- LIST_ENTRY ListEntry;
- WAIT_CONTEXT_BLOCK Wcb;
- } Queue;
- ULONG AlignmentRequirement;
- KDEVICE_QUEUE DeviceQueue;
- KDPC Dpc;
- ULONG ActiveThreadCount;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- KEVENT DeviceLock;
- USHORT SectorSize;
- USHORT Spare1;
- struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
- PVOID Reserved;
- } DEVICE_OBJECT, *PDEVICE_OBJECT;
- typedef enum _IO_SESSION_STATE {
- IoSessionStateCreated = 1,
- IoSessionStateInitialized,
- IoSessionStateConnected,
- IoSessionStateDisconnected,
- IoSessionStateDisconnectedLoggedOn,
- IoSessionStateLoggedOn,
- IoSessionStateLoggedOff,
- IoSessionStateTerminated,
- IoSessionStateMax
- } IO_SESSION_STATE, *PIO_SESSION_STATE;
- typedef enum _IO_COMPLETION_ROUTINE_RESULT {
- ContinueCompletion = STATUS_CONTINUE_COMPLETION,
- StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
- } IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT;
- typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
- PHYSICAL_ADDRESS MessageAddress;
- KAFFINITY TargetProcessorSet;
- PKINTERRUPT InterruptObject;
- ULONG MessageData;
- ULONG Vector;
- KIRQL Irql;
- KINTERRUPT_MODE Mode;
- KINTERRUPT_POLARITY Polarity;
- } IO_INTERRUPT_MESSAGE_INFO_ENTRY, *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
- typedef struct _IO_INTERRUPT_MESSAGE_INFO {
- KIRQL UnifiedIrql;
- ULONG MessageCount;
- IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
- } IO_INTERRUPT_MESSAGE_INFO, *PIO_INTERRUPT_MESSAGE_INFO;
- typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- OUT PKINTERRUPT *InterruptObject;
- IN PKSERVICE_ROUTINE ServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql;
- IN BOOLEAN FloatingSave;
- IN BOOLEAN ShareVector;
- IN ULONG Vector;
- IN KIRQL Irql;
- IN KINTERRUPT_MODE InterruptMode;
- IN KAFFINITY ProcessorEnableMask;
- IN USHORT Group;
- } IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS, *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
- typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- OUT PKINTERRUPT *InterruptObject;
- IN PKSERVICE_ROUTINE ServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql OPTIONAL;
- IN BOOLEAN FloatingSave;
- } IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
- typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
- IN PDEVICE_OBJECT PhysicalDeviceObject;
- union {
- OUT PVOID *Generic;
- OUT PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
- OUT PKINTERRUPT *InterruptObject;
- } ConnectionContext;
- IN PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
- IN PVOID ServiceContext;
- IN PKSPIN_LOCK SpinLock OPTIONAL;
- IN KIRQL SynchronizeIrql OPTIONAL;
- IN BOOLEAN FloatingSave;
- IN PKSERVICE_ROUTINE FallBackServiceRoutine OPTIONAL;
- } IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS, *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
- typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
- IN OUT ULONG Version;
- _ANONYMOUS_UNION union {
- IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
- IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
- IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
- } DUMMYUNIONNAME;
- } IO_CONNECT_INTERRUPT_PARAMETERS, *PIO_CONNECT_INTERRUPT_PARAMETERS;
- typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
- IN ULONG Version;
- union {
- IN PVOID Generic;
- IN PKINTERRUPT InterruptObject;
- IN PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
- } ConnectionContext;
- } IO_DISCONNECT_INTERRUPT_PARAMETERS, *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
- typedef enum _IO_ACCESS_TYPE {
- ReadAccess,
- WriteAccess,
- ModifyAccess
- } IO_ACCESS_TYPE;
- typedef enum _IO_ACCESS_MODE {
- SequentialAccess,
- RandomAccess
- } IO_ACCESS_MODE;
- typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
- IoSessionStateNotification,
- IoMaxContainerNotificationClass
- } IO_CONTAINER_NOTIFICATION_CLASS;
- typedef struct _IO_SESSION_STATE_NOTIFICATION {
- ULONG Size;
- ULONG Flags;
- PVOID IoObject;
- ULONG EventMask;
- PVOID Context;
- } IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;
- typedef enum _IO_CONTAINER_INFORMATION_CLASS {
- IoSessionStateInformation,
- IoMaxContainerInformationClass
- } IO_CONTAINER_INFORMATION_CLASS;
- typedef struct _IO_SESSION_STATE_INFORMATION {
- ULONG SessionId;
- IO_SESSION_STATE SessionState;
- BOOLEAN LocalSession;
- } IO_SESSION_STATE_INFORMATION, *PIO_SESSION_STATE_INFORMATION;
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef NTSTATUS
- (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)(
- VOID);
- typedef NTSTATUS
- (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)(
- IN PVOID SessionObject,
- IN PVOID IoObject,
- IN ULONG Event,
- IN PVOID Context,
- IN PVOID NotificationPayload,
- IN ULONG PayloadLength);
- typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
- #endif
- typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
- typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
- BOOLEAN Removed;
- BOOLEAN Reserved[3];
- volatile LONG IoCount;
- KEVENT RemoveEvent;
- } IO_REMOVE_LOCK_COMMON_BLOCK;
- typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
- LONG Signature;
- LONG HighWatermark;
- LONGLONG MaxLockedTicks;
- LONG AllocateTag;
- LIST_ENTRY LockList;
- KSPIN_LOCK Spin;
- volatile LONG LowMemoryCount;
- ULONG Reserved1[4];
- PVOID Reserved2;
- PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
- } IO_REMOVE_LOCK_DBG_BLOCK;
- typedef struct _IO_REMOVE_LOCK {
- IO_REMOVE_LOCK_COMMON_BLOCK Common;
- #if DBG
- IO_REMOVE_LOCK_DBG_BLOCK Dbg;
- #endif
- } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
- typedef struct _IO_WORKITEM *PIO_WORKITEM;
- typedef VOID
- (NTAPI IO_WORKITEM_ROUTINE)(
- IN PDEVICE_OBJECT DeviceObject,
- IN PVOID Context);
- typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
- typedef VOID
- (NTAPI IO_WORKITEM_ROUTINE_EX)(
- IN PVOID IoObject,
- IN PVOID Context OPTIONAL,
- IN PIO_WORKITEM IoWorkItem);
- typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
- typedef struct _SHARE_ACCESS {
- ULONG OpenCount;
- ULONG Readers;
- ULONG Writers;
- ULONG Deleters;
- ULONG SharedRead;
- ULONG SharedWrite;
- ULONG SharedDelete;
- } SHARE_ACCESS, *PSHARE_ACCESS;
- /* While MS WDK uses inheritance in C++, we cannot do this with gcc, as
- inheritance, even from a struct renders the type non-POD. So we use
- this hack */
- #define PCI_COMMON_HEADER_LAYOUT \
- USHORT VendorID; \
- USHORT DeviceID; \
- USHORT Command; \
- USHORT Status; \
- UCHAR RevisionID; \
- UCHAR ProgIf; \
- UCHAR SubClass; \
- UCHAR BaseClass; \
- UCHAR CacheLineSize; \
- UCHAR LatencyTimer; \
- UCHAR HeaderType; \
- UCHAR BIST; \
- union { \
- struct /* _PCI_HEADER_TYPE_0 */ { \
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; \
- ULONG CIS; \
- USHORT SubVendorID; \
- USHORT SubSystemID; \
- ULONG ROMBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG Reserved2; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- UCHAR MinimumGrant; \
- UCHAR MaximumLatency; \
- } type0; \
- struct /* _PCI_HEADER_TYPE_1 */ { \
- ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- UCHAR IOBase; \
- UCHAR IOLimit; \
- USHORT SecondaryStatus; \
- USHORT MemoryBase; \
- USHORT MemoryLimit; \
- USHORT PrefetchBase; \
- USHORT PrefetchLimit; \
- ULONG PrefetchBaseUpper32; \
- ULONG PrefetchLimitUpper32; \
- USHORT IOBaseUpper16; \
- USHORT IOLimitUpper16; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved1[3]; \
- ULONG ROMBaseAddress; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type1; \
- struct /* _PCI_HEADER_TYPE_2 */ { \
- ULONG SocketRegistersBaseAddress; \
- UCHAR CapabilitiesPtr; \
- UCHAR Reserved; \
- USHORT SecondaryStatus; \
- UCHAR PrimaryBus; \
- UCHAR SecondaryBus; \
- UCHAR SubordinateBus; \
- UCHAR SecondaryLatency; \
- struct { \
- ULONG Base; \
- ULONG Limit; \
- } Range[PCI_TYPE2_ADDRESSES-1]; \
- UCHAR InterruptLine; \
- UCHAR InterruptPin; \
- USHORT BridgeControl; \
- } type2; \
- } u;
- typedef enum _CREATE_FILE_TYPE {
- CreateFileTypeNone,
- CreateFileTypeNamedPipe,
- CreateFileTypeMailslot
- } CREATE_FILE_TYPE;
- typedef struct _NAMED_PIPE_CREATE_PARAMETERS {
- ULONG NamedPipeType;
- ULONG ReadMode;
- ULONG CompletionMode;
- ULONG MaximumInstances;
- ULONG InboundQuota;
- ULONG OutboundQuota;
- LARGE_INTEGER DefaultTimeout;
- BOOLEAN TimeoutSpecified;
- } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
- typedef struct _MAILSLOT_CREATE_PARAMETERS {
- ULONG MailslotQuota;
- ULONG MaximumMessageSize;
- LARGE_INTEGER ReadTimeout;
- BOOLEAN TimeoutSpecified;
- } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
- #define IO_FORCE_ACCESS_CHECK 0x001
- #define IO_NO_PARAMETER_CHECKING 0x100
- #define IO_REPARSE 0x0
- #define IO_REMOUNT 0x1
- typedef struct _IO_STATUS_BLOCK {
- _ANONYMOUS_UNION union {
- NTSTATUS Status;
- PVOID Pointer;
- } DUMMYUNIONNAME;
- ULONG_PTR Information;
- } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
- #if defined(_WIN64)
- typedef struct _IO_STATUS_BLOCK32 {
- NTSTATUS Status;
- ULONG Information;
- } IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32;
- #endif
- typedef VOID
- (NTAPI *PIO_APC_ROUTINE)(
- IN PVOID ApcContext,
- IN PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG Reserved);
- #define PIO_APC_ROUTINE_DEFINED
- typedef enum _IO_SESSION_EVENT {
- IoSessionEventIgnore = 0,
- IoSessionEventCreated,
- IoSessionEventTerminated,
- IoSessionEventConnected,
- IoSessionEventDisconnected,
- IoSessionEventLogon,
- IoSessionEventLogoff,
- IoSessionEventMax
- } IO_SESSION_EVENT, *PIO_SESSION_EVENT;
- #define IO_SESSION_STATE_ALL_EVENTS 0xffffffff
- #define IO_SESSION_STATE_CREATION_EVENT 0x00000001
- #define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002
- #define IO_SESSION_STATE_CONNECT_EVENT 0x00000004
- #define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008
- #define IO_SESSION_STATE_LOGON_EVENT 0x00000010
- #define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020
- #define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003f
- #define IO_SESSION_MAX_PAYLOAD_SIZE 256L
- typedef struct _IO_SESSION_CONNECT_INFO {
- ULONG SessionId;
- BOOLEAN LocalSession;
- } IO_SESSION_CONNECT_INFO, *PIO_SESSION_CONNECT_INFO;
- #define EVENT_INCREMENT 1
- #define IO_NO_INCREMENT 0
- #define IO_CD_ROM_INCREMENT 1
- #define IO_DISK_INCREMENT 1
- #define IO_KEYBOARD_INCREMENT 6
- #define IO_MAILSLOT_INCREMENT 2
- #define IO_MOUSE_INCREMENT 6
- #define IO_NAMED_PIPE_INCREMENT 2
- #define IO_NETWORK_INCREMENT 2
- #define IO_PARALLEL_INCREMENT 1
- #define IO_SERIAL_INCREMENT 2
- #define IO_SOUND_INCREMENT 8
- #define IO_VIDEO_INCREMENT 1
- #define SEMAPHORE_INCREMENT 1
- #define MM_MAXIMUM_DISK_IO_SIZE (0x10000)
- typedef struct _BOOTDISK_INFORMATION {
- LONGLONG BootPartitionOffset;
- LONGLONG SystemPartitionOffset;
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
- typedef struct _BOOTDISK_INFORMATION_EX {
- LONGLONG BootPartitionOffset;
- LONGLONG SystemPartitionOffset;
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- GUID BootDeviceGuid;
- GUID SystemDeviceGuid;
- BOOLEAN BootDeviceIsGpt;
- BOOLEAN SystemDeviceIsGpt;
- } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef struct _LOADER_PARTITION_INFORMATION_EX {
- ULONG PartitionStyle;
- ULONG PartitionNumber;
- _ANONYMOUS_UNION union {
- ULONG Signature;
- GUID DeviceId;
- } DUMMYUNIONNAME;
- ULONG Flags;
- } LOADER_PARTITION_INFORMATION_EX, *PLOADER_PARTITION_INFORMATION_EX;
- typedef struct _BOOTDISK_INFORMATION_LITE {
- ULONG NumberEntries;
- LOADER_PARTITION_INFORMATION_EX Entries[1];
- } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
- #else
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef struct _BOOTDISK_INFORMATION_LITE {
- ULONG BootDeviceSignature;
- ULONG SystemDeviceSignature;
- GUID BootDeviceGuid;
- GUID SystemDeviceGuid;
- BOOLEAN BootDeviceIsGpt;
- BOOLEAN SystemDeviceIsGpt;
- } BOOTDISK_INFORMATION_LITE, *PBOOTDISK_INFORMATION_LITE;
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #include <pshpack1.h>
- typedef struct _EISA_MEMORY_TYPE {
- UCHAR ReadWrite:1;
- UCHAR Cached:1;
- UCHAR Reserved0:1;
- UCHAR Type:2;
- UCHAR Shared:1;
- UCHAR Reserved1:1;
- UCHAR MoreEntries:1;
- } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
- typedef struct _EISA_MEMORY_CONFIGURATION {
- EISA_MEMORY_TYPE ConfigurationByte;
- UCHAR DataSize;
- USHORT AddressLowWord;
- UCHAR AddressHighByte;
- USHORT MemorySize;
- } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
- typedef struct _EISA_IRQ_DESCRIPTOR {
- UCHAR Interrupt:4;
- UCHAR Reserved:1;
- UCHAR LevelTriggered:1;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
- typedef struct _EISA_IRQ_CONFIGURATION {
- EISA_IRQ_DESCRIPTOR ConfigurationByte;
- UCHAR Reserved;
- } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
- typedef struct _DMA_CONFIGURATION_BYTE0 {
- UCHAR Channel:3;
- UCHAR Reserved:3;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } DMA_CONFIGURATION_BYTE0;
- typedef struct _DMA_CONFIGURATION_BYTE1 {
- UCHAR Reserved0:2;
- UCHAR TransferSize:2;
- UCHAR Timing:2;
- UCHAR Reserved1:2;
- } DMA_CONFIGURATION_BYTE1;
- typedef struct _EISA_DMA_CONFIGURATION {
- DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
- DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
- } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
- typedef struct _EISA_PORT_DESCRIPTOR {
- UCHAR NumberPorts:5;
- UCHAR Reserved:1;
- UCHAR Shared:1;
- UCHAR MoreEntries:1;
- } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
- typedef struct _EISA_PORT_CONFIGURATION {
- EISA_PORT_DESCRIPTOR Configuration;
- USHORT PortAddress;
- } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
- typedef struct _CM_EISA_SLOT_INFORMATION {
- UCHAR ReturnCode;
- UCHAR ReturnFlags;
- UCHAR MajorRevision;
- UCHAR MinorRevision;
- USHORT Checksum;
- UCHAR NumberFunctions;
- UCHAR FunctionInformation;
- ULONG CompressedId;
- } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
- typedef struct _CM_EISA_FUNCTION_INFORMATION {
- ULONG CompressedId;
- UCHAR IdSlotFlags1;
- UCHAR IdSlotFlags2;
- UCHAR MinorRevision;
- UCHAR MajorRevision;
- UCHAR Selections[26];
- UCHAR FunctionFlags;
- UCHAR TypeString[80];
- EISA_MEMORY_CONFIGURATION EisaMemory[9];
- EISA_IRQ_CONFIGURATION EisaIrq[7];
- EISA_DMA_CONFIGURATION EisaDma[4];
- EISA_PORT_CONFIGURATION EisaPort[20];
- UCHAR InitializationData[60];
- } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
- #include <poppack.h>
- /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */
- #define EISA_FUNCTION_ENABLED 0x80
- #define EISA_FREE_FORM_DATA 0x40
- #define EISA_HAS_PORT_INIT_ENTRY 0x20
- #define EISA_HAS_PORT_RANGE 0x10
- #define EISA_HAS_DMA_ENTRY 0x08
- #define EISA_HAS_IRQ_ENTRY 0x04
- #define EISA_HAS_MEMORY_ENTRY 0x02
- #define EISA_HAS_TYPE_ENTRY 0x01
- #define EISA_HAS_INFORMATION \
- (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
- + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
- #define EISA_MORE_ENTRIES 0x80
- #define EISA_SYSTEM_MEMORY 0x00
- #define EISA_MEMORY_TYPE_RAM 0x01
- /* CM_EISA_SLOT_INFORMATION.ReturnCode */
- #define EISA_INVALID_SLOT 0x80
- #define EISA_INVALID_FUNCTION 0x81
- #define EISA_INVALID_CONFIGURATION 0x82
- #define EISA_EMPTY_SLOT 0x83
- #define EISA_INVALID_BIOS_CALL 0x86
- /*
- ** Plug and Play structures
- */
- typedef VOID
- (NTAPI *PINTERFACE_REFERENCE)(
- PVOID Context);
- typedef VOID
- (NTAPI *PINTERFACE_DEREFERENCE)(
- PVOID Context);
- typedef BOOLEAN
- (NTAPI TRANSLATE_BUS_ADDRESS)(
- IN PVOID Context,
- IN PHYSICAL_ADDRESS BusAddress,
- IN ULONG Length,
- IN OUT PULONG AddressSpace,
- OUT PPHYSICAL_ADDRESS TranslatedAddress);
- typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
- typedef struct _DMA_ADAPTER*
- (NTAPI GET_DMA_ADAPTER)(
- IN PVOID Context,
- IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
- OUT PULONG NumberOfMapRegisters);
- typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
- typedef ULONG
- (NTAPI GET_SET_DEVICE_DATA)(
- IN PVOID Context,
- IN ULONG DataType,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
- typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
- typedef enum _DEVICE_INSTALL_STATE {
- InstallStateInstalled,
- InstallStateNeedsReinstall,
- InstallStateFailedInstall,
- InstallStateFinishInstall
- } DEVICE_INSTALL_STATE, *PDEVICE_INSTALL_STATE;
- typedef struct _LEGACY_BUS_INFORMATION {
- GUID BusTypeGuid;
- INTERFACE_TYPE LegacyBusType;
- ULONG BusNumber;
- } LEGACY_BUS_INFORMATION, *PLEGACY_BUS_INFORMATION;
- typedef enum _DEVICE_REMOVAL_POLICY {
- RemovalPolicyExpectNoRemoval = 1,
- RemovalPolicyExpectOrderlyRemoval = 2,
- RemovalPolicyExpectSurpriseRemoval = 3
- } DEVICE_REMOVAL_POLICY, *PDEVICE_REMOVAL_POLICY;
- typedef VOID
- (NTAPI*PREENUMERATE_SELF)(
- IN PVOID Context);
- typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
- } REENUMERATE_SELF_INTERFACE_STANDARD, *PREENUMERATE_SELF_INTERFACE_STANDARD;
- typedef VOID
- (NTAPI *PIO_DEVICE_EJECT_CALLBACK)(
- IN NTSTATUS Status,
- IN OUT PVOID Context OPTIONAL);
- #define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
- /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */
- #define PCI_USE_SUBSYSTEM_IDS 0x00000001
- #define PCI_USE_REVISION 0x00000002
- #define PCI_USE_VENDEV_IDS 0x00000004
- #define PCI_USE_CLASS_SUBCLASS 0x00000008
- #define PCI_USE_PROGIF 0x00000010
- #define PCI_USE_LOCAL_BUS 0x00000020
- #define PCI_USE_LOCAL_DEVICE 0x00000040
- typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
- ULONG Size;
- ULONG Flags;
- USHORT VendorID;
- USHORT DeviceID;
- UCHAR RevisionID;
- USHORT SubVendorID;
- USHORT SubSystemID;
- UCHAR BaseClass;
- UCHAR SubClass;
- UCHAR ProgIf;
- } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS;
- typedef BOOLEAN
- (NTAPI PCI_IS_DEVICE_PRESENT)(
- IN USHORT VendorID,
- IN USHORT DeviceID,
- IN UCHAR RevisionID,
- IN USHORT SubVendorID,
- IN USHORT SubSystemID,
- IN ULONG Flags);
- typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
- typedef BOOLEAN
- (NTAPI PCI_IS_DEVICE_PRESENT_EX)(
- IN PVOID Context,
- IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters);
- typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
- typedef struct _BUS_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
- PGET_DMA_ADAPTER GetDmaAdapter;
- PGET_SET_DEVICE_DATA SetBusData;
- PGET_SET_DEVICE_DATA GetBusData;
- } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
- typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_IS_DEVICE_PRESENT IsDevicePresent;
- PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
- } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE;
- typedef struct _DEVICE_CAPABILITIES {
- USHORT Size;
- USHORT Version;
- ULONG DeviceD1:1;
- ULONG DeviceD2:1;
- ULONG LockSupported:1;
- ULONG EjectSupported:1;
- ULONG Removable:1;
- ULONG DockDevice:1;
- ULONG UniqueID:1;
- ULONG SilentInstall:1;
- ULONG RawDeviceOK:1;
- ULONG SurpriseRemovalOK:1;
- ULONG WakeFromD0:1;
- ULONG WakeFromD1:1;
- ULONG WakeFromD2:1;
- ULONG WakeFromD3:1;
- ULONG HardwareDisabled:1;
- ULONG NonDynamic:1;
- ULONG WarmEjectSupported:1;
- ULONG NoDisplayInUI:1;
- ULONG Reserved:14;
- ULONG Address;
- ULONG UINumber;
- DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
- SYSTEM_POWER_STATE SystemWake;
- DEVICE_POWER_STATE DeviceWake;
- ULONG D1Latency;
- ULONG D2Latency;
- ULONG D3Latency;
- } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
- typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- GUID InterfaceClassGuid;
- PUNICODE_STRING SymbolicLinkName;
- } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
- typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
- #undef INTERFACE
- typedef struct _INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- } INTERFACE, *PINTERFACE;
- typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
- USHORT Version;
- USHORT Size;
- GUID Event;
- } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
- typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
- /* PNP_DEVICE_STATE */
- #define PNP_DEVICE_DISABLED 0x00000001
- #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
- #define PNP_DEVICE_FAILED 0x00000004
- #define PNP_DEVICE_REMOVED 0x00000008
- #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
- #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
- typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- struct _FILE_OBJECT *FileObject;
- LONG NameBufferOffset;
- UCHAR CustomDataBuffer[1];
- } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
- typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
- USHORT Version;
- USHORT Size;
- GUID Event;
- struct _FILE_OBJECT *FileObject;
- } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #include <devpropdef.h>
- #define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001
- #endif
- #define PNP_REPLACE_NO_MAP MAXLONGLONG
- typedef NTSTATUS
- (NTAPI *PREPLACE_MAP_MEMORY)(
- IN PHYSICAL_ADDRESS TargetPhysicalAddress,
- IN PHYSICAL_ADDRESS SparePhysicalAddress,
- IN OUT PLARGE_INTEGER NumberOfBytes,
- OUT PVOID *TargetAddress,
- OUT PVOID *SpareAddress);
- typedef struct _PNP_REPLACE_MEMORY_LIST {
- ULONG AllocatedCount;
- ULONG Count;
- ULONGLONG TotalLength;
- struct {
- PHYSICAL_ADDRESS Address;
- ULONGLONG Length;
- } Ranges[ANYSIZE_ARRAY];
- } PNP_REPLACE_MEMORY_LIST, *PPNP_REPLACE_MEMORY_LIST;
- typedef struct _PNP_REPLACE_PROCESSOR_LIST {
- PKAFFINITY Affinity;
- ULONG GroupCount;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
- } PNP_REPLACE_PROCESSOR_LIST, *PPNP_REPLACE_PROCESSOR_LIST;
- typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
- KAFFINITY AffinityMask;
- ULONG AllocatedCount;
- ULONG Count;
- ULONG ApicIds[ANYSIZE_ARRAY];
- } PNP_REPLACE_PROCESSOR_LIST_V1, *PPNP_REPLACE_PROCESSOR_LIST_V1;
- #define PNP_REPLACE_PARAMETERS_VERSION 2
- typedef struct _PNP_REPLACE_PARAMETERS {
- ULONG Size;
- ULONG Version;
- ULONG64 Target;
- ULONG64 Spare;
- PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
- PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
- PPNP_REPLACE_MEMORY_LIST TargetMemory;
- PPNP_REPLACE_MEMORY_LIST SpareMemory;
- PREPLACE_MAP_MEMORY MapMemory;
- } PNP_REPLACE_PARAMETERS, *PPNP_REPLACE_PARAMETERS;
- typedef VOID
- (NTAPI *PREPLACE_UNLOAD)(
- VOID);
- typedef NTSTATUS
- (NTAPI *PREPLACE_BEGIN)(
- IN PPNP_REPLACE_PARAMETERS Parameters,
- OUT PVOID *Context);
- typedef NTSTATUS
- (NTAPI *PREPLACE_END)(
- IN PVOID Context);
- typedef NTSTATUS
- (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)(
- IN PVOID Context,
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN LARGE_INTEGER ByteCount);
- typedef NTSTATUS
- (NTAPI *PREPLACE_SET_PROCESSOR_ID)(
- IN PVOID Context,
- IN ULONG ApicId,
- IN BOOLEAN Target);
- typedef NTSTATUS
- (NTAPI *PREPLACE_SWAP)(
- IN PVOID Context);
- typedef NTSTATUS
- (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)(
- IN PVOID Context);
- typedef NTSTATUS
- (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)(
- IN PVOID Context);
- typedef NTSTATUS
- (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)(
- IN PVOID Context,
- IN PHYSICAL_ADDRESS SourceAddress,
- OUT PPHYSICAL_ADDRESS DestinationAddress);
- typedef NTSTATUS
- (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)(
- IN PVOID Context,
- IN BOOLEAN Enable);
- #define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1
- #define PNP_REPLACE_DRIVER_INTERFACE_MINIMUM_SIZE \
- FIELD_OFFSET(PNP_REPLACE_DRIVER_INTERFACE, InitiateHardwareMirror)
- #define PNP_REPLACE_MEMORY_SUPPORTED 0x0001
- #define PNP_REPLACE_PROCESSOR_SUPPORTED 0x0002
- #define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x0004
- #define PNP_REPLACE_HARDWARE_PAGE_COPY 0x0008
- #define PNP_REPLACE_HARDWARE_QUIESCE 0x0010
- typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
- ULONG Size;
- ULONG Version;
- ULONG Flags;
- PREPLACE_UNLOAD Unload;
- PREPLACE_BEGIN BeginReplace;
- PREPLACE_END EndReplace;
- PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
- PREPLACE_SET_PROCESSOR_ID SetProcessorId;
- PREPLACE_SWAP Swap;
- PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
- PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
- PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
- PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
- } PNP_REPLACE_DRIVER_INTERFACE, *PPNP_REPLACE_DRIVER_INTERFACE;
- typedef NTSTATUS
- (NTAPI *PREPLACE_DRIVER_INIT)(
- IN OUT PPNP_REPLACE_DRIVER_INTERFACE Interface,
- IN PVOID Unused);
- typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
- DeviceUsageTypeUndefined,
- DeviceUsageTypePaging,
- DeviceUsageTypeHibernation,
- DeviceUsageTypeDumpFile,
- DeviceUsageTypeBoot,
- DeviceUsageTypePostDisplay,
- DeviceUsageTypeGuestAssigned
- } DEVICE_USAGE_NOTIFICATION_TYPE;
- typedef struct _POWER_SEQUENCE {
- ULONG SequenceD1;
- ULONG SequenceD2;
- ULONG SequenceD3;
- } POWER_SEQUENCE, *PPOWER_SEQUENCE;
- typedef enum {
- DevicePropertyDeviceDescription = 0x0,
- DevicePropertyHardwareID = 0x1,
- DevicePropertyCompatibleIDs = 0x2,
- DevicePropertyBootConfiguration = 0x3,
- DevicePropertyBootConfigurationTranslated = 0x4,
- DevicePropertyClassName = 0x5,
- DevicePropertyClassGuid = 0x6,
- DevicePropertyDriverKeyName = 0x7,
- DevicePropertyManufacturer = 0x8,
- DevicePropertyFriendlyName = 0x9,
- DevicePropertyLocationInformation = 0xa,
- DevicePropertyPhysicalDeviceObjectName = 0xb,
- DevicePropertyBusTypeGuid = 0xc,
- DevicePropertyLegacyBusType = 0xd,
- DevicePropertyBusNumber = 0xe,
- DevicePropertyEnumeratorName = 0xf,
- DevicePropertyAddress = 0x10,
- DevicePropertyUINumber = 0x11,
- DevicePropertyInstallState = 0x12,
- DevicePropertyRemovalPolicy = 0x13,
- DevicePropertyResourceRequirements = 0x14,
- DevicePropertyAllocatedResources = 0x15,
- DevicePropertyContainerID = 0x16
- } DEVICE_REGISTRY_PROPERTY;
- typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
- EventCategoryReserved,
- EventCategoryHardwareProfileChange,
- EventCategoryDeviceInterfaceChange,
- EventCategoryTargetDeviceChange,
- EventCategoryKernelSoftRestart
- } IO_NOTIFICATION_EVENT_CATEGORY;
- typedef enum _IO_PRIORITY_HINT {
- IoPriorityVeryLow = 0,
- IoPriorityLow,
- IoPriorityNormal,
- IoPriorityHigh,
- IoPriorityCritical,
- MaxIoPriorityTypes
- } IO_PRIORITY_HINT;
- #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
- typedef NTSTATUS
- (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
- IN PVOID NotificationStructure,
- IN PVOID Context);
- typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
- typedef VOID
- (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)(
- IN PVOID Context);
- typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
- typedef enum _FILE_INFORMATION_CLASS {
- FileDirectoryInformation = 1,
- FileFullDirectoryInformation,
- FileBothDirectoryInformation,
- FileBasicInformation,
- FileStandardInformation,
- FileInternalInformation,
- FileEaInformation,
- FileAccessInformation,
- FileNameInformation,
- FileRenameInformation,
- FileLinkInformation,
- FileNamesInformation,
- FileDispositionInformation,
- FilePositionInformation,
- FileFullEaInformation,
- FileModeInformation,
- FileAlignmentInformation,
- FileAllInformation,
- FileAllocationInformation,
- FileEndOfFileInformation,
- FileAlternateNameInformation,
- FileStreamInformation,
- FilePipeInformation,
- FilePipeLocalInformation,
- FilePipeRemoteInformation,
- FileMailslotQueryInformation,
- FileMailslotSetInformation,
- FileCompressionInformation,
- FileObjectIdInformation,
- FileCompletionInformation,
- FileMoveClusterInformation,
- FileQuotaInformation,
- FileReparsePointInformation,
- FileNetworkOpenInformation,
- FileAttributeTagInformation,
- FileTrackingInformation,
- FileIdBothDirectoryInformation,
- FileIdFullDirectoryInformation,
- FileValidDataLengthInformation,
- FileShortNameInformation,
- FileIoCompletionNotificationInformation,
- FileIoStatusBlockRangeInformation,
- FileIoPriorityHintInformation,
- FileSfioReserveInformation,
- FileSfioVolumeInformation,
- FileHardLinkInformation,
- FileProcessIdsUsingFileInformation,
- FileNormalizedNameInformation,
- FileNetworkPhysicalNameInformation,
- FileIdGlobalTxDirectoryInformation,
- FileIsRemoteDeviceInformation,
- FileUnusedInformation,
- FileNumaNodeInformation,
- FileStandardLinkInformation,
- FileRemoteProtocolInformation,
- FileRenameInformationBypassAccessCheck,
- FileLinkInformationBypassAccessCheck,
- FileVolumeNameInformation,
- FileIdInformation,
- FileIdExtdDirectoryInformation,
- FileReplaceCompletionInformation,
- FileHardLinkFullIdInformation,
- FileIdExtdBothDirectoryInformation,
- FileDispositionInformationEx,
- FileRenameInformationEx,
- FileRenameInformationExBypassAccessCheck,
- FileDesiredStorageClassInformation,
- FileStatInformation,
- FileMemoryPartitionInformation,
- FileStatLxInformation,
- FileCaseSensitiveInformation,
- FileLinkInformationEx,
- FileLinkInformationExBypassAccessCheck,
- FileStorageReserveIdInformation,
- FileCaseSensitiveInformationForceAccessCheck,
- FileMaximumInformation
- } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
- typedef enum _DIRECTORY_NOTIFY_INFORMATION_CLASS {
- DirectoryNotifyInformation = 1,
- DirectoryNotifyExtendedInformation
- } DIRECTORY_NOTIFY_INFORMATION_CLASS, *PDIRECTORY_NOTIFY_INFORMATION_CLASS;
- typedef struct _FILE_POSITION_INFORMATION {
- LARGE_INTEGER CurrentByteOffset;
- } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
- typedef struct _FILE_BASIC_INFORMATION {
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- ULONG FileAttributes;
- } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
- typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
- IO_PRIORITY_HINT PriorityHint;
- } FILE_IO_PRIORITY_HINT_INFORMATION, *PFILE_IO_PRIORITY_HINT_INFORMATION;
- typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
- ULONG Flags;
- } FILE_IO_COMPLETION_NOTIFICATION_INFORMATION, *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
- typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
- PUCHAR IoStatusBlockRange;
- ULONG Length;
- } FILE_IOSTATUSBLOCK_RANGE_INFORMATION, *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
- typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
- BOOLEAN IsRemote;
- } FILE_IS_REMOTE_DEVICE_INFORMATION, *PFILE_IS_REMOTE_DEVICE_INFORMATION;
- typedef struct _FILE_NUMA_NODE_INFORMATION {
- USHORT NodeNumber;
- } FILE_NUMA_NODE_INFORMATION, *PFILE_NUMA_NODE_INFORMATION;
- typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
- ULONG NumberOfProcessIdsInList;
- ULONG_PTR ProcessIdList[1];
- } FILE_PROCESS_IDS_USING_FILE_INFORMATION, *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
- typedef struct _FILE_STANDARD_INFORMATION {
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG NumberOfLinks;
- BOOLEAN DeletePending;
- BOOLEAN Directory;
- } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
- typedef struct _FILE_NETWORK_OPEN_INFORMATION {
- LARGE_INTEGER CreationTime;
- LARGE_INTEGER LastAccessTime;
- LARGE_INTEGER LastWriteTime;
- LARGE_INTEGER ChangeTime;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER EndOfFile;
- ULONG FileAttributes;
- } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
- typedef enum _FSINFOCLASS {
- FileFsVolumeInformation = 1,
- FileFsLabelInformation,
- FileFsSizeInformation,
- FileFsDeviceInformation,
- FileFsAttributeInformation,
- FileFsControlInformation,
- FileFsFullSizeInformation,
- FileFsObjectIdInformation,
- FileFsDriverPathInformation,
- FileFsVolumeFlagsInformation,
- FileFsSectorSizeInformation,
- FileFsDataCopyInformation,
- FileFsMetadataSizeInformation,
- FileFsFullSizeInformationEx,
- FileFsMaximumInformation
- } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
- typedef struct _FILE_FS_DEVICE_INFORMATION {
- DEVICE_TYPE DeviceType;
- ULONG Characteristics;
- } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
- typedef struct _FILE_FULL_EA_INFORMATION {
- ULONG NextEntryOffset;
- UCHAR Flags;
- UCHAR EaNameLength;
- USHORT EaValueLength;
- CHAR EaName[1];
- } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
- typedef struct _FILE_SFIO_RESERVE_INFORMATION {
- ULONG RequestsPerPeriod;
- ULONG Period;
- BOOLEAN RetryFailures;
- BOOLEAN Discardable;
- ULONG RequestSize;
- ULONG NumOutstandingRequests;
- } FILE_SFIO_RESERVE_INFORMATION, *PFILE_SFIO_RESERVE_INFORMATION;
- typedef struct _FILE_SFIO_VOLUME_INFORMATION {
- ULONG MaximumRequestsPerPeriod;
- ULONG MinimumPeriod;
- ULONG MinimumTransferSize;
- } FILE_SFIO_VOLUME_INFORMATION, *PFILE_SFIO_VOLUME_INFORMATION;
- #define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
- #define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
- #define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x4
- #define FM_LOCK_BIT (0x1)
- #define FM_LOCK_BIT_V (0x0)
- #define FM_LOCK_WAITER_WOKEN (0x2)
- #define FM_LOCK_WAITER_INC (0x4)
- typedef BOOLEAN
- (NTAPI FAST_IO_CHECK_IF_POSSIBLE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- IN BOOLEAN CheckForReadOperation,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
- typedef BOOLEAN
- (NTAPI FAST_IO_READ)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_READ *PFAST_IO_READ;
- typedef BOOLEAN
- (NTAPI FAST_IO_WRITE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- IN PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_WRITE *PFAST_IO_WRITE;
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_BASIC_INFO)(
- IN struct _FILE_OBJECT *FileObject,
- IN BOOLEAN Wait,
- OUT PFILE_BASIC_INFORMATION Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_STANDARD_INFO)(
- IN struct _FILE_OBJECT *FileObject,
- IN BOOLEAN Wait,
- OUT PFILE_STANDARD_INFORMATION Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
- typedef BOOLEAN
- (NTAPI FAST_IO_LOCK)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PLARGE_INTEGER Length,
- PEPROCESS ProcessId,
- ULONG Key,
- BOOLEAN FailImmediately,
- BOOLEAN ExclusiveLock,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_LOCK *PFAST_IO_LOCK;
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_SINGLE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PLARGE_INTEGER Length,
- PEPROCESS ProcessId,
- ULONG Key,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_ALL)(
- IN struct _FILE_OBJECT *FileObject,
- PEPROCESS ProcessId,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
- typedef BOOLEAN
- (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)(
- IN struct _FILE_OBJECT *FileObject,
- PVOID ProcessId,
- ULONG Key,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
- typedef BOOLEAN
- (NTAPI FAST_IO_DEVICE_CONTROL)(
- IN struct _FILE_OBJECT *FileObject,
- IN BOOLEAN Wait,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength,
- IN ULONG IoControlCode,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
- typedef VOID
- (NTAPI FAST_IO_ACQUIRE_FILE)(
- IN struct _FILE_OBJECT *FileObject);
- typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
- typedef VOID
- (NTAPI FAST_IO_RELEASE_FILE)(
- IN struct _FILE_OBJECT *FileObject);
- typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
- typedef VOID
- (NTAPI FAST_IO_DETACH_DEVICE)(
- IN struct _DEVICE_OBJECT *SourceDevice,
- IN struct _DEVICE_OBJECT *TargetDevice);
- typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)(
- IN struct _FILE_OBJECT *FileObject,
- IN BOOLEAN Wait,
- OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
- OUT struct _IO_STATUS_BLOCK *IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
- typedef NTSTATUS
- (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER EndingOffset,
- OUT struct _ERESOURCE **ResourceToRelease,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ_COMPLETE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PMDL MdlChain,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
- typedef BOOLEAN
- (NTAPI FAST_IO_PREPARE_MDL_WRITE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_WRITE_COMPLETE)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PMDL MdlChain,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
- typedef BOOLEAN
- (NTAPI FAST_IO_READ_COMPRESSED)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- OUT PVOID Buffer,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
- IN ULONG CompressedDataInfoLength,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
- typedef BOOLEAN
- (NTAPI FAST_IO_WRITE_COMPRESSED)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN ULONG LockKey,
- IN PVOID Buffer,
- OUT PMDL *MdlChain,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
- IN ULONG CompressedDataInfoLength,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
- IN struct _FILE_OBJECT *FileObject,
- IN PMDL MdlChain,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
- typedef BOOLEAN
- (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
- IN struct _FILE_OBJECT *FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PMDL MdlChain,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
- typedef BOOLEAN
- (NTAPI FAST_IO_QUERY_OPEN)(
- IN struct _IRP *Irp,
- OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
- typedef NTSTATUS
- (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)(
- IN struct _FILE_OBJECT *FileObject,
- IN struct _ERESOURCE *ResourceToRelease,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
- typedef NTSTATUS
- (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)(
- IN struct _FILE_OBJECT *FileObject,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
- typedef NTSTATUS
- (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)(
- IN struct _FILE_OBJECT *FileObject,
- IN struct _DEVICE_OBJECT *DeviceObject);
- typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
- typedef struct _FAST_IO_DISPATCH {
- ULONG SizeOfFastIoDispatch;
- PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
- PFAST_IO_READ FastIoRead;
- PFAST_IO_WRITE FastIoWrite;
- PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
- PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
- PFAST_IO_LOCK FastIoLock;
- PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
- PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
- PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
- PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
- PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
- PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
- PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
- PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
- PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
- PFAST_IO_MDL_READ MdlRead;
- PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
- PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
- PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
- PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
- PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
- PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
- PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
- PFAST_IO_QUERY_OPEN FastIoQueryOpen;
- PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
- PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
- PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
- } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
- typedef struct _SECTION_OBJECT_POINTERS {
- PVOID DataSectionObject;
- PVOID SharedCacheMap;
- PVOID ImageSectionObject;
- } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
- typedef struct _IO_COMPLETION_CONTEXT {
- PVOID Port;
- PVOID Key;
- } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
- /* FILE_OBJECT.Flags */
- #define FO_FILE_OPEN 0x00000001
- #define FO_SYNCHRONOUS_IO 0x00000002
- #define FO_ALERTABLE_IO 0x00000004
- #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
- #define FO_WRITE_THROUGH 0x00000010
- #define FO_SEQUENTIAL_ONLY 0x00000020
- #define FO_CACHE_SUPPORTED 0x00000040
- #define FO_NAMED_PIPE 0x00000080
- #define FO_STREAM_FILE 0x00000100
- #define FO_MAILSLOT 0x00000200
- #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
- #define FO_QUEUE_IRP_TO_THREAD 0x00000400
- #define FO_DIRECT_DEVICE_OPEN 0x00000800
- #define FO_FILE_MODIFIED 0x00001000
- #define FO_FILE_SIZE_CHANGED 0x00002000
- #define FO_CLEANUP_COMPLETE 0x00004000
- #define FO_TEMPORARY_FILE 0x00008000
- #define FO_DELETE_ON_CLOSE 0x00010000
- #define FO_OPENED_CASE_SENSITIVE 0x00020000
- #define FO_HANDLE_CREATED 0x00040000
- #define FO_FILE_FAST_IO_READ 0x00080000
- #define FO_RANDOM_ACCESS 0x00100000
- #define FO_FILE_OPEN_CANCELLED 0x00200000
- #define FO_VOLUME_OPEN 0x00400000
- #define FO_REMOTE_ORIGIN 0x01000000
- #define FO_DISALLOW_EXCLUSIVE 0x02000000
- #define FO_SKIP_COMPLETION_PORT 0x02000000
- #define FO_SKIP_SET_EVENT 0x04000000
- #define FO_SKIP_SET_FAST_IO 0x08000000
- #define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
- /* VPB.Flags */
- #define VPB_MOUNTED 0x0001
- #define VPB_LOCKED 0x0002
- #define VPB_PERSISTENT 0x0004
- #define VPB_REMOVE_PENDING 0x0008
- #define VPB_RAW_MOUNT 0x0010
- #define VPB_DIRECT_WRITES_ALLOWED 0x0020
- /* IRP.Flags */
- #define SL_FORCE_ACCESS_CHECK 0x01
- #define SL_OPEN_PAGING_FILE 0x02
- #define SL_OPEN_TARGET_DIRECTORY 0x04
- #define SL_STOP_ON_SYMLINK 0x08
- #define SL_CASE_SENSITIVE 0x80
- #define SL_KEY_SPECIFIED 0x01
- #define SL_OVERRIDE_VERIFY_VOLUME 0x02
- #define SL_WRITE_THROUGH 0x04
- #define SL_FT_SEQUENTIAL_WRITE 0x08
- #define SL_FORCE_DIRECT_WRITE 0x10
- #define SL_REALTIME_STREAM 0x20
- #define SL_READ_ACCESS_GRANTED 0x01
- #define SL_WRITE_ACCESS_GRANTED 0x04
- #define SL_FAIL_IMMEDIATELY 0x01
- #define SL_EXCLUSIVE_LOCK 0x02
- #define SL_RESTART_SCAN 0x01
- #define SL_RETURN_SINGLE_ENTRY 0x02
- #define SL_INDEX_SPECIFIED 0x04
- #define SL_WATCH_TREE 0x01
- #define SL_ALLOW_RAW_MOUNT 0x01
- #define CTL_CODE(DeviceType, Function, Method, Access) \
- (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
- #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16)
- #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
- #define IRP_NOCACHE 0x00000001
- #define IRP_PAGING_IO 0x00000002
- #define IRP_MOUNT_COMPLETION 0x00000002
- #define IRP_SYNCHRONOUS_API 0x00000004
- #define IRP_ASSOCIATED_IRP 0x00000008
- #define IRP_BUFFERED_IO 0x00000010
- #define IRP_DEALLOCATE_BUFFER 0x00000020
- #define IRP_INPUT_OPERATION 0x00000040
- #define IRP_SYNCHRONOUS_PAGING_IO 0x00000040
- #define IRP_CREATE_OPERATION 0x00000080
- #define IRP_READ_OPERATION 0x00000100
- #define IRP_WRITE_OPERATION 0x00000200
- #define IRP_CLOSE_OPERATION 0x00000400
- #define IRP_DEFER_IO_COMPLETION 0x00000800
- #define IRP_OB_QUERY_NAME 0x00001000
- #define IRP_HOLD_DEVICE_QUEUE 0x00002000
- #define IRP_RETRY_IO_COMPLETION 0x00004000
- #define IRP_CLASS_CACHE_OPERATION 0x00008000
- #define IRP_QUOTA_CHARGED 0x01
- #define IRP_ALLOCATED_MUST_SUCCEED 0x02
- #define IRP_ALLOCATED_FIXED_SIZE 0x04
- #define IRP_LOOKASIDE_ALLOCATION 0x08
- /*
- ** IRP function codes
- */
- #define IRP_MJ_CREATE 0x00
- #define IRP_MJ_CREATE_NAMED_PIPE 0x01
- #define IRP_MJ_CLOSE 0x02
- #define IRP_MJ_READ 0x03
- #define IRP_MJ_WRITE 0x04
- #define IRP_MJ_QUERY_INFORMATION 0x05
- #define IRP_MJ_SET_INFORMATION 0x06
- #define IRP_MJ_QUERY_EA 0x07
- #define IRP_MJ_SET_EA 0x08
- #define IRP_MJ_FLUSH_BUFFERS 0x09
- #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
- #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
- #define IRP_MJ_DIRECTORY_CONTROL 0x0c
- #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
- #define IRP_MJ_DEVICE_CONTROL 0x0e
- #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
- #define IRP_MJ_SCSI 0x0f
- #define IRP_MJ_SHUTDOWN 0x10
- #define IRP_MJ_LOCK_CONTROL 0x11
- #define IRP_MJ_CLEANUP 0x12
- #define IRP_MJ_CREATE_MAILSLOT 0x13
- #define IRP_MJ_QUERY_SECURITY 0x14
- #define IRP_MJ_SET_SECURITY 0x15
- #define IRP_MJ_POWER 0x16
- #define IRP_MJ_SYSTEM_CONTROL 0x17
- #define IRP_MJ_DEVICE_CHANGE 0x18
- #define IRP_MJ_QUERY_QUOTA 0x19
- #define IRP_MJ_SET_QUOTA 0x1a
- #define IRP_MJ_PNP 0x1b
- #define IRP_MJ_PNP_POWER 0x1b
- #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
- #define IRP_MN_SCSI_CLASS 0x01
- #define IRP_MN_START_DEVICE 0x00
- #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
- #define IRP_MN_REMOVE_DEVICE 0x02
- #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
- #define IRP_MN_STOP_DEVICE 0x04
- #define IRP_MN_QUERY_STOP_DEVICE 0x05
- #define IRP_MN_CANCEL_STOP_DEVICE 0x06
- #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
- #define IRP_MN_QUERY_INTERFACE 0x08
- #define IRP_MN_QUERY_CAPABILITIES 0x09
- #define IRP_MN_QUERY_RESOURCES 0x0A
- #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
- #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
- #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
- #define IRP_MN_READ_CONFIG 0x0F
- #define IRP_MN_WRITE_CONFIG 0x10
- #define IRP_MN_EJECT 0x11
- #define IRP_MN_SET_LOCK 0x12
- #define IRP_MN_QUERY_ID 0x13
- #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
- #define IRP_MN_QUERY_BUS_INFORMATION 0x15
- #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
- #define IRP_MN_SURPRISE_REMOVAL 0x17
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- #define IRP_MN_DEVICE_ENUMERATED 0x19
- #endif
- #define IRP_MN_WAIT_WAKE 0x00
- #define IRP_MN_POWER_SEQUENCE 0x01
- #define IRP_MN_SET_POWER 0x02
- #define IRP_MN_QUERY_POWER 0x03
- #define IRP_MN_QUERY_ALL_DATA 0x00
- #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
- #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
- #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
- #define IRP_MN_ENABLE_EVENTS 0x04
- #define IRP_MN_DISABLE_EVENTS 0x05
- #define IRP_MN_ENABLE_COLLECTION 0x06
- #define IRP_MN_DISABLE_COLLECTION 0x07
- #define IRP_MN_REGINFO 0x08
- #define IRP_MN_EXECUTE_METHOD 0x09
- #define IRP_MN_REGINFO_EX 0x0b
- typedef struct _FILE_OBJECT {
- CSHORT Type;
- CSHORT Size;
- PDEVICE_OBJECT DeviceObject;
- PVPB Vpb;
- PVOID FsContext;
- PVOID FsContext2;
- PSECTION_OBJECT_POINTERS SectionObjectPointer;
- PVOID PrivateCacheMap;
- NTSTATUS FinalStatus;
- struct _FILE_OBJECT *RelatedFileObject;
- BOOLEAN LockOperation;
- BOOLEAN DeletePending;
- BOOLEAN ReadAccess;
- BOOLEAN WriteAccess;
- BOOLEAN DeleteAccess;
- BOOLEAN SharedRead;
- BOOLEAN SharedWrite;
- BOOLEAN SharedDelete;
- ULONG Flags;
- UNICODE_STRING FileName;
- LARGE_INTEGER CurrentByteOffset;
- volatile ULONG Waiters;
- volatile ULONG Busy;
- PVOID LastLock;
- KEVENT Lock;
- KEVENT Event;
- volatile PIO_COMPLETION_CONTEXT CompletionContext;
- KSPIN_LOCK IrpListLock;
- LIST_ENTRY IrpList;
- volatile PVOID FileObjectExtension;
- } FILE_OBJECT, *PFILE_OBJECT;
- typedef struct _IO_ERROR_LOG_PACKET {
- UCHAR MajorFunctionCode;
- UCHAR RetryCount;
- USHORT DumpDataSize;
- USHORT NumberOfStrings;
- USHORT StringOffset;
- USHORT EventCategory;
- NTSTATUS ErrorCode;
- ULONG UniqueErrorValue;
- NTSTATUS FinalStatus;
- ULONG SequenceNumber;
- ULONG IoControlCode;
- LARGE_INTEGER DeviceOffset;
- ULONG DumpData[1];
- } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
- typedef struct _IO_ERROR_LOG_MESSAGE {
- USHORT Type;
- USHORT Size;
- USHORT DriverNameLength;
- LARGE_INTEGER TimeStamp;
- ULONG DriverNameOffset;
- IO_ERROR_LOG_PACKET EntryData;
- } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
- #define ERROR_LOG_LIMIT_SIZE 240
- #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \
- sizeof(IO_ERROR_LOG_PACKET) + \
- (sizeof(WCHAR) * 40))
- #define ERROR_LOG_MESSAGE_LIMIT_SIZE \
- (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
- #define IO_ERROR_LOG_MESSAGE_LENGTH \
- ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \
- ERROR_LOG_MESSAGE_LIMIT_SIZE : \
- PORT_MAXIMUM_MESSAGE_LENGTH)
- #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \
- IO_ERROR_LOG_MESSAGE_HEADER_LENGTH)
- #ifdef _WIN64
- #define PORT_MAXIMUM_MESSAGE_LENGTH 512
- #else
- #define PORT_MAXIMUM_MESSAGE_LENGTH 256
- #endif
- typedef enum _DMA_WIDTH {
- Width8Bits,
- Width16Bits,
- Width32Bits,
- Width64Bits,
- WidthNoWrap,
- MaximumDmaWidth
- } DMA_WIDTH, *PDMA_WIDTH;
- typedef enum _DMA_SPEED {
- Compatible,
- TypeA,
- TypeB,
- TypeC,
- TypeF,
- MaximumDmaSpeed
- } DMA_SPEED, *PDMA_SPEED;
- /* DEVICE_DESCRIPTION.Version */
- #define DEVICE_DESCRIPTION_VERSION 0x0000
- #define DEVICE_DESCRIPTION_VERSION1 0x0001
- #define DEVICE_DESCRIPTION_VERSION2 0x0002
- typedef struct _DEVICE_DESCRIPTION {
- ULONG Version;
- BOOLEAN Master;
- BOOLEAN ScatterGather;
- BOOLEAN DemandMode;
- BOOLEAN AutoInitialize;
- BOOLEAN Dma32BitAddresses;
- BOOLEAN IgnoreCount;
- BOOLEAN Reserved1;
- BOOLEAN Dma64BitAddresses;
- ULONG BusNumber;
- ULONG DmaChannel;
- INTERFACE_TYPE InterfaceType;
- DMA_WIDTH DmaWidth;
- DMA_SPEED DmaSpeed;
- ULONG MaximumLength;
- ULONG DmaPort;
- } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
- typedef enum _DEVICE_RELATION_TYPE {
- BusRelations,
- EjectionRelations,
- PowerRelations,
- RemovalRelations,
- TargetDeviceRelation,
- SingleBusRelations,
- TransportRelations
- } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
- typedef struct _DEVICE_RELATIONS {
- ULONG Count;
- PDEVICE_OBJECT Objects[1];
- } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
- typedef struct _DEVOBJ_EXTENSION {
- CSHORT Type;
- USHORT Size;
- PDEVICE_OBJECT DeviceObject;
- } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
- typedef struct _SCATTER_GATHER_ELEMENT {
- PHYSICAL_ADDRESS Address;
- ULONG Length;
- ULONG_PTR Reserved;
- } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
- #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
- #if defined(_MSC_VER)
- #if _MSC_VER >= 1200
- #pragma warning(push)
- #endif
- #pragma warning(disable:4200)
- #endif /* _MSC_VER */
- typedef struct _SCATTER_GATHER_LIST {
- ULONG NumberOfElements;
- ULONG_PTR Reserved;
- SCATTER_GATHER_ELEMENT Elements[1];
- } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
- #if defined(_MSC_VER)
- #if _MSC_VER >= 1200
- #pragma warning(pop)
- #else
- #pragma warning(default:4200)
- #endif
- #endif /* _MSC_VER */
- #else /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
- struct _SCATTER_GATHER_LIST;
- typedef struct _SCATTER_GATHER_LIST SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
- #endif /* defined(_MSC_EXTENSIONS) || defined(__GNUC__) */
- typedef NTSTATUS
- (NTAPI DRIVER_ADD_DEVICE)(
- IN struct _DRIVER_OBJECT *DriverObject,
- IN struct _DEVICE_OBJECT *PhysicalDeviceObject);
- typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
- typedef struct _DRIVER_EXTENSION {
- struct _DRIVER_OBJECT *DriverObject;
- PDRIVER_ADD_DEVICE AddDevice;
- ULONG Count;
- UNICODE_STRING ServiceKeyName;
- } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
- #define DRVO_UNLOAD_INVOKED 0x00000001
- #define DRVO_LEGACY_DRIVER 0x00000002
- #define DRVO_BUILTIN_DRIVER 0x00000004
- typedef NTSTATUS
- (NTAPI DRIVER_INITIALIZE)(
- IN struct _DRIVER_OBJECT *DriverObject,
- IN PUNICODE_STRING RegistryPath);
- typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
- typedef VOID
- (NTAPI DRIVER_STARTIO)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp);
- typedef DRIVER_STARTIO *PDRIVER_STARTIO;
- typedef VOID
- (NTAPI DRIVER_UNLOAD)(
- IN struct _DRIVER_OBJECT *DriverObject);
- typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
- typedef NTSTATUS
- (NTAPI DRIVER_DISPATCH)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp);
- typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
- typedef struct _DRIVER_OBJECT {
- CSHORT Type;
- CSHORT Size;
- PDEVICE_OBJECT DeviceObject;
- ULONG Flags;
- PVOID DriverStart;
- ULONG DriverSize;
- PVOID DriverSection;
- PDRIVER_EXTENSION DriverExtension;
- UNICODE_STRING DriverName;
- PUNICODE_STRING HardwareDatabase;
- struct _FAST_IO_DISPATCH *FastIoDispatch;
- PDRIVER_INITIALIZE DriverInit;
- PDRIVER_STARTIO DriverStartIo;
- PDRIVER_UNLOAD DriverUnload;
- PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
- } DRIVER_OBJECT, *PDRIVER_OBJECT;
- typedef struct _DMA_ADAPTER {
- USHORT Version;
- USHORT Size;
- struct _DMA_OPERATIONS* DmaOperations;
- } DMA_ADAPTER, *PDMA_ADAPTER;
- typedef enum
- {
- DmaComplete,
- DmaAborted,
- DmaError,
- DmaCancelled,
- } DMA_COMPLETION_STATUS;
- typedef VOID
- (NTAPI *PPUT_DMA_ADAPTER)(
- IN PDMA_ADAPTER DmaAdapter);
- typedef PVOID
- (NTAPI *PALLOCATE_COMMON_BUFFER)(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- OUT PPHYSICAL_ADDRESS LogicalAddress,
- IN BOOLEAN CacheEnabled);
- typedef VOID
- (NTAPI *PFREE_COMMON_BUFFER)(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- IN PHYSICAL_ADDRESS LogicalAddress,
- IN PVOID VirtualAddress,
- IN BOOLEAN CacheEnabled);
- typedef NTSTATUS
- (NTAPI *PALLOCATE_ADAPTER_CHANNEL)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG NumberOfMapRegisters,
- IN PDRIVER_CONTROL ExecutionRoutine,
- IN PVOID Context);
- typedef BOOLEAN
- (NTAPI *PFLUSH_ADAPTER_BUFFERS)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN BOOLEAN WriteToDevice);
- typedef VOID
- (NTAPI *PFREE_ADAPTER_CHANNEL)(
- IN PDMA_ADAPTER DmaAdapter);
- typedef VOID
- (NTAPI *PFREE_MAP_REGISTERS)(
- IN PDMA_ADAPTER DmaAdapter,
- PVOID MapRegisterBase,
- ULONG NumberOfMapRegisters);
- typedef PHYSICAL_ADDRESS
- (NTAPI *PMAP_TRANSFER)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN OUT PULONG Length,
- IN BOOLEAN WriteToDevice);
- typedef ULONG
- (NTAPI *PGET_DMA_ALIGNMENT)(
- IN PDMA_ADAPTER DmaAdapter);
- typedef ULONG
- (NTAPI *PREAD_DMA_COUNTER)(
- IN PDMA_ADAPTER DmaAdapter);
- typedef VOID
- (NTAPI DRIVER_LIST_CONTROL)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp,
- IN struct _SCATTER_GATHER_LIST *ScatterGather,
- IN PVOID Context);
- typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
- typedef NTSTATUS
- (NTAPI *PGET_SCATTER_GATHER_LIST)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN PMDL Mdl,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN PDRIVER_LIST_CONTROL ExecutionRoutine,
- IN PVOID Context,
- IN BOOLEAN WriteToDevice);
- typedef VOID
- (NTAPI *PPUT_SCATTER_GATHER_LIST)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PSCATTER_GATHER_LIST ScatterGather,
- IN BOOLEAN WriteToDevice);
- typedef NTSTATUS
- (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl OPTIONAL,
- IN PVOID CurrentVa,
- IN ULONG Length,
- OUT PULONG ScatterGatherListSize,
- OUT PULONG pNumberOfMapRegisters OPTIONAL);
- typedef NTSTATUS
- (NTAPI *PBUILD_SCATTER_GATHER_LIST)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN PMDL Mdl,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN PDRIVER_LIST_CONTROL ExecutionRoutine,
- IN PVOID Context,
- IN BOOLEAN WriteToDevice,
- IN PVOID ScatterGatherBuffer,
- IN ULONG ScatterGatherLength);
- typedef NTSTATUS
- (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
- IN PDMA_ADAPTER DmaAdapter,
- IN PSCATTER_GATHER_LIST ScatterGather,
- IN PMDL OriginalMdl,
- OUT PMDL *TargetMdl);
- typedef struct _DMA_OPERATIONS {
- ULONG Size;
- PPUT_DMA_ADAPTER PutDmaAdapter;
- PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
- PFREE_COMMON_BUFFER FreeCommonBuffer;
- PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
- PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
- PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
- PFREE_MAP_REGISTERS FreeMapRegisters;
- PMAP_TRANSFER MapTransfer;
- PGET_DMA_ALIGNMENT GetDmaAlignment;
- PREAD_DMA_COUNTER ReadDmaCounter;
- PGET_SCATTER_GATHER_LIST GetScatterGatherList;
- PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
- PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
- PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
- PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
- } DMA_OPERATIONS, *PDMA_OPERATIONS;
- typedef struct _IO_RESOURCE_DESCRIPTOR {
- UCHAR Option;
- UCHAR Type;
- UCHAR ShareDisposition;
- UCHAR Spare1;
- USHORT Flags;
- USHORT Spare2;
- union {
- struct {
- ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Port;
- struct {
- ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Memory;
- struct {
- ULONG MinimumVector;
- ULONG MaximumVector;
- } Interrupt;
- struct {
- ULONG MinimumChannel;
- ULONG MaximumChannel;
- } Dma;
- struct {
- ULONG Length;
- ULONG Alignment;
- PHYSICAL_ADDRESS MinimumAddress;
- PHYSICAL_ADDRESS MaximumAddress;
- } Generic;
- struct {
- ULONG Data[3];
- } DevicePrivate;
- struct {
- ULONG Length;
- ULONG MinBusNumber;
- ULONG MaxBusNumber;
- ULONG Reserved;
- } BusNumber;
- struct {
- ULONG Priority;
- ULONG Reserved1;
- ULONG Reserved2;
- } ConfigData;
- } u;
- } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
- typedef struct _IO_RESOURCE_LIST {
- USHORT Version;
- USHORT Revision;
- ULONG Count;
- IO_RESOURCE_DESCRIPTOR Descriptors[1];
- } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
- typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
- ULONG ListSize;
- INTERFACE_TYPE InterfaceType;
- ULONG BusNumber;
- ULONG SlotNumber;
- ULONG Reserved[3];
- ULONG AlternativeLists;
- IO_RESOURCE_LIST List[1];
- } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
- typedef VOID
- (NTAPI DRIVER_CANCEL)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp);
- typedef DRIVER_CANCEL *PDRIVER_CANCEL;
- typedef struct _IRP {
- CSHORT Type;
- USHORT Size;
- struct _MDL *MdlAddress;
- ULONG Flags;
- union {
- struct _IRP *MasterIrp;
- volatile LONG IrpCount;
- PVOID SystemBuffer;
- } AssociatedIrp;
- LIST_ENTRY ThreadListEntry;
- IO_STATUS_BLOCK IoStatus;
- KPROCESSOR_MODE RequestorMode;
- BOOLEAN PendingReturned;
- CHAR StackCount;
- CHAR CurrentLocation;
- BOOLEAN Cancel;
- KIRQL CancelIrql;
- CCHAR ApcEnvironment;
- UCHAR AllocationFlags;
- PIO_STATUS_BLOCK UserIosb;
- PKEVENT UserEvent;
- union {
- struct {
- _ANONYMOUS_UNION union {
- PIO_APC_ROUTINE UserApcRoutine;
- PVOID IssuingProcess;
- } DUMMYUNIONNAME;
- PVOID UserApcContext;
- } AsynchronousParameters;
- LARGE_INTEGER AllocationSize;
- } Overlay;
- volatile PDRIVER_CANCEL CancelRoutine;
- PVOID UserBuffer;
- union {
- struct {
- _ANONYMOUS_UNION union {
- KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
- _ANONYMOUS_STRUCT struct {
- PVOID DriverContext[4];
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- PETHREAD Thread;
- PCHAR AuxiliaryBuffer;
- _ANONYMOUS_STRUCT struct {
- LIST_ENTRY ListEntry;
- _ANONYMOUS_UNION union {
- struct _IO_STACK_LOCATION *CurrentStackLocation;
- ULONG PacketType;
- } DUMMYUNIONNAME;
- } DUMMYSTRUCTNAME;
- struct _FILE_OBJECT *OriginalFileObject;
- } Overlay;
- KAPC Apc;
- PVOID CompletionKey;
- } Tail;
- } IRP, *PIRP;
- typedef enum _IO_PAGING_PRIORITY {
- IoPagingPriorityInvalid,
- IoPagingPriorityNormal,
- IoPagingPriorityHigh,
- IoPagingPriorityReserved1,
- IoPagingPriorityReserved2
- } IO_PAGING_PRIORITY;
- typedef NTSTATUS
- (NTAPI IO_COMPLETION_ROUTINE)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp,
- IN PVOID Context);
- typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
- typedef VOID
- (NTAPI IO_DPC_ROUTINE)(
- IN struct _KDPC *Dpc,
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN struct _IRP *Irp,
- IN PVOID Context);
- typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
- typedef NTSTATUS
- (NTAPI *PMM_DLL_INITIALIZE)(
- IN PUNICODE_STRING RegistryPath);
- typedef NTSTATUS
- (NTAPI *PMM_DLL_UNLOAD)(
- VOID);
- typedef VOID
- (NTAPI IO_TIMER_ROUTINE)(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN PVOID Context);
- typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
- typedef struct _IO_SECURITY_CONTEXT {
- PSECURITY_QUALITY_OF_SERVICE SecurityQos;
- PACCESS_STATE AccessState;
- ACCESS_MASK DesiredAccess;
- ULONG FullCreateOptions;
- } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
- struct _IO_CSQ;
- typedef struct _IO_CSQ_IRP_CONTEXT {
- ULONG Type;
- struct _IRP *Irp;
- struct _IO_CSQ *Csq;
- } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
- typedef VOID
- (NTAPI *PIO_CSQ_INSERT_IRP)(
- IN struct _IO_CSQ *Csq,
- IN PIRP Irp);
- typedef NTSTATUS
- (NTAPI IO_CSQ_INSERT_IRP_EX)(
- IN struct _IO_CSQ *Csq,
- IN PIRP Irp,
- IN PVOID InsertContext);
- typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
- typedef VOID
- (NTAPI *PIO_CSQ_REMOVE_IRP)(
- IN struct _IO_CSQ *Csq,
- IN PIRP Irp);
- typedef PIRP
- (NTAPI *PIO_CSQ_PEEK_NEXT_IRP)(
- IN struct _IO_CSQ *Csq,
- IN PIRP Irp,
- IN PVOID PeekContext);
- typedef VOID
- (NTAPI *PIO_CSQ_ACQUIRE_LOCK)(
- IN struct _IO_CSQ *Csq,
- OUT PKIRQL Irql);
- typedef VOID
- (NTAPI *PIO_CSQ_RELEASE_LOCK)(
- IN struct _IO_CSQ *Csq,
- IN KIRQL Irql);
- typedef VOID
- (NTAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)(
- IN struct _IO_CSQ *Csq,
- IN PIRP Irp);
- typedef struct _IO_CSQ {
- ULONG Type;
- PIO_CSQ_INSERT_IRP CsqInsertIrp;
- PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
- PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
- PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
- PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
- PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
- PVOID ReservePointer;
- } IO_CSQ, *PIO_CSQ;
- typedef enum _BUS_QUERY_ID_TYPE {
- BusQueryDeviceID,
- BusQueryHardwareIDs,
- BusQueryCompatibleIDs,
- BusQueryInstanceID,
- BusQueryDeviceSerialNumber,
- BusQueryContainerID
- } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
- typedef enum _DEVICE_TEXT_TYPE {
- DeviceTextDescription,
- DeviceTextLocationInformation
- } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
- typedef BOOLEAN
- (NTAPI *PGPE_SERVICE_ROUTINE)(
- PVOID,
- PVOID);
- typedef NTSTATUS
- (NTAPI *PGPE_CONNECT_VECTOR)(
- PDEVICE_OBJECT,
- ULONG,
- KINTERRUPT_MODE,
- BOOLEAN,
- PGPE_SERVICE_ROUTINE,
- PVOID,
- PVOID);
- typedef NTSTATUS
- (NTAPI *PGPE_DISCONNECT_VECTOR)(
- PVOID);
- typedef NTSTATUS
- (NTAPI *PGPE_ENABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
- typedef NTSTATUS
- (NTAPI *PGPE_DISABLE_EVENT)(
- PDEVICE_OBJECT,
- PVOID);
- typedef NTSTATUS
- (NTAPI *PGPE_CLEAR_STATUS)(
- PDEVICE_OBJECT,
- PVOID);
- typedef VOID
- (NTAPI *PDEVICE_NOTIFY_CALLBACK)(
- PVOID,
- ULONG);
- typedef NTSTATUS
- (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK,
- PVOID);
- typedef VOID
- (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)(
- PDEVICE_OBJECT,
- PDEVICE_NOTIFY_CALLBACK);
- typedef struct _ACPI_INTERFACE_STANDARD {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR GpeConnectVector;
- PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
- PGPE_ENABLE_EVENT GpeEnableEvent;
- PGPE_DISABLE_EVENT GpeDisableEvent;
- PGPE_CLEAR_STATUS GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
- } ACPI_INTERFACE_STANDARD, *PACPI_INTERFACE_STANDARD;
- typedef BOOLEAN
- (NTAPI *PGPE_SERVICE_ROUTINE2)(
- PVOID ObjectContext,
- PVOID ServiceContext);
- typedef NTSTATUS
- (NTAPI *PGPE_CONNECT_VECTOR2)(
- PVOID Context,
- ULONG GpeNumber,
- KINTERRUPT_MODE Mode,
- BOOLEAN Shareable,
- PGPE_SERVICE_ROUTINE ServiceRoutine,
- PVOID ServiceContext,
- PVOID *ObjectContext);
- typedef NTSTATUS
- (NTAPI *PGPE_DISCONNECT_VECTOR2)(
- PVOID Context,
- PVOID ObjectContext);
- typedef NTSTATUS
- (NTAPI *PGPE_ENABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
- typedef NTSTATUS
- (NTAPI *PGPE_DISABLE_EVENT2)(
- PVOID Context,
- PVOID ObjectContext);
- typedef NTSTATUS
- (NTAPI *PGPE_CLEAR_STATUS2)(
- PVOID Context,
- PVOID ObjectContext);
- typedef VOID
- (NTAPI *PDEVICE_NOTIFY_CALLBACK2)(
- PVOID NotificationContext,
- ULONG NotifyCode);
- typedef NTSTATUS
- (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context,
- PDEVICE_NOTIFY_CALLBACK2 NotificationHandler,
- PVOID NotificationContext);
- typedef VOID
- (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)(
- PVOID Context);
- typedef struct _ACPI_INTERFACE_STANDARD2 {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PGPE_CONNECT_VECTOR2 GpeConnectVector;
- PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
- PGPE_ENABLE_EVENT2 GpeEnableEvent;
- PGPE_DISABLE_EVENT2 GpeDisableEvent;
- PGPE_CLEAR_STATUS2 GpeClearStatus;
- PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
- PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
- } ACPI_INTERFACE_STANDARD2, *PACPI_INTERFACE_STANDARD2;
- #if !defined(_AMD64_) && !defined(_IA64_)
- #include <pshpack4.h>
- #endif
- typedef struct _IO_STACK_LOCATION {
- UCHAR MajorFunction;
- UCHAR MinorFunction;
- UCHAR Flags;
- UCHAR Control;
- union {
- struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT POINTER_ALIGNMENT FileAttributes;
- USHORT ShareAccess;
- ULONG POINTER_ALIGNMENT EaLength;
- } Create;
- struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT POINTER_ALIGNMENT Reserved;
- USHORT ShareAccess;
- PNAMED_PIPE_CREATE_PARAMETERS Parameters;
- } CreatePipe;
- struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT POINTER_ALIGNMENT Reserved;
- USHORT ShareAccess;
- PMAILSLOT_CREATE_PARAMETERS Parameters;
- } CreateMailslot;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT Key;
- #ifdef _WIN64
- ULONG Flags;
- #endif
- LARGE_INTEGER ByteOffset;
- } Read;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT Key;
- #ifdef _WIN64
- ULONG Flags;
- #endif
- LARGE_INTEGER ByteOffset;
- } Write;
- struct {
- ULONG Length;
- PUNICODE_STRING FileName;
- FILE_INFORMATION_CLASS FileInformationClass;
- ULONG POINTER_ALIGNMENT FileIndex;
- } QueryDirectory;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT CompletionFilter;
- } NotifyDirectory;
- struct {
- ULONG Length;
- ULONG POINTER_ALIGNMENT CompletionFilter;
- DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass;
- } NotifyDirectoryEx;
- struct {
- ULONG Length;
- FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
- } QueryFile;
- struct {
- ULONG Length;
- FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
- PFILE_OBJECT FileObject;
- _ANONYMOUS_UNION union {
- _ANONYMOUS_STRUCT struct {
- BOOLEAN ReplaceIfExists;
- BOOLEAN AdvanceOnly;
- } DUMMYSTRUCTNAME;
- ULONG ClusterCount;
- HANDLE DeleteHandle;
- } DUMMYUNIONNAME;
- } SetFile;
- struct {
- ULONG Length;
- PVOID EaList;
- ULONG EaListLength;
- ULONG POINTER_ALIGNMENT EaIndex;
- } QueryEa;
- struct {
- ULONG Length;
- } SetEa;
- struct {
- ULONG Length;
- FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
- } QueryVolume;
- struct {
- ULONG Length;
- FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
- } SetVolume;
- struct {
- ULONG OutputBufferLength;
- ULONG POINTER_ALIGNMENT InputBufferLength;
- ULONG POINTER_ALIGNMENT FsControlCode;
- PVOID Type3InputBuffer;
- } FileSystemControl;
- struct {
- PLARGE_INTEGER Length;
- ULONG POINTER_ALIGNMENT Key;
- LARGE_INTEGER ByteOffset;
- } LockControl;
- struct {
- ULONG OutputBufferLength;
- ULONG POINTER_ALIGNMENT InputBufferLength;
- ULONG POINTER_ALIGNMENT IoControlCode;
- PVOID Type3InputBuffer;
- } DeviceIoControl;
- struct {
- SECURITY_INFORMATION SecurityInformation;
- ULONG POINTER_ALIGNMENT Length;
- } QuerySecurity;
- struct {
- SECURITY_INFORMATION SecurityInformation;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- } SetSecurity;
- struct {
- PVPB Vpb;
- PDEVICE_OBJECT DeviceObject;
- } MountVolume;
- struct {
- PVPB Vpb;
- PDEVICE_OBJECT DeviceObject;
- } VerifyVolume;
- struct {
- struct _SCSI_REQUEST_BLOCK *Srb;
- } Scsi;
- struct {
- ULONG Length;
- PSID StartSid;
- struct _FILE_GET_QUOTA_INFORMATION *SidList;
- ULONG SidListLength;
- } QueryQuota;
- struct {
- ULONG Length;
- } SetQuota;
- struct {
- DEVICE_RELATION_TYPE Type;
- } QueryDeviceRelations;
- struct {
- CONST GUID *InterfaceType;
- USHORT Size;
- USHORT Version;
- PINTERFACE Interface;
- PVOID InterfaceSpecificData;
- } QueryInterface;
- struct {
- PDEVICE_CAPABILITIES Capabilities;
- } DeviceCapabilities;
- struct {
- PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
- } FilterResourceRequirements;
- struct {
- ULONG WhichSpace;
- PVOID Buffer;
- ULONG Offset;
- ULONG POINTER_ALIGNMENT Length;
- } ReadWriteConfig;
- struct {
- BOOLEAN Lock;
- } SetLock;
- struct {
- BUS_QUERY_ID_TYPE IdType;
- } QueryId;
- struct {
- DEVICE_TEXT_TYPE DeviceTextType;
- LCID POINTER_ALIGNMENT LocaleId;
- } QueryDeviceText;
- struct {
- BOOLEAN InPath;
- BOOLEAN Reserved[3];
- DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
- } UsageNotification;
- struct {
- SYSTEM_POWER_STATE PowerState;
- } WaitWake;
- struct {
- PPOWER_SEQUENCE PowerSequence;
- } PowerSequence;
- struct {
- #if (NTDDI_VERSION >= NTDDI_WINVISTA)
- _ANONYMOUS_UNION union {
- #endif
- ULONG SystemContext;
- #if (NTDDI_VERSION >= NTDDI_WINVISTA)
- SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext;
- } DUMMYUNIONNAME;
- #endif
- POWER_STATE_TYPE POINTER_ALIGNMENT Type;
- POWER_STATE POINTER_ALIGNMENT State;
- POWER_ACTION POINTER_ALIGNMENT ShutdownType;
- } Power;
- struct {
- PCM_RESOURCE_LIST AllocatedResources;
- PCM_RESOURCE_LIST AllocatedResourcesTranslated;
- } StartDevice;
- struct {
- ULONG_PTR ProviderId;
- PVOID DataPath;
- ULONG BufferSize;
- PVOID Buffer;
- } WMI;
- struct {
- PVOID Argument1;
- PVOID Argument2;
- PVOID Argument3;
- PVOID Argument4;
- } Others;
- } Parameters;
- PDEVICE_OBJECT DeviceObject;
- PFILE_OBJECT FileObject;
- PIO_COMPLETION_ROUTINE CompletionRoutine;
- PVOID Context;
- } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
- #if !defined(_AMD64_) && !defined(_IA64_)
- #include <poppack.h>
- #endif
- /* IO_STACK_LOCATION.Control */
- #define SL_PENDING_RETURNED 0x01
- #define SL_ERROR_RETURNED 0x02
- #define SL_INVOKE_ON_CANCEL 0x20
- #define SL_INVOKE_ON_SUCCESS 0x40
- #define SL_INVOKE_ON_ERROR 0x80
- #define METHOD_BUFFERED 0
- #define METHOD_IN_DIRECT 1
- #define METHOD_OUT_DIRECT 2
- #define METHOD_NEITHER 3
- #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
- #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
- #define FILE_SUPERSEDED 0x00000000
- #define FILE_OPENED 0x00000001
- #define FILE_CREATED 0x00000002
- #define FILE_OVERWRITTEN 0x00000003
- #define FILE_EXISTS 0x00000004
- #define FILE_DOES_NOT_EXIST 0x00000005
- #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
- #define FILE_WRITE_TO_END_OF_FILE 0xffffffff
- /* also in winnt.h */
- #define FILE_LIST_DIRECTORY 0x00000001
- #define FILE_READ_DATA 0x00000001
- #define FILE_ADD_FILE 0x00000002
- #define FILE_WRITE_DATA 0x00000002
- #define FILE_ADD_SUBDIRECTORY 0x00000004
- #define FILE_APPEND_DATA 0x00000004
- #define FILE_CREATE_PIPE_INSTANCE 0x00000004
- #define FILE_READ_EA 0x00000008
- #define FILE_WRITE_EA 0x00000010
- #define FILE_EXECUTE 0x00000020
- #define FILE_TRAVERSE 0x00000020
- #define FILE_DELETE_CHILD 0x00000040
- #define FILE_READ_ATTRIBUTES 0x00000080
- #define FILE_WRITE_ATTRIBUTES 0x00000100
- #define FILE_SHARE_READ 0x00000001
- #define FILE_SHARE_WRITE 0x00000002
- #define FILE_SHARE_DELETE 0x00000004
- #define FILE_SHARE_VALID_FLAGS 0x00000007
- #define FILE_ATTRIBUTE_READONLY 0x00000001
- #define FILE_ATTRIBUTE_HIDDEN 0x00000002
- #define FILE_ATTRIBUTE_SYSTEM 0x00000004
- #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
- #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
- #define FILE_ATTRIBUTE_DEVICE 0x00000040
- #define FILE_ATTRIBUTE_NORMAL 0x00000080
- #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
- #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
- #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
- #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
- #define FILE_ATTRIBUTE_OFFLINE 0x00001000
- #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
- #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
- #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
- #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
- #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
- #define FILE_VALID_OPTION_FLAGS 0x00ffffff
- #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
- #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
- #define FILE_VALID_SET_FLAGS 0x00000036
- #define FILE_SUPERSEDE 0x00000000
- #define FILE_OPEN 0x00000001
- #define FILE_CREATE 0x00000002
- #define FILE_OPEN_IF 0x00000003
- #define FILE_OVERWRITE 0x00000004
- #define FILE_OVERWRITE_IF 0x00000005
- #define FILE_MAXIMUM_DISPOSITION 0x00000005
- #define FILE_DIRECTORY_FILE 0x00000001
- #define FILE_WRITE_THROUGH 0x00000002
- #define FILE_SEQUENTIAL_ONLY 0x00000004
- #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
- #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
- #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
- #define FILE_NON_DIRECTORY_FILE 0x00000040
- #define FILE_CREATE_TREE_CONNECTION 0x00000080
- #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
- #define FILE_NO_EA_KNOWLEDGE 0x00000200
- #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
- #define FILE_RANDOM_ACCESS 0x00000800
- #define FILE_DELETE_ON_CLOSE 0x00001000
- #define FILE_OPEN_BY_FILE_ID 0x00002000
- #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
- #define FILE_NO_COMPRESSION 0x00008000
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- #define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
- #define FILE_DISALLOW_EXCLUSIVE 0x00020000
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #define FILE_RESERVE_OPFILTER 0x00100000
- #define FILE_OPEN_REPARSE_POINT 0x00200000
- #define FILE_OPEN_NO_RECALL 0x00400000
- #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
- #define FILE_ANY_ACCESS 0x00000000
- #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
- #define FILE_READ_ACCESS 0x00000001
- #define FILE_WRITE_ACCESS 0x00000002
- #define FILE_ALL_ACCESS \
- (STANDARD_RIGHTS_REQUIRED | \
- SYNCHRONIZE | \
- 0x1FF)
- #define FILE_GENERIC_EXECUTE \
- (STANDARD_RIGHTS_EXECUTE | \
- FILE_READ_ATTRIBUTES | \
- FILE_EXECUTE | \
- SYNCHRONIZE)
- #define FILE_GENERIC_READ \
- (STANDARD_RIGHTS_READ | \
- FILE_READ_DATA | \
- FILE_READ_ATTRIBUTES | \
- FILE_READ_EA | \
- SYNCHRONIZE)
- #define FILE_GENERIC_WRITE \
- (STANDARD_RIGHTS_WRITE | \
- FILE_WRITE_DATA | \
- FILE_WRITE_ATTRIBUTES | \
- FILE_WRITE_EA | \
- FILE_APPEND_DATA | \
- SYNCHRONIZE)
- /* end winnt.h */
- #define WMIREG_ACTION_REGISTER 1
- #define WMIREG_ACTION_DEREGISTER 2
- #define WMIREG_ACTION_REREGISTER 3
- #define WMIREG_ACTION_UPDATE_GUIDS 4
- #define WMIREG_ACTION_BLOCK_IRPS 5
- #define WMIREGISTER 0
- #define WMIUPDATE 1
- typedef VOID
- (NTAPI FWMI_NOTIFICATION_CALLBACK)(
- PVOID Wnode,
- PVOID Context);
- typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
- #ifndef _PCI_X_
- #define _PCI_X_
- typedef struct _PCI_SLOT_NUMBER {
- union {
- struct {
- ULONG DeviceNumber:5;
- ULONG FunctionNumber:3;
- ULONG Reserved:24;
- } bits;
- ULONG AsULONG;
- } u;
- } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
- #define PCI_TYPE0_ADDRESSES 6
- #define PCI_TYPE1_ADDRESSES 2
- #define PCI_TYPE2_ADDRESSES 5
- typedef struct _PCI_COMMON_HEADER {
- PCI_COMMON_HEADER_LAYOUT
- } PCI_COMMON_HEADER, *PPCI_COMMON_HEADER;
- #ifdef __cplusplus
- typedef struct _PCI_COMMON_CONFIG {
- PCI_COMMON_HEADER_LAYOUT
- UCHAR DeviceSpecific[192];
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #else
- typedef struct _PCI_COMMON_CONFIG {
- __extension__ struct {
- PCI_COMMON_HEADER_LAYOUT
- };
- UCHAR DeviceSpecific[192];
- } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
- #endif
- #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific))
- #define PCI_EXTENDED_CONFIG_LENGTH 0x1000
- #define PCI_MAX_DEVICES 32
- #define PCI_MAX_FUNCTION 8
- #define PCI_MAX_BRIDGE_NUMBER 0xFF
- #define PCI_INVALID_VENDORID 0xFFFF
- /* PCI_COMMON_CONFIG.HeaderType */
- #define PCI_MULTIFUNCTION 0x80
- #define PCI_DEVICE_TYPE 0x00
- #define PCI_BRIDGE_TYPE 0x01
- #define PCI_CARDBUS_BRIDGE_TYPE 0x02
- #define PCI_CONFIGURATION_TYPE(PciData) \
- (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
- #define PCI_MULTIFUNCTION_DEVICE(PciData) \
- ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
- /* PCI_COMMON_CONFIG.Command */
- #define PCI_ENABLE_IO_SPACE 0x0001
- #define PCI_ENABLE_MEMORY_SPACE 0x0002
- #define PCI_ENABLE_BUS_MASTER 0x0004
- #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
- #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
- #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
- #define PCI_ENABLE_PARITY 0x0040
- #define PCI_ENABLE_WAIT_CYCLE 0x0080
- #define PCI_ENABLE_SERR 0x0100
- #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
- #define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
- /* PCI_COMMON_CONFIG.Status */
- #define PCI_STATUS_INTERRUPT_PENDING 0x0008
- #define PCI_STATUS_CAPABILITIES_LIST 0x0010
- #define PCI_STATUS_66MHZ_CAPABLE 0x0020
- #define PCI_STATUS_UDF_SUPPORTED 0x0040
- #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
- #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
- #define PCI_STATUS_DEVSEL 0x0600
- #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
- #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
- #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
- #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
- #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
- /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */
- #define PCI_WHICHSPACE_CONFIG 0x0
- #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */
- #define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
- #define PCI_CAPABILITY_ID_AGP 0x02
- #define PCI_CAPABILITY_ID_VPD 0x03
- #define PCI_CAPABILITY_ID_SLOT_ID 0x04
- #define PCI_CAPABILITY_ID_MSI 0x05
- #define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
- #define PCI_CAPABILITY_ID_PCIX 0x07
- #define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
- #define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
- #define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
- #define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
- #define PCI_CAPABILITY_ID_SHPC 0x0C
- #define PCI_CAPABILITY_ID_P2P_SSID 0x0D
- #define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
- #define PCI_CAPABILITY_ID_SECURE 0x0F
- #define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
- #define PCI_CAPABILITY_ID_MSIX 0x11
- typedef struct _PCI_CAPABILITIES_HEADER {
- UCHAR CapabilityID;
- UCHAR Next;
- } PCI_CAPABILITIES_HEADER, *PPCI_CAPABILITIES_HEADER;
- typedef struct _PCI_PMC {
- UCHAR Version:3;
- UCHAR PMEClock:1;
- UCHAR Rsvd1:1;
- UCHAR DeviceSpecificInitialization:1;
- UCHAR Rsvd2:2;
- struct _PM_SUPPORT {
- UCHAR Rsvd2:1;
- UCHAR D1:1;
- UCHAR D2:1;
- UCHAR PMED0:1;
- UCHAR PMED1:1;
- UCHAR PMED2:1;
- UCHAR PMED3Hot:1;
- UCHAR PMED3Cold:1;
- } Support;
- } PCI_PMC, *PPCI_PMC;
- typedef struct _PCI_PMCSR {
- USHORT PowerState:2;
- USHORT Rsvd1:6;
- USHORT PMEEnable:1;
- USHORT DataSelect:4;
- USHORT DataScale:2;
- USHORT PMEStatus:1;
- } PCI_PMCSR, *PPCI_PMCSR;
- typedef struct _PCI_PMCSR_BSE {
- UCHAR Rsvd1:6;
- UCHAR D3HotSupportsStopClock:1;
- UCHAR BusPowerClockControlEnabled:1;
- } PCI_PMCSR_BSE, *PPCI_PMCSR_BSE;
- typedef struct _PCI_PM_CAPABILITY {
- PCI_CAPABILITIES_HEADER Header;
- union {
- PCI_PMC Capabilities;
- USHORT AsUSHORT;
- } PMC;
- union {
- PCI_PMCSR ControlStatus;
- USHORT AsUSHORT;
- } PMCSR;
- union {
- PCI_PMCSR_BSE BridgeSupport;
- UCHAR AsUCHAR;
- } PMCSR_BSE;
- UCHAR Data;
- } PCI_PM_CAPABILITY, *PPCI_PM_CAPABILITY;
- typedef struct {
- PCI_CAPABILITIES_HEADER Header;
- union {
- struct {
- USHORT DataParityErrorRecoveryEnable:1;
- USHORT EnableRelaxedOrdering:1;
- USHORT MaxMemoryReadByteCount:2;
- USHORT MaxOutstandingSplitTransactions:3;
- USHORT Reserved:9;
- } bits;
- USHORT AsUSHORT;
- } Command;
- union {
- struct {
- ULONG FunctionNumber:3;
- ULONG DeviceNumber:5;
- ULONG BusNumber:8;
- ULONG Device64Bit:1;
- ULONG Capable133MHz:1;
- ULONG SplitCompletionDiscarded:1;
- ULONG UnexpectedSplitCompletion:1;
- ULONG DeviceComplexity:1;
- ULONG DesignedMaxMemoryReadByteCount:2;
- ULONG DesignedMaxOutstandingSplitTransactions:3;
- ULONG DesignedMaxCumulativeReadSize:3;
- ULONG ReceivedSplitCompletionErrorMessage:1;
- ULONG CapablePCIX266:1;
- ULONG CapablePCIX533:1;
- } bits;
- ULONG AsULONG;
- } Status;
- } PCI_X_CAPABILITY, *PPCI_X_CAPABILITY;
- #define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
- #define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
- #define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
- #define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
- #define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
- #define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
- #define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
- #define PCI_EXPRESS_MFVC_CAP_ID 0x0008
- #define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
- #define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
- #define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
- typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
- USHORT CapabilityID;
- USHORT Version:4;
- USHORT Next:12;
- } PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER, *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
- typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- ULONG LowSerialNumber;
- ULONG HighSerialNumber;
- } PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY, *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
- typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
- _ANONYMOUS_STRUCT struct {
- ULONG Undefined:1;
- ULONG Reserved1:3;
- ULONG DataLinkProtocolError:1;
- ULONG SurpriseDownError:1;
- ULONG Reserved2:6;
- ULONG PoisonedTLP:1;
- ULONG FlowControlProtocolError:1;
- ULONG CompletionTimeout:1;
- ULONG CompleterAbort:1;
- ULONG UnexpectedCompletion:1;
- ULONG ReceiverOverflow:1;
- ULONG MalformedTLP:1;
- ULONG ECRCError:1;
- ULONG UnsupportedRequestError:1;
- ULONG Reserved3:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
- typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_CORRECTABLE_ERROR_STATUS, *PPCI_CORRECTABLE_ERROR_STATUS;
- typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG ReceiverError:1;
- ULONG Reserved1:5;
- ULONG BadTLP:1;
- ULONG BadDLLP:1;
- ULONG ReplayNumRollover:1;
- ULONG Reserved2:3;
- ULONG ReplayTimerTimeout:1;
- ULONG AdvisoryNonFatalError:1;
- ULONG Reserved3:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_CORRECTABLE_ERROR_MASK, *PPCI_CORRECTABLE_ERROR_MASK;
- typedef union _PCI_EXPRESS_AER_CAPABILITIES {
- _ANONYMOUS_STRUCT struct {
- ULONG FirstErrorPointer:5;
- ULONG ECRCGenerationCapable:1;
- ULONG ECRCGenerationEnable:1;
- ULONG ECRCCheckCapable:1;
- ULONG ECRCCheckEnable:1;
- ULONG Reserved:23;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_AER_CAPABILITIES, *PPCI_EXPRESS_AER_CAPABILITIES;
- typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
- _ANONYMOUS_STRUCT struct {
- ULONG CorrectableErrorReportingEnable:1;
- ULONG NonFatalErrorReportingEnable:1;
- ULONG FatalErrorReportingEnable:1;
- ULONG Reserved:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ROOT_ERROR_COMMAND, *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
- typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG CorrectableErrorReceived:1;
- ULONG MultipleCorrectableErrorsReceived:1;
- ULONG UncorrectableErrorReceived:1;
- ULONG MultipleUncorrectableErrorsReceived:1;
- ULONG FirstUncorrectableFatal:1;
- ULONG NonFatalErrorMessagesReceived:1;
- ULONG FatalErrorMessagesReceived:1;
- ULONG Reserved:20;
- ULONG AdvancedErrorInterruptMessageNumber:5;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ROOT_ERROR_STATUS, *PPCI_EXPRESS_ROOT_ERROR_STATUS;
- typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
- _ANONYMOUS_STRUCT struct {
- USHORT CorrectableSourceIdFun:3;
- USHORT CorrectableSourceIdDev:5;
- USHORT CorrectableSourceIdBus:8;
- USHORT UncorrectableSourceIdFun:3;
- USHORT UncorrectableSourceIdDev:5;
- USHORT UncorrectableSourceIdBus:8;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_ERROR_SOURCE_ID, *PPCI_EXPRESS_ERROR_SOURCE_ID;
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
- typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
- _ANONYMOUS_STRUCT struct {
- ULONG TargetAbortOnSplitCompletion:1;
- ULONG MasterAbortOnSplitCompletion:1;
- ULONG ReceivedTargetAbort:1;
- ULONG ReceivedMasterAbort:1;
- ULONG RsvdZ:1;
- ULONG UnexpectedSplitCompletionError:1;
- ULONG UncorrectableSplitCompletion:1;
- ULONG UncorrectableDataError:1;
- ULONG UncorrectableAttributeError:1;
- ULONG UncorrectableAddressError:1;
- ULONG DelayedTransactionDiscardTimerExpired:1;
- ULONG PERRAsserted:1;
- ULONG SERRAsserted:1;
- ULONG InternalBridgeError:1;
- ULONG Reserved:18;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY, *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
- typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
- _ANONYMOUS_STRUCT struct {
- ULONG SecondaryUncorrectableFirstErrorPtr:5;
- ULONG Reserved:27;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SEC_AER_CAPABILITIES, *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
- #define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001
- #define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002
- #define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004
- #define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
- (ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | \
- ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING)
- typedef struct _PCI_EXPRESS_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
- } PCI_EXPRESS_AER_CAPABILITY, *PPCI_EXPRESS_AER_CAPABILITY;
- typedef struct _PCI_EXPRESS_ROOTPORT_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
- PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
- PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
- } PCI_EXPRESS_ROOTPORT_AER_CAPABILITY, *PPCI_EXPRESS_ROOTPORT_AER_CAPABILITY;
- typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
- PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
- PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
- PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
- PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
- ULONG HeaderLog[4];
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
- PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
- PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
- ULONG SecHeaderLog[4];
- } PCI_EXPRESS_BRIDGE_AER_CAPABILITY, *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
- typedef union _PCI_EXPRESS_SRIOV_CAPS {
- _ANONYMOUS_STRUCT struct {
- ULONG VFMigrationCapable:1;
- ULONG Reserved1:20;
- ULONG VFMigrationInterruptNumber:11;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SRIOV_CAPS, *PPCI_EXPRESS_SRIOV_CAPS;
- typedef union _PCI_EXPRESS_SRIOV_CONTROL {
- _ANONYMOUS_STRUCT struct {
- USHORT VFEnable:1;
- USHORT VFMigrationEnable:1;
- USHORT VFMigrationInterruptEnable:1;
- USHORT VFMemorySpaceEnable:1;
- USHORT ARICapableHierarchy:1;
- USHORT Reserved1:11;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
- } PCI_EXPRESS_SRIOV_CONTROL, *PPCI_EXPRESS_SRIOV_CONTROL;
- typedef union _PCI_EXPRESS_SRIOV_STATUS {
- _ANONYMOUS_STRUCT struct {
- USHORT VFMigrationStatus:1;
- USHORT Reserved1:15;
- } DUMMYSTRUCTNAME;
- USHORT AsUSHORT;
- } PCI_EXPRESS_SRIOV_STATUS, *PPCI_EXPRESS_SRIOV_STATUS;
- typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
- _ANONYMOUS_STRUCT struct {
- ULONG VFMigrationStateBIR:3;
- ULONG VFMigrationStateOffset:29;
- } DUMMYSTRUCTNAME;
- ULONG AsULONG;
- } PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY, *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
- typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
- PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
- PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
- PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
- PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
- USHORT InitialVFs;
- USHORT TotalVFs;
- USHORT NumVFs;
- UCHAR FunctionDependencyLink;
- UCHAR RsvdP1;
- USHORT FirstVFOffset;
- USHORT VFStride;
- USHORT RsvdP2;
- USHORT VFDeviceId;
- ULONG SupportedPageSizes;
- ULONG SystemPageSize;
- ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
- PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
- } PCI_EXPRESS_SRIOV_CAPABILITY, *PPCI_EXPRESS_SRIOV_CAPABILITY;
- /* PCI device classes */
- #define PCI_CLASS_PRE_20 0x00
- #define PCI_CLASS_MASS_STORAGE_CTLR 0x01
- #define PCI_CLASS_NETWORK_CTLR 0x02
- #define PCI_CLASS_DISPLAY_CTLR 0x03
- #define PCI_CLASS_MULTIMEDIA_DEV 0x04
- #define PCI_CLASS_MEMORY_CTLR 0x05
- #define PCI_CLASS_BRIDGE_DEV 0x06
- #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
- #define PCI_CLASS_BASE_SYSTEM_DEV 0x08
- #define PCI_CLASS_INPUT_DEV 0x09
- #define PCI_CLASS_DOCKING_STATION 0x0a
- #define PCI_CLASS_PROCESSOR 0x0b
- #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c
- #define PCI_CLASS_WIRELESS_CTLR 0x0d
- #define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0e
- #define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0f
- #define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
- #define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
- #define PCI_CLASS_NOT_DEFINED 0xff
- /* PCI device subclasses for class 0 */
- #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
- #define PCI_SUBCLASS_PRE_20_VGA 0x01
- /* PCI device subclasses for class 1 (mass storage controllers)*/
- #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
- #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
- #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
- #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
- #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
- #define PCI_SUBCLASS_MSC_OTHER 0x80
- /* PCI device subclasses for class 2 (network controllers)*/
- #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
- #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
- #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
- #define PCI_SUBCLASS_NET_ATM_CTLR 0x03
- #define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
- #define PCI_SUBCLASS_NET_OTHER 0x80
- /* PCI device subclasses for class 3 (display controllers)*/
- #define PCI_SUBCLASS_VID_VGA_CTLR 0x00
- #define PCI_SUBCLASS_VID_XGA_CTLR 0x01
- #define PCI_SUBCLASS_VID_3D_CTLR 0x02
- #define PCI_SUBCLASS_VID_OTHER 0x80
- /* PCI device subclasses for class 4 (multimedia device)*/
- #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
- #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
- #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
- #define PCI_SUBCLASS_MM_OTHER 0x80
- /* PCI device subclasses for class 5 (memory controller)*/
- #define PCI_SUBCLASS_MEM_RAM 0x00
- #define PCI_SUBCLASS_MEM_FLASH 0x01
- #define PCI_SUBCLASS_MEM_OTHER 0x80
- /* PCI device subclasses for class 6 (bridge device)*/
- #define PCI_SUBCLASS_BR_HOST 0x00
- #define PCI_SUBCLASS_BR_ISA 0x01
- #define PCI_SUBCLASS_BR_EISA 0x02
- #define PCI_SUBCLASS_BR_MCA 0x03
- #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
- #define PCI_SUBCLASS_BR_PCMCIA 0x05
- #define PCI_SUBCLASS_BR_NUBUS 0x06
- #define PCI_SUBCLASS_BR_CARDBUS 0x07
- #define PCI_SUBCLASS_BR_RACEWAY 0x08
- #define PCI_SUBCLASS_BR_OTHER 0x80
- #define PCI_SUBCLASS_COM_SERIAL 0x00
- #define PCI_SUBCLASS_COM_PARALLEL 0x01
- #define PCI_SUBCLASS_COM_MULTIPORT 0x02
- #define PCI_SUBCLASS_COM_MODEM 0x03
- #define PCI_SUBCLASS_COM_OTHER 0x80
- #define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
- #define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
- #define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
- #define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
- #define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
- #define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
- #define PCI_SUBCLASS_SYS_OTHER 0x80
- #define PCI_SUBCLASS_INP_KEYBOARD 0x00
- #define PCI_SUBCLASS_INP_DIGITIZER 0x01
- #define PCI_SUBCLASS_INP_MOUSE 0x02
- #define PCI_SUBCLASS_INP_SCANNER 0x03
- #define PCI_SUBCLASS_INP_GAMEPORT 0x04
- #define PCI_SUBCLASS_INP_OTHER 0x80
- #define PCI_SUBCLASS_DOC_GENERIC 0x00
- #define PCI_SUBCLASS_DOC_OTHER 0x80
- #define PCI_SUBCLASS_PROC_386 0x00
- #define PCI_SUBCLASS_PROC_486 0x01
- #define PCI_SUBCLASS_PROC_PENTIUM 0x02
- #define PCI_SUBCLASS_PROC_ALPHA 0x10
- #define PCI_SUBCLASS_PROC_POWERPC 0x20
- #define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
- /* PCI device subclasses for class C (serial bus controller)*/
- #define PCI_SUBCLASS_SB_IEEE1394 0x00
- #define PCI_SUBCLASS_SB_ACCESS 0x01
- #define PCI_SUBCLASS_SB_SSA 0x02
- #define PCI_SUBCLASS_SB_USB 0x03
- #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
- #define PCI_SUBCLASS_SB_SMBUS 0x05
- #define PCI_SUBCLASS_WIRELESS_IRDA 0x00
- #define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
- #define PCI_SUBCLASS_WIRELESS_RF 0x10
- #define PCI_SUBCLASS_WIRELESS_OTHER 0x80
- #define PCI_SUBCLASS_INTIO_I2O 0x00
- #define PCI_SUBCLASS_SAT_TV 0x01
- #define PCI_SUBCLASS_SAT_AUDIO 0x02
- #define PCI_SUBCLASS_SAT_VOICE 0x03
- #define PCI_SUBCLASS_SAT_DATA 0x04
- #define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
- #define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
- #define PCI_SUBCLASS_CRYPTO_OTHER 0x80
- #define PCI_SUBCLASS_DASP_DPIO 0x00
- #define PCI_SUBCLASS_DASP_OTHER 0x80
- #define PCI_ADDRESS_IO_SPACE 0x00000001
- #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
- #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
- #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc
- #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0
- #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800
- #define PCI_TYPE_32BIT 0
- #define PCI_TYPE_20BIT 2
- #define PCI_TYPE_64BIT 4
- #define PCI_ROMADDRESS_ENABLED 0x00000001
- #endif /* _PCI_X_ */
- #define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
- typedef NTSTATUS
- (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)(
- IN OUT PVOID Context);
- typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
- typedef NTSTATUS
- (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)(
- IN OUT PVOID Context);
- typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
- typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
- PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
- } PCI_EXPRESS_LINK_QUIESCENT_INTERFACE, *PPCI_EXPRESS_LINK_QUIESCENT_INTERFACE;
- #define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
- typedef ULONG
- (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)(
- IN PVOID Context,
- OUT PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
- typedef ULONG
- (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)(
- IN PVOID Context,
- IN PVOID Buffer,
- IN ULONG Offset,
- IN ULONG Length);
- typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
- PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
- } PCI_EXPRESS_ROOT_PORT_INTERFACE, *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
- #define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
- typedef NTSTATUS
- (NTAPI PCI_MSIX_SET_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry,
- IN ULONG MessageNumber);
- typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
- typedef NTSTATUS
- (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry);
- typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
- typedef NTSTATUS
- (NTAPI PCI_MSIX_GET_ENTRY)(
- IN PVOID Context,
- IN ULONG TableEntry,
- OUT PULONG MessageNumber,
- OUT PBOOLEAN Masked);
- typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
- typedef NTSTATUS
- (NTAPI PCI_MSIX_GET_TABLE_SIZE)(
- IN PVOID Context,
- OUT PULONG TableSize);
- typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
- typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
- USHORT Size;
- USHORT Version;
- PVOID Context;
- PINTERFACE_REFERENCE InterfaceReference;
- PINTERFACE_DEREFERENCE InterfaceDereference;
- PPCI_MSIX_SET_ENTRY SetTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
- PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
- PPCI_MSIX_GET_ENTRY GetTableEntry;
- PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
- } PCI_MSIX_TABLE_CONFIG_INTERFACE, *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
- #define PCI_MSIX_TABLE_CONFIG_MINIMUM_SIZE \
- RTL_SIZEOF_THROUGH_FIELD(PCI_MSIX_TABLE_CONFIG_INTERFACE, UnmaskTableEntry)
- /******************************************************************************
- * Object Manager Types *
- ******************************************************************************/
- #define MAXIMUM_FILENAME_LENGTH 256
- #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
- #define OBJECT_TYPE_CREATE 0x0001
- #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
- #define DIRECTORY_QUERY 0x0001
- #define DIRECTORY_TRAVERSE 0x0002
- #define DIRECTORY_CREATE_OBJECT 0x0004
- #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
- #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
- #define SYMBOLIC_LINK_QUERY 0x0001
- #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
- #define DUPLICATE_CLOSE_SOURCE 0x00000001
- #define DUPLICATE_SAME_ACCESS 0x00000002
- #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
- #define OB_FLT_REGISTRATION_VERSION_0100 0x0100
- #define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
- typedef ULONG OB_OPERATION;
- #define OB_OPERATION_HANDLE_CREATE 0x00000001
- #define OB_OPERATION_HANDLE_DUPLICATE 0x00000002
- typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
- IN OUT ACCESS_MASK DesiredAccess;
- IN ACCESS_MASK OriginalDesiredAccess;
- } OB_PRE_CREATE_HANDLE_INFORMATION, *POB_PRE_CREATE_HANDLE_INFORMATION;
- typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
- IN OUT ACCESS_MASK DesiredAccess;
- IN ACCESS_MASK OriginalDesiredAccess;
- IN PVOID SourceProcess;
- IN PVOID TargetProcess;
- } OB_PRE_DUPLICATE_HANDLE_INFORMATION, *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
- typedef union _OB_PRE_OPERATION_PARAMETERS {
- IN OUT OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- IN OUT OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
- } OB_PRE_OPERATION_PARAMETERS, *POB_PRE_OPERATION_PARAMETERS;
- typedef struct _OB_PRE_OPERATION_INFORMATION {
- IN OB_OPERATION Operation;
- _ANONYMOUS_UNION union {
- IN ULONG Flags;
- _ANONYMOUS_STRUCT struct {
- IN ULONG KernelHandle:1;
- IN ULONG Reserved:31;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- IN PVOID Object;
- IN POBJECT_TYPE ObjectType;
- OUT PVOID CallContext;
- IN POB_PRE_OPERATION_PARAMETERS Parameters;
- } OB_PRE_OPERATION_INFORMATION, *POB_PRE_OPERATION_INFORMATION;
- typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
- IN ACCESS_MASK GrantedAccess;
- } OB_POST_CREATE_HANDLE_INFORMATION, *POB_POST_CREATE_HANDLE_INFORMATION;
- typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
- IN ACCESS_MASK GrantedAccess;
- } OB_POST_DUPLICATE_HANDLE_INFORMATION, *POB_POST_DUPLICATE_HANDLE_INFORMATION;
- typedef union _OB_POST_OPERATION_PARAMETERS {
- IN OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
- IN OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
- } OB_POST_OPERATION_PARAMETERS, *POB_POST_OPERATION_PARAMETERS;
- typedef struct _OB_POST_OPERATION_INFORMATION {
- IN OB_OPERATION Operation;
- _ANONYMOUS_UNION union {
- IN ULONG Flags;
- _ANONYMOUS_STRUCT struct {
- IN ULONG KernelHandle:1;
- IN ULONG Reserved:31;
- } DUMMYSTRUCTNAME;
- } DUMMYUNIONNAME;
- IN PVOID Object;
- IN POBJECT_TYPE ObjectType;
- IN PVOID CallContext;
- IN NTSTATUS ReturnStatus;
- IN POB_POST_OPERATION_PARAMETERS Parameters;
- } OB_POST_OPERATION_INFORMATION,*POB_POST_OPERATION_INFORMATION;
- typedef enum _OB_PREOP_CALLBACK_STATUS {
- OB_PREOP_SUCCESS
- } OB_PREOP_CALLBACK_STATUS, *POB_PREOP_CALLBACK_STATUS;
- typedef OB_PREOP_CALLBACK_STATUS
- (NTAPI *POB_PRE_OPERATION_CALLBACK)(
- IN PVOID RegistrationContext,
- IN OUT POB_PRE_OPERATION_INFORMATION OperationInformation);
- typedef VOID
- (NTAPI *POB_POST_OPERATION_CALLBACK)(
- IN PVOID RegistrationContext,
- IN POB_POST_OPERATION_INFORMATION OperationInformation);
- typedef struct _OB_OPERATION_REGISTRATION {
- IN POBJECT_TYPE *ObjectType;
- IN OB_OPERATION Operations;
- IN POB_PRE_OPERATION_CALLBACK PreOperation;
- IN POB_POST_OPERATION_CALLBACK PostOperation;
- } OB_OPERATION_REGISTRATION, *POB_OPERATION_REGISTRATION;
- typedef struct _OB_CALLBACK_REGISTRATION {
- IN USHORT Version;
- IN USHORT OperationRegistrationCount;
- IN UNICODE_STRING Altitude;
- IN PVOID RegistrationContext;
- IN OB_OPERATION_REGISTRATION *OperationRegistration;
- } OB_CALLBACK_REGISTRATION, *POB_CALLBACK_REGISTRATION;
- typedef struct _OBJECT_NAME_INFORMATION {
- UNICODE_STRING Name;
- } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
- /* Exported object types */
- extern POBJECT_TYPE NTSYSAPI *CmKeyObjectType;
- extern POBJECT_TYPE NTSYSAPI *ExEventObjectType;
- extern POBJECT_TYPE NTSYSAPI *ExSemaphoreObjectType;
- extern POBJECT_TYPE NTSYSAPI *IoFileObjectType;
- extern POBJECT_TYPE NTSYSAPI *PsThreadType;
- extern POBJECT_TYPE NTSYSAPI *SeTokenObjectType;
- extern POBJECT_TYPE NTSYSAPI *PsProcessType;
- extern POBJECT_TYPE NTSYSAPI *TmEnlistmentObjectType;
- extern POBJECT_TYPE NTSYSAPI *TmResourceManagerObjectType;
- extern POBJECT_TYPE NTSYSAPI *TmTransactionManagerObjectType;
- extern POBJECT_TYPE NTSYSAPI *TmTransactionObjectType;
- /******************************************************************************
- * Process Manager Types *
- ******************************************************************************/
- #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
- #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
- #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
- #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
- #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
- /* Thread Access Rights */
- #define THREAD_TERMINATE 0x0001
- #define THREAD_SUSPEND_RESUME 0x0002
- #define THREAD_ALERT 0x0004
- #define THREAD_GET_CONTEXT 0x0008
- #define THREAD_SET_CONTEXT 0x0010
- #define THREAD_SET_INFORMATION 0x0020
- #define THREAD_SET_LIMITED_INFORMATION 0x0400
- #define THREAD_QUERY_LIMITED_INFORMATION 0x0800
- #define PROCESS_DUP_HANDLE (0x0040)
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
- #else
- #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
- #endif
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFF)
- #else
- #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
- #endif
- #define LOW_PRIORITY 0
- #define LOW_REALTIME_PRIORITY 16
- #define HIGH_PRIORITY 31
- #define MAXIMUM_PRIORITY 32
- /******************************************************************************
- * WMI Library Support Types *
- ******************************************************************************/
- #ifdef RUN_WPP
- #include <evntrace.h>
- #include <stdarg.h>
- #endif
- #ifndef _TRACEHANDLE_DEFINED
- #define _TRACEHANDLE_DEFINED
- typedef ULONG64 TRACEHANDLE, *PTRACEHANDLE;
- #endif
- #ifndef TRACE_INFORMATION_CLASS_DEFINE
- typedef struct _ETW_TRACE_SESSION_SETTINGS {
- ULONG Version;
- ULONG BufferSize;
- ULONG MinimumBuffers;
- ULONG MaximumBuffers;
- ULONG LoggerMode;
- ULONG FlushTimer;
- ULONG FlushThreshold;
- ULONG ClockType;
- } ETW_TRACE_SESSION_SETTINGS, *PETW_TRACE_SESSION_SETTINGS;
- typedef enum _TRACE_INFORMATION_CLASS {
- TraceIdClass,
- TraceHandleClass,
- TraceEnableFlagsClass,
- TraceEnableLevelClass,
- GlobalLoggerHandleClass,
- EventLoggerHandleClass,
- AllLoggerHandlesClass,
- TraceHandleByNameClass,
- LoggerEventsLostClass,
- TraceSessionSettingsClass,
- LoggerEventsLoggedClass,
- DiskIoNotifyRoutinesClass,
- TraceInformationClassReserved1,
- FltIoNotifyRoutinesClass,
- TraceInformationClassReserved2,
- WdfNotifyRoutinesClass,
- MaxTraceInformationClass
- } TRACE_INFORMATION_CLASS;
- #endif /* TRACE_INFORMATION_CLASS_DEFINE */
- #ifndef _ETW_KM_
- #define _ETW_KM_
- #endif
- #include <evntprov.h>
- typedef VOID
- (NTAPI *PETWENABLECALLBACK)(
- IN LPCGUID SourceId,
- IN ULONG ControlCode,
- IN UCHAR Level,
- IN ULONGLONG MatchAnyKeyword,
- IN ULONGLONG MatchAllKeyword,
- IN PEVENT_FILTER_DESCRIPTOR FilterData OPTIONAL,
- IN OUT PVOID CallbackContext OPTIONAL);
- #define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001
- #if defined(_M_IX86)
- /** Kernel definitions for x86 **/
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMCI_LEVEL 5
- #define PROFILE_LEVEL 27
- #define CLOCK1_LEVEL 28
- #define CLOCK2_LEVEL 28
- #define IPI_LEVEL 29
- #define POWER_LEVEL 30
- #define HIGH_LEVEL 31
- #define CLOCK_LEVEL CLOCK2_LEVEL
- #define KIP0PCRADDRESS 0xffdff000
- #define KI_USER_SHARED_DATA 0xffdf0000
- #define SharedUserData ((KUSER_SHARED_DATA * CONST)KI_USER_SHARED_DATA)
- #define PAGE_SIZE 0x1000
- #define PAGE_SHIFT 12L
- #define KeGetDcacheFillSize() 1L
- #define EFLAG_SIGN 0x8000
- #define EFLAG_ZERO 0x4000
- #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
- #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
- #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
- #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
- typedef struct _KFLOATING_SAVE {
- ULONG ControlWord;
- ULONG StatusWord;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- ULONG Cr0NpxState;
- ULONG Spare1;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
- extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
- #define YieldProcessor _mm_pause
- FORCEINLINE
- VOID
- KeMemoryBarrier(VOID)
- {
- volatile LONG Barrier;
- #if defined(__GNUC__)
- __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
- #elif defined(_MSC_VER)
- __asm xchg [Barrier], eax
- #endif
- }
- NTHALAPI
- KIRQL
- NTAPI
- KeGetCurrentIrql(VOID);
- NTHALAPI
- VOID
- FASTCALL
- KfLowerIrql(
- IN KIRQL NewIrql);
- #define KeLowerIrql(a) KfLowerIrql(a)
- NTHALAPI
- KIRQL
- FASTCALL
- KfRaiseIrql(
- IN KIRQL NewIrql);
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
- NTHALAPI
- KIRQL
- FASTCALL
- KfAcquireSpinLock(
- IN OUT PKSPIN_LOCK SpinLock);
- #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a)
- NTHALAPI
- VOID
- FASTCALL
- KfReleaseSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL NewIrql);
- #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b)
- NTKERNELAPI
- VOID
- FASTCALL
- KefAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
- #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
- NTKERNELAPI
- VOID
- FASTCALL
- KefReleaseSpinLockFromDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
- #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
- NTSYSAPI
- PKTHREAD
- NTAPI
- KeGetCurrentThread(VOID);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeSaveFloatingPointState(
- OUT PKFLOATING_SAVE FloatSave);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeRestoreFloatingPointState(
- IN PKFLOATING_SAVE FloatSave);
- /* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
- */
- #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
- /* x86 and x64 performs a 0x2C interrupt */
- #define DbgRaiseAssertionFailure __int2c
- FORCEINLINE
- VOID
- _KeQueryTickCount(
- OUT PLARGE_INTEGER CurrentCount)
- {
- for (;;) {
- #ifdef NONAMELESSUNION
- CurrentCount->s.HighPart = KeTickCount.High1Time;
- CurrentCount->s.LowPart = KeTickCount.LowPart;
- if (CurrentCount->s.HighPart == KeTickCount.High2Time) break;
- #else
- CurrentCount->HighPart = KeTickCount.High1Time;
- CurrentCount->LowPart = KeTickCount.LowPart;
- if (CurrentCount->HighPart == KeTickCount.High2Time) break;
- #endif
- YieldProcessor();
- }
- }
- #define KeQueryTickCount(CurrentCount) _KeQueryTickCount(CurrentCount)
- #elif defined(_M_AMD64)
- /** Kernel definitions for AMD64 **/
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMCI_LEVEL 5
- #define CLOCK_LEVEL 13
- #define IPI_LEVEL 14
- #define DRS_LEVEL 14
- #define POWER_LEVEL 14
- #define PROFILE_LEVEL 15
- #define HIGH_LEVEL 15
- #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
- #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA)
- #define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
- #define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
- #define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
- #define PAGE_SIZE 0x1000
- #define PAGE_SHIFT 12L
- #define EFLAG_SIGN 0x8000
- #define EFLAG_ZERO 0x4000
- #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
- typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
- typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
- #define KeQueryInterruptTime() \
- (*(volatile ULONG64*)SharedInterruptTime)
- #define KeQuerySystemTime(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
- #define KeQueryTickCount(CurrentCount) \
- *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
- #define KeGetDcacheFillSize() 1L
- #define YieldProcessor _mm_pause
- FORCEINLINE
- KIRQL
- KeGetCurrentIrql(VOID)
- {
- return (KIRQL)__readcr8();
- }
- FORCEINLINE
- VOID
- KeLowerIrql(IN KIRQL NewIrql)
- {
- //ASSERT(KeGetCurrentIrql() >= NewIrql);
- __writecr8(NewIrql);
- }
- FORCEINLINE
- KIRQL
- KfRaiseIrql(IN KIRQL NewIrql)
- {
- KIRQL OldIrql;
- OldIrql = (KIRQL)__readcr8();
- //ASSERT(OldIrql <= NewIrql);
- __writecr8(NewIrql);
- return OldIrql;
- }
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- FORCEINLINE
- KIRQL
- KeRaiseIrqlToDpcLevel(VOID)
- {
- return KfRaiseIrql(DISPATCH_LEVEL);
- }
- FORCEINLINE
- KIRQL
- KeRaiseIrqlToSynchLevel(VOID)
- {
- return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
- }
- FORCEINLINE
- PKTHREAD
- KeGetCurrentThread(VOID)
- {
- return (struct _KTHREAD *)__readgsqword(0x188);
- }
- /* VOID
- * KeFlushIoBuffers(
- * IN PMDL Mdl,
- * IN BOOLEAN ReadOperation,
- * IN BOOLEAN DmaOperation)
- */
- #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
- /* x86 and x64 performs a 0x2C interrupt */
- #define DbgRaiseAssertionFailure __int2c
- #elif defined(_M_IA64)
- /** Kernel definitions for IA64 **/
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define CMC_LEVEL 3
- #define DEVICE_LEVEL_BASE 4
- #define PC_LEVEL 12
- #define IPI_LEVEL 14
- #define DRS_LEVEL 14
- #define CLOCK_LEVEL 13
- #define POWER_LEVEL 15
- #define PROFILE_LEVEL 15
- #define HIGH_LEVEL 15
- #define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000))
- extern volatile LARGE_INTEGER KeTickCount;
- #define PAUSE_PROCESSOR __yield();
- FORCEINLINE
- VOID
- KeFlushWriteBuffer(VOID)
- {
- __mf ();
- return;
- }
- NTSYSAPI
- PKTHREAD
- NTAPI
- KeGetCurrentThread(VOID);
- #elif defined(_M_PPC)
- /* Interrupt request levels */
- #define PASSIVE_LEVEL 0
- #define LOW_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define PROFILE_LEVEL 27
- #define CLOCK1_LEVEL 28
- #define CLOCK2_LEVEL 28
- #define IPI_LEVEL 29
- #define POWER_LEVEL 30
- #define HIGH_LEVEL 31
- //
- // Used to contain PFNs and PFN counts
- //
- typedef ULONG PFN_COUNT;
- typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
- typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
- typedef struct _KFLOATING_SAVE {
- ULONG Dummy;
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
- typedef struct _KPCR_TIB {
- PVOID ExceptionList; /* 00 */
- PVOID StackBase; /* 04 */
- PVOID StackLimit; /* 08 */
- PVOID SubSystemTib; /* 0C */
- _ANONYMOUS_UNION union {
- PVOID FiberData; /* 10 */
- ULONG Version; /* 10 */
- } DUMMYUNIONNAME;
- PVOID ArbitraryUserPointer; /* 14 */
- struct _KPCR_TIB *Self; /* 18 */
- } KPCR_TIB, *PKPCR_TIB; /* 1C */
- #define PCR_MINOR_VERSION 1
- #define PCR_MAJOR_VERSION 1
- typedef struct _KPCR {
- KPCR_TIB Tib; /* 00 */
- struct _KPCR *Self; /* 1C */
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IrrActive; /* 2C */
- ULONG IDR; /* 30 */
- PVOID KdVersionBlock; /* 34 */
- PUSHORT IDT; /* 38 */
- PUSHORT GDT; /* 3C */
- struct _KTSS *TSS; /* 40 */
- USHORT MajorVersion; /* 44 */
- USHORT MinorVersion; /* 46 */
- KAFFINITY SetMember; /* 48 */
- ULONG StallScaleFactor; /* 4C */
- UCHAR SpareUnused; /* 50 */
- UCHAR Number; /* 51 */
- } KPCR, *PKPCR; /* 54 */
- #define KeGetPcr() PCR
- #define YieldProcessor() __asm__ __volatile__("nop");
- FORCEINLINE
- ULONG
- NTAPI
- KeGetCurrentProcessorNumber(VOID)
- {
- ULONG Number;
- __asm__ __volatile__ (
- "lwz %0, %c1(12)\n"
- : "=r" (Number)
- : "i" (FIELD_OFFSET(KPCR, Number))
- );
- return Number;
- }
- NTHALAPI
- VOID
- FASTCALL
- KfLowerIrql(
- IN KIRQL NewIrql);
- #define KeLowerIrql(a) KfLowerIrql(a)
- NTHALAPI
- KIRQL
- FASTCALL
- KfRaiseIrql(
- IN KIRQL NewIrql);
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
- NTHALAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
- #elif defined(_M_MIPS)
- #error MIPS Headers are totally incorrect
- //
- // Used to contain PFNs and PFN counts
- //
- typedef ULONG PFN_COUNT;
- typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
- typedef LONG SPFN_NUMBER, *PSPFN_NUMBER;
- #define PASSIVE_LEVEL 0
- #define APC_LEVEL 1
- #define DISPATCH_LEVEL 2
- #define PROFILE_LEVEL 27
- #define IPI_LEVEL 29
- #define HIGH_LEVEL 31
- typedef struct _KPCR {
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IDR; /* 30 */
- } KPCR, *PKPCR;
- #define KeGetPcr() PCR
- typedef struct _KFLOATING_SAVE {
- } KFLOATING_SAVE, *PKFLOATING_SAVE;
- static __inline
- ULONG
- NTAPI
- KeGetCurrentProcessorNumber(VOID)
- {
- return 0;
- }
- #define YieldProcessor() __asm__ __volatile__("nop");
- #define KeLowerIrql(a) KfLowerIrql(a)
- #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
- NTKERNELAPI
- VOID
- NTAPI
- KfLowerIrql(
- IN KIRQL NewIrql);
- NTKERNELAPI
- KIRQL
- NTAPI
- KfRaiseIrql(
- IN KIRQL NewIrql);
- NTKERNELAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToDpcLevel(VOID);
- NTKERNELAPI
- KIRQL
- NTAPI
- KeRaiseIrqlToSynchLevel(VOID);
- #elif defined(_M_ARM)
- #include <armddk.h>
- #else
- #error Unknown Architecture
- #endif
- /******************************************************************************
- * Runtime Library Functions *
- ******************************************************************************/
- #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
- #define RTL_STATIC_LIST_HEAD(x) LIST_ENTRY x = { &x, &x }
- FORCEINLINE
- VOID
- InitializeListHead(
- OUT PLIST_ENTRY ListHead)
- {
- ListHead->Flink = ListHead->Blink = ListHead;
- }
- FORCEINLINE
- BOOLEAN
- IsListEmpty(
- IN CONST LIST_ENTRY * ListHead)
- {
- return (BOOLEAN)(ListHead->Flink == ListHead);
- }
- FORCEINLINE
- BOOLEAN
- RemoveEntryList(
- IN PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldFlink;
- PLIST_ENTRY OldBlink;
- OldFlink = Entry->Flink;
- OldBlink = Entry->Blink;
- OldFlink->Blink = OldBlink;
- OldBlink->Flink = OldFlink;
- return (BOOLEAN)(OldFlink == OldBlink);
- }
- FORCEINLINE
- PLIST_ENTRY
- RemoveHeadList(
- IN OUT PLIST_ENTRY ListHead)
- {
- PLIST_ENTRY Flink;
- PLIST_ENTRY Entry;
- Entry = ListHead->Flink;
- Flink = Entry->Flink;
- ListHead->Flink = Flink;
- Flink->Blink = ListHead;
- return Entry;
- }
- FORCEINLINE
- PLIST_ENTRY
- RemoveTailList(
- IN OUT PLIST_ENTRY ListHead)
- {
- PLIST_ENTRY Blink;
- PLIST_ENTRY Entry;
- Entry = ListHead->Blink;
- Blink = Entry->Blink;
- ListHead->Blink = Blink;
- Blink->Flink = ListHead;
- return Entry;
- }
- FORCEINLINE
- VOID
- InsertTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldBlink;
- OldBlink = ListHead->Blink;
- Entry->Flink = ListHead;
- Entry->Blink = OldBlink;
- OldBlink->Flink = Entry;
- ListHead->Blink = Entry;
- }
- FORCEINLINE
- VOID
- InsertHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY Entry)
- {
- PLIST_ENTRY OldFlink;
- OldFlink = ListHead->Flink;
- Entry->Flink = OldFlink;
- Entry->Blink = ListHead;
- OldFlink->Blink = Entry;
- ListHead->Flink = Entry;
- }
- FORCEINLINE
- VOID
- AppendTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListToAppend)
- {
- PLIST_ENTRY ListEnd = ListHead->Blink;
- ListHead->Blink->Flink = ListToAppend;
- ListHead->Blink = ListToAppend->Blink;
- ListToAppend->Blink->Flink = ListHead;
- ListToAppend->Blink = ListEnd;
- }
- FORCEINLINE
- PSINGLE_LIST_ENTRY
- PopEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead)
- {
- PSINGLE_LIST_ENTRY FirstEntry;
- FirstEntry = ListHead->Next;
- if (FirstEntry != NULL) {
- ListHead->Next = FirstEntry->Next;
- }
- return FirstEntry;
- }
- FORCEINLINE
- VOID
- PushEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PSINGLE_LIST_ENTRY Entry)
- {
- Entry->Next = ListHead->Next;
- ListHead->Next = Entry;
- }
- #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
- NTSYSAPI
- VOID
- NTAPI
- RtlAssert(
- IN PVOID FailedAssertion,
- IN PVOID FileName,
- IN ULONG LineNumber,
- IN PSTR Message);
- /* VOID
- * RtlCopyMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
- #define RtlCopyMemory(Destination, Source, Length) \
- memcpy(Destination, Source, Length)
- #define RtlCopyBytes RtlCopyMemory
- #if defined(_M_AMD64)
- NTSYSAPI
- VOID
- NTAPI
- RtlCopyMemoryNonTemporal(
- VOID UNALIGNED *Destination,
- CONST VOID UNALIGNED *Source,
- SIZE_T Length);
- #else
- #define RtlCopyMemoryNonTemporal RtlCopyMemory
- #endif
- /* BOOLEAN
- * RtlEqualLuid(
- * IN PLUID Luid1,
- * IN PLUID Luid2)
- */
- #define RtlEqualLuid(Luid1, Luid2) \
- (((Luid1)->LowPart == (Luid2)->LowPart) && ((Luid1)->HighPart == (Luid2)->HighPart))
- /* ULONG
- * RtlEqualMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
- #define RtlEqualMemory(Destination, Source, Length) \
- (!memcmp(Destination, Source, Length))
- /* VOID
- * RtlFillMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length,
- * IN UCHAR Fill)
- */
- #define RtlFillMemory(Destination, Length, Fill) \
- memset(Destination, Fill, Length)
- #define RtlFillBytes RtlFillMemory
- NTSYSAPI
- VOID
- NTAPI
- RtlFreeUnicodeString(
- IN OUT PUNICODE_STRING UnicodeString);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlGUIDFromString(
- IN PUNICODE_STRING GuidString,
- OUT GUID *Guid);
- NTSYSAPI
- VOID
- NTAPI
- RtlInitUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PCWSTR SourceString OPTIONAL);
- /* VOID
- * RtlMoveMemory(
- * IN VOID UNALIGNED *Destination,
- * IN CONST VOID UNALIGNED *Source,
- * IN SIZE_T Length)
- */
- #define RtlMoveMemory(Destination, Source, Length) \
- memmove(Destination, Source, Length)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlStringFromGUID(
- IN REFGUID Guid,
- OUT PUNICODE_STRING GuidString);
- /* VOID
- * RtlZeroMemory(
- * IN VOID UNALIGNED *Destination,
- * IN SIZE_T Length)
- */
- #define RtlZeroMemory(Destination, Length) \
- memset(Destination, 0, Length)
- #define RtlZeroBytes RtlZeroMemory
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlAreBitsClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG Length);
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlAreBitsSet(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG Length);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlAnsiStringToUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PANSI_STRING SourceString,
- IN BOOLEAN AllocateDestinationString);
- NTSYSAPI
- ULONG
- NTAPI
- RtlxAnsiStringToUnicodeSize(
- IN PCANSI_STRING AnsiString);
- #define RtlAnsiStringToUnicodeSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxAnsiStringToUnicodeSize(String) : \
- ((String)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
- )
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlAppendUnicodeStringToString(
- IN OUT PUNICODE_STRING Destination,
- IN PCUNICODE_STRING Source);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlAppendUnicodeToString(
- IN OUT PUNICODE_STRING Destination,
- IN PCWSTR Source);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlCheckRegistryKey(
- IN ULONG RelativeTo,
- IN PWSTR Path);
- NTSYSAPI
- VOID
- NTAPI
- RtlClearAllBits(
- IN PRTL_BITMAP BitMapHeader);
- NTSYSAPI
- VOID
- NTAPI
- RtlClearBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG NumberToClear);
- NTSYSAPI
- SIZE_T
- NTAPI
- RtlCompareMemory(
- IN CONST VOID *Source1,
- IN CONST VOID *Source2,
- IN SIZE_T Length);
- NTSYSAPI
- LONG
- NTAPI
- RtlCompareUnicodeString(
- IN PCUNICODE_STRING String1,
- IN PCUNICODE_STRING String2,
- IN BOOLEAN CaseInSensitive);
- NTSYSAPI
- LONG
- NTAPI
- RtlCompareUnicodeStrings(
- IN PCWCH String1,
- IN SIZE_T String1Length,
- IN PCWCH String2,
- IN SIZE_T String2Length,
- IN BOOLEAN CaseInSensitive);
- NTSYSAPI
- VOID
- NTAPI
- RtlCopyUnicodeString(
- IN OUT PUNICODE_STRING DestinationString,
- IN PCUNICODE_STRING SourceString OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlCreateRegistryKey(
- IN ULONG RelativeTo,
- IN PWSTR Path);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlCreateSecurityDescriptor(
- IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN ULONG Revision);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlDeleteRegistryValue(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN PCWSTR ValueName);
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlEqualUnicodeString(
- IN CONST UNICODE_STRING *String1,
- IN CONST UNICODE_STRING *String2,
- IN BOOLEAN CaseInSensitive);
- #if !defined(_AMD64_) && !defined(_IA64_)
- NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedIntegerMultiply(
- IN LARGE_INTEGER Multiplicand,
- IN LONG Multiplier);
- NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN ULONG Divisor,
- OUT PULONG Remainder OPTIONAL);
- #endif
- #if defined(_X86_) || defined(_IA64_)
- NTSYSAPI
- LARGE_INTEGER
- NTAPI
- RtlExtendedMagicDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER MagicDivisor,
- IN CCHAR ShiftCount);
- #endif
- NTSYSAPI
- VOID
- NTAPI
- RtlFreeAnsiString(
- IN PANSI_STRING AnsiString);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindClearBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindClearBitsAndSet(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindFirstRunClear(
- IN PRTL_BITMAP BitMapHeader,
- OUT PULONG StartingIndex);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindClearRuns(
- IN PRTL_BITMAP BitMapHeader,
- OUT PRTL_BITMAP_RUN RunArray,
- IN ULONG SizeOfRunArray,
- IN BOOLEAN LocateLongestRuns);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindLastBackwardRunClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG FromIndex,
- OUT PULONG StartingRunIndex);
- NTSYSAPI
- CCHAR
- NTAPI
- RtlFindLeastSignificantBit(
- IN ULONGLONG Set);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindLongestRunClear(
- IN PRTL_BITMAP BitMapHeader,
- OUT PULONG StartingIndex);
- NTSYSAPI
- CCHAR
- NTAPI
- RtlFindMostSignificantBit(
- IN ULONGLONG Set);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindNextForwardRunClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG FromIndex,
- OUT PULONG StartingRunIndex);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindSetBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
- NTSYSAPI
- ULONG
- NTAPI
- RtlFindSetBitsAndClear(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG NumberToFind,
- IN ULONG HintIndex);
- NTSYSAPI
- VOID
- NTAPI
- RtlInitAnsiString(
- IN OUT PANSI_STRING DestinationString,
- IN PCSZ SourceString);
- NTSYSAPI
- VOID
- NTAPI
- RtlInitializeBitMap(
- IN PRTL_BITMAP BitMapHeader,
- IN PULONG BitMapBuffer,
- IN ULONG SizeOfBitMap);
- NTSYSAPI
- VOID
- NTAPI
- RtlInitString(
- IN OUT PSTRING DestinationString,
- IN PCSZ SourceString);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlIntegerToUnicodeString(
- IN ULONG Value,
- IN ULONG Base OPTIONAL,
- IN OUT PUNICODE_STRING String);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlInt64ToUnicodeString(
- IN ULONGLONG Value,
- IN ULONG Base OPTIONAL,
- IN OUT PUNICODE_STRING String);
- #ifdef _WIN64
- #define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlInt64ToUnicodeString(Value, Base, String)
- #else
- #define RtlIntPtrToUnicodeString(Value, Base, String) \
- RtlIntegerToUnicodeString(Value, Base, String)
- #endif
- /* BOOLEAN
- * RtlIsZeroLuid(
- * IN PLUID L1);
- */
- #define RtlIsZeroLuid(_L1) \
- ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
- NTSYSAPI
- ULONG
- NTAPI
- RtlLengthSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTSYSAPI
- ULONG
- NTAPI
- RtlNumberOfClearBits(
- IN PRTL_BITMAP BitMapHeader);
- NTSYSAPI
- ULONG
- NTAPI
- RtlNumberOfSetBits(
- IN PRTL_BITMAP BitMapHeader);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlQueryRegistryValues(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN OUT PRTL_QUERY_REGISTRY_TABLE QueryTable,
- IN PVOID Context OPTIONAL,
- IN PVOID Environment OPTIONAL);
- #define SHORT_SIZE (sizeof(USHORT))
- #define SHORT_MASK (SHORT_SIZE - 1)
- #define LONG_SIZE (sizeof(LONG))
- #define LONGLONG_SIZE (sizeof(LONGLONG))
- #define LONG_MASK (LONG_SIZE - 1)
- #define LONGLONG_MASK (LONGLONG_SIZE - 1)
- #define LOWBYTE_MASK 0x00FF
- #define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK)
- #define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK)
- #define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK)
- #define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK)
- NTSYSAPI
- VOID
- NTAPI
- RtlSetAllBits(
- IN PRTL_BITMAP BitMapHeader);
- NTSYSAPI
- VOID
- NTAPI
- RtlSetBits(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG StartingIndex,
- IN ULONG NumberToSet);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlSetDaclSecurityDescriptor(
- IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN BOOLEAN DaclPresent,
- IN PACL Dacl OPTIONAL,
- IN BOOLEAN DaclDefaulted OPTIONAL);
- #if defined(_AMD64_)
- /* VOID
- * RtlStoreUlong(
- * IN PULONG Address,
- * IN ULONG Value);
- */
- #define RtlStoreUlong(Address,Value) \
- *(ULONG UNALIGNED *)(Address) = (Value)
- /* VOID
- * RtlStoreUlonglong(
- * IN OUT PULONGLONG Address,
- * ULONGLONG Value);
- */
- #define RtlStoreUlonglong(Address,Value) \
- *(ULONGLONG UNALIGNED *)(Address) = (Value)
- /* VOID
- * RtlStoreUshort(
- * IN PUSHORT Address,
- * IN USHORT Value);
- */
- #define RtlStoreUshort(Address,Value) \
- *(USHORT UNALIGNED *)(Address) = (Value)
- /* VOID
- * RtlRetrieveUshort(
- * PUSHORT DestinationAddress,
- * PUSHORT SourceAddress);
- */
- #define RtlRetrieveUshort(DestAddress,SrcAddress) \
- *(USHORT UNALIGNED *)(DestAddress) = *(USHORT)(SrcAddress)
- /* VOID
- * RtlRetrieveUlong(
- * PULONG DestinationAddress,
- * PULONG SourceAddress);
- */
- #define RtlRetrieveUlong(DestAddress,SrcAddress) \
- *(ULONG UNALIGNED *)(DestAddress) = *(PULONG)(SrcAddress)
- #else
- #define RtlStoreUlong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONG_MASK) { \
- ((PUCHAR) (Address))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)(SECONDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)(THIRDBYTE(Value)); \
- ((PUCHAR) (Address))[LONG_MOST_SIGNIFICANT_BIT] = (UCHAR)(FOURTHBYTE(Value)); \
- } \
- else { \
- *((PULONG)(Address)) = (ULONG) (Value); \
- }
- #define RtlStoreUlonglong(Address,Value) \
- if ((ULONG_PTR)(Address) & LONGLONG_MASK) { \
- RtlStoreUlong((ULONG_PTR)(Address), \
- (ULONGLONG)(Value) & 0xFFFFFFFF); \
- RtlStoreUlong((ULONG_PTR)(Address)+sizeof(ULONG), \
- (ULONGLONG)(Value) >> 32); \
- } else { \
- *((PULONGLONG)(Address)) = (ULONGLONG)(Value); \
- }
- #define RtlStoreUshort(Address,Value) \
- if ((ULONG_PTR)(Address) & SHORT_MASK) { \
- ((PUCHAR) (Address))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(Value)); \
- ((PUCHAR) (Address))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(Value)); \
- } \
- else { \
- *((PUSHORT) (Address)) = (USHORT)Value; \
- }
- #define RtlRetrieveUshort(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- } \
- else \
- { \
- *((PUSHORT)(DestAddress))=*((PUSHORT)(SrcAddress)); \
- }
- #define RtlRetrieveUlong(DestAddress,SrcAddress) \
- if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
- { \
- ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
- ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
- ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
- ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
- } \
- else \
- { \
- *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
- }
- #endif /* defined(_AMD64_) */
- #ifdef _WIN64
- /* VOID
- * RtlStoreUlongPtr(
- * IN OUT PULONG_PTR Address,
- * IN ULONG_PTR Value);
- */
- #define RtlStoreUlongPtr(Address,Value) RtlStoreUlonglong(Address,Value)
- #else
- #define RtlStoreUlongPtr(Address,Value) RtlStoreUlong(Address,Value)
- #endif /* _WIN64 */
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlTimeFieldsToTime(
- IN PTIME_FIELDS TimeFields,
- IN PLARGE_INTEGER Time);
- NTSYSAPI
- VOID
- NTAPI
- RtlTimeToTimeFields(
- IN PLARGE_INTEGER Time,
- IN PTIME_FIELDS TimeFields);
- NTSYSAPI
- ULONG
- FASTCALL
- RtlUlongByteSwap(
- IN ULONG Source);
- NTSYSAPI
- ULONGLONG
- FASTCALL
- RtlUlonglongByteSwap(
- IN ULONGLONG Source);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeStringToAnsiString(
- IN OUT PANSI_STRING DestinationString,
- IN PCUNICODE_STRING SourceString,
- IN BOOLEAN AllocateDestinationString);
- NTSYSAPI
- ULONG
- NTAPI
- RtlxUnicodeStringToAnsiSize(
- IN PCUNICODE_STRING UnicodeString);
- #define RtlUnicodeStringToAnsiSize(String) ( \
- NLS_MB_CODE_PAGE_TAG ? \
- RtlxUnicodeStringToAnsiSize(String) : \
- ((String)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
- )
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeStringToInteger(
- IN PCUNICODE_STRING String,
- IN ULONG Base OPTIONAL,
- OUT PULONG Value);
- NTSYSAPI
- WCHAR
- NTAPI
- RtlUpcaseUnicodeChar(
- IN WCHAR SourceCharacter);
- NTSYSAPI
- USHORT
- FASTCALL
- RtlUshortByteSwap(
- IN USHORT Source);
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlValidRelativeSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptorInput,
- IN ULONG SecurityDescriptorLength,
- IN SECURITY_INFORMATION RequiredInformation);
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlValidSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlWriteRegistryValue(
- IN ULONG RelativeTo,
- IN PCWSTR Path,
- IN PCWSTR ValueName,
- IN ULONG ValueType,
- IN PVOID ValueData,
- IN ULONG ValueLength);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
- NTSYSAPI
- VOID
- FASTCALL
- RtlPrefetchMemoryNonTemporal(
- IN PVOID Source,
- IN SIZE_T Length);
- #endif
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTSYSAPI
- VOID
- NTAPI
- RtlClearBit(
- PRTL_BITMAP BitMapHeader,
- ULONG BitNumber);
- NTSYSAPI
- WCHAR
- NTAPI
- RtlDowncaseUnicodeChar(
- IN WCHAR SourceCharacter);
- NTSYSAPI
- VOID
- NTAPI
- RtlSetBit(
- PRTL_BITMAP BitMapHeader,
- ULONG BitNumber);
- NTSYSAPI
- BOOLEAN
- NTAPI
- RtlTestBit(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG BitNumber);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlHashUnicodeString(
- IN CONST UNICODE_STRING *String,
- IN BOOLEAN CaseInSensitive,
- IN ULONG HashAlgorithm,
- OUT PULONG HashValue);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTSYSAPI
- ULONG
- NTAPI
- RtlNumberOfSetBitsUlongPtr(
- IN ULONG_PTR Target);
- NTSYSAPI
- ULONGLONG
- NTAPI
- RtlIoDecodeMemIoResource(
- IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- OUT PULONGLONG Alignment OPTIONAL,
- OUT PULONGLONG MinimumAddress OPTIONAL,
- OUT PULONGLONG MaximumAddress OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlIoEncodeMemIoResource(
- IN struct _IO_RESOURCE_DESCRIPTOR *Descriptor,
- IN UCHAR Type,
- IN ULONGLONG Length,
- IN ULONGLONG Alignment,
- IN ULONGLONG MinimumAddress,
- IN ULONGLONG MaximumAddress);
- NTSYSAPI
- ULONGLONG
- NTAPI
- RtlCmDecodeMemIoResource(
- IN struct _CM_PARTIAL_RESOURCE_DESCRIPTOR *Descriptor,
- OUT PULONGLONG Start OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlFindClosestEncodableLength(
- IN ULONGLONG SourceLength,
- OUT PULONGLONG TargetLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlCmEncodeMemIoResource(
- IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
- IN UCHAR Type,
- IN ULONGLONG Length,
- IN ULONGLONG Start);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUnicodeToUTF8N(
- OUT PCHAR UTF8StringDestination,
- IN ULONG UTF8StringMaxByteCount,
- OUT PULONG UTF8StringActualByteCount,
- IN PCWCH UnicodeStringSource,
- IN ULONG UnicodeStringByteCount);
- NTSYSAPI
- NTSTATUS
- NTAPI
- RtlUTF8ToUnicodeN(
- OUT PWSTR UnicodeStringDestination,
- IN ULONG UnicodeStringMaxByteCount,
- OUT PULONG UnicodeStringActualByteCount,
- IN PCCH UTF8StringSource,
- IN ULONG UTF8StringByteCount);
- NTSYSAPI
- ULONG64
- NTAPI
- RtlGetEnabledExtendedFeatures(
- IN ULONG64 FeatureMask);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #if !defined(MIDL_PASS)
- /* inline funftions */
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlConvertLongToLargeInteger(
- IN LONG SignedInteger)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = SignedInteger;
- return ret;
- }
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlConvertUlongToLargeInteger(
- IN ULONG UnsignedInteger)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = UnsignedInteger;
- return ret;
- }
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerShiftLeft(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
- {
- LARGE_INTEGER Result;
- Result.QuadPart = LargeInteger.QuadPart << ShiftCount;
- return Result;
- }
- //DECLSPEC_DEPRECATED_DDK_WINXP
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerShiftRight(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
- {
- LARGE_INTEGER Result;
- Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount;
- return Result;
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- ULONG
- NTAPI_INLINE
- RtlEnlargedUnsignedDivide(
- IN ULARGE_INTEGER Dividend,
- IN ULONG Divisor,
- IN OUT PULONG Remainder)
- {
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return (ULONG)(Dividend.QuadPart / Divisor);
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerNegate(
- IN LARGE_INTEGER Subtrahend)
- {
- LARGE_INTEGER Difference;
- Difference.QuadPart = -Subtrahend.QuadPart;
- return Difference;
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerSubtract(
- IN LARGE_INTEGER Minuend,
- IN LARGE_INTEGER Subtrahend)
- {
- LARGE_INTEGER Difference;
- Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart;
- return Difference;
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlEnlargedUnsignedMultiply(
- IN ULONG Multiplicand,
- IN ULONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
- }
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlEnlargedIntegerMultiply(
- IN LONG Multiplicand,
- IN LONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier;
- return ret;
- }
- FORCEINLINE
- VOID
- RtlInitEmptyAnsiString(
- OUT PANSI_STRING AnsiString,
- IN PCHAR Buffer,
- IN USHORT BufferSize)
- {
- AnsiString->Length = 0;
- AnsiString->MaximumLength = BufferSize;
- AnsiString->Buffer = Buffer;
- }
- FORCEINLINE
- VOID
- RtlInitEmptyUnicodeString(
- OUT PUNICODE_STRING UnicodeString,
- IN PWSTR Buffer,
- IN USHORT BufferSize)
- {
- UnicodeString->Length = 0;
- UnicodeString->MaximumLength = BufferSize;
- UnicodeString->Buffer = Buffer;
- }
- #if defined(_AMD64_) || defined(_IA64_)
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedIntegerMultiply(
- IN LARGE_INTEGER Multiplicand,
- IN LONG Multiplier)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = Multiplicand.QuadPart * Multiplier;
- return ret;
- }
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedLargeIntegerDivide(
- IN LARGE_INTEGER Dividend,
- IN ULONG Divisor,
- OUT PULONG Remainder OPTIONAL)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = (ULONG64)Dividend.QuadPart / Divisor;
- if (Remainder)
- *Remainder = (ULONG)(Dividend.QuadPart % Divisor);
- return ret;
- }
- #endif /* defined(_AMD64_) || defined(_IA64_) */
- #if defined(_AMD64_)
- #define MultiplyHigh __mulh
- #define UnsignedMultiplyHigh __umulh
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlExtendedMagicDivide(
- IN LARGE_INTEGER Dividend,
- IN LARGE_INTEGER MagicDivisor,
- IN CCHAR ShiftCount)
- {
- LARGE_INTEGER ret;
- ULONG64 ret64;
- BOOLEAN Pos;
- Pos = (Dividend.QuadPart >= 0);
- ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,
- MagicDivisor.QuadPart);
- ret64 >>= ShiftCount;
- ret.QuadPart = Pos ? (LONG64)ret64 : -(LONG64)ret64;
- return ret;
- }
- #endif
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerAdd(
- IN LARGE_INTEGER Addend1,
- IN LARGE_INTEGER Addend2)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = Addend1.QuadPart + Addend2.QuadPart;
- return ret;
- }
- /* VOID
- * RtlLargeIntegerAnd(
- * IN OUT LARGE_INTEGER Result,
- * IN LARGE_INTEGER Source,
- * IN LARGE_INTEGER Mask);
- */
- #define RtlLargeIntegerAnd(Result, Source, Mask) \
- Result.QuadPart = Source.QuadPart & Mask.QuadPart
- //DECLSPEC_DEPRECATED_DDK
- static __inline
- LARGE_INTEGER
- NTAPI_INLINE
- RtlLargeIntegerArithmeticShift(
- IN LARGE_INTEGER LargeInteger,
- IN CCHAR ShiftCount)
- {
- LARGE_INTEGER ret;
- ret.QuadPart = LargeInteger.QuadPart >> ShiftCount;
- return ret;
- }
- /* BOOLEAN
- * RtlLargeIntegerEqualTo(
- * IN LARGE_INTEGER Operand1,
- * IN LARGE_INTEGER Operand2);
- */
- #define RtlLargeIntegerEqualTo(X,Y) \
- (!(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)))
- FORCEINLINE
- PVOID
- RtlSecureZeroMemory(
- OUT PVOID Pointer,
- IN SIZE_T Size)
- {
- volatile char* vptr = (volatile char*)Pointer;
- #if defined(_M_AMD64)
- __stosb((PUCHAR)vptr, 0, Size);
- #else
- char * endptr = (char *)vptr + Size;
- while (vptr < endptr) {
- *vptr = 0; vptr++;
- }
- #endif
- return Pointer;
- }
- #if defined(_M_AMD64)
- FORCEINLINE
- BOOLEAN
- RtlCheckBit(
- IN PRTL_BITMAP BitMapHeader,
- IN ULONG BitPosition)
- {
- return BitTest64((LONG64 CONST*)BitMapHeader->Buffer, (LONG64)BitPosition);
- }
- #else
- #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP)/32]) >> ((BP)%32)) & 0x1)
- #endif /* defined(_M_AMD64) */
- #define RtlLargeIntegerGreaterThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
- #define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \
- ((X).HighPart > (Y).HighPart) \
- )
- #define RtlLargeIntegerNotEqualTo(X,Y) ( \
- (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \
- )
- #define RtlLargeIntegerLessThan(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
- #define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \
- (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \
- ((X).HighPart < (Y).HighPart) \
- )
- #define RtlLargeIntegerGreaterThanZero(X) ( \
- (((X).HighPart == 0) && ((X).LowPart > 0)) || \
- ((X).HighPart > 0 ) \
- )
- #define RtlLargeIntegerGreaterOrEqualToZero(X) ( (X).HighPart >= 0 )
- #define RtlLargeIntegerEqualToZero(X) ( !((X).LowPart | (X).HighPart) )
- #define RtlLargeIntegerNotEqualToZero(X) ( ((X).LowPart | (X).HighPart) )
- #define RtlLargeIntegerLessThanZero(X) ( ((X).HighPart < 0) )
- #define RtlLargeIntegerLessOrEqualToZero(X) ( ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) )
- #endif /* !defined(MIDL_PASS) */
- /* Byte Swap Functions */
- #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037 || defined(__GNUC__))) || \
- ((defined(_M_AMD64) || defined(_M_IA64)) \
- && (_MSC_FULL_VER > 13009175 || defined(__GNUC__)))
- #define RtlUshortByteSwap(_x) _byteswap_ushort((USHORT)(_x))
- #define RtlUlongByteSwap(_x) _byteswap_ulong((_x))
- #define RtlUlonglongByteSwap(_x) _byteswap_uint64((_x))
- #endif
- #if DBG
- #define ASSERT(exp) \
- (VOID)((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
- #define ASSERTMSG(msg, exp) \
- (VOID)((!(exp)) ? \
- RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, (PCHAR)msg ), FALSE : TRUE)
- #define RTL_SOFT_ASSERT(exp) \
- (VOID)((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE)
- #define RTL_SOFT_ASSERTMSG(msg, exp) \
- (VOID)((!(exp)) ? \
- DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE)
- #define RTL_VERIFY(exp) ASSERT(exp)
- #define RTL_VERIFYMSG(msg, exp) ASSERTMSG(msg, exp)
- #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
- #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
- #if defined(_MSC_VER)
- #define NT_ASSERT(exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", L#exp), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
- #define NT_ASSERTMSG(msg, exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", L##msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
- #define NT_ASSERTMSGW(msg, exp) \
- ((!(exp)) ? \
- (__annotation(L"Debug", L"AssertFail", msg), \
- DbgRaiseAssertionFailure(), FALSE) : TRUE)
- #define NT_VERIFY NT_ASSERT
- #define NT_VERIFYMSG NT_ASSERTMSG
- #define NT_VERIFYMSGW NT_ASSERTMSGW
- #else
- /* GCC doesn't support __annotation (nor PDB) */
- #define NT_ASSERT(exp) \
- (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE)
- #define NT_ASSERTMSG NT_ASSERT
- #define NT_ASSERTMSGW NT_ASSERT
- #endif
- #else /* !DBG */
- #define ASSERT(exp) ((VOID) 0)
- #define ASSERTMSG(msg, exp) ((VOID) 0)
- #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
- #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
- #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
- #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
- #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
- #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
- #define NT_ASSERT(exp) ((VOID)0)
- #define NT_ASSERTMSG(msg, exp) ((VOID)0)
- #define NT_ASSERTMSGW(msg, exp) ((VOID)0)
- #define NT_VERIFY(_exp) ((_exp) ? TRUE : FALSE)
- #define NT_VERIFYMSG(_msg, _exp ) ((_exp) ? TRUE : FALSE)
- #define NT_VERIFYMSGW(_msg, _exp) ((_exp) ? TRUE : FALSE)
- #endif /* DBG */
- #define InitializeListHead32(ListHead) (\
- (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead)))
- #if !defined(_WINBASE_)
- #if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_))
- NTKERNELAPI
- VOID
- InitializeSListHead(
- OUT PSLIST_HEADER SListHead);
- #else
- FORCEINLINE
- VOID
- InitializeSListHead(
- OUT PSLIST_HEADER SListHead)
- {
- #if defined(_IA64_)
- ULONG64 FeatureBits;
- #endif
- #if defined(_WIN64)
- if (((ULONG_PTR)SListHead & 0xf) != 0) {
- RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT);
- }
- #endif
- RtlZeroMemory(SListHead, sizeof(SLIST_HEADER));
- #if defined(_IA64_)
- FeatureBits = __getReg(CV_IA64_CPUID4);
- if ((FeatureBits & KF_16BYTE_INSTR) != 0) {
- SListHead->Header16.HeaderType = 1;
- SListHead->Header16.Init = 1;
- }
- #endif
- }
- #endif
- #if defined(_WIN64)
- #define InterlockedPopEntrySList(Head) \
- ExpInterlockedPopEntrySList(Head)
- #define InterlockedPushEntrySList(Head, Entry) \
- ExpInterlockedPushEntrySList(Head, Entry)
- #define InterlockedFlushSList(Head) \
- ExpInterlockedFlushSList(Head)
- #define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
- #else /* !defined(_WIN64) */
- NTKERNELAPI
- PSLIST_ENTRY
- FASTCALL
- InterlockedPopEntrySList(
- IN PSLIST_HEADER ListHead);
- NTKERNELAPI
- PSLIST_ENTRY
- FASTCALL
- InterlockedPushEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PSLIST_ENTRY ListEntry);
- #define InterlockedFlushSList(ListHead) \
- ExInterlockedFlushSList(ListHead)
- #define QueryDepthSList(Head) \
- ExQueryDepthSList(Head)
- #endif /* !defined(_WIN64) */
- #endif /* !defined(_WINBASE_) */
- #define RTL_CONTEXT_EX_OFFSET(ContextEx, Chunk) ((ContextEx)->Chunk.Offset)
- #define RTL_CONTEXT_EX_LENGTH(ContextEx, Chunk) ((ContextEx)->Chunk.Length)
- #define RTL_CONTEXT_EX_CHUNK(Base, Layout, Chunk) \
- ((PVOID)((PCHAR)(Base) + RTL_CONTEXT_EX_OFFSET(Layout, Chunk)))
- #define RTL_CONTEXT_OFFSET(Context, Chunk) \
- RTL_CONTEXT_EX_OFFSET((PCONTEXT_EX)(Context + 1), Chunk)
- #define RTL_CONTEXT_LENGTH(Context, Chunk) \
- RTL_CONTEXT_EX_LENGTH((PCONTEXT_EX)(Context + 1), Chunk)
- #define RTL_CONTEXT_CHUNK(Context, Chunk) \
- RTL_CONTEXT_EX_CHUNK((PCONTEXT_EX)(Context + 1), \
- (PCONTEXT_EX)(Context + 1), \
- Chunk)
- BOOLEAN
- RTLVERLIB_DDI(RtlIsNtDdiVersionAvailable)(
- IN ULONG Version);
- BOOLEAN
- RTLVERLIB_DDI(RtlIsServicePackVersionInstalled)(
- IN ULONG Version);
- #ifndef RtlIsNtDdiVersionAvailable
- #define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
- #endif
- #ifndef RtlIsServicePackVersionInstalled
- #define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
- #endif
- #define RtlInterlockedSetBits(Flags, Flag) \
- InterlockedOr((PLONG)(Flags), Flag)
- #define RtlInterlockedAndBits(Flags, Flag) \
- InterlockedAnd((PLONG)(Flags), Flag)
- #define RtlInterlockedClearBits(Flags, Flag) \
- RtlInterlockedAndBits(Flags, ~(Flag))
- #define RtlInterlockedXorBits(Flags, Flag) \
- InterlockedXor(Flags, Flag)
- #define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedSetBits(Flags, Flag)
- #define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \
- (VOID) RtlInterlockedAndBits(Flags, Flag)
- #define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \
- RtlInterlockedAndBitsDiscardReturn(Flags, ~(Flag))
- /******************************************************************************
- * Kernel Functions *
- ******************************************************************************/
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeEvent(
- OUT PRKEVENT Event,
- IN EVENT_TYPE Type,
- IN BOOLEAN State);
- NTKERNELAPI
- VOID
- NTAPI
- KeClearEvent(
- IN OUT PRKEVENT Event);
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- #if defined(_NTDDK_) || defined(_NTIFS_)
- NTKERNELAPI
- VOID
- NTAPI
- ProbeForRead(
- IN CONST VOID *Address, /* CONST is added */
- IN SIZE_T Length,
- IN ULONG Alignment);
- #endif /* defined(_NTDDK_) || defined(_NTIFS_) */
- NTKERNELAPI
- VOID
- NTAPI
- ProbeForWrite(
- IN PVOID Address,
- IN SIZE_T Length,
- IN ULONG Alignment);
- #if defined(SINGLE_GROUP_LEGACY_API)
- NTKERNELAPI
- VOID
- NTAPI
- KeRevertToUserAffinityThread(VOID);
- NTKERNELAPI
- VOID
- NTAPI
- KeSetSystemAffinityThread(
- IN KAFFINITY Affinity);
- NTKERNELAPI
- VOID
- NTAPI
- KeSetTargetProcessorDpc(
- IN OUT PRKDPC Dpc,
- IN CCHAR Number);
- NTKERNELAPI
- KAFFINITY
- NTAPI
- KeQueryActiveProcessors(VOID);
- #endif /* defined(SINGLE_GROUP_LEGACY_API) */
- #if !defined(_M_AMD64)
- NTKERNELAPI
- ULONGLONG
- NTAPI
- KeQueryInterruptTime(VOID);
- NTKERNELAPI
- VOID
- NTAPI
- KeQuerySystemTime(
- OUT PLARGE_INTEGER CurrentTime);
- #endif /* !_M_AMD64 */
- #if !defined(_X86_) && !defined(_M_ARM)
- NTKERNELAPI
- KIRQL
- NTAPI
- KeAcquireSpinLockRaiseToDpc(
- IN OUT PKSPIN_LOCK SpinLock);
- #define KeAcquireSpinLock(SpinLock, OldIrql) \
- *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock)
- NTKERNELAPI
- VOID
- NTAPI
- KeAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
- NTKERNELAPI
- VOID
- NTAPI
- KeReleaseSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL NewIrql);
- NTKERNELAPI
- VOID
- NTAPI
- KeReleaseSpinLockFromDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
- #endif /* !_X86_ */
- #if defined(_X86_) && (defined(_WDM_INCLUDED_) || defined(WIN9X_COMPAT_SPINLOCK))
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeSpinLock(
- IN PKSPIN_LOCK SpinLock);
- #else
- FORCEINLINE
- VOID
- KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock)
- {
- /* Clear the lock */
- *SpinLock = 0;
- }
- #endif
- NTKERNELAPI
- DECLSPEC_NORETURN
- VOID
- NTAPI
- KeBugCheckEx(
- IN ULONG BugCheckCode,
- IN ULONG_PTR BugCheckParameter1,
- IN ULONG_PTR BugCheckParameter2,
- IN ULONG_PTR BugCheckParameter3,
- IN ULONG_PTR BugCheckParameter4);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeCancelTimer(
- IN OUT PKTIMER);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeDelayExecutionThread(
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Interval);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeDeregisterBugCheckCallback(
- IN OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
- NTKERNELAPI
- VOID
- NTAPI
- KeEnterCriticalRegion(VOID);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeDeviceQueue(
- OUT PKDEVICE_QUEUE DeviceQueue);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeDpc(
- OUT PRKDPC Dpc,
- IN PKDEFERRED_ROUTINE DeferredRoutine,
- IN PVOID DeferredContext OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeMutex(
- OUT PRKMUTEX Mutex,
- IN ULONG Level);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeSemaphore(
- OUT PRKSEMAPHORE Semaphore,
- IN LONG Count,
- IN LONG Limit);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeTimer(
- OUT PKTIMER Timer);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeTimerEx(
- OUT PKTIMER Timer,
- IN TIMER_TYPE Type);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeInsertByKeyDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
- IN ULONG SortKey);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeInsertDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeInsertQueueDpc(
- IN OUT PRKDPC Dpc,
- IN PVOID SystemArgument1 OPTIONAL,
- IN PVOID SystemArgument2 OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- KeLeaveCriticalRegion(VOID);
- NTHALAPI
- LARGE_INTEGER
- NTAPI
- KeQueryPerformanceCounter(
- OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL);
- NTKERNELAPI
- KPRIORITY
- NTAPI
- KeQueryPriorityThread(
- IN PRKTHREAD Thread);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryTimeIncrement(VOID);
- NTKERNELAPI
- LONG
- NTAPI
- KeReadStateEvent(
- IN PRKEVENT Event);
- NTKERNELAPI
- LONG
- NTAPI
- KeReadStateMutex(
- IN PRKMUTEX Mutex);
- NTKERNELAPI
- LONG
- NTAPI
- KeReadStateSemaphore(
- IN PRKSEMAPHORE Semaphore);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeReadStateTimer(
- IN PKTIMER Timer);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeRegisterBugCheckCallback(
- OUT PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
- IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
- IN PVOID Buffer,
- IN ULONG Length,
- IN PUCHAR Component);
- NTKERNELAPI
- LONG
- NTAPI
- KeReleaseMutex(
- IN OUT PRKMUTEX Mutex,
- IN BOOLEAN Wait);
- NTKERNELAPI
- LONG
- NTAPI
- KeReleaseSemaphore(
- IN OUT PRKSEMAPHORE Semaphore,
- IN KPRIORITY Increment,
- IN LONG Adjustment,
- IN BOOLEAN Wait);
- NTKERNELAPI
- PKDEVICE_QUEUE_ENTRY
- NTAPI
- KeRemoveByKeyDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN ULONG SortKey);
- NTKERNELAPI
- PKDEVICE_QUEUE_ENTRY
- NTAPI
- KeRemoveDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeRemoveEntryDeviceQueue(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN OUT PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeRemoveQueueDpc(
- IN OUT PRKDPC Dpc);
- NTKERNELAPI
- LONG
- NTAPI
- KeResetEvent(
- IN OUT PRKEVENT Event);
- NTKERNELAPI
- LONG
- NTAPI
- KeSetEvent(
- IN OUT PRKEVENT Event,
- IN KPRIORITY Increment,
- IN BOOLEAN Wait);
- NTKERNELAPI
- VOID
- NTAPI
- KeSetImportanceDpc(
- IN OUT PRKDPC Dpc,
- IN KDPC_IMPORTANCE Importance);
- NTKERNELAPI
- KPRIORITY
- NTAPI
- KeSetPriorityThread(
- IN OUT PKTHREAD Thread,
- IN KPRIORITY Priority);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeSetTimer(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN PKDPC Dpc OPTIONAL);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeSetTimerEx(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN LONG Period OPTIONAL,
- IN PKDPC Dpc OPTIONAL);
- NTHALAPI
- VOID
- NTAPI
- KeStallExecutionProcessor(
- IN ULONG MicroSeconds);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeSynchronizeExecution(
- IN OUT PKINTERRUPT Interrupt,
- IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
- IN PVOID SynchronizeContext OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeWaitForMultipleObjects(
- IN ULONG Count,
- IN PVOID Object[],
- IN WAIT_TYPE WaitType,
- IN KWAIT_REASON WaitReason,
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL);
- #define KeWaitForMutexObject KeWaitForSingleObject
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeWaitForSingleObject(
- IN PVOID Object,
- IN KWAIT_REASON WaitReason,
- IN KPROCESSOR_MODE WaitMode,
- IN BOOLEAN Alertable,
- IN PLARGE_INTEGER Timeout OPTIONAL);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- _DECL_HAL_KE_IMPORT
- VOID
- FASTCALL
- KeAcquireInStackQueuedSpinLock(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
- NTKERNELAPI
- VOID
- FASTCALL
- KeAcquireInStackQueuedSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
- NTKERNELAPI
- KIRQL
- NTAPI
- KeAcquireInterruptSpinLock(
- IN OUT PKINTERRUPT Interrupt);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeAreApcsDisabled(VOID);
- NTKERNELAPI
- ULONG
- NTAPI
- KeGetRecommendedSharedDataAlignment(VOID);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryRuntimeThread(
- IN PKTHREAD Thread,
- OUT PULONG UserTime);
- NTKERNELAPI
- VOID
- FASTCALL
- KeReleaseInStackQueuedSpinLockFromDpcLevel(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
- NTKERNELAPI
- VOID
- NTAPI
- KeReleaseInterruptSpinLock(
- IN OUT PKINTERRUPT Interrupt,
- IN KIRQL OldIrql);
- NTKERNELAPI
- PKDEVICE_QUEUE_ENTRY
- NTAPI
- KeRemoveByKeyDeviceQueueIfBusy(
- IN OUT PKDEVICE_QUEUE DeviceQueue,
- IN ULONG SortKey);
- _DECL_HAL_KE_IMPORT
- VOID
- FASTCALL
- KeReleaseInStackQueuedSpinLock(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeDeregisterBugCheckReasonCallback(
- IN OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeRegisterBugCheckReasonCallback(
- OUT PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord,
- IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine,
- IN KBUGCHECK_CALLBACK_REASON Reason,
- IN PUCHAR Component);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP1) */
- #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
- NTKERNELAPI
- VOID
- NTAPI
- KeFlushQueuedDpcs(VOID);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
- #if (NTDDI_VERSION >= NTDDI_WS03)
- NTKERNELAPI
- PVOID
- NTAPI
- KeRegisterNmiCallback(
- IN PNMI_CALLBACK CallbackRoutine,
- IN PVOID Context OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeDeregisterNmiCallback(
- IN PVOID Handle);
- NTKERNELAPI
- VOID
- NTAPI
- KeInitializeThreadedDpc(
- OUT PRKDPC Dpc,
- IN PKDEFERRED_ROUTINE DeferredRoutine,
- IN PVOID DeferredContext OPTIONAL);
- NTKERNELAPI
- ULONG_PTR
- NTAPI
- KeIpiGenericCall(
- IN PKIPI_BROADCAST_WORKER BroadcastFunction,
- IN ULONG_PTR Context);
- NTKERNELAPI
- KIRQL
- FASTCALL
- KeAcquireSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock);
- NTKERNELAPI
- VOID
- FASTCALL
- KeReleaseSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock,
- IN KIRQL OldIrql);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- KeTestSpinLock(
- IN PKSPIN_LOCK SpinLock);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
- #if (NTDDI_VERSION >= NTDDI_WS03SP1)
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- KeTryToAcquireSpinLockAtDpcLevel(
- IN OUT PKSPIN_LOCK SpinLock);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeAreAllApcsDisabled(VOID);
- NTKERNELAPI
- VOID
- FASTCALL
- KeAcquireGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- KeAcquireGuardedMutexUnsafe(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
- NTKERNELAPI
- VOID
- NTAPI
- KeEnterGuardedRegion(VOID);
- NTKERNELAPI
- VOID
- NTAPI
- KeLeaveGuardedRegion(VOID);
- NTKERNELAPI
- VOID
- FASTCALL
- KeInitializeGuardedMutex(
- OUT PKGUARDED_MUTEX GuardedMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- KeReleaseGuardedMutexUnsafe(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- KeReleaseGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- KeTryToAcquireGuardedMutex(
- IN OUT PKGUARDED_MUTEX GuardedMutex);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- VOID
- FASTCALL
- KeAcquireInStackQueuedSpinLockForDpc(
- IN OUT PKSPIN_LOCK SpinLock,
- OUT PKLOCK_QUEUE_HANDLE LockHandle);
- NTKERNELAPI
- VOID
- FASTCALL
- KeReleaseInStackQueuedSpinLockForDpc(
- IN PKLOCK_QUEUE_HANDLE LockHandle);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeQueryDpcWatchdogInformation(
- OUT PKDPC_WATCHDOG_INFORMATION WatchdogInformation);
- #if defined(SINGLE_GROUP_LEGACY_API)
- NTKERNELAPI
- KAFFINITY
- NTAPI
- KeSetSystemAffinityThreadEx(
- IN KAFFINITY Affinity);
- NTKERNELAPI
- VOID
- NTAPI
- KeRevertToUserAffinityThreadEx(
- IN KAFFINITY Affinity);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryActiveProcessorCount(
- OUT PKAFFINITY ActiveProcessors OPTIONAL);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryMaximumProcessorCount(VOID);
- #endif /* SINGLE_GROUP_LEGACY_API */
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_WS08)
- PVOID
- KeRegisterProcessorChangeCallback(
- IN PPROCESSOR_CALLBACK_FUNCTION CallbackFunction,
- IN PVOID CallbackContext OPTIONAL,
- IN ULONG Flags);
- VOID
- KeDeregisterProcessorChangeCallback(
- IN PVOID CallbackHandle);
- #endif /* (NTDDI_VERSION >= NTDDI_WS08) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- ULONG64
- NTAPI
- KeQueryTotalCycleTimeProcess(
- IN OUT PKPROCESS Process,
- OUT PULONG64 CycleTimeStamp);
- ULONG64
- NTAPI
- KeQueryTotalCycleTimeThread(
- IN OUT PKTHREAD Thread,
- OUT PULONG64 CycleTimeStamp);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeSetTargetProcessorDpcEx(
- IN OUT PKDPC Dpc,
- IN PPROCESSOR_NUMBER ProcNumber);
- NTKERNELAPI
- VOID
- NTAPI
- KeSetSystemGroupAffinityThread(
- IN PGROUP_AFFINITY Affinity,
- OUT PGROUP_AFFINITY PreviousAffinity OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- KeRevertToUserGroupAffinityThread(
- IN PGROUP_AFFINITY PreviousAffinity);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KeSetCoalescableTimer(
- IN OUT PKTIMER Timer,
- IN LARGE_INTEGER DueTime,
- IN ULONG Period,
- IN ULONG TolerableDelay,
- IN PKDPC Dpc OPTIONAL);
- NTKERNELAPI
- ULONGLONG
- NTAPI
- KeQueryUnbiasedInterruptTime(VOID);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryActiveProcessorCountEx(
- IN USHORT GroupNumber);
- NTKERNELAPI
- ULONG
- NTAPI
- KeQueryMaximumProcessorCountEx(
- IN USHORT GroupNumber);
- NTKERNELAPI
- USHORT
- NTAPI
- KeQueryActiveGroupCount(VOID);
- NTKERNELAPI
- USHORT
- NTAPI
- KeQueryMaximumGroupCount(VOID);
- NTKERNELAPI
- KAFFINITY
- NTAPI
- KeQueryGroupAffinity(
- IN USHORT GroupNumber);
- NTKERNELAPI
- ULONG
- NTAPI
- KeGetCurrentProcessorNumberEx(
- OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- KeQueryNodeActiveAffinity(
- IN USHORT NodeNumber,
- OUT PGROUP_AFFINITY Affinity OPTIONAL,
- OUT PUSHORT Count OPTIONAL);
- NTKERNELAPI
- USHORT
- NTAPI
- KeQueryNodeMaximumProcessorCount(
- IN USHORT NodeNumber);
- NTKERNELAPI
- USHORT
- NTAPI
- KeQueryHighestNodeNumber(VOID);
- NTKERNELAPI
- USHORT
- NTAPI
- KeGetCurrentNodeNumber(VOID);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeQueryLogicalProcessorRelationship(
- IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
- IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
- OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
- IN OUT PULONG Length);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KeSaveExtendedProcessorState(
- IN ULONG64 Mask,
- OUT PXSTATE_SAVE XStateSave);
- NTKERNELAPI
- VOID
- NTAPI
- KeRestoreExtendedProcessorState(
- IN PXSTATE_SAVE XStateSave);
- NTSTATUS
- NTAPI
- KeGetProcessorNumberFromIndex(
- IN ULONG ProcIndex,
- OUT PPROCESSOR_NUMBER ProcNumber);
- ULONG
- NTAPI
- KeGetProcessorIndexFromNumber(
- IN PPROCESSOR_NUMBER ProcNumber);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #if !defined(_IA64_)
- NTHALAPI
- VOID
- NTAPI
- KeFlushWriteBuffer(VOID);
- #endif
- /* VOID
- * KeInitializeCallbackRecord(
- * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
- */
- #define KeInitializeCallbackRecord(CallbackRecord) \
- CallbackRecord->State = BufferEmpty;
- #if DBG
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- #define PAGED_ASSERT( exp ) NT_ASSERT( exp )
- #else
- #define PAGED_ASSERT( exp ) ASSERT( exp )
- #endif
- #define PAGED_CODE() { \
- if (KeGetCurrentIrql() > APC_LEVEL) { \
- KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
- PAGED_ASSERT(FALSE); \
- } \
- }
- #else
- #define PAGED_CODE()
- #endif /* DBG */
- #define PAGED_CODE_LOCKED() NOP_FUNCTION;
- /******************************************************************************
- * Memory manager Functions *
- ******************************************************************************/
- /* Alignment Macros */
- #define ALIGN_DOWN_BY(size, align) \
- ((ULONG_PTR)(size) & ~((ULONG_PTR)(align) - 1))
- #define ALIGN_UP_BY(size, align) \
- (ALIGN_DOWN_BY(((ULONG_PTR)(size) + align - 1), align))
- #define ALIGN_DOWN_POINTER_BY(ptr, align) \
- ((PVOID)ALIGN_DOWN_BY(ptr, align))
- #define ALIGN_UP_POINTER_BY(ptr, align) \
- ((PVOID)ALIGN_UP_BY(ptr, align))
- #define ALIGN_DOWN(size, type) \
- ALIGN_DOWN_BY(size, sizeof(type))
- #define ALIGN_UP(size, type) \
- ALIGN_UP_BY(size, sizeof(type))
- #define ALIGN_DOWN_POINTER(ptr, type) \
- ALIGN_DOWN_POINTER_BY(ptr, sizeof(type))
- #define ALIGN_UP_POINTER(ptr, type) \
- ALIGN_UP_POINTER_BY(ptr, sizeof(type))
- #ifndef FIELD_OFFSET
- #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
- #endif
- #ifndef FIELD_SIZE
- #define FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
- #endif
- #define POOL_TAGGING 1
- #if DBG
- #define IF_DEBUG if (TRUE)
- #else
- #define IF_DEBUG if (FALSE)
- #endif /* DBG */
- /* ULONG
- * BYTE_OFFSET(
- * IN PVOID Va)
- */
- #define BYTE_OFFSET(Va) \
- ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
- /* ULONG
- * BYTES_TO_PAGES(
- * IN ULONG Size)
- *
- * Note: This needs to be like this to avoid overflows!
- */
- #define BYTES_TO_PAGES(Size) \
- (((Size) >> PAGE_SHIFT) + (((Size) & (PAGE_SIZE - 1)) != 0))
- /* PVOID
- * PAGE_ALIGN(
- * IN PVOID Va)
- */
- #define PAGE_ALIGN(Va) \
- ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
- /* ULONG_PTR
- * ROUND_TO_PAGES(
- * IN ULONG_PTR Size)
- */
- #define ROUND_TO_PAGES(Size) \
- (((ULONG_PTR) (Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
- /* ULONG
- * ADDRESS_AND_SIZE_TO_SPAN_PAGES(
- * IN PVOID Va,
- * IN ULONG Size)
- */
- #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
- ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
- + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
- #define COMPUTE_PAGES_SPANNED(Va, Size) \
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size)
- /*
- * ULONG
- * MmGetMdlByteCount(
- * IN PMDL Mdl)
- */
- #define MmGetMdlByteCount(_Mdl) \
- ((_Mdl)->ByteCount)
- /*
- * ULONG
- * MmGetMdlByteOffset(
- * IN PMDL Mdl)
- */
- #define MmGetMdlByteOffset(_Mdl) \
- ((_Mdl)->ByteOffset)
- #define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa)
- /*
- * PPFN_NUMBER
- * MmGetMdlPfnArray(
- * IN PMDL Mdl)
- */
- #define MmGetMdlPfnArray(_Mdl) \
- ((PPFN_NUMBER) ((_Mdl) + 1))
- /*
- * PVOID
- * MmGetMdlVirtualAddress(
- * IN PMDL Mdl)
- */
- #define MmGetMdlVirtualAddress(_Mdl) \
- ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
- #define MmGetProcedureAddress(Address) (Address)
- #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address)
- /* PVOID MmGetSystemAddressForMdl(
- * IN PMDL Mdl);
- */
- #define MmGetSystemAddressForMdl(Mdl) \
- (((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \
- MDL_SOURCE_IS_NONPAGED_POOL)) ? \
- ((Mdl)->MappedSystemVa) : \
- (MmMapLockedPages((Mdl), KernelMode)))
- /* PVOID
- * MmGetSystemAddressForMdlSafe(
- * IN PMDL Mdl,
- * IN MM_PAGE_PRIORITY Priority)
- */
- #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
- (((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
- | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
- (_Mdl)->MappedSystemVa : \
- (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \
- KernelMode, MmCached, NULL, FALSE, (_Priority)))
- /*
- * VOID
- * MmInitializeMdl(
- * IN PMDL MemoryDescriptorList,
- * IN PVOID BaseVa,
- * IN SIZE_T Length)
- */
- #define MmInitializeMdl(_MemoryDescriptorList, \
- _BaseVa, \
- _Length) \
- { \
- (_MemoryDescriptorList)->Next = (PMDL) NULL; \
- (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
- (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
- (_MemoryDescriptorList)->MdlFlags = 0; \
- (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
- (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
- (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
- }
- /*
- * VOID
- * MmPrepareMdlForReuse(
- * IN PMDL Mdl)
- */
- #define MmPrepareMdlForReuse(_Mdl) \
- { \
- if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \
- ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
- MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
- } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \
- ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
- } \
- }
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- PVOID
- NTAPI
- MmAllocateContiguousMemory(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress);
- NTKERNELAPI
- PVOID
- NTAPI
- MmAllocateContiguousMemorySpecifyCache(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType);
- NTKERNELAPI
- PMDL
- NTAPI
- MmAllocatePagesForMdl(
- IN PHYSICAL_ADDRESS LowAddress,
- IN PHYSICAL_ADDRESS HighAddress,
- IN PHYSICAL_ADDRESS SkipBytes,
- IN SIZE_T TotalBytes);
- NTKERNELAPI
- VOID
- NTAPI
- MmBuildMdlForNonPagedPool(
- IN OUT PMDLX MemoryDescriptorList);
- //DECLSPEC_DEPRECATED_DDK
- NTKERNELAPI
- PMDL
- NTAPI
- MmCreateMdl(
- IN PMDL MemoryDescriptorList OPTIONAL,
- IN PVOID Base,
- IN SIZE_T Length);
- NTKERNELAPI
- VOID
- NTAPI
- MmFreeContiguousMemory(
- IN PVOID BaseAddress);
- NTKERNELAPI
- VOID
- NTAPI
- MmFreeContiguousMemorySpecifyCache(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheType);
- NTKERNELAPI
- VOID
- NTAPI
- MmFreePagesFromMdl(
- IN PMDLX MemoryDescriptorList);
- NTKERNELAPI
- PVOID
- NTAPI
- MmGetSystemRoutineAddress(
- IN PUNICODE_STRING SystemRoutineName);
- NTKERNELAPI
- LOGICAL
- NTAPI
- MmIsDriverVerifying(
- IN struct _DRIVER_OBJECT *DriverObject);
- NTKERNELAPI
- PVOID
- NTAPI
- MmLockPagableDataSection(
- IN PVOID AddressWithinSection);
- NTKERNELAPI
- PVOID
- NTAPI
- MmMapIoSpace(
- IN PHYSICAL_ADDRESS PhysicalAddress,
- IN SIZE_T NumberOfBytes,
- IN MEMORY_CACHING_TYPE CacheEnable);
- NTKERNELAPI
- PVOID
- NTAPI
- MmMapLockedPages(
- IN PMDL MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode);
- NTKERNELAPI
- PVOID
- NTAPI
- MmMapLockedPagesSpecifyCache(
- IN PMDLX MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode,
- IN MEMORY_CACHING_TYPE CacheType,
- IN PVOID BaseAddress OPTIONAL,
- IN ULONG BugCheckOnFailure,
- IN MM_PAGE_PRIORITY Priority);
- NTKERNELAPI
- PVOID
- NTAPI
- MmPageEntireDriver(
- IN PVOID AddressWithinSection);
- NTKERNELAPI
- VOID
- NTAPI
- MmProbeAndLockPages(
- IN OUT PMDL MemoryDescriptorList,
- IN KPROCESSOR_MODE AccessMode,
- IN LOCK_OPERATION Operation);
- NTKERNELAPI
- MM_SYSTEMSIZE
- NTAPI
- MmQuerySystemSize(VOID);
- NTKERNELAPI
- VOID
- NTAPI
- MmResetDriverPaging(
- IN PVOID AddressWithinSection);
- NTKERNELAPI
- SIZE_T
- NTAPI
- MmSizeOfMdl(
- IN PVOID Base,
- IN SIZE_T Length);
- NTKERNELAPI
- VOID
- NTAPI
- MmUnlockPagableImageSection(
- IN PVOID ImageSectionHandle);
- NTKERNELAPI
- VOID
- NTAPI
- MmUnlockPages(
- IN OUT PMDL MemoryDescriptorList);
- NTKERNELAPI
- VOID
- NTAPI
- MmUnmapIoSpace(
- IN PVOID BaseAddress,
- IN SIZE_T NumberOfBytes);
- NTKERNELAPI
- VOID
- NTAPI
- MmProbeAndLockProcessPages(
- IN OUT PMDL MemoryDescriptorList,
- IN PEPROCESS Process,
- IN KPROCESSOR_MODE AccessMode,
- IN LOCK_OPERATION Operation);
- NTKERNELAPI
- VOID
- NTAPI
- MmUnmapLockedPages(
- IN PVOID BaseAddress,
- IN PMDL MemoryDescriptorList);
- NTKERNELAPI
- PVOID
- NTAPI
- MmAllocateContiguousMemorySpecifyCacheNode(
- IN SIZE_T NumberOfBytes,
- IN PHYSICAL_ADDRESS LowestAcceptableAddress,
- IN PHYSICAL_ADDRESS HighestAcceptableAddress,
- IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
- IN MEMORY_CACHING_TYPE CacheType,
- IN NODE_REQUIREMENT PreferredNode);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- MmAdvanceMdl(
- IN OUT PMDL Mdl,
- IN ULONG NumberOfBytes);
- NTKERNELAPI
- PVOID
- NTAPI
- MmAllocateMappingAddress(
- IN SIZE_T NumberOfBytes,
- IN ULONG PoolTag);
- NTKERNELAPI
- VOID
- NTAPI
- MmFreeMappingAddress(
- IN PVOID BaseAddress,
- IN ULONG PoolTag);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- MmIsVerifierEnabled(
- OUT PULONG VerifierFlags);
- NTKERNELAPI
- PVOID
- NTAPI
- MmMapLockedPagesWithReservedMapping(
- IN PVOID MappingAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList,
- IN MEMORY_CACHING_TYPE CacheType);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- MmProtectMdlSystemAddress(
- IN PMDL MemoryDescriptorList,
- IN ULONG NewProtect);
- NTKERNELAPI
- VOID
- NTAPI
- MmUnmapReservedMapping(
- IN PVOID BaseAddress,
- IN ULONG PoolTag,
- IN PMDL MemoryDescriptorList);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- MmAddVerifierThunks(
- IN PVOID ThunkBuffer,
- IN ULONG ThunkBufferSize);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_WS03)
- NTKERNELAPI
- LOGICAL
- NTAPI
- MmIsIoSpaceActive(
- IN PHYSICAL_ADDRESS StartAddress,
- IN SIZE_T NumberOfBytes);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
- #if (NTDDI_VERSION >= NTDDI_WS03SP1)
- NTKERNELAPI
- PMDL
- NTAPI
- MmAllocatePagesForMdlEx(
- IN PHYSICAL_ADDRESS LowAddress,
- IN PHYSICAL_ADDRESS HighAddress,
- IN PHYSICAL_ADDRESS SkipBytes,
- IN SIZE_T TotalBytes,
- IN MEMORY_CACHING_TYPE CacheType,
- IN ULONG Flags);
- #endif
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- LOGICAL
- NTAPI
- MmIsDriverVerifyingByAddress(
- IN PVOID AddressWithinSection);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- /******************************************************************************
- * Security Manager Functions *
- ******************************************************************************/
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- BOOLEAN
- NTAPI
- SeAccessCheck(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
- IN BOOLEAN SubjectContextLocked,
- IN ACCESS_MASK DesiredAccess,
- IN ACCESS_MASK PreviouslyGrantedAccess,
- OUT PPRIVILEGE_SET *Privileges OPTIONAL,
- IN PGENERIC_MAPPING GenericMapping,
- IN KPROCESSOR_MODE AccessMode,
- OUT PACCESS_MASK GrantedAccess,
- OUT PNTSTATUS AccessStatus);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- SeAssignSecurity(
- IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
- OUT PSECURITY_DESCRIPTOR *NewDescriptor,
- IN BOOLEAN IsDirectoryObject,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
- IN PGENERIC_MAPPING GenericMapping,
- IN POOL_TYPE PoolType);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- SeAssignSecurityEx(
- IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL,
- OUT PSECURITY_DESCRIPTOR *NewDescriptor,
- IN GUID *ObjectType OPTIONAL,
- IN BOOLEAN IsDirectoryObject,
- IN ULONG AutoInheritFlags,
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
- IN PGENERIC_MAPPING GenericMapping,
- IN POOL_TYPE PoolType);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- SeDeassignSecurity(
- IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- SeValidSecurityDescriptor(
- IN ULONG Length,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTKERNELAPI
- ULONG
- NTAPI
- SeObjectCreateSaclAccessBits(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor);
- NTKERNELAPI
- VOID
- NTAPI
- SeReleaseSubjectContext(
- IN OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
- NTKERNELAPI
- VOID
- NTAPI
- SeUnlockSubjectContext(
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
- NTKERNELAPI
- VOID
- NTAPI
- SeCaptureSubjectContext(
- OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
- NTKERNELAPI
- VOID
- NTAPI
- SeLockSubjectContext(
- IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WS03SP1)
- NTSTATUS
- NTAPI
- SeSetAuditParameter(
- IN OUT PSE_ADT_PARAMETER_ARRAY AuditParameters,
- IN SE_ADT_PARAMETER_TYPE Type,
- IN ULONG Index,
- IN PVOID Data);
- NTSTATUS
- NTAPI
- SeReportSecurityEvent(
- IN ULONG Flags,
- IN PUNICODE_STRING SourceName,
- IN PSID UserSid OPTIONAL,
- IN PSE_ADT_PARAMETER_ARRAY AuditParameters);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- ULONG
- NTAPI
- SeComputeAutoInheritByObjectType(
- IN PVOID ObjectType,
- IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
- IN PSECURITY_DESCRIPTOR ParentSecurityDescriptor OPTIONAL);
- #ifdef SE_NTFS_WORLD_CACHE
- VOID
- NTAPI
- SeGetWorldRights(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN PGENERIC_MAPPING GenericMapping,
- OUT PACCESS_MASK GrantedAccess);
- #endif /* SE_NTFS_WORLD_CACHE */
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- /******************************************************************************
- * Configuration Manager Functions *
- ******************************************************************************/
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- CmRegisterCallback(
- IN PEX_CALLBACK_FUNCTION Function,
- IN PVOID Context OPTIONAL,
- OUT PLARGE_INTEGER Cookie);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- CmUnRegisterCallback(
- IN LARGE_INTEGER Cookie);
- #endif
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- CmRegisterCallbackEx(
- PEX_CALLBACK_FUNCTION Function,
- PCUNICODE_STRING Altitude,
- PVOID Driver,
- PVOID Context,
- PLARGE_INTEGER Cookie,
- PVOID Reserved);
- NTKERNELAPI
- VOID
- NTAPI
- CmGetCallbackVersion(
- OUT PULONG Major OPTIONAL,
- OUT PULONG Minor OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- CmSetCallbackObjectContext(
- IN OUT PVOID Object,
- IN PLARGE_INTEGER Cookie,
- IN PVOID NewContext,
- OUT PVOID *OldContext OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- CmCallbackGetKeyObjectID(
- IN PLARGE_INTEGER Cookie,
- IN PVOID Object,
- OUT PULONG_PTR ObjectID OPTIONAL,
- OUT PCUNICODE_STRING *ObjectName OPTIONAL);
- NTKERNELAPI
- PVOID
- NTAPI
- CmGetBoundTransaction(
- IN PLARGE_INTEGER Cookie,
- IN PVOID Object);
- #endif // NTDDI_VERSION >= NTDDI_VISTA
- /******************************************************************************
- * I/O Manager Functions *
- ******************************************************************************/
- /*
- * NTSTATUS
- * IoAcquireRemoveLock(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN OPTIONAL PVOID Tag)
- */
- #if DBG
- #define IoAcquireRemoveLock(RemoveLock, Tag) \
- IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof (IO_REMOVE_LOCK))
- #else
- #define IoAcquireRemoveLock(RemoveLock, Tag) \
- IoAcquireRemoveLockEx(RemoveLock, Tag, "", 1, sizeof (IO_REMOVE_LOCK))
- #endif
- /*
- * VOID
- * IoAdjustPagingPathCount(
- * IN PLONG Count,
- * IN BOOLEAN Increment)
- */
- #define IoAdjustPagingPathCount(_Count, \
- _Increment) \
- { \
- if (_Increment) \
- { \
- InterlockedIncrement(_Count); \
- } \
- else \
- { \
- InterlockedDecrement(_Count); \
- } \
- }
- #if !defined(_M_AMD64)
- NTHALAPI
- VOID
- NTAPI
- READ_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count);
- NTHALAPI
- VOID
- NTAPI
- READ_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count);
- NTHALAPI
- VOID
- NTAPI
- READ_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count);
- NTHALAPI
- UCHAR
- NTAPI
- READ_PORT_UCHAR(
- IN PUCHAR Port);
- NTHALAPI
- ULONG
- NTAPI
- READ_PORT_ULONG(
- IN PULONG Port);
- NTHALAPI
- USHORT
- NTAPI
- READ_PORT_USHORT(
- IN PUSHORT Port);
- NTKERNELAPI
- VOID
- NTAPI
- READ_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- NTAPI
- READ_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- NTAPI
- READ_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count);
- NTKERNELAPI
- UCHAR
- NTAPI
- READ_REGISTER_UCHAR(
- IN PUCHAR Register);
- NTKERNELAPI
- ULONG
- NTAPI
- READ_REGISTER_ULONG(
- IN PULONG Register);
- NTKERNELAPI
- USHORT
- NTAPI
- READ_REGISTER_USHORT(
- IN PUSHORT Register);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_UCHAR(
- IN PUCHAR Port,
- IN UCHAR Value);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_ULONG(
- IN PULONG Port,
- IN ULONG Value);
- NTHALAPI
- VOID
- NTAPI
- WRITE_PORT_USHORT(
- IN PUSHORT Port,
- IN USHORT Value);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_UCHAR(
- IN PUCHAR Register,
- IN UCHAR Value);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_ULONG(
- IN PULONG Register,
- IN ULONG Value);
- NTKERNELAPI
- VOID
- NTAPI
- WRITE_REGISTER_USHORT(
- IN PUSHORT Register,
- IN USHORT Value);
- #else
- FORCEINLINE
- VOID
- READ_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count)
- {
- __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- VOID
- READ_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count)
- {
- __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- VOID
- READ_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count)
- {
- __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- UCHAR
- READ_PORT_UCHAR(
- IN PUCHAR Port)
- {
- return __inbyte((USHORT)(ULONG_PTR)Port);
- }
- FORCEINLINE
- ULONG
- READ_PORT_ULONG(
- IN PULONG Port)
- {
- return __indword((USHORT)(ULONG_PTR)Port);
- }
- FORCEINLINE
- USHORT
- READ_PORT_USHORT(
- IN PUSHORT Port)
- {
- return __inword((USHORT)(ULONG_PTR)Port);
- }
- FORCEINLINE
- VOID
- READ_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count)
- {
- __movsb(Register, Buffer, Count);
- }
- FORCEINLINE
- VOID
- READ_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count)
- {
- __movsd(Register, Buffer, Count);
- }
- FORCEINLINE
- VOID
- READ_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count)
- {
- __movsw(Register, Buffer, Count);
- }
- FORCEINLINE
- UCHAR
- READ_REGISTER_UCHAR(
- IN volatile UCHAR *Register)
- {
- return *Register;
- }
- FORCEINLINE
- ULONG
- READ_REGISTER_ULONG(
- IN volatile ULONG *Register)
- {
- return *Register;
- }
- FORCEINLINE
- USHORT
- READ_REGISTER_USHORT(
- IN volatile USHORT *Register)
- {
- return *Register;
- }
- FORCEINLINE
- VOID
- WRITE_PORT_BUFFER_UCHAR(
- IN PUCHAR Port,
- IN PUCHAR Buffer,
- IN ULONG Count)
- {
- __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- VOID
- WRITE_PORT_BUFFER_ULONG(
- IN PULONG Port,
- IN PULONG Buffer,
- IN ULONG Count)
- {
- __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- VOID
- WRITE_PORT_BUFFER_USHORT(
- IN PUSHORT Port,
- IN PUSHORT Buffer,
- IN ULONG Count)
- {
- __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count);
- }
- FORCEINLINE
- VOID
- WRITE_PORT_UCHAR(
- IN PUCHAR Port,
- IN UCHAR Value)
- {
- __outbyte((USHORT)(ULONG_PTR)Port, Value);
- }
- FORCEINLINE
- VOID
- WRITE_PORT_ULONG(
- IN PULONG Port,
- IN ULONG Value)
- {
- __outdword((USHORT)(ULONG_PTR)Port, Value);
- }
- FORCEINLINE
- VOID
- WRITE_PORT_USHORT(
- IN PUSHORT Port,
- IN USHORT Value)
- {
- __outword((USHORT)(ULONG_PTR)Port, Value);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_BUFFER_UCHAR(
- IN PUCHAR Register,
- IN PUCHAR Buffer,
- IN ULONG Count)
- {
- LONG Synch;
- __movsb(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_BUFFER_ULONG(
- IN PULONG Register,
- IN PULONG Buffer,
- IN ULONG Count)
- {
- LONG Synch;
- __movsd(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_BUFFER_USHORT(
- IN PUSHORT Register,
- IN PUSHORT Buffer,
- IN ULONG Count)
- {
- LONG Synch;
- __movsw(Register, Buffer, Count);
- InterlockedOr(&Synch, 1);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_UCHAR(
- IN volatile UCHAR *Register,
- IN UCHAR Value)
- {
- LONG Synch;
- *Register = Value;
- InterlockedOr(&Synch, 1);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_ULONG(
- IN volatile ULONG *Register,
- IN ULONG Value)
- {
- LONG Synch;
- *Register = Value;
- InterlockedOr(&Synch, 1);
- }
- FORCEINLINE
- VOID
- WRITE_REGISTER_USHORT(
- IN volatile USHORT *Register,
- IN USHORT Value)
- {
- LONG Sync;
- *Register = Value;
- InterlockedOr(&Sync, 1);
- }
- #endif
- #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && \
- (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
- #define DMA_MACROS_DEFINED
- FORCEINLINE
- NTSTATUS
- IoAllocateAdapterChannel(
- IN PDMA_ADAPTER DmaAdapter,
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG NumberOfMapRegisters,
- IN PDRIVER_CONTROL ExecutionRoutine,
- IN PVOID Context)
- {
- PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
- AllocateAdapterChannel =
- *(DmaAdapter)->DmaOperations->AllocateAdapterChannel;
- ASSERT(AllocateAdapterChannel);
- return AllocateAdapterChannel(DmaAdapter,
- DeviceObject,
- NumberOfMapRegisters,
- ExecutionRoutine,
- Context );
- }
- FORCEINLINE
- BOOLEAN
- NTAPI
- IoFlushAdapterBuffers(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN ULONG Length,
- IN BOOLEAN WriteToDevice)
- {
- PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
- FlushAdapterBuffers = *(DmaAdapter)->DmaOperations->FlushAdapterBuffers;
- ASSERT(FlushAdapterBuffers);
- return FlushAdapterBuffers(DmaAdapter,
- Mdl,
- MapRegisterBase,
- CurrentVa,
- Length,
- WriteToDevice);
- }
- FORCEINLINE
- VOID
- NTAPI
- IoFreeAdapterChannel(
- IN PDMA_ADAPTER DmaAdapter)
- {
- PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
- FreeAdapterChannel = *(DmaAdapter)->DmaOperations->FreeAdapterChannel;
- ASSERT(FreeAdapterChannel);
- FreeAdapterChannel(DmaAdapter);
- }
- FORCEINLINE
- VOID
- NTAPI
- IoFreeMapRegisters(
- IN PDMA_ADAPTER DmaAdapter,
- IN PVOID MapRegisterBase,
- IN ULONG NumberOfMapRegisters)
- {
- PFREE_MAP_REGISTERS FreeMapRegisters;
- FreeMapRegisters = *(DmaAdapter)->DmaOperations->FreeMapRegisters;
- ASSERT(FreeMapRegisters);
- FreeMapRegisters(DmaAdapter, MapRegisterBase, NumberOfMapRegisters);
- }
- FORCEINLINE
- PHYSICAL_ADDRESS
- NTAPI
- IoMapTransfer(
- IN PDMA_ADAPTER DmaAdapter,
- IN PMDL Mdl,
- IN PVOID MapRegisterBase,
- IN PVOID CurrentVa,
- IN OUT PULONG Length,
- IN BOOLEAN WriteToDevice)
- {
- PMAP_TRANSFER MapTransfer;
- MapTransfer = *(DmaAdapter)->DmaOperations->MapTransfer;
- ASSERT(MapTransfer);
- return MapTransfer(DmaAdapter,
- Mdl,
- MapRegisterBase,
- CurrentVa,
- Length,
- WriteToDevice);
- }
- #endif
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- VOID
- NTAPI
- IoAcquireCancelSpinLock(
- OUT PKIRQL Irql);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoAcquireRemoveLockEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN PCSTR File,
- IN ULONG Line,
- IN ULONG RemlockSize);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoAllocateDriverObjectExtension(
- IN PDRIVER_OBJECT DriverObject,
- IN PVOID ClientIdentificationAddress,
- IN ULONG DriverObjectExtensionSize,
- OUT PVOID *DriverObjectExtension);
- NTKERNELAPI
- PVOID
- NTAPI
- IoAllocateErrorLogEntry(
- IN PVOID IoObject,
- IN UCHAR EntrySize);
- NTKERNELAPI
- PIRP
- NTAPI
- IoAllocateIrp(
- IN CCHAR StackSize,
- IN BOOLEAN ChargeQuota);
- NTKERNELAPI
- PMDL
- NTAPI
- IoAllocateMdl(
- IN PVOID VirtualAddress OPTIONAL,
- IN ULONG Length,
- IN BOOLEAN SecondaryBuffer,
- IN BOOLEAN ChargeQuota,
- IN OUT PIRP Irp OPTIONAL);
- NTKERNELAPI
- PIO_WORKITEM
- NTAPI
- IoAllocateWorkItem(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoAttachDevice(
- IN PDEVICE_OBJECT SourceDevice,
- IN PUNICODE_STRING TargetDevice,
- OUT PDEVICE_OBJECT *AttachedDevice);
- NTKERNELAPI
- PDEVICE_OBJECT
- NTAPI
- IoAttachDeviceToDeviceStack(
- IN PDEVICE_OBJECT SourceDevice,
- IN PDEVICE_OBJECT TargetDevice);
- NTKERNELAPI
- PIRP
- NTAPI
- IoBuildAsynchronousFsdRequest(
- IN ULONG MajorFunction,
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG Length OPTIONAL,
- IN PLARGE_INTEGER StartingOffset OPTIONAL,
- IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL);
- NTKERNELAPI
- PIRP
- NTAPI
- IoBuildDeviceIoControlRequest(
- IN ULONG IoControlCode,
- IN PDEVICE_OBJECT DeviceObject,
- IN PVOID InputBuffer OPTIONAL,
- IN ULONG InputBufferLength,
- OUT PVOID OutputBuffer OPTIONAL,
- IN ULONG OutputBufferLength,
- IN BOOLEAN InternalDeviceIoControl,
- IN PKEVENT Event,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
- NTKERNELAPI
- VOID
- NTAPI
- IoBuildPartialMdl(
- IN PMDL SourceMdl,
- IN OUT PMDL TargetMdl,
- IN PVOID VirtualAddress,
- IN ULONG Length);
- NTKERNELAPI
- PIRP
- NTAPI
- IoBuildSynchronousFsdRequest(
- IN ULONG MajorFunction,
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG Length OPTIONAL,
- IN PLARGE_INTEGER StartingOffset OPTIONAL,
- IN PKEVENT Event,
- OUT PIO_STATUS_BLOCK IoStatusBlock);
- NTKERNELAPI
- NTSTATUS
- FASTCALL
- IofCallDriver(
- IN PDEVICE_OBJECT DeviceObject,
- IN OUT PIRP Irp);
- #define IoCallDriver IofCallDriver
- NTKERNELAPI
- VOID
- FASTCALL
- IofCompleteRequest(
- IN PIRP Irp,
- IN CCHAR PriorityBoost);
- #define IoCompleteRequest IofCompleteRequest
- NTKERNELAPI
- BOOLEAN
- NTAPI
- IoCancelIrp(
- IN PIRP Irp);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCheckShareAccess(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess,
- IN BOOLEAN Update);
- NTKERNELAPI
- VOID
- FASTCALL
- IofCompleteRequest(
- IN PIRP Irp,
- IN CCHAR PriorityBoost);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoConnectInterrupt(
- OUT PKINTERRUPT *InterruptObject,
- IN PKSERVICE_ROUTINE ServiceRoutine,
- IN PVOID ServiceContext OPTIONAL,
- IN PKSPIN_LOCK SpinLock OPTIONAL,
- IN ULONG Vector,
- IN KIRQL Irql,
- IN KIRQL SynchronizeIrql,
- IN KINTERRUPT_MODE InterruptMode,
- IN BOOLEAN ShareVector,
- IN KAFFINITY ProcessorEnableMask,
- IN BOOLEAN FloatingSave);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCreateDevice(
- IN PDRIVER_OBJECT DriverObject,
- IN ULONG DeviceExtensionSize,
- IN PUNICODE_STRING DeviceName OPTIONAL,
- IN DEVICE_TYPE DeviceType,
- IN ULONG DeviceCharacteristics,
- IN BOOLEAN Exclusive,
- OUT PDEVICE_OBJECT *DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCreateFile(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize OPTIONAL,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG Disposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer OPTIONAL,
- IN ULONG EaLength,
- IN CREATE_FILE_TYPE CreateFileType,
- IN PVOID InternalParameters OPTIONAL,
- IN ULONG Options);
- NTKERNELAPI
- PKEVENT
- NTAPI
- IoCreateNotificationEvent(
- IN PUNICODE_STRING EventName,
- OUT PHANDLE EventHandle);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCreateSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName,
- IN PUNICODE_STRING DeviceName);
- NTKERNELAPI
- PKEVENT
- NTAPI
- IoCreateSynchronizationEvent(
- IN PUNICODE_STRING EventName,
- OUT PHANDLE EventHandle);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCreateUnprotectedSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName,
- IN PUNICODE_STRING DeviceName);
- NTKERNELAPI
- VOID
- NTAPI
- IoDeleteDevice(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoDeleteSymbolicLink(
- IN PUNICODE_STRING SymbolicLinkName);
- NTKERNELAPI
- VOID
- NTAPI
- IoDetachDevice(
- IN OUT PDEVICE_OBJECT TargetDevice);
- NTKERNELAPI
- VOID
- NTAPI
- IoDisconnectInterrupt(
- IN PKINTERRUPT InterruptObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoFreeIrp(
- IN PIRP Irp);
- NTKERNELAPI
- VOID
- NTAPI
- IoFreeMdl(
- IN PMDL Mdl);
- NTKERNELAPI
- VOID
- NTAPI
- IoFreeWorkItem(
- IN PIO_WORKITEM IoWorkItem);
- NTKERNELAPI
- PDEVICE_OBJECT
- NTAPI
- IoGetAttachedDevice(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- PDEVICE_OBJECT
- NTAPI
- IoGetAttachedDeviceReference(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetBootDiskInformation(
- IN OUT PBOOTDISK_INFORMATION BootDiskInformation,
- IN ULONG Size);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDeviceInterfaceAlias(
- IN PUNICODE_STRING SymbolicLinkName,
- IN CONST GUID *AliasInterfaceClassGuid,
- OUT PUNICODE_STRING AliasSymbolicLinkName);
- NTKERNELAPI
- PEPROCESS
- NTAPI
- IoGetCurrentProcess(VOID);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDeviceInterfaces(
- IN CONST GUID *InterfaceClassGuid,
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN ULONG Flags,
- OUT PWSTR *SymbolicLinkList);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDeviceObjectPointer(
- IN PUNICODE_STRING ObjectName,
- IN ACCESS_MASK DesiredAccess,
- OUT PFILE_OBJECT *FileObject,
- OUT PDEVICE_OBJECT *DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDeviceProperty(
- IN PDEVICE_OBJECT DeviceObject,
- IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
- IN ULONG BufferLength,
- OUT PVOID PropertyBuffer,
- OUT PULONG ResultLength);
- NTKERNELAPI
- PDMA_ADAPTER
- NTAPI
- IoGetDmaAdapter(
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN PDEVICE_DESCRIPTION DeviceDescription,
- IN OUT PULONG NumberOfMapRegisters);
- NTKERNELAPI
- PVOID
- NTAPI
- IoGetDriverObjectExtension(
- IN PDRIVER_OBJECT DriverObject,
- IN PVOID ClientIdentificationAddress);
- NTKERNELAPI
- PVOID
- NTAPI
- IoGetInitialStack(VOID);
- NTKERNELAPI
- PDEVICE_OBJECT
- NTAPI
- IoGetRelatedDeviceObject(
- IN PFILE_OBJECT FileObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoQueueWorkItem(
- IN PIO_WORKITEM IoWorkItem,
- IN PIO_WORKITEM_ROUTINE WorkerRoutine,
- IN WORK_QUEUE_TYPE QueueType,
- IN PVOID Context OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- IoInitializeIrp(
- IN OUT PIRP Irp,
- IN USHORT PacketSize,
- IN CCHAR StackSize);
- NTKERNELAPI
- VOID
- NTAPI
- IoInitializeRemoveLockEx(
- IN PIO_REMOVE_LOCK Lock,
- IN ULONG AllocateTag,
- IN ULONG MaxLockedMinutes,
- IN ULONG HighWatermark,
- IN ULONG RemlockSize);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoInitializeTimer(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_TIMER_ROUTINE TimerRoutine,
- IN PVOID Context OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- IoInvalidateDeviceRelations(
- IN PDEVICE_OBJECT DeviceObject,
- IN DEVICE_RELATION_TYPE Type);
- NTKERNELAPI
- VOID
- NTAPI
- IoInvalidateDeviceState(
- IN PDEVICE_OBJECT PhysicalDeviceObject);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- IoIsWdmVersionAvailable(
- IN UCHAR MajorVersion,
- IN UCHAR MinorVersion);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoOpenDeviceInterfaceRegistryKey(
- IN PUNICODE_STRING SymbolicLinkName,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE DeviceInterfaceKey);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoOpenDeviceRegistryKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG DevInstKeyType,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE DevInstRegKey);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoRegisterDeviceInterface(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN CONST GUID *InterfaceClassGuid,
- IN PUNICODE_STRING ReferenceString OPTIONAL,
- OUT PUNICODE_STRING SymbolicLinkName);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoRegisterPlugPlayNotification(
- IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
- IN ULONG EventCategoryFlags,
- IN PVOID EventCategoryData OPTIONAL,
- IN PDRIVER_OBJECT DriverObject,
- IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
- IN OUT PVOID Context OPTIONAL,
- OUT PVOID *NotificationEntry);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoRegisterShutdownNotification(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoReleaseCancelSpinLock(
- IN KIRQL Irql);
- NTKERNELAPI
- VOID
- NTAPI
- IoReleaseRemoveLockAndWaitEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN ULONG RemlockSize);
- NTKERNELAPI
- VOID
- NTAPI
- IoReleaseRemoveLockEx(
- IN PIO_REMOVE_LOCK RemoveLock,
- IN PVOID Tag OPTIONAL,
- IN ULONG RemlockSize);
- NTKERNELAPI
- VOID
- NTAPI
- IoRemoveShareAccess(
- IN PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoReportTargetDeviceChange(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PVOID NotificationStructure);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoReportTargetDeviceChangeAsynchronous(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PVOID NotificationStructure,
- IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
- IN PVOID Context OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- IoRequestDeviceEject(
- IN PDEVICE_OBJECT PhysicalDeviceObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoReuseIrp(
- IN OUT PIRP Irp,
- IN NTSTATUS Status);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoSetDeviceInterfaceState(
- IN PUNICODE_STRING SymbolicLinkName,
- IN BOOLEAN Enable);
- NTKERNELAPI
- VOID
- NTAPI
- IoSetShareAccess(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- OUT PSHARE_ACCESS ShareAccess);
- NTKERNELAPI
- VOID
- NTAPI
- IoStartNextPacket(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN Cancelable);
- NTKERNELAPI
- VOID
- NTAPI
- IoStartNextPacketByKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN Cancelable,
- IN ULONG Key);
- NTKERNELAPI
- VOID
- NTAPI
- IoStartPacket(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PULONG Key OPTIONAL,
- IN PDRIVER_CANCEL CancelFunction OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- IoStartTimer(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoStopTimer(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoUnregisterPlugPlayNotification(
- IN PVOID NotificationEntry);
- NTKERNELAPI
- VOID
- NTAPI
- IoUnregisterShutdownNotification(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoUpdateShareAccess(
- IN PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIAllocateInstanceIds(
- IN GUID *Guid,
- IN ULONG InstanceCount,
- OUT ULONG *FirstInstanceId);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIQuerySingleInstanceMultiple(
- IN PVOID *DataBlockObjectList,
- IN PUNICODE_STRING InstanceNames,
- IN ULONG ObjectCount,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIRegistrationControl(
- IN PDEVICE_OBJECT DeviceObject,
- IN ULONG Action);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMISuggestInstanceName(
- IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
- IN PUNICODE_STRING SymbolicLinkName OPTIONAL,
- IN BOOLEAN CombineNames,
- OUT PUNICODE_STRING SuggestedInstanceName);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIWriteEvent(
- IN OUT PVOID WnodeEventItem);
- NTKERNELAPI
- VOID
- NTAPI
- IoWriteErrorLogEntry(
- IN PVOID ElEntry);
- NTKERNELAPI
- PIRP
- NTAPI
- IoGetTopLevelIrp(VOID);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoRegisterLastChanceShutdownNotification(
- IN PDEVICE_OBJECT DeviceObject);
- NTKERNELAPI
- VOID
- NTAPI
- IoSetTopLevelIrp(
- IN PIRP Irp OPTIONAL);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCsqInitialize(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_INSERT_IRP CsqInsertIrp,
- IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
- IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
- IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
- IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
- IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
- NTKERNELAPI
- VOID
- NTAPI
- IoCsqInsertIrp(
- IN PIO_CSQ Csq,
- IN PIRP Irp,
- IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL);
- NTKERNELAPI
- PIRP
- NTAPI
- IoCsqRemoveIrp(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_IRP_CONTEXT Context);
- NTKERNELAPI
- PIRP
- NTAPI
- IoCsqRemoveNextIrp(
- IN PIO_CSQ Csq,
- IN PVOID PeekContext OPTIONAL);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- IoForwardIrpSynchronously(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp);
- #define IoForwardAndCatchIrp IoForwardIrpSynchronously
- NTKERNELAPI
- VOID
- NTAPI
- IoFreeErrorLogEntry(
- PVOID ElEntry);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoSetCompletionRoutineEx(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PIO_COMPLETION_ROUTINE CompletionRoutine,
- IN PVOID Context,
- IN BOOLEAN InvokeOnSuccess,
- IN BOOLEAN InvokeOnError,
- IN BOOLEAN InvokeOnCancel);
- VOID
- NTAPI
- IoSetStartIoAttributes(
- IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN DeferredStartIo,
- IN BOOLEAN NonCancelable);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIDeviceObjectToInstanceName(
- IN PVOID DataBlockObject,
- IN PDEVICE_OBJECT DeviceObject,
- OUT PUNICODE_STRING InstanceName);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIExecuteMethod(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG MethodId,
- IN ULONG InBufferSize,
- IN OUT PULONG OutBufferSize,
- IN OUT PUCHAR InOutBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIHandleToInstanceName(
- IN PVOID DataBlockObject,
- IN HANDLE FileHandle,
- OUT PUNICODE_STRING InstanceName);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIOpenBlock(
- IN GUID *DataBlockGuid,
- IN ULONG DesiredAccess,
- OUT PVOID *DataBlockObject);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIQueryAllData(
- IN PVOID DataBlockObject,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIQueryAllDataMultiple(
- IN PVOID *DataBlockObjectList,
- IN ULONG ObjectCount,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMIQuerySingleInstance(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN OUT ULONG *InOutBufferSize,
- OUT PVOID OutBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMISetNotificationCallback(
- IN OUT PVOID Object,
- IN WMI_NOTIFICATION_CALLBACK Callback,
- IN PVOID Context OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMISetSingleInstance(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG Version,
- IN ULONG ValueBufferSize,
- IN PVOID ValueBuffer);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoWMISetSingleItem(
- IN PVOID DataBlockObject,
- IN PUNICODE_STRING InstanceName,
- IN ULONG DataItemId,
- IN ULONG Version,
- IN ULONG ValueBufferSize,
- IN PVOID ValueBuffer);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_WINXPSP1)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoValidateDeviceIoControlAccess(
- IN PIRP Irp,
- IN ULONG RequiredAccess);
- #endif
- #if (NTDDI_VERSION >= NTDDI_WS03)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCsqInitializeEx(
- IN PIO_CSQ Csq,
- IN PIO_CSQ_INSERT_IRP_EX CsqInsertIrp,
- IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
- IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
- IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
- IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
- IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCsqInsertIrpEx(
- IN PIO_CSQ Csq,
- IN PIRP Irp,
- IN PIO_CSQ_IRP_CONTEXT Context OPTIONAL,
- IN PVOID InsertContext OPTIONAL);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetBootDiskInformationLite(
- OUT PBOOTDISK_INFORMATION_LITE *BootDiskInformation);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoCheckShareAccessEx(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- IN OUT PSHARE_ACCESS ShareAccess,
- IN BOOLEAN Update,
- IN PBOOLEAN WritePermission);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoConnectInterruptEx(
- IN OUT PIO_CONNECT_INTERRUPT_PARAMETERS Parameters);
- NTKERNELAPI
- VOID
- NTAPI
- IoDisconnectInterruptEx(
- IN PIO_DISCONNECT_INTERRUPT_PARAMETERS Parameters);
- LOGICAL
- NTAPI
- IoWithinStackLimits(
- IN ULONG_PTR RegionStart,
- IN SIZE_T RegionSize);
- NTKERNELAPI
- VOID
- NTAPI
- IoSetShareAccessEx(
- IN ACCESS_MASK DesiredAccess,
- IN ULONG DesiredShareAccess,
- IN OUT PFILE_OBJECT FileObject,
- OUT PSHARE_ACCESS ShareAccess,
- IN PBOOLEAN WritePermission);
- ULONG
- NTAPI
- IoSizeofWorkItem(VOID);
- VOID
- NTAPI
- IoInitializeWorkItem(
- IN PVOID IoObject,
- IN PIO_WORKITEM IoWorkItem);
- VOID
- NTAPI
- IoUninitializeWorkItem(
- IN PIO_WORKITEM IoWorkItem);
- VOID
- NTAPI
- IoQueueWorkItemEx(
- IN PIO_WORKITEM IoWorkItem,
- IN PIO_WORKITEM_ROUTINE_EX WorkerRoutine,
- IN WORK_QUEUE_TYPE QueueType,
- IN PVOID Context OPTIONAL);
- IO_PRIORITY_HINT
- NTAPI
- IoGetIoPriorityHint(
- IN PIRP Irp);
- NTSTATUS
- NTAPI
- IoSetIoPriorityHint(
- IN PIRP Irp,
- IN IO_PRIORITY_HINT PriorityHint);
- NTSTATUS
- NTAPI
- IoAllocateSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN ULONG Length,
- IN PVOID Signature,
- OUT PVOID *StreamIdentifier);
- PVOID
- NTAPI
- IoGetSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN PVOID Signature);
- NTSTATUS
- NTAPI
- IoFreeSfioStreamIdentifier(
- IN PFILE_OBJECT FileObject,
- IN PVOID Signature);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoRequestDeviceEjectEx(
- IN PDEVICE_OBJECT PhysicalDeviceObject,
- IN PIO_DEVICE_EJECT_CALLBACK Callback OPTIONAL,
- IN PVOID Context OPTIONAL,
- IN PDRIVER_OBJECT DriverObject OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoSetDevicePropertyData(
- IN PDEVICE_OBJECT Pdo,
- IN CONST DEVPROPKEY *PropertyKey,
- IN LCID Lcid,
- IN ULONG Flags,
- IN DEVPROPTYPE Type,
- IN ULONG Size,
- IN PVOID Data OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDevicePropertyData(
- PDEVICE_OBJECT Pdo,
- CONST DEVPROPKEY *PropertyKey,
- LCID Lcid,
- ULONG Flags,
- ULONG Size,
- PVOID Data,
- PULONG RequiredSize,
- PDEVPROPTYPE Type);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #define IoCallDriverStackSafeDefault(a, b) IoCallDriver(a, b)
- #if (NTDDI_VERSION >= NTDDI_WS08)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoReplacePartitionUnit(
- IN PDEVICE_OBJECT TargetPdo,
- IN PDEVICE_OBJECT SparePdo,
- IN ULONG Flags);
- #endif
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetAffinityInterrupt(
- IN PKINTERRUPT InterruptObject,
- OUT PGROUP_AFFINITY GroupAffinity);
- NTSTATUS
- NTAPI
- IoGetContainerInformation(
- IN IO_CONTAINER_INFORMATION_CLASS InformationClass,
- IN PVOID ContainerObject OPTIONAL,
- IN OUT PVOID Buffer OPTIONAL,
- IN ULONG BufferLength);
- NTSTATUS
- NTAPI
- IoRegisterContainerNotification(
- IN IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
- IN PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
- IN PVOID NotificationInformation OPTIONAL,
- IN ULONG NotificationInformationLength,
- OUT PVOID CallbackRegistration);
- VOID
- NTAPI
- IoUnregisterContainerNotification(
- IN PVOID CallbackRegistration);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoUnregisterPlugPlayNotificationEx(
- IN PVOID NotificationEntry);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- IoGetDeviceNumaNode(
- IN PDEVICE_OBJECT Pdo,
- OUT PUSHORT NodeNumber);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #if defined(_WIN64)
- NTKERNELAPI
- ULONG
- NTAPI
- IoWMIDeviceObjectToProviderId(
- IN PDEVICE_OBJECT DeviceObject);
- #else
- #define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject))
- #endif
- /*
- * USHORT
- * IoSizeOfIrp(
- * IN CCHAR StackSize)
- */
- #define IoSizeOfIrp(_StackSize) \
- ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
- FORCEINLINE
- VOID
- IoSkipCurrentIrpStackLocation(
- IN OUT PIRP Irp)
- {
- ASSERT(Irp->CurrentLocation <= Irp->StackCount);
- Irp->CurrentLocation++;
- #ifdef NONAMELESSUNION
- Irp->Tail.Overlay.s.u.CurrentStackLocation++;
- #else
- Irp->Tail.Overlay.CurrentStackLocation++;
- #endif
- }
- FORCEINLINE
- VOID
- IoSetNextIrpStackLocation(
- IN OUT PIRP Irp)
- {
- ASSERT(Irp->CurrentLocation > 0);
- Irp->CurrentLocation--;
- #ifdef NONAMELESSUNION
- Irp->Tail.Overlay.s.u.CurrentStackLocation--;
- #else
- Irp->Tail.Overlay.CurrentStackLocation--;
- #endif
- }
- FORCEINLINE
- PIO_STACK_LOCATION
- IoGetNextIrpStackLocation(
- IN PIRP Irp)
- {
- ASSERT(Irp->CurrentLocation > 0);
- #ifdef NONAMELESSUNION
- return ((Irp)->Tail.Overlay.s.u.CurrentStackLocation - 1 );
- #else
- return ((Irp)->Tail.Overlay.CurrentStackLocation - 1 );
- #endif
- }
- FORCEINLINE
- VOID
- IoSetCompletionRoutine(
- IN PIRP Irp,
- IN PIO_COMPLETION_ROUTINE CompletionRoutine OPTIONAL,
- IN PVOID Context OPTIONAL,
- IN BOOLEAN InvokeOnSuccess,
- IN BOOLEAN InvokeOnError,
- IN BOOLEAN InvokeOnCancel)
- {
- PIO_STACK_LOCATION irpSp;
- ASSERT( (InvokeOnSuccess || InvokeOnError || InvokeOnCancel) ? (CompletionRoutine != NULL) : TRUE );
- irpSp = IoGetNextIrpStackLocation(Irp);
- irpSp->CompletionRoutine = CompletionRoutine;
- irpSp->Context = Context;
- irpSp->Control = 0;
- if (InvokeOnSuccess) {
- irpSp->Control = SL_INVOKE_ON_SUCCESS;
- }
- if (InvokeOnError) {
- irpSp->Control |= SL_INVOKE_ON_ERROR;
- }
- if (InvokeOnCancel) {
- irpSp->Control |= SL_INVOKE_ON_CANCEL;
- }
- }
- /*
- * PDRIVER_CANCEL
- * IoSetCancelRoutine(
- * IN PIRP Irp,
- * IN PDRIVER_CANCEL CancelRoutine)
- */
- #define IoSetCancelRoutine(_Irp, \
- _CancelRoutine) \
- ((PDRIVER_CANCEL) (ULONG_PTR) InterlockedExchangePointer( \
- (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (ULONG_PTR) (_CancelRoutine)))
- /*
- * VOID
- * IoRequestDpc(
- * IN PDEVICE_OBJECT DeviceObject,
- * IN PIRP Irp,
- * IN PVOID Context);
- */
- #define IoRequestDpc(DeviceObject, Irp, Context)( \
- KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
- /*
- * VOID
- * IoReleaseRemoveLock(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN PVOID Tag)
- */
- #define IoReleaseRemoveLock(_RemoveLock, \
- _Tag) \
- IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
- /*
- * VOID
- * IoReleaseRemoveLockAndWait(
- * IN PIO_REMOVE_LOCK RemoveLock,
- * IN PVOID Tag)
- */
- #define IoReleaseRemoveLockAndWait(_RemoveLock, \
- _Tag) \
- IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
- #if defined(_WIN64)
- NTKERNELAPI
- BOOLEAN
- IoIs32bitProcess(
- IN PIRP Irp OPTIONAL);
- #endif
- #define PLUGPLAY_REGKEY_DEVICE 1
- #define PLUGPLAY_REGKEY_DRIVER 2
- #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
- FORCEINLINE
- PIO_STACK_LOCATION
- IoGetCurrentIrpStackLocation(
- IN PIRP Irp)
- {
- ASSERT(Irp->CurrentLocation <= Irp->StackCount + 1);
- #ifdef NONAMELESSUNION
- return Irp->Tail.Overlay.s.u.CurrentStackLocation;
- #else
- return Irp->Tail.Overlay.CurrentStackLocation;
- #endif
- }
- FORCEINLINE
- VOID
- IoMarkIrpPending(
- IN OUT PIRP Irp)
- {
- IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED;
- }
- /*
- * BOOLEAN
- * IoIsErrorUserInduced(
- * IN NTSTATUS Status);
- */
- #define IoIsErrorUserInduced(Status) \
- ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \
- ((Status) == STATUS_IO_TIMEOUT) || \
- ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \
- ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \
- ((Status) == STATUS_VERIFY_REQUIRED) || \
- ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \
- ((Status) == STATUS_WRONG_VOLUME)))
- /* VOID
- * IoInitializeRemoveLock(
- * IN PIO_REMOVE_LOCK Lock,
- * IN ULONG AllocateTag,
- * IN ULONG MaxLockedMinutes,
- * IN ULONG HighWatermark)
- */
- #define IoInitializeRemoveLock( \
- Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
- IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
- HighWatermark, sizeof(IO_REMOVE_LOCK))
- FORCEINLINE
- VOID
- IoInitializeDpcRequest(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_DPC_ROUTINE DpcRoutine)
- {
- KeInitializeDpc( &DeviceObject->Dpc,
- (PKDEFERRED_ROUTINE) DpcRoutine,
- DeviceObject );
- }
- #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
- /*
- * ULONG
- * IoGetFunctionCodeFromCtlCode(
- * IN ULONG ControlCode)
- */
- #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
- (((_ControlCode) >> 2) & 0x00000FFF)
- FORCEINLINE
- VOID
- IoCopyCurrentIrpStackLocationToNext(
- IN OUT PIRP Irp)
- {
- PIO_STACK_LOCATION irpSp;
- PIO_STACK_LOCATION nextIrpSp;
- irpSp = IoGetCurrentIrpStackLocation(Irp);
- nextIrpSp = IoGetNextIrpStackLocation(Irp);
- RtlCopyMemory( nextIrpSp, irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine));
- nextIrpSp->Control = 0;
- }
- NTKERNELAPI
- VOID
- NTAPI
- IoGetStackLimits(
- OUT PULONG_PTR LowLimit,
- OUT PULONG_PTR HighLimit);
- FORCEINLINE
- ULONG_PTR
- IoGetRemainingStackSize(VOID)
- {
- ULONG_PTR End, Begin;
- ULONG_PTR Result;
- IoGetStackLimits(&Begin, &End);
- Result = (ULONG_PTR)(&End) - Begin;
- return Result;
- }
- #if (NTDDI_VERSION >= NTDDI_WS03)
- FORCEINLINE
- VOID
- IoInitializeThreadedDpcRequest(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIO_DPC_ROUTINE DpcRoutine)
- {
- KeInitializeThreadedDpc(&DeviceObject->Dpc,
- (PKDEFERRED_ROUTINE) DpcRoutine,
- DeviceObject );
- }
- #endif
- /******************************************************************************
- * Power Management Support Functions *
- ******************************************************************************/
- #define PoSetDeviceBusy(IdlePointer) ((void)(*(IdlePointer) = 0))
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoCallDriver(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN OUT struct _IRP *Irp);
- NTKERNELAPI
- PULONG
- NTAPI
- PoRegisterDeviceForIdleDetection(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN ULONG ConservationIdleTime,
- IN ULONG PerformanceIdleTime,
- IN DEVICE_POWER_STATE State);
- NTKERNELAPI
- PVOID
- NTAPI
- PoRegisterSystemState(
- IN OUT PVOID StateHandle OPTIONAL,
- IN EXECUTION_STATE Flags);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoRequestPowerIrp(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN UCHAR MinorFunction,
- IN POWER_STATE PowerState,
- IN PREQUEST_POWER_COMPLETE CompletionFunction OPTIONAL,
- IN PVOID Context OPTIONAL,
- OUT struct _IRP **Irp OPTIONAL);
- NTKERNELAPI
- POWER_STATE
- NTAPI
- PoSetPowerState(
- IN struct _DEVICE_OBJECT *DeviceObject,
- IN POWER_STATE_TYPE Type,
- IN POWER_STATE State);
- NTKERNELAPI
- VOID
- NTAPI
- PoSetSystemState(
- IN EXECUTION_STATE Flags);
- NTKERNELAPI
- VOID
- NTAPI
- PoStartNextPowerIrp(
- IN OUT struct _IRP *Irp);
- NTKERNELAPI
- VOID
- NTAPI
- PoUnregisterSystemState(
- IN OUT PVOID StateHandle);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoRequestShutdownEvent(
- OUT PVOID *Event);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- VOID
- NTAPI
- PoSetSystemWake(
- IN OUT struct _IRP *Irp);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- PoGetSystemWake(
- IN struct _IRP *Irp);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoRegisterPowerSettingCallback(
- IN PDEVICE_OBJECT DeviceObject OPTIONAL,
- IN LPCGUID SettingGuid,
- IN PPOWER_SETTING_CALLBACK Callback,
- IN PVOID Context OPTIONAL,
- OUT PVOID *Handle OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoUnregisterPowerSettingCallback(
- IN OUT PVOID Handle);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_VISTASP1)
- NTKERNELAPI
- VOID
- NTAPI
- PoSetDeviceBusyEx(
- IN OUT PULONG IdlePointer);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTKERNELAPI
- VOID
- NTAPI
- PoStartDeviceBusy(
- IN OUT PULONG IdlePointer);
- NTKERNELAPI
- VOID
- NTAPI
- PoEndDeviceBusy(
- IN OUT PULONG IdlePointer);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- PoQueryWatchdogTime(
- IN PDEVICE_OBJECT Pdo,
- OUT PULONG SecondsRemaining);
- NTKERNELAPI
- VOID
- NTAPI
- PoDeletePowerRequest(
- IN OUT PVOID PowerRequest);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoSetPowerRequest(
- IN OUT PVOID PowerRequest,
- IN POWER_REQUEST_TYPE Type);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoClearPowerRequest(
- IN OUT PVOID PowerRequest,
- IN POWER_REQUEST_TYPE Type);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PoCreatePowerRequest(
- OUT PVOID *PowerRequest,
- IN PDEVICE_OBJECT DeviceObject,
- IN PCOUNTED_REASON_CONTEXT Context);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- /******************************************************************************
- * Executive Functions *
- ******************************************************************************/
- #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
- #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
- #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
- #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
- #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
- #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
- #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
- #define ExInitializeSListHead InitializeSListHead
- #if defined(_NTHAL_) && defined(_X86_)
- NTKERNELAPI
- VOID
- FASTCALL
- ExiAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- ExiReleaseFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExiTryToAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- #define ExAcquireFastMutex ExiAcquireFastMutex
- #define ExReleaseFastMutex ExiReleaseFastMutex
- #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
- #else
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- VOID
- FASTCALL
- ExAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExTryToAcquireFastMutex(
- IN OUT PFAST_MUTEX FastMutex);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #endif /* defined(_NTHAL_) && defined(_X86_) */
- #if defined(_X86_)
- #define ExInterlockedAddUlong ExfInterlockedAddUlong
- #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
- #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
- #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
- #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
- #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
- #endif /* defined(_X86_) */
- #if defined(_WIN64)
- #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
- defined(_NTHAL_) || defined(_NTOSP_)
- NTKERNELAPI
- USHORT
- ExQueryDepthSList(IN PSLIST_HEADER ListHead);
- #else
- FORCEINLINE
- USHORT
- ExQueryDepthSList(IN PSLIST_HEADER ListHead)
- {
- return (USHORT)(ListHead->Alignment & 0xffff);
- }
- #endif
- NTKERNELAPI
- PSLIST_ENTRY
- ExpInterlockedFlushSList(
- PSLIST_HEADER ListHead);
- NTKERNELAPI
- PSLIST_ENTRY
- ExpInterlockedPopEntrySList(
- PSLIST_HEADER ListHead);
- NTKERNELAPI
- PSLIST_ENTRY
- ExpInterlockedPushEntrySList(
- PSLIST_HEADER ListHead,
- PSLIST_ENTRY ListEntry);
- #define ExInterlockedFlushSList(Head) \
- ExpInterlockedFlushSList(Head)
- #define ExInterlockedPopEntrySList(Head, Lock) \
- ExpInterlockedPopEntrySList(Head)
- #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
- ExpInterlockedPushEntrySList(Head, Entry)
- #else /* !defined(_WIN64) */
- #ifdef NONAMELESSUNION
- #define ExQueryDepthSList(listhead) (listhead)->s.Depth
- #else
- #define ExQueryDepthSList(listhead) (listhead)->Depth
- #endif
- NTKERNELAPI
- PSINGLE_LIST_ENTRY
- FASTCALL
- ExInterlockedFlushSList(
- IN OUT PSLIST_HEADER ListHead);
- #endif /* !defined(_WIN64) */
- #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- NTKERNELAPI
- PSINGLE_LIST_ENTRY
- FASTCALL
- ExInterlockedPopEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PKSPIN_LOCK Lock);
- NTKERNELAPI
- PSINGLE_LIST_ENTRY
- FASTCALL
- ExInterlockedPushEntrySList(
- IN PSLIST_HEADER ListHead,
- IN PSINGLE_LIST_ENTRY ListEntry,
- IN PKSPIN_LOCK Lock);
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocateFromPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside);
- NTKERNELAPI
- VOID
- NTAPI
- ExFreeToPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry);
- #else /* !_WIN2K_COMPAT_SLIST_USAGE */
- #if !defined(_WIN64)
- #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
- InterlockedPopEntrySList(_ListHead)
- #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
- InterlockedPushEntrySList(_ListHead, _ListEntry)
- #endif
- static __inline
- PVOID
- ExAllocateFromPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside)
- {
- PVOID Entry;
- Lookaside->L.TotalAllocates++;
- #ifdef NONAMELESSUNION
- Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
- if (Entry == NULL) {
- Lookaside->L.u2.AllocateMisses++;
- Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- #else /* NONAMELESSUNION */
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses++;
- Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- #endif /* NONAMELESSUNION */
- return Entry;
- }
- static __inline
- VOID
- ExFreeToPagedLookasideList(
- IN OUT PPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry)
- {
- Lookaside->L.TotalFrees++;
- #ifdef NONAMELESSUNION
- if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.u3.FreeMisses++;
- (Lookaside->L.u5.Free)(Entry);
- } else {
- InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
- }
- #else /* NONAMELESSUNION */
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses++;
- (Lookaside->L.Free)(Entry);
- } else {
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
- }
- #endif /* NONAMELESSUNION */
- }
- #endif /* _WIN2K_COMPAT_SLIST_USAGE */
- /* ERESOURCE_THREAD
- * ExGetCurrentResourceThread(
- * VOID);
- */
- #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
- #define ExReleaseResource(R) (ExReleaseResourceLite(R))
- /* VOID
- * ExInitializeWorkItem(
- * IN PWORK_QUEUE_ITEM Item,
- * IN PWORKER_THREAD_ROUTINE Routine,
- * IN PVOID Context)
- */
- #define ExInitializeWorkItem(Item, Routine, Context) \
- { \
- (Item)->WorkerRoutine = Routine; \
- (Item)->Parameter = Context; \
- (Item)->List.Flink = NULL; \
- }
- FORCEINLINE
- VOID
- ExInitializeFastMutex(
- OUT PFAST_MUTEX FastMutex)
- {
- FastMutex->Count = FM_LOCK_BIT;
- FastMutex->Owner = NULL;
- FastMutex->Contention = 0;
- KeInitializeEvent(&FastMutex->Event, SynchronizationEvent, FALSE);
- return;
- }
- typedef void *PEXT_CANCEL_PARAMETERS;
- typedef void (NTAPI EXT_DELETE_CALLBACK)(void *context);
- typedef EXT_DELETE_CALLBACK *PEXT_DELETE_CALLBACK;
- typedef struct _EXT_DELETE_PARAMETERS
- {
- ULONG Version;
- ULONG Reserved;
- PEXT_DELETE_CALLBACK DeleteCallback;
- void *DeleteContext;
- } EXT_DELETE_PARAMETERS, *PEXT_DELETE_PARAMETERS;
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- typedef struct _EX_TIMER *PEX_TIMER;
- typedef void (NTAPI EXT_CALLBACK)(PEX_TIMER, PVOID);
- typedef EXT_CALLBACK *PEXT_CALLBACK;
- NTKERNELAPI
- VOID
- FASTCALL
- ExAcquireFastMutexUnsafe(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseFastMutexUnsafe(
- IN OUT PFAST_MUTEX FastMutex);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExAcquireResourceExclusiveLite(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExAcquireResourceSharedLite(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExAcquireSharedStarveExclusive(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExAcquireSharedWaitForExclusive(
- IN OUT PERESOURCE Resource,
- IN BOOLEAN Wait);
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocatePool(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes);
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocatePoolWithQuota(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes);
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocatePoolWithQuotaTag(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag);
- #ifndef POOL_TAGGING
- #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
- #endif
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocatePoolWithTag(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag);
- #ifndef POOL_TAGGING
- #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
- #endif
- NTKERNELAPI
- PVOID
- NTAPI
- ExAllocatePoolWithTagPriority(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag,
- IN EX_POOL_PRIORITY Priority);
- NTKERNELAPI
- VOID
- NTAPI
- ExConvertExclusiveToSharedLite(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ExCreateCallback(
- OUT PCALLBACK_OBJECT *CallbackObject,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN BOOLEAN Create,
- IN BOOLEAN AllowMultipleCallbacks);
- NTKERNELAPI
- VOID
- NTAPI
- ExDeleteNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside);
- NTKERNELAPI
- VOID
- NTAPI
- ExDeletePagedLookasideList(
- IN PPAGED_LOOKASIDE_LIST Lookaside);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ExDeleteResourceLite(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- VOID
- NTAPI
- ExFreePool(
- IN PVOID P);
- NTKERNELAPI
- VOID
- NTAPI
- ExFreePoolWithTag(
- IN PVOID P,
- IN ULONG Tag);
- NTKERNELAPI
- ULONG
- NTAPI
- ExGetExclusiveWaiterCount(
- IN PERESOURCE Resource);
- NTKERNELAPI
- KPROCESSOR_MODE
- NTAPI
- ExGetPreviousMode(VOID);
- NTKERNELAPI
- ULONG
- NTAPI
- ExGetSharedWaiterCount(
- IN PERESOURCE Resource);
- NTKERNELAPI
- VOID
- NTAPI
- ExInitializeNPagedLookasideList(
- IN PNPAGED_LOOKASIDE_LIST Lookaside,
- IN PALLOCATE_FUNCTION Allocate OPTIONAL,
- IN PFREE_FUNCTION Free OPTIONAL,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
- NTKERNELAPI
- VOID
- NTAPI
- ExInitializePagedLookasideList(
- IN PPAGED_LOOKASIDE_LIST Lookaside,
- IN PALLOCATE_FUNCTION Allocate OPTIONAL,
- IN PFREE_FUNCTION Free OPTIONAL,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ExInitializeResourceLite(
- OUT PERESOURCE Resource);
- NTKERNELAPI
- LARGE_INTEGER
- NTAPI
- ExInterlockedAddLargeInteger(
- IN PLARGE_INTEGER Addend,
- IN LARGE_INTEGER Increment,
- IN PKSPIN_LOCK Lock);
- #if defined(_WIN64)
- #define ExInterlockedAddLargeStatistic(Addend, Increment) \
- (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
- #else
- #define ExInterlockedAddLargeStatistic(Addend, Increment) \
- _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
- #endif
- NTKERNELAPI
- ULONG
- FASTCALL
- ExInterlockedAddUlong(
- IN PULONG Addend,
- IN ULONG Increment,
- IN OUT PKSPIN_LOCK Lock);
- #if defined(_AMD64_) || defined(_IA64_)
- #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
- InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
- #elif defined(_X86_)
- NTKERNELAPI
- LONGLONG
- FASTCALL
- ExfInterlockedCompareExchange64(
- IN OUT LONGLONG volatile *Destination,
- IN PLONGLONG Exchange,
- IN PLONGLONG Comperand);
- #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
- ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
- #else
- NTKERNELAPI
- LONGLONG
- FASTCALL
- ExInterlockedCompareExchange64(
- IN OUT LONGLONG volatile *Destination,
- IN PLONGLONG Exchange,
- IN PLONGLONG Comparand,
- IN PKSPIN_LOCK Lock);
- #endif /* defined(_AMD64_) || defined(_IA64_) */
- NTKERNELAPI
- PLIST_ENTRY
- FASTCALL
- ExInterlockedInsertHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
- NTKERNELAPI
- PLIST_ENTRY
- FASTCALL
- ExInterlockedInsertTailList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PLIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
- NTKERNELAPI
- PSINGLE_LIST_ENTRY
- FASTCALL
- ExInterlockedPopEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PKSPIN_LOCK Lock);
- NTKERNELAPI
- PSINGLE_LIST_ENTRY
- FASTCALL
- ExInterlockedPushEntryList(
- IN OUT PSINGLE_LIST_ENTRY ListHead,
- IN OUT PSINGLE_LIST_ENTRY ListEntry,
- IN OUT PKSPIN_LOCK Lock);
- NTKERNELAPI
- PLIST_ENTRY
- FASTCALL
- ExInterlockedRemoveHeadList(
- IN OUT PLIST_ENTRY ListHead,
- IN OUT PKSPIN_LOCK Lock);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExIsProcessorFeaturePresent(
- IN ULONG ProcessorFeature);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExIsResourceAcquiredExclusiveLite(
- IN PERESOURCE Resource);
- NTKERNELAPI
- ULONG
- NTAPI
- ExIsResourceAcquiredSharedLite(
- IN PERESOURCE Resource);
- #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
- NTKERNELAPI
- VOID
- NTAPI
- ExLocalTimeToSystemTime(
- IN PLARGE_INTEGER LocalTime,
- OUT PLARGE_INTEGER SystemTime);
- NTKERNELAPI
- VOID
- NTAPI
- ExNotifyCallback(
- IN PCALLBACK_OBJECT CallbackObject,
- IN PVOID Argument1 OPTIONAL,
- IN PVOID Argument2 OPTIONAL);
- NTKERNELAPI
- VOID
- NTAPI
- ExQueueWorkItem(
- IN OUT PWORK_QUEUE_ITEM WorkItem,
- IN WORK_QUEUE_TYPE QueueType);
- NTKERNELAPI
- DECLSPEC_NORETURN
- VOID
- NTAPI
- ExRaiseStatus(
- IN NTSTATUS Status);
- NTKERNELAPI
- PVOID
- NTAPI
- ExRegisterCallback(
- IN PCALLBACK_OBJECT CallbackObject,
- IN PCALLBACK_FUNCTION CallbackFunction,
- IN PVOID CallbackContext OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ExReinitializeResourceLite(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- VOID
- NTAPI
- ExReleaseResourceForThreadLite(
- IN OUT PERESOURCE Resource,
- IN ERESOURCE_THREAD ResourceThreadId);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseResourceLite(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- VOID
- NTAPI
- ExSetResourceOwnerPointer(
- IN OUT PERESOURCE Resource,
- IN PVOID OwnerPointer);
- NTKERNELAPI
- ULONG
- NTAPI
- ExSetTimerResolution(
- IN ULONG DesiredTime,
- IN BOOLEAN SetResolution);
- NTKERNELAPI
- VOID
- NTAPI
- ExSystemTimeToLocalTime(
- IN PLARGE_INTEGER SystemTime,
- OUT PLARGE_INTEGER LocalTime);
- NTKERNELAPI
- VOID
- NTAPI
- ExUnregisterCallback(
- IN OUT PVOID CbRegistration);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExAcquireRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
- NTKERNELAPI
- VOID
- FASTCALL
- ExInitializeRundownProtection(
- OUT PEX_RUNDOWN_REF RunRef);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReInitializeRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseRundownProtection(
- IN OUT PEX_RUNDOWN_REF RunRef);
- NTKERNELAPI
- VOID
- FASTCALL
- ExRundownCompleted(
- OUT PEX_RUNDOWN_REF RunRef);
- NTKERNELAPI
- BOOLEAN
- NTAPI
- ExVerifySuite(
- IN SUITE_TYPE SuiteType);
- NTKERNELAPI
- VOID
- FASTCALL
- ExWaitForRundownProtectionRelease(
- IN OUT PEX_RUNDOWN_REF RunRef);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExAcquireRundownProtectionEx(
- IN OUT PEX_RUNDOWN_REF RunRef,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseRundownProtectionEx(
- IN OUT PEX_RUNDOWN_REF RunRef,
- IN ULONG Count);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
- #if (NTDDI_VERSION >= NTDDI_WS03SP1)
- NTKERNELAPI
- PEX_RUNDOWN_REF_CACHE_AWARE
- NTAPI
- ExAllocateCacheAwareRundownProtection(
- IN POOL_TYPE PoolType,
- IN ULONG PoolTag);
- NTKERNELAPI
- SIZE_T
- NTAPI
- ExSizeOfRundownProtectionCacheAware(VOID);
- NTKERNELAPI
- PVOID
- NTAPI
- ExEnterCriticalRegionAndAcquireResourceShared(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- PVOID
- NTAPI
- ExEnterCriticalRegionAndAcquireResourceExclusive(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- PVOID
- NTAPI
- ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseResourceAndLeaveCriticalRegion(
- IN OUT PERESOURCE Resource);
- NTKERNELAPI
- VOID
- NTAPI
- ExInitializeRundownProtectionCacheAware(
- OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
- IN SIZE_T RunRefSize);
- NTKERNELAPI
- VOID
- NTAPI
- ExFreeCacheAwareRundownProtection(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExAcquireRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
- NTKERNELAPI
- BOOLEAN
- FASTCALL
- ExAcquireRundownProtectionCacheAwareEx(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReleaseRundownProtectionCacheAwareEx(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef,
- IN ULONG Count);
- NTKERNELAPI
- VOID
- FASTCALL
- ExWaitForRundownProtectionReleaseCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef);
- NTKERNELAPI
- VOID
- FASTCALL
- ExReInitializeRundownProtectionCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
- NTKERNELAPI
- VOID
- FASTCALL
- ExRundownCompletedCacheAware(
- IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware);
- #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ExInitializeLookasideListEx(
- OUT PLOOKASIDE_LIST_EX Lookaside,
- IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL,
- IN PFREE_FUNCTION_EX Free OPTIONAL,
- IN POOL_TYPE PoolType,
- IN ULONG Flags,
- IN SIZE_T Size,
- IN ULONG Tag,
- IN USHORT Depth);
- NTKERNELAPI
- VOID
- NTAPI
- ExDeleteLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
- NTKERNELAPI
- VOID
- NTAPI
- ExFlushLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside);
- FORCEINLINE
- PVOID
- ExAllocateFromLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside)
- {
- PVOID Entry;
- Lookaside->L.TotalAllocates += 1;
- #ifdef NONAMELESSUNION
- Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
- if (Entry == NULL) {
- Lookaside->L.u2.AllocateMisses += 1;
- Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag,
- Lookaside);
- }
- #else /* NONAMELESSUNION */
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses += 1;
- Entry = (Lookaside->L.AllocateEx)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag,
- Lookaside);
- }
- #endif /* NONAMELESSUNION */
- return Entry;
- }
- FORCEINLINE
- VOID
- ExFreeToLookasideListEx(
- IN OUT PLOOKASIDE_LIST_EX Lookaside,
- IN PVOID Entry)
- {
- Lookaside->L.TotalFrees += 1;
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses += 1;
- (Lookaside->L.FreeEx)(Entry, Lookaside);
- } else {
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
- }
- return;
- }
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- typedef struct _EXT_SET_PARAMETERS_V0
- {
- ULONG Version;
- ULONG Reserved;
- LONGLONG NoWakeTolerance;
- } EXT_SET_PARAMETERS, *PEXT_SET_PARAMETERS, KT2_SET_PARAMETERS, *PKT2_SET_PARAMETERS;
- NTKERNELAPI
- VOID
- NTAPI
- ExSetResourceOwnerPointerEx(
- IN OUT PERESOURCE Resource,
- IN PVOID OwnerPointer,
- IN ULONG Flags);
- #define FLAG_OWNER_POINTER_IS_THREAD 0x1
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #if NTDDI_VERSION >= NTDDI_WINBLUE
- #define EX_TIMER_HIGH_RESOLUTION 4
- #define EX_TIMER_NO_WAKE 8
- #define EX_TIMER_UNLIMITED_TOLERANCE ((LONGLONG)-1)
- #define EX_TIMER_NOTIFICATION (1ul << 31)
- NTKERNELAPI PEX_TIMER NTAPI ExAllocateTimer(PEXT_CALLBACK callback, void *context, ULONG attr);
- NTKERNELAPI BOOLEAN NTAPI ExCancelTimer(PEX_TIMER timer, PEXT_CANCEL_PARAMETERS params);
- NTKERNELAPI BOOLEAN NTAPI ExDeleteTimer(PEX_TIMER timer, BOOLEAN cancel, BOOLEAN wait, PEXT_DELETE_PARAMETERS params);
- NTKERNELAPI BOOLEAN NTAPI ExSetTimer(PEX_TIMER timer, LONGLONG due, LONGLONG period, EXT_SET_PARAMETERS *params);
- FORCEINLINE void KeInitializeTimer2SetParameters(KT2_SET_PARAMETERS *params)
- {
- memset(params, 0, sizeof(*params));
- }
- FORCEINLINE void ExInitializeSetTimerParameters(EXT_SET_PARAMETERS *params)
- {
- KeInitializeTimer2SetParameters(params);
- }
- #endif
- static __inline PVOID
- ExAllocateFromNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside)
- {
- PVOID Entry;
- Lookaside->L.TotalAllocates++;
- #ifdef NONAMELESSUNION
- #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
- #else
- Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
- #endif
- if (Entry == NULL) {
- Lookaside->L.u2.AllocateMisses++;
- Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- #else /* NONAMELESSUNION */
- #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
- #else
- Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
- #endif
- if (Entry == NULL) {
- Lookaside->L.AllocateMisses++;
- Entry = (Lookaside->L.Allocate)(Lookaside->L.Type,
- Lookaside->L.Size,
- Lookaside->L.Tag);
- }
- #endif /* NONAMELESSUNION */
- return Entry;
- }
- static __inline VOID
- ExFreeToNPagedLookasideList(
- IN OUT PNPAGED_LOOKASIDE_LIST Lookaside,
- IN PVOID Entry)
- {
- Lookaside->L.TotalFrees++;
- #ifdef NONAMELESSUNION
- if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.u3.FreeMisses++;
- (Lookaside->L.u5.Free)(Entry);
- } else {
- #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead,
- (PSLIST_ENTRY)Entry,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
- #else
- InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
- #endif
- }
- #else /* NONAMELESSUNION */
- if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
- Lookaside->L.FreeMisses++;
- (Lookaside->L.Free)(Entry);
- } else {
- #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
- ExInterlockedPushEntrySList(&Lookaside->L.ListHead,
- (PSLIST_ENTRY)Entry,
- &Lookaside->Lock__ObsoleteButDoNotDelete);
- #else
- InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
- #endif
- }
- #endif /* NONAMELESSUNION */
- }
- /******************************************************************************
- * Object Manager Functions *
- ******************************************************************************/
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- LONG_PTR
- FASTCALL
- ObfDereferenceObject(
- IN PVOID Object);
- #define ObDereferenceObject ObfDereferenceObject
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObGetObjectSecurity(
- IN PVOID Object,
- OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
- OUT PBOOLEAN MemoryAllocated);
- NTKERNELAPI
- LONG_PTR
- FASTCALL
- ObfReferenceObject(
- IN PVOID Object);
- #define ObReferenceObject ObfReferenceObject
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObReferenceObjectByHandle(
- IN HANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- OUT PVOID *Object,
- OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObReferenceObjectByPointer(
- IN PVOID Object,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode);
- NTKERNELAPI
- VOID
- NTAPI
- ObReleaseObjectSecurity(
- IN PSECURITY_DESCRIPTOR SecurityDescriptor,
- IN BOOLEAN MemoryAllocated);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTKERNELAPI
- VOID
- NTAPI
- ObDereferenceObjectDeferDelete(
- IN PVOID Object);
- #endif
- #if (NTDDI_VERSION >= NTDDI_VISTASP1)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObRegisterCallbacks(
- IN POB_CALLBACK_REGISTRATION CallbackRegistration,
- OUT PVOID *RegistrationHandle);
- NTKERNELAPI
- VOID
- NTAPI
- ObUnRegisterCallbacks(
- IN PVOID RegistrationHandle);
- NTKERNELAPI
- USHORT
- NTAPI
- ObGetFilterVersion(VOID);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObReferenceObjectByHandleWithTag(
- IN HANDLE Handle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- IN ULONG Tag,
- OUT PVOID *Object,
- OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL);
- NTKERNELAPI
- LONG_PTR
- FASTCALL
- ObfReferenceObjectWithTag(
- IN PVOID Object,
- IN ULONG Tag);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- ObReferenceObjectByPointerWithTag(
- IN PVOID Object,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_TYPE ObjectType OPTIONAL,
- IN KPROCESSOR_MODE AccessMode,
- IN ULONG Tag);
- NTKERNELAPI
- LONG_PTR
- FASTCALL
- ObfDereferenceObjectWithTag(
- IN PVOID Object,
- IN ULONG Tag);
- NTKERNELAPI
- VOID
- NTAPI
- ObDereferenceObjectDeferDeleteWithTag(
- IN PVOID Object,
- IN ULONG Tag);
- #define ObDereferenceObject ObfDereferenceObject
- #define ObReferenceObject ObfReferenceObject
- #define ObDereferenceObjectWithTag ObfDereferenceObjectWithTag
- #define ObReferenceObjectWithTag ObfReferenceObjectWithTag
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- /******************************************************************************
- * Process Manager Functions *
- ******************************************************************************/
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PsWrapApcWow64Thread(
- IN OUT PVOID *ApcContext,
- IN OUT PVOID *ApcRoutine);
- /*
- * PEPROCESS
- * PsGetCurrentProcess(VOID)
- */
- #define PsGetCurrentProcess IoGetCurrentProcess
- #if !defined(_PSGETCURRENTTHREAD_)
- #define _PSGETCURRENTTHREAD_
- FORCEINLINE
- PETHREAD
- NTAPI
- PsGetCurrentThread(VOID)
- {
- return (PETHREAD)KeGetCurrentThread();
- }
- #endif /* !_PSGETCURRENTTHREAD_ */
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PsCreateSystemThread(
- OUT PHANDLE ThreadHandle,
- IN ULONG DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN HANDLE ProcessHandle OPTIONAL,
- OUT PCLIENT_ID ClientId OPTIONAL,
- IN PKSTART_ROUTINE StartRoutine,
- IN PVOID StartContext OPTIONAL);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- PsTerminateSystemThread(
- IN NTSTATUS ExitStatus);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- /******************************************************************************
- * WMI Library Support Functions *
- ******************************************************************************/
- #ifdef RUN_WPP
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- __cdecl
- WmiTraceMessage(
- IN TRACEHANDLE LoggerHandle,
- IN ULONG MessageFlags,
- IN LPGUID MessageGuid,
- IN USHORT MessageNumber,
- IN ...);
- #endif
- #endif /* RUN_WPP */
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- WmiQueryTraceInformation(
- IN TRACE_INFORMATION_CLASS TraceInformationClass,
- OUT PVOID TraceInformation,
- IN ULONG TraceInformationLength,
- OUT PULONG RequiredLength OPTIONAL,
- IN PVOID Buffer OPTIONAL);
- #if 0
- /* FIXME: Get va_list from where? */
- NTKERNELAPI
- NTSTATUS
- NTAPI
- WmiTraceMessageVa(
- IN TRACEHANDLE LoggerHandle,
- IN ULONG MessageFlags,
- IN LPGUID MessageGuid,
- IN USHORT MessageNumber,
- IN va_list MessageArgList);
- #endif
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #ifndef TRACE_INFORMATION_CLASS_DEFINE
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- WmiQueryTraceInformation(
- IN TRACE_INFORMATION_CLASS TraceInformationClass,
- OUT PVOID TraceInformation,
- IN ULONG TraceInformationLength,
- OUT PULONG RequiredLength OPTIONAL,
- IN PVOID Buffer OPTIONAL);
- #endif
- #define TRACE_INFORMATION_CLASS_DEFINE
- #endif /* TRACE_INFOPRMATION_CLASS_DEFINE */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwRegister(
- IN LPCGUID ProviderId,
- IN PETWENABLECALLBACK EnableCallback OPTIONAL,
- IN PVOID CallbackContext OPTIONAL,
- OUT PREGHANDLE RegHandle);
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwUnregister(
- IN REGHANDLE RegHandle);
- BOOLEAN
- NTKERNELAPI
- NTAPI
- EtwEventEnabled(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor);
- BOOLEAN
- NTKERNELAPI
- NTAPI
- EtwProviderEnabled(
- IN REGHANDLE RegHandle,
- IN UCHAR Level,
- IN ULONGLONG Keyword);
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwActivityIdControl(
- IN ULONG ControlCode,
- IN OUT LPGUID ActivityId);
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwWrite(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN LPCGUID ActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwWriteTransfer(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN LPCGUID ActivityId OPTIONAL,
- IN LPCGUID RelatedActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwWriteString(
- IN REGHANDLE RegHandle,
- IN UCHAR Level,
- IN ULONGLONG Keyword,
- IN LPCGUID ActivityId OPTIONAL,
- IN PCWSTR String);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTSTATUS
- NTKERNELAPI
- NTAPI
- EtwWriteEx(
- IN REGHANDLE RegHandle,
- IN PCEVENT_DESCRIPTOR EventDescriptor,
- IN ULONG64 Filter,
- IN ULONG Flags,
- IN LPCGUID ActivityId OPTIONAL,
- IN LPCGUID RelatedActivityId OPTIONAL,
- IN ULONG UserDataCount,
- IN PEVENT_DATA_DESCRIPTOR UserData OPTIONAL);
- #endif
- /******************************************************************************
- * Kernel Debugger Functions *
- ******************************************************************************/
- #ifndef _DBGNT_
- ULONG
- __cdecl
- DbgPrint(
- IN PCSTR Format,
- IN ...);
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTSYSAPI
- ULONG
- __cdecl
- DbgPrintReturnControlC(
- IN PCCH Format,
- IN ...);
- #endif
- #if (NTDDI_VERSION >= NTDDI_WINXP)
- NTSYSAPI
- ULONG
- __cdecl
- DbgPrintEx(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCSTR Format,
- IN ...);
- #ifdef _VA_LIST_DEFINED
- NTSYSAPI
- ULONG
- NTAPI
- vDbgPrintEx(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCCH Format,
- IN va_list ap);
- NTSYSAPI
- ULONG
- NTAPI
- vDbgPrintExWithPrefix(
- IN PCCH Prefix,
- IN ULONG ComponentId,
- IN ULONG Level,
- IN PCCH Format,
- IN va_list ap);
- #endif /* _VA_LIST_DEFINED */
- NTSYSAPI
- NTSTATUS
- NTAPI
- DbgQueryDebugFilterState(
- IN ULONG ComponentId,
- IN ULONG Level);
- NTSYSAPI
- NTSTATUS
- NTAPI
- DbgSetDebugFilterState(
- IN ULONG ComponentId,
- IN ULONG Level,
- IN BOOLEAN State);
- #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- typedef VOID
- (*PDEBUG_PRINT_CALLBACK)(
- IN PSTRING Output,
- IN ULONG ComponentId,
- IN ULONG Level);
- NTSYSAPI
- NTSTATUS
- NTAPI
- DbgSetDebugPrintCallback(
- IN PDEBUG_PRINT_CALLBACK DebugPrintCallback,
- IN BOOLEAN Enable);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #endif /* _DBGNT_ */
- #if DBG
- #define KdPrint(_x_) DbgPrint _x_
- #define KdPrintEx(_x_) DbgPrintEx _x_
- #define vKdPrintEx(_x_) vDbgPrintEx _x_
- #define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_
- #define KdBreakPoint() DbgBreakPoint()
- #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
- #else /* !DBG */
- #define KdPrint(_x_)
- #define KdPrintEx(_x_)
- #define vKdPrintEx(_x_)
- #define vKdPrintExWithPrefix(_x_)
- #define KdBreakPoint()
- #define KdBreakPointWithStatus(s)
- #endif /* !DBG */
- #if defined(__GNUC__)
- extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent;
- extern NTKERNELAPI BOOLEAN KdDebuggerEnabled;
- #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
- #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
- #elif defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_)
- extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
- extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
- #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
- #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
- #else
- extern BOOLEAN KdDebuggerNotPresent;
- extern BOOLEAN KdDebuggerEnabled;
- #define KD_DEBUGGER_ENABLED KdDebuggerEnabled
- #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent
- #endif
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KdDisableDebugger(VOID);
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KdEnableDebugger(VOID);
- #if (_MSC_FULL_VER >= 150030729) && !defined(IMPORT_NATIVE_DBG_BREAK)
- #define DbgBreakPoint __debugbreak
- #else
- VOID
- NTAPI
- DbgBreakPoint(VOID);
- #endif
- NTSYSAPI
- VOID
- NTAPI
- DbgBreakPointWithStatus(
- IN ULONG Status);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WS03)
- NTKERNELAPI
- BOOLEAN
- NTAPI
- KdRefreshDebuggerNotPresent(VOID);
- #endif
- #if (NTDDI_VERSION >= NTDDI_WS03SP1)
- NTKERNELAPI
- NTSTATUS
- NTAPI
- KdChangeOption(
- IN KD_OPTION Option,
- IN ULONG InBufferBytes OPTIONAL,
- IN PVOID InBuffer,
- IN ULONG OutBufferBytes OPTIONAL,
- OUT PVOID OutBuffer,
- OUT PULONG OutBufferNeeded OPTIONAL);
- #endif
- /* Hardware Abstraction Layer Functions */
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
- FORCEINLINE
- PVOID
- NTAPI
- HalAllocateCommonBuffer(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- OUT PPHYSICAL_ADDRESS LogicalAddress,
- IN BOOLEAN CacheEnabled)
- {
- PALLOCATE_COMMON_BUFFER allocateCommonBuffer;
- PVOID commonBuffer;
- allocateCommonBuffer = *(DmaAdapter)->DmaOperations->AllocateCommonBuffer;
- ASSERT( allocateCommonBuffer != NULL );
- commonBuffer = allocateCommonBuffer( DmaAdapter, Length, LogicalAddress, CacheEnabled );
- return commonBuffer;
- }
- FORCEINLINE
- VOID
- NTAPI
- HalFreeCommonBuffer(
- IN PDMA_ADAPTER DmaAdapter,
- IN ULONG Length,
- IN PHYSICAL_ADDRESS LogicalAddress,
- IN PVOID VirtualAddress,
- IN BOOLEAN CacheEnabled)
- {
- PFREE_COMMON_BUFFER freeCommonBuffer;
- freeCommonBuffer = *(DmaAdapter)->DmaOperations->FreeCommonBuffer;
- ASSERT( freeCommonBuffer != NULL );
- freeCommonBuffer( DmaAdapter, Length, LogicalAddress, VirtualAddress, CacheEnabled );
- }
- FORCEINLINE
- ULONG
- NTAPI
- HalReadDmaCounter(
- IN PDMA_ADAPTER DmaAdapter)
- {
- PREAD_DMA_COUNTER readDmaCounter;
- ULONG counter;
- readDmaCounter = *(DmaAdapter)->DmaOperations->ReadDmaCounter;
- ASSERT( readDmaCounter != NULL );
- counter = readDmaCounter( DmaAdapter );
- return counter;
- }
- FORCEINLINE
- ULONG
- HalGetDmaAlignment(
- IN PDMA_ADAPTER DmaAdapter)
- {
- PGET_DMA_ALIGNMENT getDmaAlignment;
- ULONG alignment;
- getDmaAlignment = *(DmaAdapter)->DmaOperations->GetDmaAlignment;
- ASSERT( getDmaAlignment != NULL );
- alignment = getDmaAlignment( DmaAdapter );
- return alignment;
- }
- #endif /* USE_DMA_MACROS ... */
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #ifndef _NTTMAPI_
- #define _NTTMAPI_
- #include <ktmtypes.h>
- #define TRANSACTIONMANAGER_QUERY_INFORMATION (0x0001)
- #define TRANSACTIONMANAGER_SET_INFORMATION (0x0002)
- #define TRANSACTIONMANAGER_RECOVER (0x0004)
- #define TRANSACTIONMANAGER_RENAME (0x0008)
- #define TRANSACTIONMANAGER_CREATE_RM (0x0010)
- #define TRANSACTIONMANAGER_BIND_TRANSACTION (0x0020)
- #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
- TRANSACTIONMANAGER_QUERY_INFORMATION)
- #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- TRANSACTIONMANAGER_SET_INFORMATION |\
- TRANSACTIONMANAGER_RECOVER |\
- TRANSACTIONMANAGER_RENAME |\
- TRANSACTIONMANAGER_CREATE_RM)
- #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
- #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- TRANSACTIONMANAGER_GENERIC_READ |\
- TRANSACTIONMANAGER_GENERIC_WRITE |\
- TRANSACTIONMANAGER_GENERIC_EXECUTE |\
- TRANSACTIONMANAGER_BIND_TRANSACTION)
- #define TRANSACTION_QUERY_INFORMATION (0x0001)
- #define TRANSACTION_SET_INFORMATION (0x0002)
- #define TRANSACTION_ENLIST (0x0004)
- #define TRANSACTION_COMMIT (0x0008)
- #define TRANSACTION_ROLLBACK (0x0010)
- #define TRANSACTION_PROPAGATE (0x0020)
- #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
- #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
- TRANSACTION_QUERY_INFORMATION |\
- SYNCHRONIZE)
- #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- TRANSACTION_SET_INFORMATION |\
- TRANSACTION_COMMIT |\
- TRANSACTION_ENLIST |\
- TRANSACTION_ROLLBACK |\
- TRANSACTION_PROPAGATE |\
- SYNCHRONIZE)
- #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- TRANSACTION_COMMIT |\
- TRANSACTION_ROLLBACK |\
- SYNCHRONIZE)
- #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- TRANSACTION_GENERIC_READ |\
- TRANSACTION_GENERIC_WRITE |\
- TRANSACTION_GENERIC_EXECUTE)
- #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
- STANDARD_RIGHTS_WRITE |\
- TRANSACTION_SET_INFORMATION |\
- TRANSACTION_ENLIST |\
- TRANSACTION_ROLLBACK |\
- TRANSACTION_PROPAGATE |\
- SYNCHRONIZE)
- #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
- #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
- #define RESOURCEMANAGER_RECOVER (0x0004)
- #define RESOURCEMANAGER_ENLIST (0x0008)
- #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
- #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
- #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
- #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
- RESOURCEMANAGER_QUERY_INFORMATION |\
- SYNCHRONIZE)
- #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- RESOURCEMANAGER_SET_INFORMATION |\
- RESOURCEMANAGER_RECOVER |\
- RESOURCEMANAGER_ENLIST |\
- RESOURCEMANAGER_GET_NOTIFICATION |\
- RESOURCEMANAGER_REGISTER_PROTOCOL |\
- RESOURCEMANAGER_COMPLETE_PROPAGATION |\
- SYNCHRONIZE)
- #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- RESOURCEMANAGER_RECOVER |\
- RESOURCEMANAGER_ENLIST |\
- RESOURCEMANAGER_GET_NOTIFICATION |\
- RESOURCEMANAGER_COMPLETE_PROPAGATION |\
- SYNCHRONIZE)
- #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- RESOURCEMANAGER_GENERIC_READ |\
- RESOURCEMANAGER_GENERIC_WRITE |\
- RESOURCEMANAGER_GENERIC_EXECUTE)
- #define ENLISTMENT_QUERY_INFORMATION (0x0001)
- #define ENLISTMENT_SET_INFORMATION (0x0002)
- #define ENLISTMENT_RECOVER (0x0004)
- #define ENLISTMENT_SUBORDINATE_RIGHTS (0x0008)
- #define ENLISTMENT_SUPERIOR_RIGHTS (0x0010)
- #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
- ENLISTMENT_QUERY_INFORMATION)
- #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
- ENLISTMENT_SET_INFORMATION |\
- ENLISTMENT_RECOVER |\
- ENLISTMENT_SUBORDINATE_RIGHTS |\
- ENLISTMENT_SUPERIOR_RIGHTS)
- #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
- ENLISTMENT_RECOVER |\
- ENLISTMENT_SUBORDINATE_RIGHTS |\
- ENLISTMENT_SUPERIOR_RIGHTS)
- #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
- ENLISTMENT_GENERIC_READ |\
- ENLISTMENT_GENERIC_WRITE |\
- ENLISTMENT_GENERIC_EXECUTE)
- typedef enum _TRANSACTION_OUTCOME {
- TransactionOutcomeUndetermined = 1,
- TransactionOutcomeCommitted,
- TransactionOutcomeAborted,
- } TRANSACTION_OUTCOME;
- typedef enum _TRANSACTION_STATE {
- TransactionStateNormal = 1,
- TransactionStateIndoubt,
- TransactionStateCommittedNotify,
- } TRANSACTION_STATE;
- typedef struct _TRANSACTION_BASIC_INFORMATION {
- GUID TransactionId;
- ULONG State;
- ULONG Outcome;
- } TRANSACTION_BASIC_INFORMATION, *PTRANSACTION_BASIC_INFORMATION;
- typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
- GUID TmIdentity;
- LARGE_INTEGER VirtualClock;
- } TRANSACTIONMANAGER_BASIC_INFORMATION, *PTRANSACTIONMANAGER_BASIC_INFORMATION;
- typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
- GUID LogIdentity;
- } TRANSACTIONMANAGER_LOG_INFORMATION, *PTRANSACTIONMANAGER_LOG_INFORMATION;
- typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
- ULONG LogPathLength;
- WCHAR LogPath[1];
- } TRANSACTIONMANAGER_LOGPATH_INFORMATION, *PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
- typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
- ULONGLONG LastRecoveredLsn;
- } TRANSACTIONMANAGER_RECOVERY_INFORMATION, *PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
- typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
- ULONG IsolationLevel;
- ULONG IsolationFlags;
- LARGE_INTEGER Timeout;
- ULONG Outcome;
- ULONG DescriptionLength;
- WCHAR Description[1];
- } TRANSACTION_PROPERTIES_INFORMATION, *PTRANSACTION_PROPERTIES_INFORMATION;
- typedef struct _TRANSACTION_BIND_INFORMATION {
- HANDLE TmHandle;
- } TRANSACTION_BIND_INFORMATION, *PTRANSACTION_BIND_INFORMATION;
- typedef struct _TRANSACTION_ENLISTMENT_PAIR {
- GUID EnlistmentId;
- GUID ResourceManagerId;
- } TRANSACTION_ENLISTMENT_PAIR, *PTRANSACTION_ENLISTMENT_PAIR;
- typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
- ULONG NumberOfEnlistments;
- TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
- } TRANSACTION_ENLISTMENTS_INFORMATION, *PTRANSACTION_ENLISTMENTS_INFORMATION;
- typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
- TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
- } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION, *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
- typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
- GUID ResourceManagerId;
- ULONG DescriptionLength;
- WCHAR Description[1];
- } RESOURCEMANAGER_BASIC_INFORMATION, *PRESOURCEMANAGER_BASIC_INFORMATION;
- typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
- HANDLE IoCompletionPortHandle;
- ULONG_PTR CompletionKey;
- } RESOURCEMANAGER_COMPLETION_INFORMATION, *PRESOURCEMANAGER_COMPLETION_INFORMATION;
- typedef enum _KTMOBJECT_TYPE {
- KTMOBJECT_TRANSACTION,
- KTMOBJECT_TRANSACTION_MANAGER,
- KTMOBJECT_RESOURCE_MANAGER,
- KTMOBJECT_ENLISTMENT,
- KTMOBJECT_INVALID
- } KTMOBJECT_TYPE, *PKTMOBJECT_TYPE;
- typedef struct _KTMOBJECT_CURSOR {
- GUID LastQuery;
- ULONG ObjectIdCount;
- GUID ObjectIds[1];
- } KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
- typedef enum _TRANSACTION_INFORMATION_CLASS {
- TransactionBasicInformation,
- TransactionPropertiesInformation,
- TransactionEnlistmentInformation,
- TransactionSuperiorEnlistmentInformation
- } TRANSACTION_INFORMATION_CLASS;
- typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
- TransactionManagerBasicInformation,
- TransactionManagerLogInformation,
- TransactionManagerLogPathInformation,
- TransactionManagerRecoveryInformation = 4
- } TRANSACTIONMANAGER_INFORMATION_CLASS;
- typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
- ResourceManagerBasicInformation,
- ResourceManagerCompletionInformation,
- } RESOURCEMANAGER_INFORMATION_CLASS;
- typedef struct _ENLISTMENT_BASIC_INFORMATION {
- GUID EnlistmentId;
- GUID TransactionId;
- GUID ResourceManagerId;
- } ENLISTMENT_BASIC_INFORMATION, *PENLISTMENT_BASIC_INFORMATION;
- typedef struct _ENLISTMENT_CRM_INFORMATION {
- GUID CrmTransactionManagerId;
- GUID CrmResourceManagerId;
- GUID CrmEnlistmentId;
- } ENLISTMENT_CRM_INFORMATION, *PENLISTMENT_CRM_INFORMATION;
- typedef enum _ENLISTMENT_INFORMATION_CLASS {
- EnlistmentBasicInformation,
- EnlistmentRecoveryInformation,
- EnlistmentCrmInformation
- } ENLISTMENT_INFORMATION_CLASS;
- typedef struct _TRANSACTION_LIST_ENTRY {
- /* UOW is typedef'ed as GUID just above. Changed type of UOW
- * member from UOW to GUID for C++ compat. Using ::UOW for C++
- * works too but we were reported some problems in corner cases
- */
- GUID UOW;
- } TRANSACTION_LIST_ENTRY, *PTRANSACTION_LIST_ENTRY;
- typedef struct _TRANSACTION_LIST_INFORMATION {
- ULONG NumberOfTransactions;
- TRANSACTION_LIST_ENTRY TransactionInformation[1];
- } TRANSACTION_LIST_INFORMATION, *PTRANSACTION_LIST_INFORMATION;
- typedef NTSTATUS
- (NTAPI *PFN_NT_CREATE_TRANSACTION)(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG IsolationLevel OPTIONAL,
- IN ULONG IsolationFlags OPTIONAL,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
- typedef NTSTATUS
- (NTAPI *PFN_NT_OPEN_TRANSACTION)(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL);
- typedef NTSTATUS
- (NTAPI *PFN_NT_QUERY_INFORMATION_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- OUT PVOID TransactionInformation,
- IN ULONG TransactionInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
- typedef NTSTATUS
- (NTAPI *PFN_NT_SET_INFORMATION_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- IN PVOID TransactionInformation,
- IN ULONG TransactionInformationLength);
- typedef NTSTATUS
- (NTAPI *PFN_NT_COMMIT_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- typedef NTSTATUS
- (NTAPI *PFN_NT_ROLLBACK_TRANSACTION)(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCreateTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG CommitStrength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtOpenTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN LPGUID TmIdentity OPTIONAL,
- IN ULONG OpenOptions OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRenameTransactionManager(
- IN PUNICODE_STRING LogFileName,
- IN LPGUID ExistingTransactionManagerGuid);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRollforwardTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRecoverTransactionManager(
- IN HANDLE TransactionManagerHandle);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtQueryInformationTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- OUT PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength,
- OUT PULONG ReturnLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtSetInformationTransactionManager(
- IN HANDLE TmHandle OPTIONAL,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- IN PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtEnumerateTransactionObject(
- IN HANDLE RootObjectHandle OPTIONAL,
- IN KTMOBJECT_TYPE QueryType,
- IN OUT PKTMOBJECT_CURSOR ObjectCursor,
- IN ULONG ObjectCursorLength,
- OUT PULONG ReturnLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCreateTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG IsolationLevel OPTIONAL,
- IN ULONG IsolationFlags OPTIONAL,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtOpenTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN LPGUID Uow,
- IN HANDLE TmHandle OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtQueryInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- OUT PVOID TransactionInformation,
- IN ULONG TransactionInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtSetInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- IN PVOID TransactionInformation,
- IN ULONG TransactionInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCommitTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRollbackTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCreateEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE ResourceManagerHandle,
- IN HANDLE TransactionHandle,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN NOTIFICATION_MASK NotificationMask,
- IN PVOID EnlistmentKey OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtOpenEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE ResourceManagerHandle,
- IN LPGUID EnlistmentGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtQueryInformationEnlistment(
- IN HANDLE EnlistmentHandle,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- OUT PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength,
- OUT PULONG ReturnLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtSetInformationEnlistment(
- IN HANDLE EnlistmentHandle OPTIONAL,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- IN PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRecoverEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PVOID EnlistmentKey OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPrePrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCommitEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRollbackEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPrePrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCommitComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtReadOnlyEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRollbackComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtSinglePhaseReject(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtCreateResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID RmGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtOpenResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID ResourceManagerGuid OPTIONAL,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRecoverResourceManager(
- IN HANDLE ResourceManagerHandle);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtGetNotificationResourceManager(
- IN HANDLE ResourceManagerHandle,
- OUT PTRANSACTION_NOTIFICATION TransactionNotification,
- IN ULONG NotificationLength,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- OUT PULONG ReturnLength OPTIONAL,
- IN ULONG Asynchronous,
- IN ULONG_PTR AsynchronousContext OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtQueryInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- OUT PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtSetInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- IN PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtRegisterProtocolAddressInformation(
- IN HANDLE ResourceManager,
- IN PCRM_PROTOCOL_ID ProtocolId,
- IN ULONG ProtocolInformationSize,
- IN PVOID ProtocolInformation,
- IN ULONG CreateOptions OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPropagationComplete(
- IN HANDLE ResourceManagerHandle,
- IN ULONG RequestCookie,
- IN ULONG BufferLength,
- IN PVOID Buffer);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- NtPropagationFailed(
- IN HANDLE ResourceManagerHandle,
- IN ULONG RequestCookie,
- IN NTSTATUS PropStatus);
- #endif /* NTDDI_VERSION >= NTDDI_VISTA */
- #endif /* !_NTTMAPI_ */
- /******************************************************************************
- * ZwXxx Functions *
- ******************************************************************************/
- /* Constants */
- #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
- #define ZwCurrentProcess() NtCurrentProcess()
- #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
- #define ZwCurrentThread() NtCurrentThread()
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwClose(
- IN HANDLE Handle);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwCreateDirectoryObject(
- OUT PHANDLE DirectoryHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwCreateFile(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PLARGE_INTEGER AllocationSize OPTIONAL,
- IN ULONG FileAttributes,
- IN ULONG ShareAccess,
- IN ULONG CreateDisposition,
- IN ULONG CreateOptions,
- IN PVOID EaBuffer OPTIONAL,
- IN ULONG EaLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwCreateKey(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN ULONG TitleIndex,
- IN PUNICODE_STRING Class OPTIONAL,
- IN ULONG CreateOptions,
- OUT PULONG Disposition OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwCreateSection(
- OUT PHANDLE SectionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PLARGE_INTEGER MaximumSize OPTIONAL,
- IN ULONG SectionPageProtection,
- IN ULONG AllocationAttributes,
- IN HANDLE FileHandle OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwDeleteKey(
- IN HANDLE KeyHandle);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwDeleteValueKey(
- IN HANDLE KeyHandle,
- IN PUNICODE_STRING ValueName);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwEnumerateKey(
- IN HANDLE KeyHandle,
- IN ULONG Index,
- IN KEY_INFORMATION_CLASS KeyInformationClass,
- OUT PVOID KeyInformation OPTIONAL,
- IN ULONG Length,
- OUT PULONG ResultLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwEnumerateValueKey(
- IN HANDLE KeyHandle,
- IN ULONG Index,
- IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
- OUT PVOID KeyValueInformation OPTIONAL,
- IN ULONG Length,
- OUT PULONG ResultLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwFlushKey(
- IN HANDLE KeyHandle);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwLoadDriver(
- IN PUNICODE_STRING DriverServiceName);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwMakeTemporaryObject(
- IN HANDLE Handle);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwMapViewOfSection(
- IN HANDLE SectionHandle,
- IN HANDLE ProcessHandle,
- IN OUT PVOID *BaseAddress,
- IN ULONG_PTR ZeroBits,
- IN SIZE_T CommitSize,
- IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
- IN OUT PSIZE_T ViewSize,
- IN SECTION_INHERIT InheritDisposition,
- IN ULONG AllocationType,
- IN ULONG Protect);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenFile(
- OUT PHANDLE FileHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG ShareAccess,
- IN ULONG OpenOptions);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenKey(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenSection(
- OUT PHANDLE SectionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenSymbolicLinkObject(
- OUT PHANDLE LinkHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQueryInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID FileInformation,
- IN ULONG Length,
- IN FILE_INFORMATION_CLASS FileInformationClass);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQueryKey(
- IN HANDLE KeyHandle,
- IN KEY_INFORMATION_CLASS KeyInformationClass,
- OUT PVOID KeyInformation OPTIONAL,
- IN ULONG Length,
- OUT PULONG ResultLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQuerySymbolicLinkObject(
- IN HANDLE LinkHandle,
- IN OUT PUNICODE_STRING LinkTarget,
- OUT PULONG ReturnedLength OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQueryValueKey(
- IN HANDLE KeyHandle,
- IN PUNICODE_STRING ValueName,
- IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
- OUT PVOID KeyValueInformation OPTIONAL,
- IN ULONG Length,
- OUT PULONG ResultLength);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwReadFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- OUT PVOID Buffer,
- IN ULONG Length,
- IN PLARGE_INTEGER ByteOffset OPTIONAL,
- IN PULONG Key OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwSetInformationFile(
- IN HANDLE FileHandle,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PVOID FileInformation,
- IN ULONG Length,
- IN FILE_INFORMATION_CLASS FileInformationClass);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwSetValueKey(
- IN HANDLE KeyHandle,
- IN PUNICODE_STRING ValueName,
- IN ULONG TitleIndex OPTIONAL,
- IN ULONG Type,
- IN PVOID Data OPTIONAL,
- IN ULONG DataSize);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwUnloadDriver(
- IN PUNICODE_STRING DriverServiceName);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwUnmapViewOfSection(
- IN HANDLE ProcessHandle,
- IN PVOID BaseAddress OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwWriteFile(
- IN HANDLE FileHandle,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN PVOID Buffer,
- IN ULONG Length,
- IN PLARGE_INTEGER ByteOffset OPTIONAL,
- IN PULONG Key OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQueryFullAttributesFile(
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #if (NTDDI_VERSION >= NTDDI_WS03)
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwOpenEvent(
- OUT PHANDLE EventHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes);
- #endif
- #if (NTDDI_VERSION >= NTDDI_VISTA)
- NTSYSAPI
- NTSTATUS
- ZwCreateKeyTransacted(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN ULONG TitleIndex,
- IN PUNICODE_STRING Class OPTIONAL,
- IN ULONG CreateOptions,
- IN HANDLE TransactionHandle,
- OUT PULONG Disposition OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenKeyTransacted(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN HANDLE TransactionHandle);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCreateTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG CommitStrength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwOpenTransactionManager(
- OUT PHANDLE TmHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN PUNICODE_STRING LogFileName OPTIONAL,
- IN LPGUID TmIdentity OPTIONAL,
- IN ULONG OpenOptions OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRollforwardTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRecoverTransactionManager(
- IN HANDLE TransactionManagerHandle);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwQueryInformationTransactionManager(
- IN HANDLE TransactionManagerHandle,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- OUT PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwSetInformationTransactionManager(
- IN HANDLE TmHandle,
- IN TRANSACTIONMANAGER_INFORMATION_CLASS TransactionManagerInformationClass,
- IN PVOID TransactionManagerInformation,
- IN ULONG TransactionManagerInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwEnumerateTransactionObject(
- IN HANDLE RootObjectHandle OPTIONAL,
- IN KTMOBJECT_TYPE QueryType,
- IN OUT PKTMOBJECT_CURSOR ObjectCursor,
- IN ULONG ObjectCursorLength,
- OUT PULONG ReturnLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCreateTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow OPTIONAL,
- IN HANDLE TmHandle OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN ULONG IsolationLevel OPTIONAL,
- IN ULONG IsolationFlags OPTIONAL,
- IN PLARGE_INTEGER Timeout OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwOpenTransaction(
- OUT PHANDLE TransactionHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN LPGUID Uow,
- IN HANDLE TmHandle OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwQueryInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- OUT PVOID TransactionInformation,
- IN ULONG TransactionInformationLength,
- OUT PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwSetInformationTransaction(
- IN HANDLE TransactionHandle,
- IN TRANSACTION_INFORMATION_CLASS TransactionInformationClass,
- IN PVOID TransactionInformation,
- IN ULONG TransactionInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCommitTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRollbackTransaction(
- IN HANDLE TransactionHandle,
- IN BOOLEAN Wait);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCreateResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID ResourceManagerGuid OPTIONAL,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN PUNICODE_STRING Description OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwOpenResourceManager(
- OUT PHANDLE ResourceManagerHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE TmHandle,
- IN LPGUID ResourceManagerGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRecoverResourceManager(
- IN HANDLE ResourceManagerHandle);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwGetNotificationResourceManager(
- IN HANDLE ResourceManagerHandle,
- OUT PTRANSACTION_NOTIFICATION TransactionNotification,
- IN ULONG NotificationLength,
- IN PLARGE_INTEGER Timeout,
- IN PULONG ReturnLength OPTIONAL,
- IN ULONG Asynchronous,
- IN ULONG_PTR AsynchronousContext OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwQueryInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- OUT PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength,
- IN PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwSetInformationResourceManager(
- IN HANDLE ResourceManagerHandle,
- IN RESOURCEMANAGER_INFORMATION_CLASS ResourceManagerInformationClass,
- IN PVOID ResourceManagerInformation,
- IN ULONG ResourceManagerInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCreateEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE ResourceManagerHandle,
- IN HANDLE TransactionHandle,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
- IN ULONG CreateOptions OPTIONAL,
- IN NOTIFICATION_MASK NotificationMask,
- IN PVOID EnlistmentKey OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwOpenEnlistment(
- OUT PHANDLE EnlistmentHandle,
- IN ACCESS_MASK DesiredAccess,
- IN HANDLE RmHandle,
- IN LPGUID EnlistmentGuid,
- IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwQueryInformationEnlistment(
- IN HANDLE EnlistmentHandle,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- OUT PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength,
- IN PULONG ReturnLength OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwSetInformationEnlistment(
- IN HANDLE EnlistmentHandle,
- IN ENLISTMENT_INFORMATION_CLASS EnlistmentInformationClass,
- IN PVOID EnlistmentInformation,
- IN ULONG EnlistmentInformationLength);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRecoverEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PVOID EnlistmentKey OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwPrePrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwPrepareEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCommitEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRollbackEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwPrePrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwPrepareComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwCommitComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwReadOnlyEnlistment(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwRollbackComplete(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- NTSYSCALLAPI
- NTSTATUS
- NTAPI
- ZwSinglePhaseReject(
- IN HANDLE EnlistmentHandle,
- IN PLARGE_INTEGER TmVirtualClock OPTIONAL);
- #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
- #if (NTDDI_VERSION >= NTDDI_WIN7)
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenKeyEx(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN ULONG OpenOptions);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwOpenKeyTransactedEx(
- OUT PHANDLE KeyHandle,
- IN ACCESS_MASK DesiredAccess,
- IN POBJECT_ATTRIBUTES ObjectAttributes,
- IN ULONG OpenOptions,
- IN HANDLE TransactionHandle);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwNotifyChangeMultipleKeys(
- IN HANDLE MasterKeyHandle,
- IN ULONG Count OPTIONAL,
- IN OBJECT_ATTRIBUTES SubordinateObjects[] OPTIONAL,
- IN HANDLE Event OPTIONAL,
- IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
- IN PVOID ApcContext OPTIONAL,
- OUT PIO_STATUS_BLOCK IoStatusBlock,
- IN ULONG CompletionFilter,
- IN BOOLEAN WatchTree,
- OUT PVOID Buffer OPTIONAL,
- IN ULONG BufferSize,
- IN BOOLEAN Asynchronous);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwQueryMultipleValueKey(
- IN HANDLE KeyHandle,
- IN OUT PKEY_VALUE_ENTRY ValueEntries,
- IN ULONG EntryCount,
- OUT PVOID ValueBuffer,
- IN OUT PULONG BufferLength,
- OUT PULONG RequiredBufferLength OPTIONAL);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwRenameKey(
- IN HANDLE KeyHandle,
- IN PUNICODE_STRING NewName);
- NTSYSAPI
- NTSTATUS
- NTAPI
- ZwSetInformationKey(
- IN HANDLE KeyHandle,
- IN KEY_SET_INFORMATION_CLASS KeySetInformationClass,
- IN PVOID KeySetInformation,
- IN ULONG KeySetInformationLength);
- #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
- #ifndef _CLFS_PUBLIC_H_
- #define _CLFS_PUBLIC_H_
- #ifndef CLFSUSER_API
- #ifdef __CLFSUSER_EXPORTS__
- #define CLFSUSER_API
- #else
- #define CLFSUSER_API __declspec(dllimport)
- #endif
- #endif
- #if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03
- #define FILE_ATTRIBUTE_DEDICATED FILE_ATTRIBUTE_TEMPORARY
- #define EA_CONTAINER_NAME "ContainerName"
- #define EA_CONTAINER_SIZE "ContainerSize"
- #define CLFS_BASELOG_EXTENSION L".blf"
- #define CLFS_FLAG_NO_FLAGS 0x00000000
- #define CLFS_FLAG_FORCE_APPEND 0x00000001
- #define CLFS_FLAG_FORCE_FLUSH 0x00000002
- #define CLFS_FLAG_USE_RESERVATION 0x00000004
- #define CLFS_FLAG_REENTRANT_FILE_SYSTEM 0x00000008
- #define CLFS_FLAG_NON_REENTRANT_FILTER 0x00000010
- #define CLFS_FLAG_REENTRANT_FILTER 0x00000020
- #define CLFS_FLAG_IGNORE_SHARE_ACCESS 0x00000040
- #define CLFS_FLAG_READ_IN_PROGRESS 0x00000080
- #define CLFS_FLAG_MINIFILTER_LEVEL 0x00000100
- #define CLFS_FLAG_HIDDEN_SYSTEM_LOG 0x00000200
- #define CLFS_FLAG_FILTER_INTERMEDIATE_LEVEL CLFS_FLAG_NON_REENTRANT_FILTER
- #define CLFS_FLAG_FILTER_TOP_LEVEL CLFS_FLAG_REENTRANT_FILTER
- #define CLFS_MARSHALLING_FLAG_NONE 0x00000000
- #define CLFS_MARSHALLING_FLAG_DISABLE_BUFF_INIT 0x00000001
- typedef ULONG CLFS_CONTAINER_ID, *PCLFS_CONTAINER_ID, **PPCLFS_CONTAINER_ID;
- typedef struct _CLS_LSN {
- ULONGLONG Internal;
- } CLS_LSN, *PCLS_LSN, **PPCLS_LSN;
- typedef CLS_LSN CLFS_LSN, *PCLFS_LSN, **PPCLFS_LSN;
- extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_INVALID;
- extern __declspec(dllimport) const CLFS_LSN CLFS_LSN_NULL;
- #define ClfsNullRecord 0x00
- #define ClfsDataRecord 0x01
- #define ClfsRestartRecord 0x02
- #define ClfsClientRecord (ClfsDataRecord | ClfsRestartRecord)
- #define CLFS_CONTAINER_STREAM_PREFIX L"%BLF%:"
- #define CLFS_CONTAINER_RELATIVE_PREFIX L"%BLF%\\"
- typedef UCHAR CLS_RECORD_TYPE, *PCLS_RECORD_TYPE, **PPCLS_RECORD_TYPE;
- typedef CLS_RECORD_TYPE CLFS_RECORD_TYPE, *PCLFS_RECORD_TYPE, **PPCLFS_RECORD_TYPE;
- typedef enum _CLS_CONTEXT_MODE {
- ClsContextNone,
- ClsContextUndoNext,
- ClsContextPrevious,
- ClsContextForward
- } CLS_CONTEXT_MODE, *PCLS_CONTEXT_MODE, **PPCLS_CONTEXT_MODE;
- typedef enum _CLFS_CONTEXT_MODE {
- ClfsContextNone,
- ClfsContextUndoNext,
- ClfsContextPrevious,
- ClfsContextForward
- } CLFS_CONTEXT_MODE, *PCLFS_CONTEXT_MODE, **PPCLFS_CONTEXT_MODE;
- typedef struct _CLFS_NODE_ID {
- ULONG cType;
- ULONG cbNode;
- } CLFS_NODE_ID, *PCLFS_NODE_ID;
- typedef struct _CLS_WRITE_ENTRY {
- PVOID Buffer;
- ULONG ByteLength;
- } CLS_WRITE_ENTRY, *PCLS_WRITE_ENTRY, **PPCLS_WRITE_ENTRY;
- typedef CLS_WRITE_ENTRY CLFS_WRITE_ENTRY, *PCLFS_WRITE_ENTRY, **PPCLFS_WRITE_ENTRY;
- typedef GUID CLFS_LOG_ID;
- typedef struct _CLS_INFORMATION {
- LONGLONG TotalAvailable;
- LONGLONG CurrentAvailable;
- LONGLONG TotalReservation;
- ULONGLONG BaseFileSize;
- ULONGLONG ContainerSize;
- ULONG TotalContainers;
- ULONG FreeContainers;
- ULONG TotalClients;
- ULONG Attributes;
- ULONG FlushThreshold;
- ULONG SectorSize;
- CLS_LSN MinArchiveTailLsn;
- CLS_LSN BaseLsn;
- CLS_LSN LastFlushedLsn;
- CLS_LSN LastLsn;
- CLS_LSN RestartLsn;
- GUID Identity;
- } CLS_INFORMATION, *PCLS_INFORMATION, *PPCLS_INFORMATION;
- typedef CLS_INFORMATION CLFS_INFORMATION, *PCLFS_INFORMATION, *PPCLFS_INFORMATION;
- typedef struct _CLFS_LOG_NAME_INFORMATION {
- USHORT NameLengthInBytes;
- WCHAR Name[1];
- } CLFS_LOG_NAME_INFORMATION, *PCLFS_LOG_NAME_INFORMATION, **PPCLFS_LOG_NAME_INFORMATION;
- typedef struct _CLFS_STREAM_ID_INFORMATION {
- UCHAR StreamIdentifier;
- } CLFS_STREAM_ID_INFORMATION, *PCLFS_STREAM_ID_INFORMATION, **PPCLFS_STREAM_ID_INFORMATION;
- typedef UINT32 CLS_CONTAINER_STATE, *PCLS_CONTAINER_STATE, *PPCLS_CONTAINER_STATE;
- typedef CLS_CONTAINER_STATE CLFS_CONTAINER_STATE, *PCLFS_CONTAINER_STATE, *PPCLFS_CONTAINER_STATE;
- #define ClsContainerInitializing 0x01
- #define ClsContainerInactive 0x02
- #define ClsContainerActive 0x04
- #define ClsContainerActivePendingDelete 0x08
- #define ClsContainerPendingArchive 0x10
- #define ClsContainerPendingArchiveAndDelete 0x20
- #define ClfsContainerInitializing 0x01
- #define ClfsContainerInactive 0x02
- #define ClfsContainerActive 0x04
- #define ClfsContainerActivePendingDelete 0x08
- #define ClfsContainerPendingArchive 0x10
- #define ClfsContainerPendingArchiveAndDelete 0x20
- #define CLFS_MAX_CONTAINER_INFO 256
- typedef struct _CLS_CONTAINER_INFORMATION {
- ULONG FileAttributes;
- ULONGLONG CreationTime;
- ULONGLONG LastAccessTime;
- ULONGLONG LastWriteTime;
- LONGLONG ContainerSize;
- ULONG FileNameActualLength;
- ULONG FileNameLength;
- WCHAR FileName[CLFS_MAX_CONTAINER_INFO];
- CLFS_CONTAINER_STATE State;
- CLFS_CONTAINER_ID PhysicalContainerId;
- CLFS_CONTAINER_ID LogicalContainerId;
- } CLS_CONTAINER_INFORMATION, *PCLS_CONTAINER_INFORMATION, **PPCLS_CONTAINER_INFORMATION;
- typedef CLS_CONTAINER_INFORMATION CLFS_CONTAINER_INFORMATION, *PCLFS_CONTAINER_INFORMATION, **PPCLFS_CONTAINER_INFORMATION;
- typedef enum _CLS_LOG_INFORMATION_CLASS {
- ClfsLogBasicInformation,
- ClfsLogBasicInformationPhysical,
- ClfsLogPhysicalNameInformation,
- ClfsLogStreamIdentifierInformation,
- #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA
- ClfsLogSystemMarkingInformation,
- ClfsLogPhysicalLsnInformation
- #endif
- } CLS_LOG_INFORMATION_CLASS, *PCLS_LOG_INFORMATION_CLASS, **PPCLS_LOG_INFORMATION_CLASS;
- typedef CLS_LOG_INFORMATION_CLASS CLFS_LOG_INFORMATION_CLASS, *PCLFS_LOG_INFORMATION_CLASS, **PPCLFS_LOG_INFORMATION_CLASS;
- typedef enum _CLS_IOSTATS_CLASS {
- ClsIoStatsDefault = 0x0000,
- ClsIoStatsMax = 0xffff
- } CLS_IOSTATS_CLASS, *PCLS_IOSTATS_CLASS, **PPCLS_IOSTATS_CLASS;
- typedef enum _CLFS_IOSTATS_CLASS {
- ClfsIoStatsDefault = 0x0000,
- ClfsIoStatsMax = 0xffff
- } CLFS_IOSTATS_CLASS, *PCLFS_IOSTATS_CLASS, **PPCLFS_IOSTATS_CLASS;
- typedef struct _CLS_IO_STATISTICS_HEADER {
- UCHAR ubMajorVersion;
- UCHAR ubMinorVersion;
- CLFS_IOSTATS_CLASS eStatsClass;
- USHORT cbLength;
- ULONG coffData;
- } CLS_IO_STATISTICS_HEADER, *PCLS_IO_STATISTICS_HEADER, **PPCLS_IO_STATISTICS_HEADER;
- typedef CLS_IO_STATISTICS_HEADER CLFS_IO_STATISTICS_HEADER, *PCLFS_IO_STATISTICS_HEADER, **PPCLFS_IO_STATISTICS_HEADER;
- typedef struct _CLS_IO_STATISTICS {
- CLS_IO_STATISTICS_HEADER hdrIoStats;
- ULONGLONG cFlush;
- ULONGLONG cbFlush;
- ULONGLONG cMetaFlush;
- ULONGLONG cbMetaFlush;
- } CLS_IO_STATISTICS, *PCLS_IO_STATISTICS, **PPCLS_IO_STATISTICS;
- typedef CLS_IO_STATISTICS CLFS_IO_STATISTICS, *PCLFS_IO_STATISTICS, **PPCLFS_IO_STATISTICS;
- #define CLFS_SCAN_INIT 0x01
- #define CLFS_SCAN_FORWARD 0x02
- #define CLFS_SCAN_BACKWARD 0x04
- #define CLFS_SCAN_CLOSE 0x08
- #define CLFS_SCAN_INITIALIZED 0x10
- #define CLFS_SCAN_BUFFERED 0x20
- typedef UCHAR CLFS_SCAN_MODE, *PCLFS_SCAN_MODE;
- typedef FILE_OBJECT LOG_FILE_OBJECT, *PLOG_FILE_OBJECT, **PPLOG_FILE_OBJECT;
- typedef struct _CLS_SCAN_CONTEXT {
- CLFS_NODE_ID cidNode;
- PLOG_FILE_OBJECT plfoLog;
- ULONG cIndex __attribute__((aligned(8)));
- ULONG cContainers __attribute__((aligned(8)));
- ULONG cContainersReturned __attribute__((aligned(8)));
- CLFS_SCAN_MODE eScanMode __attribute__((aligned(8)));
- PCLS_CONTAINER_INFORMATION pinfoContainer __attribute__((aligned(8)));
- } CLS_SCAN_CONTEXT, *PCLS_SCAN_CONTEXT, **PPCLS_SCAN_CONTEXT;
- typedef CLS_SCAN_CONTEXT CLFS_SCAN_CONTEXT, *PCLFS_SCAN_CONTEXT, **PPCLFS_SCAN_CONTEXT;
- typedef struct _CLS_ARCHIVE_DESCRIPTOR {
- ULONGLONG coffLow;
- ULONGLONG coffHigh;
- CLS_CONTAINER_INFORMATION infoContainer;
- } CLS_ARCHIVE_DESCRIPTOR, *PCLS_ARCHIVE_DESCRIPTOR, **PPCLS_ARCHIVE_DESCRIPTOR;
- typedef CLS_ARCHIVE_DESCRIPTOR CLFS_ARCHIVE_DESCRIPTOR, *PCLFS_ARCHIVE_DESCRIPTOR, **PPCLFS_ARCHIVE_DESCRIPTOR;
- typedef PVOID (*CLFS_BLOCK_ALLOCATION)(ULONG cbBufferLength, PVOID pvUserContext);
- typedef void (*CLFS_BLOCK_DEALLOCATION)(PVOID pvBuffer, PVOID pvUserContext);
- typedef enum _CLFS_LOG_ARCHIVE_MODE {
- ClfsLogArchiveEnabled = 1,
- ClfsLogArchiveDisabled = 2
- } CLFS_LOG_ARCHIVE_MODE, *PCLFS_LOG_ARCHIVE_MODE;
- CLFSUSER_API
- BOOLEAN
- NTAPI
- ClfsLsnEqual(
- const CLFS_LSN* plsn1,
- const CLFS_LSN* plsn2);
- CLFSUSER_API
- BOOLEAN
- NTAPI
- ClfsLsnLess(
- const CLFS_LSN* plsn1,
- const CLFS_LSN* plsn2);
- CLFSUSER_API
- BOOLEAN
- NTAPI
- ClfsLsnGreater(
- const CLFS_LSN* plsn1,
- const CLFS_LSN* plsn2);
- CLFSUSER_API
- BOOLEAN
- NTAPI
- ClfsLsnNull(
- const CLFS_LSN* plsn);
- CLFSUSER_API
- CLFS_CONTAINER_ID
- NTAPI
- ClfsLsnContainer(
- const CLFS_LSN* plsn);
- CLFSUSER_API
- CLFS_LSN
- NTAPI
- ClfsLsnCreate(
- CLFS_CONTAINER_ID cidContainer,
- ULONG offBlock,
- ULONG cRecord);
- CLFSUSER_API
- ULONG
- NTAPI
- ClfsLsnBlockOffset(
- const CLFS_LSN* plsn);
- CLFSUSER_API
- ULONG
- NTAPI
- ClfsLsnRecordSequence(
- const CLFS_LSN* plsn);
- CLFSUSER_API
- BOOLEAN
- NTAPI
- ClfsLsnInvalid(
- const CLFS_LSN* plsn);
- CLFSUSER_API
- CLFS_LSN
- NTAPI
- ClfsLsnIncrement(
- PCLFS_LSN plsn);
- #ifdef __cplusplus
- #ifdef CLFS_OPERATORS
- inline CLFS_LSN operator++(CLFS_LSN& refLsn) {
- refLsn = ClfsLsnIncrement (&refLsn);
- return refLsn;
- }
- inline BOOLEAN operator<(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return ClfsLsnLess(&refLsn1, &refLsn2);
- }
- inline BOOLEAN operator>(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return ClfsLsnGreater(&refLsn1, &refLsn2);
- }
- inline BOOLEAN operator==(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return ClfsLsnEqual(&refLsn1, &refLsn2);
- }
- inline BOOLEAN operator!=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return !ClfsLsnEqual(&refLsn1, &refLsn2);
- }
- inline BOOLEAN operator<=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return !ClfsLsnGreater(&refLsn1, &refLsn2);
- }
- inline BOOLEAN operator>=(const CLFS_LSN& refLsn1, const CLFS_LSN& refLsn2) {
- return !ClfsLsnLess(&refLsn1, &refLsn2);
- }
- #endif
- #endif
- #endif
- #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA
- #pragma pack(push,8)
- typedef struct _CLFS_PHYSICAL_LSN_INFORMATION {
- UCHAR StreamIdentifier;
- CLFS_LSN VirtualLsn;
- CLFS_LSN PhysicalLsn;
- } CLFS_PHYSICAL_LSN_INFORMATION, *PCLFS_PHYSICAL_LSN_INFORMATION;
- #pragma pack(pop)
- #endif
- #endif /* _CLFS_PUBLIC_H_ */
- #if NTDDI_VERSION >= NTDDI_WS03SP1 || _WIN32_WINNT >= _WIN32_WINNT_WS03
- typedef enum _CLFS_MGMT_POLICY_TYPE {
- ClfsMgmtPolicyMaximumSize,
- ClfsMgmtPolicyMinimumSize,
- ClfsMgmtPolicyNewContainerSize,
- ClfsMgmtPolicyGrowthRate,
- ClfsMgmtPolicyLogTail,
- ClfsMgmtPolicyAutoShrink,
- ClfsMgmtPolicyAutoGrow,
- ClfsMgmtPolicyNewContainerPrefix,
- ClfsMgmtPolicyNewContainerSuffix,
- ClfsMgmtPolicyNewContainerExtension,
- ClfsMgmtPolicyInvalid
- } CLFS_MGMT_POLICY_TYPE, *PCLFS_MGMT_POLICY_TYPE;
- #define CLFS_MGMT_NUM_POLICIES (ULONG)ClfsMgmtPolicyInvalid
- #define CLFS_LOG_SIZE_MINIMUM (ULONGLONG)0
- #define CLFS_LOG_SIZE_MAXIMUM (ULONGLONG)-1
- #define CLFS_MGMT_POLICY_VERSION 1
- #define LOG_POLICY_OVERWRITE 0x01
- #define LOG_POLICY_PERSIST 0x02
- typedef struct _CLFS_MGMT_POLICY {
- ULONG Version;
- ULONG LengthInBytes;
- ULONG PolicyFlags;
- CLFS_MGMT_POLICY_TYPE PolicyType;
- union {
- struct {
- ULONG Containers;
- } MaximumSize;
- struct {
- ULONG Containers;
- } MinimumSize;
- struct {
- ULONG SizeInBytes;
- } NewContainerSize;
- struct {
- ULONG AbsoluteGrowthInContainers;
- ULONG RelativeGrowthPercentage;
- } GrowthRate;
- struct {
- ULONG MinimumAvailablePercentage;
- ULONG MinimumAvailableContainers;
- } LogTail;
- struct {
- ULONG Percentage;
- } AutoShrink;
- struct {
- ULONG Enabled;
- } AutoGrow;
- struct {
- USHORT PrefixLengthInBytes;
- WCHAR PrefixString[1];
- } NewContainerPrefix;
- struct {
- ULONGLONG NextContainerSuffix;
- } NewContainerSuffix;
- struct {
- USHORT ExtensionLengthInBytes;
- WCHAR ExtensionString[1];
- } NewContainerExtension;
- } PolicyParameters;
- } CLFS_MGMT_POLICY, *PCLFS_MGMT_POLICY;
- typedef enum _CLFS_MGMT_NOTIFICATION_TYPE {
- ClfsMgmtAdvanceTailNotification,
- ClfsMgmtLogFullHandlerNotification,
- ClfsMgmtLogUnpinnedNotification,
- ClfsMgmtLogWriteNotification
- } CLFS_MGMT_NOTIFICATION_TYPE, *PCLFS_MGMT_NOTIFICATION_TYPE;
- typedef struct _CLFS_MGMT_NOTIFICATION {
- CLFS_MGMT_NOTIFICATION_TYPE Notification;
- CLFS_LSN Lsn;
- USHORT LogIsPinned;
- } CLFS_MGMT_NOTIFICATION, *PCLFS_MGMT_NOTIFICATION;
- typedef NTSTATUS (*PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK)(
- PLOG_FILE_OBJECT LogFile,
- PCLFS_LSN TargetLsn,
- PVOID ClientData);
- typedef VOID (*PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK)(
- PLOG_FILE_OBJECT LogFile,
- NTSTATUS OperationStatus,
- BOOLEAN LogIsPinned,
- PVOID ClientData);
- typedef VOID (*PCLFS_CLIENT_LOG_UNPINNED_CALLBACK)(
- PLOG_FILE_OBJECT LogFile,
- PVOID ClientData);
- typedef VOID (*PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK)(
- PLOG_FILE_OBJECT LogFile,
- NTSTATUS OperationStatus,
- PVOID ClientData);
- #define CLFS_MGMT_CLIENT_REGISTRATION_VERSION 1
- typedef struct _CLFS_MGMT_CLIENT_REGISTRATION {
- ULONG Version;
- PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK AdvanceTailCallback;
- PVOID AdvanceTailCallbackData;
- PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK LogGrowthCompleteCallback;
- PVOID LogGrowthCompleteCallbackData;
- PCLFS_CLIENT_LOG_UNPINNED_CALLBACK LogUnpinnedCallback;
- PVOID LogUnpinnedCallbackData;
- } CLFS_MGMT_CLIENT_REGISTRATION, *PCLFS_MGMT_CLIENT_REGISTRATION;
- typedef PVOID CLFS_MGMT_CLIENT, *PCLFS_MGMT_CLIENT;
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtRegisterManagedClient(
- PLOG_FILE_OBJECT LogFile,
- PCLFS_MGMT_CLIENT_REGISTRATION RegistrationData,
- PCLFS_MGMT_CLIENT ClientCookie);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtDeregisterManagedClient(
- CLFS_MGMT_CLIENT ClientCookie);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtTailAdvanceFailure(
- CLFS_MGMT_CLIENT Client,
- NTSTATUS Reason);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtHandleLogFileFull(
- CLFS_MGMT_CLIENT Client);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtInstallPolicy(
- PLOG_FILE_OBJECT LogFile,
- PCLFS_MGMT_POLICY Policy,
- ULONG PolicyLength);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtQueryPolicy(
- PLOG_FILE_OBJECT LogFile,
- CLFS_MGMT_POLICY_TYPE PolicyType,
- PCLFS_MGMT_POLICY Policy,
- PULONG PolicyLength);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtRemovePolicy(
- PLOG_FILE_OBJECT LogFile,
- CLFS_MGMT_POLICY_TYPE PolicyType);
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtSetLogFileSize(
- PLOG_FILE_OBJECT LogFile,
- PULONGLONG NewSizeInContainers,
- PULONGLONG ResultingSizeInContainers,
- PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine,
- PVOID CompletionRoutineData);
- #endif
- #if NTDDI_VERSION >= NTDDI_VISTA || _WIN32_WINNT >= _WIN32_WINNT_VISTA
- CLFSUSER_API
- NTSTATUS
- ClfsMgmtSetLogFileSizeAsClient(
- PLOG_FILE_OBJECT LogFile,
- PCLFS_MGMT_CLIENT ClientCookie,
- PULONGLONG NewSizeInContainers,
- PULONGLONG ResultingSizeInContainers,
- PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK CompletionRoutine,
- PVOID CompletionRoutineData);
- #endif
- #ifndef __CLFSPROC_H__
- #define __CLFSPROC_H__
- #if NTDDI_VERSION >= NTDDI_WS03SP1
- CLFSUSER_API NTSTATUS ClfsInitialize(void);
- CLFSUSER_API void ClfsFinalize(void);
- CLFSUSER_API
- NTSTATUS
- ClfsCreateLogFile(
- PPLOG_FILE_OBJECT pplfoLog,
- PUNICODE_STRING puszLogFileName,
- ACCESS_MASK fDesiredAccess,
- ULONG dwShareMode,
- PSECURITY_DESCRIPTOR psdLogFile,
- ULONG fCreateDisposition,
- ULONG fCreateOptions,
- ULONG fFlagsAndAttributes,
- ULONG fLogOptionFlag,
- PVOID pvContext,
- ULONG cbContext);
- CLFSUSER_API
- NTSTATUS
- ClfsDeleteLogByPointer(
- PLOG_FILE_OBJECT plfoLog);
- CLFSUSER_API
- NTSTATUS
- ClfsDeleteLogFile(
- PUNICODE_STRING puszLogFileName,
- PVOID pvReserved,
- ULONG fLogOptionFlag,
- PVOID pvContext,
- ULONG cbContext);
- CLFSUSER_API
- NTSTATUS
- ClfsAddLogContainer(
- PLOG_FILE_OBJECT plfoLog,
- PULONGLONG pcbContainer,
- PUNICODE_STRING puszContainerPath);
- CLFSUSER_API
- NTSTATUS
- ClfsAddLogContainerSet(
- PLOG_FILE_OBJECT plfoLog,
- USHORT cContainers,
- PULONGLONG pcbContainer,
- PUNICODE_STRING rguszContainerPath);
- CLFSUSER_API
- NTSTATUS
- ClfsRemoveLogContainer(
- PLOG_FILE_OBJECT plfoLog,
- PUNICODE_STRING puszContainerPath,
- BOOLEAN fForce);
- CLFSUSER_API
- NTSTATUS
- ClfsRemoveLogContainerSet(
- PLOG_FILE_OBJECT plfoLog,
- USHORT cContainers,
- PUNICODE_STRING rgwszContainerPath,
- BOOLEAN fForce);
- CLFSUSER_API
- NTSTATUS
- ClfsSetArchiveTail(
- PLOG_FILE_OBJECT plfoLog,
- PCLFS_LSN plsnArchiveTail);
- CLFSUSER_API
- NTSTATUS
- ClfsSetEndOfLog(
- PLOG_FILE_OBJECT plfoLog,
- PCLFS_LSN plsnEnd);
- CLFSUSER_API
- NTSTATUS
- ClfsCreateScanContext(
- PLOG_FILE_OBJECT plfoLog,
- ULONG cFromContainer,
- ULONG cContainers,
- CLFS_SCAN_MODE eScanMode,
- PCLFS_SCAN_CONTEXT pcxScan);
- CLFSUSER_API
- NTSTATUS
- ClfsScanLogContainers(
- PCLFS_SCAN_CONTEXT pcxScan,
- CLFS_SCAN_MODE eScanMode);
- CLFSUSER_API
- NTSTATUS
- ClfsGetContainerName(
- PLOG_FILE_OBJECT plfoLog,
- CLFS_CONTAINER_ID cidLogicalContainer,
- PUNICODE_STRING puszContainerName,
- PULONG pcActualLenContainerName);
- CLFSUSER_API
- NTSTATUS
- ClfsGetLogFileInformation(
- PLOG_FILE_OBJECT plfoLog,
- PCLFS_INFORMATION pinfoBuffer,
- PULONG pcbInfoBuffer);
- CLFSUSER_API
- NTSTATUS
- ClfsSetLogFileInformation(
- PLOG_FILE_OBJECT plfoLog,
- CLFS_LOG_INFORMATION_CLASS eInformationClass,
- PVOID pinfoBuffer,
- ULONG cbBuffer);
- CLFSUSER_API
- NTSTATUS
- ClfsReadRestartArea(
- PVOID pvMarshalContext,
- PVOID* ppvRestartBuffer,
- PULONG pcbRestartBuffer,
- PCLFS_LSN plsn,
- PVOID* ppvReadContext);
- CLFSUSER_API
- NTSTATUS
- ClfsReadPreviousRestartArea(
- PVOID pvReadContext,
- PVOID* ppvRestartBuffer,
- PULONG pcbRestartBuffer,
- PCLFS_LSN plsnRestart);
- CLFSUSER_API
- NTSTATUS
- ClfsWriteRestartArea(
- PVOID pvMarshalContext,
- PVOID pvRestartBuffer,
- ULONG cbRestartBuffer,
- PCLFS_LSN plsnBase,
- ULONG fFlags,
- PULONG pcbWritten,
- PCLFS_LSN plsnNext);
- CLFSUSER_API
- NTSTATUS
- ClfsAdvanceLogBase(
- PVOID pvMarshalContext,
- PCLFS_LSN plsnBase,
- ULONG fFlags);
- CLFSUSER_API
- NTSTATUS
- ClfsCloseAndResetLogFile(
- PLOG_FILE_OBJECT plfoLog);
- CLFSUSER_API
- NTSTATUS
- ClfsCloseLogFileObject(
- PLOG_FILE_OBJECT plfoLog);
- CLFSUSER_API
- NTSTATUS
- ClfsCreateMarshallingArea(
- PLOG_FILE_OBJECT plfoLog,
- POOL_TYPE ePoolType,
- PALLOCATE_FUNCTION pfnAllocBuffer,
- PFREE_FUNCTION pfnFreeBuffer,
- ULONG cbMarshallingBuffer,
- ULONG cMaxWriteBuffers,
- ULONG cMaxReadBuffers,
- PVOID* ppvMarshalContext);
- CLFSUSER_API
- NTSTATUS
- ClfsDeleteMarshallingArea(
- PVOID pvMarshalContext);
- CLFSUSER_API
- NTSTATUS
- ClfsReserveAndAppendLog(
- PVOID pvMarshalContext,
- PCLFS_WRITE_ENTRY rgWriteEntries,
- ULONG cWriteEntries,
- PCLFS_LSN plsnUndoNext,
- PCLFS_LSN plsnPrevious,
- ULONG cReserveRecords,
- PLONGLONG rgcbReservation,
- ULONG fFlags,
- PCLFS_LSN plsn);
- CLFSUSER_API
- NTSTATUS
- ClfsReserveAndAppendLogAligned(
- PVOID pvMarshalContext,
- PCLFS_WRITE_ENTRY rgWriteEntries,
- ULONG cWriteEntries,
- ULONG cbEntryAlignment,
- PCLFS_LSN plsnUndoNext,
- PCLFS_LSN plsnPrevious,
- ULONG cReserveRecords,
- PLONGLONG rgcbReservation,
- ULONG fFlags,
- PCLFS_LSN plsn);
- CLFSUSER_API
- NTSTATUS
- ClfsAlignReservedLog(
- PVOID pvMarshalContext,
- ULONG cRecords,
- LONGLONG rgcbReservation[],
- PLONGLONG pcbAlignReservation);
- CLFSUSER_API
- NTSTATUS
- ClfsAllocReservedLog(
- PVOID pvMarshalContext,
- ULONG cRecords,
- PLONGLONG pcbAdjustment);
- CLFSUSER_API
- NTSTATUS
- ClfsFreeReservedLog(
- PVOID pvMarshalContext,
- ULONG cRecords,
- PLONGLONG pcbAdjustment);
- CLFSUSER_API
- NTSTATUS
- ClfsFlushBuffers(
- PVOID pvMarshalContext);
- CLFSUSER_API
- NTSTATUS
- ClfsFlushToLsn(
- PVOID pvMarshalContext,
- PCLFS_LSN plsnFlush,
- PCLFS_LSN plsnLastFlushed);
- CLFSUSER_API
- NTSTATUS
- ClfsReadLogRecord(
- PVOID pvMarshalContext,
- PCLFS_LSN plsnFirst,
- CLFS_CONTEXT_MODE peContextMode,
- PVOID* ppvReadBuffer,
- PULONG pcbReadBuffer,
- PCLFS_RECORD_TYPE peRecordType,
- PCLFS_LSN plsnUndoNext,
- PCLFS_LSN plsnPrevious,
- PVOID* ppvReadContext);
- CLFSUSER_API
- NTSTATUS
- ClfsReadNextLogRecord(
- PVOID pvReadContext,
- PVOID* ppvBuffer,
- PULONG pcbBuffer,
- PCLFS_RECORD_TYPE peRecordType,
- PCLFS_LSN plsnUser,
- PCLFS_LSN plsnUndoNext,
- PCLFS_LSN plsnPrevious,
- PCLFS_LSN plsnRecord);
- CLFSUSER_API
- NTSTATUS
- ClfsTerminateReadLog(
- PVOID pvCursorContext);
- CLFSUSER_API
- NTSTATUS
- ClfsGetLastLsn(
- PLOG_FILE_OBJECT plfoLog,
- PCLFS_LSN plsnLast);
- CLFSUSER_API
- NTSTATUS
- ClfsGetIoStatistics(
- PLOG_FILE_OBJECT plfoLog,
- PVOID pvStatsBuffer,
- ULONG cbStatsBuffer,
- CLFS_IOSTATS_CLASS eStatsClass,
- PULONG pcbStatsWritten);
- CLFSUSER_API
- CLFS_LSN
- ClfsLaterLsn(
- PCLFS_LSN plsn);
- CLFSUSER_API
- CLFS_LSN
- ClfsEarlierLsn(
- PCLFS_LSN plsn);
- CLFSUSER_API
- NTSTATUS
- ClfsLsnDifference(
- PCLFS_LSN plsnStart,
- PCLFS_LSN plsnFinish,
- ULONG cbContainer,
- ULONG cbMaxBlock,
- PLONGLONG pcbDifference);
- #endif
- #if NTDDI_VERSION >= NTDDI_VISTA
- CLFSUSER_API
- BOOLEAN
- ClfsValidTopLevelContext(
- PIRP pirpTopLevelContext);
- CLFSUSER_API
- NTSTATUS
- ClfsQueryLogFileInformation(
- PLOG_FILE_OBJECT plfoLog,
- CLFS_LOG_INFORMATION_CLASS eInformationClass,
- PVOID pinfoInputBuffer,
- ULONG cbinfoInputBuffer,
- PVOID pinfoBuffer,
- PULONG pcbInfoBuffer);
- #endif
- #if NTDDI_VERSION >= NTDDI_WIN8
- CLFSUSER_API
- NTSTATUS
- ClfsCreateMarshallingAreaEx(
- PLOG_FILE_OBJECT plfoLog,
- POOL_TYPE ePoolType,
- PALLOCATE_FUNCTION pfnAllocBuffer,
- PFREE_FUNCTION pfnFreeBuffer,
- ULONG cbMarshallingBuffer,
- ULONG cMaxWriteBuffers,
- ULONG cMaxReadBuffers,
- ULONG cAlignmentSize,
- ULONGLONG fFlags,
- PVOID* ppvMarshalContext);
- #endif
- #endif /* __CLFSPROC_H__ */
- #ifdef __cplusplus
- }
- #endif
- #endif /* !_WDMDDK_ */
|