ntifs.h 257 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806
  1. /*
  2. * ntifs.h
  3. *
  4. * Windows NT Filesystem Driver Developer Kit
  5. *
  6. * This file is part of the ReactOS DDK package.
  7. *
  8. * Contributors:
  9. * Amine Khaldi
  10. * Timo Kreuzer (timo.kreuzer@reactos.org)
  11. *
  12. * THIS SOFTWARE IS NOT COPYRIGHTED
  13. *
  14. * This source code is offered for use in the public domain. You may
  15. * use, modify or distribute it freely.
  16. *
  17. * This code is distributed in the hope that it will be useful but
  18. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  19. * DISCLAIMED. This includes but is not limited to warranties of
  20. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  21. *
  22. */
  23. #pragma once
  24. #define _NTIFS_INCLUDED_
  25. #define _GNU_NTIFS_
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. /* Dependencies */
  30. #include <ntddk.h>
  31. #include <excpt.h>
  32. #include <ntdef.h>
  33. #include <ntnls.h>
  34. #include <ntstatus.h>
  35. #include <bugcodes.h>
  36. #include <ntiologc.h>
  37. #ifndef FlagOn
  38. #define FlagOn(_F,_SF) ((_F) & (_SF))
  39. #endif
  40. #ifndef BooleanFlagOn
  41. #define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0))
  42. #endif
  43. #ifndef SetFlag
  44. #define SetFlag(_F,_SF) ((_F) |= (_SF))
  45. #endif
  46. #ifndef ClearFlag
  47. #define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
  48. #endif
  49. typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
  50. typedef STRING LSA_STRING, *PLSA_STRING;
  51. typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES;
  52. /******************************************************************************
  53. * Security Manager Types *
  54. ******************************************************************************/
  55. #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
  56. #define SID_IDENTIFIER_AUTHORITY_DEFINED
  57. typedef struct _SID_IDENTIFIER_AUTHORITY {
  58. UCHAR Value[6];
  59. } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
  60. #endif
  61. #ifndef SID_DEFINED
  62. #define SID_DEFINED
  63. typedef struct _SID {
  64. UCHAR Revision;
  65. UCHAR SubAuthorityCount;
  66. SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
  67. ULONG SubAuthority[ANYSIZE_ARRAY];
  68. } SID, *PISID;
  69. #endif
  70. #define SID_REVISION 1
  71. #define SID_MAX_SUB_AUTHORITIES 15
  72. #define SID_RECOMMENDED_SUB_AUTHORITIES 1
  73. typedef enum _SID_NAME_USE {
  74. SidTypeUser = 1,
  75. SidTypeGroup,
  76. SidTypeDomain,
  77. SidTypeAlias,
  78. SidTypeWellKnownGroup,
  79. SidTypeDeletedAccount,
  80. SidTypeInvalid,
  81. SidTypeUnknown,
  82. SidTypeComputer,
  83. SidTypeLabel,
  84. SidTypeLogonSession
  85. } SID_NAME_USE, *PSID_NAME_USE;
  86. typedef struct _SID_AND_ATTRIBUTES {
  87. PSID Sid;
  88. ULONG Attributes;
  89. } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
  90. typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
  91. typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
  92. #define SID_HASH_SIZE 32
  93. typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
  94. typedef struct _SID_AND_ATTRIBUTES_HASH {
  95. ULONG SidCount;
  96. PSID_AND_ATTRIBUTES SidAttr;
  97. SID_HASH_ENTRY Hash[SID_HASH_SIZE];
  98. } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
  99. /* Universal well-known SIDs */
  100. #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
  101. #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
  102. #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
  103. #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
  104. #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
  105. #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
  106. #define SECURITY_NULL_RID (0x00000000L)
  107. #define SECURITY_WORLD_RID (0x00000000L)
  108. #define SECURITY_LOCAL_RID (0x00000000L)
  109. #define SECURITY_LOCAL_LOGON_RID (0x00000001L)
  110. #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
  111. #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
  112. #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
  113. #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
  114. #define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
  115. /* NT well-known SIDs */
  116. #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
  117. #define SECURITY_DIALUP_RID (0x00000001L)
  118. #define SECURITY_NETWORK_RID (0x00000002L)
  119. #define SECURITY_BATCH_RID (0x00000003L)
  120. #define SECURITY_INTERACTIVE_RID (0x00000004L)
  121. #define SECURITY_LOGON_IDS_RID (0x00000005L)
  122. #define SECURITY_LOGON_IDS_RID_COUNT (3L)
  123. #define SECURITY_SERVICE_RID (0x00000006L)
  124. #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
  125. #define SECURITY_PROXY_RID (0x00000008L)
  126. #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
  127. #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
  128. #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
  129. #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
  130. #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
  131. #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
  132. #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
  133. #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
  134. #define SECURITY_IUSER_RID (0x00000011L)
  135. #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
  136. #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
  137. #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
  138. #define SECURITY_NT_NON_UNIQUE (0x00000015L)
  139. #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
  140. #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
  141. #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
  142. #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
  143. #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
  144. #define SECURITY_PACKAGE_RID_COUNT (2L)
  145. #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
  146. #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
  147. #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
  148. #define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
  149. #define SECURITY_CRED_TYPE_RID_COUNT (2L)
  150. #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
  151. #define SECURITY_MIN_BASE_RID (0x00000050L)
  152. #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
  153. #define SECURITY_SERVICE_ID_RID_COUNT (6L)
  154. #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
  155. #define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
  156. #define SECURITY_APPPOOL_ID_RID_COUNT (6L)
  157. #define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
  158. #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
  159. #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
  160. #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
  161. #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
  162. #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
  163. #define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
  164. #define SECURITY_WMIHOST_ID_RID_COUNT (6L)
  165. #define SECURITY_TASK_ID_BASE_RID (0x00000057L)
  166. #define SECURITY_NFS_ID_BASE_RID (0x00000058L)
  167. #define SECURITY_COM_ID_BASE_RID (0x00000059L)
  168. #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
  169. #define SECURITY_MAX_BASE_RID (0x0000006FL)
  170. #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
  171. #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
  172. #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
  173. #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
  174. /* Well-known domain relative sub-authority values (RIDs) */
  175. #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
  176. #define FOREST_USER_RID_MAX (0x000001F3L)
  177. /* Well-known users */
  178. #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
  179. #define DOMAIN_USER_RID_GUEST (0x000001F5L)
  180. #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
  181. #define DOMAIN_USER_RID_MAX (0x000003E7L)
  182. /* Well-known groups */
  183. #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
  184. #define DOMAIN_GROUP_RID_USERS (0x00000201L)
  185. #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
  186. #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
  187. #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
  188. #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
  189. #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
  190. #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
  191. #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
  192. #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
  193. /* Well-known aliases */
  194. #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
  195. #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
  196. #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
  197. #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
  198. #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
  199. #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
  200. #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
  201. #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
  202. #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
  203. #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
  204. #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
  205. #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
  206. #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
  207. #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
  208. #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
  209. #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
  210. #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
  211. #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
  212. #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
  213. #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
  214. #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
  215. #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
  216. #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
  217. #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
  218. #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
  219. #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
  220. #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
  221. #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
  222. #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
  223. #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
  224. #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
  225. #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
  226. /* SECURITY_MANDATORY_MAXIMUM_USER_RID is the highest RID that
  227. can be set by a usermode caller.*/
  228. #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
  229. #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
  230. /* Allocate the System Luid. The first 1000 LUIDs are reserved.
  231. Use #999 here (0x3e7 = 999) */
  232. #define SYSTEM_LUID {0x3e7, 0x0}
  233. #define ANONYMOUS_LOGON_LUID {0x3e6, 0x0}
  234. #define LOCALSERVICE_LUID {0x3e5, 0x0}
  235. #define NETWORKSERVICE_LUID {0x3e4, 0x0}
  236. #define IUSER_LUID {0x3e3, 0x0}
  237. typedef struct _ACE_HEADER {
  238. UCHAR AceType;
  239. UCHAR AceFlags;
  240. USHORT AceSize;
  241. } ACE_HEADER, *PACE_HEADER;
  242. /* also in winnt.h */
  243. #define ACCESS_MIN_MS_ACE_TYPE (0x0)
  244. #define ACCESS_ALLOWED_ACE_TYPE (0x0)
  245. #define ACCESS_DENIED_ACE_TYPE (0x1)
  246. #define SYSTEM_AUDIT_ACE_TYPE (0x2)
  247. #define SYSTEM_ALARM_ACE_TYPE (0x3)
  248. #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
  249. #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
  250. #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
  251. #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
  252. #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
  253. #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
  254. #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
  255. #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
  256. #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
  257. #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
  258. #define ACCESS_MAX_MS_ACE_TYPE (0x8)
  259. #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
  260. #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
  261. #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
  262. #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
  263. #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
  264. #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
  265. #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
  266. #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
  267. #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
  268. #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
  269. /* The following are the inherit flags that go into the AceFlags field
  270. of an Ace header. */
  271. #define OBJECT_INHERIT_ACE (0x1)
  272. #define CONTAINER_INHERIT_ACE (0x2)
  273. #define NO_PROPAGATE_INHERIT_ACE (0x4)
  274. #define INHERIT_ONLY_ACE (0x8)
  275. #define INHERITED_ACE (0x10)
  276. #define VALID_INHERIT_FLAGS (0x1F)
  277. #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
  278. #define FAILED_ACCESS_ACE_FLAG (0x80)
  279. typedef struct _ACCESS_ALLOWED_ACE {
  280. ACE_HEADER Header;
  281. ACCESS_MASK Mask;
  282. ULONG SidStart;
  283. } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
  284. typedef struct _ACCESS_DENIED_ACE {
  285. ACE_HEADER Header;
  286. ACCESS_MASK Mask;
  287. ULONG SidStart;
  288. } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
  289. typedef struct _SYSTEM_AUDIT_ACE {
  290. ACE_HEADER Header;
  291. ACCESS_MASK Mask;
  292. ULONG SidStart;
  293. } SYSTEM_AUDIT_ACE, *PSYSTEM_AUDIT_ACE;
  294. typedef struct _SYSTEM_ALARM_ACE {
  295. ACE_HEADER Header;
  296. ACCESS_MASK Mask;
  297. ULONG SidStart;
  298. } SYSTEM_ALARM_ACE, *PSYSTEM_ALARM_ACE;
  299. typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
  300. ACE_HEADER Header;
  301. ACCESS_MASK Mask;
  302. ULONG SidStart;
  303. } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
  304. #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
  305. #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
  306. #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
  307. #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
  308. SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
  309. SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
  310. #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
  311. typedef USHORT SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
  312. #define SE_OWNER_DEFAULTED 0x0001
  313. #define SE_GROUP_DEFAULTED 0x0002
  314. #define SE_DACL_PRESENT 0x0004
  315. #define SE_DACL_DEFAULTED 0x0008
  316. #define SE_SACL_PRESENT 0x0010
  317. #define SE_SACL_DEFAULTED 0x0020
  318. #define SE_DACL_UNTRUSTED 0x0040
  319. #define SE_SERVER_SECURITY 0x0080
  320. #define SE_DACL_AUTO_INHERIT_REQ 0x0100
  321. #define SE_SACL_AUTO_INHERIT_REQ 0x0200
  322. #define SE_DACL_AUTO_INHERITED 0x0400
  323. #define SE_SACL_AUTO_INHERITED 0x0800
  324. #define SE_DACL_PROTECTED 0x1000
  325. #define SE_SACL_PROTECTED 0x2000
  326. #define SE_RM_CONTROL_VALID 0x4000
  327. #define SE_SELF_RELATIVE 0x8000
  328. typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
  329. UCHAR Revision;
  330. UCHAR Sbz1;
  331. SECURITY_DESCRIPTOR_CONTROL Control;
  332. ULONG Owner;
  333. ULONG Group;
  334. ULONG Sacl;
  335. ULONG Dacl;
  336. } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
  337. typedef struct _SECURITY_DESCRIPTOR {
  338. UCHAR Revision;
  339. UCHAR Sbz1;
  340. SECURITY_DESCRIPTOR_CONTROL Control;
  341. PSID Owner;
  342. PSID Group;
  343. PACL Sacl;
  344. PACL Dacl;
  345. } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
  346. typedef struct _OBJECT_TYPE_LIST {
  347. USHORT Level;
  348. USHORT Sbz;
  349. GUID *ObjectType;
  350. } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
  351. #define ACCESS_OBJECT_GUID 0
  352. #define ACCESS_PROPERTY_SET_GUID 1
  353. #define ACCESS_PROPERTY_GUID 2
  354. #define ACCESS_MAX_LEVEL 4
  355. typedef enum _AUDIT_EVENT_TYPE {
  356. AuditEventObjectAccess,
  357. AuditEventDirectoryServiceAccess
  358. } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
  359. #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
  360. #define ACCESS_DS_SOURCE_A "DS"
  361. #define ACCESS_DS_SOURCE_W L"DS"
  362. #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
  363. #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
  364. #define ACCESS_REASON_TYPE_MASK 0xffff0000
  365. #define ACCESS_REASON_DATA_MASK 0x0000ffff
  366. typedef enum _ACCESS_REASON_TYPE {
  367. AccessReasonNone = 0x00000000,
  368. AccessReasonAllowedAce = 0x00010000,
  369. AccessReasonDeniedAce = 0x00020000,
  370. AccessReasonAllowedParentAce = 0x00030000,
  371. AccessReasonDeniedParentAce = 0x00040000,
  372. AccessReasonMissingPrivilege = 0x00100000,
  373. AccessReasonFromPrivilege = 0x00200000,
  374. AccessReasonIntegrityLevel = 0x00300000,
  375. AccessReasonOwnership = 0x00400000,
  376. AccessReasonNullDacl = 0x00500000,
  377. AccessReasonEmptyDacl = 0x00600000,
  378. AccessReasonNoSD = 0x00700000,
  379. AccessReasonNoGrant = 0x00800000
  380. } ACCESS_REASON_TYPE;
  381. typedef ULONG ACCESS_REASON;
  382. typedef struct _ACCESS_REASONS {
  383. ACCESS_REASON Data[32];
  384. } ACCESS_REASONS, *PACCESS_REASONS;
  385. #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
  386. #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
  387. #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
  388. typedef struct _SE_SECURITY_DESCRIPTOR {
  389. ULONG Size;
  390. ULONG Flags;
  391. PSECURITY_DESCRIPTOR SecurityDescriptor;
  392. } SE_SECURITY_DESCRIPTOR, *PSE_SECURITY_DESCRIPTOR;
  393. typedef struct _SE_ACCESS_REQUEST {
  394. ULONG Size;
  395. PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
  396. ACCESS_MASK DesiredAccess;
  397. ACCESS_MASK PreviouslyGrantedAccess;
  398. PSID PrincipalSelfSid;
  399. PGENERIC_MAPPING GenericMapping;
  400. ULONG ObjectTypeListCount;
  401. POBJECT_TYPE_LIST ObjectTypeList;
  402. } SE_ACCESS_REQUEST, *PSE_ACCESS_REQUEST;
  403. typedef struct _SE_ACCESS_REPLY {
  404. ULONG Size;
  405. ULONG ResultListCount;
  406. PACCESS_MASK GrantedAccess;
  407. PNTSTATUS AccessStatus;
  408. PACCESS_REASONS AccessReason;
  409. PPRIVILEGE_SET* Privileges;
  410. } SE_ACCESS_REPLY, *PSE_ACCESS_REPLY;
  411. typedef enum _SE_AUDIT_OPERATION {
  412. AuditPrivilegeObject,
  413. AuditPrivilegeService,
  414. AuditAccessCheck,
  415. AuditOpenObject,
  416. AuditOpenObjectWithTransaction,
  417. AuditCloseObject,
  418. AuditDeleteObject,
  419. AuditOpenObjectForDelete,
  420. AuditOpenObjectForDeleteWithTransaction,
  421. AuditCloseNonObject,
  422. AuditOpenNonObject,
  423. AuditObjectReference,
  424. AuditHandleCreation,
  425. } SE_AUDIT_OPERATION, *PSE_AUDIT_OPERATION;
  426. typedef struct _SE_AUDIT_INFO {
  427. ULONG Size;
  428. AUDIT_EVENT_TYPE AuditType;
  429. SE_AUDIT_OPERATION AuditOperation;
  430. ULONG AuditFlags;
  431. UNICODE_STRING SubsystemName;
  432. UNICODE_STRING ObjectTypeName;
  433. UNICODE_STRING ObjectName;
  434. PVOID HandleId;
  435. GUID* TransactionId;
  436. LUID* OperationId;
  437. BOOLEAN ObjectCreation;
  438. BOOLEAN GenerateOnClose;
  439. } SE_AUDIT_INFO, *PSE_AUDIT_INFO;
  440. #define TOKEN_ASSIGN_PRIMARY (0x0001)
  441. #define TOKEN_DUPLICATE (0x0002)
  442. #define TOKEN_IMPERSONATE (0x0004)
  443. #define TOKEN_QUERY (0x0008)
  444. #define TOKEN_QUERY_SOURCE (0x0010)
  445. #define TOKEN_ADJUST_PRIVILEGES (0x0020)
  446. #define TOKEN_ADJUST_GROUPS (0x0040)
  447. #define TOKEN_ADJUST_DEFAULT (0x0080)
  448. #define TOKEN_ADJUST_SESSIONID (0x0100)
  449. #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\
  450. TOKEN_ASSIGN_PRIMARY |\
  451. TOKEN_DUPLICATE |\
  452. TOKEN_IMPERSONATE |\
  453. TOKEN_QUERY |\
  454. TOKEN_QUERY_SOURCE |\
  455. TOKEN_ADJUST_PRIVILEGES |\
  456. TOKEN_ADJUST_GROUPS |\
  457. TOKEN_ADJUST_DEFAULT )
  458. #if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
  459. #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
  460. TOKEN_ADJUST_SESSIONID )
  461. #else
  462. #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
  463. #endif
  464. #define TOKEN_READ (STANDARD_RIGHTS_READ |\
  465. TOKEN_QUERY)
  466. #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
  467. TOKEN_ADJUST_PRIVILEGES |\
  468. TOKEN_ADJUST_GROUPS |\
  469. TOKEN_ADJUST_DEFAULT)
  470. #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
  471. typedef enum _TOKEN_TYPE {
  472. TokenPrimary = 1,
  473. TokenImpersonation
  474. } TOKEN_TYPE,*PTOKEN_TYPE;
  475. typedef enum _TOKEN_INFORMATION_CLASS {
  476. TokenUser = 1,
  477. TokenGroups,
  478. TokenPrivileges,
  479. TokenOwner,
  480. TokenPrimaryGroup,
  481. TokenDefaultDacl,
  482. TokenSource,
  483. TokenType,
  484. TokenImpersonationLevel,
  485. TokenStatistics,
  486. TokenRestrictedSids,
  487. TokenSessionId,
  488. TokenGroupsAndPrivileges,
  489. TokenSessionReference,
  490. TokenSandBoxInert,
  491. TokenAuditPolicy,
  492. TokenOrigin,
  493. TokenElevationType,
  494. TokenLinkedToken,
  495. TokenElevation,
  496. TokenHasRestrictions,
  497. TokenAccessInformation,
  498. TokenVirtualizationAllowed,
  499. TokenVirtualizationEnabled,
  500. TokenIntegrityLevel,
  501. TokenUIAccess,
  502. TokenMandatoryPolicy,
  503. TokenLogonSid,
  504. MaxTokenInfoClass
  505. } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
  506. typedef struct _TOKEN_USER {
  507. SID_AND_ATTRIBUTES User;
  508. } TOKEN_USER, *PTOKEN_USER;
  509. typedef struct _TOKEN_GROUPS {
  510. ULONG GroupCount;
  511. SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
  512. } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
  513. typedef struct _TOKEN_PRIVILEGES {
  514. ULONG PrivilegeCount;
  515. LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
  516. } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
  517. typedef struct _TOKEN_OWNER {
  518. PSID Owner;
  519. } TOKEN_OWNER,*PTOKEN_OWNER;
  520. typedef struct _TOKEN_PRIMARY_GROUP {
  521. PSID PrimaryGroup;
  522. } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
  523. typedef struct _TOKEN_DEFAULT_DACL {
  524. PACL DefaultDacl;
  525. } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
  526. typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
  527. ULONG SidCount;
  528. ULONG SidLength;
  529. PSID_AND_ATTRIBUTES Sids;
  530. ULONG RestrictedSidCount;
  531. ULONG RestrictedSidLength;
  532. PSID_AND_ATTRIBUTES RestrictedSids;
  533. ULONG PrivilegeCount;
  534. ULONG PrivilegeLength;
  535. PLUID_AND_ATTRIBUTES Privileges;
  536. LUID AuthenticationId;
  537. } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
  538. typedef struct _TOKEN_LINKED_TOKEN {
  539. HANDLE LinkedToken;
  540. } TOKEN_LINKED_TOKEN, *PTOKEN_LINKED_TOKEN;
  541. typedef struct _TOKEN_ELEVATION {
  542. ULONG TokenIsElevated;
  543. } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
  544. typedef struct _TOKEN_MANDATORY_LABEL {
  545. SID_AND_ATTRIBUTES Label;
  546. } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
  547. #define TOKEN_MANDATORY_POLICY_OFF 0x0
  548. #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
  549. #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
  550. #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
  551. TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
  552. typedef struct _TOKEN_MANDATORY_POLICY {
  553. ULONG Policy;
  554. } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
  555. typedef struct _TOKEN_ACCESS_INFORMATION {
  556. PSID_AND_ATTRIBUTES_HASH SidHash;
  557. PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
  558. PTOKEN_PRIVILEGES Privileges;
  559. LUID AuthenticationId;
  560. TOKEN_TYPE TokenType;
  561. SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
  562. TOKEN_MANDATORY_POLICY MandatoryPolicy;
  563. ULONG Flags;
  564. } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
  565. #define POLICY_AUDIT_SUBCATEGORY_COUNT (53)
  566. typedef struct _TOKEN_AUDIT_POLICY {
  567. UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
  568. } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
  569. #define TOKEN_SOURCE_LENGTH 8
  570. typedef struct _TOKEN_SOURCE {
  571. CHAR SourceName[TOKEN_SOURCE_LENGTH];
  572. LUID SourceIdentifier;
  573. } TOKEN_SOURCE,*PTOKEN_SOURCE;
  574. typedef struct _TOKEN_STATISTICS {
  575. LUID TokenId;
  576. LUID AuthenticationId;
  577. LARGE_INTEGER ExpirationTime;
  578. TOKEN_TYPE TokenType;
  579. SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
  580. ULONG DynamicCharged;
  581. ULONG DynamicAvailable;
  582. ULONG GroupCount;
  583. ULONG PrivilegeCount;
  584. LUID ModifiedId;
  585. } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
  586. typedef struct _TOKEN_CONTROL {
  587. LUID TokenId;
  588. LUID AuthenticationId;
  589. LUID ModifiedId;
  590. TOKEN_SOURCE TokenSource;
  591. } TOKEN_CONTROL,*PTOKEN_CONTROL;
  592. typedef struct _TOKEN_ORIGIN {
  593. LUID OriginatingLogonSession;
  594. } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
  595. typedef enum _MANDATORY_LEVEL {
  596. MandatoryLevelUntrusted = 0,
  597. MandatoryLevelLow,
  598. MandatoryLevelMedium,
  599. MandatoryLevelHigh,
  600. MandatoryLevelSystem,
  601. MandatoryLevelSecureProcess,
  602. MandatoryLevelCount
  603. } MANDATORY_LEVEL, *PMANDATORY_LEVEL;
  604. #define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x0001
  605. #define TOKEN_HAS_BACKUP_PRIVILEGE 0x0002
  606. #define TOKEN_HAS_RESTORE_PRIVILEGE 0x0004
  607. #define TOKEN_WRITE_RESTRICTED 0x0008
  608. #define TOKEN_IS_RESTRICTED 0x0010
  609. #define TOKEN_SESSION_NOT_REFERENCED 0x0020
  610. #define TOKEN_SANDBOX_INERT 0x0040
  611. #define TOKEN_HAS_IMPERSONATE_PRIVILEGE 0x0080
  612. #define SE_BACKUP_PRIVILEGES_CHECKED 0x0100
  613. #define TOKEN_VIRTUALIZE_ALLOWED 0x0200
  614. #define TOKEN_VIRTUALIZE_ENABLED 0x0400
  615. #define TOKEN_IS_FILTERED 0x0800
  616. #define TOKEN_UIACCESS 0x1000
  617. #define TOKEN_NOT_LOW 0x2000
  618. typedef struct _SE_EXPORTS {
  619. LUID SeCreateTokenPrivilege;
  620. LUID SeAssignPrimaryTokenPrivilege;
  621. LUID SeLockMemoryPrivilege;
  622. LUID SeIncreaseQuotaPrivilege;
  623. LUID SeUnsolicitedInputPrivilege;
  624. LUID SeTcbPrivilege;
  625. LUID SeSecurityPrivilege;
  626. LUID SeTakeOwnershipPrivilege;
  627. LUID SeLoadDriverPrivilege;
  628. LUID SeCreatePagefilePrivilege;
  629. LUID SeIncreaseBasePriorityPrivilege;
  630. LUID SeSystemProfilePrivilege;
  631. LUID SeSystemtimePrivilege;
  632. LUID SeProfileSingleProcessPrivilege;
  633. LUID SeCreatePermanentPrivilege;
  634. LUID SeBackupPrivilege;
  635. LUID SeRestorePrivilege;
  636. LUID SeShutdownPrivilege;
  637. LUID SeDebugPrivilege;
  638. LUID SeAuditPrivilege;
  639. LUID SeSystemEnvironmentPrivilege;
  640. LUID SeChangeNotifyPrivilege;
  641. LUID SeRemoteShutdownPrivilege;
  642. PSID SeNullSid;
  643. PSID SeWorldSid;
  644. PSID SeLocalSid;
  645. PSID SeCreatorOwnerSid;
  646. PSID SeCreatorGroupSid;
  647. PSID SeNtAuthoritySid;
  648. PSID SeDialupSid;
  649. PSID SeNetworkSid;
  650. PSID SeBatchSid;
  651. PSID SeInteractiveSid;
  652. PSID SeLocalSystemSid;
  653. PSID SeAliasAdminsSid;
  654. PSID SeAliasUsersSid;
  655. PSID SeAliasGuestsSid;
  656. PSID SeAliasPowerUsersSid;
  657. PSID SeAliasAccountOpsSid;
  658. PSID SeAliasSystemOpsSid;
  659. PSID SeAliasPrintOpsSid;
  660. PSID SeAliasBackupOpsSid;
  661. PSID SeAuthenticatedUsersSid;
  662. PSID SeRestrictedSid;
  663. PSID SeAnonymousLogonSid;
  664. LUID SeUndockPrivilege;
  665. LUID SeSyncAgentPrivilege;
  666. LUID SeEnableDelegationPrivilege;
  667. PSID SeLocalServiceSid;
  668. PSID SeNetworkServiceSid;
  669. LUID SeManageVolumePrivilege;
  670. LUID SeImpersonatePrivilege;
  671. LUID SeCreateGlobalPrivilege;
  672. LUID SeTrustedCredManAccessPrivilege;
  673. LUID SeRelabelPrivilege;
  674. LUID SeIncreaseWorkingSetPrivilege;
  675. LUID SeTimeZonePrivilege;
  676. LUID SeCreateSymbolicLinkPrivilege;
  677. PSID SeIUserSid;
  678. PSID SeUntrustedMandatorySid;
  679. PSID SeLowMandatorySid;
  680. PSID SeMediumMandatorySid;
  681. PSID SeHighMandatorySid;
  682. PSID SeSystemMandatorySid;
  683. PSID SeOwnerRightsSid;
  684. } SE_EXPORTS, *PSE_EXPORTS;
  685. typedef NTSTATUS
  686. (NTAPI *PSE_LOGON_SESSION_TERMINATED_ROUTINE)(
  687. IN PLUID LogonId);
  688. /******************************************************************************
  689. * Runtime Library Types *
  690. ******************************************************************************/
  691. #define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information"
  692. typedef PVOID
  693. (NTAPI *PRTL_ALLOCATE_STRING_ROUTINE)(
  694. IN SIZE_T NumberOfBytes);
  695. #if _WIN32_WINNT >= 0x0600
  696. typedef PVOID
  697. (NTAPI *PRTL_REALLOCATE_STRING_ROUTINE)(
  698. IN SIZE_T NumberOfBytes,
  699. IN PVOID Buffer);
  700. #endif
  701. typedef VOID
  702. (NTAPI *PRTL_FREE_STRING_ROUTINE)(
  703. IN PVOID Buffer);
  704. extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine;
  705. extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine;
  706. #if _WIN32_WINNT >= 0x0600
  707. extern const PRTL_REALLOCATE_STRING_ROUTINE RtlReallocateStringRoutine;
  708. #endif
  709. typedef NTSTATUS
  710. (NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
  711. IN PVOID Base,
  712. IN OUT PVOID *CommitAddress,
  713. IN OUT PSIZE_T CommitSize);
  714. typedef struct _RTL_HEAP_PARAMETERS {
  715. ULONG Length;
  716. SIZE_T SegmentReserve;
  717. SIZE_T SegmentCommit;
  718. SIZE_T DeCommitFreeBlockThreshold;
  719. SIZE_T DeCommitTotalFreeThreshold;
  720. SIZE_T MaximumAllocationSize;
  721. SIZE_T VirtualMemoryThreshold;
  722. SIZE_T InitialCommit;
  723. SIZE_T InitialReserve;
  724. PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
  725. SIZE_T Reserved[2];
  726. } RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
  727. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  728. typedef struct _GENERATE_NAME_CONTEXT {
  729. USHORT Checksum;
  730. BOOLEAN CheckSumInserted;
  731. UCHAR NameLength;
  732. WCHAR NameBuffer[8];
  733. ULONG ExtensionLength;
  734. WCHAR ExtensionBuffer[4];
  735. ULONG LastIndexValue;
  736. } GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
  737. typedef struct _PREFIX_TABLE_ENTRY {
  738. CSHORT NodeTypeCode;
  739. CSHORT NameLength;
  740. struct _PREFIX_TABLE_ENTRY *NextPrefixTree;
  741. RTL_SPLAY_LINKS Links;
  742. PSTRING Prefix;
  743. } PREFIX_TABLE_ENTRY, *PPREFIX_TABLE_ENTRY;
  744. typedef struct _PREFIX_TABLE {
  745. CSHORT NodeTypeCode;
  746. CSHORT NameLength;
  747. PPREFIX_TABLE_ENTRY NextPrefixTree;
  748. } PREFIX_TABLE, *PPREFIX_TABLE;
  749. typedef struct _UNICODE_PREFIX_TABLE_ENTRY {
  750. CSHORT NodeTypeCode;
  751. CSHORT NameLength;
  752. struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
  753. struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
  754. RTL_SPLAY_LINKS Links;
  755. PUNICODE_STRING Prefix;
  756. } UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
  757. typedef struct _UNICODE_PREFIX_TABLE {
  758. CSHORT NodeTypeCode;
  759. CSHORT NameLength;
  760. PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
  761. PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
  762. } UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
  763. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  764. #if (NTDDI_VERSION >= NTDDI_WINXP)
  765. typedef struct _COMPRESSED_DATA_INFO {
  766. USHORT CompressionFormatAndEngine;
  767. UCHAR CompressionUnitShift;
  768. UCHAR ChunkShift;
  769. UCHAR ClusterShift;
  770. UCHAR Reserved;
  771. USHORT NumberOfChunks;
  772. ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
  773. } COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
  774. #endif
  775. /******************************************************************************
  776. * Runtime Library Functions *
  777. ******************************************************************************/
  778. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  779. NTSYSAPI
  780. PVOID
  781. NTAPI
  782. RtlAllocateHeap(
  783. IN HANDLE HeapHandle,
  784. IN ULONG Flags OPTIONAL,
  785. IN SIZE_T Size);
  786. NTSYSAPI
  787. BOOLEAN
  788. NTAPI
  789. RtlFreeHeap(
  790. IN PVOID HeapHandle,
  791. IN ULONG Flags OPTIONAL,
  792. IN PVOID BaseAddress);
  793. NTSYSAPI
  794. VOID
  795. NTAPI
  796. RtlCaptureContext(
  797. OUT PCONTEXT ContextRecord);
  798. NTSYSAPI
  799. ULONG
  800. NTAPI
  801. RtlRandom(
  802. IN OUT PULONG Seed);
  803. NTSYSAPI
  804. BOOLEAN
  805. NTAPI
  806. RtlCreateUnicodeString(
  807. OUT PUNICODE_STRING DestinationString,
  808. IN PCWSTR SourceString);
  809. NTSYSAPI
  810. NTSTATUS
  811. NTAPI
  812. RtlAppendStringToString(
  813. IN OUT PSTRING Destination,
  814. IN const STRING *Source);
  815. NTSYSAPI
  816. NTSTATUS
  817. NTAPI
  818. RtlOemStringToUnicodeString(
  819. IN OUT PUNICODE_STRING DestinationString,
  820. IN PCOEM_STRING SourceString,
  821. IN BOOLEAN AllocateDestinationString);
  822. NTSYSAPI
  823. NTSTATUS
  824. NTAPI
  825. RtlUnicodeStringToOemString(
  826. IN OUT POEM_STRING DestinationString,
  827. IN PCUNICODE_STRING SourceString,
  828. IN BOOLEAN AllocateDestinationString);
  829. NTSYSAPI
  830. NTSTATUS
  831. NTAPI
  832. RtlUpcaseUnicodeStringToOemString(
  833. IN OUT POEM_STRING DestinationString,
  834. IN PCUNICODE_STRING SourceString,
  835. IN BOOLEAN AllocateDestinationString);
  836. NTSYSAPI
  837. NTSTATUS
  838. NTAPI
  839. RtlOemStringToCountedUnicodeString(
  840. IN OUT PUNICODE_STRING DestinationString,
  841. IN PCOEM_STRING SourceString,
  842. IN BOOLEAN AllocateDestinationString);
  843. NTSYSAPI
  844. NTSTATUS
  845. NTAPI
  846. RtlUnicodeStringToCountedOemString(
  847. IN OUT POEM_STRING DestinationString,
  848. IN PCUNICODE_STRING SourceString,
  849. IN BOOLEAN AllocateDestinationString);
  850. NTSYSAPI
  851. NTSTATUS
  852. NTAPI
  853. RtlUpcaseUnicodeStringToCountedOemString(
  854. IN OUT POEM_STRING DestinationString,
  855. IN PCUNICODE_STRING SourceString,
  856. IN BOOLEAN AllocateDestinationString);
  857. NTSYSAPI
  858. NTSTATUS
  859. NTAPI
  860. RtlDowncaseUnicodeString(
  861. IN OUT PUNICODE_STRING UniDest,
  862. IN PCUNICODE_STRING UniSource,
  863. IN BOOLEAN AllocateDestinationString);
  864. NTSYSAPI
  865. VOID
  866. NTAPI
  867. RtlFreeOemString (
  868. IN OUT POEM_STRING OemString);
  869. NTSYSAPI
  870. ULONG
  871. NTAPI
  872. RtlxUnicodeStringToOemSize(
  873. IN PCUNICODE_STRING UnicodeString);
  874. NTSYSAPI
  875. ULONG
  876. NTAPI
  877. RtlxOemStringToUnicodeSize(
  878. IN PCOEM_STRING OemString);
  879. NTSYSAPI
  880. NTSTATUS
  881. NTAPI
  882. RtlMultiByteToUnicodeN(
  883. OUT PWCH UnicodeString,
  884. IN ULONG MaxBytesInUnicodeString,
  885. OUT PULONG BytesInUnicodeString OPTIONAL,
  886. IN const CHAR *MultiByteString,
  887. IN ULONG BytesInMultiByteString);
  888. NTSYSAPI
  889. NTSTATUS
  890. NTAPI
  891. RtlMultiByteToUnicodeSize(
  892. OUT PULONG BytesInUnicodeString,
  893. IN const CHAR *MultiByteString,
  894. IN ULONG BytesInMultiByteString);
  895. NTSYSAPI
  896. NTSTATUS
  897. NTAPI
  898. RtlUnicodeToMultiByteSize(
  899. OUT PULONG BytesInMultiByteString,
  900. IN PCWCH UnicodeString,
  901. IN ULONG BytesInUnicodeString);
  902. NTSYSAPI
  903. NTSTATUS
  904. NTAPI
  905. RtlUnicodeToMultiByteN(
  906. OUT PCHAR MultiByteString,
  907. IN ULONG MaxBytesInMultiByteString,
  908. OUT PULONG BytesInMultiByteString OPTIONAL,
  909. IN PCWCH UnicodeString,
  910. IN ULONG BytesInUnicodeString);
  911. NTSYSAPI
  912. NTSTATUS
  913. NTAPI
  914. RtlUpcaseUnicodeToMultiByteN(
  915. OUT PCHAR MultiByteString,
  916. IN ULONG MaxBytesInMultiByteString,
  917. OUT PULONG BytesInMultiByteString OPTIONAL,
  918. IN PCWCH UnicodeString,
  919. IN ULONG BytesInUnicodeString);
  920. NTSYSAPI
  921. NTSTATUS
  922. NTAPI
  923. RtlOemToUnicodeN(
  924. OUT PWSTR UnicodeString,
  925. IN ULONG MaxBytesInUnicodeString,
  926. OUT PULONG BytesInUnicodeString OPTIONAL,
  927. IN PCCH OemString,
  928. IN ULONG BytesInOemString);
  929. NTSYSAPI
  930. NTSTATUS
  931. NTAPI
  932. RtlUnicodeToOemN(
  933. OUT PCHAR OemString,
  934. IN ULONG MaxBytesInOemString,
  935. OUT PULONG BytesInOemString OPTIONAL,
  936. IN PCWCH UnicodeString,
  937. IN ULONG BytesInUnicodeString);
  938. NTSYSAPI
  939. NTSTATUS
  940. NTAPI
  941. RtlUpcaseUnicodeToOemN(
  942. OUT PCHAR OemString,
  943. IN ULONG MaxBytesInOemString,
  944. OUT PULONG BytesInOemString OPTIONAL,
  945. IN PCWCH UnicodeString,
  946. IN ULONG BytesInUnicodeString);
  947. #if (NTDDI_VERSION >= NTDDI_VISTASP1)
  948. NTSYSAPI
  949. NTSTATUS
  950. NTAPI
  951. RtlGenerate8dot3Name(
  952. IN PCUNICODE_STRING Name,
  953. IN BOOLEAN AllowExtendedCharacters,
  954. IN OUT PGENERATE_NAME_CONTEXT Context,
  955. IN OUT PUNICODE_STRING Name8dot3);
  956. #else
  957. NTSYSAPI
  958. VOID
  959. NTAPI
  960. RtlGenerate8dot3Name(
  961. IN PCUNICODE_STRING Name,
  962. IN BOOLEAN AllowExtendedCharacters,
  963. IN OUT PGENERATE_NAME_CONTEXT Context,
  964. IN OUT PUNICODE_STRING Name8dot3);
  965. #endif
  966. NTSYSAPI
  967. BOOLEAN
  968. NTAPI
  969. RtlIsNameLegalDOS8Dot3(
  970. IN PCUNICODE_STRING Name,
  971. IN OUT POEM_STRING OemName OPTIONAL,
  972. IN OUT PBOOLEAN NameContainsSpaces OPTIONAL);
  973. NTSYSAPI
  974. BOOLEAN
  975. NTAPI
  976. RtlIsValidOemCharacter(
  977. IN OUT PWCHAR Char);
  978. NTSYSAPI
  979. VOID
  980. NTAPI
  981. PfxInitialize(
  982. OUT PPREFIX_TABLE PrefixTable);
  983. NTSYSAPI
  984. BOOLEAN
  985. NTAPI
  986. PfxInsertPrefix(
  987. IN PPREFIX_TABLE PrefixTable,
  988. IN PSTRING Prefix,
  989. OUT PPREFIX_TABLE_ENTRY PrefixTableEntry);
  990. NTSYSAPI
  991. VOID
  992. NTAPI
  993. PfxRemovePrefix(
  994. IN PPREFIX_TABLE PrefixTable,
  995. IN PPREFIX_TABLE_ENTRY PrefixTableEntry);
  996. NTSYSAPI
  997. PPREFIX_TABLE_ENTRY
  998. NTAPI
  999. PfxFindPrefix(
  1000. IN PPREFIX_TABLE PrefixTable,
  1001. IN PSTRING FullName);
  1002. NTSYSAPI
  1003. VOID
  1004. NTAPI
  1005. RtlInitializeUnicodePrefix(
  1006. OUT PUNICODE_PREFIX_TABLE PrefixTable);
  1007. NTSYSAPI
  1008. BOOLEAN
  1009. NTAPI
  1010. RtlInsertUnicodePrefix(
  1011. IN PUNICODE_PREFIX_TABLE PrefixTable,
  1012. IN PUNICODE_STRING Prefix,
  1013. OUT PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
  1014. NTSYSAPI
  1015. VOID
  1016. NTAPI
  1017. RtlRemoveUnicodePrefix(
  1018. IN PUNICODE_PREFIX_TABLE PrefixTable,
  1019. IN PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry);
  1020. NTSYSAPI
  1021. PUNICODE_PREFIX_TABLE_ENTRY
  1022. NTAPI
  1023. RtlFindUnicodePrefix(
  1024. IN PUNICODE_PREFIX_TABLE PrefixTable,
  1025. IN PUNICODE_STRING FullName,
  1026. IN ULONG CaseInsensitiveIndex);
  1027. NTSYSAPI
  1028. PUNICODE_PREFIX_TABLE_ENTRY
  1029. NTAPI
  1030. RtlNextUnicodePrefix(
  1031. IN PUNICODE_PREFIX_TABLE PrefixTable,
  1032. IN BOOLEAN Restart);
  1033. NTSYSAPI
  1034. SIZE_T
  1035. NTAPI
  1036. RtlCompareMemoryUlong(
  1037. IN PVOID Source,
  1038. IN SIZE_T Length,
  1039. IN ULONG Pattern);
  1040. NTSYSAPI
  1041. BOOLEAN
  1042. NTAPI
  1043. RtlTimeToSecondsSince1980(
  1044. IN PLARGE_INTEGER Time,
  1045. OUT PULONG ElapsedSeconds);
  1046. NTSYSAPI
  1047. VOID
  1048. NTAPI
  1049. RtlSecondsSince1980ToTime(
  1050. IN ULONG ElapsedSeconds,
  1051. OUT PLARGE_INTEGER Time);
  1052. NTSYSAPI
  1053. BOOLEAN
  1054. NTAPI
  1055. RtlTimeToSecondsSince1970(
  1056. IN PLARGE_INTEGER Time,
  1057. OUT PULONG ElapsedSeconds);
  1058. NTSYSAPI
  1059. VOID
  1060. NTAPI
  1061. RtlSecondsSince1970ToTime(
  1062. IN ULONG ElapsedSeconds,
  1063. OUT PLARGE_INTEGER Time);
  1064. NTSYSAPI
  1065. BOOLEAN
  1066. NTAPI
  1067. RtlValidSid(
  1068. IN PSID Sid);
  1069. NTSYSAPI
  1070. BOOLEAN
  1071. NTAPI
  1072. RtlEqualSid(
  1073. IN PSID Sid1,
  1074. IN PSID Sid2);
  1075. NTSYSAPI
  1076. BOOLEAN
  1077. NTAPI
  1078. RtlEqualPrefixSid(
  1079. IN PSID Sid1,
  1080. IN PSID Sid2);
  1081. NTSYSAPI
  1082. ULONG
  1083. NTAPI
  1084. RtlLengthRequiredSid(
  1085. IN ULONG SubAuthorityCount);
  1086. NTSYSAPI
  1087. PVOID
  1088. NTAPI
  1089. RtlFreeSid(
  1090. IN PSID Sid);
  1091. NTSYSAPI
  1092. NTSTATUS
  1093. NTAPI
  1094. RtlAllocateAndInitializeSid(
  1095. IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
  1096. IN UCHAR SubAuthorityCount,
  1097. IN ULONG SubAuthority0,
  1098. IN ULONG SubAuthority1,
  1099. IN ULONG SubAuthority2,
  1100. IN ULONG SubAuthority3,
  1101. IN ULONG SubAuthority4,
  1102. IN ULONG SubAuthority5,
  1103. IN ULONG SubAuthority6,
  1104. IN ULONG SubAuthority7,
  1105. OUT PSID *Sid);
  1106. NTSYSAPI
  1107. NTSTATUS
  1108. NTAPI
  1109. RtlInitializeSid(
  1110. OUT PSID Sid,
  1111. IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
  1112. IN UCHAR SubAuthorityCount);
  1113. NTSYSAPI
  1114. PULONG
  1115. NTAPI
  1116. RtlSubAuthoritySid(
  1117. IN PSID Sid,
  1118. IN ULONG SubAuthority);
  1119. NTSYSAPI
  1120. ULONG
  1121. NTAPI
  1122. RtlLengthSid(
  1123. IN PSID Sid);
  1124. NTSYSAPI
  1125. NTSTATUS
  1126. NTAPI
  1127. RtlCopySid(
  1128. IN ULONG Length,
  1129. IN PSID Destination,
  1130. IN PSID Source);
  1131. NTSYSAPI
  1132. NTSTATUS
  1133. NTAPI
  1134. RtlConvertSidToUnicodeString(
  1135. IN OUT PUNICODE_STRING UnicodeString,
  1136. IN PSID Sid,
  1137. IN BOOLEAN AllocateDestinationString);
  1138. NTSYSAPI
  1139. VOID
  1140. NTAPI
  1141. RtlCopyLuid(
  1142. OUT PLUID DestinationLuid,
  1143. IN PLUID SourceLuid);
  1144. NTSYSAPI
  1145. NTSTATUS
  1146. NTAPI
  1147. RtlCreateAcl(
  1148. OUT PACL Acl,
  1149. IN ULONG AclLength,
  1150. IN ULONG AclRevision);
  1151. NTSYSAPI
  1152. NTSTATUS
  1153. NTAPI
  1154. RtlAddAce(
  1155. IN OUT PACL Acl,
  1156. IN ULONG AceRevision,
  1157. IN ULONG StartingAceIndex,
  1158. IN PVOID AceList,
  1159. IN ULONG AceListLength);
  1160. NTSYSAPI
  1161. NTSTATUS
  1162. NTAPI
  1163. RtlDeleteAce(
  1164. IN OUT PACL Acl,
  1165. IN ULONG AceIndex);
  1166. NTSYSAPI
  1167. NTSTATUS
  1168. NTAPI
  1169. RtlGetAce(
  1170. IN PACL Acl,
  1171. IN ULONG AceIndex,
  1172. OUT PVOID *Ace);
  1173. NTSYSAPI
  1174. NTSTATUS
  1175. NTAPI
  1176. RtlAddAccessAllowedAce(
  1177. IN OUT PACL Acl,
  1178. IN ULONG AceRevision,
  1179. IN ACCESS_MASK AccessMask,
  1180. IN PSID Sid);
  1181. NTSYSAPI
  1182. NTSTATUS
  1183. NTAPI
  1184. RtlAddAccessAllowedAceEx(
  1185. IN OUT PACL Acl,
  1186. IN ULONG AceRevision,
  1187. IN ULONG AceFlags,
  1188. IN ACCESS_MASK AccessMask,
  1189. IN PSID Sid);
  1190. NTSYSAPI
  1191. NTSTATUS
  1192. NTAPI
  1193. RtlCreateSecurityDescriptorRelative(
  1194. OUT PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor,
  1195. IN ULONG Revision);
  1196. NTSYSAPI
  1197. NTSTATUS
  1198. NTAPI
  1199. RtlGetDaclSecurityDescriptor(
  1200. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1201. OUT PBOOLEAN DaclPresent,
  1202. OUT PACL *Dacl,
  1203. OUT PBOOLEAN DaclDefaulted);
  1204. NTSYSAPI
  1205. NTSTATUS
  1206. NTAPI
  1207. RtlSetOwnerSecurityDescriptor(
  1208. IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  1209. IN PSID Owner OPTIONAL,
  1210. IN BOOLEAN OwnerDefaulted);
  1211. NTSYSAPI
  1212. NTSTATUS
  1213. NTAPI
  1214. RtlGetOwnerSecurityDescriptor(
  1215. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1216. OUT PSID *Owner,
  1217. OUT PBOOLEAN OwnerDefaulted);
  1218. NTSYSAPI
  1219. ULONG
  1220. NTAPI
  1221. RtlNtStatusToDosError(
  1222. IN NTSTATUS Status);
  1223. NTSYSAPI
  1224. NTSTATUS
  1225. NTAPI
  1226. RtlCustomCPToUnicodeN(
  1227. IN PCPTABLEINFO CustomCP,
  1228. OUT PWCH UnicodeString,
  1229. IN ULONG MaxBytesInUnicodeString,
  1230. OUT PULONG BytesInUnicodeString OPTIONAL,
  1231. IN PCH CustomCPString,
  1232. IN ULONG BytesInCustomCPString);
  1233. NTSYSAPI
  1234. NTSTATUS
  1235. NTAPI
  1236. RtlUnicodeToCustomCPN(
  1237. IN PCPTABLEINFO CustomCP,
  1238. OUT PCH CustomCPString,
  1239. IN ULONG MaxBytesInCustomCPString,
  1240. OUT PULONG BytesInCustomCPString OPTIONAL,
  1241. IN PWCH UnicodeString,
  1242. IN ULONG BytesInUnicodeString);
  1243. NTSYSAPI
  1244. NTSTATUS
  1245. NTAPI
  1246. RtlUpcaseUnicodeToCustomCPN(
  1247. IN PCPTABLEINFO CustomCP,
  1248. OUT PCH CustomCPString,
  1249. IN ULONG MaxBytesInCustomCPString,
  1250. OUT PULONG BytesInCustomCPString OPTIONAL,
  1251. IN PWCH UnicodeString,
  1252. IN ULONG BytesInUnicodeString);
  1253. NTSYSAPI
  1254. VOID
  1255. NTAPI
  1256. RtlInitCodePageTable(
  1257. IN PUSHORT TableBase,
  1258. IN OUT PCPTABLEINFO CodePageTable);
  1259. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  1260. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1261. NTSYSAPI
  1262. PVOID
  1263. NTAPI
  1264. RtlCreateHeap(
  1265. IN ULONG Flags,
  1266. IN PVOID HeapBase OPTIONAL,
  1267. IN SIZE_T ReserveSize OPTIONAL,
  1268. IN SIZE_T CommitSize OPTIONAL,
  1269. IN PVOID Lock OPTIONAL,
  1270. IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL);
  1271. NTSYSAPI
  1272. PVOID
  1273. NTAPI
  1274. RtlDestroyHeap(
  1275. IN PVOID HeapHandle);
  1276. NTSYSAPI
  1277. USHORT
  1278. NTAPI
  1279. RtlCaptureStackBackTrace(
  1280. IN ULONG FramesToSkip,
  1281. IN ULONG FramesToCapture,
  1282. OUT PVOID *BackTrace,
  1283. OUT PULONG BackTraceHash OPTIONAL);
  1284. NTSYSAPI
  1285. ULONG
  1286. NTAPI
  1287. RtlRandomEx(
  1288. IN OUT PULONG Seed);
  1289. NTSYSAPI
  1290. NTSTATUS
  1291. NTAPI
  1292. RtlInitUnicodeStringEx(
  1293. OUT PUNICODE_STRING DestinationString,
  1294. IN PCWSTR SourceString OPTIONAL);
  1295. NTSYSAPI
  1296. NTSTATUS
  1297. NTAPI
  1298. RtlValidateUnicodeString(
  1299. IN ULONG Flags,
  1300. IN PCUNICODE_STRING String);
  1301. NTSYSAPI
  1302. NTSTATUS
  1303. NTAPI
  1304. RtlDuplicateUnicodeString(
  1305. IN ULONG Flags,
  1306. IN PCUNICODE_STRING SourceString,
  1307. OUT PUNICODE_STRING DestinationString);
  1308. NTSYSAPI
  1309. NTSTATUS
  1310. NTAPI
  1311. RtlGetCompressionWorkSpaceSize(
  1312. IN USHORT CompressionFormatAndEngine,
  1313. OUT PULONG CompressBufferWorkSpaceSize,
  1314. OUT PULONG CompressFragmentWorkSpaceSize);
  1315. NTSYSAPI
  1316. NTSTATUS
  1317. NTAPI
  1318. RtlCompressBuffer(
  1319. IN USHORT CompressionFormatAndEngine,
  1320. IN PUCHAR UncompressedBuffer,
  1321. IN ULONG UncompressedBufferSize,
  1322. OUT PUCHAR CompressedBuffer,
  1323. IN ULONG CompressedBufferSize,
  1324. IN ULONG UncompressedChunkSize,
  1325. OUT PULONG FinalCompressedSize,
  1326. IN PVOID WorkSpace);
  1327. NTSYSAPI
  1328. NTSTATUS
  1329. NTAPI
  1330. RtlDecompressBuffer(
  1331. IN USHORT CompressionFormat,
  1332. OUT PUCHAR UncompressedBuffer,
  1333. IN ULONG UncompressedBufferSize,
  1334. IN PUCHAR CompressedBuffer,
  1335. IN ULONG CompressedBufferSize,
  1336. OUT PULONG FinalUncompressedSize);
  1337. NTSYSAPI
  1338. NTSTATUS
  1339. NTAPI
  1340. RtlDecompressFragment(
  1341. IN USHORT CompressionFormat,
  1342. OUT PUCHAR UncompressedFragment,
  1343. IN ULONG UncompressedFragmentSize,
  1344. IN PUCHAR CompressedBuffer,
  1345. IN ULONG CompressedBufferSize,
  1346. IN ULONG FragmentOffset,
  1347. OUT PULONG FinalUncompressedSize,
  1348. IN PVOID WorkSpace);
  1349. NTSYSAPI
  1350. NTSTATUS
  1351. NTAPI
  1352. RtlDescribeChunk(
  1353. IN USHORT CompressionFormat,
  1354. IN OUT PUCHAR *CompressedBuffer,
  1355. IN PUCHAR EndOfCompressedBufferPlus1,
  1356. OUT PUCHAR *ChunkBuffer,
  1357. OUT PULONG ChunkSize);
  1358. NTSYSAPI
  1359. NTSTATUS
  1360. NTAPI
  1361. RtlReserveChunk(
  1362. IN USHORT CompressionFormat,
  1363. IN OUT PUCHAR *CompressedBuffer,
  1364. IN PUCHAR EndOfCompressedBufferPlus1,
  1365. OUT PUCHAR *ChunkBuffer,
  1366. IN ULONG ChunkSize);
  1367. NTSYSAPI
  1368. NTSTATUS
  1369. NTAPI
  1370. RtlDecompressChunks(
  1371. OUT PUCHAR UncompressedBuffer,
  1372. IN ULONG UncompressedBufferSize,
  1373. IN PUCHAR CompressedBuffer,
  1374. IN ULONG CompressedBufferSize,
  1375. IN PUCHAR CompressedTail,
  1376. IN ULONG CompressedTailSize,
  1377. IN PCOMPRESSED_DATA_INFO CompressedDataInfo);
  1378. NTSYSAPI
  1379. NTSTATUS
  1380. NTAPI
  1381. RtlCompressChunks(
  1382. IN PUCHAR UncompressedBuffer,
  1383. IN ULONG UncompressedBufferSize,
  1384. OUT PUCHAR CompressedBuffer,
  1385. IN ULONG CompressedBufferSize,
  1386. IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo,
  1387. IN ULONG CompressedDataInfoLength,
  1388. IN PVOID WorkSpace);
  1389. NTSYSAPI
  1390. PSID_IDENTIFIER_AUTHORITY
  1391. NTAPI
  1392. RtlIdentifierAuthoritySid(
  1393. IN PSID Sid);
  1394. NTSYSAPI
  1395. PUCHAR
  1396. NTAPI
  1397. RtlSubAuthorityCountSid(
  1398. IN PSID Sid);
  1399. NTSYSAPI
  1400. ULONG
  1401. NTAPI
  1402. RtlNtStatusToDosErrorNoTeb(
  1403. IN NTSTATUS Status);
  1404. NTSYSAPI
  1405. NTSTATUS
  1406. NTAPI
  1407. RtlCreateSystemVolumeInformationFolder(
  1408. IN PCUNICODE_STRING VolumeRootPath);
  1409. #if defined(_M_AMD64)
  1410. FORCEINLINE
  1411. VOID
  1412. RtlFillMemoryUlong (
  1413. OUT PVOID Destination,
  1414. IN SIZE_T Length,
  1415. IN ULONG Pattern)
  1416. {
  1417. PULONG Address = (PULONG)Destination;
  1418. if ((Length /= 4) != 0) {
  1419. if (((ULONG64)Address & 4) != 0) {
  1420. *Address = Pattern;
  1421. if ((Length -= 1) == 0) {
  1422. return;
  1423. }
  1424. Address += 1;
  1425. }
  1426. __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2);
  1427. if ((Length & 1) != 0) Address[Length - 1] = Pattern;
  1428. }
  1429. return;
  1430. }
  1431. #define RtlFillMemoryUlonglong(Destination, Length, Pattern) \
  1432. __stosq((PULONG64)(Destination), Pattern, (Length) / 8)
  1433. #else
  1434. NTSYSAPI
  1435. VOID
  1436. NTAPI
  1437. RtlFillMemoryUlong(
  1438. OUT PVOID Destination,
  1439. IN SIZE_T Length,
  1440. IN ULONG Pattern);
  1441. NTSYSAPI
  1442. VOID
  1443. NTAPI
  1444. RtlFillMemoryUlonglong(
  1445. OUT PVOID Destination,
  1446. IN SIZE_T Length,
  1447. IN ULONGLONG Pattern);
  1448. #endif /* defined(_M_AMD64) */
  1449. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  1450. #if (NTDDI_VERSION >= NTDDI_WS03)
  1451. NTSYSAPI
  1452. NTSTATUS
  1453. NTAPI
  1454. RtlInitAnsiStringEx(
  1455. OUT PANSI_STRING DestinationString,
  1456. IN PCSZ SourceString OPTIONAL);
  1457. #endif
  1458. #if (NTDDI_VERSION >= NTDDI_WS03SP1)
  1459. NTSYSAPI
  1460. NTSTATUS
  1461. NTAPI
  1462. RtlGetSaclSecurityDescriptor(
  1463. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1464. OUT PBOOLEAN SaclPresent,
  1465. OUT PACL *Sacl,
  1466. OUT PBOOLEAN SaclDefaulted);
  1467. NTSYSAPI
  1468. NTSTATUS
  1469. NTAPI
  1470. RtlSetGroupSecurityDescriptor(
  1471. IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  1472. IN PSID Group OPTIONAL,
  1473. IN BOOLEAN GroupDefaulted OPTIONAL);
  1474. NTSYSAPI
  1475. NTSTATUS
  1476. NTAPI
  1477. RtlGetGroupSecurityDescriptor(
  1478. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1479. OUT PSID *Group,
  1480. OUT PBOOLEAN GroupDefaulted);
  1481. NTSYSAPI
  1482. NTSTATUS
  1483. NTAPI
  1484. RtlAbsoluteToSelfRelativeSD(
  1485. IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
  1486. OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor OPTIONAL,
  1487. IN OUT PULONG BufferLength);
  1488. NTSYSAPI
  1489. NTSTATUS
  1490. NTAPI
  1491. RtlSelfRelativeToAbsoluteSD(
  1492. IN PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
  1493. OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor OPTIONAL,
  1494. IN OUT PULONG AbsoluteSecurityDescriptorSize,
  1495. OUT PACL Dacl OPTIONAL,
  1496. IN OUT PULONG DaclSize,
  1497. OUT PACL Sacl OPTIONAL,
  1498. IN OUT PULONG SaclSize,
  1499. OUT PSID Owner OPTIONAL,
  1500. IN OUT PULONG OwnerSize,
  1501. OUT PSID PrimaryGroup OPTIONAL,
  1502. IN OUT PULONG PrimaryGroupSize);
  1503. #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
  1504. #if (NTDDI_VERSION >= NTDDI_VISTA)
  1505. NTSYSAPI
  1506. NTSTATUS
  1507. NTAPI
  1508. RtlNormalizeString(
  1509. IN ULONG NormForm,
  1510. IN PCWSTR SourceString,
  1511. IN LONG SourceStringLength,
  1512. OUT PWSTR DestinationString,
  1513. IN OUT PLONG DestinationStringLength);
  1514. NTSYSAPI
  1515. NTSTATUS
  1516. NTAPI
  1517. RtlIsNormalizedString(
  1518. IN ULONG NormForm,
  1519. IN PCWSTR SourceString,
  1520. IN LONG SourceStringLength,
  1521. OUT PBOOLEAN Normalized);
  1522. NTSYSAPI
  1523. NTSTATUS
  1524. NTAPI
  1525. RtlIdnToAscii(
  1526. IN ULONG Flags,
  1527. IN PCWSTR SourceString,
  1528. IN LONG SourceStringLength,
  1529. OUT PWSTR DestinationString,
  1530. IN OUT PLONG DestinationStringLength);
  1531. NTSYSAPI
  1532. NTSTATUS
  1533. NTAPI
  1534. RtlIdnToUnicode(
  1535. IN ULONG Flags,
  1536. IN PCWSTR SourceString,
  1537. IN LONG SourceStringLength,
  1538. OUT PWSTR DestinationString,
  1539. IN OUT PLONG DestinationStringLength);
  1540. NTSYSAPI
  1541. NTSTATUS
  1542. NTAPI
  1543. RtlIdnToNameprepUnicode(
  1544. IN ULONG Flags,
  1545. IN PCWSTR SourceString,
  1546. IN LONG SourceStringLength,
  1547. OUT PWSTR DestinationString,
  1548. IN OUT PLONG DestinationStringLength);
  1549. NTSYSAPI
  1550. NTSTATUS
  1551. NTAPI
  1552. RtlCreateServiceSid(
  1553. IN PUNICODE_STRING ServiceName,
  1554. OUT PSID ServiceSid,
  1555. IN OUT PULONG ServiceSidLength);
  1556. NTSYSAPI
  1557. LONG
  1558. NTAPI
  1559. RtlCompareAltitudes(
  1560. IN PCUNICODE_STRING Altitude1,
  1561. IN PCUNICODE_STRING Altitude2);
  1562. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  1563. #if (NTDDI_VERSION >= NTDDI_WIN7)
  1564. NTSYSAPI
  1565. NTSTATUS
  1566. NTAPI
  1567. RtlUnicodeToUTF8N(
  1568. OUT PCHAR UTF8StringDestination,
  1569. IN ULONG UTF8StringMaxByteCount,
  1570. OUT PULONG UTF8StringActualByteCount,
  1571. IN PCWCH UnicodeStringSource,
  1572. IN ULONG UnicodeStringByteCount);
  1573. NTSYSAPI
  1574. NTSTATUS
  1575. NTAPI
  1576. RtlUTF8ToUnicodeN(
  1577. OUT PWSTR UnicodeStringDestination,
  1578. IN ULONG UnicodeStringMaxByteCount,
  1579. OUT PULONG UnicodeStringActualByteCount,
  1580. IN PCCH UTF8StringSource,
  1581. IN ULONG UTF8StringByteCount);
  1582. NTSYSAPI
  1583. NTSTATUS
  1584. NTAPI
  1585. RtlReplaceSidInSd(
  1586. IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  1587. IN PSID OldSid,
  1588. IN PSID NewSid,
  1589. OUT ULONG *NumChanges);
  1590. NTSYSAPI
  1591. NTSTATUS
  1592. NTAPI
  1593. RtlCreateVirtualAccountSid(
  1594. IN PCUNICODE_STRING Name,
  1595. IN ULONG BaseSubAuthority,
  1596. OUT PSID Sid,
  1597. IN OUT PULONG SidLength);
  1598. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  1599. #if defined(_AMD64_) || defined(_IA64_)
  1600. #endif /* defined(_AMD64_) || defined(_IA64_) */
  1601. #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1
  1602. #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2
  1603. #define RtlUnicodeStringToOemSize(STRING) (NLS_MB_OEM_CODE_PAGE_TAG ? \
  1604. RtlxUnicodeStringToOemSize(STRING) : \
  1605. ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \
  1606. )
  1607. #define RtlOemStringToUnicodeSize(STRING) ( \
  1608. NLS_MB_OEM_CODE_PAGE_TAG ? \
  1609. RtlxOemStringToUnicodeSize(STRING) : \
  1610. ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \
  1611. )
  1612. #define RtlOemStringToCountedUnicodeSize(STRING) ( \
  1613. (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \
  1614. )
  1615. #define RtlOffsetToPointer(B,O) ((PCHAR)(((PCHAR)(B)) + ((ULONG_PTR)(O))))
  1616. #define RtlPointerToOffset(B,P) ((ULONG)(((PCHAR)(P)) - ((PCHAR)(B))))
  1617. typedef enum _OBJECT_INFORMATION_CLASS {
  1618. ObjectBasicInformation = 0,
  1619. ObjectNameInformation = 1, /* FIXME, not in WDK */
  1620. ObjectTypeInformation = 2,
  1621. ObjectTypesInformation = 3, /* FIXME, not in WDK */
  1622. ObjectHandleFlagInformation = 4, /* FIXME, not in WDK */
  1623. ObjectSessionInformation = 5, /* FIXME, not in WDK */
  1624. MaxObjectInfoClass /* FIXME, not in WDK */
  1625. } OBJECT_INFORMATION_CLASS;
  1626. NTSYSCALLAPI
  1627. NTSTATUS
  1628. NTAPI
  1629. NtQueryObject(
  1630. IN HANDLE Handle OPTIONAL,
  1631. IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
  1632. OUT PVOID ObjectInformation OPTIONAL,
  1633. IN ULONG ObjectInformationLength,
  1634. OUT PULONG ReturnLength OPTIONAL);
  1635. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  1636. NTSYSCALLAPI
  1637. NTSTATUS
  1638. NTAPI
  1639. NtOpenThreadToken(
  1640. IN HANDLE ThreadHandle,
  1641. IN ACCESS_MASK DesiredAccess,
  1642. IN BOOLEAN OpenAsSelf,
  1643. OUT PHANDLE TokenHandle);
  1644. NTSYSCALLAPI
  1645. NTSTATUS
  1646. NTAPI
  1647. NtOpenProcessToken(
  1648. IN HANDLE ProcessHandle,
  1649. IN ACCESS_MASK DesiredAccess,
  1650. OUT PHANDLE TokenHandle);
  1651. NTSYSCALLAPI
  1652. NTSTATUS
  1653. NTAPI
  1654. NtQueryInformationToken(
  1655. IN HANDLE TokenHandle,
  1656. IN TOKEN_INFORMATION_CLASS TokenInformationClass,
  1657. OUT PVOID TokenInformation OPTIONAL,
  1658. IN ULONG TokenInformationLength,
  1659. OUT PULONG ReturnLength);
  1660. NTSYSCALLAPI
  1661. NTSTATUS
  1662. NTAPI
  1663. NtAdjustPrivilegesToken(
  1664. IN HANDLE TokenHandle,
  1665. IN BOOLEAN DisableAllPrivileges,
  1666. IN PTOKEN_PRIVILEGES NewState OPTIONAL,
  1667. IN ULONG BufferLength,
  1668. OUT PTOKEN_PRIVILEGES PreviousState,
  1669. OUT PULONG ReturnLength OPTIONAL);
  1670. NTSYSCALLAPI
  1671. NTSTATUS
  1672. NTAPI
  1673. NtCreateFile(
  1674. OUT PHANDLE FileHandle,
  1675. IN ACCESS_MASK DesiredAccess,
  1676. IN POBJECT_ATTRIBUTES ObjectAttributes,
  1677. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1678. IN PLARGE_INTEGER AllocationSize OPTIONAL,
  1679. IN ULONG FileAttributes,
  1680. IN ULONG ShareAccess,
  1681. IN ULONG CreateDisposition,
  1682. IN ULONG CreateOptions,
  1683. IN PVOID EaBuffer,
  1684. IN ULONG EaLength);
  1685. NTSYSCALLAPI
  1686. NTSTATUS
  1687. NTAPI
  1688. NtDeviceIoControlFile(
  1689. IN HANDLE FileHandle,
  1690. IN HANDLE Event OPTIONAL,
  1691. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1692. IN PVOID ApcContext OPTIONAL,
  1693. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1694. IN ULONG IoControlCode,
  1695. IN PVOID InputBuffer OPTIONAL,
  1696. IN ULONG InputBufferLength,
  1697. OUT PVOID OutputBuffer OPTIONAL,
  1698. IN ULONG OutputBufferLength);
  1699. NTSYSCALLAPI
  1700. NTSTATUS
  1701. NTAPI
  1702. NtFsControlFile(
  1703. IN HANDLE FileHandle,
  1704. IN HANDLE Event OPTIONAL,
  1705. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1706. IN PVOID ApcContext OPTIONAL,
  1707. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1708. IN ULONG FsControlCode,
  1709. IN PVOID InputBuffer OPTIONAL,
  1710. IN ULONG InputBufferLength,
  1711. OUT PVOID OutputBuffer OPTIONAL,
  1712. IN ULONG OutputBufferLength);
  1713. NTSYSCALLAPI
  1714. NTSTATUS
  1715. NTAPI
  1716. NtLockFile(
  1717. IN HANDLE FileHandle,
  1718. IN HANDLE Event OPTIONAL,
  1719. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1720. IN PVOID ApcContext OPTIONAL,
  1721. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1722. IN PLARGE_INTEGER ByteOffset,
  1723. IN PLARGE_INTEGER Length,
  1724. IN ULONG Key,
  1725. IN BOOLEAN FailImmediately,
  1726. IN BOOLEAN ExclusiveLock);
  1727. NTSYSCALLAPI
  1728. NTSTATUS
  1729. NTAPI
  1730. NtOpenFile(
  1731. OUT PHANDLE FileHandle,
  1732. IN ACCESS_MASK DesiredAccess,
  1733. IN POBJECT_ATTRIBUTES ObjectAttributes,
  1734. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1735. IN ULONG ShareAccess,
  1736. IN ULONG OpenOptions);
  1737. NTSYSCALLAPI
  1738. NTSTATUS
  1739. NTAPI
  1740. NtQueryDirectoryFile(
  1741. IN HANDLE FileHandle,
  1742. IN HANDLE Event OPTIONAL,
  1743. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1744. IN PVOID ApcContext OPTIONAL,
  1745. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1746. OUT PVOID FileInformation,
  1747. IN ULONG Length,
  1748. IN FILE_INFORMATION_CLASS FileInformationClass,
  1749. IN BOOLEAN ReturnSingleEntry,
  1750. IN PUNICODE_STRING FileName OPTIONAL,
  1751. IN BOOLEAN RestartScan);
  1752. NTSYSCALLAPI
  1753. NTSTATUS
  1754. NTAPI
  1755. NtQueryInformationFile(
  1756. IN HANDLE FileHandle,
  1757. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1758. OUT PVOID FileInformation,
  1759. IN ULONG Length,
  1760. IN FILE_INFORMATION_CLASS FileInformationClass);
  1761. NTSYSCALLAPI
  1762. NTSTATUS
  1763. NTAPI
  1764. NtQueryQuotaInformationFile(
  1765. IN HANDLE FileHandle,
  1766. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1767. OUT PVOID Buffer,
  1768. IN ULONG Length,
  1769. IN BOOLEAN ReturnSingleEntry,
  1770. IN PVOID SidList,
  1771. IN ULONG SidListLength,
  1772. IN PSID StartSid OPTIONAL,
  1773. IN BOOLEAN RestartScan);
  1774. NTSYSCALLAPI
  1775. NTSTATUS
  1776. NTAPI
  1777. NtQueryVolumeInformationFile(
  1778. IN HANDLE FileHandle,
  1779. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1780. OUT PVOID FsInformation,
  1781. IN ULONG Length,
  1782. IN FS_INFORMATION_CLASS FsInformationClass);
  1783. NTSYSCALLAPI
  1784. NTSTATUS
  1785. NTAPI
  1786. NtReadFile(
  1787. IN HANDLE FileHandle,
  1788. IN HANDLE Event OPTIONAL,
  1789. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1790. IN PVOID ApcContext OPTIONAL,
  1791. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1792. OUT PVOID Buffer,
  1793. IN ULONG Length,
  1794. IN PLARGE_INTEGER ByteOffset OPTIONAL,
  1795. IN PULONG Key OPTIONAL);
  1796. NTSYSCALLAPI
  1797. NTSTATUS
  1798. NTAPI
  1799. NtSetInformationFile(
  1800. IN HANDLE FileHandle,
  1801. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1802. IN PVOID FileInformation,
  1803. IN ULONG Length,
  1804. IN FILE_INFORMATION_CLASS FileInformationClass);
  1805. NTSYSCALLAPI
  1806. NTSTATUS
  1807. NTAPI
  1808. NtSetQuotaInformationFile(
  1809. IN HANDLE FileHandle,
  1810. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1811. IN PVOID Buffer,
  1812. IN ULONG Length);
  1813. NTSYSCALLAPI
  1814. NTSTATUS
  1815. NTAPI
  1816. NtSetVolumeInformationFile(
  1817. IN HANDLE FileHandle,
  1818. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1819. IN PVOID FsInformation,
  1820. IN ULONG Length,
  1821. IN FS_INFORMATION_CLASS FsInformationClass);
  1822. NTSYSCALLAPI
  1823. NTSTATUS
  1824. NTAPI
  1825. NtWriteFile(
  1826. IN HANDLE FileHandle,
  1827. IN HANDLE Event OPTIONAL,
  1828. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  1829. IN PVOID ApcContext OPTIONAL,
  1830. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1831. IN PVOID Buffer,
  1832. IN ULONG Length,
  1833. IN PLARGE_INTEGER ByteOffset OPTIONAL,
  1834. IN PULONG Key OPTIONAL);
  1835. NTSYSCALLAPI
  1836. NTSTATUS
  1837. NTAPI
  1838. NtUnlockFile(
  1839. IN HANDLE FileHandle,
  1840. OUT PIO_STATUS_BLOCK IoStatusBlock,
  1841. IN PLARGE_INTEGER ByteOffset,
  1842. IN PLARGE_INTEGER Length,
  1843. IN ULONG Key);
  1844. NTSYSCALLAPI
  1845. NTSTATUS
  1846. NTAPI
  1847. NtSetSecurityObject(
  1848. IN HANDLE Handle,
  1849. IN SECURITY_INFORMATION SecurityInformation,
  1850. IN PSECURITY_DESCRIPTOR SecurityDescriptor);
  1851. NTSYSCALLAPI
  1852. NTSTATUS
  1853. NTAPI
  1854. NtQuerySecurityObject(
  1855. IN HANDLE Handle,
  1856. IN SECURITY_INFORMATION SecurityInformation,
  1857. OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  1858. IN ULONG Length,
  1859. OUT PULONG LengthNeeded);
  1860. NTSYSCALLAPI
  1861. NTSTATUS
  1862. NTAPI
  1863. NtClose(
  1864. IN HANDLE Handle);
  1865. NTSYSCALLAPI
  1866. NTSTATUS
  1867. NTAPI
  1868. NtAllocateVirtualMemory(
  1869. IN HANDLE ProcessHandle,
  1870. IN OUT PVOID *BaseAddress,
  1871. IN ULONG_PTR ZeroBits,
  1872. IN OUT PSIZE_T RegionSize,
  1873. IN ULONG AllocationType,
  1874. IN ULONG Protect);
  1875. NTSYSCALLAPI
  1876. NTSTATUS
  1877. NTAPI
  1878. NtFreeVirtualMemory(
  1879. IN HANDLE ProcessHandle,
  1880. IN OUT PVOID *BaseAddress,
  1881. IN OUT PSIZE_T RegionSize,
  1882. IN ULONG FreeType);
  1883. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  1884. #if (NTDDI_VERSION >= NTDDI_WINXP)
  1885. NTSYSCALLAPI
  1886. NTSTATUS
  1887. NTAPI
  1888. NtOpenThreadTokenEx(
  1889. IN HANDLE ThreadHandle,
  1890. IN ACCESS_MASK DesiredAccess,
  1891. IN BOOLEAN OpenAsSelf,
  1892. IN ULONG HandleAttributes,
  1893. OUT PHANDLE TokenHandle);
  1894. NTSYSCALLAPI
  1895. NTSTATUS
  1896. NTAPI
  1897. NtOpenProcessTokenEx(
  1898. IN HANDLE ProcessHandle,
  1899. IN ACCESS_MASK DesiredAccess,
  1900. IN ULONG HandleAttributes,
  1901. OUT PHANDLE TokenHandle);
  1902. NTSYSAPI
  1903. NTSTATUS
  1904. NTAPI
  1905. NtOpenJobObjectToken(
  1906. IN HANDLE JobHandle,
  1907. IN ACCESS_MASK DesiredAccess,
  1908. OUT PHANDLE TokenHandle);
  1909. NTSYSCALLAPI
  1910. NTSTATUS
  1911. NTAPI
  1912. NtDuplicateToken(
  1913. IN HANDLE ExistingTokenHandle,
  1914. IN ACCESS_MASK DesiredAccess,
  1915. IN POBJECT_ATTRIBUTES ObjectAttributes,
  1916. IN BOOLEAN EffectiveOnly,
  1917. IN TOKEN_TYPE TokenType,
  1918. OUT PHANDLE NewTokenHandle);
  1919. NTSYSCALLAPI
  1920. NTSTATUS
  1921. NTAPI
  1922. NtFilterToken(
  1923. IN HANDLE ExistingTokenHandle,
  1924. IN ULONG Flags,
  1925. IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
  1926. IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
  1927. IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
  1928. OUT PHANDLE NewTokenHandle);
  1929. NTSYSCALLAPI
  1930. NTSTATUS
  1931. NTAPI
  1932. NtImpersonateAnonymousToken(
  1933. IN HANDLE ThreadHandle);
  1934. NTSYSCALLAPI
  1935. NTSTATUS
  1936. NTAPI
  1937. NtSetInformationToken(
  1938. IN HANDLE TokenHandle,
  1939. IN TOKEN_INFORMATION_CLASS TokenInformationClass,
  1940. IN PVOID TokenInformation,
  1941. IN ULONG TokenInformationLength);
  1942. NTSYSCALLAPI
  1943. NTSTATUS
  1944. NTAPI
  1945. NtAdjustGroupsToken(
  1946. IN HANDLE TokenHandle,
  1947. IN BOOLEAN ResetToDefault,
  1948. IN PTOKEN_GROUPS NewState OPTIONAL,
  1949. IN ULONG BufferLength OPTIONAL,
  1950. OUT PTOKEN_GROUPS PreviousState,
  1951. OUT PULONG ReturnLength);
  1952. NTSYSCALLAPI
  1953. NTSTATUS
  1954. NTAPI
  1955. NtPrivilegeCheck(
  1956. IN HANDLE ClientToken,
  1957. IN OUT PPRIVILEGE_SET RequiredPrivileges,
  1958. OUT PBOOLEAN Result);
  1959. NTSYSCALLAPI
  1960. NTSTATUS
  1961. NTAPI
  1962. NtAccessCheckAndAuditAlarm(
  1963. IN PUNICODE_STRING SubsystemName,
  1964. IN PVOID HandleId OPTIONAL,
  1965. IN PUNICODE_STRING ObjectTypeName,
  1966. IN PUNICODE_STRING ObjectName,
  1967. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1968. IN ACCESS_MASK DesiredAccess,
  1969. IN PGENERIC_MAPPING GenericMapping,
  1970. IN BOOLEAN ObjectCreation,
  1971. OUT PACCESS_MASK GrantedAccess,
  1972. OUT PNTSTATUS AccessStatus,
  1973. OUT PBOOLEAN GenerateOnClose);
  1974. NTSYSCALLAPI
  1975. NTSTATUS
  1976. NTAPI
  1977. NtAccessCheckByTypeAndAuditAlarm(
  1978. IN PUNICODE_STRING SubsystemName,
  1979. IN PVOID HandleId,
  1980. IN PUNICODE_STRING ObjectTypeName,
  1981. IN PUNICODE_STRING ObjectName,
  1982. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  1983. IN PSID PrincipalSelfSid OPTIONAL,
  1984. IN ACCESS_MASK DesiredAccess,
  1985. IN AUDIT_EVENT_TYPE AuditType,
  1986. IN ULONG Flags,
  1987. IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
  1988. IN ULONG ObjectTypeLength,
  1989. IN PGENERIC_MAPPING GenericMapping,
  1990. IN BOOLEAN ObjectCreation,
  1991. OUT PACCESS_MASK GrantedAccess,
  1992. OUT PNTSTATUS AccessStatus,
  1993. OUT PBOOLEAN GenerateOnClose);
  1994. NTSYSCALLAPI
  1995. NTSTATUS
  1996. NTAPI
  1997. NtAccessCheckByTypeResultListAndAuditAlarm(
  1998. IN PUNICODE_STRING SubsystemName,
  1999. IN PVOID HandleId OPTIONAL,
  2000. IN PUNICODE_STRING ObjectTypeName,
  2001. IN PUNICODE_STRING ObjectName,
  2002. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  2003. IN PSID PrincipalSelfSid OPTIONAL,
  2004. IN ACCESS_MASK DesiredAccess,
  2005. IN AUDIT_EVENT_TYPE AuditType,
  2006. IN ULONG Flags,
  2007. IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
  2008. IN ULONG ObjectTypeLength,
  2009. IN PGENERIC_MAPPING GenericMapping,
  2010. IN BOOLEAN ObjectCreation,
  2011. OUT PACCESS_MASK GrantedAccess,
  2012. OUT PNTSTATUS AccessStatus,
  2013. OUT PBOOLEAN GenerateOnClose);
  2014. NTSTATUS
  2015. NTAPI
  2016. NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
  2017. IN PUNICODE_STRING SubsystemName,
  2018. IN PVOID HandleId OPTIONAL,
  2019. IN HANDLE ClientToken,
  2020. IN PUNICODE_STRING ObjectTypeName,
  2021. IN PUNICODE_STRING ObjectName,
  2022. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  2023. IN PSID PrincipalSelfSid OPTIONAL,
  2024. IN ACCESS_MASK DesiredAccess,
  2025. IN AUDIT_EVENT_TYPE AuditType,
  2026. IN ULONG Flags,
  2027. IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
  2028. IN ULONG ObjectTypeLength,
  2029. IN PGENERIC_MAPPING GenericMapping,
  2030. IN BOOLEAN ObjectCreation,
  2031. OUT PACCESS_MASK GrantedAccess,
  2032. OUT PNTSTATUS AccessStatus,
  2033. OUT PBOOLEAN GenerateOnClose);
  2034. NTSYSCALLAPI
  2035. NTSTATUS
  2036. NTAPI
  2037. NtOpenObjectAuditAlarm(
  2038. IN PUNICODE_STRING SubsystemName,
  2039. IN PVOID HandleId OPTIONAL,
  2040. IN PUNICODE_STRING ObjectTypeName,
  2041. IN PUNICODE_STRING ObjectName,
  2042. IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL,
  2043. IN HANDLE ClientToken,
  2044. IN ACCESS_MASK DesiredAccess,
  2045. IN ACCESS_MASK GrantedAccess,
  2046. IN PPRIVILEGE_SET Privileges OPTIONAL,
  2047. IN BOOLEAN ObjectCreation,
  2048. IN BOOLEAN AccessGranted,
  2049. OUT PBOOLEAN GenerateOnClose);
  2050. NTSYSCALLAPI
  2051. NTSTATUS
  2052. NTAPI
  2053. NtPrivilegeObjectAuditAlarm(
  2054. IN PUNICODE_STRING SubsystemName,
  2055. IN PVOID HandleId OPTIONAL,
  2056. IN HANDLE ClientToken,
  2057. IN ACCESS_MASK DesiredAccess,
  2058. IN PPRIVILEGE_SET Privileges,
  2059. IN BOOLEAN AccessGranted);
  2060. NTSYSCALLAPI
  2061. NTSTATUS
  2062. NTAPI
  2063. NtCloseObjectAuditAlarm(
  2064. IN PUNICODE_STRING SubsystemName,
  2065. IN PVOID HandleId OPTIONAL,
  2066. IN BOOLEAN GenerateOnClose);
  2067. NTSYSCALLAPI
  2068. NTSTATUS
  2069. NTAPI
  2070. NtDeleteObjectAuditAlarm(
  2071. IN PUNICODE_STRING SubsystemName,
  2072. IN PVOID HandleId OPTIONAL,
  2073. IN BOOLEAN GenerateOnClose);
  2074. NTSYSCALLAPI
  2075. NTSTATUS
  2076. NTAPI
  2077. NtPrivilegedServiceAuditAlarm(
  2078. IN PUNICODE_STRING SubsystemName,
  2079. IN PUNICODE_STRING ServiceName,
  2080. IN HANDLE ClientToken,
  2081. IN PPRIVILEGE_SET Privileges,
  2082. IN BOOLEAN AccessGranted);
  2083. NTSYSCALLAPI
  2084. NTSTATUS
  2085. NTAPI
  2086. NtSetInformationThread(
  2087. IN HANDLE ThreadHandle,
  2088. IN THREADINFOCLASS ThreadInformationClass,
  2089. IN PVOID ThreadInformation,
  2090. IN ULONG ThreadInformationLength);
  2091. NTSYSCALLAPI
  2092. NTSTATUS
  2093. NTAPI
  2094. NtCreateSection(
  2095. OUT PHANDLE SectionHandle,
  2096. IN ACCESS_MASK DesiredAccess,
  2097. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  2098. IN PLARGE_INTEGER MaximumSize OPTIONAL,
  2099. IN ULONG SectionPageProtection,
  2100. IN ULONG AllocationAttributes,
  2101. IN HANDLE FileHandle OPTIONAL);
  2102. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  2103. #define COMPRESSION_FORMAT_NONE (0x0000)
  2104. #define COMPRESSION_FORMAT_DEFAULT (0x0001)
  2105. #define COMPRESSION_FORMAT_LZNT1 (0x0002)
  2106. #define COMPRESSION_ENGINE_STANDARD (0x0000)
  2107. #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
  2108. #define COMPRESSION_ENGINE_HIBER (0x0200)
  2109. #define MAX_UNICODE_STACK_BUFFER_LENGTH 256
  2110. #define METHOD_FROM_CTL_CODE(ctrlCode) ((ULONG)(ctrlCode & 3))
  2111. #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
  2112. #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
  2113. typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE;
  2114. typedef enum _SECURITY_LOGON_TYPE {
  2115. UndefinedLogonType = 0,
  2116. Interactive = 2,
  2117. Network,
  2118. Batch,
  2119. Service,
  2120. Proxy,
  2121. Unlock,
  2122. NetworkCleartext,
  2123. NewCredentials,
  2124. #if (_WIN32_WINNT >= 0x0501)
  2125. RemoteInteractive,
  2126. CachedInteractive,
  2127. #endif
  2128. #if (_WIN32_WINNT >= 0x0502)
  2129. CachedRemoteInteractive,
  2130. CachedUnlock
  2131. #endif
  2132. } SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE;
  2133. #ifndef _NTLSA_AUDIT_
  2134. #define _NTLSA_AUDIT_
  2135. #ifndef GUID_DEFINED
  2136. #include <guiddef.h>
  2137. #endif
  2138. #endif /* _NTLSA_AUDIT_ */
  2139. NTSTATUS
  2140. NTAPI
  2141. LsaRegisterLogonProcess(
  2142. IN PLSA_STRING LogonProcessName,
  2143. OUT PHANDLE LsaHandle,
  2144. OUT PLSA_OPERATIONAL_MODE SecurityMode);
  2145. NTSTATUS
  2146. NTAPI
  2147. LsaLogonUser(
  2148. IN HANDLE LsaHandle,
  2149. IN PLSA_STRING OriginName,
  2150. IN SECURITY_LOGON_TYPE LogonType,
  2151. IN ULONG AuthenticationPackage,
  2152. IN PVOID AuthenticationInformation,
  2153. IN ULONG AuthenticationInformationLength,
  2154. IN PTOKEN_GROUPS LocalGroups OPTIONAL,
  2155. IN PTOKEN_SOURCE SourceContext,
  2156. OUT PVOID *ProfileBuffer,
  2157. OUT PULONG ProfileBufferLength,
  2158. OUT PLUID LogonId,
  2159. OUT PHANDLE Token,
  2160. OUT PQUOTA_LIMITS Quotas,
  2161. OUT PNTSTATUS SubStatus);
  2162. NTSTATUS
  2163. NTAPI
  2164. LsaFreeReturnBuffer(
  2165. IN PVOID Buffer);
  2166. #ifndef _NTLSA_IFS_
  2167. #define _NTLSA_IFS_
  2168. #endif
  2169. #define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
  2170. #define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"
  2171. #define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR)
  2172. #define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0"
  2173. #define MSV1_0_SUBAUTHENTICATION_VALUE "Auth"
  2174. #define MSV1_0_CHALLENGE_LENGTH 8
  2175. #define MSV1_0_USER_SESSION_KEY_LENGTH 16
  2176. #define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8
  2177. #define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02
  2178. #define MSV1_0_UPDATE_LOGON_STATISTICS 0x04
  2179. #define MSV1_0_RETURN_USER_PARAMETERS 0x08
  2180. #define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10
  2181. #define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20
  2182. #define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40
  2183. #define MSV1_0_USE_CLIENT_CHALLENGE 0x80
  2184. #define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100
  2185. #define MSV1_0_RETURN_PROFILE_PATH 0x200
  2186. #define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400
  2187. #define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800
  2188. #define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000
  2189. #define MSV1_0_ALLOW_FORCE_GUEST 0x00002000
  2190. #if (_WIN32_WINNT >= 0x0502)
  2191. #define MSV1_0_CLEARTEXT_PASSWORD_SUPPLIED 0x00004000
  2192. #define MSV1_0_USE_DOMAIN_FOR_ROUTING_ONLY 0x00008000
  2193. #endif
  2194. #define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000
  2195. #define MSV1_0_ALLOW_MSVCHAPV2 0x00010000
  2196. #if (_WIN32_WINNT >= 0x0600)
  2197. #define MSV1_0_S4U2SELF 0x00020000
  2198. #define MSV1_0_CHECK_LOGONHOURS_FOR_S4U 0x00040000
  2199. #endif
  2200. #define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000
  2201. #define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24
  2202. #define MSV1_0_MNS_LOGON 0x01000000
  2203. #define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2
  2204. #define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132
  2205. #define LOGON_GUEST 0x01
  2206. #define LOGON_NOENCRYPTION 0x02
  2207. #define LOGON_CACHED_ACCOUNT 0x04
  2208. #define LOGON_USED_LM_PASSWORD 0x08
  2209. #define LOGON_EXTRA_SIDS 0x20
  2210. #define LOGON_SUBAUTH_SESSION_KEY 0x40
  2211. #define LOGON_SERVER_TRUST_ACCOUNT 0x80
  2212. #define LOGON_NTLMV2_ENABLED 0x100
  2213. #define LOGON_RESOURCE_GROUPS 0x200
  2214. #define LOGON_PROFILE_PATH_RETURNED 0x400
  2215. #define LOGON_NT_V2 0x800
  2216. #define LOGON_LM_V2 0x1000
  2217. #define LOGON_NTLM_V2 0x2000
  2218. #if (_WIN32_WINNT >= 0x0600)
  2219. #define LOGON_OPTIMIZED 0x4000
  2220. #define LOGON_WINLOGON 0x8000
  2221. #define LOGON_PKINIT 0x10000
  2222. #define LOGON_NO_OPTIMIZED 0x20000
  2223. #endif
  2224. #define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000
  2225. #define LOGON_GRACE_LOGON 0x01000000
  2226. #define MSV1_0_OWF_PASSWORD_LENGTH 16
  2227. #define MSV1_0_CRED_LM_PRESENT 0x1
  2228. #define MSV1_0_CRED_NT_PRESENT 0x2
  2229. #define MSV1_0_CRED_VERSION 0
  2230. #define MSV1_0_NTLM3_RESPONSE_LENGTH 16
  2231. #define MSV1_0_NTLM3_OWF_LENGTH 16
  2232. #if (_WIN32_WINNT == 0x0500)
  2233. #define MSV1_0_MAX_NTLM3_LIFE 1800
  2234. #else
  2235. #define MSV1_0_MAX_NTLM3_LIFE 129600
  2236. #endif
  2237. #define MSV1_0_MAX_AVL_SIZE 64000
  2238. #if (_WIN32_WINNT >= 0x0501)
  2239. #define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001
  2240. #if (_WIN32_WINNT >= 0x0600)
  2241. #define MSV1_0_AV_FLAG_MIC_HANDSHAKE_MESSAGES 0x00000002
  2242. #endif
  2243. #endif
  2244. #define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH)
  2245. #if(_WIN32_WINNT >= 0x0502)
  2246. #define MSV1_0_NTLM3_MIN_NT_RESPONSE_LENGTH RTL_SIZEOF_THROUGH_FIELD(MSV1_0_NTLM3_RESPONSE, AvPairsOff)
  2247. #endif
  2248. #define USE_PRIMARY_PASSWORD 0x01
  2249. #define RETURN_PRIMARY_USERNAME 0x02
  2250. #define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04
  2251. #define RETURN_NON_NT_USER_SESSION_KEY 0x08
  2252. #define GENERATE_CLIENT_CHALLENGE 0x10
  2253. #define GCR_NTLM3_PARMS 0x20
  2254. #define GCR_TARGET_INFO 0x40
  2255. #define RETURN_RESERVED_PARAMETER 0x80
  2256. #define GCR_ALLOW_NTLM 0x100
  2257. #define GCR_USE_OEM_SET 0x200
  2258. #define GCR_MACHINE_CREDENTIAL 0x400
  2259. #define GCR_USE_OWF_PASSWORD 0x800
  2260. #define GCR_ALLOW_LM 0x1000
  2261. #define GCR_ALLOW_NO_TARGET 0x2000
  2262. typedef enum _MSV1_0_LOGON_SUBMIT_TYPE {
  2263. MsV1_0InteractiveLogon = 2,
  2264. MsV1_0Lm20Logon,
  2265. MsV1_0NetworkLogon,
  2266. MsV1_0SubAuthLogon,
  2267. MsV1_0WorkstationUnlockLogon = 7,
  2268. MsV1_0S4ULogon = 12,
  2269. MsV1_0VirtualLogon = 82
  2270. } MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE;
  2271. typedef enum _MSV1_0_PROFILE_BUFFER_TYPE {
  2272. MsV1_0InteractiveProfile = 2,
  2273. MsV1_0Lm20LogonProfile,
  2274. MsV1_0SmartCardProfile
  2275. } MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE;
  2276. typedef struct _MSV1_0_INTERACTIVE_LOGON {
  2277. MSV1_0_LOGON_SUBMIT_TYPE MessageType;
  2278. UNICODE_STRING LogonDomainName;
  2279. UNICODE_STRING UserName;
  2280. UNICODE_STRING Password;
  2281. } MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON;
  2282. typedef struct _MSV1_0_INTERACTIVE_PROFILE {
  2283. MSV1_0_PROFILE_BUFFER_TYPE MessageType;
  2284. USHORT LogonCount;
  2285. USHORT BadPasswordCount;
  2286. LARGE_INTEGER LogonTime;
  2287. LARGE_INTEGER LogoffTime;
  2288. LARGE_INTEGER KickOffTime;
  2289. LARGE_INTEGER PasswordLastSet;
  2290. LARGE_INTEGER PasswordCanChange;
  2291. LARGE_INTEGER PasswordMustChange;
  2292. UNICODE_STRING LogonScript;
  2293. UNICODE_STRING HomeDirectory;
  2294. UNICODE_STRING FullName;
  2295. UNICODE_STRING ProfilePath;
  2296. UNICODE_STRING HomeDirectoryDrive;
  2297. UNICODE_STRING LogonServer;
  2298. ULONG UserFlags;
  2299. } MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE;
  2300. typedef struct _MSV1_0_LM20_LOGON {
  2301. MSV1_0_LOGON_SUBMIT_TYPE MessageType;
  2302. UNICODE_STRING LogonDomainName;
  2303. UNICODE_STRING UserName;
  2304. UNICODE_STRING Workstation;
  2305. UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
  2306. STRING CaseSensitiveChallengeResponse;
  2307. STRING CaseInsensitiveChallengeResponse;
  2308. ULONG ParameterControl;
  2309. } MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON;
  2310. typedef struct _MSV1_0_SUBAUTH_LOGON {
  2311. MSV1_0_LOGON_SUBMIT_TYPE MessageType;
  2312. UNICODE_STRING LogonDomainName;
  2313. UNICODE_STRING UserName;
  2314. UNICODE_STRING Workstation;
  2315. UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
  2316. STRING AuthenticationInfo1;
  2317. STRING AuthenticationInfo2;
  2318. ULONG ParameterControl;
  2319. ULONG SubAuthPackageId;
  2320. } MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON;
  2321. #if (_WIN32_WINNT >= 0x0600)
  2322. #define MSV1_0_S4U_LOGON_FLAG_CHECK_LOGONHOURS 0x2
  2323. typedef struct _MSV1_0_S4U_LOGON {
  2324. MSV1_0_LOGON_SUBMIT_TYPE MessageType;
  2325. ULONG Flags;
  2326. UNICODE_STRING UserPrincipalName;
  2327. UNICODE_STRING DomainName;
  2328. } MSV1_0_S4U_LOGON, *PMSV1_0_S4U_LOGON;
  2329. #endif
  2330. typedef struct _MSV1_0_LM20_LOGON_PROFILE {
  2331. MSV1_0_PROFILE_BUFFER_TYPE MessageType;
  2332. LARGE_INTEGER KickOffTime;
  2333. LARGE_INTEGER LogoffTime;
  2334. ULONG UserFlags;
  2335. UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
  2336. UNICODE_STRING LogonDomainName;
  2337. UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
  2338. UNICODE_STRING LogonServer;
  2339. UNICODE_STRING UserParameters;
  2340. } MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE;
  2341. typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL {
  2342. ULONG Version;
  2343. ULONG Flags;
  2344. UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH];
  2345. UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH];
  2346. } MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL;
  2347. typedef struct _MSV1_0_NTLM3_RESPONSE {
  2348. UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH];
  2349. UCHAR RespType;
  2350. UCHAR HiRespType;
  2351. USHORT Flags;
  2352. ULONG MsgWord;
  2353. ULONGLONG TimeStamp;
  2354. UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH];
  2355. ULONG AvPairsOff;
  2356. UCHAR Buffer[1];
  2357. } MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE;
  2358. /* MsvAvSingleHost present in MS-NLMP specifications but not in WinSDK */
  2359. typedef enum _MSV1_0_AVID {
  2360. MsvAvEOL,
  2361. MsvAvNbComputerName,
  2362. MsvAvNbDomainName,
  2363. MsvAvDnsComputerName,
  2364. MsvAvDnsDomainName,
  2365. #if (_WIN32_WINNT >= 0x0501)
  2366. MsvAvDnsTreeName,
  2367. MsvAvFlags,
  2368. #if (_WIN32_WINNT >= 0x0600)
  2369. MsvAvTimestamp,
  2370. MsvAvRestrictions,
  2371. MsvAvSingleHost = MsvAvRestrictions,
  2372. MsvAvTargetName,
  2373. MsvAvChannelBindings,
  2374. #endif
  2375. #endif
  2376. } MSV1_0_AVID;
  2377. typedef struct _MSV1_0_AV_PAIR {
  2378. USHORT AvId;
  2379. USHORT AvLen;
  2380. } MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR;
  2381. typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE {
  2382. MsV1_0Lm20ChallengeRequest = 0,
  2383. MsV1_0Lm20GetChallengeResponse,
  2384. MsV1_0EnumerateUsers,
  2385. MsV1_0GetUserInfo,
  2386. MsV1_0ReLogonUsers,
  2387. MsV1_0ChangePassword,
  2388. MsV1_0ChangeCachedPassword,
  2389. MsV1_0GenericPassthrough,
  2390. MsV1_0CacheLogon,
  2391. MsV1_0SubAuth,
  2392. MsV1_0DeriveCredential,
  2393. MsV1_0CacheLookup,
  2394. #if (_WIN32_WINNT >= 0x0501)
  2395. MsV1_0SetProcessOption,
  2396. #endif
  2397. #if (_WIN32_WINNT >= 0x0600)
  2398. MsV1_0ConfigLocalAliases,
  2399. MsV1_0ClearCachedCredentials,
  2400. #endif
  2401. } MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE;
  2402. typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST {
  2403. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2404. } MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST;
  2405. typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE {
  2406. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2407. UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
  2408. } MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE;
  2409. typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 {
  2410. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2411. ULONG ParameterControl;
  2412. LUID LogonId;
  2413. UNICODE_STRING Password;
  2414. UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
  2415. } MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1;
  2416. typedef struct _MSV1_0_GETCHALLENRESP_REQUEST {
  2417. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2418. ULONG ParameterControl;
  2419. LUID LogonId;
  2420. UNICODE_STRING Password;
  2421. UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
  2422. UNICODE_STRING UserName;
  2423. UNICODE_STRING LogonDomainName;
  2424. UNICODE_STRING ServerName;
  2425. } MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST;
  2426. typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE {
  2427. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2428. STRING CaseSensitiveChallengeResponse;
  2429. STRING CaseInsensitiveChallengeResponse;
  2430. UNICODE_STRING UserName;
  2431. UNICODE_STRING LogonDomainName;
  2432. UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
  2433. UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
  2434. } MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE;
  2435. typedef struct _MSV1_0_ENUMUSERS_REQUEST {
  2436. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2437. } MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST;
  2438. typedef struct _MSV1_0_ENUMUSERS_RESPONSE {
  2439. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2440. ULONG NumberOfLoggedOnUsers;
  2441. PLUID LogonIds;
  2442. PULONG EnumHandles;
  2443. } MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE;
  2444. typedef struct _MSV1_0_GETUSERINFO_REQUEST {
  2445. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2446. LUID LogonId;
  2447. } MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST;
  2448. typedef struct _MSV1_0_GETUSERINFO_RESPONSE {
  2449. MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
  2450. PSID UserSid;
  2451. UNICODE_STRING UserName;
  2452. UNICODE_STRING LogonDomainName;
  2453. UNICODE_STRING LogonServer;
  2454. SECURITY_LOGON_TYPE LogonType;
  2455. } MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE;
  2456. #define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
  2457. #define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
  2458. #define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
  2459. /* also in winnt.h */
  2460. #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
  2461. #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
  2462. #define FILE_NOTIFY_CHANGE_NAME 0x00000003
  2463. #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
  2464. #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
  2465. #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
  2466. #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
  2467. #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
  2468. #define FILE_NOTIFY_CHANGE_EA 0x00000080
  2469. #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
  2470. #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
  2471. #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
  2472. #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
  2473. #define FILE_NOTIFY_VALID_MASK 0x00000fff
  2474. #define FILE_ACTION_ADDED 0x00000001
  2475. #define FILE_ACTION_REMOVED 0x00000002
  2476. #define FILE_ACTION_MODIFIED 0x00000003
  2477. #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
  2478. #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
  2479. #define FILE_ACTION_ADDED_STREAM 0x00000006
  2480. #define FILE_ACTION_REMOVED_STREAM 0x00000007
  2481. #define FILE_ACTION_MODIFIED_STREAM 0x00000008
  2482. #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
  2483. #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
  2484. #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
  2485. /* end winnt.h */
  2486. #define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
  2487. #define FILE_PIPE_MESSAGE_TYPE 0x00000001
  2488. #define FILE_PIPE_ACCEPT_REMOTE_CLIENTS 0x00000000
  2489. #define FILE_PIPE_REJECT_REMOTE_CLIENTS 0x00000002
  2490. #define FILE_PIPE_TYPE_VALID_MASK 0x00000003
  2491. #define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
  2492. #define FILE_PIPE_MESSAGE_MODE 0x00000001
  2493. #define FILE_PIPE_QUEUE_OPERATION 0x00000000
  2494. #define FILE_PIPE_COMPLETE_OPERATION 0x00000001
  2495. #define FILE_PIPE_INBOUND 0x00000000
  2496. #define FILE_PIPE_OUTBOUND 0x00000001
  2497. #define FILE_PIPE_FULL_DUPLEX 0x00000002
  2498. #define FILE_PIPE_DISCONNECTED_STATE 0x00000001
  2499. #define FILE_PIPE_LISTENING_STATE 0x00000002
  2500. #define FILE_PIPE_CONNECTED_STATE 0x00000003
  2501. #define FILE_PIPE_CLOSING_STATE 0x00000004
  2502. #define FILE_PIPE_CLIENT_END 0x00000000
  2503. #define FILE_PIPE_SERVER_END 0x00000001
  2504. #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
  2505. #define FILE_CASE_PRESERVED_NAMES 0x00000002
  2506. #define FILE_UNICODE_ON_DISK 0x00000004
  2507. #define FILE_PERSISTENT_ACLS 0x00000008
  2508. #define FILE_FILE_COMPRESSION 0x00000010
  2509. #define FILE_VOLUME_QUOTAS 0x00000020
  2510. #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
  2511. #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
  2512. #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
  2513. #define FILE_VOLUME_IS_COMPRESSED 0x00008000
  2514. #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
  2515. #define FILE_SUPPORTS_ENCRYPTION 0x00020000
  2516. #define FILE_NAMED_STREAMS 0x00040000
  2517. #define FILE_READ_ONLY_VOLUME 0x00080000
  2518. #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
  2519. #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
  2520. #define FILE_SUPPORTS_HARD_LINKS 0x00400000
  2521. #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
  2522. #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
  2523. #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
  2524. #define FILE_NEED_EA 0x00000080
  2525. #define FILE_EA_TYPE_BINARY 0xfffe
  2526. #define FILE_EA_TYPE_ASCII 0xfffd
  2527. #define FILE_EA_TYPE_BITMAP 0xfffb
  2528. #define FILE_EA_TYPE_METAFILE 0xfffa
  2529. #define FILE_EA_TYPE_ICON 0xfff9
  2530. #define FILE_EA_TYPE_EA 0xffee
  2531. #define FILE_EA_TYPE_MVMT 0xffdf
  2532. #define FILE_EA_TYPE_MVST 0xffde
  2533. #define FILE_EA_TYPE_ASN1 0xffdd
  2534. #define FILE_EA_TYPE_FAMILY_IDS 0xff01
  2535. typedef struct _FILE_NOTIFY_INFORMATION {
  2536. ULONG NextEntryOffset;
  2537. ULONG Action;
  2538. ULONG FileNameLength;
  2539. WCHAR FileName[1];
  2540. } FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
  2541. typedef struct _FILE_DIRECTORY_INFORMATION {
  2542. ULONG NextEntryOffset;
  2543. ULONG FileIndex;
  2544. LARGE_INTEGER CreationTime;
  2545. LARGE_INTEGER LastAccessTime;
  2546. LARGE_INTEGER LastWriteTime;
  2547. LARGE_INTEGER ChangeTime;
  2548. LARGE_INTEGER EndOfFile;
  2549. LARGE_INTEGER AllocationSize;
  2550. ULONG FileAttributes;
  2551. ULONG FileNameLength;
  2552. WCHAR FileName[1];
  2553. } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
  2554. typedef struct _FILE_FULL_DIR_INFORMATION {
  2555. ULONG NextEntryOffset;
  2556. ULONG FileIndex;
  2557. LARGE_INTEGER CreationTime;
  2558. LARGE_INTEGER LastAccessTime;
  2559. LARGE_INTEGER LastWriteTime;
  2560. LARGE_INTEGER ChangeTime;
  2561. LARGE_INTEGER EndOfFile;
  2562. LARGE_INTEGER AllocationSize;
  2563. ULONG FileAttributes;
  2564. ULONG FileNameLength;
  2565. ULONG EaSize;
  2566. WCHAR FileName[1];
  2567. } FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
  2568. typedef struct _FILE_ID_FULL_DIR_INFORMATION {
  2569. ULONG NextEntryOffset;
  2570. ULONG FileIndex;
  2571. LARGE_INTEGER CreationTime;
  2572. LARGE_INTEGER LastAccessTime;
  2573. LARGE_INTEGER LastWriteTime;
  2574. LARGE_INTEGER ChangeTime;
  2575. LARGE_INTEGER EndOfFile;
  2576. LARGE_INTEGER AllocationSize;
  2577. ULONG FileAttributes;
  2578. ULONG FileNameLength;
  2579. ULONG EaSize;
  2580. LARGE_INTEGER FileId;
  2581. WCHAR FileName[1];
  2582. } FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION;
  2583. typedef struct _FILE_BOTH_DIR_INFORMATION {
  2584. ULONG NextEntryOffset;
  2585. ULONG FileIndex;
  2586. LARGE_INTEGER CreationTime;
  2587. LARGE_INTEGER LastAccessTime;
  2588. LARGE_INTEGER LastWriteTime;
  2589. LARGE_INTEGER ChangeTime;
  2590. LARGE_INTEGER EndOfFile;
  2591. LARGE_INTEGER AllocationSize;
  2592. ULONG FileAttributes;
  2593. ULONG FileNameLength;
  2594. ULONG EaSize;
  2595. CCHAR ShortNameLength;
  2596. WCHAR ShortName[12];
  2597. WCHAR FileName[1];
  2598. } FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
  2599. typedef struct _FILE_ID_BOTH_DIR_INFORMATION {
  2600. ULONG NextEntryOffset;
  2601. ULONG FileIndex;
  2602. LARGE_INTEGER CreationTime;
  2603. LARGE_INTEGER LastAccessTime;
  2604. LARGE_INTEGER LastWriteTime;
  2605. LARGE_INTEGER ChangeTime;
  2606. LARGE_INTEGER EndOfFile;
  2607. LARGE_INTEGER AllocationSize;
  2608. ULONG FileAttributes;
  2609. ULONG FileNameLength;
  2610. ULONG EaSize;
  2611. CCHAR ShortNameLength;
  2612. WCHAR ShortName[12];
  2613. LARGE_INTEGER FileId;
  2614. WCHAR FileName[1];
  2615. } FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION;
  2616. typedef struct _FILE_NAMES_INFORMATION {
  2617. ULONG NextEntryOffset;
  2618. ULONG FileIndex;
  2619. ULONG FileNameLength;
  2620. WCHAR FileName[1];
  2621. } FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
  2622. typedef struct _FILE_ID_GLOBAL_TX_DIR_INFORMATION {
  2623. ULONG NextEntryOffset;
  2624. ULONG FileIndex;
  2625. LARGE_INTEGER CreationTime;
  2626. LARGE_INTEGER LastAccessTime;
  2627. LARGE_INTEGER LastWriteTime;
  2628. LARGE_INTEGER ChangeTime;
  2629. LARGE_INTEGER EndOfFile;
  2630. LARGE_INTEGER AllocationSize;
  2631. ULONG FileAttributes;
  2632. ULONG FileNameLength;
  2633. LARGE_INTEGER FileId;
  2634. GUID LockingTransactionId;
  2635. ULONG TxInfoFlags;
  2636. WCHAR FileName[1];
  2637. } FILE_ID_GLOBAL_TX_DIR_INFORMATION, *PFILE_ID_GLOBAL_TX_DIR_INFORMATION;
  2638. #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED 0x00000001
  2639. #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX 0x00000002
  2640. #define FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX 0x00000004
  2641. typedef struct _FILE_OBJECTID_INFORMATION {
  2642. LONGLONG FileReference;
  2643. UCHAR ObjectId[16];
  2644. _ANONYMOUS_UNION union {
  2645. _ANONYMOUS_STRUCT struct {
  2646. UCHAR BirthVolumeId[16];
  2647. UCHAR BirthObjectId[16];
  2648. UCHAR DomainId[16];
  2649. } DUMMYSTRUCTNAME;
  2650. UCHAR ExtendedInfo[48];
  2651. } DUMMYUNIONNAME;
  2652. } FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
  2653. #define ANSI_DOS_STAR ('<')
  2654. #define ANSI_DOS_QM ('>')
  2655. #define ANSI_DOS_DOT ('"')
  2656. #define DOS_STAR (L'<')
  2657. #define DOS_QM (L'>')
  2658. #define DOS_DOT (L'"')
  2659. typedef struct _FILE_INTERNAL_INFORMATION {
  2660. LARGE_INTEGER IndexNumber;
  2661. } FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
  2662. typedef struct _FILE_EA_INFORMATION {
  2663. ULONG EaSize;
  2664. } FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
  2665. typedef struct _FILE_ACCESS_INFORMATION {
  2666. ACCESS_MASK AccessFlags;
  2667. } FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
  2668. typedef struct _FILE_MODE_INFORMATION {
  2669. ULONG Mode;
  2670. } FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
  2671. typedef struct _FILE_ALL_INFORMATION {
  2672. FILE_BASIC_INFORMATION BasicInformation;
  2673. FILE_STANDARD_INFORMATION StandardInformation;
  2674. FILE_INTERNAL_INFORMATION InternalInformation;
  2675. FILE_EA_INFORMATION EaInformation;
  2676. FILE_ACCESS_INFORMATION AccessInformation;
  2677. FILE_POSITION_INFORMATION PositionInformation;
  2678. FILE_MODE_INFORMATION ModeInformation;
  2679. FILE_ALIGNMENT_INFORMATION AlignmentInformation;
  2680. FILE_NAME_INFORMATION NameInformation;
  2681. } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
  2682. typedef struct _FILE_ALLOCATION_INFORMATION {
  2683. LARGE_INTEGER AllocationSize;
  2684. } FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
  2685. typedef struct _FILE_COMPRESSION_INFORMATION {
  2686. LARGE_INTEGER CompressedFileSize;
  2687. USHORT CompressionFormat;
  2688. UCHAR CompressionUnitShift;
  2689. UCHAR ChunkShift;
  2690. UCHAR ClusterShift;
  2691. UCHAR Reserved[3];
  2692. } FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
  2693. typedef struct _FILE_LINK_INFORMATION {
  2694. BOOLEAN ReplaceIfExists;
  2695. HANDLE RootDirectory;
  2696. ULONG FileNameLength;
  2697. WCHAR FileName[1];
  2698. } FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
  2699. typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
  2700. ULONG ClusterCount;
  2701. HANDLE RootDirectory;
  2702. ULONG FileNameLength;
  2703. WCHAR FileName[1];
  2704. } FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
  2705. typedef struct _FILE_RENAME_INFORMATION {
  2706. BOOLEAN ReplaceIfExists;
  2707. HANDLE RootDirectory;
  2708. ULONG FileNameLength;
  2709. WCHAR FileName[1];
  2710. } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
  2711. typedef struct _FILE_STREAM_INFORMATION {
  2712. ULONG NextEntryOffset;
  2713. ULONG StreamNameLength;
  2714. LARGE_INTEGER StreamSize;
  2715. LARGE_INTEGER StreamAllocationSize;
  2716. WCHAR StreamName[1];
  2717. } FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
  2718. typedef struct _FILE_TRACKING_INFORMATION {
  2719. HANDLE DestinationFile;
  2720. ULONG ObjectInformationLength;
  2721. CHAR ObjectInformation[1];
  2722. } FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION;
  2723. typedef struct _FILE_COMPLETION_INFORMATION {
  2724. HANDLE Port;
  2725. PVOID Key;
  2726. } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
  2727. typedef struct _FILE_PIPE_INFORMATION {
  2728. ULONG ReadMode;
  2729. ULONG CompletionMode;
  2730. } FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
  2731. typedef struct _FILE_PIPE_LOCAL_INFORMATION {
  2732. ULONG NamedPipeType;
  2733. ULONG NamedPipeConfiguration;
  2734. ULONG MaximumInstances;
  2735. ULONG CurrentInstances;
  2736. ULONG InboundQuota;
  2737. ULONG ReadDataAvailable;
  2738. ULONG OutboundQuota;
  2739. ULONG WriteQuotaAvailable;
  2740. ULONG NamedPipeState;
  2741. ULONG NamedPipeEnd;
  2742. } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
  2743. typedef struct _FILE_PIPE_REMOTE_INFORMATION {
  2744. LARGE_INTEGER CollectDataTime;
  2745. ULONG MaximumCollectionCount;
  2746. } FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
  2747. typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
  2748. ULONG MaximumMessageSize;
  2749. ULONG MailslotQuota;
  2750. ULONG NextMessageSize;
  2751. ULONG MessagesAvailable;
  2752. LARGE_INTEGER ReadTimeout;
  2753. } FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
  2754. typedef struct _FILE_MAILSLOT_SET_INFORMATION {
  2755. PLARGE_INTEGER ReadTimeout;
  2756. } FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
  2757. typedef struct _FILE_REPARSE_POINT_INFORMATION {
  2758. LONGLONG FileReference;
  2759. ULONG Tag;
  2760. } FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION;
  2761. typedef struct _FILE_LINK_ENTRY_INFORMATION {
  2762. ULONG NextEntryOffset;
  2763. LONGLONG ParentFileId;
  2764. ULONG FileNameLength;
  2765. WCHAR FileName[1];
  2766. } FILE_LINK_ENTRY_INFORMATION, *PFILE_LINK_ENTRY_INFORMATION;
  2767. typedef struct _FILE_LINKS_INFORMATION {
  2768. ULONG BytesNeeded;
  2769. ULONG EntriesReturned;
  2770. FILE_LINK_ENTRY_INFORMATION Entry;
  2771. } FILE_LINKS_INFORMATION, *PFILE_LINKS_INFORMATION;
  2772. typedef struct _FILE_NETWORK_PHYSICAL_NAME_INFORMATION {
  2773. ULONG FileNameLength;
  2774. WCHAR FileName[1];
  2775. } FILE_NETWORK_PHYSICAL_NAME_INFORMATION, *PFILE_NETWORK_PHYSICAL_NAME_INFORMATION;
  2776. typedef struct _FILE_STANDARD_LINK_INFORMATION {
  2777. ULONG NumberOfAccessibleLinks;
  2778. ULONG TotalNumberOfLinks;
  2779. BOOLEAN DeletePending;
  2780. BOOLEAN Directory;
  2781. } FILE_STANDARD_LINK_INFORMATION, *PFILE_STANDARD_LINK_INFORMATION;
  2782. typedef struct _FILE_GET_EA_INFORMATION {
  2783. ULONG NextEntryOffset;
  2784. UCHAR EaNameLength;
  2785. CHAR EaName[1];
  2786. } FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
  2787. #define REMOTE_PROTOCOL_FLAG_LOOPBACK 0x00000001
  2788. #define REMOTE_PROTOCOL_FLAG_OFFLINE 0x00000002
  2789. typedef struct _FILE_REMOTE_PROTOCOL_INFORMATION {
  2790. USHORT StructureVersion;
  2791. USHORT StructureSize;
  2792. ULONG Protocol;
  2793. USHORT ProtocolMajorVersion;
  2794. USHORT ProtocolMinorVersion;
  2795. USHORT ProtocolRevision;
  2796. USHORT Reserved;
  2797. ULONG Flags;
  2798. struct {
  2799. ULONG Reserved[8];
  2800. } GenericReserved;
  2801. struct {
  2802. ULONG Reserved[16];
  2803. } ProtocolSpecificReserved;
  2804. } FILE_REMOTE_PROTOCOL_INFORMATION, *PFILE_REMOTE_PROTOCOL_INFORMATION;
  2805. typedef struct _FILE_GET_QUOTA_INFORMATION {
  2806. ULONG NextEntryOffset;
  2807. ULONG SidLength;
  2808. SID Sid;
  2809. } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
  2810. typedef struct _FILE_QUOTA_INFORMATION {
  2811. ULONG NextEntryOffset;
  2812. ULONG SidLength;
  2813. LARGE_INTEGER ChangeTime;
  2814. LARGE_INTEGER QuotaUsed;
  2815. LARGE_INTEGER QuotaThreshold;
  2816. LARGE_INTEGER QuotaLimit;
  2817. SID Sid;
  2818. } FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
  2819. typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
  2820. ULONG FileSystemAttributes;
  2821. ULONG MaximumComponentNameLength;
  2822. ULONG FileSystemNameLength;
  2823. WCHAR FileSystemName[1];
  2824. } FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
  2825. typedef struct _FILE_FS_DRIVER_PATH_INFORMATION {
  2826. BOOLEAN DriverInPath;
  2827. ULONG DriverNameLength;
  2828. WCHAR DriverName[1];
  2829. } FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION;
  2830. typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION {
  2831. ULONG Flags;
  2832. } FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION;
  2833. #define FILE_VC_QUOTA_NONE 0x00000000
  2834. #define FILE_VC_QUOTA_TRACK 0x00000001
  2835. #define FILE_VC_QUOTA_ENFORCE 0x00000002
  2836. #define FILE_VC_QUOTA_MASK 0x00000003
  2837. #define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
  2838. #define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
  2839. #define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
  2840. #define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
  2841. #define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
  2842. #define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
  2843. #define FILE_VC_QUOTAS_REBUILDING 0x00000200
  2844. #define FILE_VC_VALID_MASK 0x000003ff
  2845. typedef struct _FILE_FS_CONTROL_INFORMATION {
  2846. LARGE_INTEGER FreeSpaceStartFiltering;
  2847. LARGE_INTEGER FreeSpaceThreshold;
  2848. LARGE_INTEGER FreeSpaceStopFiltering;
  2849. LARGE_INTEGER DefaultQuotaThreshold;
  2850. LARGE_INTEGER DefaultQuotaLimit;
  2851. ULONG FileSystemControlFlags;
  2852. } FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
  2853. #ifndef _FILESYSTEMFSCTL_
  2854. #define _FILESYSTEMFSCTL_
  2855. #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2856. #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2857. #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2858. #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2859. #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2860. #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2861. #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2862. #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2863. #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2864. #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2865. #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2866. #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2867. #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS)
  2868. #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2869. #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
  2870. #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS)
  2871. #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2872. #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2873. #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2874. #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2875. #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2876. #if (_WIN32_WINNT >= 0x0400)
  2877. #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2878. #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2879. #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS)
  2880. #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
  2881. #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2882. #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2883. #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS)
  2884. #endif
  2885. #if (_WIN32_WINNT >= 0x0500)
  2886. #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
  2887. #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2888. #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2889. #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2890. #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2891. #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2892. #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2893. #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS)
  2894. #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA)
  2895. #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS)
  2896. #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2897. #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2898. #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2899. #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA)
  2900. #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA)
  2901. #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA)
  2902. #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
  2903. #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS)
  2904. #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
  2905. #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS)
  2906. #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS)
  2907. #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS)
  2908. #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS)
  2909. #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2910. #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2911. #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2912. #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2913. #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2914. #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
  2915. #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
  2916. #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA)
  2917. #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2918. #endif
  2919. #if (_WIN32_WINNT >= 0x0600)
  2920. #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
  2921. #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
  2922. #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2923. #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2924. #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2925. #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED, FILE_WRITE_DATA)
  2926. #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 82, METHOD_BUFFERED, FILE_READ_DATA)
  2927. #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 84, METHOD_BUFFERED, FILE_WRITE_DATA)
  2928. #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 85, METHOD_BUFFERED, FILE_WRITE_DATA)
  2929. #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED, FILE_WRITE_DATA)
  2930. #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
  2931. #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 88, METHOD_BUFFERED, FILE_READ_DATA)
  2932. #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 89, METHOD_BUFFERED, FILE_WRITE_DATA)
  2933. #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 90, METHOD_BUFFERED, FILE_WRITE_DATA)
  2934. #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 91, METHOD_BUFFERED, FILE_READ_DATA)
  2935. #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 92, METHOD_BUFFERED, FILE_READ_DATA)
  2936. #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 94, METHOD_BUFFERED, FILE_WRITE_DATA)
  2937. #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
  2938. #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 99, METHOD_BUFFERED, FILE_READ_DATA)
  2939. #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2940. #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2941. #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2942. #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2943. #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2944. #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
  2945. #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  2946. #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2947. #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2948. #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES \
  2949. CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
  2950. #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
  2951. #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2952. #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2953. #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2954. #endif
  2955. #if (_WIN32_WINNT >= 0x0601)
  2956. #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2957. #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2958. #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2959. #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2960. #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2961. #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2962. #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2963. #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2964. #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2965. #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2966. #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2967. #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2968. #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2969. #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2970. #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2971. #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2972. #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2973. typedef struct _CSV_NAMESPACE_INFO {
  2974. ULONG Version;
  2975. ULONG DeviceNumber;
  2976. LARGE_INTEGER StartingOffset;
  2977. ULONG SectorSize;
  2978. } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
  2979. #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
  2980. #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
  2981. #endif
  2982. #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
  2983. typedef struct _PATHNAME_BUFFER {
  2984. ULONG PathNameLength;
  2985. WCHAR Name[1];
  2986. } PATHNAME_BUFFER, *PPATHNAME_BUFFER;
  2987. typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
  2988. UCHAR First0x24BytesOfBootSector[0x24];
  2989. } FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
  2990. #if (_WIN32_WINNT >= 0x0400)
  2991. typedef struct _NTFS_VOLUME_DATA_BUFFER {
  2992. LARGE_INTEGER VolumeSerialNumber;
  2993. LARGE_INTEGER NumberSectors;
  2994. LARGE_INTEGER TotalClusters;
  2995. LARGE_INTEGER FreeClusters;
  2996. LARGE_INTEGER TotalReserved;
  2997. ULONG BytesPerSector;
  2998. ULONG BytesPerCluster;
  2999. ULONG BytesPerFileRecordSegment;
  3000. ULONG ClustersPerFileRecordSegment;
  3001. LARGE_INTEGER MftValidDataLength;
  3002. LARGE_INTEGER MftStartLcn;
  3003. LARGE_INTEGER Mft2StartLcn;
  3004. LARGE_INTEGER MftZoneStart;
  3005. LARGE_INTEGER MftZoneEnd;
  3006. } NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
  3007. typedef struct _NTFS_EXTENDED_VOLUME_DATA {
  3008. ULONG ByteCount;
  3009. USHORT MajorVersion;
  3010. USHORT MinorVersion;
  3011. } NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA;
  3012. typedef struct _STARTING_LCN_INPUT_BUFFER {
  3013. LARGE_INTEGER StartingLcn;
  3014. } STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
  3015. typedef struct _VOLUME_BITMAP_BUFFER {
  3016. LARGE_INTEGER StartingLcn;
  3017. LARGE_INTEGER BitmapSize;
  3018. UCHAR Buffer[1];
  3019. } VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
  3020. typedef struct _STARTING_VCN_INPUT_BUFFER {
  3021. LARGE_INTEGER StartingVcn;
  3022. } STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
  3023. typedef struct _RETRIEVAL_POINTERS_BUFFER {
  3024. ULONG ExtentCount;
  3025. LARGE_INTEGER StartingVcn;
  3026. struct {
  3027. LARGE_INTEGER NextVcn;
  3028. LARGE_INTEGER Lcn;
  3029. } Extents[1];
  3030. } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
  3031. typedef struct _NTFS_FILE_RECORD_INPUT_BUFFER {
  3032. LARGE_INTEGER FileReferenceNumber;
  3033. } NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
  3034. typedef struct _NTFS_FILE_RECORD_OUTPUT_BUFFER {
  3035. LARGE_INTEGER FileReferenceNumber;
  3036. ULONG FileRecordLength;
  3037. UCHAR FileRecordBuffer[1];
  3038. } NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
  3039. typedef struct _MOVE_FILE_DATA {
  3040. HANDLE FileHandle;
  3041. LARGE_INTEGER StartingVcn;
  3042. LARGE_INTEGER StartingLcn;
  3043. ULONG ClusterCount;
  3044. } MOVE_FILE_DATA, *PMOVE_FILE_DATA;
  3045. typedef struct _MOVE_FILE_RECORD_DATA {
  3046. HANDLE FileHandle;
  3047. LARGE_INTEGER SourceFileRecord;
  3048. LARGE_INTEGER TargetFileRecord;
  3049. } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
  3050. #if defined(_WIN64)
  3051. typedef struct _MOVE_FILE_DATA32 {
  3052. UINT32 FileHandle;
  3053. LARGE_INTEGER StartingVcn;
  3054. LARGE_INTEGER StartingLcn;
  3055. ULONG ClusterCount;
  3056. } MOVE_FILE_DATA32, *PMOVE_FILE_DATA32;
  3057. #endif
  3058. #endif /* (_WIN32_WINNT >= 0x0400) */
  3059. #if (_WIN32_WINNT >= 0x0500)
  3060. typedef struct _FIND_BY_SID_DATA {
  3061. ULONG Restart;
  3062. SID Sid;
  3063. } FIND_BY_SID_DATA, *PFIND_BY_SID_DATA;
  3064. typedef struct _FIND_BY_SID_OUTPUT {
  3065. ULONG NextEntryOffset;
  3066. ULONG FileIndex;
  3067. ULONG FileNameLength;
  3068. WCHAR FileName[1];
  3069. } FIND_BY_SID_OUTPUT, *PFIND_BY_SID_OUTPUT;
  3070. typedef struct _MFT_ENUM_DATA {
  3071. ULONGLONG StartFileReferenceNumber;
  3072. USN LowUsn;
  3073. USN HighUsn;
  3074. } MFT_ENUM_DATA, *PMFT_ENUM_DATA;
  3075. typedef struct _CREATE_USN_JOURNAL_DATA {
  3076. ULONGLONG MaximumSize;
  3077. ULONGLONG AllocationDelta;
  3078. } CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA;
  3079. typedef struct _READ_USN_JOURNAL_DATA {
  3080. USN StartUsn;
  3081. ULONG ReasonMask;
  3082. ULONG ReturnOnlyOnClose;
  3083. ULONGLONG Timeout;
  3084. ULONGLONG BytesToWaitFor;
  3085. ULONGLONG UsnJournalID;
  3086. } READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA;
  3087. typedef struct _USN_RECORD {
  3088. ULONG RecordLength;
  3089. USHORT MajorVersion;
  3090. USHORT MinorVersion;
  3091. ULONGLONG FileReferenceNumber;
  3092. ULONGLONG ParentFileReferenceNumber;
  3093. USN Usn;
  3094. LARGE_INTEGER TimeStamp;
  3095. ULONG Reason;
  3096. ULONG SourceInfo;
  3097. ULONG SecurityId;
  3098. ULONG FileAttributes;
  3099. USHORT FileNameLength;
  3100. USHORT FileNameOffset;
  3101. WCHAR FileName[1];
  3102. } USN_RECORD, *PUSN_RECORD;
  3103. #define USN_PAGE_SIZE (0x1000)
  3104. #define USN_REASON_DATA_OVERWRITE (0x00000001)
  3105. #define USN_REASON_DATA_EXTEND (0x00000002)
  3106. #define USN_REASON_DATA_TRUNCATION (0x00000004)
  3107. #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
  3108. #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
  3109. #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
  3110. #define USN_REASON_FILE_CREATE (0x00000100)
  3111. #define USN_REASON_FILE_DELETE (0x00000200)
  3112. #define USN_REASON_EA_CHANGE (0x00000400)
  3113. #define USN_REASON_SECURITY_CHANGE (0x00000800)
  3114. #define USN_REASON_RENAME_OLD_NAME (0x00001000)
  3115. #define USN_REASON_RENAME_NEW_NAME (0x00002000)
  3116. #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
  3117. #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
  3118. #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
  3119. #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
  3120. #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
  3121. #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
  3122. #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
  3123. #define USN_REASON_STREAM_CHANGE (0x00200000)
  3124. #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
  3125. #define USN_REASON_CLOSE (0x80000000)
  3126. typedef struct _USN_JOURNAL_DATA {
  3127. ULONGLONG UsnJournalID;
  3128. USN FirstUsn;
  3129. USN NextUsn;
  3130. USN LowestValidUsn;
  3131. USN MaxUsn;
  3132. ULONGLONG MaximumSize;
  3133. ULONGLONG AllocationDelta;
  3134. } USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA;
  3135. typedef struct _DELETE_USN_JOURNAL_DATA {
  3136. ULONGLONG UsnJournalID;
  3137. ULONG DeleteFlags;
  3138. } DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA;
  3139. #define USN_DELETE_FLAG_DELETE (0x00000001)
  3140. #define USN_DELETE_FLAG_NOTIFY (0x00000002)
  3141. #define USN_DELETE_VALID_FLAGS (0x00000003)
  3142. typedef struct _MARK_HANDLE_INFO {
  3143. ULONG UsnSourceInfo;
  3144. HANDLE VolumeHandle;
  3145. ULONG HandleInfo;
  3146. } MARK_HANDLE_INFO, *PMARK_HANDLE_INFO;
  3147. #if defined(_WIN64)
  3148. typedef struct _MARK_HANDLE_INFO32 {
  3149. ULONG UsnSourceInfo;
  3150. UINT32 VolumeHandle;
  3151. ULONG HandleInfo;
  3152. } MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32;
  3153. #endif
  3154. #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
  3155. #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
  3156. #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
  3157. #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
  3158. #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
  3159. #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
  3160. typedef struct _BULK_SECURITY_TEST_DATA {
  3161. ACCESS_MASK DesiredAccess;
  3162. ULONG SecurityIds[1];
  3163. } BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA;
  3164. #define VOLUME_IS_DIRTY (0x00000001)
  3165. #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
  3166. #define VOLUME_SESSION_OPEN (0x00000004)
  3167. typedef struct _FILE_PREFETCH {
  3168. ULONG Type;
  3169. ULONG Count;
  3170. ULONGLONG Prefetch[1];
  3171. } FILE_PREFETCH, *PFILE_PREFETCH;
  3172. typedef struct _FILE_PREFETCH_EX {
  3173. ULONG Type;
  3174. ULONG Count;
  3175. PVOID Context;
  3176. ULONGLONG Prefetch[1];
  3177. } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
  3178. #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
  3179. #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
  3180. #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
  3181. #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
  3182. #define FILE_PREFETCH_TYPE_MAX 0x4
  3183. typedef struct _FILE_OBJECTID_BUFFER {
  3184. UCHAR ObjectId[16];
  3185. _ANONYMOUS_UNION union {
  3186. _ANONYMOUS_STRUCT struct {
  3187. UCHAR BirthVolumeId[16];
  3188. UCHAR BirthObjectId[16];
  3189. UCHAR DomainId[16];
  3190. } DUMMYSTRUCTNAME;
  3191. UCHAR ExtendedInfo[48];
  3192. } DUMMYUNIONNAME;
  3193. } FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER;
  3194. typedef struct _FILE_SET_SPARSE_BUFFER {
  3195. BOOLEAN SetSparse;
  3196. } FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER;
  3197. typedef struct _FILE_ZERO_DATA_INFORMATION {
  3198. LARGE_INTEGER FileOffset;
  3199. LARGE_INTEGER BeyondFinalZero;
  3200. } FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION;
  3201. typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
  3202. LARGE_INTEGER FileOffset;
  3203. LARGE_INTEGER Length;
  3204. } FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
  3205. typedef struct _ENCRYPTION_BUFFER {
  3206. ULONG EncryptionOperation;
  3207. UCHAR Private[1];
  3208. } ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER;
  3209. #define FILE_SET_ENCRYPTION 0x00000001
  3210. #define FILE_CLEAR_ENCRYPTION 0x00000002
  3211. #define STREAM_SET_ENCRYPTION 0x00000003
  3212. #define STREAM_CLEAR_ENCRYPTION 0x00000004
  3213. #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
  3214. typedef struct _DECRYPTION_STATUS_BUFFER {
  3215. BOOLEAN NoEncryptedStreams;
  3216. } DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER;
  3217. #define ENCRYPTION_FORMAT_DEFAULT (0x01)
  3218. #define COMPRESSION_FORMAT_SPARSE (0x4000)
  3219. typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
  3220. LONGLONG FileOffset;
  3221. ULONG Length;
  3222. } REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA;
  3223. typedef struct _ENCRYPTED_DATA_INFO {
  3224. ULONGLONG StartingFileOffset;
  3225. ULONG OutputBufferOffset;
  3226. ULONG BytesWithinFileSize;
  3227. ULONG BytesWithinValidDataLength;
  3228. USHORT CompressionFormat;
  3229. UCHAR DataUnitShift;
  3230. UCHAR ChunkShift;
  3231. UCHAR ClusterShift;
  3232. UCHAR EncryptionFormat;
  3233. USHORT NumberOfDataBlocks;
  3234. ULONG DataBlockSize[ANYSIZE_ARRAY];
  3235. } ENCRYPTED_DATA_INFO, *PENCRYPTED_DATA_INFO;
  3236. typedef struct _PLEX_READ_DATA_REQUEST {
  3237. LARGE_INTEGER ByteOffset;
  3238. ULONG ByteLength;
  3239. ULONG PlexNumber;
  3240. } PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST;
  3241. typedef struct _SI_COPYFILE {
  3242. ULONG SourceFileNameLength;
  3243. ULONG DestinationFileNameLength;
  3244. ULONG Flags;
  3245. WCHAR FileNameBuffer[1];
  3246. } SI_COPYFILE, *PSI_COPYFILE;
  3247. #define COPYFILE_SIS_LINK 0x0001
  3248. #define COPYFILE_SIS_REPLACE 0x0002
  3249. #define COPYFILE_SIS_FLAGS 0x0003
  3250. #endif /* (_WIN32_WINNT >= 0x0500) */
  3251. #if (_WIN32_WINNT >= 0x0600)
  3252. typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
  3253. BOOLEAN CloseDisc;
  3254. } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
  3255. typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
  3256. BOOLEAN Disable;
  3257. } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
  3258. typedef struct _FILE_QUERY_SPARING_BUFFER {
  3259. ULONG SparingUnitBytes;
  3260. BOOLEAN SoftwareSparing;
  3261. ULONG TotalSpareBlocks;
  3262. ULONG FreeSpareBlocks;
  3263. } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
  3264. typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
  3265. LARGE_INTEGER DirectoryCount;
  3266. LARGE_INTEGER FileCount;
  3267. USHORT FsFormatMajVersion;
  3268. USHORT FsFormatMinVersion;
  3269. WCHAR FsFormatName[12];
  3270. LARGE_INTEGER FormatTime;
  3271. LARGE_INTEGER LastUpdateTime;
  3272. WCHAR CopyrightInfo[34];
  3273. WCHAR AbstractInfo[34];
  3274. WCHAR FormattingImplementationInfo[34];
  3275. WCHAR LastModifyingImplementationInfo[34];
  3276. } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
  3277. #define SET_REPAIR_ENABLED (0x00000001)
  3278. #define SET_REPAIR_VOLUME_BITMAP_SCAN (0x00000002)
  3279. #define SET_REPAIR_DELETE_CROSSLINK (0x00000004)
  3280. #define SET_REPAIR_WARN_ABOUT_DATA_LOSS (0x00000008)
  3281. #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT (0x00000010)
  3282. #define SET_REPAIR_VALID_MASK (0x0000001F)
  3283. typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
  3284. ShrinkPrepare = 1,
  3285. ShrinkCommit,
  3286. ShrinkAbort
  3287. } SHRINK_VOLUME_REQUEST_TYPES, *PSHRINK_VOLUME_REQUEST_TYPES;
  3288. typedef struct _SHRINK_VOLUME_INFORMATION {
  3289. SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
  3290. ULONGLONG Flags;
  3291. LONGLONG NewNumberOfSectors;
  3292. } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
  3293. #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
  3294. #define TXFS_RM_FLAG_RENAME_RM 0x00000002
  3295. #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
  3296. #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
  3297. #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
  3298. #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
  3299. #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
  3300. #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
  3301. #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
  3302. #define TXFS_RM_FLAG_GROW_LOG 0x00000400
  3303. #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
  3304. #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
  3305. #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
  3306. #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
  3307. #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
  3308. #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
  3309. #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
  3310. #define TXFS_LOGGING_MODE_SIMPLE (0x0001)
  3311. #define TXFS_LOGGING_MODE_FULL (0x0002)
  3312. #define TXFS_TRANSACTION_STATE_NONE 0x00
  3313. #define TXFS_TRANSACTION_STATE_ACTIVE 0x01
  3314. #define TXFS_TRANSACTION_STATE_PREPARED 0x02
  3315. #define TXFS_TRANSACTION_STATE_NOTACTIVE 0x03
  3316. #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
  3317. TXFS_RM_FLAG_RENAME_RM | \
  3318. TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
  3319. TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
  3320. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  3321. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  3322. TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
  3323. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  3324. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
  3325. TXFS_RM_FLAG_SHRINK_LOG | \
  3326. TXFS_RM_FLAG_GROW_LOG | \
  3327. TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
  3328. TXFS_RM_FLAG_PRESERVE_CHANGES | \
  3329. TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
  3330. TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
  3331. TXFS_RM_FLAG_PREFER_CONSISTENCY | \
  3332. TXFS_RM_FLAG_PREFER_AVAILABILITY)
  3333. typedef struct _TXFS_MODIFY_RM {
  3334. ULONG Flags;
  3335. ULONG LogContainerCountMax;
  3336. ULONG LogContainerCountMin;
  3337. ULONG LogContainerCount;
  3338. ULONG LogGrowthIncrement;
  3339. ULONG LogAutoShrinkPercentage;
  3340. ULONGLONG Reserved;
  3341. USHORT LoggingMode;
  3342. } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
  3343. #define TXFS_RM_STATE_NOT_STARTED 0
  3344. #define TXFS_RM_STATE_STARTING 1
  3345. #define TXFS_RM_STATE_ACTIVE 2
  3346. #define TXFS_RM_STATE_SHUTTING_DOWN 3
  3347. #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
  3348. (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  3349. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  3350. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  3351. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
  3352. TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
  3353. TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
  3354. TXFS_RM_FLAG_PREFER_CONSISTENCY | \
  3355. TXFS_RM_FLAG_PREFER_AVAILABILITY)
  3356. typedef struct _TXFS_QUERY_RM_INFORMATION {
  3357. ULONG BytesRequired;
  3358. ULONGLONG TailLsn;
  3359. ULONGLONG CurrentLsn;
  3360. ULONGLONG ArchiveTailLsn;
  3361. ULONGLONG LogContainerSize;
  3362. LARGE_INTEGER HighestVirtualClock;
  3363. ULONG LogContainerCount;
  3364. ULONG LogContainerCountMax;
  3365. ULONG LogContainerCountMin;
  3366. ULONG LogGrowthIncrement;
  3367. ULONG LogAutoShrinkPercentage;
  3368. ULONG Flags;
  3369. USHORT LoggingMode;
  3370. USHORT Reserved;
  3371. ULONG RmState;
  3372. ULONGLONG LogCapacity;
  3373. ULONGLONG LogFree;
  3374. ULONGLONG TopsSize;
  3375. ULONGLONG TopsUsed;
  3376. ULONGLONG TransactionCount;
  3377. ULONGLONG OnePCCount;
  3378. ULONGLONG TwoPCCount;
  3379. ULONGLONG NumberLogFileFull;
  3380. ULONGLONG OldestTransactionAge;
  3381. GUID RMName;
  3382. ULONG TmLogPathOffset;
  3383. } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
  3384. #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
  3385. #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
  3386. #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
  3387. (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
  3388. TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
  3389. typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
  3390. LARGE_INTEGER LastVirtualClock;
  3391. ULONGLONG LastRedoLsn;
  3392. ULONGLONG HighestRecoveryLsn;
  3393. ULONG Flags;
  3394. } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
  3395. #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
  3396. #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
  3397. #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
  3398. #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
  3399. #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
  3400. #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
  3401. #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
  3402. #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
  3403. #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
  3404. #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
  3405. #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
  3406. #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
  3407. #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
  3408. #define TXFS_START_RM_VALID_FLAGS \
  3409. (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
  3410. TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
  3411. TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
  3412. TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  3413. TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  3414. TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
  3415. TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
  3416. TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  3417. TXFS_START_RM_FLAG_LOGGING_MODE | \
  3418. TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
  3419. TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
  3420. TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
  3421. typedef struct _TXFS_START_RM_INFORMATION {
  3422. ULONG Flags;
  3423. ULONGLONG LogContainerSize;
  3424. ULONG LogContainerCountMin;
  3425. ULONG LogContainerCountMax;
  3426. ULONG LogGrowthIncrement;
  3427. ULONG LogAutoShrinkPercentage;
  3428. ULONG TmLogPathOffset;
  3429. USHORT TmLogPathLength;
  3430. USHORT LoggingMode;
  3431. USHORT LogPathLength;
  3432. USHORT Reserved;
  3433. WCHAR LogPath[1];
  3434. } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
  3435. typedef struct _TXFS_GET_METADATA_INFO_OUT {
  3436. struct {
  3437. LONGLONG LowPart;
  3438. LONGLONG HighPart;
  3439. } TxfFileId;
  3440. GUID LockingTransaction;
  3441. ULONGLONG LastLsn;
  3442. ULONG TransactionState;
  3443. } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
  3444. #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
  3445. #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
  3446. typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
  3447. ULONGLONG Offset;
  3448. ULONG NameFlags;
  3449. LONGLONG FileId;
  3450. ULONG Reserved1;
  3451. ULONG Reserved2;
  3452. LONGLONG Reserved3;
  3453. WCHAR FileName[1];
  3454. } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
  3455. typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
  3456. GUID KtmTransaction;
  3457. ULONGLONG NumberOfFiles;
  3458. ULONGLONG BufferSizeRequired;
  3459. ULONGLONG Offset;
  3460. } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
  3461. typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
  3462. GUID TransactionId;
  3463. ULONG TransactionState;
  3464. ULONG Reserved1;
  3465. ULONG Reserved2;
  3466. LONGLONG Reserved3;
  3467. } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
  3468. typedef struct _TXFS_LIST_TRANSACTIONS {
  3469. ULONGLONG NumberOfTransactions;
  3470. ULONGLONG BufferSizeRequired;
  3471. } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
  3472. typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
  3473. _ANONYMOUS_UNION union {
  3474. ULONG BufferLength;
  3475. UCHAR Buffer[1];
  3476. } DUMMYUNIONNAME;
  3477. } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
  3478. typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
  3479. UCHAR Buffer[1];
  3480. } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
  3481. #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
  3482. #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
  3483. typedef struct _TXFS_GET_TRANSACTED_VERSION {
  3484. ULONG ThisBaseVersion;
  3485. ULONG LatestVersion;
  3486. USHORT ThisMiniVersion;
  3487. USHORT FirstMiniVersion;
  3488. USHORT LatestMiniVersion;
  3489. } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
  3490. #define TXFS_SAVEPOINT_SET 0x00000001
  3491. #define TXFS_SAVEPOINT_ROLLBACK 0x00000002
  3492. #define TXFS_SAVEPOINT_CLEAR 0x00000004
  3493. #define TXFS_SAVEPOINT_CLEAR_ALL 0x00000010
  3494. typedef struct _TXFS_SAVEPOINT_INFORMATION {
  3495. HANDLE KtmTransaction;
  3496. ULONG ActionCode;
  3497. ULONG SavepointId;
  3498. } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
  3499. typedef struct _TXFS_CREATE_MINIVERSION_INFO {
  3500. USHORT StructureVersion;
  3501. USHORT StructureLength;
  3502. ULONG BaseVersion;
  3503. USHORT MiniVersion;
  3504. } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
  3505. typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
  3506. BOOLEAN TransactionsActiveAtSnapshot;
  3507. } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
  3508. #endif /* (_WIN32_WINNT >= 0x0600) */
  3509. #if (_WIN32_WINNT >= 0x0601)
  3510. #define MARK_HANDLE_REALTIME (0x00000020)
  3511. #define MARK_HANDLE_NOT_REALTIME (0x00000040)
  3512. #define NO_8DOT3_NAME_PRESENT (0x00000001)
  3513. #define REMOVED_8DOT3_NAME (0x00000002)
  3514. #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
  3515. typedef struct _BOOT_AREA_INFO {
  3516. ULONG BootSectorCount;
  3517. struct {
  3518. LARGE_INTEGER Offset;
  3519. } BootSectors[2];
  3520. } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
  3521. typedef struct _RETRIEVAL_POINTER_BASE {
  3522. LARGE_INTEGER FileAreaOffset;
  3523. } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
  3524. typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
  3525. ULONG VolumeFlags;
  3526. ULONG FlagMask;
  3527. ULONG Version;
  3528. ULONG Reserved;
  3529. } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
  3530. typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
  3531. CHAR FileSystem[9];
  3532. } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
  3533. #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
  3534. #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
  3535. #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
  3536. #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
  3537. #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
  3538. #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
  3539. #define REQUEST_OPLOCK_CURRENT_VERSION 1
  3540. typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
  3541. USHORT StructureVersion;
  3542. USHORT StructureLength;
  3543. ULONG RequestedOplockLevel;
  3544. ULONG Flags;
  3545. } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
  3546. #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
  3547. #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
  3548. typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
  3549. USHORT StructureVersion;
  3550. USHORT StructureLength;
  3551. ULONG OriginalOplockLevel;
  3552. ULONG NewOplockLevel;
  3553. ULONG Flags;
  3554. ACCESS_MASK AccessMode;
  3555. USHORT ShareMode;
  3556. } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
  3557. #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
  3558. typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
  3559. USHORT CurrentMachineSIDOffset;
  3560. USHORT CurrentMachineSIDLength;
  3561. USHORT NewMachineSIDOffset;
  3562. USHORT NewMachineSIDLength;
  3563. } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
  3564. typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
  3565. ULONGLONG NumSDChangedSuccess;
  3566. ULONGLONG NumSDChangedFail;
  3567. ULONGLONG NumSDUnused;
  3568. ULONGLONG NumSDTotal;
  3569. ULONGLONG NumMftSDChangedSuccess;
  3570. ULONGLONG NumMftSDChangedFail;
  3571. ULONGLONG NumMftSDTotal;
  3572. } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
  3573. typedef struct _SD_GLOBAL_CHANGE_INPUT {
  3574. ULONG Flags;
  3575. ULONG ChangeType;
  3576. _ANONYMOUS_UNION union {
  3577. SD_CHANGE_MACHINE_SID_INPUT SdChange;
  3578. } DUMMYUNIONNAME;
  3579. } SD_GLOBAL_CHANGE_INPUT, *PSD_GLOBAL_CHANGE_INPUT;
  3580. typedef struct _SD_GLOBAL_CHANGE_OUTPUT {
  3581. ULONG Flags;
  3582. ULONG ChangeType;
  3583. _ANONYMOUS_UNION union {
  3584. SD_CHANGE_MACHINE_SID_OUTPUT SdChange;
  3585. } DUMMYUNIONNAME;
  3586. } SD_GLOBAL_CHANGE_OUTPUT, *PSD_GLOBAL_CHANGE_OUTPUT;
  3587. #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
  3588. typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
  3589. ULONG ExtendedCode;
  3590. ULONG Length;
  3591. ULONG Flags;
  3592. ULONG Reserved;
  3593. } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
  3594. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
  3595. ULONG Flags;
  3596. ULONG NumberOfClusters;
  3597. LARGE_INTEGER Cluster[1];
  3598. } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
  3599. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
  3600. ULONG Offset;
  3601. ULONG NumberOfMatches;
  3602. ULONG BufferSizeRequired;
  3603. } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
  3604. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
  3605. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
  3606. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
  3607. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
  3608. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
  3609. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
  3610. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
  3611. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
  3612. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
  3613. ULONG OffsetToNext;
  3614. ULONG Flags;
  3615. LARGE_INTEGER Reserved;
  3616. LARGE_INTEGER Cluster;
  3617. WCHAR FileName[1];
  3618. } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
  3619. typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
  3620. ULONG Flags;
  3621. ULONG NumFileTypeIDs;
  3622. GUID FileTypeID[1];
  3623. } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
  3624. #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
  3625. #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
  3626. DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_PAGE_FILE, 0x0d0a64a1, 0x38fc, 0x4db8, 0x9f, 0xe7, 0x3f, 0x43, 0x52, 0xcd, 0x7c, 0x5c);
  3627. DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_HIBERNATION_FILE, 0xb7624d64, 0xb9a3, 0x4cf8, 0x80, 0x11, 0x5b, 0x86, 0xc9, 0x40, 0xe7, 0xb7);
  3628. DEFINE_GUID(FILE_TYPE_NOTIFICATION_GUID_CRASHDUMP_FILE, 0x9d453eb7, 0xd2a6, 0x4dbd, 0xa2, 0xe3, 0xfb, 0xd0, 0xed, 0x91, 0x09, 0xa9);
  3629. #ifndef _VIRTUAL_STORAGE_TYPE_DEFINED
  3630. #define _VIRTUAL_STORAGE_TYPE_DEFINED
  3631. typedef struct _VIRTUAL_STORAGE_TYPE {
  3632. ULONG DeviceId;
  3633. GUID VendorId;
  3634. } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
  3635. #endif
  3636. typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST {
  3637. ULONG RequestLevel;
  3638. ULONG RequestFlags;
  3639. } STORAGE_QUERY_DEPENDENT_VOLUME_REQUEST, *PSTORAGE_QUERY_DEPENDENT_VOLUME_REQUEST;
  3640. #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_HOST_VOLUMES 0x1
  3641. #define QUERY_DEPENDENT_VOLUME_REQUEST_FLAG_GUEST_VOLUMES 0x2
  3642. typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY {
  3643. ULONG EntryLength;
  3644. ULONG DependencyTypeFlags;
  3645. ULONG ProviderSpecificFlags;
  3646. VIRTUAL_STORAGE_TYPE VirtualStorageType;
  3647. } STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY;
  3648. typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY {
  3649. ULONG EntryLength;
  3650. ULONG DependencyTypeFlags;
  3651. ULONG ProviderSpecificFlags;
  3652. VIRTUAL_STORAGE_TYPE VirtualStorageType;
  3653. ULONG AncestorLevel;
  3654. ULONG HostVolumeNameOffset;
  3655. ULONG HostVolumeNameSize;
  3656. ULONG DependentVolumeNameOffset;
  3657. ULONG DependentVolumeNameSize;
  3658. ULONG RelativePathOffset;
  3659. ULONG RelativePathSize;
  3660. ULONG DependentDeviceNameOffset;
  3661. ULONG DependentDeviceNameSize;
  3662. } STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY, *PSTORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY;
  3663. typedef struct _STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE {
  3664. ULONG ResponseLevel;
  3665. ULONG NumberEntries;
  3666. _ANONYMOUS_UNION union {
  3667. STORAGE_QUERY_DEPENDENT_VOLUME_LEV1_ENTRY Lev1Depends[0];
  3668. STORAGE_QUERY_DEPENDENT_VOLUME_LEV2_ENTRY Lev2Depends[0];
  3669. } DUMMYUNIONNAME;
  3670. } STORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE, *PSTORAGE_QUERY_DEPENDENT_VOLUME_RESPONSE;
  3671. #endif /* (_WIN32_WINNT >= 0x0601) */
  3672. typedef struct _FILESYSTEM_STATISTICS {
  3673. USHORT FileSystemType;
  3674. USHORT Version;
  3675. ULONG SizeOfCompleteStructure;
  3676. ULONG UserFileReads;
  3677. ULONG UserFileReadBytes;
  3678. ULONG UserDiskReads;
  3679. ULONG UserFileWrites;
  3680. ULONG UserFileWriteBytes;
  3681. ULONG UserDiskWrites;
  3682. ULONG MetaDataReads;
  3683. ULONG MetaDataReadBytes;
  3684. ULONG MetaDataDiskReads;
  3685. ULONG MetaDataWrites;
  3686. ULONG MetaDataWriteBytes;
  3687. ULONG MetaDataDiskWrites;
  3688. } FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
  3689. #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
  3690. #define FILESYSTEM_STATISTICS_TYPE_FAT 2
  3691. #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
  3692. typedef struct _FAT_STATISTICS {
  3693. ULONG CreateHits;
  3694. ULONG SuccessfulCreates;
  3695. ULONG FailedCreates;
  3696. ULONG NonCachedReads;
  3697. ULONG NonCachedReadBytes;
  3698. ULONG NonCachedWrites;
  3699. ULONG NonCachedWriteBytes;
  3700. ULONG NonCachedDiskReads;
  3701. ULONG NonCachedDiskWrites;
  3702. } FAT_STATISTICS, *PFAT_STATISTICS;
  3703. typedef struct _EXFAT_STATISTICS {
  3704. ULONG CreateHits;
  3705. ULONG SuccessfulCreates;
  3706. ULONG FailedCreates;
  3707. ULONG NonCachedReads;
  3708. ULONG NonCachedReadBytes;
  3709. ULONG NonCachedWrites;
  3710. ULONG NonCachedWriteBytes;
  3711. ULONG NonCachedDiskReads;
  3712. ULONG NonCachedDiskWrites;
  3713. } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
  3714. typedef struct _NTFS_STATISTICS {
  3715. ULONG LogFileFullExceptions;
  3716. ULONG OtherExceptions;
  3717. ULONG MftReads;
  3718. ULONG MftReadBytes;
  3719. ULONG MftWrites;
  3720. ULONG MftWriteBytes;
  3721. struct {
  3722. USHORT Write;
  3723. USHORT Create;
  3724. USHORT SetInfo;
  3725. USHORT Flush;
  3726. } MftWritesUserLevel;
  3727. USHORT MftWritesFlushForLogFileFull;
  3728. USHORT MftWritesLazyWriter;
  3729. USHORT MftWritesUserRequest;
  3730. ULONG Mft2Writes;
  3731. ULONG Mft2WriteBytes;
  3732. struct {
  3733. USHORT Write;
  3734. USHORT Create;
  3735. USHORT SetInfo;
  3736. USHORT Flush;
  3737. } Mft2WritesUserLevel;
  3738. USHORT Mft2WritesFlushForLogFileFull;
  3739. USHORT Mft2WritesLazyWriter;
  3740. USHORT Mft2WritesUserRequest;
  3741. ULONG RootIndexReads;
  3742. ULONG RootIndexReadBytes;
  3743. ULONG RootIndexWrites;
  3744. ULONG RootIndexWriteBytes;
  3745. ULONG BitmapReads;
  3746. ULONG BitmapReadBytes;
  3747. ULONG BitmapWrites;
  3748. ULONG BitmapWriteBytes;
  3749. USHORT BitmapWritesFlushForLogFileFull;
  3750. USHORT BitmapWritesLazyWriter;
  3751. USHORT BitmapWritesUserRequest;
  3752. struct {
  3753. USHORT Write;
  3754. USHORT Create;
  3755. USHORT SetInfo;
  3756. } BitmapWritesUserLevel;
  3757. ULONG MftBitmapReads;
  3758. ULONG MftBitmapReadBytes;
  3759. ULONG MftBitmapWrites;
  3760. ULONG MftBitmapWriteBytes;
  3761. USHORT MftBitmapWritesFlushForLogFileFull;
  3762. USHORT MftBitmapWritesLazyWriter;
  3763. USHORT MftBitmapWritesUserRequest;
  3764. struct {
  3765. USHORT Write;
  3766. USHORT Create;
  3767. USHORT SetInfo;
  3768. USHORT Flush;
  3769. } MftBitmapWritesUserLevel;
  3770. ULONG UserIndexReads;
  3771. ULONG UserIndexReadBytes;
  3772. ULONG UserIndexWrites;
  3773. ULONG UserIndexWriteBytes;
  3774. ULONG LogFileReads;
  3775. ULONG LogFileReadBytes;
  3776. ULONG LogFileWrites;
  3777. ULONG LogFileWriteBytes;
  3778. struct {
  3779. ULONG Calls;
  3780. ULONG Clusters;
  3781. ULONG Hints;
  3782. ULONG RunsReturned;
  3783. ULONG HintsHonored;
  3784. ULONG HintsClusters;
  3785. ULONG Cache;
  3786. ULONG CacheClusters;
  3787. ULONG CacheMiss;
  3788. ULONG CacheMissClusters;
  3789. } Allocate;
  3790. } NTFS_STATISTICS, *PNTFS_STATISTICS;
  3791. #endif /* _FILESYSTEMFSCTL_ */
  3792. #define SYMLINK_FLAG_RELATIVE 1
  3793. typedef struct _REPARSE_DATA_BUFFER {
  3794. ULONG ReparseTag;
  3795. USHORT ReparseDataLength;
  3796. USHORT Reserved;
  3797. _ANONYMOUS_UNION union {
  3798. struct {
  3799. USHORT SubstituteNameOffset;
  3800. USHORT SubstituteNameLength;
  3801. USHORT PrintNameOffset;
  3802. USHORT PrintNameLength;
  3803. ULONG Flags;
  3804. WCHAR PathBuffer[1];
  3805. } SymbolicLinkReparseBuffer;
  3806. struct {
  3807. USHORT SubstituteNameOffset;
  3808. USHORT SubstituteNameLength;
  3809. USHORT PrintNameOffset;
  3810. USHORT PrintNameLength;
  3811. WCHAR PathBuffer[1];
  3812. } MountPointReparseBuffer;
  3813. struct {
  3814. UCHAR DataBuffer[1];
  3815. } GenericReparseBuffer;
  3816. } DUMMYUNIONNAME;
  3817. } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
  3818. #define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
  3819. typedef struct _REPARSE_GUID_DATA_BUFFER {
  3820. ULONG ReparseTag;
  3821. USHORT ReparseDataLength;
  3822. USHORT Reserved;
  3823. GUID ReparseGuid;
  3824. struct {
  3825. UCHAR DataBuffer[1];
  3826. } GenericReparseBuffer;
  3827. } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
  3828. #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
  3829. #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
  3830. /* Reserved reparse tags */
  3831. #define IO_REPARSE_TAG_RESERVED_ZERO (0)
  3832. #define IO_REPARSE_TAG_RESERVED_ONE (1)
  3833. #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
  3834. #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
  3835. #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
  3836. #define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF)
  3837. #define IsReparseTagValid(tag) ( \
  3838. !((tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \
  3839. ((tag) > IO_REPARSE_TAG_RESERVED_RANGE) \
  3840. )
  3841. /* MicroSoft reparse point tags */
  3842. #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
  3843. #define IO_REPARSE_TAG_HSM (0xC0000004L)
  3844. #define IO_REPARSE_TAG_DRIVE_EXTENDER (0x80000005L)
  3845. #define IO_REPARSE_TAG_HSM2 (0x80000006L)
  3846. #define IO_REPARSE_TAG_SIS (0x80000007L)
  3847. #define IO_REPARSE_TAG_WIM (0x80000008L)
  3848. #define IO_REPARSE_TAG_CSV (0x80000009L)
  3849. #define IO_REPARSE_TAG_DFS (0x8000000AL)
  3850. #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
  3851. #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
  3852. #define IO_REPARSE_TAG_IIS_CACHE (0xA0000010L)
  3853. #define IO_REPARSE_TAG_DFSR (0x80000012L)
  3854. #pragma pack(4)
  3855. typedef struct _REPARSE_INDEX_KEY {
  3856. ULONG FileReparseTag;
  3857. LARGE_INTEGER FileId;
  3858. } REPARSE_INDEX_KEY, *PREPARSE_INDEX_KEY;
  3859. #pragma pack()
  3860. #define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS)
  3861. #define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS)
  3862. #define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
  3863. #define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3864. #define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3865. #define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3866. #define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
  3867. #define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3868. #define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
  3869. #define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3870. #define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3871. #define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3872. #define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3873. #define FSCTL_PIPE_GET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3874. #define FSCTL_PIPE_SET_PIPE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3875. #define FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3876. #define FSCTL_PIPE_SET_CONNECTION_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3877. #define FSCTL_PIPE_GET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3878. #define FSCTL_PIPE_SET_HANDLE_ATTRIBUTE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
  3879. #define FSCTL_PIPE_FLUSH CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA)
  3880. #define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
  3881. #define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
  3882. #define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
  3883. #define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
  3884. #define FILE_PIPE_READ_DATA 0x00000000
  3885. #define FILE_PIPE_WRITE_SPACE 0x00000001
  3886. typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
  3887. HANDLE EventHandle;
  3888. ULONG KeyValue;
  3889. } FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
  3890. typedef struct _FILE_PIPE_EVENT_BUFFER {
  3891. ULONG NamedPipeState;
  3892. ULONG EntryType;
  3893. ULONG ByteCount;
  3894. ULONG KeyValue;
  3895. ULONG NumberRequests;
  3896. } FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
  3897. typedef struct _FILE_PIPE_PEEK_BUFFER {
  3898. ULONG NamedPipeState;
  3899. ULONG ReadDataAvailable;
  3900. ULONG NumberOfMessages;
  3901. ULONG MessageLength;
  3902. CHAR Data[1];
  3903. } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
  3904. typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
  3905. LARGE_INTEGER Timeout;
  3906. ULONG NameLength;
  3907. BOOLEAN TimeoutSpecified;
  3908. WCHAR Name[1];
  3909. } FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
  3910. typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
  3911. #if !defined(BUILD_WOW6432)
  3912. PVOID ClientSession;
  3913. PVOID ClientProcess;
  3914. #else
  3915. ULONGLONG ClientSession;
  3916. ULONGLONG ClientProcess;
  3917. #endif
  3918. } FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
  3919. #define FILE_PIPE_COMPUTER_NAME_LENGTH 15
  3920. typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX {
  3921. #if !defined(BUILD_WOW6432)
  3922. PVOID ClientSession;
  3923. PVOID ClientProcess;
  3924. #else
  3925. ULONGLONG ClientSession;
  3926. ULONGLONG ClientProcess;
  3927. #endif
  3928. USHORT ClientComputerNameLength;
  3929. WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1];
  3930. } FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX;
  3931. #define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
  3932. typedef enum _LINK_TRACKING_INFORMATION_TYPE {
  3933. NtfsLinkTrackingInformation,
  3934. DfsLinkTrackingInformation
  3935. } LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE;
  3936. typedef struct _LINK_TRACKING_INFORMATION {
  3937. LINK_TRACKING_INFORMATION_TYPE Type;
  3938. UCHAR VolumeId[16];
  3939. } LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION;
  3940. typedef struct _REMOTE_LINK_TRACKING_INFORMATION {
  3941. PVOID TargetFileObject;
  3942. ULONG TargetLinkTrackingInformationLength;
  3943. UCHAR TargetLinkTrackingInformationBuffer[1];
  3944. } REMOTE_LINK_TRACKING_INFORMATION, *PREMOTE_LINK_TRACKING_INFORMATION;
  3945. #define IO_OPEN_PAGING_FILE 0x0002
  3946. #define IO_OPEN_TARGET_DIRECTORY 0x0004
  3947. #define IO_STOP_ON_SYMLINK 0x0008
  3948. #define IO_MM_PAGING_FILE 0x0010
  3949. typedef VOID
  3950. (NTAPI *PDRIVER_FS_NOTIFICATION) (
  3951. IN PDEVICE_OBJECT DeviceObject,
  3952. IN BOOLEAN FsActive);
  3953. typedef enum _FS_FILTER_SECTION_SYNC_TYPE {
  3954. SyncTypeOther = 0,
  3955. SyncTypeCreateSection
  3956. } FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE;
  3957. typedef enum _FS_FILTER_STREAM_FO_NOTIFICATION_TYPE {
  3958. NotifyTypeCreate = 0,
  3959. NotifyTypeRetired
  3960. } FS_FILTER_STREAM_FO_NOTIFICATION_TYPE, *PFS_FILTER_STREAM_FO_NOTIFICATION_TYPE;
  3961. typedef union _FS_FILTER_PARAMETERS {
  3962. struct {
  3963. PLARGE_INTEGER EndingOffset;
  3964. PERESOURCE *ResourceToRelease;
  3965. } AcquireForModifiedPageWriter;
  3966. struct {
  3967. PERESOURCE ResourceToRelease;
  3968. } ReleaseForModifiedPageWriter;
  3969. struct {
  3970. FS_FILTER_SECTION_SYNC_TYPE SyncType;
  3971. ULONG PageProtection;
  3972. } AcquireForSectionSynchronization;
  3973. struct {
  3974. FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType;
  3975. BOOLEAN POINTER_ALIGNMENT SafeToRecurse;
  3976. } NotifyStreamFileObject;
  3977. struct {
  3978. PVOID Argument1;
  3979. PVOID Argument2;
  3980. PVOID Argument3;
  3981. PVOID Argument4;
  3982. PVOID Argument5;
  3983. } Others;
  3984. } FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS;
  3985. #define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1
  3986. #define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2
  3987. #define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3
  3988. #define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4
  3989. #define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5
  3990. #define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6
  3991. typedef struct _FS_FILTER_CALLBACK_DATA {
  3992. ULONG SizeOfFsFilterCallbackData;
  3993. UCHAR Operation;
  3994. UCHAR Reserved;
  3995. struct _DEVICE_OBJECT *DeviceObject;
  3996. struct _FILE_OBJECT *FileObject;
  3997. FS_FILTER_PARAMETERS Parameters;
  3998. } FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA;
  3999. typedef NTSTATUS
  4000. (NTAPI *PFS_FILTER_CALLBACK) (
  4001. IN PFS_FILTER_CALLBACK_DATA Data,
  4002. OUT PVOID *CompletionContext);
  4003. typedef VOID
  4004. (NTAPI *PFS_FILTER_COMPLETION_CALLBACK) (
  4005. IN PFS_FILTER_CALLBACK_DATA Data,
  4006. IN NTSTATUS OperationStatus,
  4007. IN PVOID CompletionContext);
  4008. typedef struct _FS_FILTER_CALLBACKS {
  4009. ULONG SizeOfFsFilterCallbacks;
  4010. ULONG Reserved;
  4011. PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
  4012. PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
  4013. PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
  4014. PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
  4015. PFS_FILTER_CALLBACK PreAcquireForCcFlush;
  4016. PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
  4017. PFS_FILTER_CALLBACK PreReleaseForCcFlush;
  4018. PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
  4019. PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
  4020. PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
  4021. PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
  4022. PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
  4023. } FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
  4024. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4025. NTKERNELAPI
  4026. NTSTATUS
  4027. NTAPI
  4028. FsRtlRegisterFileSystemFilterCallbacks(
  4029. IN struct _DRIVER_OBJECT *FilterDriverObject,
  4030. IN PFS_FILTER_CALLBACKS Callbacks);
  4031. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4032. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4033. NTKERNELAPI
  4034. NTSTATUS
  4035. NTAPI
  4036. FsRtlNotifyStreamFileObject(
  4037. IN struct _FILE_OBJECT * StreamFileObject,
  4038. IN struct _DEVICE_OBJECT *DeviceObjectHint OPTIONAL,
  4039. IN FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
  4040. IN BOOLEAN SafeToRecurse);
  4041. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4042. #define DO_VERIFY_VOLUME 0x00000002
  4043. #define DO_BUFFERED_IO 0x00000004
  4044. #define DO_EXCLUSIVE 0x00000008
  4045. #define DO_DIRECT_IO 0x00000010
  4046. #define DO_MAP_IO_BUFFER 0x00000020
  4047. #define DO_DEVICE_HAS_NAME 0x00000040
  4048. #define DO_DEVICE_INITIALIZING 0x00000080
  4049. #define DO_SYSTEM_BOOT_PARTITION 0x00000100
  4050. #define DO_LONG_TERM_REQUESTS 0x00000200
  4051. #define DO_NEVER_LAST_DEVICE 0x00000400
  4052. #define DO_SHUTDOWN_REGISTERED 0x00000800
  4053. #define DO_BUS_ENUMERATED_DEVICE 0x00001000
  4054. #define DO_POWER_PAGABLE 0x00002000
  4055. #define DO_POWER_INRUSH 0x00004000
  4056. #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
  4057. #define DO_SUPPORTS_TRANSACTIONS 0x00040000
  4058. #define DO_FORCE_NEITHER_IO 0x00080000
  4059. #define DO_VOLUME_DEVICE_OBJECT 0x00100000
  4060. #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
  4061. #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
  4062. #define DO_DISALLOW_EXECUTE 0x00800000
  4063. extern KSPIN_LOCK IoStatisticsLock;
  4064. extern ULONG IoReadOperationCount;
  4065. extern ULONG IoWriteOperationCount;
  4066. extern ULONG IoOtherOperationCount;
  4067. extern LARGE_INTEGER IoReadTransferCount;
  4068. extern LARGE_INTEGER IoWriteTransferCount;
  4069. extern LARGE_INTEGER IoOtherTransferCount;
  4070. #define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64
  4071. #define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024
  4072. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4073. typedef struct _IO_PRIORITY_INFO {
  4074. ULONG Size;
  4075. ULONG ThreadPriority;
  4076. ULONG PagePriority;
  4077. IO_PRIORITY_HINT IoPriority;
  4078. } IO_PRIORITY_INFO, *PIO_PRIORITY_INFO;
  4079. #endif
  4080. typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION {
  4081. ULONG Attributes;
  4082. ACCESS_MASK GrantedAccess;
  4083. ULONG HandleCount;
  4084. ULONG PointerCount;
  4085. ULONG Reserved[10];
  4086. } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION;
  4087. typedef struct _PUBLIC_OBJECT_TYPE_INFORMATION {
  4088. UNICODE_STRING TypeName;
  4089. ULONG Reserved [22];
  4090. } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION;
  4091. typedef struct _SECURITY_CLIENT_CONTEXT {
  4092. SECURITY_QUALITY_OF_SERVICE SecurityQos;
  4093. PACCESS_TOKEN ClientToken;
  4094. BOOLEAN DirectlyAccessClientToken;
  4095. BOOLEAN DirectAccessEffectiveOnly;
  4096. BOOLEAN ServerIsRemote;
  4097. TOKEN_CONTROL ClientTokenControl;
  4098. } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
  4099. #define SYSTEM_PAGE_PRIORITY_BITS 3
  4100. #define SYSTEM_PAGE_PRIORITY_LEVELS (1 << SYSTEM_PAGE_PRIORITY_BITS)
  4101. typedef struct _KAPC_STATE {
  4102. LIST_ENTRY ApcListHead[MaximumMode];
  4103. PKPROCESS Process;
  4104. BOOLEAN KernelApcInProgress;
  4105. BOOLEAN KernelApcPending;
  4106. BOOLEAN UserApcPending;
  4107. } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
  4108. #define KAPC_STATE_ACTUAL_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
  4109. #define ASSERT_QUEUE(Q) ASSERT(((Q)->Header.Type & KOBJECT_TYPE_MASK) == QueueObject);
  4110. typedef struct _KQUEUE {
  4111. DISPATCHER_HEADER Header;
  4112. LIST_ENTRY EntryListHead;
  4113. volatile ULONG CurrentCount;
  4114. ULONG MaximumCount;
  4115. LIST_ENTRY ThreadListHead;
  4116. } KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
  4117. /******************************************************************************
  4118. * Kernel Functions *
  4119. ******************************************************************************/
  4120. NTSTATUS
  4121. NTAPI
  4122. KeGetProcessorNumberFromIndex(
  4123. IN ULONG ProcIndex,
  4124. OUT PPROCESSOR_NUMBER ProcNumber);
  4125. ULONG
  4126. NTAPI
  4127. KeGetProcessorIndexFromNumber(
  4128. IN PPROCESSOR_NUMBER ProcNumber);
  4129. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4130. NTKERNELAPI
  4131. VOID
  4132. NTAPI
  4133. KeInitializeMutant(
  4134. OUT PRKMUTANT Mutant,
  4135. IN BOOLEAN InitialOwner);
  4136. NTKERNELAPI
  4137. LONG
  4138. NTAPI
  4139. KeReadStateMutant(
  4140. IN PRKMUTANT Mutant);
  4141. NTKERNELAPI
  4142. LONG
  4143. NTAPI
  4144. KeReleaseMutant(
  4145. IN OUT PRKMUTANT Mutant,
  4146. IN KPRIORITY Increment,
  4147. IN BOOLEAN Abandoned,
  4148. IN BOOLEAN Wait);
  4149. NTKERNELAPI
  4150. VOID
  4151. NTAPI
  4152. KeInitializeQueue(
  4153. OUT PRKQUEUE Queue,
  4154. IN ULONG Count);
  4155. NTKERNELAPI
  4156. LONG
  4157. NTAPI
  4158. KeReadStateQueue(
  4159. IN PRKQUEUE Queue);
  4160. NTKERNELAPI
  4161. LONG
  4162. NTAPI
  4163. KeInsertQueue(
  4164. IN OUT PRKQUEUE Queue,
  4165. IN OUT PLIST_ENTRY Entry);
  4166. NTKERNELAPI
  4167. LONG
  4168. NTAPI
  4169. KeInsertHeadQueue(
  4170. IN OUT PRKQUEUE Queue,
  4171. IN OUT PLIST_ENTRY Entry);
  4172. NTKERNELAPI
  4173. PLIST_ENTRY
  4174. NTAPI
  4175. KeRemoveQueue(
  4176. IN OUT PRKQUEUE Queue,
  4177. IN KPROCESSOR_MODE WaitMode,
  4178. IN PLARGE_INTEGER Timeout OPTIONAL);
  4179. NTKERNELAPI
  4180. VOID
  4181. NTAPI
  4182. KeAttachProcess(
  4183. IN OUT PKPROCESS Process);
  4184. NTKERNELAPI
  4185. VOID
  4186. NTAPI
  4187. KeDetachProcess(
  4188. VOID);
  4189. NTKERNELAPI
  4190. PLIST_ENTRY
  4191. NTAPI
  4192. KeRundownQueue(
  4193. IN OUT PRKQUEUE Queue);
  4194. NTKERNELAPI
  4195. VOID
  4196. NTAPI
  4197. KeStackAttachProcess(
  4198. IN OUT PKPROCESS Process,
  4199. OUT PKAPC_STATE ApcState);
  4200. NTKERNELAPI
  4201. VOID
  4202. NTAPI
  4203. KeUnstackDetachProcess(
  4204. IN PKAPC_STATE ApcState);
  4205. NTKERNELAPI
  4206. UCHAR
  4207. NTAPI
  4208. KeSetIdealProcessorThread(
  4209. IN OUT PKTHREAD Thread,
  4210. IN UCHAR Processor);
  4211. NTKERNELAPI
  4212. BOOLEAN
  4213. NTAPI
  4214. KeSetKernelStackSwapEnable(
  4215. IN BOOLEAN Enable);
  4216. #if defined(_X86_)
  4217. NTHALAPI
  4218. KIRQL
  4219. FASTCALL
  4220. KeAcquireSpinLockRaiseToSynch(
  4221. IN OUT PKSPIN_LOCK SpinLock);
  4222. #else
  4223. NTKERNELAPI
  4224. KIRQL
  4225. KeAcquireSpinLockRaiseToSynch(
  4226. IN OUT PKSPIN_LOCK SpinLock);
  4227. #endif
  4228. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4229. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4230. _DECL_HAL_KE_IMPORT
  4231. KIRQL
  4232. FASTCALL
  4233. KeAcquireQueuedSpinLock(
  4234. IN OUT KSPIN_LOCK_QUEUE_NUMBER Number);
  4235. _DECL_HAL_KE_IMPORT
  4236. VOID
  4237. FASTCALL
  4238. KeReleaseQueuedSpinLock(
  4239. IN OUT KSPIN_LOCK_QUEUE_NUMBER Number,
  4240. IN KIRQL OldIrql);
  4241. _DECL_HAL_KE_IMPORT
  4242. LOGICAL
  4243. FASTCALL
  4244. KeTryToAcquireQueuedSpinLock(
  4245. IN KSPIN_LOCK_QUEUE_NUMBER Number,
  4246. OUT PKIRQL OldIrql);
  4247. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4248. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4249. NTKERNELAPI
  4250. VOID
  4251. KeQueryOwnerMutant(
  4252. IN PKMUTANT Mutant,
  4253. OUT PCLIENT_ID ClientId);
  4254. NTKERNELAPI
  4255. ULONG
  4256. KeRemoveQueueEx (
  4257. IN OUT PKQUEUE Queue,
  4258. IN KPROCESSOR_MODE WaitMode,
  4259. IN BOOLEAN Alertable,
  4260. IN PLARGE_INTEGER Timeout OPTIONAL,
  4261. OUT PLIST_ENTRY *EntryArray,
  4262. IN ULONG Count);
  4263. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4264. #define INVALID_PROCESSOR_INDEX 0xffffffff
  4265. #define EX_PUSH_LOCK ULONG_PTR
  4266. #define PEX_PUSH_LOCK PULONG_PTR
  4267. /******************************************************************************
  4268. * Executive Functions *
  4269. ******************************************************************************/
  4270. #define ExDisableResourceBoost ExDisableResourceBoostLite
  4271. VOID
  4272. ExInitializePushLock (
  4273. OUT PEX_PUSH_LOCK PushLock);
  4274. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4275. NTKERNELAPI
  4276. SIZE_T
  4277. NTAPI
  4278. ExQueryPoolBlockSize(
  4279. IN PVOID PoolBlock,
  4280. OUT PBOOLEAN QuotaCharged);
  4281. VOID
  4282. ExAdjustLookasideDepth(
  4283. VOID);
  4284. NTKERNELAPI
  4285. VOID
  4286. NTAPI
  4287. ExDisableResourceBoostLite(
  4288. IN PERESOURCE Resource);
  4289. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4290. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4291. PSLIST_ENTRY
  4292. FASTCALL
  4293. InterlockedPushListSList(
  4294. IN OUT PSLIST_HEADER ListHead,
  4295. IN OUT PSLIST_ENTRY List,
  4296. IN OUT PSLIST_ENTRY ListEnd,
  4297. IN ULONG Count);
  4298. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4299. /******************************************************************************
  4300. * Security Manager Functions *
  4301. ******************************************************************************/
  4302. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4303. NTKERNELAPI
  4304. VOID
  4305. NTAPI
  4306. SeReleaseSubjectContext(
  4307. IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
  4308. NTKERNELAPI
  4309. BOOLEAN
  4310. NTAPI
  4311. SePrivilegeCheck(
  4312. IN OUT PPRIVILEGE_SET RequiredPrivileges,
  4313. IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
  4314. IN KPROCESSOR_MODE AccessMode);
  4315. NTKERNELAPI
  4316. VOID
  4317. NTAPI
  4318. SeOpenObjectAuditAlarm(
  4319. IN PUNICODE_STRING ObjectTypeName,
  4320. IN PVOID Object OPTIONAL,
  4321. IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
  4322. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4323. IN PACCESS_STATE AccessState,
  4324. IN BOOLEAN ObjectCreated,
  4325. IN BOOLEAN AccessGranted,
  4326. IN KPROCESSOR_MODE AccessMode,
  4327. OUT PBOOLEAN GenerateOnClose);
  4328. NTKERNELAPI
  4329. VOID
  4330. NTAPI
  4331. SeOpenObjectForDeleteAuditAlarm(
  4332. IN PUNICODE_STRING ObjectTypeName,
  4333. IN PVOID Object OPTIONAL,
  4334. IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
  4335. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4336. IN PACCESS_STATE AccessState,
  4337. IN BOOLEAN ObjectCreated,
  4338. IN BOOLEAN AccessGranted,
  4339. IN KPROCESSOR_MODE AccessMode,
  4340. OUT PBOOLEAN GenerateOnClose);
  4341. NTKERNELAPI
  4342. VOID
  4343. NTAPI
  4344. SeDeleteObjectAuditAlarm(
  4345. IN PVOID Object,
  4346. IN HANDLE Handle);
  4347. NTKERNELAPI
  4348. TOKEN_TYPE
  4349. NTAPI
  4350. SeTokenType(
  4351. IN PACCESS_TOKEN Token);
  4352. NTKERNELAPI
  4353. BOOLEAN
  4354. NTAPI
  4355. SeTokenIsAdmin(
  4356. IN PACCESS_TOKEN Token);
  4357. NTKERNELAPI
  4358. BOOLEAN
  4359. NTAPI
  4360. SeTokenIsRestricted(
  4361. IN PACCESS_TOKEN Token);
  4362. NTKERNELAPI
  4363. NTSTATUS
  4364. NTAPI
  4365. SeQueryAuthenticationIdToken(
  4366. IN PACCESS_TOKEN Token,
  4367. OUT PLUID AuthenticationId);
  4368. NTKERNELAPI
  4369. NTSTATUS
  4370. NTAPI
  4371. SeQuerySessionIdToken(
  4372. IN PACCESS_TOKEN Token,
  4373. OUT PULONG SessionId);
  4374. NTKERNELAPI
  4375. NTSTATUS
  4376. NTAPI
  4377. SeCreateClientSecurity(
  4378. IN PETHREAD ClientThread,
  4379. IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
  4380. IN BOOLEAN RemoteSession,
  4381. OUT PSECURITY_CLIENT_CONTEXT ClientContext);
  4382. NTKERNELAPI
  4383. VOID
  4384. NTAPI
  4385. SeImpersonateClient(
  4386. IN PSECURITY_CLIENT_CONTEXT ClientContext,
  4387. IN PETHREAD ServerThread OPTIONAL);
  4388. NTKERNELAPI
  4389. NTSTATUS
  4390. NTAPI
  4391. SeImpersonateClientEx(
  4392. IN PSECURITY_CLIENT_CONTEXT ClientContext,
  4393. IN PETHREAD ServerThread OPTIONAL);
  4394. NTKERNELAPI
  4395. NTSTATUS
  4396. NTAPI
  4397. SeCreateClientSecurityFromSubjectContext(
  4398. IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
  4399. IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos,
  4400. IN BOOLEAN ServerIsRemote,
  4401. OUT PSECURITY_CLIENT_CONTEXT ClientContext);
  4402. NTKERNELAPI
  4403. NTSTATUS
  4404. NTAPI
  4405. SeQuerySecurityDescriptorInfo(
  4406. IN PSECURITY_INFORMATION SecurityInformation,
  4407. OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  4408. IN OUT PULONG Length,
  4409. IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
  4410. NTKERNELAPI
  4411. NTSTATUS
  4412. NTAPI
  4413. SeSetSecurityDescriptorInfo(
  4414. IN PVOID Object OPTIONAL,
  4415. IN PSECURITY_INFORMATION SecurityInformation,
  4416. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4417. IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  4418. IN POOL_TYPE PoolType,
  4419. IN PGENERIC_MAPPING GenericMapping);
  4420. NTKERNELAPI
  4421. NTSTATUS
  4422. NTAPI
  4423. SeSetSecurityDescriptorInfoEx(
  4424. IN PVOID Object OPTIONAL,
  4425. IN PSECURITY_INFORMATION SecurityInformation,
  4426. IN PSECURITY_DESCRIPTOR ModificationDescriptor,
  4427. IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
  4428. IN ULONG AutoInheritFlags,
  4429. IN POOL_TYPE PoolType,
  4430. IN PGENERIC_MAPPING GenericMapping);
  4431. NTKERNELAPI
  4432. NTSTATUS
  4433. NTAPI
  4434. SeAppendPrivileges(
  4435. IN OUT PACCESS_STATE AccessState,
  4436. IN PPRIVILEGE_SET Privileges);
  4437. NTKERNELAPI
  4438. BOOLEAN
  4439. NTAPI
  4440. SeAuditingFileEvents(
  4441. IN BOOLEAN AccessGranted,
  4442. IN PSECURITY_DESCRIPTOR SecurityDescriptor);
  4443. NTKERNELAPI
  4444. BOOLEAN
  4445. NTAPI
  4446. SeAuditingFileOrGlobalEvents(
  4447. IN BOOLEAN AccessGranted,
  4448. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4449. IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext);
  4450. VOID
  4451. NTAPI
  4452. SeSetAccessStateGenericMapping(
  4453. IN OUT PACCESS_STATE AccessState,
  4454. IN PGENERIC_MAPPING GenericMapping);
  4455. NTKERNELAPI
  4456. NTSTATUS
  4457. NTAPI
  4458. SeRegisterLogonSessionTerminatedRoutine(
  4459. IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
  4460. NTKERNELAPI
  4461. NTSTATUS
  4462. NTAPI
  4463. SeUnregisterLogonSessionTerminatedRoutine(
  4464. IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
  4465. NTKERNELAPI
  4466. NTSTATUS
  4467. NTAPI
  4468. SeMarkLogonSessionForTerminationNotification(
  4469. IN PLUID LogonId);
  4470. NTKERNELAPI
  4471. NTSTATUS
  4472. NTAPI
  4473. SeQueryInformationToken(
  4474. IN PACCESS_TOKEN Token,
  4475. IN TOKEN_INFORMATION_CLASS TokenInformationClass,
  4476. OUT PVOID *TokenInformation);
  4477. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4478. #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
  4479. NTKERNELAPI
  4480. BOOLEAN
  4481. NTAPI
  4482. SeAuditingHardLinkEvents(
  4483. IN BOOLEAN AccessGranted,
  4484. IN PSECURITY_DESCRIPTOR SecurityDescriptor);
  4485. #endif
  4486. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4487. NTKERNELAPI
  4488. NTSTATUS
  4489. NTAPI
  4490. SeFilterToken(
  4491. IN PACCESS_TOKEN ExistingToken,
  4492. IN ULONG Flags,
  4493. IN PTOKEN_GROUPS SidsToDisable OPTIONAL,
  4494. IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL,
  4495. IN PTOKEN_GROUPS RestrictedSids OPTIONAL,
  4496. OUT PACCESS_TOKEN *FilteredToken);
  4497. NTKERNELAPI
  4498. VOID
  4499. NTAPI
  4500. SeAuditHardLinkCreation(
  4501. IN PUNICODE_STRING FileName,
  4502. IN PUNICODE_STRING LinkName,
  4503. IN BOOLEAN bSuccess);
  4504. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4505. #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
  4506. NTKERNELAPI
  4507. BOOLEAN
  4508. NTAPI
  4509. SeAuditingFileEventsWithContext(
  4510. IN BOOLEAN AccessGranted,
  4511. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4512. IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
  4513. NTKERNELAPI
  4514. BOOLEAN
  4515. NTAPI
  4516. SeAuditingHardLinkEventsWithContext(
  4517. IN BOOLEAN AccessGranted,
  4518. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4519. IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
  4520. #endif
  4521. #if (NTDDI_VERSION >= NTDDI_VISTA)
  4522. NTKERNELAPI
  4523. VOID
  4524. NTAPI
  4525. SeOpenObjectAuditAlarmWithTransaction(
  4526. IN PUNICODE_STRING ObjectTypeName,
  4527. IN PVOID Object OPTIONAL,
  4528. IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
  4529. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4530. IN PACCESS_STATE AccessState,
  4531. IN BOOLEAN ObjectCreated,
  4532. IN BOOLEAN AccessGranted,
  4533. IN KPROCESSOR_MODE AccessMode,
  4534. IN GUID *TransactionId OPTIONAL,
  4535. OUT PBOOLEAN GenerateOnClose);
  4536. NTKERNELAPI
  4537. VOID
  4538. NTAPI
  4539. SeOpenObjectForDeleteAuditAlarmWithTransaction(
  4540. IN PUNICODE_STRING ObjectTypeName,
  4541. IN PVOID Object OPTIONAL,
  4542. IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
  4543. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4544. IN PACCESS_STATE AccessState,
  4545. IN BOOLEAN ObjectCreated,
  4546. IN BOOLEAN AccessGranted,
  4547. IN KPROCESSOR_MODE AccessMode,
  4548. IN GUID *TransactionId OPTIONAL,
  4549. OUT PBOOLEAN GenerateOnClose);
  4550. NTKERNELAPI
  4551. VOID
  4552. NTAPI
  4553. SeExamineSacl(
  4554. IN PACL Sacl,
  4555. IN PACCESS_TOKEN Token,
  4556. IN ACCESS_MASK DesiredAccess,
  4557. IN BOOLEAN AccessGranted,
  4558. OUT PBOOLEAN GenerateAudit,
  4559. OUT PBOOLEAN GenerateAlarm);
  4560. NTKERNELAPI
  4561. VOID
  4562. NTAPI
  4563. SeDeleteObjectAuditAlarmWithTransaction(
  4564. IN PVOID Object,
  4565. IN HANDLE Handle,
  4566. IN GUID *TransactionId OPTIONAL);
  4567. NTKERNELAPI
  4568. VOID
  4569. NTAPI
  4570. SeQueryTokenIntegrity(
  4571. IN PACCESS_TOKEN Token,
  4572. IN OUT PSID_AND_ATTRIBUTES IntegritySA);
  4573. NTKERNELAPI
  4574. NTSTATUS
  4575. NTAPI
  4576. SeSetSessionIdToken(
  4577. IN PACCESS_TOKEN Token,
  4578. IN ULONG SessionId);
  4579. NTKERNELAPI
  4580. VOID
  4581. NTAPI
  4582. SeAuditHardLinkCreationWithTransaction(
  4583. IN PUNICODE_STRING FileName,
  4584. IN PUNICODE_STRING LinkName,
  4585. IN BOOLEAN bSuccess,
  4586. IN GUID *TransactionId OPTIONAL);
  4587. NTKERNELAPI
  4588. VOID
  4589. NTAPI
  4590. SeAuditTransactionStateChange(
  4591. IN GUID *TransactionId,
  4592. IN GUID *ResourceManagerId,
  4593. IN ULONG NewTransactionState);
  4594. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  4595. #if (NTDDI_VERSION >= NTDDI_VISTA || (NTDDI_VERSION >= NTDDI_WINXPSP2 && NTDDI_VERSION < NTDDI_WS03))
  4596. NTKERNELAPI
  4597. BOOLEAN
  4598. NTAPI
  4599. SeTokenIsWriteRestricted(
  4600. IN PACCESS_TOKEN Token);
  4601. #endif
  4602. #if (NTDDI_VERSION >= NTDDI_WIN7)
  4603. NTKERNELAPI
  4604. BOOLEAN
  4605. NTAPI
  4606. SeAuditingAnyFileEventsWithContext(
  4607. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4608. IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext OPTIONAL);
  4609. NTKERNELAPI
  4610. VOID
  4611. NTAPI
  4612. SeExamineGlobalSacl(
  4613. IN PUNICODE_STRING ObjectType,
  4614. IN PACCESS_TOKEN Token,
  4615. IN ACCESS_MASK DesiredAccess,
  4616. IN BOOLEAN AccessGranted,
  4617. IN OUT PBOOLEAN GenerateAudit,
  4618. IN OUT PBOOLEAN GenerateAlarm OPTIONAL);
  4619. NTKERNELAPI
  4620. VOID
  4621. NTAPI
  4622. SeMaximumAuditMaskFromGlobalSacl(
  4623. IN PUNICODE_STRING ObjectTypeName OPTIONAL,
  4624. IN ACCESS_MASK GrantedAccess,
  4625. IN PACCESS_TOKEN Token,
  4626. IN OUT PACCESS_MASK AuditMask);
  4627. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  4628. NTSTATUS
  4629. NTAPI
  4630. SeReportSecurityEventWithSubCategory(
  4631. IN ULONG Flags,
  4632. IN PUNICODE_STRING SourceName,
  4633. IN PSID UserSid OPTIONAL,
  4634. IN PSE_ADT_PARAMETER_ARRAY AuditParameters,
  4635. IN ULONG AuditSubcategoryId);
  4636. BOOLEAN
  4637. NTAPI
  4638. SeAccessCheckFromState(
  4639. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  4640. IN PTOKEN_ACCESS_INFORMATION PrimaryTokenInformation,
  4641. IN PTOKEN_ACCESS_INFORMATION ClientTokenInformation OPTIONAL,
  4642. IN ACCESS_MASK DesiredAccess,
  4643. IN ACCESS_MASK PreviouslyGrantedAccess,
  4644. OUT PPRIVILEGE_SET *Privileges OPTIONAL,
  4645. IN PGENERIC_MAPPING GenericMapping,
  4646. IN KPROCESSOR_MODE AccessMode,
  4647. OUT PACCESS_MASK GrantedAccess,
  4648. OUT PNTSTATUS AccessStatus);
  4649. NTKERNELAPI
  4650. VOID
  4651. NTAPI
  4652. SeFreePrivileges(
  4653. IN PPRIVILEGE_SET Privileges);
  4654. NTSTATUS
  4655. NTAPI
  4656. SeLocateProcessImageName(
  4657. IN OUT PEPROCESS Process,
  4658. OUT PUNICODE_STRING *pImageFileName);
  4659. #define SeLengthSid( Sid ) \
  4660. (8 + (4 * ((SID *)Sid)->SubAuthorityCount))
  4661. #define SeDeleteClientSecurity(C) { \
  4662. if (SeTokenType((C)->ClientToken) == TokenPrimary) { \
  4663. PsDereferencePrimaryToken( (C)->ClientToken ); \
  4664. } else { \
  4665. PsDereferenceImpersonationToken( (C)->ClientToken ); \
  4666. } \
  4667. }
  4668. #define SeStopImpersonatingClient() PsRevertToSelf()
  4669. #define SeQuerySubjectContextToken( SubjectContext ) \
  4670. ( ARGUMENT_PRESENT( \
  4671. ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \
  4672. ) ? \
  4673. ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \
  4674. ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken )
  4675. extern NTKERNELAPI PSE_EXPORTS SeExports;
  4676. /******************************************************************************
  4677. * Process Manager Functions *
  4678. ******************************************************************************/
  4679. NTKERNELAPI
  4680. NTSTATUS
  4681. NTAPI
  4682. PsLookupProcessByProcessId(
  4683. IN HANDLE ProcessId,
  4684. OUT PEPROCESS *Process);
  4685. NTKERNELAPI
  4686. NTSTATUS
  4687. NTAPI
  4688. PsLookupThreadByThreadId(
  4689. IN HANDLE UniqueThreadId,
  4690. OUT PETHREAD *Thread);
  4691. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4692. NTKERNELAPI
  4693. PACCESS_TOKEN
  4694. NTAPI
  4695. PsReferenceImpersonationToken(
  4696. IN OUT PETHREAD Thread,
  4697. OUT PBOOLEAN CopyOnOpen,
  4698. OUT PBOOLEAN EffectiveOnly,
  4699. OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
  4700. NTKERNELAPI
  4701. LARGE_INTEGER
  4702. NTAPI
  4703. PsGetProcessExitTime(VOID);
  4704. NTKERNELAPI
  4705. BOOLEAN
  4706. NTAPI
  4707. PsIsThreadTerminating(
  4708. IN PETHREAD Thread);
  4709. NTKERNELAPI
  4710. NTSTATUS
  4711. NTAPI
  4712. PsImpersonateClient(
  4713. IN OUT PETHREAD Thread,
  4714. IN PACCESS_TOKEN Token,
  4715. IN BOOLEAN CopyOnOpen,
  4716. IN BOOLEAN EffectiveOnly,
  4717. IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel);
  4718. NTKERNELAPI
  4719. BOOLEAN
  4720. NTAPI
  4721. PsDisableImpersonation(
  4722. IN OUT PETHREAD Thread,
  4723. IN OUT PSE_IMPERSONATION_STATE ImpersonationState);
  4724. NTKERNELAPI
  4725. VOID
  4726. NTAPI
  4727. PsRestoreImpersonation(
  4728. IN PETHREAD Thread,
  4729. IN PSE_IMPERSONATION_STATE ImpersonationState);
  4730. NTKERNELAPI
  4731. VOID
  4732. NTAPI
  4733. PsRevertToSelf(VOID);
  4734. NTKERNELAPI
  4735. VOID
  4736. NTAPI
  4737. PsChargePoolQuota(
  4738. IN PEPROCESS Process,
  4739. IN POOL_TYPE PoolType,
  4740. IN ULONG_PTR Amount);
  4741. NTKERNELAPI
  4742. VOID
  4743. NTAPI
  4744. PsReturnPoolQuota(
  4745. IN PEPROCESS Process,
  4746. IN POOL_TYPE PoolType,
  4747. IN ULONG_PTR Amount);
  4748. NTKERNELAPI
  4749. NTSTATUS
  4750. NTAPI
  4751. PsAssignImpersonationToken(
  4752. IN PETHREAD Thread,
  4753. IN HANDLE Token OPTIONAL);
  4754. NTKERNELAPI
  4755. HANDLE
  4756. NTAPI
  4757. PsReferencePrimaryToken(
  4758. IN OUT PEPROCESS Process);
  4759. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  4760. #if (NTDDI_VERSION >= NTDDI_WINXP)
  4761. NTKERNELAPI
  4762. VOID
  4763. NTAPI
  4764. PsDereferencePrimaryToken(
  4765. IN PACCESS_TOKEN PrimaryToken);
  4766. NTKERNELAPI
  4767. VOID
  4768. NTAPI
  4769. PsDereferenceImpersonationToken(
  4770. IN PACCESS_TOKEN ImpersonationToken);
  4771. NTKERNELAPI
  4772. NTSTATUS
  4773. NTAPI
  4774. PsChargeProcessPoolQuota(
  4775. IN PEPROCESS Process,
  4776. IN POOL_TYPE PoolType,
  4777. IN ULONG_PTR Amount);
  4778. NTKERNELAPI
  4779. BOOLEAN
  4780. NTAPI
  4781. PsIsSystemThread(
  4782. IN PETHREAD Thread);
  4783. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  4784. /******************************************************************************
  4785. * I/O Manager Functions *
  4786. ******************************************************************************/
  4787. #define IoIsFileOpenedExclusively(FileObject) ( \
  4788. (BOOLEAN) !( \
  4789. (FileObject)->SharedRead || \
  4790. (FileObject)->SharedWrite || \
  4791. (FileObject)->SharedDelete \
  4792. ) \
  4793. )
  4794. #if (NTDDI_VERSION == NTDDI_WIN2K)
  4795. NTKERNELAPI
  4796. NTSTATUS
  4797. NTAPI
  4798. IoRegisterFsRegistrationChangeEx(
  4799. IN PDRIVER_OBJECT DriverObject,
  4800. IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
  4801. #endif
  4802. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  4803. NTKERNELAPI
  4804. VOID
  4805. NTAPI
  4806. IoAcquireVpbSpinLock(
  4807. OUT PKIRQL Irql);
  4808. NTKERNELAPI
  4809. NTSTATUS
  4810. NTAPI
  4811. IoCheckDesiredAccess(
  4812. IN OUT PACCESS_MASK DesiredAccess,
  4813. IN ACCESS_MASK GrantedAccess);
  4814. NTKERNELAPI
  4815. NTSTATUS
  4816. NTAPI
  4817. IoCheckEaBufferValidity(
  4818. IN PFILE_FULL_EA_INFORMATION EaBuffer,
  4819. IN ULONG EaLength,
  4820. OUT PULONG ErrorOffset);
  4821. NTKERNELAPI
  4822. NTSTATUS
  4823. NTAPI
  4824. IoCheckFunctionAccess(
  4825. IN ACCESS_MASK GrantedAccess,
  4826. IN UCHAR MajorFunction,
  4827. IN UCHAR MinorFunction,
  4828. IN ULONG IoControlCode,
  4829. IN PVOID Argument1 OPTIONAL,
  4830. IN PVOID Argument2 OPTIONAL);
  4831. NTKERNELAPI
  4832. NTSTATUS
  4833. NTAPI
  4834. IoCheckQuerySetFileInformation(
  4835. IN FILE_INFORMATION_CLASS FileInformationClass,
  4836. IN ULONG Length,
  4837. IN BOOLEAN SetOperation);
  4838. NTKERNELAPI
  4839. NTSTATUS
  4840. NTAPI
  4841. IoCheckQuerySetVolumeInformation(
  4842. IN FS_INFORMATION_CLASS FsInformationClass,
  4843. IN ULONG Length,
  4844. IN BOOLEAN SetOperation);
  4845. NTKERNELAPI
  4846. NTSTATUS
  4847. NTAPI
  4848. IoCheckQuotaBufferValidity(
  4849. IN PFILE_QUOTA_INFORMATION QuotaBuffer,
  4850. IN ULONG QuotaLength,
  4851. OUT PULONG ErrorOffset);
  4852. NTKERNELAPI
  4853. PFILE_OBJECT
  4854. NTAPI
  4855. IoCreateStreamFileObject(
  4856. IN PFILE_OBJECT FileObject OPTIONAL,
  4857. IN PDEVICE_OBJECT DeviceObject OPTIONAL);
  4858. NTKERNELAPI
  4859. PFILE_OBJECT
  4860. NTAPI
  4861. IoCreateStreamFileObjectLite(
  4862. IN PFILE_OBJECT FileObject OPTIONAL,
  4863. IN PDEVICE_OBJECT DeviceObject OPTIONAL);
  4864. NTKERNELAPI
  4865. BOOLEAN
  4866. NTAPI
  4867. IoFastQueryNetworkAttributes(
  4868. IN POBJECT_ATTRIBUTES ObjectAttributes,
  4869. IN ACCESS_MASK DesiredAccess,
  4870. IN ULONG OpenOptions,
  4871. OUT PIO_STATUS_BLOCK IoStatus,
  4872. OUT PFILE_NETWORK_OPEN_INFORMATION Buffer);
  4873. NTKERNELAPI
  4874. NTSTATUS
  4875. NTAPI
  4876. IoPageRead(
  4877. IN PFILE_OBJECT FileObject,
  4878. IN PMDL Mdl,
  4879. IN PLARGE_INTEGER Offset,
  4880. IN PKEVENT Event,
  4881. OUT PIO_STATUS_BLOCK IoStatusBlock);
  4882. NTKERNELAPI
  4883. PDEVICE_OBJECT
  4884. NTAPI
  4885. IoGetBaseFileSystemDeviceObject(
  4886. IN PFILE_OBJECT FileObject);
  4887. NTKERNELAPI
  4888. PCONFIGURATION_INFORMATION
  4889. NTAPI
  4890. IoGetConfigurationInformation(VOID);
  4891. NTKERNELAPI
  4892. ULONG
  4893. NTAPI
  4894. IoGetRequestorProcessId(
  4895. IN PIRP Irp);
  4896. NTKERNELAPI
  4897. PEPROCESS
  4898. NTAPI
  4899. IoGetRequestorProcess(
  4900. IN PIRP Irp);
  4901. NTKERNELAPI
  4902. PIRP
  4903. NTAPI
  4904. IoGetTopLevelIrp(VOID);
  4905. NTKERNELAPI
  4906. BOOLEAN
  4907. NTAPI
  4908. IoIsOperationSynchronous(
  4909. IN PIRP Irp);
  4910. NTKERNELAPI
  4911. BOOLEAN
  4912. NTAPI
  4913. IoIsSystemThread(
  4914. IN PETHREAD Thread);
  4915. NTKERNELAPI
  4916. BOOLEAN
  4917. NTAPI
  4918. IoIsValidNameGraftingBuffer(
  4919. IN PIRP Irp,
  4920. IN PREPARSE_DATA_BUFFER ReparseBuffer);
  4921. NTKERNELAPI
  4922. NTSTATUS
  4923. NTAPI
  4924. IoQueryFileInformation(
  4925. IN PFILE_OBJECT FileObject,
  4926. IN FILE_INFORMATION_CLASS FileInformationClass,
  4927. IN ULONG Length,
  4928. OUT PVOID FileInformation,
  4929. OUT PULONG ReturnedLength);
  4930. NTKERNELAPI
  4931. NTSTATUS
  4932. NTAPI
  4933. IoQueryVolumeInformation(
  4934. IN PFILE_OBJECT FileObject,
  4935. IN FS_INFORMATION_CLASS FsInformationClass,
  4936. IN ULONG Length,
  4937. OUT PVOID FsInformation,
  4938. OUT PULONG ReturnedLength);
  4939. NTKERNELAPI
  4940. VOID
  4941. NTAPI
  4942. IoQueueThreadIrp(
  4943. IN PIRP Irp);
  4944. NTKERNELAPI
  4945. VOID
  4946. NTAPI
  4947. IoRegisterFileSystem(
  4948. IN PDEVICE_OBJECT DeviceObject);
  4949. NTKERNELAPI
  4950. NTSTATUS
  4951. NTAPI
  4952. IoRegisterFsRegistrationChange(
  4953. IN PDRIVER_OBJECT DriverObject,
  4954. IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
  4955. NTKERNELAPI
  4956. VOID
  4957. NTAPI
  4958. IoReleaseVpbSpinLock(
  4959. IN KIRQL Irql);
  4960. NTKERNELAPI
  4961. VOID
  4962. NTAPI
  4963. IoSetDeviceToVerify(
  4964. IN PETHREAD Thread,
  4965. IN PDEVICE_OBJECT DeviceObject OPTIONAL);
  4966. NTKERNELAPI
  4967. NTSTATUS
  4968. NTAPI
  4969. IoSetInformation(
  4970. IN PFILE_OBJECT FileObject,
  4971. IN FILE_INFORMATION_CLASS FileInformationClass,
  4972. IN ULONG Length,
  4973. IN PVOID FileInformation);
  4974. NTKERNELAPI
  4975. VOID
  4976. NTAPI
  4977. IoSetTopLevelIrp(
  4978. IN PIRP Irp OPTIONAL);
  4979. NTKERNELAPI
  4980. NTSTATUS
  4981. NTAPI
  4982. IoSynchronousPageWrite(
  4983. IN PFILE_OBJECT FileObject,
  4984. IN PMDL Mdl,
  4985. IN PLARGE_INTEGER FileOffset,
  4986. IN PKEVENT Event,
  4987. OUT PIO_STATUS_BLOCK IoStatusBlock);
  4988. NTKERNELAPI
  4989. PEPROCESS
  4990. NTAPI
  4991. IoThreadToProcess(
  4992. IN PETHREAD Thread);
  4993. NTKERNELAPI
  4994. VOID
  4995. NTAPI
  4996. IoUnregisterFileSystem(
  4997. IN PDEVICE_OBJECT DeviceObject);
  4998. NTKERNELAPI
  4999. VOID
  5000. NTAPI
  5001. IoUnregisterFsRegistrationChange(
  5002. IN PDRIVER_OBJECT DriverObject,
  5003. IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine);
  5004. NTKERNELAPI
  5005. NTSTATUS
  5006. NTAPI
  5007. IoVerifyVolume(
  5008. IN PDEVICE_OBJECT DeviceObject,
  5009. IN BOOLEAN AllowRawMount);
  5010. NTKERNELAPI
  5011. NTSTATUS
  5012. NTAPI
  5013. IoGetRequestorSessionId(
  5014. IN PIRP Irp,
  5015. OUT PULONG pSessionId);
  5016. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  5017. #if (NTDDI_VERSION >= NTDDI_WINXP)
  5018. NTKERNELAPI
  5019. PFILE_OBJECT
  5020. NTAPI
  5021. IoCreateStreamFileObjectEx(
  5022. IN PFILE_OBJECT FileObject OPTIONAL,
  5023. IN PDEVICE_OBJECT DeviceObject OPTIONAL,
  5024. OUT PHANDLE FileObjectHandle OPTIONAL);
  5025. NTKERNELAPI
  5026. NTSTATUS
  5027. NTAPI
  5028. IoQueryFileDosDeviceName(
  5029. IN PFILE_OBJECT FileObject,
  5030. OUT POBJECT_NAME_INFORMATION *ObjectNameInformation);
  5031. NTKERNELAPI
  5032. NTSTATUS
  5033. NTAPI
  5034. IoEnumerateDeviceObjectList(
  5035. IN PDRIVER_OBJECT DriverObject,
  5036. OUT PDEVICE_OBJECT *DeviceObjectList,
  5037. IN ULONG DeviceObjectListSize,
  5038. OUT PULONG ActualNumberDeviceObjects);
  5039. NTKERNELAPI
  5040. PDEVICE_OBJECT
  5041. NTAPI
  5042. IoGetLowerDeviceObject(
  5043. IN PDEVICE_OBJECT DeviceObject);
  5044. NTKERNELAPI
  5045. PDEVICE_OBJECT
  5046. NTAPI
  5047. IoGetDeviceAttachmentBaseRef(
  5048. IN PDEVICE_OBJECT DeviceObject);
  5049. NTKERNELAPI
  5050. NTSTATUS
  5051. NTAPI
  5052. IoGetDiskDeviceObject(
  5053. IN PDEVICE_OBJECT FileSystemDeviceObject,
  5054. OUT PDEVICE_OBJECT *DiskDeviceObject);
  5055. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  5056. #if (NTDDI_VERSION >= NTDDI_WS03SP1)
  5057. NTKERNELAPI
  5058. NTSTATUS
  5059. NTAPI
  5060. IoEnumerateRegisteredFiltersList(
  5061. OUT PDRIVER_OBJECT *DriverObjectList,
  5062. IN ULONG DriverObjectListSize,
  5063. OUT PULONG ActualNumberDriverObjects);
  5064. #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
  5065. #if (NTDDI_VERSION >= NTDDI_VISTA)
  5066. FORCEINLINE
  5067. VOID
  5068. NTAPI
  5069. IoInitializePriorityInfo(
  5070. IN PIO_PRIORITY_INFO PriorityInfo)
  5071. {
  5072. PriorityInfo->Size = sizeof(IO_PRIORITY_INFO);
  5073. PriorityInfo->ThreadPriority = 0xffff;
  5074. PriorityInfo->IoPriority = IoPriorityNormal;
  5075. PriorityInfo->PagePriority = 0;
  5076. }
  5077. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  5078. #if (NTDDI_VERSION >= NTDDI_WIN7)
  5079. NTKERNELAPI
  5080. NTSTATUS
  5081. NTAPI
  5082. IoRegisterFsRegistrationChangeMountAware(
  5083. IN PDRIVER_OBJECT DriverObject,
  5084. IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine,
  5085. IN BOOLEAN SynchronizeWithMounts);
  5086. NTKERNELAPI
  5087. NTSTATUS
  5088. NTAPI
  5089. IoReplaceFileObjectName(
  5090. IN PFILE_OBJECT FileObject,
  5091. IN PWSTR NewFileName,
  5092. IN USHORT FileNameLength);
  5093. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  5094. #define PO_CB_SYSTEM_POWER_POLICY 0
  5095. #define PO_CB_AC_STATUS 1
  5096. #define PO_CB_BUTTON_COLLISION 2
  5097. #define PO_CB_SYSTEM_STATE_LOCK 3
  5098. #define PO_CB_LID_SWITCH_STATE 4
  5099. #define PO_CB_PROCESSOR_POWER_POLICY 5
  5100. #if (NTDDI_VERSION >= NTDDI_WINXP)
  5101. NTKERNELAPI
  5102. NTSTATUS
  5103. NTAPI
  5104. PoQueueShutdownWorkItem(
  5105. IN OUT PWORK_QUEUE_ITEM WorkItem);
  5106. #endif
  5107. /******************************************************************************
  5108. * Memory manager Types *
  5109. ******************************************************************************/
  5110. typedef enum _MMFLUSH_TYPE {
  5111. MmFlushForDelete,
  5112. MmFlushForWrite
  5113. } MMFLUSH_TYPE;
  5114. typedef struct _READ_LIST {
  5115. PFILE_OBJECT FileObject;
  5116. ULONG NumberOfEntries;
  5117. LOGICAL IsImage;
  5118. FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY];
  5119. } READ_LIST, *PREAD_LIST;
  5120. #if (NTDDI_VERSION >= NTDDI_WINXP)
  5121. typedef union _MM_PREFETCH_FLAGS {
  5122. struct {
  5123. ULONG Priority : SYSTEM_PAGE_PRIORITY_BITS;
  5124. ULONG RepurposePriority : SYSTEM_PAGE_PRIORITY_BITS;
  5125. } Flags;
  5126. ULONG AllFlags;
  5127. } MM_PREFETCH_FLAGS, *PMM_PREFETCH_FLAGS;
  5128. #define MM_PREFETCH_FLAGS_MASK ((1 << (2*SYSTEM_PAGE_PRIORITY_BITS)) - 1)
  5129. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  5130. #define HEAP_NO_SERIALIZE 0x00000001
  5131. #define HEAP_GROWABLE 0x00000002
  5132. #define HEAP_GENERATE_EXCEPTIONS 0x00000004
  5133. #define HEAP_ZERO_MEMORY 0x00000008
  5134. #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
  5135. #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
  5136. #define HEAP_FREE_CHECKING_ENABLED 0x00000040
  5137. #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
  5138. #define HEAP_CREATE_ALIGN_16 0x00010000
  5139. #define HEAP_CREATE_ENABLE_TRACING 0x00020000
  5140. #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
  5141. #define HEAP_SETTABLE_USER_VALUE 0x00000100
  5142. #define HEAP_SETTABLE_USER_FLAG1 0x00000200
  5143. #define HEAP_SETTABLE_USER_FLAG2 0x00000400
  5144. #define HEAP_SETTABLE_USER_FLAG3 0x00000800
  5145. #define HEAP_SETTABLE_USER_FLAGS 0x00000E00
  5146. #define HEAP_CLASS_0 0x00000000
  5147. #define HEAP_CLASS_1 0x00001000
  5148. #define HEAP_CLASS_2 0x00002000
  5149. #define HEAP_CLASS_3 0x00003000
  5150. #define HEAP_CLASS_4 0x00004000
  5151. #define HEAP_CLASS_5 0x00005000
  5152. #define HEAP_CLASS_6 0x00006000
  5153. #define HEAP_CLASS_7 0x00007000
  5154. #define HEAP_CLASS_8 0x00008000
  5155. #define HEAP_CLASS_MASK 0x0000F000
  5156. #define HEAP_MAXIMUM_TAG 0x0FFF
  5157. #define HEAP_GLOBAL_TAG 0x0800
  5158. #define HEAP_PSEUDO_TAG_FLAG 0x8000
  5159. #define HEAP_TAG_SHIFT 18
  5160. #define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT)
  5161. #define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \
  5162. HEAP_GROWABLE | \
  5163. HEAP_GENERATE_EXCEPTIONS | \
  5164. HEAP_ZERO_MEMORY | \
  5165. HEAP_REALLOC_IN_PLACE_ONLY | \
  5166. HEAP_TAIL_CHECKING_ENABLED | \
  5167. HEAP_FREE_CHECKING_ENABLED | \
  5168. HEAP_DISABLE_COALESCE_ON_FREE | \
  5169. HEAP_CLASS_MASK | \
  5170. HEAP_CREATE_ALIGN_16 | \
  5171. HEAP_CREATE_ENABLE_TRACING | \
  5172. HEAP_CREATE_ENABLE_EXECUTE)
  5173. /******************************************************************************
  5174. * Memory manager Functions *
  5175. ******************************************************************************/
  5176. FORCEINLINE
  5177. ULONG
  5178. HEAP_MAKE_TAG_FLAGS(
  5179. IN ULONG TagBase,
  5180. IN ULONG Tag)
  5181. {
  5182. //__assume_bound(TagBase); // FIXME
  5183. return ((ULONG)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
  5184. }
  5185. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  5186. NTKERNELAPI
  5187. BOOLEAN
  5188. NTAPI
  5189. MmIsRecursiveIoFault(
  5190. VOID);
  5191. NTKERNELAPI
  5192. BOOLEAN
  5193. NTAPI
  5194. MmForceSectionClosed(
  5195. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  5196. IN BOOLEAN DelayClose);
  5197. NTKERNELAPI
  5198. BOOLEAN
  5199. NTAPI
  5200. MmFlushImageSection(
  5201. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  5202. IN MMFLUSH_TYPE FlushType);
  5203. NTKERNELAPI
  5204. BOOLEAN
  5205. NTAPI
  5206. MmCanFileBeTruncated(
  5207. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  5208. IN PLARGE_INTEGER NewFileSize OPTIONAL);
  5209. NTKERNELAPI
  5210. BOOLEAN
  5211. NTAPI
  5212. MmSetAddressRangeModified(
  5213. IN PVOID Address,
  5214. IN SIZE_T Length);
  5215. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  5216. #if (NTDDI_VERSION >= NTDDI_WINXP)
  5217. NTKERNELAPI
  5218. NTSTATUS
  5219. NTAPI
  5220. MmPrefetchPages(
  5221. IN ULONG NumberOfLists,
  5222. IN PREAD_LIST *ReadLists);
  5223. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  5224. #if (NTDDI_VERSION >= NTDDI_VISTA)
  5225. NTKERNELAPI
  5226. ULONG
  5227. NTAPI
  5228. MmDoesFileHaveUserWritableReferences(
  5229. IN PSECTION_OBJECT_POINTERS SectionPointer);
  5230. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  5231. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  5232. NTKERNELAPI
  5233. NTSTATUS
  5234. NTAPI
  5235. ObInsertObject(
  5236. IN PVOID Object,
  5237. IN OUT PACCESS_STATE PassedAccessState OPTIONAL,
  5238. IN ACCESS_MASK DesiredAccess OPTIONAL,
  5239. IN ULONG ObjectPointerBias,
  5240. OUT PVOID *NewObject OPTIONAL,
  5241. OUT PHANDLE Handle OPTIONAL);
  5242. NTKERNELAPI
  5243. NTSTATUS
  5244. NTAPI
  5245. ObOpenObjectByPointer(
  5246. IN PVOID Object,
  5247. IN ULONG HandleAttributes,
  5248. IN PACCESS_STATE PassedAccessState OPTIONAL,
  5249. IN ACCESS_MASK DesiredAccess OPTIONAL,
  5250. IN POBJECT_TYPE ObjectType OPTIONAL,
  5251. IN KPROCESSOR_MODE AccessMode,
  5252. OUT PHANDLE Handle);
  5253. NTKERNELAPI
  5254. VOID
  5255. NTAPI
  5256. ObMakeTemporaryObject(
  5257. IN PVOID Object);
  5258. NTKERNELAPI
  5259. NTSTATUS
  5260. NTAPI
  5261. ObQueryNameString(
  5262. IN PVOID Object,
  5263. OUT POBJECT_NAME_INFORMATION ObjectNameInfo OPTIONAL,
  5264. IN ULONG Length,
  5265. OUT PULONG ReturnLength);
  5266. NTKERNELAPI
  5267. NTSTATUS
  5268. NTAPI
  5269. ObQueryObjectAuditingByHandle(
  5270. IN HANDLE Handle,
  5271. OUT PBOOLEAN GenerateOnClose);
  5272. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  5273. #if (NTDDI_VERSION >= NTDDI_VISTA)
  5274. NTKERNELAPI
  5275. BOOLEAN
  5276. NTAPI
  5277. ObIsKernelHandle(
  5278. IN HANDLE Handle);
  5279. #endif
  5280. #if (NTDDI_VERSION >= NTDDI_WIN7)
  5281. NTKERNELAPI
  5282. NTSTATUS
  5283. NTAPI
  5284. ObOpenObjectByPointerWithTag(
  5285. IN PVOID Object,
  5286. IN ULONG HandleAttributes,
  5287. IN PACCESS_STATE PassedAccessState OPTIONAL,
  5288. IN ACCESS_MASK DesiredAccess,
  5289. IN POBJECT_TYPE ObjectType OPTIONAL,
  5290. IN KPROCESSOR_MODE AccessMode,
  5291. IN ULONG Tag,
  5292. OUT PHANDLE Handle);
  5293. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  5294. /* FSRTL Types */
  5295. typedef ULONG LBN;
  5296. typedef LBN *PLBN;
  5297. typedef ULONG VBN;
  5298. typedef VBN *PVBN;
  5299. #define FSRTL_COMMON_FCB_HEADER_LAYOUT \
  5300. CSHORT NodeTypeCode; \
  5301. CSHORT NodeByteSize; \
  5302. UCHAR Flags; \
  5303. UCHAR IsFastIoPossible; \
  5304. UCHAR Flags2; \
  5305. UCHAR Reserved:4; \
  5306. UCHAR Version:4; \
  5307. PERESOURCE Resource; \
  5308. PERESOURCE PagingIoResource; \
  5309. LARGE_INTEGER AllocationSize; \
  5310. LARGE_INTEGER FileSize; \
  5311. LARGE_INTEGER ValidDataLength;
  5312. typedef struct _FSRTL_COMMON_FCB_HEADER {
  5313. FSRTL_COMMON_FCB_HEADER_LAYOUT
  5314. } FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER;
  5315. #ifdef __cplusplus
  5316. typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER {
  5317. #else /* __cplusplus */
  5318. typedef struct _FSRTL_ADVANCED_FCB_HEADER {
  5319. FSRTL_COMMON_FCB_HEADER_LAYOUT
  5320. #endif /* __cplusplus */
  5321. PFAST_MUTEX FastMutex;
  5322. LIST_ENTRY FilterContexts;
  5323. #if (NTDDI_VERSION >= NTDDI_VISTA)
  5324. EX_PUSH_LOCK PushLock;
  5325. PVOID *FileContextSupportPointer;
  5326. #endif
  5327. } FSRTL_ADVANCED_FCB_HEADER, *PFSRTL_ADVANCED_FCB_HEADER;
  5328. #define FSRTL_FCB_HEADER_V0 (0x00)
  5329. #define FSRTL_FCB_HEADER_V1 (0x01)
  5330. #define FSRTL_FLAG_FILE_MODIFIED (0x01)
  5331. #define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02)
  5332. #define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04)
  5333. #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08)
  5334. #define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10)
  5335. #define FSRTL_FLAG_USER_MAPPED_FILE (0x20)
  5336. #define FSRTL_FLAG_ADVANCED_HEADER (0x40)
  5337. #define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80)
  5338. #define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01)
  5339. #define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02)
  5340. #define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04)
  5341. #define FSRTL_FLAG2_IS_PAGING_FILE (0x08)
  5342. #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
  5343. #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
  5344. #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
  5345. #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
  5346. #define FSRTL_NETWORK1_TOP_LEVEL_IRP ((LONG_PTR)0x05)
  5347. #define FSRTL_NETWORK2_TOP_LEVEL_IRP ((LONG_PTR)0x06)
  5348. #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG ((LONG_PTR)0xFFFF)
  5349. typedef struct _FSRTL_AUXILIARY_BUFFER {
  5350. PVOID Buffer;
  5351. ULONG Length;
  5352. ULONG Flags;
  5353. PMDL Mdl;
  5354. } FSRTL_AUXILIARY_BUFFER, *PFSRTL_AUXILIARY_BUFFER;
  5355. #define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001
  5356. typedef enum _FSRTL_COMPARISON_RESULT {
  5357. LessThan = -1,
  5358. EqualTo = 0,
  5359. GreaterThan = 1
  5360. } FSRTL_COMPARISON_RESULT;
  5361. #define FSRTL_FAT_LEGAL 0x01
  5362. #define FSRTL_HPFS_LEGAL 0x02
  5363. #define FSRTL_NTFS_LEGAL 0x04
  5364. #define FSRTL_WILD_CHARACTER 0x08
  5365. #define FSRTL_OLE_LEGAL 0x10
  5366. #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
  5367. #define FSRTL_VOLUME_DISMOUNT 1
  5368. #define FSRTL_VOLUME_DISMOUNT_FAILED 2
  5369. #define FSRTL_VOLUME_LOCK 3
  5370. #define FSRTL_VOLUME_LOCK_FAILED 4
  5371. #define FSRTL_VOLUME_UNLOCK 5
  5372. #define FSRTL_VOLUME_MOUNT 6
  5373. #define FSRTL_VOLUME_NEEDS_CHKDSK 7
  5374. #define FSRTL_VOLUME_WORM_NEAR_FULL 8
  5375. #define FSRTL_VOLUME_WEARING_OUT 9
  5376. #define FSRTL_VOLUME_FORCED_CLOSED 10
  5377. #define FSRTL_VOLUME_INFO_MAKE_COMPAT 11
  5378. #define FSRTL_VOLUME_PREPARING_EJECT 12
  5379. #define FSRTL_VOLUME_CHANGE_SIZE 13
  5380. #define FSRTL_VOLUME_BACKGROUND_FORMAT 14
  5381. typedef VOID
  5382. (NTAPI *PFSRTL_STACK_OVERFLOW_ROUTINE) (
  5383. IN PVOID Context,
  5384. IN PKEVENT Event);
  5385. #if (NTDDI_VERSION >= NTDDI_VISTA)
  5386. #define FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED 0x00000001
  5387. #define FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED 0x00000002
  5388. #define FSRTL_UNC_PROVIDER_FLAGS_DOMAIN_SVC_AWARE 0x00000004
  5389. #define FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA 0x00000001
  5390. #define FSRTL_ALLOCATE_ECP_FLAG_CHARGE_QUOTA 0x00000001
  5391. #define FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL 0x00000002
  5392. #define FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL 0x00000002
  5393. #define FSRTL_VIRTDISK_FULLY_ALLOCATED 0x00000001
  5394. #define FSRTL_VIRTDISK_NO_DRIVE_LETTER 0x00000002
  5395. typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_1 {
  5396. ULONG32 ProviderId;
  5397. } FSRTL_MUP_PROVIDER_INFO_LEVEL_1, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_1;
  5398. typedef struct _FSRTL_MUP_PROVIDER_INFO_LEVEL_2 {
  5399. ULONG32 ProviderId;
  5400. UNICODE_STRING ProviderName;
  5401. } FSRTL_MUP_PROVIDER_INFO_LEVEL_2, *PFSRTL_MUP_PROVIDER_INFO_LEVEL_2;
  5402. typedef VOID
  5403. (*PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK) (
  5404. IN OUT PVOID EcpContext,
  5405. IN LPCGUID EcpType);
  5406. typedef struct _ECP_LIST ECP_LIST, *PECP_LIST;
  5407. typedef ULONG FSRTL_ALLOCATE_ECPLIST_FLAGS;
  5408. typedef ULONG FSRTL_ALLOCATE_ECP_FLAGS;
  5409. typedef ULONG FSRTL_ECP_LOOKASIDE_FLAGS;
  5410. typedef enum _FSRTL_CHANGE_BACKING_TYPE {
  5411. ChangeDataControlArea,
  5412. ChangeImageControlArea,
  5413. ChangeSharedCacheMap
  5414. } FSRTL_CHANGE_BACKING_TYPE, *PFSRTL_CHANGE_BACKING_TYPE;
  5415. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  5416. typedef struct _FSRTL_PER_FILE_CONTEXT {
  5417. LIST_ENTRY Links;
  5418. PVOID OwnerId;
  5419. PVOID InstanceId;
  5420. PFREE_FUNCTION FreeCallback;
  5421. } FSRTL_PER_FILE_CONTEXT, *PFSRTL_PER_FILE_CONTEXT;
  5422. typedef struct _FSRTL_PER_STREAM_CONTEXT {
  5423. LIST_ENTRY Links;
  5424. PVOID OwnerId;
  5425. PVOID InstanceId;
  5426. PFREE_FUNCTION FreeCallback;
  5427. } FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT;
  5428. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  5429. typedef VOID
  5430. (*PFN_FSRTLTEARDOWNPERSTREAMCONTEXTS) (
  5431. IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
  5432. #endif
  5433. typedef struct _FSRTL_PER_FILEOBJECT_CONTEXT {
  5434. LIST_ENTRY Links;
  5435. PVOID OwnerId;
  5436. PVOID InstanceId;
  5437. } FSRTL_PER_FILEOBJECT_CONTEXT, *PFSRTL_PER_FILEOBJECT_CONTEXT;
  5438. #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_HARD_ERROR 0x1
  5439. #define FSRTL_CC_FLUSH_ERROR_FLAG_NO_LOG_ENTRY 0x2
  5440. typedef NTSTATUS
  5441. (NTAPI *PCOMPLETE_LOCK_IRP_ROUTINE) (
  5442. IN PVOID Context,
  5443. IN PIRP Irp);
  5444. typedef struct _FILE_LOCK_INFO {
  5445. LARGE_INTEGER StartingByte;
  5446. LARGE_INTEGER Length;
  5447. BOOLEAN ExclusiveLock;
  5448. ULONG Key;
  5449. PFILE_OBJECT FileObject;
  5450. PVOID ProcessId;
  5451. LARGE_INTEGER EndingByte;
  5452. } FILE_LOCK_INFO, *PFILE_LOCK_INFO;
  5453. typedef VOID
  5454. (NTAPI *PUNLOCK_ROUTINE) (
  5455. IN PVOID Context,
  5456. IN PFILE_LOCK_INFO FileLockInfo);
  5457. typedef struct _FILE_LOCK {
  5458. PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
  5459. PUNLOCK_ROUTINE UnlockRoutine;
  5460. BOOLEAN FastIoIsQuestionable;
  5461. BOOLEAN SpareC[3];
  5462. PVOID LockInformation;
  5463. FILE_LOCK_INFO LastReturnedLockInfo;
  5464. PVOID LastReturnedLock;
  5465. LONG volatile LockRequestsInProgress;
  5466. } FILE_LOCK, *PFILE_LOCK;
  5467. typedef struct _TUNNEL {
  5468. FAST_MUTEX Mutex;
  5469. PRTL_SPLAY_LINKS Cache;
  5470. LIST_ENTRY TimerQueue;
  5471. USHORT NumEntries;
  5472. } TUNNEL, *PTUNNEL;
  5473. typedef struct _BASE_MCB {
  5474. ULONG MaximumPairCount;
  5475. ULONG PairCount;
  5476. USHORT PoolType;
  5477. USHORT Flags;
  5478. PVOID Mapping;
  5479. } BASE_MCB, *PBASE_MCB;
  5480. typedef struct _LARGE_MCB {
  5481. PKGUARDED_MUTEX GuardedMutex;
  5482. BASE_MCB BaseMcb;
  5483. } LARGE_MCB, *PLARGE_MCB;
  5484. #define MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE 1
  5485. typedef struct _MCB {
  5486. LARGE_MCB DummyFieldThatSizesThisStructureCorrectly;
  5487. } MCB, *PMCB;
  5488. typedef enum _FAST_IO_POSSIBLE {
  5489. FastIoIsNotPossible = 0,
  5490. FastIoIsPossible,
  5491. FastIoIsQuestionable
  5492. } FAST_IO_POSSIBLE;
  5493. typedef struct _EOF_WAIT_BLOCK {
  5494. LIST_ENTRY EofWaitLinks;
  5495. KEVENT Event;
  5496. } EOF_WAIT_BLOCK, *PEOF_WAIT_BLOCK;
  5497. typedef PVOID OPLOCK, *POPLOCK;
  5498. typedef VOID
  5499. (NTAPI *POPLOCK_WAIT_COMPLETE_ROUTINE) (
  5500. IN PVOID Context,
  5501. IN PIRP Irp);
  5502. typedef VOID
  5503. (NTAPI *POPLOCK_FS_PREPOST_IRP) (
  5504. IN PVOID Context,
  5505. IN PIRP Irp);
  5506. #if (NTDDI_VERSION >= NTDDI_VISTASP1)
  5507. #define OPLOCK_FLAG_COMPLETE_IF_OPLOCKED 0x00000001
  5508. #endif
  5509. #if (NTDDI_VERSION >= NTDDI_WIN7)
  5510. #define OPLOCK_FLAG_OPLOCK_KEY_CHECK_ONLY 0x00000002
  5511. #define OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK 0x00000004
  5512. #define OPLOCK_FLAG_IGNORE_OPLOCK_KEYS 0x00000008
  5513. #define OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH 0x00000001
  5514. #endif
  5515. #if (NTDDI_VERSION >= NTDDI_WIN7)
  5516. typedef struct _OPLOCK_KEY_ECP_CONTEXT {
  5517. GUID OplockKey;
  5518. ULONG Reserved;
  5519. } OPLOCK_KEY_ECP_CONTEXT, *POPLOCK_KEY_ECP_CONTEXT;
  5520. DEFINE_GUID(GUID_ECP_OPLOCK_KEY, 0x48850596, 0x3050, 0x4be7, 0x98, 0x63, 0xfe, 0xc3, 0x50, 0xce, 0x8d, 0x7f);
  5521. #endif
  5522. typedef PVOID PNOTIFY_SYNC;
  5523. #if (NTDDI_VERSION >= NTDDI_WIN7)
  5524. typedef struct _ECP_HEADER ECP_HEADER, *PECP_HEADER;
  5525. #endif
  5526. typedef BOOLEAN
  5527. (NTAPI *PCHECK_FOR_TRAVERSE_ACCESS) (
  5528. IN PVOID NotifyContext,
  5529. IN PVOID TargetContext OPTIONAL,
  5530. IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
  5531. typedef BOOLEAN
  5532. (NTAPI *PFILTER_REPORT_CHANGE) (
  5533. IN PVOID NotifyContext,
  5534. IN PVOID FilterContext);
  5535. /* FSRTL Functions */
  5536. #define FsRtlEnterFileSystem KeEnterCriticalRegion
  5537. #define FsRtlExitFileSystem KeLeaveCriticalRegion
  5538. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  5539. NTKERNELAPI
  5540. BOOLEAN
  5541. NTAPI
  5542. FsRtlCopyRead(
  5543. IN PFILE_OBJECT FileObject,
  5544. IN PLARGE_INTEGER FileOffset,
  5545. IN ULONG Length,
  5546. IN BOOLEAN Wait,
  5547. IN ULONG LockKey,
  5548. OUT PVOID Buffer,
  5549. OUT PIO_STATUS_BLOCK IoStatus,
  5550. IN PDEVICE_OBJECT DeviceObject);
  5551. NTKERNELAPI
  5552. BOOLEAN
  5553. NTAPI
  5554. FsRtlCopyWrite(
  5555. IN PFILE_OBJECT FileObject,
  5556. IN PLARGE_INTEGER FileOffset,
  5557. IN ULONG Length,
  5558. IN BOOLEAN Wait,
  5559. IN ULONG LockKey,
  5560. IN PVOID Buffer,
  5561. OUT PIO_STATUS_BLOCK IoStatus,
  5562. IN PDEVICE_OBJECT DeviceObject);
  5563. NTKERNELAPI
  5564. BOOLEAN
  5565. NTAPI
  5566. FsRtlMdlReadDev(
  5567. IN PFILE_OBJECT FileObject,
  5568. IN PLARGE_INTEGER FileOffset,
  5569. IN ULONG Length,
  5570. IN ULONG LockKey,
  5571. OUT PMDL *MdlChain,
  5572. OUT PIO_STATUS_BLOCK IoStatus,
  5573. IN PDEVICE_OBJECT DeviceObject OPTIONAL);
  5574. NTKERNELAPI
  5575. BOOLEAN
  5576. NTAPI
  5577. FsRtlMdlReadCompleteDev(
  5578. IN PFILE_OBJECT FileObject,
  5579. IN PMDL MdlChain,
  5580. IN PDEVICE_OBJECT DeviceObject OPTIONAL);
  5581. NTKERNELAPI
  5582. BOOLEAN
  5583. NTAPI
  5584. FsRtlPrepareMdlWriteDev(
  5585. IN PFILE_OBJECT FileObject,
  5586. IN PLARGE_INTEGER FileOffset,
  5587. IN ULONG Length,
  5588. IN ULONG LockKey,
  5589. OUT PMDL *MdlChain,
  5590. OUT PIO_STATUS_BLOCK IoStatus,
  5591. IN PDEVICE_OBJECT DeviceObject);
  5592. NTKERNELAPI
  5593. BOOLEAN
  5594. NTAPI
  5595. FsRtlMdlWriteCompleteDev(
  5596. IN PFILE_OBJECT FileObject,
  5597. IN PLARGE_INTEGER FileOffset,
  5598. IN PMDL MdlChain,
  5599. IN PDEVICE_OBJECT DeviceObject);
  5600. NTKERNELAPI
  5601. VOID
  5602. NTAPI
  5603. FsRtlAcquireFileExclusive(
  5604. IN PFILE_OBJECT FileObject);
  5605. NTKERNELAPI
  5606. VOID
  5607. NTAPI
  5608. FsRtlReleaseFile(
  5609. IN PFILE_OBJECT FileObject);
  5610. NTKERNELAPI
  5611. NTSTATUS
  5612. NTAPI
  5613. FsRtlGetFileSize(
  5614. IN PFILE_OBJECT FileObject,
  5615. OUT PLARGE_INTEGER FileSize);
  5616. NTKERNELAPI
  5617. BOOLEAN
  5618. NTAPI
  5619. FsRtlIsTotalDeviceFailure(
  5620. IN NTSTATUS Status);
  5621. NTKERNELAPI
  5622. PFILE_LOCK
  5623. NTAPI
  5624. FsRtlAllocateFileLock(
  5625. IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
  5626. IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
  5627. NTKERNELAPI
  5628. VOID
  5629. NTAPI
  5630. FsRtlFreeFileLock(
  5631. IN PFILE_LOCK FileLock);
  5632. NTKERNELAPI
  5633. VOID
  5634. NTAPI
  5635. FsRtlInitializeFileLock(
  5636. IN PFILE_LOCK FileLock,
  5637. IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
  5638. IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL);
  5639. NTKERNELAPI
  5640. VOID
  5641. NTAPI
  5642. FsRtlUninitializeFileLock(
  5643. IN PFILE_LOCK FileLock);
  5644. /*
  5645. FsRtlProcessFileLock:
  5646. ret:
  5647. -STATUS_INVALID_DEVICE_REQUEST
  5648. -STATUS_RANGE_NOT_LOCKED from unlock routines.
  5649. -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
  5650. (redirected IoStatus->Status).
  5651. Internals:
  5652. -switch ( Irp->CurrentStackLocation->MinorFunction )
  5653. lock: return FsRtlPrivateLock;
  5654. unlocksingle: return FsRtlFastUnlockSingle;
  5655. unlockall: return FsRtlFastUnlockAll;
  5656. unlockallbykey: return FsRtlFastUnlockAllByKey;
  5657. default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
  5658. return STATUS_INVALID_DEVICE_REQUEST;
  5659. -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
  5660. -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
  5661. */
  5662. NTKERNELAPI
  5663. NTSTATUS
  5664. NTAPI
  5665. FsRtlProcessFileLock(
  5666. IN PFILE_LOCK FileLock,
  5667. IN PIRP Irp,
  5668. IN PVOID Context OPTIONAL);
  5669. /*
  5670. FsRtlCheckLockForReadAccess:
  5671. All this really does is pick out the lock parameters from the irp (io stack
  5672. location?), get IoGetRequestorProcess, and pass values on to
  5673. FsRtlFastCheckLockForRead.
  5674. */
  5675. NTKERNELAPI
  5676. BOOLEAN
  5677. NTAPI
  5678. FsRtlCheckLockForReadAccess(
  5679. IN PFILE_LOCK FileLock,
  5680. IN PIRP Irp);
  5681. /*
  5682. FsRtlCheckLockForWriteAccess:
  5683. All this really does is pick out the lock parameters from the irp (io stack
  5684. location?), get IoGetRequestorProcess, and pass values on to
  5685. FsRtlFastCheckLockForWrite.
  5686. */
  5687. NTKERNELAPI
  5688. BOOLEAN
  5689. NTAPI
  5690. FsRtlCheckLockForWriteAccess(
  5691. IN PFILE_LOCK FileLock,
  5692. IN PIRP Irp);
  5693. NTKERNELAPI
  5694. BOOLEAN
  5695. NTAPI
  5696. FsRtlFastCheckLockForRead(
  5697. IN PFILE_LOCK FileLock,
  5698. IN PLARGE_INTEGER FileOffset,
  5699. IN PLARGE_INTEGER Length,
  5700. IN ULONG Key,
  5701. IN PFILE_OBJECT FileObject,
  5702. IN PVOID Process);
  5703. NTKERNELAPI
  5704. BOOLEAN
  5705. NTAPI
  5706. FsRtlFastCheckLockForWrite(
  5707. IN PFILE_LOCK FileLock,
  5708. IN PLARGE_INTEGER FileOffset,
  5709. IN PLARGE_INTEGER Length,
  5710. IN ULONG Key,
  5711. IN PFILE_OBJECT FileObject,
  5712. IN PVOID Process);
  5713. /*
  5714. FsRtlGetNextFileLock:
  5715. ret: NULL if no more locks
  5716. Internals:
  5717. FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
  5718. FileLock->LastReturnedLock as storage.
  5719. LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
  5720. list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
  5721. calls with Restart = FALSE.
  5722. */
  5723. NTKERNELAPI
  5724. PFILE_LOCK_INFO
  5725. NTAPI
  5726. FsRtlGetNextFileLock(
  5727. IN PFILE_LOCK FileLock,
  5728. IN BOOLEAN Restart);
  5729. NTKERNELAPI
  5730. NTSTATUS
  5731. NTAPI
  5732. FsRtlFastUnlockSingle(
  5733. IN PFILE_LOCK FileLock,
  5734. IN PFILE_OBJECT FileObject,
  5735. IN PLARGE_INTEGER FileOffset,
  5736. IN PLARGE_INTEGER Length,
  5737. IN PEPROCESS Process,
  5738. IN ULONG Key,
  5739. IN PVOID Context OPTIONAL,
  5740. IN BOOLEAN AlreadySynchronized);
  5741. NTKERNELAPI
  5742. NTSTATUS
  5743. NTAPI
  5744. FsRtlFastUnlockAll(
  5745. IN PFILE_LOCK FileLock,
  5746. IN PFILE_OBJECT FileObject,
  5747. IN PEPROCESS Process,
  5748. IN PVOID Context OPTIONAL);
  5749. NTKERNELAPI
  5750. NTSTATUS
  5751. NTAPI
  5752. FsRtlFastUnlockAllByKey(
  5753. IN PFILE_LOCK FileLock,
  5754. IN PFILE_OBJECT FileObject,
  5755. IN PEPROCESS Process,
  5756. IN ULONG Key,
  5757. IN PVOID Context OPTIONAL);
  5758. /*
  5759. FsRtlPrivateLock:
  5760. ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
  5761. Internals:
  5762. -Calls IoCompleteRequest if Irp
  5763. -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
  5764. */
  5765. NTKERNELAPI
  5766. BOOLEAN
  5767. NTAPI
  5768. FsRtlPrivateLock(
  5769. IN PFILE_LOCK FileLock,
  5770. IN PFILE_OBJECT FileObject,
  5771. IN PLARGE_INTEGER FileOffset,
  5772. IN PLARGE_INTEGER Length,
  5773. IN PEPROCESS Process,
  5774. IN ULONG Key,
  5775. IN BOOLEAN FailImmediately,
  5776. IN BOOLEAN ExclusiveLock,
  5777. OUT PIO_STATUS_BLOCK IoStatus,
  5778. IN PIRP Irp OPTIONAL,
  5779. IN PVOID Context,
  5780. IN BOOLEAN AlreadySynchronized);
  5781. NTKERNELAPI
  5782. VOID
  5783. NTAPI
  5784. FsRtlInitializeTunnelCache(
  5785. IN PTUNNEL Cache);
  5786. NTKERNELAPI
  5787. VOID
  5788. NTAPI
  5789. FsRtlAddToTunnelCache(
  5790. IN PTUNNEL Cache,
  5791. IN ULONGLONG DirectoryKey,
  5792. IN PUNICODE_STRING ShortName,
  5793. IN PUNICODE_STRING LongName,
  5794. IN BOOLEAN KeyByShortName,
  5795. IN ULONG DataLength,
  5796. IN PVOID Data);
  5797. NTKERNELAPI
  5798. BOOLEAN
  5799. NTAPI
  5800. FsRtlFindInTunnelCache(
  5801. IN PTUNNEL Cache,
  5802. IN ULONGLONG DirectoryKey,
  5803. IN PUNICODE_STRING Name,
  5804. OUT PUNICODE_STRING ShortName,
  5805. OUT PUNICODE_STRING LongName,
  5806. IN OUT PULONG DataLength,
  5807. OUT PVOID Data);
  5808. NTKERNELAPI
  5809. VOID
  5810. NTAPI
  5811. FsRtlDeleteKeyFromTunnelCache(
  5812. IN PTUNNEL Cache,
  5813. IN ULONGLONG DirectoryKey);
  5814. NTKERNELAPI
  5815. VOID
  5816. NTAPI
  5817. FsRtlDeleteTunnelCache(
  5818. IN PTUNNEL Cache);
  5819. NTKERNELAPI
  5820. VOID
  5821. NTAPI
  5822. FsRtlDissectDbcs(
  5823. IN ANSI_STRING Name,
  5824. OUT PANSI_STRING FirstPart,
  5825. OUT PANSI_STRING RemainingPart);
  5826. NTKERNELAPI
  5827. BOOLEAN
  5828. NTAPI
  5829. FsRtlDoesDbcsContainWildCards(
  5830. IN PANSI_STRING Name);
  5831. NTKERNELAPI
  5832. BOOLEAN
  5833. NTAPI
  5834. FsRtlIsDbcsInExpression(
  5835. IN PANSI_STRING Expression,
  5836. IN PANSI_STRING Name);
  5837. NTKERNELAPI
  5838. BOOLEAN
  5839. NTAPI
  5840. FsRtlIsFatDbcsLegal(
  5841. IN ANSI_STRING DbcsName,
  5842. IN BOOLEAN WildCardsPermissible,
  5843. IN BOOLEAN PathNamePermissible,
  5844. IN BOOLEAN LeadingBackslashPermissible);
  5845. NTKERNELAPI
  5846. BOOLEAN
  5847. NTAPI
  5848. FsRtlIsHpfsDbcsLegal(
  5849. IN ANSI_STRING DbcsName,
  5850. IN BOOLEAN WildCardsPermissible,
  5851. IN BOOLEAN PathNamePermissible,
  5852. IN BOOLEAN LeadingBackslashPermissible);
  5853. NTKERNELAPI
  5854. NTSTATUS
  5855. NTAPI
  5856. FsRtlNormalizeNtstatus(
  5857. IN NTSTATUS Exception,
  5858. IN NTSTATUS GenericException);
  5859. NTKERNELAPI
  5860. BOOLEAN
  5861. NTAPI
  5862. FsRtlIsNtstatusExpected(
  5863. IN NTSTATUS Ntstatus);
  5864. NTKERNELAPI
  5865. PERESOURCE
  5866. NTAPI
  5867. FsRtlAllocateResource(
  5868. VOID);
  5869. NTKERNELAPI
  5870. VOID
  5871. NTAPI
  5872. FsRtlInitializeLargeMcb(
  5873. IN PLARGE_MCB Mcb,
  5874. IN POOL_TYPE PoolType);
  5875. NTKERNELAPI
  5876. VOID
  5877. NTAPI
  5878. FsRtlUninitializeLargeMcb(
  5879. IN PLARGE_MCB Mcb);
  5880. NTKERNELAPI
  5881. VOID
  5882. NTAPI
  5883. FsRtlResetLargeMcb(
  5884. IN PLARGE_MCB Mcb,
  5885. IN BOOLEAN SelfSynchronized);
  5886. NTKERNELAPI
  5887. VOID
  5888. NTAPI
  5889. FsRtlTruncateLargeMcb(
  5890. IN PLARGE_MCB Mcb,
  5891. IN LONGLONG Vbn);
  5892. NTKERNELAPI
  5893. BOOLEAN
  5894. NTAPI
  5895. FsRtlAddLargeMcbEntry(
  5896. IN PLARGE_MCB Mcb,
  5897. IN LONGLONG Vbn,
  5898. IN LONGLONG Lbn,
  5899. IN LONGLONG SectorCount);
  5900. NTKERNELAPI
  5901. VOID
  5902. NTAPI
  5903. FsRtlRemoveLargeMcbEntry(
  5904. IN PLARGE_MCB Mcb,
  5905. IN LONGLONG Vbn,
  5906. IN LONGLONG SectorCount);
  5907. NTKERNELAPI
  5908. BOOLEAN
  5909. NTAPI
  5910. FsRtlLookupLargeMcbEntry(
  5911. IN PLARGE_MCB Mcb,
  5912. IN LONGLONG Vbn,
  5913. OUT PLONGLONG Lbn OPTIONAL,
  5914. OUT PLONGLONG SectorCountFromLbn OPTIONAL,
  5915. OUT PLONGLONG StartingLbn OPTIONAL,
  5916. OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
  5917. OUT PULONG Index OPTIONAL);
  5918. NTKERNELAPI
  5919. BOOLEAN
  5920. NTAPI
  5921. FsRtlLookupLastLargeMcbEntry(
  5922. IN PLARGE_MCB Mcb,
  5923. OUT PLONGLONG Vbn,
  5924. OUT PLONGLONG Lbn);
  5925. NTKERNELAPI
  5926. BOOLEAN
  5927. NTAPI
  5928. FsRtlLookupLastLargeMcbEntryAndIndex(
  5929. IN PLARGE_MCB OpaqueMcb,
  5930. OUT PLONGLONG LargeVbn,
  5931. OUT PLONGLONG LargeLbn,
  5932. OUT PULONG Index);
  5933. NTKERNELAPI
  5934. ULONG
  5935. NTAPI
  5936. FsRtlNumberOfRunsInLargeMcb(
  5937. IN PLARGE_MCB Mcb);
  5938. NTKERNELAPI
  5939. BOOLEAN
  5940. NTAPI
  5941. FsRtlGetNextLargeMcbEntry(
  5942. IN PLARGE_MCB Mcb,
  5943. IN ULONG RunIndex,
  5944. OUT PLONGLONG Vbn,
  5945. OUT PLONGLONG Lbn,
  5946. OUT PLONGLONG SectorCount);
  5947. NTKERNELAPI
  5948. BOOLEAN
  5949. NTAPI
  5950. FsRtlSplitLargeMcb(
  5951. IN PLARGE_MCB Mcb,
  5952. IN LONGLONG Vbn,
  5953. IN LONGLONG Amount);
  5954. NTKERNELAPI
  5955. VOID
  5956. NTAPI
  5957. FsRtlInitializeMcb(
  5958. IN PMCB Mcb,
  5959. IN POOL_TYPE PoolType);
  5960. NTKERNELAPI
  5961. VOID
  5962. NTAPI
  5963. FsRtlUninitializeMcb(
  5964. IN PMCB Mcb);
  5965. NTKERNELAPI
  5966. VOID
  5967. NTAPI
  5968. FsRtlTruncateMcb(
  5969. IN PMCB Mcb,
  5970. IN VBN Vbn);
  5971. NTKERNELAPI
  5972. BOOLEAN
  5973. NTAPI
  5974. FsRtlAddMcbEntry(
  5975. IN PMCB Mcb,
  5976. IN VBN Vbn,
  5977. IN LBN Lbn,
  5978. IN ULONG SectorCount);
  5979. NTKERNELAPI
  5980. VOID
  5981. NTAPI
  5982. FsRtlRemoveMcbEntry(
  5983. IN PMCB Mcb,
  5984. IN VBN Vbn,
  5985. IN ULONG SectorCount);
  5986. NTKERNELAPI
  5987. BOOLEAN
  5988. NTAPI
  5989. FsRtlLookupMcbEntry(
  5990. IN PMCB Mcb,
  5991. IN VBN Vbn,
  5992. OUT PLBN Lbn,
  5993. OUT PULONG SectorCount OPTIONAL,
  5994. OUT PULONG Index);
  5995. NTKERNELAPI
  5996. BOOLEAN
  5997. NTAPI
  5998. FsRtlLookupLastMcbEntry(
  5999. IN PMCB Mcb,
  6000. OUT PVBN Vbn,
  6001. OUT PLBN Lbn);
  6002. NTKERNELAPI
  6003. ULONG
  6004. NTAPI
  6005. FsRtlNumberOfRunsInMcb(
  6006. IN PMCB Mcb);
  6007. NTKERNELAPI
  6008. BOOLEAN
  6009. NTAPI
  6010. FsRtlGetNextMcbEntry(
  6011. IN PMCB Mcb,
  6012. IN ULONG RunIndex,
  6013. OUT PVBN Vbn,
  6014. OUT PLBN Lbn,
  6015. OUT PULONG SectorCount);
  6016. NTKERNELAPI
  6017. NTSTATUS
  6018. NTAPI
  6019. FsRtlBalanceReads(
  6020. IN PDEVICE_OBJECT TargetDevice);
  6021. NTKERNELAPI
  6022. VOID
  6023. NTAPI
  6024. FsRtlInitializeOplock(
  6025. IN OUT POPLOCK Oplock);
  6026. NTKERNELAPI
  6027. VOID
  6028. NTAPI
  6029. FsRtlUninitializeOplock(
  6030. IN OUT POPLOCK Oplock);
  6031. NTKERNELAPI
  6032. NTSTATUS
  6033. NTAPI
  6034. FsRtlOplockFsctrl(
  6035. IN POPLOCK Oplock,
  6036. IN PIRP Irp,
  6037. IN ULONG OpenCount);
  6038. NTKERNELAPI
  6039. NTSTATUS
  6040. NTAPI
  6041. FsRtlCheckOplock(
  6042. IN POPLOCK Oplock,
  6043. IN PIRP Irp,
  6044. IN PVOID Context,
  6045. IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
  6046. IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
  6047. NTKERNELAPI
  6048. BOOLEAN
  6049. NTAPI
  6050. FsRtlOplockIsFastIoPossible(
  6051. IN POPLOCK Oplock);
  6052. NTKERNELAPI
  6053. BOOLEAN
  6054. NTAPI
  6055. FsRtlCurrentBatchOplock(
  6056. IN POPLOCK Oplock);
  6057. NTKERNELAPI
  6058. NTSTATUS
  6059. NTAPI
  6060. FsRtlNotifyVolumeEvent(
  6061. IN PFILE_OBJECT FileObject,
  6062. IN ULONG EventCode);
  6063. NTKERNELAPI
  6064. VOID
  6065. NTAPI
  6066. FsRtlNotifyInitializeSync(
  6067. IN PNOTIFY_SYNC *NotifySync);
  6068. NTKERNELAPI
  6069. VOID
  6070. NTAPI
  6071. FsRtlNotifyUninitializeSync(
  6072. IN PNOTIFY_SYNC *NotifySync);
  6073. NTKERNELAPI
  6074. VOID
  6075. NTAPI
  6076. FsRtlNotifyFullChangeDirectory(
  6077. IN PNOTIFY_SYNC NotifySync,
  6078. IN PLIST_ENTRY NotifyList,
  6079. IN PVOID FsContext,
  6080. IN PSTRING FullDirectoryName,
  6081. IN BOOLEAN WatchTree,
  6082. IN BOOLEAN IgnoreBuffer,
  6083. IN ULONG CompletionFilter,
  6084. IN PIRP NotifyIrp OPTIONAL,
  6085. IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
  6086. IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL);
  6087. NTKERNELAPI
  6088. VOID
  6089. NTAPI
  6090. FsRtlNotifyFilterReportChange(
  6091. IN PNOTIFY_SYNC NotifySync,
  6092. IN PLIST_ENTRY NotifyList,
  6093. IN PSTRING FullTargetName,
  6094. IN USHORT TargetNameOffset,
  6095. IN PSTRING StreamName OPTIONAL,
  6096. IN PSTRING NormalizedParentName OPTIONAL,
  6097. IN ULONG FilterMatch,
  6098. IN ULONG Action,
  6099. IN PVOID TargetContext OPTIONAL,
  6100. IN PVOID FilterContext OPTIONAL);
  6101. NTKERNELAPI
  6102. VOID
  6103. NTAPI
  6104. FsRtlNotifyFullReportChange(
  6105. IN PNOTIFY_SYNC NotifySync,
  6106. IN PLIST_ENTRY NotifyList,
  6107. IN PSTRING FullTargetName,
  6108. IN USHORT TargetNameOffset,
  6109. IN PSTRING StreamName OPTIONAL,
  6110. IN PSTRING NormalizedParentName OPTIONAL,
  6111. IN ULONG FilterMatch,
  6112. IN ULONG Action,
  6113. IN PVOID TargetContext OPTIONAL);
  6114. NTKERNELAPI
  6115. VOID
  6116. NTAPI
  6117. FsRtlNotifyCleanup(
  6118. IN PNOTIFY_SYNC NotifySync,
  6119. IN PLIST_ENTRY NotifyList,
  6120. IN PVOID FsContext);
  6121. NTKERNELAPI
  6122. VOID
  6123. NTAPI
  6124. FsRtlDissectName(
  6125. IN UNICODE_STRING Name,
  6126. OUT PUNICODE_STRING FirstPart,
  6127. OUT PUNICODE_STRING RemainingPart);
  6128. NTKERNELAPI
  6129. BOOLEAN
  6130. NTAPI
  6131. FsRtlDoesNameContainWildCards(
  6132. IN PUNICODE_STRING Name);
  6133. NTKERNELAPI
  6134. BOOLEAN
  6135. NTAPI
  6136. FsRtlAreNamesEqual(
  6137. IN PCUNICODE_STRING Name1,
  6138. IN PCUNICODE_STRING Name2,
  6139. IN BOOLEAN IgnoreCase,
  6140. IN PCWCH UpcaseTable OPTIONAL);
  6141. NTKERNELAPI
  6142. BOOLEAN
  6143. NTAPI
  6144. FsRtlIsNameInExpression(
  6145. IN PUNICODE_STRING Expression,
  6146. IN PUNICODE_STRING Name,
  6147. IN BOOLEAN IgnoreCase,
  6148. IN PWCHAR UpcaseTable OPTIONAL);
  6149. NTKERNELAPI
  6150. VOID
  6151. NTAPI
  6152. FsRtlPostPagingFileStackOverflow(
  6153. IN PVOID Context,
  6154. IN PKEVENT Event,
  6155. IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
  6156. NTKERNELAPI
  6157. VOID
  6158. NTAPI
  6159. FsRtlPostStackOverflow (
  6160. IN PVOID Context,
  6161. IN PKEVENT Event,
  6162. IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
  6163. NTKERNELAPI
  6164. NTSTATUS
  6165. NTAPI
  6166. FsRtlRegisterUncProvider(
  6167. OUT PHANDLE MupHandle,
  6168. IN PUNICODE_STRING RedirectorDeviceName,
  6169. IN BOOLEAN MailslotsSupported);
  6170. NTKERNELAPI
  6171. VOID
  6172. NTAPI
  6173. FsRtlDeregisterUncProvider(
  6174. IN HANDLE Handle);
  6175. NTKERNELAPI
  6176. VOID
  6177. NTAPI
  6178. FsRtlTeardownPerStreamContexts(
  6179. IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
  6180. NTKERNELAPI
  6181. NTSTATUS
  6182. NTAPI
  6183. FsRtlCreateSectionForDataScan(
  6184. OUT PHANDLE SectionHandle,
  6185. OUT PVOID *SectionObject,
  6186. OUT PLARGE_INTEGER SectionFileSize OPTIONAL,
  6187. IN PFILE_OBJECT FileObject,
  6188. IN ACCESS_MASK DesiredAccess,
  6189. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  6190. IN PLARGE_INTEGER MaximumSize OPTIONAL,
  6191. IN ULONG SectionPageProtection,
  6192. IN ULONG AllocationAttributes,
  6193. IN ULONG Flags);
  6194. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  6195. #if (NTDDI_VERSION >= NTDDI_WINXP)
  6196. NTKERNELAPI
  6197. VOID
  6198. NTAPI
  6199. FsRtlNotifyFilterChangeDirectory(
  6200. IN PNOTIFY_SYNC NotifySync,
  6201. IN PLIST_ENTRY NotifyList,
  6202. IN PVOID FsContext,
  6203. IN PSTRING FullDirectoryName,
  6204. IN BOOLEAN WatchTree,
  6205. IN BOOLEAN IgnoreBuffer,
  6206. IN ULONG CompletionFilter,
  6207. IN PIRP NotifyIrp OPTIONAL,
  6208. IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
  6209. IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL,
  6210. IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL);
  6211. NTKERNELAPI
  6212. NTSTATUS
  6213. NTAPI
  6214. FsRtlInsertPerStreamContext(
  6215. IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
  6216. IN PFSRTL_PER_STREAM_CONTEXT Ptr);
  6217. NTKERNELAPI
  6218. PFSRTL_PER_STREAM_CONTEXT
  6219. NTAPI
  6220. FsRtlLookupPerStreamContextInternal(
  6221. IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
  6222. IN PVOID OwnerId OPTIONAL,
  6223. IN PVOID InstanceId OPTIONAL);
  6224. NTKERNELAPI
  6225. PFSRTL_PER_STREAM_CONTEXT
  6226. NTAPI
  6227. FsRtlRemovePerStreamContext(
  6228. IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
  6229. IN PVOID OwnerId OPTIONAL,
  6230. IN PVOID InstanceId OPTIONAL);
  6231. NTKERNELAPI
  6232. VOID
  6233. NTAPI
  6234. FsRtlIncrementCcFastReadNotPossible(
  6235. VOID);
  6236. NTKERNELAPI
  6237. VOID
  6238. NTAPI
  6239. FsRtlIncrementCcFastReadWait(
  6240. VOID);
  6241. NTKERNELAPI
  6242. VOID
  6243. NTAPI
  6244. FsRtlIncrementCcFastReadNoWait(
  6245. VOID);
  6246. NTKERNELAPI
  6247. VOID
  6248. NTAPI
  6249. FsRtlIncrementCcFastReadResourceMiss(
  6250. VOID);
  6251. NTKERNELAPI
  6252. LOGICAL
  6253. NTAPI
  6254. FsRtlIsPagingFile(
  6255. IN PFILE_OBJECT FileObject);
  6256. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  6257. #if (NTDDI_VERSION >= NTDDI_WS03)
  6258. NTKERNELAPI
  6259. VOID
  6260. NTAPI
  6261. FsRtlInitializeBaseMcb(
  6262. IN PBASE_MCB Mcb,
  6263. IN POOL_TYPE PoolType);
  6264. NTKERNELAPI
  6265. VOID
  6266. NTAPI
  6267. FsRtlUninitializeBaseMcb(
  6268. IN PBASE_MCB Mcb);
  6269. NTKERNELAPI
  6270. VOID
  6271. NTAPI
  6272. FsRtlResetBaseMcb(
  6273. IN PBASE_MCB Mcb);
  6274. NTKERNELAPI
  6275. VOID
  6276. NTAPI
  6277. FsRtlTruncateBaseMcb(
  6278. IN PBASE_MCB Mcb,
  6279. IN LONGLONG Vbn);
  6280. NTKERNELAPI
  6281. BOOLEAN
  6282. NTAPI
  6283. FsRtlAddBaseMcbEntry(
  6284. IN PBASE_MCB Mcb,
  6285. IN LONGLONG Vbn,
  6286. IN LONGLONG Lbn,
  6287. IN LONGLONG SectorCount);
  6288. NTKERNELAPI
  6289. BOOLEAN
  6290. NTAPI
  6291. FsRtlRemoveBaseMcbEntry(
  6292. IN PBASE_MCB Mcb,
  6293. IN LONGLONG Vbn,
  6294. IN LONGLONG SectorCount);
  6295. NTKERNELAPI
  6296. BOOLEAN
  6297. NTAPI
  6298. FsRtlLookupBaseMcbEntry(
  6299. IN PBASE_MCB Mcb,
  6300. IN LONGLONG Vbn,
  6301. OUT PLONGLONG Lbn OPTIONAL,
  6302. OUT PLONGLONG SectorCountFromLbn OPTIONAL,
  6303. OUT PLONGLONG StartingLbn OPTIONAL,
  6304. OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
  6305. OUT PULONG Index OPTIONAL);
  6306. NTKERNELAPI
  6307. BOOLEAN
  6308. NTAPI
  6309. FsRtlLookupLastBaseMcbEntry(
  6310. IN PBASE_MCB Mcb,
  6311. OUT PLONGLONG Vbn,
  6312. OUT PLONGLONG Lbn);
  6313. NTKERNELAPI
  6314. BOOLEAN
  6315. NTAPI
  6316. FsRtlLookupLastBaseMcbEntryAndIndex(
  6317. IN PBASE_MCB OpaqueMcb,
  6318. IN OUT PLONGLONG LargeVbn,
  6319. IN OUT PLONGLONG LargeLbn,
  6320. IN OUT PULONG Index);
  6321. NTKERNELAPI
  6322. ULONG
  6323. NTAPI
  6324. FsRtlNumberOfRunsInBaseMcb(
  6325. IN PBASE_MCB Mcb);
  6326. NTKERNELAPI
  6327. BOOLEAN
  6328. NTAPI
  6329. FsRtlGetNextBaseMcbEntry(
  6330. IN PBASE_MCB Mcb,
  6331. IN ULONG RunIndex,
  6332. OUT PLONGLONG Vbn,
  6333. OUT PLONGLONG Lbn,
  6334. OUT PLONGLONG SectorCount);
  6335. NTKERNELAPI
  6336. BOOLEAN
  6337. NTAPI
  6338. FsRtlSplitBaseMcb(
  6339. IN PBASE_MCB Mcb,
  6340. IN LONGLONG Vbn,
  6341. IN LONGLONG Amount);
  6342. #endif /* (NTDDI_VERSION >= NTDDI_WS03) */
  6343. #if (NTDDI_VERSION >= NTDDI_VISTA)
  6344. BOOLEAN
  6345. NTAPI
  6346. FsRtlInitializeBaseMcbEx(
  6347. IN PBASE_MCB Mcb,
  6348. IN POOL_TYPE PoolType,
  6349. IN USHORT Flags);
  6350. NTSTATUS
  6351. NTAPI
  6352. FsRtlAddBaseMcbEntryEx(
  6353. IN PBASE_MCB Mcb,
  6354. IN LONGLONG Vbn,
  6355. IN LONGLONG Lbn,
  6356. IN LONGLONG SectorCount);
  6357. NTKERNELAPI
  6358. BOOLEAN
  6359. NTAPI
  6360. FsRtlCurrentOplock(
  6361. IN POPLOCK Oplock);
  6362. NTKERNELAPI
  6363. NTSTATUS
  6364. NTAPI
  6365. FsRtlOplockBreakToNone(
  6366. IN OUT POPLOCK Oplock,
  6367. IN PIO_STACK_LOCATION IrpSp OPTIONAL,
  6368. IN PIRP Irp,
  6369. IN PVOID Context OPTIONAL,
  6370. IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
  6371. IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
  6372. NTKERNELAPI
  6373. NTSTATUS
  6374. NTAPI
  6375. FsRtlNotifyVolumeEventEx(
  6376. IN PFILE_OBJECT FileObject,
  6377. IN ULONG EventCode,
  6378. IN PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
  6379. NTKERNELAPI
  6380. VOID
  6381. NTAPI
  6382. FsRtlNotifyCleanupAll(
  6383. IN PNOTIFY_SYNC NotifySync,
  6384. IN PLIST_ENTRY NotifyList);
  6385. NTSTATUS
  6386. NTAPI
  6387. FsRtlRegisterUncProviderEx(
  6388. OUT PHANDLE MupHandle,
  6389. IN PUNICODE_STRING RedirDevName,
  6390. IN PDEVICE_OBJECT DeviceObject,
  6391. IN ULONG Flags);
  6392. NTKERNELAPI
  6393. NTSTATUS
  6394. NTAPI
  6395. FsRtlCancellableWaitForSingleObject(
  6396. IN PVOID Object,
  6397. IN PLARGE_INTEGER Timeout OPTIONAL,
  6398. IN PIRP Irp OPTIONAL);
  6399. NTKERNELAPI
  6400. NTSTATUS
  6401. NTAPI
  6402. FsRtlCancellableWaitForMultipleObjects(
  6403. IN ULONG Count,
  6404. IN PVOID ObjectArray[],
  6405. IN WAIT_TYPE WaitType,
  6406. IN PLARGE_INTEGER Timeout OPTIONAL,
  6407. IN PKWAIT_BLOCK WaitBlockArray OPTIONAL,
  6408. IN PIRP Irp OPTIONAL);
  6409. NTKERNELAPI
  6410. NTSTATUS
  6411. NTAPI
  6412. FsRtlMupGetProviderInfoFromFileObject(
  6413. IN PFILE_OBJECT pFileObject,
  6414. IN ULONG Level,
  6415. OUT PVOID pBuffer,
  6416. IN OUT PULONG pBufferSize);
  6417. NTKERNELAPI
  6418. NTSTATUS
  6419. NTAPI
  6420. FsRtlMupGetProviderIdFromName(
  6421. IN PUNICODE_STRING pProviderName,
  6422. OUT PULONG32 pProviderId);
  6423. NTKERNELAPI
  6424. VOID
  6425. NTAPI
  6426. FsRtlIncrementCcFastMdlReadWait(
  6427. VOID);
  6428. NTKERNELAPI
  6429. NTSTATUS
  6430. NTAPI
  6431. FsRtlValidateReparsePointBuffer(
  6432. IN ULONG BufferLength,
  6433. IN PREPARSE_DATA_BUFFER ReparseBuffer);
  6434. NTKERNELAPI
  6435. NTSTATUS
  6436. NTAPI
  6437. FsRtlRemoveDotsFromPath(
  6438. IN OUT PWSTR OriginalString,
  6439. IN USHORT PathLength,
  6440. OUT USHORT *NewLength);
  6441. NTKERNELAPI
  6442. NTSTATUS
  6443. NTAPI
  6444. FsRtlAllocateExtraCreateParameterList(
  6445. IN FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
  6446. OUT PECP_LIST *EcpList);
  6447. NTKERNELAPI
  6448. VOID
  6449. NTAPI
  6450. FsRtlFreeExtraCreateParameterList(
  6451. IN PECP_LIST EcpList);
  6452. NTKERNELAPI
  6453. NTSTATUS
  6454. NTAPI
  6455. FsRtlAllocateExtraCreateParameter(
  6456. IN LPCGUID EcpType,
  6457. IN ULONG SizeOfContext,
  6458. IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
  6459. IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
  6460. IN ULONG PoolTag,
  6461. OUT PVOID *EcpContext);
  6462. NTKERNELAPI
  6463. VOID
  6464. NTAPI
  6465. FsRtlFreeExtraCreateParameter(
  6466. IN PVOID EcpContext);
  6467. NTKERNELAPI
  6468. VOID
  6469. NTAPI
  6470. FsRtlInitExtraCreateParameterLookasideList(
  6471. IN OUT PVOID Lookaside,
  6472. IN FSRTL_ECP_LOOKASIDE_FLAGS Flags,
  6473. IN SIZE_T Size,
  6474. IN ULONG Tag);
  6475. VOID
  6476. NTAPI
  6477. FsRtlDeleteExtraCreateParameterLookasideList(
  6478. IN OUT PVOID Lookaside,
  6479. IN FSRTL_ECP_LOOKASIDE_FLAGS Flags);
  6480. NTKERNELAPI
  6481. NTSTATUS
  6482. NTAPI
  6483. FsRtlAllocateExtraCreateParameterFromLookasideList(
  6484. IN LPCGUID EcpType,
  6485. IN ULONG SizeOfContext,
  6486. IN FSRTL_ALLOCATE_ECP_FLAGS Flags,
  6487. IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
  6488. IN OUT PVOID LookasideList,
  6489. OUT PVOID *EcpContext);
  6490. NTKERNELAPI
  6491. NTSTATUS
  6492. NTAPI
  6493. FsRtlInsertExtraCreateParameter(
  6494. IN OUT PECP_LIST EcpList,
  6495. IN OUT PVOID EcpContext);
  6496. NTKERNELAPI
  6497. NTSTATUS
  6498. NTAPI
  6499. FsRtlFindExtraCreateParameter(
  6500. IN PECP_LIST EcpList,
  6501. IN LPCGUID EcpType,
  6502. OUT PVOID *EcpContext OPTIONAL,
  6503. OUT ULONG *EcpContextSize OPTIONAL);
  6504. NTKERNELAPI
  6505. NTSTATUS
  6506. NTAPI
  6507. FsRtlRemoveExtraCreateParameter(
  6508. IN OUT PECP_LIST EcpList,
  6509. IN LPCGUID EcpType,
  6510. OUT PVOID *EcpContext,
  6511. OUT ULONG *EcpContextSize OPTIONAL);
  6512. NTKERNELAPI
  6513. NTSTATUS
  6514. NTAPI
  6515. FsRtlGetEcpListFromIrp(
  6516. IN PIRP Irp,
  6517. OUT PECP_LIST *EcpList OPTIONAL);
  6518. NTKERNELAPI
  6519. NTSTATUS
  6520. NTAPI
  6521. FsRtlSetEcpListIntoIrp(
  6522. IN OUT PIRP Irp,
  6523. IN PECP_LIST EcpList);
  6524. NTKERNELAPI
  6525. NTSTATUS
  6526. NTAPI
  6527. FsRtlGetNextExtraCreateParameter(
  6528. IN PECP_LIST EcpList,
  6529. IN PVOID CurrentEcpContext OPTIONAL,
  6530. OUT LPGUID NextEcpType OPTIONAL,
  6531. OUT PVOID *NextEcpContext OPTIONAL,
  6532. OUT ULONG *NextEcpContextSize OPTIONAL);
  6533. NTKERNELAPI
  6534. VOID
  6535. NTAPI
  6536. FsRtlAcknowledgeEcp(
  6537. IN PVOID EcpContext);
  6538. NTKERNELAPI
  6539. BOOLEAN
  6540. NTAPI
  6541. FsRtlIsEcpAcknowledged(
  6542. IN PVOID EcpContext);
  6543. NTKERNELAPI
  6544. BOOLEAN
  6545. NTAPI
  6546. FsRtlIsEcpFromUserMode(
  6547. IN PVOID EcpContext);
  6548. NTKERNELAPI
  6549. NTSTATUS
  6550. NTAPI
  6551. FsRtlChangeBackingFileObject(
  6552. IN PFILE_OBJECT CurrentFileObject OPTIONAL,
  6553. IN PFILE_OBJECT NewFileObject,
  6554. IN FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
  6555. IN ULONG Flags);
  6556. NTKERNELAPI
  6557. NTSTATUS
  6558. NTAPI
  6559. FsRtlLogCcFlushError(
  6560. IN PUNICODE_STRING FileName,
  6561. IN PDEVICE_OBJECT DeviceObject,
  6562. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  6563. IN NTSTATUS FlushError,
  6564. IN ULONG Flags);
  6565. NTKERNELAPI
  6566. BOOLEAN
  6567. NTAPI
  6568. FsRtlAreVolumeStartupApplicationsComplete(
  6569. VOID);
  6570. NTKERNELAPI
  6571. ULONG
  6572. NTAPI
  6573. FsRtlQueryMaximumVirtualDiskNestingLevel(
  6574. VOID);
  6575. NTKERNELAPI
  6576. NTSTATUS
  6577. NTAPI
  6578. FsRtlGetVirtualDiskNestingLevel(
  6579. IN PDEVICE_OBJECT DeviceObject,
  6580. OUT PULONG NestingLevel,
  6581. OUT PULONG NestingFlags OPTIONAL);
  6582. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  6583. #if (NTDDI_VERSION >= NTDDI_VISTASP1)
  6584. NTKERNELAPI
  6585. NTSTATUS
  6586. NTAPI
  6587. FsRtlCheckOplockEx(
  6588. IN POPLOCK Oplock,
  6589. IN PIRP Irp,
  6590. IN ULONG Flags,
  6591. IN PVOID Context OPTIONAL,
  6592. IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
  6593. IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
  6594. #endif
  6595. #if (NTDDI_VERSION >= NTDDI_WIN7)
  6596. NTKERNELAPI
  6597. BOOLEAN
  6598. NTAPI
  6599. FsRtlAreThereCurrentOrInProgressFileLocks(
  6600. IN PFILE_LOCK FileLock);
  6601. NTKERNELAPI
  6602. BOOLEAN
  6603. NTAPI
  6604. FsRtlOplockIsSharedRequest(
  6605. IN PIRP Irp);
  6606. NTKERNELAPI
  6607. NTSTATUS
  6608. NTAPI
  6609. FsRtlOplockBreakH(
  6610. IN POPLOCK Oplock,
  6611. IN PIRP Irp,
  6612. IN ULONG Flags,
  6613. IN PVOID Context OPTIONAL,
  6614. IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
  6615. IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
  6616. NTKERNELAPI
  6617. BOOLEAN
  6618. NTAPI
  6619. FsRtlCurrentOplockH(
  6620. IN POPLOCK Oplock);
  6621. NTKERNELAPI
  6622. NTSTATUS
  6623. NTAPI
  6624. FsRtlOplockBreakToNoneEx(
  6625. IN OUT POPLOCK Oplock,
  6626. IN PIRP Irp,
  6627. IN ULONG Flags,
  6628. IN PVOID Context OPTIONAL,
  6629. IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
  6630. IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
  6631. NTKERNELAPI
  6632. NTSTATUS
  6633. NTAPI
  6634. FsRtlOplockFsctrlEx(
  6635. IN POPLOCK Oplock,
  6636. IN PIRP Irp,
  6637. IN ULONG OpenCount,
  6638. IN ULONG Flags);
  6639. NTKERNELAPI
  6640. BOOLEAN
  6641. NTAPI
  6642. FsRtlOplockKeysEqual(
  6643. IN PFILE_OBJECT Fo1 OPTIONAL,
  6644. IN PFILE_OBJECT Fo2 OPTIONAL);
  6645. NTKERNELAPI
  6646. NTSTATUS
  6647. NTAPI
  6648. FsRtlInitializeExtraCreateParameterList(
  6649. IN OUT PECP_LIST EcpList);
  6650. NTKERNELAPI
  6651. VOID
  6652. NTAPI
  6653. FsRtlInitializeExtraCreateParameter(
  6654. IN PECP_HEADER Ecp,
  6655. IN ULONG EcpFlags,
  6656. IN PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback OPTIONAL,
  6657. IN ULONG TotalSize,
  6658. IN LPCGUID EcpType,
  6659. IN PVOID ListAllocatedFrom OPTIONAL);
  6660. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  6661. NTKERNELAPI
  6662. NTSTATUS
  6663. NTAPI
  6664. FsRtlInsertPerFileContext(
  6665. IN PVOID* PerFileContextPointer,
  6666. IN PFSRTL_PER_FILE_CONTEXT Ptr);
  6667. NTKERNELAPI
  6668. PFSRTL_PER_FILE_CONTEXT
  6669. NTAPI
  6670. FsRtlLookupPerFileContext(
  6671. IN PVOID* PerFileContextPointer,
  6672. IN PVOID OwnerId OPTIONAL,
  6673. IN PVOID InstanceId OPTIONAL);
  6674. NTKERNELAPI
  6675. PFSRTL_PER_FILE_CONTEXT
  6676. NTAPI
  6677. FsRtlRemovePerFileContext(
  6678. IN PVOID* PerFileContextPointer,
  6679. IN PVOID OwnerId OPTIONAL,
  6680. IN PVOID InstanceId OPTIONAL);
  6681. NTKERNELAPI
  6682. VOID
  6683. NTAPI
  6684. FsRtlTeardownPerFileContexts(
  6685. IN PVOID* PerFileContextPointer);
  6686. NTKERNELAPI
  6687. NTSTATUS
  6688. NTAPI
  6689. FsRtlInsertPerFileObjectContext(
  6690. IN PFILE_OBJECT FileObject,
  6691. IN PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
  6692. NTKERNELAPI
  6693. PFSRTL_PER_FILEOBJECT_CONTEXT
  6694. NTAPI
  6695. FsRtlLookupPerFileObjectContext(
  6696. IN PFILE_OBJECT FileObject,
  6697. IN PVOID OwnerId OPTIONAL,
  6698. IN PVOID InstanceId OPTIONAL);
  6699. NTKERNELAPI
  6700. PFSRTL_PER_FILEOBJECT_CONTEXT
  6701. NTAPI
  6702. FsRtlRemovePerFileObjectContext(
  6703. IN PFILE_OBJECT FileObject,
  6704. IN PVOID OwnerId OPTIONAL,
  6705. IN PVOID InstanceId OPTIONAL);
  6706. #define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \
  6707. FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \
  6708. )
  6709. #define FsRtlAreThereCurrentFileLocks(FL) ( \
  6710. ((FL)->FastIoIsQuestionable) \
  6711. )
  6712. #define FsRtlIncrementLockRequestsInProgress(FL) { \
  6713. ASSERT( (FL)->LockRequestsInProgress >= 0 ); \
  6714. (void) \
  6715. (InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
  6716. }
  6717. #define FsRtlDecrementLockRequestsInProgress(FL) { \
  6718. ASSERT( (FL)->LockRequestsInProgress > 0 ); \
  6719. (void) \
  6720. (InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress)));\
  6721. }
  6722. /* GCC compatible definition, MS one is retarded */
  6723. extern NTKERNELAPI const UCHAR * const FsRtlLegalAnsiCharacterArray;
  6724. #define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
  6725. #define FsRtlIsAnsiCharacterWild(C) ( \
  6726. FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], FSRTL_WILD_CHARACTER ) \
  6727. )
  6728. #define FsRtlIsAnsiCharacterLegalFat(C, WILD) ( \
  6729. FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_FAT_LEGAL) | \
  6730. ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
  6731. )
  6732. #define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) ( \
  6733. FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_HPFS_LEGAL) | \
  6734. ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
  6735. )
  6736. #define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) ( \
  6737. FlagOn(FsRtlLegalAnsiCharacterArray[(UCHAR)(C)], (FSRTL_NTFS_LEGAL) | \
  6738. ((WILD) ? FSRTL_WILD_CHARACTER : 0 )) \
  6739. )
  6740. #define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \
  6741. FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \
  6742. )
  6743. #define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \
  6744. FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \
  6745. )
  6746. #define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \
  6747. ((SCHAR)(C) < 0) ? DEFAULT_RET : \
  6748. FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
  6749. (FLAGS) | \
  6750. ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \
  6751. )
  6752. #define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \
  6753. (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
  6754. (NLS_MB_CODE_PAGE_TAG && \
  6755. (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \
  6756. )
  6757. #define FsRtlIsUnicodeCharacterWild(C) ( \
  6758. (((C) >= 0x40) ? \
  6759. FALSE : \
  6760. FlagOn(FsRtlLegalAnsiCharacterArray[(C)], FSRTL_WILD_CHARACTER )) \
  6761. )
  6762. #define FsRtlInitPerFileContext( _fc, _owner, _inst, _cb) \
  6763. ((_fc)->OwnerId = (_owner), \
  6764. (_fc)->InstanceId = (_inst), \
  6765. (_fc)->FreeCallback = (_cb))
  6766. #define FsRtlGetPerFileContextPointer(_fo) \
  6767. (FsRtlSupportsPerFileContexts(_fo) ? \
  6768. FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : \
  6769. NULL)
  6770. #define FsRtlSupportsPerFileContexts(_fo) \
  6771. ((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
  6772. (FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
  6773. (FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
  6774. #define FsRtlSetupAdvancedHeaderEx( _advhdr, _fmutx, _fctxptr ) \
  6775. { \
  6776. FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
  6777. if ((_fctxptr) != NULL) { \
  6778. (_advhdr)->FileContextSupportPointer = (_fctxptr); \
  6779. } \
  6780. }
  6781. #define FsRtlGetPerStreamContextPointer(FO) ( \
  6782. (PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext \
  6783. )
  6784. #define FsRtlInitPerStreamContext(PSC, O, I, FC) ( \
  6785. (PSC)->OwnerId = (O), \
  6786. (PSC)->InstanceId = (I), \
  6787. (PSC)->FreeCallback = (FC) \
  6788. )
  6789. #define FsRtlSupportsPerStreamContexts(FO) ( \
  6790. (BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
  6791. FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
  6792. FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) \
  6793. )
  6794. #define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
  6795. (((NULL != (_sc)) && \
  6796. FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
  6797. !IsListEmpty(&(_sc)->FilterContexts)) ? \
  6798. FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \
  6799. NULL)
  6800. FORCEINLINE
  6801. VOID
  6802. NTAPI
  6803. FsRtlSetupAdvancedHeader(
  6804. IN PVOID AdvHdr,
  6805. IN PFAST_MUTEX FMutex )
  6806. {
  6807. PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
  6808. localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
  6809. localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
  6810. #if (NTDDI_VERSION >= NTDDI_VISTA)
  6811. localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
  6812. #else
  6813. localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
  6814. #endif
  6815. InitializeListHead( &localAdvHdr->FilterContexts );
  6816. if (FMutex != NULL) {
  6817. localAdvHdr->FastMutex = FMutex;
  6818. }
  6819. #if (NTDDI_VERSION >= NTDDI_VISTA)
  6820. *((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
  6821. localAdvHdr->FileContextSupportPointer = NULL;
  6822. #endif
  6823. }
  6824. #define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
  6825. ((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
  6826. #define FsRtlCompleteRequest(IRP,STATUS) { \
  6827. (IRP)->IoStatus.Status = (STATUS); \
  6828. IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
  6829. }
  6830. /* Common Cache Types */
  6831. #define VACB_MAPPING_GRANULARITY (0x40000)
  6832. #define VACB_OFFSET_SHIFT (18)
  6833. typedef struct _PUBLIC_BCB {
  6834. CSHORT NodeTypeCode;
  6835. CSHORT NodeByteSize;
  6836. ULONG MappedLength;
  6837. LARGE_INTEGER MappedFileOffset;
  6838. } PUBLIC_BCB, *PPUBLIC_BCB;
  6839. typedef struct _CC_FILE_SIZES {
  6840. LARGE_INTEGER AllocationSize;
  6841. LARGE_INTEGER FileSize;
  6842. LARGE_INTEGER ValidDataLength;
  6843. } CC_FILE_SIZES, *PCC_FILE_SIZES;
  6844. typedef BOOLEAN
  6845. (NTAPI *PACQUIRE_FOR_LAZY_WRITE) (
  6846. IN PVOID Context,
  6847. IN BOOLEAN Wait);
  6848. typedef VOID
  6849. (NTAPI *PRELEASE_FROM_LAZY_WRITE) (
  6850. IN PVOID Context);
  6851. typedef BOOLEAN
  6852. (NTAPI *PACQUIRE_FOR_READ_AHEAD) (
  6853. IN PVOID Context,
  6854. IN BOOLEAN Wait);
  6855. typedef VOID
  6856. (NTAPI *PRELEASE_FROM_READ_AHEAD) (
  6857. IN PVOID Context);
  6858. typedef struct _CACHE_MANAGER_CALLBACKS {
  6859. PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
  6860. PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
  6861. PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
  6862. PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
  6863. } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
  6864. typedef struct _CACHE_UNINITIALIZE_EVENT {
  6865. struct _CACHE_UNINITIALIZE_EVENT *Next;
  6866. KEVENT Event;
  6867. } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
  6868. typedef VOID
  6869. (NTAPI *PDIRTY_PAGE_ROUTINE) (
  6870. IN PFILE_OBJECT FileObject,
  6871. IN PLARGE_INTEGER FileOffset,
  6872. IN ULONG Length,
  6873. IN PLARGE_INTEGER OldestLsn,
  6874. IN PLARGE_INTEGER NewestLsn,
  6875. IN PVOID Context1,
  6876. IN PVOID Context2);
  6877. typedef VOID
  6878. (NTAPI *PFLUSH_TO_LSN) (
  6879. IN PVOID LogHandle,
  6880. IN LARGE_INTEGER Lsn);
  6881. typedef VOID
  6882. (NTAPI *PCC_POST_DEFERRED_WRITE) (
  6883. IN PVOID Context1,
  6884. IN PVOID Context2);
  6885. #define UNINITIALIZE_CACHE_MAPS (1)
  6886. #define DO_NOT_RETRY_PURGE (2)
  6887. #define DO_NOT_PURGE_DIRTY_PAGES (0x4)
  6888. #define CC_FLUSH_AND_PURGE_NO_PURGE (0x1)
  6889. /* Common Cache Functions */
  6890. #define CcIsFileCached(FO) ( \
  6891. ((FO)->SectionObjectPointer != NULL) && \
  6892. (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
  6893. )
  6894. extern ULONG CcFastMdlReadWait;
  6895. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  6896. NTKERNELAPI
  6897. VOID
  6898. NTAPI
  6899. CcInitializeCacheMap(
  6900. IN PFILE_OBJECT FileObject,
  6901. IN PCC_FILE_SIZES FileSizes,
  6902. IN BOOLEAN PinAccess,
  6903. IN PCACHE_MANAGER_CALLBACKS Callbacks,
  6904. IN PVOID LazyWriteContext);
  6905. NTKERNELAPI
  6906. BOOLEAN
  6907. NTAPI
  6908. CcUninitializeCacheMap(
  6909. IN PFILE_OBJECT FileObject,
  6910. IN PLARGE_INTEGER TruncateSize OPTIONAL,
  6911. IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
  6912. NTKERNELAPI
  6913. VOID
  6914. NTAPI
  6915. CcSetFileSizes(
  6916. IN PFILE_OBJECT FileObject,
  6917. IN PCC_FILE_SIZES FileSizes);
  6918. NTKERNELAPI
  6919. VOID
  6920. NTAPI
  6921. CcSetDirtyPageThreshold(
  6922. IN PFILE_OBJECT FileObject,
  6923. IN ULONG DirtyPageThreshold);
  6924. NTKERNELAPI
  6925. VOID
  6926. NTAPI
  6927. CcFlushCache(
  6928. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  6929. IN PLARGE_INTEGER FileOffset OPTIONAL,
  6930. IN ULONG Length,
  6931. OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
  6932. NTKERNELAPI
  6933. LARGE_INTEGER
  6934. NTAPI
  6935. CcGetFlushedValidData(
  6936. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  6937. IN BOOLEAN BcbListHeld);
  6938. NTKERNELAPI
  6939. BOOLEAN
  6940. NTAPI
  6941. CcZeroData(
  6942. IN PFILE_OBJECT FileObject,
  6943. IN PLARGE_INTEGER StartOffset,
  6944. IN PLARGE_INTEGER EndOffset,
  6945. IN BOOLEAN Wait);
  6946. NTKERNELAPI
  6947. PVOID
  6948. NTAPI
  6949. CcRemapBcb(
  6950. IN PVOID Bcb);
  6951. NTKERNELAPI
  6952. VOID
  6953. NTAPI
  6954. CcRepinBcb(
  6955. IN PVOID Bcb);
  6956. NTKERNELAPI
  6957. VOID
  6958. NTAPI
  6959. CcUnpinRepinnedBcb(
  6960. IN PVOID Bcb,
  6961. IN BOOLEAN WriteThrough,
  6962. OUT PIO_STATUS_BLOCK IoStatus);
  6963. NTKERNELAPI
  6964. PFILE_OBJECT
  6965. NTAPI
  6966. CcGetFileObjectFromSectionPtrs(
  6967. IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
  6968. NTKERNELAPI
  6969. PFILE_OBJECT
  6970. NTAPI
  6971. CcGetFileObjectFromBcb(
  6972. IN PVOID Bcb);
  6973. NTKERNELAPI
  6974. BOOLEAN
  6975. NTAPI
  6976. CcCanIWrite(
  6977. IN PFILE_OBJECT FileObject,
  6978. IN ULONG BytesToWrite,
  6979. IN BOOLEAN Wait,
  6980. IN BOOLEAN Retrying);
  6981. NTKERNELAPI
  6982. VOID
  6983. NTAPI
  6984. CcDeferWrite(
  6985. IN PFILE_OBJECT FileObject,
  6986. IN PCC_POST_DEFERRED_WRITE PostRoutine,
  6987. IN PVOID Context1,
  6988. IN PVOID Context2,
  6989. IN ULONG BytesToWrite,
  6990. IN BOOLEAN Retrying);
  6991. NTKERNELAPI
  6992. BOOLEAN
  6993. NTAPI
  6994. CcCopyRead(
  6995. IN PFILE_OBJECT FileObject,
  6996. IN PLARGE_INTEGER FileOffset,
  6997. IN ULONG Length,
  6998. IN BOOLEAN Wait,
  6999. OUT PVOID Buffer,
  7000. OUT PIO_STATUS_BLOCK IoStatus);
  7001. NTKERNELAPI
  7002. VOID
  7003. NTAPI
  7004. CcFastCopyRead(
  7005. IN PFILE_OBJECT FileObject,
  7006. IN ULONG FileOffset,
  7007. IN ULONG Length,
  7008. IN ULONG PageCount,
  7009. OUT PVOID Buffer,
  7010. OUT PIO_STATUS_BLOCK IoStatus);
  7011. NTKERNELAPI
  7012. BOOLEAN
  7013. NTAPI
  7014. CcCopyWrite(
  7015. IN PFILE_OBJECT FileObject,
  7016. IN PLARGE_INTEGER FileOffset,
  7017. IN ULONG Length,
  7018. IN BOOLEAN Wait,
  7019. IN PVOID Buffer);
  7020. NTKERNELAPI
  7021. VOID
  7022. NTAPI
  7023. CcFastCopyWrite(
  7024. IN PFILE_OBJECT FileObject,
  7025. IN ULONG FileOffset,
  7026. IN ULONG Length,
  7027. IN PVOID Buffer);
  7028. NTKERNELAPI
  7029. VOID
  7030. NTAPI
  7031. CcMdlRead(
  7032. IN PFILE_OBJECT FileObject,
  7033. IN PLARGE_INTEGER FileOffset,
  7034. IN ULONG Length,
  7035. OUT PMDL *MdlChain,
  7036. OUT PIO_STATUS_BLOCK IoStatus);
  7037. NTKERNELAPI
  7038. VOID
  7039. NTAPI
  7040. CcMdlReadComplete(
  7041. IN PFILE_OBJECT FileObject,
  7042. IN PMDL MdlChain);
  7043. NTKERNELAPI
  7044. VOID
  7045. NTAPI
  7046. CcPrepareMdlWrite(
  7047. IN PFILE_OBJECT FileObject,
  7048. IN PLARGE_INTEGER FileOffset,
  7049. IN ULONG Length,
  7050. OUT PMDL *MdlChain,
  7051. OUT PIO_STATUS_BLOCK IoStatus);
  7052. NTKERNELAPI
  7053. VOID
  7054. NTAPI
  7055. CcMdlWriteComplete(
  7056. IN PFILE_OBJECT FileObject,
  7057. IN PLARGE_INTEGER FileOffset,
  7058. IN PMDL MdlChain);
  7059. NTKERNELAPI
  7060. VOID
  7061. NTAPI
  7062. CcScheduleReadAhead(
  7063. IN PFILE_OBJECT FileObject,
  7064. IN PLARGE_INTEGER FileOffset,
  7065. IN ULONG Length);
  7066. NTKERNELAPI
  7067. NTSTATUS
  7068. NTAPI
  7069. CcWaitForCurrentLazyWriterActivity(
  7070. VOID);
  7071. NTKERNELAPI
  7072. VOID
  7073. NTAPI
  7074. CcSetReadAheadGranularity(
  7075. IN PFILE_OBJECT FileObject,
  7076. IN ULONG Granularity);
  7077. NTKERNELAPI
  7078. BOOLEAN
  7079. NTAPI
  7080. CcPinRead(
  7081. IN PFILE_OBJECT FileObject,
  7082. IN PLARGE_INTEGER FileOffset,
  7083. IN ULONG Length,
  7084. IN ULONG Flags,
  7085. OUT PVOID *Bcb,
  7086. OUT PVOID *Buffer);
  7087. NTKERNELAPI
  7088. BOOLEAN
  7089. NTAPI
  7090. CcPinMappedData(
  7091. IN PFILE_OBJECT FileObject,
  7092. IN PLARGE_INTEGER FileOffset,
  7093. IN ULONG Length,
  7094. IN ULONG Flags,
  7095. IN OUT PVOID *Bcb);
  7096. NTKERNELAPI
  7097. BOOLEAN
  7098. NTAPI
  7099. CcPreparePinWrite(
  7100. IN PFILE_OBJECT FileObject,
  7101. IN PLARGE_INTEGER FileOffset,
  7102. IN ULONG Length,
  7103. IN BOOLEAN Zero,
  7104. IN ULONG Flags,
  7105. OUT PVOID *Bcb,
  7106. OUT PVOID *Buffer);
  7107. NTKERNELAPI
  7108. VOID
  7109. NTAPI
  7110. CcSetDirtyPinnedData(
  7111. IN PVOID BcbVoid,
  7112. IN PLARGE_INTEGER Lsn OPTIONAL);
  7113. NTKERNELAPI
  7114. VOID
  7115. NTAPI
  7116. CcUnpinData(
  7117. IN PVOID Bcb);
  7118. NTKERNELAPI
  7119. VOID
  7120. NTAPI
  7121. CcSetBcbOwnerPointer(
  7122. IN PVOID Bcb,
  7123. IN PVOID OwnerPointer);
  7124. NTKERNELAPI
  7125. VOID
  7126. NTAPI
  7127. CcUnpinDataForThread(
  7128. IN PVOID Bcb,
  7129. IN ERESOURCE_THREAD ResourceThreadId);
  7130. NTKERNELAPI
  7131. VOID
  7132. NTAPI
  7133. CcSetAdditionalCacheAttributes(
  7134. IN PFILE_OBJECT FileObject,
  7135. IN BOOLEAN DisableReadAhead,
  7136. IN BOOLEAN DisableWriteBehind);
  7137. NTKERNELAPI
  7138. BOOLEAN
  7139. NTAPI
  7140. CcIsThereDirtyData(
  7141. IN PVPB Vpb);
  7142. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  7143. #if (NTDDI_VERSION >= NTDDI_WINXP)
  7144. NTKERNELAPI
  7145. VOID
  7146. NTAPI
  7147. CcMdlWriteAbort(
  7148. IN PFILE_OBJECT FileObject,
  7149. IN PMDL MdlChain);
  7150. NTKERNELAPI
  7151. VOID
  7152. NTAPI
  7153. CcSetLogHandleForFile(
  7154. IN PFILE_OBJECT FileObject,
  7155. IN PVOID LogHandle,
  7156. IN PFLUSH_TO_LSN FlushToLsnRoutine);
  7157. NTKERNELAPI
  7158. LARGE_INTEGER
  7159. NTAPI
  7160. CcGetDirtyPages(
  7161. IN PVOID LogHandle,
  7162. IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
  7163. IN PVOID Context1,
  7164. IN PVOID Context2);
  7165. #endif
  7166. #if (NTDDI_VERSION >= NTDDI_WINXP)
  7167. NTKERNELAPI
  7168. BOOLEAN
  7169. NTAPI
  7170. CcMapData(
  7171. IN PFILE_OBJECT FileObject,
  7172. IN PLARGE_INTEGER FileOffset,
  7173. IN ULONG Length,
  7174. IN ULONG Flags,
  7175. OUT PVOID *Bcb,
  7176. OUT PVOID *Buffer);
  7177. #elif (NTDDI_VERSION >= NTDDI_WIN2K)
  7178. NTKERNELAPI
  7179. BOOLEAN
  7180. NTAPI
  7181. CcMapData(
  7182. IN PFILE_OBJECT FileObject,
  7183. IN PLARGE_INTEGER FileOffset,
  7184. IN ULONG Length,
  7185. IN BOOLEAN Wait,
  7186. OUT PVOID *Bcb,
  7187. OUT PVOID *Buffer);
  7188. #endif
  7189. #if (NTDDI_VERSION >= NTDDI_VISTA)
  7190. NTKERNELAPI
  7191. NTSTATUS
  7192. NTAPI
  7193. CcSetFileSizesEx(
  7194. IN PFILE_OBJECT FileObject,
  7195. IN PCC_FILE_SIZES FileSizes);
  7196. NTKERNELAPI
  7197. PFILE_OBJECT
  7198. NTAPI
  7199. CcGetFileObjectFromSectionPtrsRef(
  7200. IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
  7201. NTKERNELAPI
  7202. VOID
  7203. NTAPI
  7204. CcSetParallelFlushFile(
  7205. IN PFILE_OBJECT FileObject,
  7206. IN BOOLEAN EnableParallelFlush);
  7207. NTKERNELAPI
  7208. BOOLEAN
  7209. CcIsThereDirtyDataEx(
  7210. IN PVPB Vpb,
  7211. IN PULONG NumberOfDirtyPages OPTIONAL);
  7212. #endif
  7213. #if (NTDDI_VERSION >= NTDDI_WIN7)
  7214. NTKERNELAPI
  7215. VOID
  7216. NTAPI
  7217. CcCoherencyFlushAndPurgeCache(
  7218. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  7219. IN PLARGE_INTEGER FileOffset OPTIONAL,
  7220. IN ULONG Length,
  7221. OUT PIO_STATUS_BLOCK IoStatus,
  7222. IN ULONG Flags OPTIONAL);
  7223. #endif
  7224. #define CcGetFileSizePointer(FO) ( \
  7225. ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
  7226. )
  7227. #if (NTDDI_VERSION >= NTDDI_VISTA)
  7228. NTKERNELAPI
  7229. BOOLEAN
  7230. NTAPI
  7231. CcPurgeCacheSection(
  7232. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  7233. IN PLARGE_INTEGER FileOffset OPTIONAL,
  7234. IN ULONG Length,
  7235. IN ULONG Flags);
  7236. #elif (NTDDI_VERSION >= NTDDI_WIN2K)
  7237. NTKERNELAPI
  7238. BOOLEAN
  7239. NTAPI
  7240. CcPurgeCacheSection(
  7241. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  7242. IN PLARGE_INTEGER FileOffset OPTIONAL,
  7243. IN ULONG Length,
  7244. IN BOOLEAN UninitializeCacheMaps);
  7245. #endif
  7246. #if (NTDDI_VERSION >= NTDDI_WIN7)
  7247. NTKERNELAPI
  7248. BOOLEAN
  7249. NTAPI
  7250. CcCopyWriteWontFlush(
  7251. IN PFILE_OBJECT FileObject,
  7252. IN PLARGE_INTEGER FileOffset,
  7253. IN ULONG Length);
  7254. #else
  7255. #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
  7256. #endif
  7257. #define CcReadAhead(FO, FOFF, LEN) ( \
  7258. if ((LEN) >= 256) { \
  7259. CcScheduleReadAhead((FO), (FOFF), (LEN)); \
  7260. } \
  7261. )
  7262. /******************************************************************************
  7263. * ZwXxx Functions *
  7264. ******************************************************************************/
  7265. NTSYSAPI
  7266. NTSTATUS
  7267. NTAPI
  7268. ZwQueryEaFile(
  7269. IN HANDLE FileHandle,
  7270. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7271. OUT PVOID Buffer,
  7272. IN ULONG Length,
  7273. IN BOOLEAN ReturnSingleEntry,
  7274. IN PVOID EaList OPTIONAL,
  7275. IN ULONG EaListLength,
  7276. IN PULONG EaIndex OPTIONAL,
  7277. IN BOOLEAN RestartScan);
  7278. NTSYSAPI
  7279. NTSTATUS
  7280. NTAPI
  7281. ZwSetEaFile(
  7282. IN HANDLE FileHandle,
  7283. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7284. OUT PVOID Buffer,
  7285. IN ULONG Length);
  7286. NTSYSAPI
  7287. NTSTATUS
  7288. NTAPI
  7289. ZwDuplicateToken(
  7290. IN HANDLE ExistingTokenHandle,
  7291. IN ACCESS_MASK DesiredAccess,
  7292. IN POBJECT_ATTRIBUTES ObjectAttributes,
  7293. IN BOOLEAN EffectiveOnly,
  7294. IN TOKEN_TYPE TokenType,
  7295. OUT PHANDLE NewTokenHandle);
  7296. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  7297. NTSYSAPI
  7298. NTSTATUS
  7299. NTAPI
  7300. ZwQueryObject(
  7301. IN HANDLE Handle OPTIONAL,
  7302. IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
  7303. OUT PVOID ObjectInformation OPTIONAL,
  7304. IN ULONG ObjectInformationLength,
  7305. OUT PULONG ReturnLength OPTIONAL);
  7306. NTSYSAPI
  7307. NTSTATUS
  7308. NTAPI
  7309. ZwNotifyChangeKey(
  7310. IN HANDLE KeyHandle,
  7311. IN HANDLE EventHandle OPTIONAL,
  7312. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  7313. IN PVOID ApcContext OPTIONAL,
  7314. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7315. IN ULONG NotifyFilter,
  7316. IN BOOLEAN WatchSubtree,
  7317. OUT PVOID Buffer,
  7318. IN ULONG BufferLength,
  7319. IN BOOLEAN Asynchronous);
  7320. NTSYSAPI
  7321. NTSTATUS
  7322. NTAPI
  7323. ZwCreateEvent(
  7324. OUT PHANDLE EventHandle,
  7325. IN ACCESS_MASK DesiredAccess,
  7326. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  7327. IN EVENT_TYPE EventType,
  7328. IN BOOLEAN InitialState);
  7329. NTSYSAPI
  7330. NTSTATUS
  7331. NTAPI
  7332. ZwDeleteFile(
  7333. IN POBJECT_ATTRIBUTES ObjectAttributes);
  7334. NTSYSAPI
  7335. NTSTATUS
  7336. NTAPI
  7337. ZwQueryDirectoryFile(
  7338. IN HANDLE FileHandle,
  7339. IN HANDLE Event OPTIONAL,
  7340. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  7341. IN PVOID ApcContext OPTIONAL,
  7342. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7343. OUT PVOID FileInformation,
  7344. IN ULONG Length,
  7345. IN FILE_INFORMATION_CLASS FileInformationClass,
  7346. IN BOOLEAN ReturnSingleEntry,
  7347. IN PUNICODE_STRING FileName OPTIONAL,
  7348. IN BOOLEAN RestartScan);
  7349. NTSYSAPI
  7350. NTSTATUS
  7351. NTAPI
  7352. ZwSetVolumeInformationFile(
  7353. IN HANDLE FileHandle,
  7354. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7355. IN PVOID FsInformation,
  7356. IN ULONG Length,
  7357. IN FS_INFORMATION_CLASS FsInformationClass);
  7358. NTSYSAPI
  7359. NTSTATUS
  7360. NTAPI
  7361. ZwFsControlFile(
  7362. IN HANDLE FileHandle,
  7363. IN HANDLE Event OPTIONAL,
  7364. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  7365. IN PVOID ApcContext OPTIONAL,
  7366. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7367. IN ULONG FsControlCode,
  7368. IN PVOID InputBuffer OPTIONAL,
  7369. IN ULONG InputBufferLength,
  7370. OUT PVOID OutputBuffer OPTIONAL,
  7371. IN ULONG OutputBufferLength);
  7372. NTSYSAPI
  7373. NTSTATUS
  7374. NTAPI
  7375. ZwDuplicateObject(
  7376. IN HANDLE SourceProcessHandle,
  7377. IN HANDLE SourceHandle,
  7378. IN HANDLE TargetProcessHandle OPTIONAL,
  7379. OUT PHANDLE TargetHandle OPTIONAL,
  7380. IN ACCESS_MASK DesiredAccess,
  7381. IN ULONG HandleAttributes,
  7382. IN ULONG Options);
  7383. NTSYSAPI
  7384. NTSTATUS
  7385. NTAPI
  7386. ZwOpenDirectoryObject(
  7387. OUT PHANDLE DirectoryHandle,
  7388. IN ACCESS_MASK DesiredAccess,
  7389. IN POBJECT_ATTRIBUTES ObjectAttributes);
  7390. NTSYSAPI
  7391. NTSTATUS
  7392. NTAPI
  7393. ZwAllocateVirtualMemory(
  7394. IN HANDLE ProcessHandle,
  7395. IN OUT PVOID *BaseAddress,
  7396. IN ULONG_PTR ZeroBits,
  7397. IN OUT PSIZE_T RegionSize,
  7398. IN ULONG AllocationType,
  7399. IN ULONG Protect);
  7400. NTSYSAPI
  7401. NTSTATUS
  7402. NTAPI
  7403. ZwFreeVirtualMemory(
  7404. IN HANDLE ProcessHandle,
  7405. IN OUT PVOID *BaseAddress,
  7406. IN OUT PSIZE_T RegionSize,
  7407. IN ULONG FreeType);
  7408. NTSYSAPI
  7409. NTSTATUS
  7410. NTAPI
  7411. ZwWaitForSingleObject(
  7412. IN HANDLE Handle,
  7413. IN BOOLEAN Alertable,
  7414. IN PLARGE_INTEGER Timeout OPTIONAL);
  7415. NTSYSAPI
  7416. NTSTATUS
  7417. NTAPI
  7418. ZwSetEvent(
  7419. IN HANDLE EventHandle,
  7420. OUT PLONG PreviousState OPTIONAL);
  7421. NTSYSAPI
  7422. NTSTATUS
  7423. NTAPI
  7424. ZwFlushVirtualMemory(
  7425. IN HANDLE ProcessHandle,
  7426. IN OUT PVOID *BaseAddress,
  7427. IN OUT PSIZE_T RegionSize,
  7428. OUT PIO_STATUS_BLOCK IoStatusBlock);
  7429. NTSYSAPI
  7430. NTSTATUS
  7431. NTAPI
  7432. ZwQueryInformationToken(
  7433. IN HANDLE TokenHandle,
  7434. IN TOKEN_INFORMATION_CLASS TokenInformationClass,
  7435. OUT PVOID TokenInformation,
  7436. IN ULONG Length,
  7437. OUT PULONG ResultLength);
  7438. NTSYSAPI
  7439. NTSTATUS
  7440. NTAPI
  7441. ZwSetSecurityObject(
  7442. IN HANDLE Handle,
  7443. IN SECURITY_INFORMATION SecurityInformation,
  7444. IN PSECURITY_DESCRIPTOR SecurityDescriptor);
  7445. NTSYSAPI
  7446. NTSTATUS
  7447. NTAPI
  7448. ZwQuerySecurityObject(
  7449. IN HANDLE FileHandle,
  7450. IN SECURITY_INFORMATION SecurityInformation,
  7451. OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  7452. IN ULONG Length,
  7453. OUT PULONG ResultLength);
  7454. #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
  7455. #if (NTDDI_VERSION >= NTDDI_WINXP)
  7456. NTSYSAPI
  7457. NTSTATUS
  7458. NTAPI
  7459. ZwOpenProcessTokenEx(
  7460. IN HANDLE ProcessHandle,
  7461. IN ACCESS_MASK DesiredAccess,
  7462. IN ULONG HandleAttributes,
  7463. OUT PHANDLE TokenHandle);
  7464. NTSYSAPI
  7465. NTSTATUS
  7466. NTAPI
  7467. ZwOpenThreadTokenEx(
  7468. IN HANDLE ThreadHandle,
  7469. IN ACCESS_MASK DesiredAccess,
  7470. IN BOOLEAN OpenAsSelf,
  7471. IN ULONG HandleAttributes,
  7472. OUT PHANDLE TokenHandle);
  7473. #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
  7474. #if (NTDDI_VERSION >= NTDDI_VISTA)
  7475. NTSYSAPI
  7476. NTSTATUS
  7477. NTAPI
  7478. ZwLockFile(
  7479. IN HANDLE FileHandle,
  7480. IN HANDLE Event OPTIONAL,
  7481. IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
  7482. IN PVOID ApcContext OPTIONAL,
  7483. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7484. IN PLARGE_INTEGER ByteOffset,
  7485. IN PLARGE_INTEGER Length,
  7486. IN ULONG Key,
  7487. IN BOOLEAN FailImmediately,
  7488. IN BOOLEAN ExclusiveLock);
  7489. NTSYSAPI
  7490. NTSTATUS
  7491. NTAPI
  7492. ZwUnlockFile(
  7493. IN HANDLE FileHandle,
  7494. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7495. IN PLARGE_INTEGER ByteOffset,
  7496. IN PLARGE_INTEGER Length,
  7497. IN ULONG Key);
  7498. NTSYSAPI
  7499. NTSTATUS
  7500. NTAPI
  7501. ZwQueryQuotaInformationFile(
  7502. IN HANDLE FileHandle,
  7503. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7504. OUT PVOID Buffer,
  7505. IN ULONG Length,
  7506. IN BOOLEAN ReturnSingleEntry,
  7507. IN PVOID SidList,
  7508. IN ULONG SidListLength,
  7509. IN PSID StartSid OPTIONAL,
  7510. IN BOOLEAN RestartScan);
  7511. NTSYSAPI
  7512. NTSTATUS
  7513. NTAPI
  7514. ZwSetQuotaInformationFile(
  7515. IN HANDLE FileHandle,
  7516. OUT PIO_STATUS_BLOCK IoStatusBlock,
  7517. IN PVOID Buffer,
  7518. IN ULONG Length);
  7519. NTSYSAPI
  7520. NTSTATUS
  7521. NTAPI
  7522. ZwFlushBuffersFile(
  7523. IN HANDLE FileHandle,
  7524. OUT PIO_STATUS_BLOCK IoStatusBlock);
  7525. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  7526. #if (NTDDI_VERSION >= NTDDI_WIN7)
  7527. NTSYSAPI
  7528. NTSTATUS
  7529. NTAPI
  7530. ZwSetInformationToken(
  7531. IN HANDLE TokenHandle,
  7532. IN TOKEN_INFORMATION_CLASS TokenInformationClass,
  7533. IN PVOID TokenInformation,
  7534. IN ULONG TokenInformationLength);
  7535. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  7536. /* #if !defined(_X86AMD64_) FIXME : WHAT ?! */
  7537. #if defined(_WIN64)
  7538. C_ASSERT(sizeof(ERESOURCE) == 0x68);
  7539. C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
  7540. C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
  7541. #else
  7542. C_ASSERT(sizeof(ERESOURCE) == 0x38);
  7543. C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
  7544. C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
  7545. #endif
  7546. /* #endif */
  7547. #if defined(_IA64_)
  7548. #if (NTDDI_VERSION >= NTDDI_WIN2K)
  7549. //DECLSPEC_DEPRECATED_DDK
  7550. NTHALAPI
  7551. ULONG
  7552. NTAPI
  7553. HalGetDmaAlignmentRequirement(
  7554. VOID);
  7555. #endif
  7556. #endif
  7557. #if defined(_M_IX86) || defined(_M_AMD64)
  7558. #define HalGetDmaAlignmentRequirement() 1L
  7559. #endif
  7560. extern NTKERNELAPI PUSHORT NlsOemLeadByteInfo;
  7561. #define NLS_OEM_LEAD_BYTE_INFO NlsOemLeadByteInfo
  7562. #ifdef NLS_MB_CODE_PAGE_TAG
  7563. #undef NLS_MB_CODE_PAGE_TAG
  7564. #endif
  7565. #define NLS_MB_CODE_PAGE_TAG NlsMbOemCodePageTag
  7566. #if (NTDDI_VERSION >= NTDDI_VISTA)
  7567. typedef enum _NETWORK_OPEN_LOCATION_QUALIFIER {
  7568. NetworkOpenLocationAny,
  7569. NetworkOpenLocationRemote,
  7570. NetworkOpenLocationLoopback
  7571. } NETWORK_OPEN_LOCATION_QUALIFIER;
  7572. typedef enum _NETWORK_OPEN_INTEGRITY_QUALIFIER {
  7573. NetworkOpenIntegrityAny,
  7574. NetworkOpenIntegrityNone,
  7575. NetworkOpenIntegritySigned,
  7576. NetworkOpenIntegrityEncrypted,
  7577. NetworkOpenIntegrityMaximum
  7578. } NETWORK_OPEN_INTEGRITY_QUALIFIER;
  7579. #if (NTDDI_VERSION >= NTDDI_WIN7)
  7580. #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_COLLAPSING 0x1
  7581. #define NETWORK_OPEN_ECP_IN_FLAG_DISABLE_HANDLE_DURABILITY 0x2
  7582. #define NETWORK_OPEN_ECP_IN_FLAG_FORCE_BUFFERED_SYNCHRONOUS_IO_HACK 0x80000000
  7583. typedef struct _NETWORK_OPEN_ECP_CONTEXT {
  7584. USHORT Size;
  7585. USHORT Reserved;
  7586. _ANONYMOUS_STRUCT struct {
  7587. struct {
  7588. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7589. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7590. ULONG Flags;
  7591. } in;
  7592. struct {
  7593. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7594. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7595. ULONG Flags;
  7596. } out;
  7597. } DUMMYSTRUCTNAME;
  7598. } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
  7599. typedef struct _NETWORK_OPEN_ECP_CONTEXT_V0 {
  7600. USHORT Size;
  7601. USHORT Reserved;
  7602. _ANONYMOUS_STRUCT struct {
  7603. struct {
  7604. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7605. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7606. } in;
  7607. struct {
  7608. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7609. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7610. } out;
  7611. } DUMMYSTRUCTNAME;
  7612. } NETWORK_OPEN_ECP_CONTEXT_V0, *PNETWORK_OPEN_ECP_CONTEXT_V0;
  7613. #elif (NTDDI_VERSION >= NTDDI_VISTA)
  7614. typedef struct _NETWORK_OPEN_ECP_CONTEXT {
  7615. USHORT Size;
  7616. USHORT Reserved;
  7617. _ANONYMOUS_STRUCT struct {
  7618. struct {
  7619. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7620. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7621. } in;
  7622. struct {
  7623. NETWORK_OPEN_LOCATION_QUALIFIER Location;
  7624. NETWORK_OPEN_INTEGRITY_QUALIFIER Integrity;
  7625. } out;
  7626. } DUMMYSTRUCTNAME;
  7627. } NETWORK_OPEN_ECP_CONTEXT, *PNETWORK_OPEN_ECP_CONTEXT;
  7628. #endif
  7629. DEFINE_GUID(GUID_ECP_NETWORK_OPEN_CONTEXT, 0xc584edbf, 0x00df, 0x4d28, 0xb8, 0x84, 0x35, 0xba, 0xca, 0x89, 0x11, 0xe8);
  7630. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  7631. #if (NTDDI_VERSION >= NTDDI_VISTA)
  7632. typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  7633. PVOID Context;
  7634. } PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;
  7635. DEFINE_GUID(GUID_ECP_PREFETCH_OPEN, 0xe1777b21, 0x847e, 0x4837, 0xaa, 0x45, 0x64, 0x16, 0x1d, 0x28, 0x6, 0x55);
  7636. #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
  7637. #if (NTDDI_VERSION >= NTDDI_WIN7)
  7638. DEFINE_GUID (GUID_ECP_NFS_OPEN, 0xf326d30c, 0xe5f8, 0x4fe7, 0xab, 0x74, 0xf5, 0xa3, 0x19, 0x6d, 0x92, 0xdb);
  7639. DEFINE_GUID (GUID_ECP_SRV_OPEN, 0xbebfaebc, 0xaabf, 0x489d, 0x9d, 0x2c, 0xe9, 0xe3, 0x61, 0x10, 0x28, 0x53);
  7640. typedef struct sockaddr_storage *PSOCKADDR_STORAGE_NFS;
  7641. typedef struct _NFS_OPEN_ECP_CONTEXT {
  7642. PUNICODE_STRING ExportAlias;
  7643. PSOCKADDR_STORAGE_NFS ClientSocketAddress;
  7644. } NFS_OPEN_ECP_CONTEXT, *PNFS_OPEN_ECP_CONTEXT, **PPNFS_OPEN_ECP_CONTEXT;
  7645. typedef struct _SRV_OPEN_ECP_CONTEXT {
  7646. PUNICODE_STRING ShareName;
  7647. PSOCKADDR_STORAGE_NFS SocketAddress;
  7648. BOOLEAN OplockBlockState;
  7649. BOOLEAN OplockAppState;
  7650. BOOLEAN OplockFinalState;
  7651. } SRV_OPEN_ECP_CONTEXT, *PSRV_OPEN_ECP_CONTEXT;
  7652. #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
  7653. #define PIN_WAIT (1)
  7654. #define PIN_EXCLUSIVE (2)
  7655. #define PIN_NO_READ (4)
  7656. #define PIN_IF_BCB (8)
  7657. #define PIN_CALLER_TRACKS_DIRTY_DATA (32)
  7658. #define PIN_HIGH_PRIORITY (64)
  7659. #define MAP_WAIT 1
  7660. #define MAP_NO_READ (16)
  7661. #define MAP_HIGH_PRIORITY (64)
  7662. #define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS)
  7663. #define IOCTL_REDIR_QUERY_PATH_EX CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 100, METHOD_NEITHER, FILE_ANY_ACCESS)
  7664. typedef struct _QUERY_PATH_REQUEST {
  7665. ULONG PathNameLength;
  7666. PIO_SECURITY_CONTEXT SecurityContext;
  7667. WCHAR FilePathName[1];
  7668. } QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST;
  7669. typedef struct _QUERY_PATH_REQUEST_EX {
  7670. PIO_SECURITY_CONTEXT pSecurityContext;
  7671. ULONG EaLength;
  7672. PVOID pEaBuffer;
  7673. UNICODE_STRING PathName;
  7674. UNICODE_STRING DomainServiceName;
  7675. ULONG_PTR Reserved[ 3 ];
  7676. } QUERY_PATH_REQUEST_EX, *PQUERY_PATH_REQUEST_EX;
  7677. typedef struct _QUERY_PATH_RESPONSE {
  7678. ULONG LengthAccepted;
  7679. } QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE;
  7680. #define VOLSNAPCONTROLTYPE 0x00000053
  7681. #define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  7682. /* FIXME : These definitions below don't belong here (or anywhere in ddk really) */
  7683. #pragma pack(push,4)
  7684. #ifndef VER_PRODUCTBUILD
  7685. #define VER_PRODUCTBUILD 10000
  7686. #endif
  7687. #include "csq.h"
  7688. extern PACL SePublicDefaultDacl;
  7689. extern PACL SeSystemDefaultDacl;
  7690. #define FS_LFN_APIS 0x00004000
  7691. #define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 /* FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE */
  7692. #define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
  7693. #define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
  7694. #define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
  7695. #define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
  7696. #define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
  7697. #define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
  7698. #define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
  7699. #define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
  7700. #define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
  7701. #define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
  7702. #define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
  7703. #define FILE_STORAGE_TYPE_MASK 0x000f0000
  7704. #define FILE_STORAGE_TYPE_SHIFT 16
  7705. #define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
  7706. #ifdef _X86_
  7707. #define HARDWARE_PTE HARDWARE_PTE_X86
  7708. #define PHARDWARE_PTE PHARDWARE_PTE_X86
  7709. #endif
  7710. #define IO_ATTACH_DEVICE_API 0x80000000
  7711. #define IO_TYPE_APC 18
  7712. #define IO_TYPE_DPC 19
  7713. #define IO_TYPE_DEVICE_QUEUE 20
  7714. #define IO_TYPE_EVENT_PAIR 21
  7715. #define IO_TYPE_INTERRUPT 22
  7716. #define IO_TYPE_PROFILE 23
  7717. #define IRP_BEING_VERIFIED 0x10
  7718. #define MAILSLOT_CLASS_FIRSTCLASS 1
  7719. #define MAILSLOT_CLASS_SECONDCLASS 2
  7720. #define MAILSLOT_SIZE_AUTO 0
  7721. #define MEM_DOS_LIM 0x40000000
  7722. #define OB_TYPE_TYPE 1
  7723. #define OB_TYPE_DIRECTORY 2
  7724. #define OB_TYPE_SYMBOLIC_LINK 3
  7725. #define OB_TYPE_TOKEN 4
  7726. #define OB_TYPE_PROCESS 5
  7727. #define OB_TYPE_THREAD 6
  7728. #define OB_TYPE_EVENT 7
  7729. #define OB_TYPE_EVENT_PAIR 8
  7730. #define OB_TYPE_MUTANT 9
  7731. #define OB_TYPE_SEMAPHORE 10
  7732. #define OB_TYPE_TIMER 11
  7733. #define OB_TYPE_PROFILE 12
  7734. #define OB_TYPE_WINDOW_STATION 13
  7735. #define OB_TYPE_DESKTOP 14
  7736. #define OB_TYPE_SECTION 15
  7737. #define OB_TYPE_KEY 16
  7738. #define OB_TYPE_PORT 17
  7739. #define OB_TYPE_ADAPTER 18
  7740. #define OB_TYPE_CONTROLLER 19
  7741. #define OB_TYPE_DEVICE 20
  7742. #define OB_TYPE_DRIVER 21
  7743. #define OB_TYPE_IO_COMPLETION 22
  7744. #define OB_TYPE_FILE 23
  7745. #define SEC_BASED 0x00200000
  7746. /* end winnt.h */
  7747. #define TOKEN_HAS_ADMIN_GROUP 0x08
  7748. #if (VER_PRODUCTBUILD >= 1381)
  7749. #define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7750. #endif /* (VER_PRODUCTBUILD >= 1381) */
  7751. #if (VER_PRODUCTBUILD >= 2195)
  7752. #define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
  7753. #define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
  7754. #define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS)
  7755. #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
  7756. #define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA)
  7757. #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
  7758. #define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA)
  7759. #endif /* (VER_PRODUCTBUILD >= 2195) */
  7760. #define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
  7761. #define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
  7762. #define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS)
  7763. #define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS)
  7764. #define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7765. #define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7766. #define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7767. #define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS)
  7768. typedef enum _FILE_STORAGE_TYPE {
  7769. StorageTypeDefault = 1,
  7770. StorageTypeDirectory,
  7771. StorageTypeFile,
  7772. StorageTypeJunctionPoint,
  7773. StorageTypeCatalog,
  7774. StorageTypeStructuredStorage,
  7775. StorageTypeEmbedding,
  7776. StorageTypeStream
  7777. } FILE_STORAGE_TYPE;
  7778. typedef struct _OBJECT_BASIC_INFORMATION
  7779. {
  7780. ULONG Attributes;
  7781. ACCESS_MASK GrantedAccess;
  7782. ULONG HandleCount;
  7783. ULONG PointerCount;
  7784. ULONG PagedPoolCharge;
  7785. ULONG NonPagedPoolCharge;
  7786. ULONG Reserved[ 3 ];
  7787. ULONG NameInfoSize;
  7788. ULONG TypeInfoSize;
  7789. ULONG SecurityDescriptorSize;
  7790. LARGE_INTEGER CreationTime;
  7791. } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
  7792. typedef struct _BITMAP_RANGE {
  7793. LIST_ENTRY Links;
  7794. LONGLONG BasePage;
  7795. ULONG FirstDirtyPage;
  7796. ULONG LastDirtyPage;
  7797. ULONG DirtyPages;
  7798. PULONG Bitmap;
  7799. } BITMAP_RANGE, *PBITMAP_RANGE;
  7800. typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
  7801. BOOLEAN ReplaceIfExists;
  7802. HANDLE RootDirectory;
  7803. ULONG FileNameLength;
  7804. WCHAR FileName[1];
  7805. } FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
  7806. typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
  7807. ULONG NextEntryOffset;
  7808. ULONG FileIndex;
  7809. LARGE_INTEGER CreationTime;
  7810. LARGE_INTEGER LastAccessTime;
  7811. LARGE_INTEGER LastWriteTime;
  7812. LARGE_INTEGER ChangeTime;
  7813. LARGE_INTEGER EndOfFile;
  7814. LARGE_INTEGER AllocationSize;
  7815. ULONG FileAttributes;
  7816. ULONG FileNameLength;
  7817. ULONG EaSize;
  7818. WCHAR FileName[ANYSIZE_ARRAY];
  7819. } FILE_FULL_DIRECTORY_INFORMATION, *PFILE_FULL_DIRECTORY_INFORMATION;
  7820. /* raw internal file lock struct returned from FsRtlGetNextFileLock */
  7821. typedef struct _FILE_SHARED_LOCK_ENTRY {
  7822. PVOID Unknown1;
  7823. PVOID Unknown2;
  7824. FILE_LOCK_INFO FileLock;
  7825. } FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
  7826. /* raw internal file lock struct returned from FsRtlGetNextFileLock */
  7827. typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
  7828. LIST_ENTRY ListEntry;
  7829. PVOID Unknown1;
  7830. PVOID Unknown2;
  7831. FILE_LOCK_INFO FileLock;
  7832. } FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
  7833. typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
  7834. ULONG ReadDataAvailable;
  7835. ULONG NumberOfMessages;
  7836. ULONG MessageLength;
  7837. } FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
  7838. typedef struct _FILE_OLE_CLASSID_INFORMATION {
  7839. GUID ClassId;
  7840. } FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
  7841. typedef struct _FILE_OLE_ALL_INFORMATION {
  7842. FILE_BASIC_INFORMATION BasicInformation;
  7843. FILE_STANDARD_INFORMATION StandardInformation;
  7844. FILE_INTERNAL_INFORMATION InternalInformation;
  7845. FILE_EA_INFORMATION EaInformation;
  7846. FILE_ACCESS_INFORMATION AccessInformation;
  7847. FILE_POSITION_INFORMATION PositionInformation;
  7848. FILE_MODE_INFORMATION ModeInformation;
  7849. FILE_ALIGNMENT_INFORMATION AlignmentInformation;
  7850. USN LastChangeUsn;
  7851. USN ReplicationUsn;
  7852. LARGE_INTEGER SecurityChangeTime;
  7853. FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
  7854. FILE_OBJECTID_INFORMATION ObjectIdInformation;
  7855. FILE_STORAGE_TYPE StorageType;
  7856. ULONG OleStateBits;
  7857. ULONG OleId;
  7858. ULONG NumberOfStreamReferences;
  7859. ULONG StreamIndex;
  7860. ULONG SecurityId;
  7861. BOOLEAN ContentIndexDisable;
  7862. BOOLEAN InheritContentIndexDisable;
  7863. FILE_NAME_INFORMATION NameInformation;
  7864. } FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
  7865. typedef struct _FILE_OLE_DIR_INFORMATION {
  7866. ULONG NextEntryOffset;
  7867. ULONG FileIndex;
  7868. LARGE_INTEGER CreationTime;
  7869. LARGE_INTEGER LastAccessTime;
  7870. LARGE_INTEGER LastWriteTime;
  7871. LARGE_INTEGER ChangeTime;
  7872. LARGE_INTEGER EndOfFile;
  7873. LARGE_INTEGER AllocationSize;
  7874. ULONG FileAttributes;
  7875. ULONG FileNameLength;
  7876. FILE_STORAGE_TYPE StorageType;
  7877. GUID OleClassId;
  7878. ULONG OleStateBits;
  7879. BOOLEAN ContentIndexDisable;
  7880. BOOLEAN InheritContentIndexDisable;
  7881. WCHAR FileName[1];
  7882. } FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
  7883. typedef struct _FILE_OLE_INFORMATION {
  7884. LARGE_INTEGER SecurityChangeTime;
  7885. FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
  7886. FILE_OBJECTID_INFORMATION ObjectIdInformation;
  7887. FILE_STORAGE_TYPE StorageType;
  7888. ULONG OleStateBits;
  7889. BOOLEAN ContentIndexDisable;
  7890. BOOLEAN InheritContentIndexDisable;
  7891. } FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
  7892. typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
  7893. ULONG StateBits;
  7894. ULONG StateBitsMask;
  7895. } FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
  7896. typedef struct _MAPPING_PAIR {
  7897. ULONGLONG Vcn;
  7898. ULONGLONG Lcn;
  7899. } MAPPING_PAIR, *PMAPPING_PAIR;
  7900. typedef struct _GET_RETRIEVAL_DESCRIPTOR {
  7901. ULONG NumberOfPairs;
  7902. ULONGLONG StartVcn;
  7903. MAPPING_PAIR Pair[1];
  7904. } GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
  7905. typedef struct _MBCB {
  7906. CSHORT NodeTypeCode;
  7907. CSHORT NodeIsInZone;
  7908. ULONG PagesToWrite;
  7909. ULONG DirtyPages;
  7910. ULONG Reserved;
  7911. LIST_ENTRY BitmapRanges;
  7912. LONGLONG ResumeWritePage;
  7913. BITMAP_RANGE BitmapRange1;
  7914. BITMAP_RANGE BitmapRange2;
  7915. BITMAP_RANGE BitmapRange3;
  7916. } MBCB, *PMBCB;
  7917. typedef struct _MOVEFILE_DESCRIPTOR {
  7918. HANDLE FileHandle;
  7919. ULONG Reserved;
  7920. LARGE_INTEGER StartVcn;
  7921. LARGE_INTEGER TargetLcn;
  7922. ULONG NumVcns;
  7923. ULONG Reserved1;
  7924. } MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
  7925. typedef struct _OBJECT_BASIC_INFO {
  7926. ULONG Attributes;
  7927. ACCESS_MASK GrantedAccess;
  7928. ULONG HandleCount;
  7929. ULONG ReferenceCount;
  7930. ULONG PagedPoolUsage;
  7931. ULONG NonPagedPoolUsage;
  7932. ULONG Reserved[3];
  7933. ULONG NameInformationLength;
  7934. ULONG TypeInformationLength;
  7935. ULONG SecurityDescriptorLength;
  7936. LARGE_INTEGER CreateTime;
  7937. } OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO;
  7938. typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO {
  7939. BOOLEAN Inherit;
  7940. BOOLEAN ProtectFromClose;
  7941. } OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO;
  7942. typedef struct _OBJECT_NAME_INFO {
  7943. UNICODE_STRING ObjectName;
  7944. WCHAR ObjectNameBuffer[1];
  7945. } OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
  7946. typedef struct _OBJECT_PROTECTION_INFO {
  7947. BOOLEAN Inherit;
  7948. BOOLEAN ProtectHandle;
  7949. } OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO;
  7950. typedef struct _OBJECT_TYPE_INFO {
  7951. UNICODE_STRING ObjectTypeName;
  7952. UCHAR Unknown[0x58];
  7953. WCHAR ObjectTypeNameBuffer[1];
  7954. } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO;
  7955. typedef struct _OBJECT_ALL_TYPES_INFO {
  7956. ULONG NumberOfObjectTypes;
  7957. OBJECT_TYPE_INFO ObjectsTypeInfo[1];
  7958. } OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO;
  7959. #if defined(USE_LPC6432)
  7960. #define LPC_CLIENT_ID CLIENT_ID64
  7961. #define LPC_SIZE_T ULONGLONG
  7962. #define LPC_PVOID ULONGLONG
  7963. #define LPC_HANDLE ULONGLONG
  7964. #else
  7965. #define LPC_CLIENT_ID CLIENT_ID
  7966. #define LPC_SIZE_T SIZE_T
  7967. #define LPC_PVOID PVOID
  7968. #define LPC_HANDLE HANDLE
  7969. #endif
  7970. typedef struct _PORT_MESSAGE
  7971. {
  7972. union
  7973. {
  7974. struct
  7975. {
  7976. CSHORT DataLength;
  7977. CSHORT TotalLength;
  7978. } s1;
  7979. ULONG Length;
  7980. } u1;
  7981. union
  7982. {
  7983. struct
  7984. {
  7985. CSHORT Type;
  7986. CSHORT DataInfoOffset;
  7987. } s2;
  7988. ULONG ZeroInit;
  7989. } u2;
  7990. __GNU_EXTENSION union
  7991. {
  7992. LPC_CLIENT_ID ClientId;
  7993. double DoNotUseThisField;
  7994. };
  7995. ULONG MessageId;
  7996. __GNU_EXTENSION union
  7997. {
  7998. LPC_SIZE_T ClientViewSize;
  7999. ULONG CallbackId;
  8000. };
  8001. } PORT_MESSAGE, *PPORT_MESSAGE;
  8002. #define LPC_KERNELMODE_MESSAGE (CSHORT)((USHORT)0x8000)
  8003. typedef struct _PORT_VIEW
  8004. {
  8005. ULONG Length;
  8006. LPC_HANDLE SectionHandle;
  8007. ULONG SectionOffset;
  8008. LPC_SIZE_T ViewSize;
  8009. LPC_PVOID ViewBase;
  8010. LPC_PVOID ViewRemoteBase;
  8011. } PORT_VIEW, *PPORT_VIEW;
  8012. typedef struct _REMOTE_PORT_VIEW
  8013. {
  8014. ULONG Length;
  8015. LPC_SIZE_T ViewSize;
  8016. LPC_PVOID ViewBase;
  8017. } REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
  8018. typedef struct _VAD_HEADER {
  8019. PVOID StartVPN;
  8020. PVOID EndVPN;
  8021. struct _VAD_HEADER* ParentLink;
  8022. struct _VAD_HEADER* LeftLink;
  8023. struct _VAD_HEADER* RightLink;
  8024. ULONG Flags; /* LSB = CommitCharge */
  8025. PVOID ControlArea;
  8026. PVOID FirstProtoPte;
  8027. PVOID LastPTE;
  8028. ULONG Unknown;
  8029. LIST_ENTRY Secured;
  8030. } VAD_HEADER, *PVAD_HEADER;
  8031. NTKERNELAPI
  8032. LARGE_INTEGER
  8033. NTAPI
  8034. CcGetLsnForFileObject (
  8035. IN PFILE_OBJECT FileObject,
  8036. OUT PLARGE_INTEGER OldestLsn OPTIONAL
  8037. );
  8038. NTKERNELAPI
  8039. PVOID
  8040. NTAPI
  8041. FsRtlAllocatePool (
  8042. IN POOL_TYPE PoolType,
  8043. IN ULONG NumberOfBytes
  8044. );
  8045. NTKERNELAPI
  8046. PVOID
  8047. NTAPI
  8048. FsRtlAllocatePoolWithQuota (
  8049. IN POOL_TYPE PoolType,
  8050. IN ULONG NumberOfBytes
  8051. );
  8052. NTKERNELAPI
  8053. PVOID
  8054. NTAPI
  8055. FsRtlAllocatePoolWithQuotaTag (
  8056. IN POOL_TYPE PoolType,
  8057. IN ULONG NumberOfBytes,
  8058. IN ULONG Tag
  8059. );
  8060. NTKERNELAPI
  8061. PVOID
  8062. NTAPI
  8063. FsRtlAllocatePoolWithTag (
  8064. IN POOL_TYPE PoolType,
  8065. IN ULONG NumberOfBytes,
  8066. IN ULONG Tag
  8067. );
  8068. NTKERNELAPI
  8069. BOOLEAN
  8070. NTAPI
  8071. FsRtlIsFatDbcsLegal (
  8072. IN ANSI_STRING DbcsName,
  8073. IN BOOLEAN WildCardsPermissible,
  8074. IN BOOLEAN PathNamePermissible,
  8075. IN BOOLEAN LeadingBackslashPermissible
  8076. );
  8077. NTKERNELAPI
  8078. BOOLEAN
  8079. NTAPI
  8080. FsRtlMdlReadComplete (
  8081. IN PFILE_OBJECT FileObject,
  8082. IN PMDL MdlChain
  8083. );
  8084. NTKERNELAPI
  8085. BOOLEAN
  8086. NTAPI
  8087. FsRtlMdlWriteComplete (
  8088. IN PFILE_OBJECT FileObject,
  8089. IN PLARGE_INTEGER FileOffset,
  8090. IN PMDL MdlChain
  8091. );
  8092. NTKERNELAPI
  8093. VOID
  8094. NTAPI
  8095. FsRtlNotifyChangeDirectory (
  8096. IN PNOTIFY_SYNC NotifySync,
  8097. IN PVOID FsContext,
  8098. IN PSTRING FullDirectoryName,
  8099. IN PLIST_ENTRY NotifyList,
  8100. IN BOOLEAN WatchTree,
  8101. IN ULONG CompletionFilter,
  8102. IN PIRP NotifyIrp
  8103. );
  8104. NTKERNELAPI
  8105. NTSTATUS
  8106. NTAPI
  8107. ObCreateObject (
  8108. IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
  8109. IN POBJECT_TYPE ObjectType,
  8110. IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
  8111. IN KPROCESSOR_MODE AccessMode,
  8112. IN OUT PVOID ParseContext OPTIONAL,
  8113. IN ULONG ObjectSize,
  8114. IN ULONG PagedPoolCharge OPTIONAL,
  8115. IN ULONG NonPagedPoolCharge OPTIONAL,
  8116. OUT PVOID *Object
  8117. );
  8118. NTKERNELAPI
  8119. ULONG
  8120. NTAPI
  8121. ObGetObjectPointerCount (
  8122. IN PVOID Object
  8123. );
  8124. NTKERNELAPI
  8125. NTSTATUS
  8126. NTAPI
  8127. ObReferenceObjectByName (
  8128. IN PUNICODE_STRING ObjectName,
  8129. IN ULONG Attributes,
  8130. IN PACCESS_STATE PassedAccessState OPTIONAL,
  8131. IN ACCESS_MASK DesiredAccess OPTIONAL,
  8132. IN POBJECT_TYPE ObjectType,
  8133. IN KPROCESSOR_MODE AccessMode,
  8134. IN OUT PVOID ParseContext OPTIONAL,
  8135. OUT PVOID *Object
  8136. );
  8137. #define PsDereferenceImpersonationToken(T) \
  8138. {if (ARGUMENT_PRESENT(T)) { \
  8139. (ObDereferenceObject((T))); \
  8140. } else { \
  8141. ; \
  8142. } \
  8143. }
  8144. NTKERNELAPI
  8145. NTSTATUS
  8146. NTAPI
  8147. PsLookupProcessThreadByCid (
  8148. IN PCLIENT_ID Cid,
  8149. OUT PEPROCESS *Process OPTIONAL,
  8150. OUT PETHREAD *Thread
  8151. );
  8152. NTSYSAPI
  8153. NTSTATUS
  8154. NTAPI
  8155. RtlSetSaclSecurityDescriptor (
  8156. IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
  8157. IN BOOLEAN SaclPresent,
  8158. IN PACL Sacl,
  8159. IN BOOLEAN SaclDefaulted
  8160. );
  8161. #define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports;
  8162. #if (VER_PRODUCTBUILD >= 2195)
  8163. NTSYSAPI
  8164. NTSTATUS
  8165. NTAPI
  8166. ZwAdjustPrivilegesToken (
  8167. IN HANDLE TokenHandle,
  8168. IN BOOLEAN DisableAllPrivileges,
  8169. IN PTOKEN_PRIVILEGES NewState,
  8170. IN ULONG BufferLength,
  8171. OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL,
  8172. OUT PULONG ReturnLength
  8173. );
  8174. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8175. NTSYSAPI
  8176. NTSTATUS
  8177. NTAPI
  8178. ZwAlertThread (
  8179. IN HANDLE ThreadHandle
  8180. );
  8181. NTSYSAPI
  8182. NTSTATUS
  8183. NTAPI
  8184. ZwAccessCheckAndAuditAlarm (
  8185. IN PUNICODE_STRING SubsystemName,
  8186. IN PVOID HandleId,
  8187. IN PUNICODE_STRING ObjectTypeName,
  8188. IN PUNICODE_STRING ObjectName,
  8189. IN PSECURITY_DESCRIPTOR SecurityDescriptor,
  8190. IN ACCESS_MASK DesiredAccess,
  8191. IN PGENERIC_MAPPING GenericMapping,
  8192. IN BOOLEAN ObjectCreation,
  8193. OUT PACCESS_MASK GrantedAccess,
  8194. OUT PBOOLEAN AccessStatus,
  8195. OUT PBOOLEAN GenerateOnClose
  8196. );
  8197. #if (VER_PRODUCTBUILD >= 2195)
  8198. NTSYSAPI
  8199. NTSTATUS
  8200. NTAPI
  8201. ZwCancelIoFile (
  8202. IN HANDLE FileHandle,
  8203. OUT PIO_STATUS_BLOCK IoStatusBlock
  8204. );
  8205. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8206. NTSYSAPI
  8207. NTSTATUS
  8208. NTAPI
  8209. ZwClearEvent (
  8210. IN HANDLE EventHandle
  8211. );
  8212. NTSYSAPI
  8213. NTSTATUS
  8214. NTAPI
  8215. ZwCloseObjectAuditAlarm (
  8216. IN PUNICODE_STRING SubsystemName,
  8217. IN PVOID HandleId,
  8218. IN BOOLEAN GenerateOnClose
  8219. );
  8220. NTSYSAPI
  8221. NTSTATUS
  8222. NTAPI
  8223. ZwCreateSymbolicLinkObject (
  8224. OUT PHANDLE SymbolicLinkHandle,
  8225. IN ACCESS_MASK DesiredAccess,
  8226. IN POBJECT_ATTRIBUTES ObjectAttributes,
  8227. IN PUNICODE_STRING TargetName
  8228. );
  8229. NTSYSAPI
  8230. NTSTATUS
  8231. NTAPI
  8232. ZwFlushInstructionCache (
  8233. IN HANDLE ProcessHandle,
  8234. IN PVOID BaseAddress OPTIONAL,
  8235. IN ULONG FlushSize
  8236. );
  8237. NTSYSAPI
  8238. NTSTATUS
  8239. NTAPI
  8240. ZwFlushBuffersFile(
  8241. IN HANDLE FileHandle,
  8242. OUT PIO_STATUS_BLOCK IoStatusBlock
  8243. );
  8244. #if (VER_PRODUCTBUILD >= 2195)
  8245. NTSYSAPI
  8246. NTSTATUS
  8247. NTAPI
  8248. ZwInitiatePowerAction (
  8249. IN POWER_ACTION SystemAction,
  8250. IN SYSTEM_POWER_STATE MinSystemState,
  8251. IN ULONG Flags,
  8252. IN BOOLEAN Asynchronous
  8253. );
  8254. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8255. NTSYSAPI
  8256. NTSTATUS
  8257. NTAPI
  8258. ZwLoadKey (
  8259. IN POBJECT_ATTRIBUTES KeyObjectAttributes,
  8260. IN POBJECT_ATTRIBUTES FileObjectAttributes
  8261. );
  8262. NTSYSAPI
  8263. NTSTATUS
  8264. NTAPI
  8265. ZwOpenProcessToken (
  8266. IN HANDLE ProcessHandle,
  8267. IN ACCESS_MASK DesiredAccess,
  8268. OUT PHANDLE TokenHandle
  8269. );
  8270. NTSYSAPI
  8271. NTSTATUS
  8272. NTAPI
  8273. ZwOpenThread (
  8274. OUT PHANDLE ThreadHandle,
  8275. IN ACCESS_MASK DesiredAccess,
  8276. IN POBJECT_ATTRIBUTES ObjectAttributes,
  8277. IN PCLIENT_ID ClientId
  8278. );
  8279. NTSYSAPI
  8280. NTSTATUS
  8281. NTAPI
  8282. ZwOpenThreadToken (
  8283. IN HANDLE ThreadHandle,
  8284. IN ACCESS_MASK DesiredAccess,
  8285. IN BOOLEAN OpenAsSelf,
  8286. OUT PHANDLE TokenHandle
  8287. );
  8288. NTSYSAPI
  8289. NTSTATUS
  8290. NTAPI
  8291. ZwPulseEvent (
  8292. IN HANDLE EventHandle,
  8293. OUT PLONG PreviousState OPTIONAL
  8294. );
  8295. NTSYSAPI
  8296. NTSTATUS
  8297. NTAPI
  8298. ZwQueryDefaultLocale (
  8299. IN BOOLEAN ThreadOrSystem,
  8300. OUT PLCID Locale
  8301. );
  8302. #if (VER_PRODUCTBUILD >= 2195)
  8303. NTSYSAPI
  8304. NTSTATUS
  8305. NTAPI
  8306. ZwQueryDirectoryObject (
  8307. IN HANDLE DirectoryHandle,
  8308. OUT PVOID Buffer,
  8309. IN ULONG Length,
  8310. IN BOOLEAN ReturnSingleEntry,
  8311. IN BOOLEAN RestartScan,
  8312. IN OUT PULONG Context,
  8313. OUT PULONG ReturnLength OPTIONAL
  8314. );
  8315. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8316. NTSYSAPI
  8317. NTSTATUS
  8318. NTAPI
  8319. ZwQueryInformationProcess (
  8320. IN HANDLE ProcessHandle,
  8321. IN PROCESSINFOCLASS ProcessInformationClass,
  8322. OUT PVOID ProcessInformation,
  8323. IN ULONG ProcessInformationLength,
  8324. OUT PULONG ReturnLength OPTIONAL
  8325. );
  8326. NTSYSAPI
  8327. NTSTATUS
  8328. NTAPI
  8329. ZwReplaceKey (
  8330. IN POBJECT_ATTRIBUTES NewFileObjectAttributes,
  8331. IN HANDLE KeyHandle,
  8332. IN POBJECT_ATTRIBUTES OldFileObjectAttributes
  8333. );
  8334. NTSYSAPI
  8335. NTSTATUS
  8336. NTAPI
  8337. ZwResetEvent (
  8338. IN HANDLE EventHandle,
  8339. OUT PLONG PreviousState OPTIONAL
  8340. );
  8341. #if (VER_PRODUCTBUILD >= 2195)
  8342. NTSYSAPI
  8343. NTSTATUS
  8344. NTAPI
  8345. ZwRestoreKey (
  8346. IN HANDLE KeyHandle,
  8347. IN HANDLE FileHandle,
  8348. IN ULONG Flags
  8349. );
  8350. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8351. NTSYSAPI
  8352. NTSTATUS
  8353. NTAPI
  8354. ZwSaveKey (
  8355. IN HANDLE KeyHandle,
  8356. IN HANDLE FileHandle
  8357. );
  8358. NTSYSAPI
  8359. NTSTATUS
  8360. NTAPI
  8361. ZwSetDefaultLocale (
  8362. IN BOOLEAN ThreadOrSystem,
  8363. IN LCID Locale
  8364. );
  8365. #if (VER_PRODUCTBUILD >= 2195)
  8366. NTSYSAPI
  8367. NTSTATUS
  8368. NTAPI
  8369. ZwSetDefaultUILanguage (
  8370. IN LANGID LanguageId
  8371. );
  8372. #endif /* (VER_PRODUCTBUILD >= 2195) */
  8373. NTSYSAPI
  8374. NTSTATUS
  8375. NTAPI
  8376. ZwSetInformationProcess (
  8377. IN HANDLE ProcessHandle,
  8378. IN PROCESSINFOCLASS ProcessInformationClass,
  8379. IN PVOID ProcessInformation,
  8380. IN ULONG ProcessInformationLength
  8381. );
  8382. NTSYSAPI
  8383. NTSTATUS
  8384. NTAPI
  8385. ZwSetSystemTime (
  8386. IN PLARGE_INTEGER NewTime,
  8387. OUT PLARGE_INTEGER OldTime OPTIONAL
  8388. );
  8389. NTSYSAPI
  8390. NTSTATUS
  8391. NTAPI
  8392. ZwUnloadKey (
  8393. IN POBJECT_ATTRIBUTES KeyObjectAttributes
  8394. );
  8395. NTSYSAPI
  8396. NTSTATUS
  8397. NTAPI
  8398. ZwWaitForMultipleObjects (
  8399. IN ULONG HandleCount,
  8400. IN PHANDLE Handles,
  8401. IN WAIT_TYPE WaitType,
  8402. IN BOOLEAN Alertable,
  8403. IN PLARGE_INTEGER Timeout OPTIONAL
  8404. );
  8405. NTSYSAPI
  8406. NTSTATUS
  8407. NTAPI
  8408. ZwYieldExecution (
  8409. VOID
  8410. );
  8411. #pragma pack(pop)
  8412. #ifdef __cplusplus
  8413. }
  8414. #endif