winioctl.h 113 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. #ifdef DEFINE_GUID
  7. #ifndef FAR
  8. #define FAR
  9. #endif
  10. DEFINE_GUID(GUID_DEVINTERFACE_DISK,0x53f56307,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  11. DEFINE_GUID(GUID_DEVINTERFACE_CDROM,0x53f56308,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  12. DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,0x53f5630a,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  13. DEFINE_GUID(GUID_DEVINTERFACE_TAPE,0x53f5630b,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  14. DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,0x53f5630c,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  15. DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,0x53f5630d,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  16. DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,0x53f56310,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  17. DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,0x53f56311,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  18. DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,0x53f56312,0xb6bf,0x11d0,0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  19. DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,0x2accfe60,0xc130,0x11d2,0xb0,0x82,0x00,0xa0,0xc9,0x1e,0xfb,0x8b);
  20. DEFINE_GUID(GUID_DEVINTERFACE_VMLUN,0x6f416619,0x9f29,0x42a5,0xb2,0x0b,0x37,0xe2,0x19,0xca,0x02,0xb0);
  21. DEFINE_GUID(GUID_DEVINTERFACE_SES,0x1790c9ec,0x47d5,0x4df3,0xb5,0xaf,0x9a,0xdf,0x3c,0xf2,0x3e,0x48);
  22. DEFINE_GUID(GUID_DEVINTERFACE_ZNSDISK,0xb87941c5,0xffdb,0x43c7,0xb6,0xb1,0x20,0xb6,0x32,0xf0,0xb1,0x09);
  23. #define WDI_STORAGE_PREDICT_FAILURE_DPS_GUID {0xe9f2d03a,0x747c,0x41c2,{0xbb,0x9a,0x02,0xc6,0x2b,0x6d,0x5f,0xcb}};
  24. DEFINE_GUID(GUID_DEVINTERFACE_SERVICE_VOLUME,0x6ead3d82,0x25ec,0x46bc,0xb7,0xfd,0xc1,0xf0,0xdf,0x8f,0x50,0x37);
  25. DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,0x7f108a28,0x9833,0x4b3b,0xb7,0x80,0x2c,0x6b,0x5f,0xa5,0xc0,0x62);
  26. DEFINE_GUID(GUID_DEVINTERFACE_UNIFIED_ACCESS_RPMB,0x27447c21,0xbcc3,0x4d07,0xa0,0x5b,0xa3,0x39,0x5b,0xb4,0xee,0xe7);
  27. DEFINE_GUID(GUID_DEVINTERFACE_SCM_PHYSICAL_DEVICE,0x4283609d,0x4dc2,0x43be,0xbb,0xb4,0x4f,0x15,0xdf,0xce,0x2c,0x61);
  28. DEFINE_GUID(GUID_SCM_PD_HEALTH_NOTIFICATION,0x9da2d386,0x72f5,0x4ee3,0x81,0x55,0xec,0xa0,0x67,0x8e,0x3b,0x6);
  29. DEFINE_GUID(GUID_SCM_PD_PASSTHROUGH_INVDIMM,0x4309ac30,0x0d11,0x11e4,0x91,0x91,0x08,0x00,0x20,0x0c,0x9a,0x66);
  30. DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,0x86e0d1e0,0x8089,0x11d0,0x9c,0xe4,0x08,0x00,0x3e,0x30,0x1f,0x73);
  31. DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,0x4D36E978,0xE325,0x11CE,0xBF,0xC1,0x08,0x00,0x2B,0xE1,0x03,0x18);
  32. #define DiskClassGuid GUID_DEVINTERFACE_DISK
  33. #define CdRomClassGuid GUID_DEVINTERFACE_CDROM
  34. #define PartitionClassGuid GUID_DEVINTERFACE_PARTITION
  35. #define TapeClassGuid GUID_DEVINTERFACE_TAPE
  36. #define WriteOnceDiskClassGuid GUID_DEVINTERFACE_WRITEONCEDISK
  37. #define VolumeClassGuid GUID_DEVINTERFACE_VOLUME
  38. #define MediumChangerClassGuid GUID_DEVINTERFACE_MEDIUMCHANGER
  39. #define FloppyClassGuid GUID_DEVINTERFACE_FLOPPY
  40. #define CdChangerClassGuid GUID_DEVINTERFACE_CDCHANGER
  41. #define StoragePortClassGuid GUID_DEVINTERFACE_STORAGEPORT
  42. #define HiddenVolumeClassGuid GUID_DEVINTERFACE_HIDDEN_VOLUME
  43. #define GUID_CLASS_COMPORT GUID_DEVINTERFACE_COMPORT
  44. #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
  45. #endif /* DEFINE_GUID */
  46. #ifdef DEFINE_DEVPROPKEY
  47. #ifndef __WRAPPED__
  48. #define __WRAPPED__
  49. #endif
  50. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Portable,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,2);
  51. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Removable_Media,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,3);
  52. DEFINE_DEVPROPKEY(DEVPKEY_Storage_System_Critical,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,4);
  53. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Disk_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,5);
  54. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Partition_Number,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,6);
  55. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Mbr_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,7);
  56. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Type,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,8);
  57. DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Name,0x4d1ebee8,0x803,0x4774,0x98,0x42,0xb7,0x7d,0xb5,0x2,0x65,0xe9,9);
  58. #endif /* DEFINE_DEVPROPKEY */
  59. #ifndef _WINIOCTL_
  60. #define _WINIOCTL_
  61. #ifndef _DEVIOCTL_
  62. #define _DEVIOCTL_
  63. #ifndef DEVICE_TYPE
  64. #define DEVICE_TYPE DWORD
  65. #endif
  66. #define FILE_DEVICE_BEEP 0x00000001
  67. #define FILE_DEVICE_CD_ROM 0x00000002
  68. #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
  69. #define FILE_DEVICE_CONTROLLER 0x00000004
  70. #define FILE_DEVICE_DATALINK 0x00000005
  71. #define FILE_DEVICE_DFS 0x00000006
  72. #define FILE_DEVICE_DISK 0x00000007
  73. #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
  74. #define FILE_DEVICE_FILE_SYSTEM 0x00000009
  75. #define FILE_DEVICE_INPORT_PORT 0x0000000a
  76. #define FILE_DEVICE_KEYBOARD 0x0000000b
  77. #define FILE_DEVICE_MAILSLOT 0x0000000c
  78. #define FILE_DEVICE_MIDI_IN 0x0000000d
  79. #define FILE_DEVICE_MIDI_OUT 0x0000000e
  80. #define FILE_DEVICE_MOUSE 0x0000000f
  81. #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
  82. #define FILE_DEVICE_NAMED_PIPE 0x00000011
  83. #define FILE_DEVICE_NETWORK 0x00000012
  84. #define FILE_DEVICE_NETWORK_BROWSER 0x00000013
  85. #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
  86. #define FILE_DEVICE_NULL 0x00000015
  87. #define FILE_DEVICE_PARALLEL_PORT 0x00000016
  88. #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
  89. #define FILE_DEVICE_PRINTER 0x00000018
  90. #define FILE_DEVICE_SCANNER 0x00000019
  91. #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
  92. #define FILE_DEVICE_SERIAL_PORT 0x0000001b
  93. #define FILE_DEVICE_SCREEN 0x0000001c
  94. #define FILE_DEVICE_SOUND 0x0000001d
  95. #define FILE_DEVICE_STREAMS 0x0000001e
  96. #define FILE_DEVICE_TAPE 0x0000001f
  97. #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
  98. #define FILE_DEVICE_TRANSPORT 0x00000021
  99. #define FILE_DEVICE_UNKNOWN 0x00000022
  100. #define FILE_DEVICE_VIDEO 0x00000023
  101. #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
  102. #define FILE_DEVICE_WAVE_IN 0x00000025
  103. #define FILE_DEVICE_WAVE_OUT 0x00000026
  104. #define FILE_DEVICE_8042_PORT 0x00000027
  105. #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
  106. #define FILE_DEVICE_BATTERY 0x00000029
  107. #define FILE_DEVICE_BUS_EXTENDER 0x0000002a
  108. #define FILE_DEVICE_MODEM 0x0000002b
  109. #define FILE_DEVICE_VDM 0x0000002c
  110. #define FILE_DEVICE_MASS_STORAGE 0x0000002d
  111. #define FILE_DEVICE_SMB 0x0000002e
  112. #define FILE_DEVICE_KS 0x0000002f
  113. #define FILE_DEVICE_CHANGER 0x00000030
  114. #define FILE_DEVICE_SMARTCARD 0x00000031
  115. #define FILE_DEVICE_ACPI 0x00000032
  116. #define FILE_DEVICE_DVD 0x00000033
  117. #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
  118. #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
  119. #define FILE_DEVICE_DFS_VOLUME 0x00000036
  120. #define FILE_DEVICE_SERENUM 0x00000037
  121. #define FILE_DEVICE_TERMSRV 0x00000038
  122. #define FILE_DEVICE_KSEC 0x00000039
  123. #define FILE_DEVICE_FIPS 0x0000003A
  124. #define FILE_DEVICE_INFINIBAND 0x0000003B
  125. #define FILE_DEVICE_VMBUS 0x0000003E
  126. #define FILE_DEVICE_CRYPT_PROVIDER 0x0000003F
  127. #define FILE_DEVICE_WPD 0x00000040
  128. #define FILE_DEVICE_BLUETOOTH 0x00000041
  129. #define FILE_DEVICE_MT_COMPOSITE 0x00000042
  130. #define FILE_DEVICE_MT_TRANSPORT 0x00000043
  131. #define FILE_DEVICE_BIOMETRIC 0x00000044
  132. #define FILE_DEVICE_PMI 0x00000045
  133. #define FILE_DEVICE_EHSTOR 0x00000046
  134. #define FILE_DEVICE_DEVAPI 0x00000047
  135. #define FILE_DEVICE_GPIO 0x00000048
  136. #define FILE_DEVICE_USBEX 0x00000049
  137. #define FILE_DEVICE_CONSOLE 0x00000050
  138. #define FILE_DEVICE_NFP 0x00000051
  139. #define FILE_DEVICE_SYSENV 0x00000052
  140. #define FILE_DEVICE_VIRTUAL_BLOCK 0x00000053
  141. #define FILE_DEVICE_POINT_OF_SERVICE 0x00000054
  142. #define FILE_DEVICE_STORAGE_REPLICATION 0x00000055
  143. #define FILE_DEVICE_TRUST_ENV 0x00000056
  144. #define FILE_DEVICE_UCM 0x00000057
  145. #define FILE_DEVICE_UCMTCPCI 0x00000058
  146. #define FILE_DEVICE_PERSISTENT_MEMORY 0x00000059
  147. #define FILE_DEVICE_NVDIMM 0x0000005a
  148. #define FILE_DEVICE_HOLOGRAPHIC 0x0000005b
  149. #define FILE_DEVICE_SDFXHCI 0x0000005c
  150. #define FILE_DEVICE_UCMUCSI 0x0000005d
  151. #define FILE_DEVICE_PRM 0x0000005e
  152. #define FILE_DEVICE_EVENT_COLLECTOR 0x0000005f
  153. #define FILE_DEVICE_USB4 0x00000060
  154. #define FILE_DEVICE_SOUNDWIRE 0x00000061
  155. #define CTL_CODE(DeviceType,Function,Method,Access) (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
  156. #define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((DWORD)(ctrlCode & 0xffff0000)) >> 16)
  157. #define METHOD_FROM_CTL_CODE(ctrlCode) ((DWORD)(ctrlCode & 3))
  158. #define METHOD_BUFFERED 0
  159. #define METHOD_IN_DIRECT 1
  160. #define METHOD_OUT_DIRECT 2
  161. #define METHOD_NEITHER 3
  162. #define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
  163. #define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
  164. #define FILE_ANY_ACCESS 0
  165. #define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS)
  166. #define FILE_READ_ACCESS (0x0001)
  167. #define FILE_WRITE_ACCESS (0x0002)
  168. #endif /* _DEVIOCTL_ */
  169. #ifndef _NTDDSTOR_H_
  170. #define _NTDDSTOR_H_
  171. #ifdef __cplusplus
  172. extern "C" {
  173. #endif
  174. #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
  175. #define IOCTL_STORAGE_CHECK_VERIFY CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS)
  176. #define IOCTL_STORAGE_CHECK_VERIFY2 CTL_CODE(IOCTL_STORAGE_BASE,0x0200,METHOD_BUFFERED,FILE_ANY_ACCESS)
  177. #define IOCTL_STORAGE_MEDIA_REMOVAL CTL_CODE(IOCTL_STORAGE_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS)
  178. #define IOCTL_STORAGE_EJECT_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS)
  179. #define IOCTL_STORAGE_LOAD_MEDIA CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS)
  180. #define IOCTL_STORAGE_LOAD_MEDIA2 CTL_CODE(IOCTL_STORAGE_BASE,0x0203,METHOD_BUFFERED,FILE_ANY_ACCESS)
  181. #define IOCTL_STORAGE_RESERVE CTL_CODE(IOCTL_STORAGE_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS)
  182. #define IOCTL_STORAGE_RELEASE CTL_CODE(IOCTL_STORAGE_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS)
  183. #define IOCTL_STORAGE_FIND_NEW_DEVICES CTL_CODE(IOCTL_STORAGE_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS)
  184. #define IOCTL_STORAGE_EJECTION_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0250,METHOD_BUFFERED,FILE_ANY_ACCESS)
  185. #define IOCTL_STORAGE_MCN_CONTROL CTL_CODE(IOCTL_STORAGE_BASE,0x0251,METHOD_BUFFERED,FILE_ANY_ACCESS)
  186. #define IOCTL_STORAGE_GET_MEDIA_TYPES CTL_CODE(IOCTL_STORAGE_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS)
  187. #define IOCTL_STORAGE_GET_MEDIA_TYPES_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0301,METHOD_BUFFERED,FILE_ANY_ACCESS)
  188. #define IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0304,METHOD_BUFFERED,FILE_ANY_ACCESS)
  189. #define IOCTL_STORAGE_GET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0305,METHOD_BUFFERED,FILE_ANY_ACCESS)
  190. #define IOCTL_STORAGE_SET_HOTPLUG_INFO CTL_CODE(IOCTL_STORAGE_BASE,0x0306,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  191. #define IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS)
  192. #define IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS)
  193. #define IOCTL_STORAGE_BREAK_RESERVATION CTL_CODE(IOCTL_STORAGE_BASE,0x0405,METHOD_BUFFERED,FILE_READ_ACCESS)
  194. #define IOCTL_STORAGE_PERSISTENT_RESERVE_IN CTL_CODE(IOCTL_STORAGE_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS)
  195. #define IOCTL_STORAGE_PERSISTENT_RESERVE_OUT CTL_CODE(IOCTL_STORAGE_BASE, 0x0407, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  196. #define IOCTL_STORAGE_GET_DEVICE_NUMBER CTL_CODE(IOCTL_STORAGE_BASE,0x0420,METHOD_BUFFERED,FILE_ANY_ACCESS)
  197. #define IOCTL_STORAGE_GET_DEVICE_NUMBER_EX CTL_CODE(IOCTL_STORAGE_BASE,0x0421,METHOD_BUFFERED,FILE_ANY_ACCESS)
  198. #define IOCTL_STORAGE_PREDICT_FAILURE CTL_CODE(IOCTL_STORAGE_BASE,0x0440,METHOD_BUFFERED,FILE_ANY_ACCESS)
  199. #define IOCTL_STORAGE_FAILURE_PREDICTION_CONFIG CTL_CODE(IOCTL_STORAGE_BASE,0x0441,METHOD_BUFFERED,FILE_ANY_ACCESS)
  200. #define IOCTL_STORAGE_GET_COUNTERS CTL_CODE(IOCTL_STORAGE_BASE,0x442,METHOD_BUFFERED,FILE_ANY_ACCESS)
  201. #define IOCTL_STORAGE_READ_CAPACITY CTL_CODE(IOCTL_STORAGE_BASE,0x0450,METHOD_BUFFERED,FILE_READ_ACCESS)
  202. #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY CTL_CODE(IOCTL_STORAGE_BASE, 0x0470, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  203. #define IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY CTL_CODE(IOCTL_STORAGE_BASE, 0x0471, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  204. #define IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS CTL_CODE(IOCTL_STORAGE_BASE, 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  205. #define IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW CTL_CODE(IOCTL_STORAGE_BASE, 0x0473, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  206. #define IOCTL_STORAGE_SET_TEMPERATURE_THRESHOLD CTL_CODE(IOCTL_STORAGE_BASE, 0x0480, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  207. #define IOCTL_STORAGE_PROTOCOL_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x04F0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  208. #define IOCTL_STORAGE_SET_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x04FF, METHOD_BUFFERED, FILE_WRITE_ACCESS)
  209. #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  210. #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
  211. #define IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES CTL_CODE(IOCTL_STORAGE_BASE, 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS)
  212. #define IOCTL_STORAGE_REINITIALIZE_MEDIA CTL_CODE(IOCTL_STORAGE_BASE, 0x0590, METHOD_BUFFERED, FILE_WRITE_ACCESS)
  213. #define IOCTL_STORAGE_GET_BC_PROPERTIES CTL_CODE(IOCTL_STORAGE_BASE, 0x0600, METHOD_BUFFERED, FILE_READ_ACCESS)
  214. #define IOCTL_STORAGE_ALLOCATE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0601, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  215. #define IOCTL_STORAGE_FREE_BC_STREAM CTL_CODE(IOCTL_STORAGE_BASE, 0x0602, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  216. #define IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT CTL_CODE(IOCTL_STORAGE_BASE, 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS)
  217. #define IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0621, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  218. #define IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK CTL_CODE(IOCTL_STORAGE_BASE, 0x0622, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  219. #define OBSOLETE_IOCTL_STORAGE_RESET_BUS CTL_CODE(IOCTL_STORAGE_BASE,0x0400,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  220. #define OBSOLETE_IOCTL_STORAGE_RESET_DEVICE CTL_CODE(IOCTL_STORAGE_BASE,0x0401,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  221. #define IOCTL_STORAGE_FIRMWARE_GET_INFO CTL_CODE(IOCTL_STORAGE_BASE, 0x0700, METHOD_BUFFERED, FILE_ANY_ACCESS)
  222. #define IOCTL_STORAGE_FIRMWARE_DOWNLOAD CTL_CODE(IOCTL_STORAGE_BASE, 0x0701, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  223. #define IOCTL_STORAGE_FIRMWARE_ACTIVATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0702, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  224. #define IOCTL_STORAGE_ENABLE_IDLE_POWER CTL_CODE(IOCTL_STORAGE_BASE, 0x0720, METHOD_BUFFERED, FILE_ANY_ACCESS)
  225. #define IOCTL_STORAGE_GET_IDLE_POWERUP_REASON CTL_CODE(IOCTL_STORAGE_BASE, 0x0721, METHOD_BUFFERED, FILE_ANY_ACCESS)
  226. #define IOCTL_STORAGE_POWER_ACTIVE CTL_CODE(IOCTL_STORAGE_BASE, 0x0722, METHOD_BUFFERED, FILE_ANY_ACCESS)
  227. #define IOCTL_STORAGE_POWER_IDLE CTL_CODE(IOCTL_STORAGE_BASE, 0x0723, METHOD_BUFFERED, FILE_ANY_ACCESS)
  228. #define IOCTL_STORAGE_EVENT_NOTIFICATION CTL_CODE(IOCTL_STORAGE_BASE, 0x0724, METHOD_BUFFERED, FILE_ANY_ACCESS)
  229. #define IOCTL_STORAGE_DEVICE_POWER_CAP CTL_CODE(IOCTL_STORAGE_BASE, 0x0725, METHOD_BUFFERED, FILE_ANY_ACCESS)
  230. #define IOCTL_STORAGE_RPMB_COMMAND CTL_CODE(IOCTL_STORAGE_BASE, 0x0726, METHOD_BUFFERED, FILE_ANY_ACCESS)
  231. #define IOCTL_STORAGE_ATTRIBUTE_MANAGEMENT CTL_CODE(IOCTL_STORAGE_BASE, 0x0727, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  232. #define IOCTL_STORAGE_DIAGNOSTIC CTL_CODE(IOCTL_STORAGE_BASE, 0x0728, METHOD_BUFFERED, FILE_ANY_ACCESS)
  233. #define IOCTL_STORAGE_GET_PHYSICAL_ELEMENT_STATUS CTL_CODE(IOCTL_STORAGE_BASE, 0x0729, METHOD_BUFFERED, FILE_ANY_ACCESS)
  234. #define IOCTL_STORAGE_REMOVE_ELEMENT_AND_TRUNCATE CTL_CODE(IOCTL_STORAGE_BASE, 0x0730, METHOD_BUFFERED, FILE_ANY_ACCESS)
  235. #define IOCTL_STORAGE_GET_DEVICE_INTERNAL_LOG CTL_CODE(IOCTL_STORAGE_BASE, 0x0731, METHOD_BUFFERED, FILE_ANY_ACCESS)
  236. typedef struct _STORAGE_READ_CAPACITY {
  237. ULONG Version;
  238. ULONG Size;
  239. ULONG BlockLength;
  240. LARGE_INTEGER NumberOfBlocks;
  241. LARGE_INTEGER DiskLength;
  242. } STORAGE_READ_CAPACITY, *PSTORAGE_READ_CAPACITY;
  243. #define IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES CTL_CODE(IOCTL_STORAGE_BASE, 0x0501, METHOD_BUFFERED, FILE_WRITE_ACCESS)
  244. #define DeviceDsmActionFlag_NonDestructive 0x80000000
  245. #define DeviceDsmAction_None 0
  246. #define DeviceDsmAction_Trim 1
  247. #define DeviceDsmAction_Notification (2 | DeviceDsmActionFlag_NonDestructive)
  248. #define IsDsmActionNonDestructive(x) ((BOOLEAN)(!!((x) & DeviceDsmActionFlag_NonDestructive)))
  249. #define DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE __MSABI_LONG(0x00000001)
  250. #define DEVICE_DSM_NOTIFY_FLAG_BEGIN 0x00000001
  251. #define DEVICE_DSM_NOTIFY_FLAG_END 0x00000002
  252. #define IOCTL_STORAGE_BC_VERSION 1
  253. #define STORAGE_PRIORITY_HINT_SUPPORTED 0x0001
  254. typedef DWORD DEVICE_DATA_MANAGEMENT_SET_ACTION;
  255. typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
  256. DWORD Size;
  257. DEVICE_DATA_MANAGEMENT_SET_ACTION Action;
  258. DWORD Flags;
  259. DWORD ParameterBlockOffset;
  260. DWORD ParameterBlockLength;
  261. DWORD DataSetRangesOffset;
  262. DWORD DataSetRangesLength;
  263. } DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES;
  264. typedef struct _DEVICE_DATA_SET_RANGE {
  265. LONGLONG StartingOffset;
  266. DWORDLONG LengthInBytes;
  267. } DEVICE_DATA_SET_RANGE, *PDEVICE_DATA_SET_RANGE;
  268. typedef struct _DEVICE_DSM_NOTIFICATION_PARAMETERS {
  269. ULONG Size;
  270. ULONG Flags;
  271. ULONG NumFileTypeIDs;
  272. GUID FileTypeID[1];
  273. } DEVICE_DSM_NOTIFICATION_PARAMETERS, *PDEVICE_DSM_NOTIFICATION_PARAMETERS;
  274. typedef struct _STORAGE_GET_BC_PROPERTIES_OUTPUT {
  275. ULONG MaximumRequestsPerPeriod;
  276. ULONG MinimumPeriod;
  277. ULONGLONG MaximumRequestSize;
  278. ULONG EstimatedTimePerRequest;
  279. ULONG NumOutStandingRequests;
  280. ULONGLONG RequestSize;
  281. } STORAGE_GET_BC_PROPERTIES_OUTPUT, *PSTORAGE_GET_BC_PROPERTIES_OUTPUT;
  282. typedef struct _STORAGE_ALLOCATE_BC_STREAM_INPUT {
  283. ULONG Version;
  284. ULONG RequestsPerPeriod;
  285. ULONG Period;
  286. BOOLEAN RetryFailures;
  287. BOOLEAN Discardable;
  288. BOOLEAN Reserved1[2];
  289. ULONG AccessType;
  290. ULONG AccessMode;
  291. } STORAGE_ALLOCATE_BC_STREAM_INPUT, *PSTORAGE_ALLOCATE_BC_STREAM_INPUT;
  292. typedef struct _STORAGE_ALLOCATE_BC_STREAM_OUTPUT {
  293. ULONGLONG RequestSize;
  294. ULONG NumOutStandingRequests;
  295. } STORAGE_ALLOCATE_BC_STREAM_OUTPUT, *PSTORAGE_ALLOCATE_BC_STREAM_OUTPUT;
  296. typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
  297. ULONG SupportFlags;
  298. } STORAGE_PRIORITY_HINT_SUPPORT, *PSTORAGE_PRIORITY_HINT_SUPPORT;
  299. #if defined(_MSC_EXTENSIONS) || defined(__GNUC__)
  300. typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
  301. USHORT Reserved;
  302. USHORT SerialNumberLength;
  303. UCHAR SerialNumber[0];
  304. } STORAGE_MEDIA_SERIAL_NUMBER_DATA, *PSTORAGE_MEDIA_SERIAL_NUMBER_DATA;
  305. typedef struct _PERSISTENT_RESERVE_COMMAND {
  306. ULONG Version;
  307. ULONG Size;
  308. __C89_NAMELESS union {
  309. struct {
  310. UCHAR ServiceAction:5;
  311. UCHAR Reserved1:3;
  312. USHORT AllocationLength;
  313. } PR_IN;
  314. struct {
  315. UCHAR ServiceAction:5;
  316. UCHAR Reserved1:3;
  317. UCHAR Type:4;
  318. UCHAR Scope:4;
  319. UCHAR ParameterList[0];
  320. } PR_OUT;
  321. } DUMMYUNIONNAME;
  322. } PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND;
  323. #endif /* defined(_MSC_EXTENSIONS) */
  324. typedef struct _STORAGE_HOTPLUG_INFO {
  325. DWORD Size;
  326. BOOLEAN MediaRemovable;
  327. BOOLEAN MediaHotplug;
  328. BOOLEAN DeviceHotplug;
  329. BOOLEAN WriteCacheEnableOverride;
  330. } STORAGE_HOTPLUG_INFO,*PSTORAGE_HOTPLUG_INFO;
  331. typedef struct _STORAGE_DEVICE_NUMBER {
  332. DEVICE_TYPE DeviceType;
  333. DWORD DeviceNumber;
  334. DWORD PartitionNumber;
  335. } STORAGE_DEVICE_NUMBER,*PSTORAGE_DEVICE_NUMBER;
  336. typedef struct _STORAGE_DEVICE_NUMBERS {
  337. DWORD Version;
  338. DWORD Size;
  339. DWORD NumberOfDevices;
  340. STORAGE_DEVICE_NUMBER Devices[ANYSIZE_ARRAY];
  341. } STORAGE_DEVICE_NUMBERS,*PSTORAGE_DEVICE_NUMBERS;
  342. #define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_CONFLICT 0x1
  343. #define STORAGE_DEVICE_FLAGS_RANDOM_DEVICEGUID_REASON_NOHWID 0x2
  344. #define STORAGE_DEVICE_FLAGS_PAGE_83_DEVICEGUID 0x4
  345. typedef struct _STORAGE_DEVICE_NUMBER_EX {
  346. DWORD Version;
  347. DWORD Size;
  348. DWORD Flags;
  349. DEVICE_TYPE DeviceType;
  350. DWORD DeviceNumber;
  351. GUID DeviceGuid;
  352. DWORD PartitionNumber;
  353. } STORAGE_DEVICE_NUMBER_EX,*PSTORAGE_DEVICE_NUMBER_EX;
  354. typedef struct _STORAGE_BUS_RESET_REQUEST {
  355. BYTE PathId;
  356. } STORAGE_BUS_RESET_REQUEST,*PSTORAGE_BUS_RESET_REQUEST;
  357. typedef struct STORAGE_BREAK_RESERVATION_REQUEST {
  358. DWORD Length;
  359. BYTE _unused;
  360. BYTE PathId;
  361. BYTE TargetId;
  362. BYTE Lun;
  363. } STORAGE_BREAK_RESERVATION_REQUEST,*PSTORAGE_BREAK_RESERVATION_REQUEST;
  364. typedef struct _PREVENT_MEDIA_REMOVAL {
  365. BOOLEAN PreventMediaRemoval;
  366. } PREVENT_MEDIA_REMOVAL,*PPREVENT_MEDIA_REMOVAL;
  367. typedef struct _CLASS_MEDIA_CHANGE_CONTEXT {
  368. DWORD MediaChangeCount;
  369. DWORD NewState;
  370. } CLASS_MEDIA_CHANGE_CONTEXT,*PCLASS_MEDIA_CHANGE_CONTEXT;
  371. typedef struct _TAPE_STATISTICS {
  372. DWORD Version;
  373. DWORD Flags;
  374. LARGE_INTEGER RecoveredWrites;
  375. LARGE_INTEGER UnrecoveredWrites;
  376. LARGE_INTEGER RecoveredReads;
  377. LARGE_INTEGER UnrecoveredReads;
  378. BYTE CompressionRatioReads;
  379. BYTE CompressionRatioWrites;
  380. } TAPE_STATISTICS,*PTAPE_STATISTICS;
  381. #define RECOVERED_WRITES_VALID 0x00000001
  382. #define UNRECOVERED_WRITES_VALID 0x00000002
  383. #define RECOVERED_READS_VALID 0x00000004
  384. #define UNRECOVERED_READS_VALID 0x00000008
  385. #define WRITE_COMPRESSION_INFO_VALID 0x00000010
  386. #define READ_COMPRESSION_INFO_VALID 0x00000020
  387. typedef struct _TAPE_GET_STATISTICS {
  388. DWORD Operation;
  389. } TAPE_GET_STATISTICS,*PTAPE_GET_STATISTICS;
  390. #define TAPE_RETURN_STATISTICS __MSABI_LONG(0)
  391. #define TAPE_RETURN_ENV_INFO __MSABI_LONG(1)
  392. #define TAPE_RESET_STATISTICS __MSABI_LONG(2)
  393. typedef enum _STORAGE_MEDIA_TYPE {
  394. DDS_4mm = 0x20,
  395. MiniQic,
  396. Travan,
  397. QIC,
  398. MP_8mm,
  399. AME_8mm,
  400. AIT1_8mm,
  401. DLT,
  402. NCTP,
  403. IBM_3480,
  404. IBM_3490E,
  405. IBM_Magstar_3590,
  406. IBM_Magstar_MP,
  407. STK_DATA_D3,
  408. SONY_DTF,
  409. DV_6mm,
  410. DMI,
  411. SONY_D2,
  412. CLEANER_CARTRIDGE,
  413. CD_ROM,
  414. CD_R,
  415. CD_RW,
  416. DVD_ROM,
  417. DVD_R,
  418. DVD_RW,
  419. MO_3_RW,
  420. MO_5_WO,
  421. MO_5_RW,
  422. MO_5_LIMDOW,
  423. PC_5_WO,
  424. PC_5_RW,
  425. PD_5_RW,
  426. ABL_5_WO,
  427. PINNACLE_APEX_5_RW,
  428. SONY_12_WO,
  429. PHILIPS_12_WO,
  430. HITACHI_12_WO,
  431. CYGNET_12_WO,
  432. KODAK_14_WO,
  433. MO_NFR_525,
  434. NIKON_12_RW,
  435. IOMEGA_ZIP,
  436. IOMEGA_JAZ,
  437. SYQUEST_EZ135,
  438. SYQUEST_EZFLYER,
  439. SYQUEST_SYJET,
  440. AVATAR_F2,
  441. MP2_8mm,
  442. DST_S,
  443. DST_M,
  444. DST_L,
  445. VXATape_1,
  446. VXATape_2,
  447. STK_9840,
  448. LTO_Ultrium,
  449. LTO_Accelis,
  450. DVD_RAM,
  451. AIT_8mm,
  452. ADR_1,
  453. ADR_2,
  454. STK_9940,
  455. SAIT,
  456. VXATape
  457. } STORAGE_MEDIA_TYPE, *PSTORAGE_MEDIA_TYPE;
  458. #define MEDIA_ERASEABLE 0x00000001
  459. #define MEDIA_WRITE_ONCE 0x00000002
  460. #define MEDIA_READ_ONLY 0x00000004
  461. #define MEDIA_READ_WRITE 0x00000008
  462. #define MEDIA_WRITE_PROTECTED 0x00000100
  463. #define MEDIA_CURRENTLY_MOUNTED 0x80000000
  464. typedef enum _STORAGE_BUS_TYPE {
  465. BusTypeUnknown = 0x00,
  466. BusTypeScsi = 0x1,
  467. BusTypeAtapi = 0x2,
  468. BusTypeAta = 0x3,
  469. BusType1394 = 0x4,
  470. BusTypeSsa = 0x5,
  471. BusTypeFibre = 0x6,
  472. BusTypeUsb = 0x7,
  473. BusTypeRAID = 0x8,
  474. #if (_WIN32_WINNT >= 0x0600)
  475. BusTypeiScsi = 0x9,
  476. BusTypeSas = 0xA,
  477. BusTypeSata = 0xB,
  478. BusTypeSd = 0xC,
  479. BusTypeMmc = 0xD,
  480. #endif /*(_WIN32_WINNT >= 0x0600)*/
  481. #if (_WIN32_WINNT >= 0x0601)
  482. BusTypeVirtual = 0xE,
  483. BusTypeFileBackedVirtual = 0xF,
  484. BusTypeSpaces = 0x10,
  485. BusTypeNvme = 0x11,
  486. BusTypeSCM = 0x12,
  487. BusTypeUfs = 0x13,
  488. #endif /*(_WIN32_WINNT >= 0x0601)*/
  489. BusTypeMax,
  490. BusTypeMaxReserved = 0x7F
  491. } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
  492. #define SupportsDeviceSharing(BusType) ((BusType == BusTypeScsi) || (BusType == BusTypeFibre) || (BusType == BusTypeiScsi) || (BusType == BusTypeSas) || (BusType == BusTypeSpaces))
  493. typedef struct _DEVICE_MEDIA_INFO {
  494. union {
  495. struct {
  496. LARGE_INTEGER Cylinders;
  497. STORAGE_MEDIA_TYPE MediaType;
  498. DWORD TracksPerCylinder;
  499. DWORD SectorsPerTrack;
  500. DWORD BytesPerSector;
  501. DWORD NumberMediaSides;
  502. DWORD MediaCharacteristics;
  503. } DiskInfo;
  504. struct {
  505. LARGE_INTEGER Cylinders;
  506. STORAGE_MEDIA_TYPE MediaType;
  507. DWORD TracksPerCylinder;
  508. DWORD SectorsPerTrack;
  509. DWORD BytesPerSector;
  510. DWORD NumberMediaSides;
  511. DWORD MediaCharacteristics;
  512. } RemovableDiskInfo;
  513. struct {
  514. STORAGE_MEDIA_TYPE MediaType;
  515. DWORD MediaCharacteristics;
  516. DWORD CurrentBlockSize;
  517. STORAGE_BUS_TYPE BusType;
  518. union {
  519. struct {
  520. BYTE MediumType;
  521. BYTE DensityCode;
  522. } ScsiInformation;
  523. } BusSpecificData;
  524. } TapeInfo;
  525. } DeviceSpecific;
  526. } DEVICE_MEDIA_INFO,*PDEVICE_MEDIA_INFO;
  527. typedef struct _GET_MEDIA_TYPES {
  528. DWORD DeviceType;
  529. DWORD MediaInfoCount;
  530. DEVICE_MEDIA_INFO MediaInfo[1];
  531. } GET_MEDIA_TYPES,*PGET_MEDIA_TYPES;
  532. typedef struct _STORAGE_PREDICT_FAILURE {
  533. DWORD PredictFailure;
  534. BYTE VendorSpecific[512];
  535. } STORAGE_PREDICT_FAILURE,*PSTORAGE_PREDICT_FAILURE;
  536. typedef struct _STORAGE_FAILURE_PREDICTION_CONFIG {
  537. DWORD Version;
  538. DWORD Size;
  539. BOOLEAN Set;
  540. BOOLEAN Enabled;
  541. WORD Reserved;
  542. } STORAGE_FAILURE_PREDICTION_CONFIG,*PSTORAGE_FAILURE_PREDICTION_CONFIG;
  543. #define STORAGE_FAILURE_PREDICTION_CONFIG_V1 1
  544. #ifdef __cplusplus
  545. }
  546. #endif
  547. #endif /* _NTDDSTOR_H_ */
  548. #ifndef _NTDDDISK_H_
  549. #define _NTDDDISK_H_
  550. #define IOCTL_DISK_BASE FILE_DEVICE_DISK
  551. #define IOCTL_DISK_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_DISK_BASE,0x0000,METHOD_BUFFERED,FILE_ANY_ACCESS)
  552. #define IOCTL_DISK_GET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS)
  553. #define IOCTL_DISK_SET_PARTITION_INFO CTL_CODE(IOCTL_DISK_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  554. #define IOCTL_DISK_GET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0003,METHOD_BUFFERED,FILE_READ_ACCESS)
  555. #define IOCTL_DISK_SET_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  556. #define IOCTL_DISK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0005,METHOD_BUFFERED,FILE_ANY_ACCESS)
  557. #define IOCTL_DISK_FORMAT_TRACKS CTL_CODE(IOCTL_DISK_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  558. #define IOCTL_DISK_REASSIGN_BLOCKS CTL_CODE(IOCTL_DISK_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  559. #define IOCTL_DISK_PERFORMANCE CTL_CODE(IOCTL_DISK_BASE,0x0008,METHOD_BUFFERED,FILE_ANY_ACCESS)
  560. #define IOCTL_DISK_IS_WRITABLE CTL_CODE(IOCTL_DISK_BASE,0x0009,METHOD_BUFFERED,FILE_ANY_ACCESS)
  561. #define IOCTL_DISK_LOGGING CTL_CODE(IOCTL_DISK_BASE,0x000a,METHOD_BUFFERED,FILE_ANY_ACCESS)
  562. #define IOCTL_DISK_FORMAT_TRACKS_EX CTL_CODE(IOCTL_DISK_BASE,0x000b,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  563. #define IOCTL_DISK_HISTOGRAM_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000c,METHOD_BUFFERED,FILE_ANY_ACCESS)
  564. #define IOCTL_DISK_HISTOGRAM_DATA CTL_CODE(IOCTL_DISK_BASE,0x000d,METHOD_BUFFERED,FILE_ANY_ACCESS)
  565. #define IOCTL_DISK_HISTOGRAM_RESET CTL_CODE(IOCTL_DISK_BASE,0x000e,METHOD_BUFFERED,FILE_ANY_ACCESS)
  566. #define IOCTL_DISK_REQUEST_STRUCTURE CTL_CODE(IOCTL_DISK_BASE,0x000f,METHOD_BUFFERED,FILE_ANY_ACCESS)
  567. #define IOCTL_DISK_REQUEST_DATA CTL_CODE(IOCTL_DISK_BASE,0x0010,METHOD_BUFFERED,FILE_ANY_ACCESS)
  568. #define IOCTL_DISK_PERFORMANCE_OFF CTL_CODE(IOCTL_DISK_BASE,0x0018,METHOD_BUFFERED,FILE_ANY_ACCESS)
  569. #define IOCTL_DISK_CONTROLLER_NUMBER CTL_CODE(IOCTL_DISK_BASE,0x0011,METHOD_BUFFERED,FILE_ANY_ACCESS)
  570. #define SMART_GET_VERSION CTL_CODE(IOCTL_DISK_BASE,0x0020,METHOD_BUFFERED,FILE_READ_ACCESS)
  571. #define SMART_SEND_DRIVE_COMMAND CTL_CODE(IOCTL_DISK_BASE,0x0021,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  572. #define SMART_RCV_DRIVE_DATA CTL_CODE(IOCTL_DISK_BASE,0x0022,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  573. #define IOCTL_DISK_GET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0012,METHOD_BUFFERED,FILE_ANY_ACCESS)
  574. #define IOCTL_DISK_SET_PARTITION_INFO_EX CTL_CODE(IOCTL_DISK_BASE,0x0013,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  575. #define IOCTL_DISK_GET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0014,METHOD_BUFFERED,FILE_ANY_ACCESS)
  576. #define IOCTL_DISK_SET_DRIVE_LAYOUT_EX CTL_CODE(IOCTL_DISK_BASE,0x0015,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  577. #define IOCTL_DISK_CREATE_DISK CTL_CODE(IOCTL_DISK_BASE,0x0016,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  578. #define IOCTL_DISK_GET_LENGTH_INFO CTL_CODE(IOCTL_DISK_BASE,0x0017,METHOD_BUFFERED,FILE_READ_ACCESS)
  579. #define IOCTL_DISK_GET_DRIVE_GEOMETRY_EX CTL_CODE(IOCTL_DISK_BASE,0x0028,METHOD_BUFFERED,FILE_ANY_ACCESS)
  580. #define IOCTL_DISK_REASSIGN_BLOCKS_EX CTL_CODE(IOCTL_DISK_BASE,0x0029,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  581. #define IOCTL_DISK_UPDATE_DRIVE_SIZE CTL_CODE(IOCTL_DISK_BASE,0x0032,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  582. #define IOCTL_DISK_GROW_PARTITION CTL_CODE(IOCTL_DISK_BASE,0x0034,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  583. #define IOCTL_DISK_GET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0035,METHOD_BUFFERED,FILE_READ_ACCESS)
  584. #define IOCTL_DISK_SET_CACHE_INFORMATION CTL_CODE(IOCTL_DISK_BASE,0x0036,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  585. #define OBSOLETE_DISK_GET_WRITE_CACHE_STATE CTL_CODE(IOCTL_DISK_BASE,0x0037,METHOD_BUFFERED,FILE_READ_ACCESS)
  586. #define IOCTL_DISK_DELETE_DRIVE_LAYOUT CTL_CODE(IOCTL_DISK_BASE,0x0040,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  587. #define IOCTL_DISK_UPDATE_PROPERTIES CTL_CODE(IOCTL_DISK_BASE,0x0050,METHOD_BUFFERED,FILE_ANY_ACCESS)
  588. #define IOCTL_DISK_RESET_SNAPSHOT_INFO CTL_CODE(IOCTL_DISK_BASE,0x0084,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  589. #define IOCTL_DISK_FORMAT_DRIVE CTL_CODE(IOCTL_DISK_BASE,0x00f3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  590. #define IOCTL_DISK_SENSE_DEVICE CTL_CODE(IOCTL_DISK_BASE,0x00f8,METHOD_BUFFERED,FILE_ANY_ACCESS)
  591. #define IOCTL_DISK_CHECK_VERIFY CTL_CODE(IOCTL_DISK_BASE,0x0200,METHOD_BUFFERED,FILE_READ_ACCESS)
  592. #define IOCTL_DISK_MEDIA_REMOVAL CTL_CODE(IOCTL_DISK_BASE,0x0201,METHOD_BUFFERED,FILE_READ_ACCESS)
  593. #define IOCTL_DISK_EJECT_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0202,METHOD_BUFFERED,FILE_READ_ACCESS)
  594. #define IOCTL_DISK_LOAD_MEDIA CTL_CODE(IOCTL_DISK_BASE,0x0203,METHOD_BUFFERED,FILE_READ_ACCESS)
  595. #define IOCTL_DISK_RESERVE CTL_CODE(IOCTL_DISK_BASE,0x0204,METHOD_BUFFERED,FILE_READ_ACCESS)
  596. #define IOCTL_DISK_RELEASE CTL_CODE(IOCTL_DISK_BASE,0x0205,METHOD_BUFFERED,FILE_READ_ACCESS)
  597. #define IOCTL_DISK_FIND_NEW_DEVICES CTL_CODE(IOCTL_DISK_BASE,0x0206,METHOD_BUFFERED,FILE_READ_ACCESS)
  598. #define IOCTL_DISK_GET_MEDIA_TYPES CTL_CODE(IOCTL_DISK_BASE,0x0300,METHOD_BUFFERED,FILE_ANY_ACCESS)
  599. #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  600. #define PARTITION_ENTRY_UNUSED 0x00
  601. #define PARTITION_FAT_12 0x01
  602. #define PARTITION_XENIX_1 0x02
  603. #define PARTITION_XENIX_2 0x03
  604. #define PARTITION_FAT_16 0x04
  605. #define PARTITION_EXTENDED 0x05
  606. #define PARTITION_HUGE 0x06
  607. #define PARTITION_IFS 0x07
  608. #define PARTITION_OS2BOOTMGR 0x0A
  609. #define PARTITION_FAT32 0x0B
  610. #define PARTITION_FAT32_XINT13 0x0C
  611. #define PARTITION_XINT13 0x0E
  612. #define PARTITION_XINT13_EXTENDED 0x0F
  613. #define PARTITION_PREP 0x41
  614. #define PARTITION_LDM 0x42
  615. #define PARTITION_UNIX 0x63
  616. #define VALID_NTFT 0xC0
  617. #define PARTITION_NTFT 0x80
  618. #define IsRecognizedPartition(PartitionType) (((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT_12)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_IFS)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_HUGE)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT32)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_FAT32_XINT13)) || ((PartitionType & PARTITION_NTFT) && ((PartitionType & ~0xC0)==PARTITION_XINT13)) || ((PartitionType)==PARTITION_FAT_12) || ((PartitionType)==PARTITION_FAT_16) || ((PartitionType)==PARTITION_IFS) || ((PartitionType)==PARTITION_HUGE) || ((PartitionType)==PARTITION_FAT32) || ((PartitionType)==PARTITION_FAT32_XINT13) || ((PartitionType)==PARTITION_XINT13))
  619. #define IsContainerPartition(PartitionType) ((PartitionType==PARTITION_EXTENDED) || (PartitionType==PARTITION_XINT13_EXTENDED))
  620. #define IsFTPartition(PartitionType) (((PartitionType)&PARTITION_NTFT) && IsRecognizedPartition(PartitionType))
  621. typedef enum _MEDIA_TYPE {
  622. Unknown,F5_1Pt2_512,F3_1Pt44_512,F3_2Pt88_512,F3_20Pt8_512,F3_720_512,F5_360_512,F5_320_512,F5_320_1024,F5_180_512,F5_160_512,
  623. RemovableMedia,FixedMedia,F3_120M_512,F3_640_512,F5_640_512,F5_720_512,F3_1Pt2_512,F3_1Pt23_1024,F5_1Pt23_1024,F3_128Mb_512,
  624. F3_230Mb_512,F8_256_128,F3_200Mb_512,F3_240M_512,F3_32M_512
  625. } MEDIA_TYPE,*PMEDIA_TYPE;
  626. typedef struct _FORMAT_PARAMETERS {
  627. MEDIA_TYPE MediaType;
  628. DWORD StartCylinderNumber;
  629. DWORD EndCylinderNumber;
  630. DWORD StartHeadNumber;
  631. DWORD EndHeadNumber;
  632. } FORMAT_PARAMETERS,*PFORMAT_PARAMETERS;
  633. typedef WORD BAD_TRACK_NUMBER;
  634. typedef WORD *PBAD_TRACK_NUMBER;
  635. typedef struct _FORMAT_EX_PARAMETERS {
  636. MEDIA_TYPE MediaType;
  637. DWORD StartCylinderNumber;
  638. DWORD EndCylinderNumber;
  639. DWORD StartHeadNumber;
  640. DWORD EndHeadNumber;
  641. WORD FormatGapLength;
  642. WORD SectorsPerTrack;
  643. WORD SectorNumber[1];
  644. } FORMAT_EX_PARAMETERS,*PFORMAT_EX_PARAMETERS;
  645. typedef struct _DISK_GEOMETRY {
  646. LARGE_INTEGER Cylinders;
  647. MEDIA_TYPE MediaType;
  648. DWORD TracksPerCylinder;
  649. DWORD SectorsPerTrack;
  650. DWORD BytesPerSector;
  651. } DISK_GEOMETRY,*PDISK_GEOMETRY;
  652. #define WMI_DISK_GEOMETRY_GUID { 0x25007f51,0x57c2,0x11d1,{ 0xa5,0x28,0x0,0xa0,0xc9,0x6,0x29,0x10 } }
  653. typedef struct _PARTITION_INFORMATION {
  654. LARGE_INTEGER StartingOffset;
  655. LARGE_INTEGER PartitionLength;
  656. DWORD HiddenSectors;
  657. DWORD PartitionNumber;
  658. BYTE PartitionType;
  659. BOOLEAN BootIndicator;
  660. BOOLEAN RecognizedPartition;
  661. BOOLEAN RewritePartition;
  662. } PARTITION_INFORMATION,*PPARTITION_INFORMATION;
  663. typedef struct _SET_PARTITION_INFORMATION {
  664. BYTE PartitionType;
  665. } SET_PARTITION_INFORMATION,*PSET_PARTITION_INFORMATION;
  666. typedef struct _DRIVE_LAYOUT_INFORMATION {
  667. DWORD PartitionCount;
  668. DWORD Signature;
  669. PARTITION_INFORMATION PartitionEntry[1];
  670. } DRIVE_LAYOUT_INFORMATION,*PDRIVE_LAYOUT_INFORMATION;
  671. typedef struct _VERIFY_INFORMATION {
  672. LARGE_INTEGER StartingOffset;
  673. DWORD Length;
  674. } VERIFY_INFORMATION,*PVERIFY_INFORMATION;
  675. typedef struct _REASSIGN_BLOCKS {
  676. WORD Reserved;
  677. WORD Count;
  678. DWORD BlockNumber[1];
  679. } REASSIGN_BLOCKS,*PREASSIGN_BLOCKS;
  680. #include <pshpack1.h>
  681. typedef struct _REASSIGN_BLOCKS_EX {
  682. WORD Reserved;
  683. WORD Count;
  684. LARGE_INTEGER BlockNumber[1];
  685. } REASSIGN_BLOCKS_EX,*PREASSIGN_BLOCKS_EX;
  686. #include <poppack.h>
  687. typedef enum _PARTITION_STYLE {
  688. PARTITION_STYLE_MBR,PARTITION_STYLE_GPT,PARTITION_STYLE_RAW
  689. } PARTITION_STYLE;
  690. typedef struct _PARTITION_INFORMATION_GPT {
  691. GUID PartitionType;
  692. GUID PartitionId;
  693. DWORD64 Attributes;
  694. WCHAR Name [36];
  695. } PARTITION_INFORMATION_GPT,*PPARTITION_INFORMATION_GPT;
  696. #define GPT_ATTRIBUTE_PLATFORM_REQUIRED (0x0000000000000001)
  697. #define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER (0x8000000000000000)
  698. #define GPT_BASIC_DATA_ATTRIBUTE_HIDDEN (0x4000000000000000)
  699. #define GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY (0x2000000000000000)
  700. #define GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY (0x1000000000000000)
  701. typedef struct _PARTITION_INFORMATION_MBR {
  702. BYTE PartitionType;
  703. BOOLEAN BootIndicator;
  704. BOOLEAN RecognizedPartition;
  705. DWORD HiddenSectors;
  706. #if NTDDI_VERSION > NTDDI_WINBLUE
  707. GUID PartitionId;
  708. #endif
  709. } PARTITION_INFORMATION_MBR,*PPARTITION_INFORMATION_MBR;
  710. typedef SET_PARTITION_INFORMATION SET_PARTITION_INFORMATION_MBR;
  711. typedef PARTITION_INFORMATION_GPT SET_PARTITION_INFORMATION_GPT;
  712. typedef struct _SET_PARTITION_INFORMATION_EX {
  713. PARTITION_STYLE PartitionStyle;
  714. __C89_NAMELESS union {
  715. SET_PARTITION_INFORMATION_MBR Mbr;
  716. SET_PARTITION_INFORMATION_GPT Gpt;
  717. } DUMMYUNIONNAME;
  718. } SET_PARTITION_INFORMATION_EX,*PSET_PARTITION_INFORMATION_EX;
  719. typedef struct _CREATE_DISK_GPT {
  720. GUID DiskId;
  721. DWORD MaxPartitionCount;
  722. } CREATE_DISK_GPT,*PCREATE_DISK_GPT;
  723. typedef struct _CREATE_DISK_MBR {
  724. DWORD Signature;
  725. } CREATE_DISK_MBR,*PCREATE_DISK_MBR;
  726. typedef struct _CREATE_DISK {
  727. PARTITION_STYLE PartitionStyle;
  728. __C89_NAMELESS union {
  729. CREATE_DISK_MBR Mbr;
  730. CREATE_DISK_GPT Gpt;
  731. } DUMMYUNIONNAME;
  732. } CREATE_DISK,*PCREATE_DISK;
  733. typedef struct _GET_LENGTH_INFORMATION {
  734. LARGE_INTEGER Length;
  735. } GET_LENGTH_INFORMATION,*PGET_LENGTH_INFORMATION;
  736. typedef struct _PARTITION_INFORMATION_EX {
  737. PARTITION_STYLE PartitionStyle;
  738. LARGE_INTEGER StartingOffset;
  739. LARGE_INTEGER PartitionLength;
  740. DWORD PartitionNumber;
  741. BOOLEAN RewritePartition;
  742. #if NTDDI_VERSION >= NTDDI_WIN10_RS3
  743. BOOLEAN IsServicePartition;
  744. #endif
  745. __C89_NAMELESS union {
  746. PARTITION_INFORMATION_MBR Mbr;
  747. PARTITION_INFORMATION_GPT Gpt;
  748. } DUMMYUNIONNAME;
  749. } PARTITION_INFORMATION_EX,*PPARTITION_INFORMATION_EX;
  750. typedef struct _DRIVE_LAYOUT_INFORMATION_GPT {
  751. GUID DiskId;
  752. LARGE_INTEGER StartingUsableOffset;
  753. LARGE_INTEGER UsableLength;
  754. DWORD MaxPartitionCount;
  755. } DRIVE_LAYOUT_INFORMATION_GPT,*PDRIVE_LAYOUT_INFORMATION_GPT;
  756. typedef struct _DRIVE_LAYOUT_INFORMATION_MBR {
  757. DWORD Signature;
  758. } DRIVE_LAYOUT_INFORMATION_MBR,*PDRIVE_LAYOUT_INFORMATION_MBR;
  759. typedef struct _DRIVE_LAYOUT_INFORMATION_EX {
  760. DWORD PartitionStyle;
  761. DWORD PartitionCount;
  762. __C89_NAMELESS union {
  763. DRIVE_LAYOUT_INFORMATION_MBR Mbr;
  764. DRIVE_LAYOUT_INFORMATION_GPT Gpt;
  765. } DUMMYUNIONNAME;
  766. PARTITION_INFORMATION_EX PartitionEntry[1];
  767. } DRIVE_LAYOUT_INFORMATION_EX,*PDRIVE_LAYOUT_INFORMATION_EX;
  768. typedef enum _DETECTION_TYPE {
  769. DetectNone,DetectInt13,DetectExInt13
  770. } DETECTION_TYPE;
  771. typedef struct _DISK_INT13_INFO {
  772. WORD DriveSelect;
  773. DWORD MaxCylinders;
  774. WORD SectorsPerTrack;
  775. WORD MaxHeads;
  776. WORD NumberDrives;
  777. } DISK_INT13_INFO,*PDISK_INT13_INFO;
  778. typedef struct _DISK_EX_INT13_INFO {
  779. WORD ExBufferSize;
  780. WORD ExFlags;
  781. DWORD ExCylinders;
  782. DWORD ExHeads;
  783. DWORD ExSectorsPerTrack;
  784. DWORD64 ExSectorsPerDrive;
  785. WORD ExSectorSize;
  786. WORD ExReserved;
  787. } DISK_EX_INT13_INFO,*PDISK_EX_INT13_INFO;
  788. typedef struct _DISK_DETECTION_INFO {
  789. DWORD SizeOfDetectInfo;
  790. DETECTION_TYPE DetectionType;
  791. __C89_NAMELESS union {
  792. __C89_NAMELESS struct {
  793. DISK_INT13_INFO Int13;
  794. DISK_EX_INT13_INFO ExInt13;
  795. } DUMMYSTRUCTNAME;
  796. } DUMMYUNIONNAME;
  797. } DISK_DETECTION_INFO,*PDISK_DETECTION_INFO;
  798. typedef struct _DISK_PARTITION_INFO {
  799. DWORD SizeOfPartitionInfo;
  800. PARTITION_STYLE PartitionStyle;
  801. __C89_NAMELESS union {
  802. struct {
  803. DWORD Signature;
  804. DWORD CheckSum;
  805. } Mbr;
  806. struct {
  807. GUID DiskId;
  808. } Gpt;
  809. } DUMMYUNIONNAME;
  810. } DISK_PARTITION_INFO,*PDISK_PARTITION_INFO;
  811. #define DiskGeometryGetPartition(Geometry) ((PDISK_PARTITION_INFO)((Geometry)->Data))
  812. #define DiskGeometryGetDetect(Geometry) ((PDISK_DETECTION_INFO)(((DWORD_PTR)DiskGeometryGetPartition(Geometry)+ DiskGeometryGetPartition(Geometry)->SizeOfPartitionInfo)))
  813. typedef struct _DISK_GEOMETRY_EX {
  814. DISK_GEOMETRY Geometry;
  815. LARGE_INTEGER DiskSize;
  816. BYTE Data[1];
  817. } DISK_GEOMETRY_EX,*PDISK_GEOMETRY_EX;
  818. typedef struct _DISK_CONTROLLER_NUMBER {
  819. DWORD ControllerNumber;
  820. DWORD DiskNumber;
  821. } DISK_CONTROLLER_NUMBER,*PDISK_CONTROLLER_NUMBER;
  822. typedef enum {
  823. EqualPriority,KeepPrefetchedData,KeepReadData
  824. } DISK_CACHE_RETENTION_PRIORITY;
  825. typedef struct _DISK_CACHE_INFORMATION {
  826. BOOLEAN ParametersSavable;
  827. BOOLEAN ReadCacheEnabled;
  828. BOOLEAN WriteCacheEnabled;
  829. DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority;
  830. DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority;
  831. WORD DisablePrefetchTransferLength;
  832. BOOLEAN PrefetchScalar;
  833. __C89_NAMELESS union {
  834. struct {
  835. WORD Minimum;
  836. WORD Maximum;
  837. WORD MaximumBlocks;
  838. } ScalarPrefetch;
  839. struct {
  840. WORD Minimum;
  841. WORD Maximum;
  842. } BlockPrefetch;
  843. } DUMMYUNIONNAME;
  844. } DISK_CACHE_INFORMATION,*PDISK_CACHE_INFORMATION;
  845. typedef struct _DISK_GROW_PARTITION {
  846. DWORD PartitionNumber;
  847. LARGE_INTEGER BytesToGrow;
  848. } DISK_GROW_PARTITION,*PDISK_GROW_PARTITION;
  849. #define HIST_NO_OF_BUCKETS 24
  850. typedef struct _HISTOGRAM_BUCKET {
  851. DWORD Reads;
  852. DWORD Writes;
  853. } HISTOGRAM_BUCKET,*PHISTOGRAM_BUCKET;
  854. #define HISTOGRAM_BUCKET_SIZE sizeof(HISTOGRAM_BUCKET)
  855. typedef struct _DISK_HISTOGRAM {
  856. LARGE_INTEGER DiskSize;
  857. LARGE_INTEGER Start;
  858. LARGE_INTEGER End;
  859. LARGE_INTEGER Average;
  860. LARGE_INTEGER AverageRead;
  861. LARGE_INTEGER AverageWrite;
  862. DWORD Granularity;
  863. DWORD Size;
  864. DWORD ReadCount;
  865. DWORD WriteCount;
  866. PHISTOGRAM_BUCKET Histogram;
  867. } DISK_HISTOGRAM,*PDISK_HISTOGRAM;
  868. #define DISK_HISTOGRAM_SIZE sizeof(DISK_HISTOGRAM)
  869. typedef struct _DISK_PERFORMANCE {
  870. LARGE_INTEGER BytesRead;
  871. LARGE_INTEGER BytesWritten;
  872. LARGE_INTEGER ReadTime;
  873. LARGE_INTEGER WriteTime;
  874. LARGE_INTEGER IdleTime;
  875. DWORD ReadCount;
  876. DWORD WriteCount;
  877. DWORD QueueDepth;
  878. DWORD SplitCount;
  879. LARGE_INTEGER QueryTime;
  880. DWORD StorageDeviceNumber;
  881. WCHAR StorageManagerName[8];
  882. } DISK_PERFORMANCE,*PDISK_PERFORMANCE;
  883. typedef struct _DISK_RECORD {
  884. LARGE_INTEGER ByteOffset;
  885. LARGE_INTEGER StartTime;
  886. LARGE_INTEGER EndTime;
  887. PVOID VirtualAddress;
  888. DWORD NumberOfBytes;
  889. BYTE DeviceNumber;
  890. BOOLEAN ReadRequest;
  891. } DISK_RECORD,*PDISK_RECORD;
  892. typedef struct _DISK_LOGGING {
  893. BYTE Function;
  894. PVOID BufferAddress;
  895. DWORD BufferSize;
  896. } DISK_LOGGING,*PDISK_LOGGING;
  897. #define DISK_LOGGING_START 0
  898. #define DISK_LOGGING_STOP 1
  899. #define DISK_LOGGING_DUMP 2
  900. #define DISK_BINNING 3
  901. typedef enum _BIN_TYPES {
  902. RequestSize,RequestLocation
  903. } BIN_TYPES;
  904. typedef struct _BIN_RANGE {
  905. LARGE_INTEGER StartValue;
  906. LARGE_INTEGER Length;
  907. } BIN_RANGE,*PBIN_RANGE;
  908. typedef struct _PERF_BIN {
  909. DWORD NumberOfBins;
  910. DWORD TypeOfBin;
  911. BIN_RANGE BinsRanges[1];
  912. } PERF_BIN,*PPERF_BIN;
  913. typedef struct _BIN_COUNT {
  914. BIN_RANGE BinRange;
  915. DWORD BinCount;
  916. } BIN_COUNT,*PBIN_COUNT;
  917. typedef struct _BIN_RESULTS {
  918. DWORD NumberOfBins;
  919. BIN_COUNT BinCounts[1];
  920. } BIN_RESULTS,*PBIN_RESULTS;
  921. #include <pshpack1.h>
  922. typedef struct _GETVERSIONINPARAMS {
  923. BYTE bVersion;
  924. BYTE bRevision;
  925. BYTE bReserved;
  926. BYTE bIDEDeviceMap;
  927. DWORD fCapabilities;
  928. DWORD dwReserved[4];
  929. } GETVERSIONINPARAMS,*PGETVERSIONINPARAMS,*LPGETVERSIONINPARAMS;
  930. #include <poppack.h>
  931. #define CAP_ATA_ID_CMD 1
  932. #define CAP_ATAPI_ID_CMD 2
  933. #define CAP_SMART_CMD 4
  934. #include <pshpack1.h>
  935. typedef struct _IDEREGS {
  936. BYTE bFeaturesReg;
  937. BYTE bSectorCountReg;
  938. BYTE bSectorNumberReg;
  939. BYTE bCylLowReg;
  940. BYTE bCylHighReg;
  941. BYTE bDriveHeadReg;
  942. BYTE bCommandReg;
  943. BYTE bReserved;
  944. } IDEREGS,*PIDEREGS,*LPIDEREGS;
  945. #include <poppack.h>
  946. #define ATAPI_ID_CMD 0xA1
  947. #define ID_CMD 0xEC
  948. #define SMART_CMD 0xB0
  949. #define SMART_CYL_LOW 0x4F
  950. #define SMART_CYL_HI 0xC2
  951. #include <pshpack1.h>
  952. typedef struct _SENDCMDINPARAMS {
  953. DWORD cBufferSize;
  954. IDEREGS irDriveRegs;
  955. BYTE bDriveNumber;
  956. BYTE bReserved[3];
  957. DWORD dwReserved[4];
  958. BYTE bBuffer[1];
  959. } SENDCMDINPARAMS,*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS;
  960. #include <poppack.h>
  961. #include <pshpack1.h>
  962. typedef struct _DRIVERSTATUS {
  963. BYTE bDriverError;
  964. BYTE bIDEError;
  965. BYTE bReserved[2];
  966. DWORD dwReserved[2];
  967. } DRIVERSTATUS,*PDRIVERSTATUS,*LPDRIVERSTATUS;
  968. #include <poppack.h>
  969. #define SMART_NO_ERROR 0
  970. #define SMART_IDE_ERROR 1
  971. #define SMART_INVALID_FLAG 2
  972. #define SMART_INVALID_COMMAND 3
  973. #define SMART_INVALID_BUFFER 4
  974. #define SMART_INVALID_DRIVE 5
  975. #define SMART_INVALID_IOCTL 6
  976. #define SMART_ERROR_NO_MEM 7
  977. #define SMART_INVALID_REGISTER 8
  978. #define SMART_NOT_SUPPORTED 9
  979. #define SMART_NO_IDE_DEVICE 10
  980. #define SMART_OFFLINE_ROUTINE_OFFLINE 0
  981. #define SMART_SHORT_SELFTEST_OFFLINE 1
  982. #define SMART_EXTENDED_SELFTEST_OFFLINE 2
  983. #define SMART_ABORT_OFFLINE_SELFTEST 127
  984. #define SMART_SHORT_SELFTEST_CAPTIVE 129
  985. #define SMART_EXTENDED_SELFTEST_CAPTIVE 130
  986. #include <pshpack1.h>
  987. typedef struct _SENDCMDOUTPARAMS {
  988. DWORD cBufferSize;
  989. DRIVERSTATUS DriverStatus;
  990. BYTE bBuffer[1];
  991. } SENDCMDOUTPARAMS,*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS;
  992. #include <poppack.h>
  993. #define READ_ATTRIBUTE_BUFFER_SIZE 512
  994. #define IDENTIFY_BUFFER_SIZE 512
  995. #define READ_THRESHOLD_BUFFER_SIZE 512
  996. #define SMART_LOG_SECTOR_SIZE 512
  997. #define READ_ATTRIBUTES 0xD0
  998. #define READ_THRESHOLDS 0xD1
  999. #define ENABLE_DISABLE_AUTOSAVE 0xD2
  1000. #define SAVE_ATTRIBUTE_VALUES 0xD3
  1001. #define EXECUTE_OFFLINE_DIAGS 0xD4
  1002. #define SMART_READ_LOG 0xD5
  1003. #define SMART_WRITE_LOG 0xd6
  1004. #define ENABLE_SMART 0xD8
  1005. #define DISABLE_SMART 0xD9
  1006. #define RETURN_SMART_STATUS 0xDA
  1007. #define ENABLE_DISABLE_AUTO_OFFLINE 0xDB
  1008. #endif /* _NTDDDISK_H_ */
  1009. #define IOCTL_CHANGER_BASE FILE_DEVICE_CHANGER
  1010. #define IOCTL_CHANGER_GET_PARAMETERS CTL_CODE(IOCTL_CHANGER_BASE,0x0000,METHOD_BUFFERED,FILE_READ_ACCESS)
  1011. #define IOCTL_CHANGER_GET_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0001,METHOD_BUFFERED,FILE_READ_ACCESS)
  1012. #define IOCTL_CHANGER_GET_PRODUCT_DATA CTL_CODE(IOCTL_CHANGER_BASE,0x0002,METHOD_BUFFERED,FILE_READ_ACCESS)
  1013. #define IOCTL_CHANGER_SET_ACCESS CTL_CODE(IOCTL_CHANGER_BASE,0x0004,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  1014. #define IOCTL_CHANGER_GET_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0005,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  1015. #define IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS CTL_CODE(IOCTL_CHANGER_BASE,0x0006,METHOD_BUFFERED,FILE_READ_ACCESS)
  1016. #define IOCTL_CHANGER_SET_POSITION CTL_CODE(IOCTL_CHANGER_BASE,0x0007,METHOD_BUFFERED,FILE_READ_ACCESS)
  1017. #define IOCTL_CHANGER_EXCHANGE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0008,METHOD_BUFFERED,FILE_READ_ACCESS)
  1018. #define IOCTL_CHANGER_MOVE_MEDIUM CTL_CODE(IOCTL_CHANGER_BASE,0x0009,METHOD_BUFFERED,FILE_READ_ACCESS)
  1019. #define IOCTL_CHANGER_REINITIALIZE_TRANSPORT CTL_CODE(IOCTL_CHANGER_BASE,0x000A,METHOD_BUFFERED,FILE_READ_ACCESS)
  1020. #define IOCTL_CHANGER_QUERY_VOLUME_TAGS CTL_CODE(IOCTL_CHANGER_BASE,0x000B,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  1021. #define MAX_VOLUME_ID_SIZE 36
  1022. #define MAX_VOLUME_TEMPLATE_SIZE 40
  1023. #define VENDOR_ID_LENGTH 8
  1024. #define PRODUCT_ID_LENGTH 16
  1025. #define REVISION_LENGTH 4
  1026. #define SERIAL_NUMBER_LENGTH 32
  1027. typedef enum _ELEMENT_TYPE {
  1028. AllElements,ChangerTransport,ChangerSlot,ChangerIEPort,ChangerDrive,ChangerDoor,ChangerKeypad,ChangerMaxElement
  1029. } ELEMENT_TYPE,*PELEMENT_TYPE;
  1030. typedef struct _CHANGER_ELEMENT {
  1031. ELEMENT_TYPE ElementType;
  1032. DWORD ElementAddress;
  1033. } CHANGER_ELEMENT,*PCHANGER_ELEMENT;
  1034. typedef struct _CHANGER_ELEMENT_LIST {
  1035. CHANGER_ELEMENT Element;
  1036. DWORD NumberOfElements;
  1037. } CHANGER_ELEMENT_LIST ,*PCHANGER_ELEMENT_LIST;
  1038. #define CHANGER_BAR_CODE_SCANNER_INSTALLED 0x00000001
  1039. #define CHANGER_INIT_ELEM_STAT_WITH_RANGE 0x00000002
  1040. #define CHANGER_CLOSE_IEPORT 0x00000004
  1041. #define CHANGER_OPEN_IEPORT 0x00000008
  1042. #define CHANGER_STATUS_NON_VOLATILE 0x00000010
  1043. #define CHANGER_EXCHANGE_MEDIA 0x00000020
  1044. #define CHANGER_CLEANER_SLOT 0x00000040
  1045. #define CHANGER_LOCK_UNLOCK 0x00000080
  1046. #define CHANGER_CARTRIDGE_MAGAZINE 0x00000100
  1047. #define CHANGER_MEDIUM_FLIP 0x00000200
  1048. #define CHANGER_POSITION_TO_ELEMENT 0x00000400
  1049. #define CHANGER_REPORT_IEPORT_STATE 0x00000800
  1050. #define CHANGER_STORAGE_DRIVE 0x00001000
  1051. #define CHANGER_STORAGE_IEPORT 0x00002000
  1052. #define CHANGER_STORAGE_SLOT 0x00004000
  1053. #define CHANGER_STORAGE_TRANSPORT 0x00008000
  1054. #define CHANGER_DRIVE_CLEANING_REQUIRED 0x00010000
  1055. #define CHANGER_PREDISMOUNT_EJECT_REQUIRED 0x00020000
  1056. #define CHANGER_CLEANER_ACCESS_NOT_VALID 0x00040000
  1057. #define CHANGER_PREMOUNT_EJECT_REQUIRED 0x00080000
  1058. #define CHANGER_VOLUME_IDENTIFICATION 0x00100000
  1059. #define CHANGER_VOLUME_SEARCH 0x00200000
  1060. #define CHANGER_VOLUME_ASSERT 0x00400000
  1061. #define CHANGER_VOLUME_REPLACE 0x00800000
  1062. #define CHANGER_VOLUME_UNDEFINE 0x01000000
  1063. #define CHANGER_SERIAL_NUMBER_VALID 0x04000000
  1064. #define CHANGER_DEVICE_REINITIALIZE_CAPABLE 0x08000000
  1065. #define CHANGER_KEYPAD_ENABLE_DISABLE 0x10000000
  1066. #define CHANGER_DRIVE_EMPTY_ON_DOOR_ACCESS 0x20000000
  1067. #define CHANGER_RESERVED_BIT 0x80000000
  1068. #define CHANGER_PREDISMOUNT_ALIGN_TO_SLOT 0x80000001
  1069. #define CHANGER_PREDISMOUNT_ALIGN_TO_DRIVE 0x80000002
  1070. #define CHANGER_CLEANER_AUTODISMOUNT 0x80000004
  1071. #define CHANGER_TRUE_EXCHANGE_CAPABLE 0x80000008
  1072. #define CHANGER_SLOTS_USE_TRAYS 0x80000010
  1073. #define CHANGER_RTN_MEDIA_TO_ORIGINAL_ADDR 0x80000020
  1074. #define CHANGER_CLEANER_OPS_NOT_SUPPORTED 0x80000040
  1075. #define CHANGER_IEPORT_USER_CONTROL_OPEN 0x80000080
  1076. #define CHANGER_IEPORT_USER_CONTROL_CLOSE 0x80000100
  1077. #define CHANGER_MOVE_EXTENDS_IEPORT 0x80000200
  1078. #define CHANGER_MOVE_RETRACTS_IEPORT 0x80000400
  1079. #define CHANGER_TO_TRANSPORT 0x01
  1080. #define CHANGER_TO_SLOT 0x02
  1081. #define CHANGER_TO_IEPORT 0x04
  1082. #define CHANGER_TO_DRIVE 0x08
  1083. #define LOCK_UNLOCK_IEPORT 0x01
  1084. #define LOCK_UNLOCK_DOOR 0x02
  1085. #define LOCK_UNLOCK_KEYPAD 0x04
  1086. typedef struct _GET_CHANGER_PARAMETERS {
  1087. DWORD Size;
  1088. WORD NumberTransportElements;
  1089. WORD NumberStorageElements;
  1090. WORD NumberCleanerSlots;
  1091. WORD NumberIEElements;
  1092. WORD NumberDataTransferElements;
  1093. WORD NumberOfDoors;
  1094. WORD FirstSlotNumber;
  1095. WORD FirstDriveNumber;
  1096. WORD FirstTransportNumber;
  1097. WORD FirstIEPortNumber;
  1098. WORD FirstCleanerSlotAddress;
  1099. WORD MagazineSize;
  1100. DWORD DriveCleanTimeout;
  1101. DWORD Features0;
  1102. DWORD Features1;
  1103. BYTE MoveFromTransport;
  1104. BYTE MoveFromSlot;
  1105. BYTE MoveFromIePort;
  1106. BYTE MoveFromDrive;
  1107. BYTE ExchangeFromTransport;
  1108. BYTE ExchangeFromSlot;
  1109. BYTE ExchangeFromIePort;
  1110. BYTE ExchangeFromDrive;
  1111. BYTE LockUnlockCapabilities;
  1112. BYTE PositionCapabilities;
  1113. BYTE Reserved1[2];
  1114. DWORD Reserved2[2];
  1115. } GET_CHANGER_PARAMETERS,*PGET_CHANGER_PARAMETERS;
  1116. typedef struct _CHANGER_PRODUCT_DATA {
  1117. BYTE VendorId[VENDOR_ID_LENGTH];
  1118. BYTE ProductId[PRODUCT_ID_LENGTH];
  1119. BYTE Revision[REVISION_LENGTH];
  1120. BYTE SerialNumber[SERIAL_NUMBER_LENGTH];
  1121. BYTE DeviceType;
  1122. } CHANGER_PRODUCT_DATA,*PCHANGER_PRODUCT_DATA;
  1123. #define LOCK_ELEMENT 0
  1124. #define UNLOCK_ELEMENT 1
  1125. #define EXTEND_IEPORT 2
  1126. #define RETRACT_IEPORT 3
  1127. typedef struct _CHANGER_SET_ACCESS {
  1128. CHANGER_ELEMENT Element;
  1129. DWORD Control;
  1130. } CHANGER_SET_ACCESS,*PCHANGER_SET_ACCESS;
  1131. typedef struct _CHANGER_READ_ELEMENT_STATUS {
  1132. CHANGER_ELEMENT_LIST ElementList;
  1133. BOOLEAN VolumeTagInfo;
  1134. } CHANGER_READ_ELEMENT_STATUS,*PCHANGER_READ_ELEMENT_STATUS;
  1135. typedef struct _CHANGER_ELEMENT_STATUS {
  1136. CHANGER_ELEMENT Element;
  1137. CHANGER_ELEMENT SrcElementAddress;
  1138. DWORD Flags;
  1139. DWORD ExceptionCode;
  1140. BYTE TargetId;
  1141. BYTE Lun;
  1142. WORD Reserved;
  1143. BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
  1144. BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE];
  1145. } CHANGER_ELEMENT_STATUS,*PCHANGER_ELEMENT_STATUS;
  1146. typedef struct _CHANGER_ELEMENT_STATUS_EX {
  1147. CHANGER_ELEMENT Element;
  1148. CHANGER_ELEMENT SrcElementAddress;
  1149. DWORD Flags;
  1150. DWORD ExceptionCode;
  1151. BYTE TargetId;
  1152. BYTE Lun;
  1153. WORD Reserved;
  1154. BYTE PrimaryVolumeID[MAX_VOLUME_ID_SIZE];
  1155. BYTE AlternateVolumeID[MAX_VOLUME_ID_SIZE];
  1156. BYTE VendorIdentification[VENDOR_ID_LENGTH];
  1157. BYTE ProductIdentification[PRODUCT_ID_LENGTH];
  1158. BYTE SerialNumber[SERIAL_NUMBER_LENGTH];
  1159. } CHANGER_ELEMENT_STATUS_EX,*PCHANGER_ELEMENT_STATUS_EX;
  1160. #define ELEMENT_STATUS_FULL 0x00000001
  1161. #define ELEMENT_STATUS_IMPEXP 0x00000002
  1162. #define ELEMENT_STATUS_EXCEPT 0x00000004
  1163. #define ELEMENT_STATUS_ACCESS 0x00000008
  1164. #define ELEMENT_STATUS_EXENAB 0x00000010
  1165. #define ELEMENT_STATUS_INENAB 0x00000020
  1166. #define ELEMENT_STATUS_PRODUCT_DATA 0x00000040
  1167. #define ELEMENT_STATUS_LUN_VALID 0x00001000
  1168. #define ELEMENT_STATUS_ID_VALID 0x00002000
  1169. #define ELEMENT_STATUS_NOT_BUS 0x00008000
  1170. #define ELEMENT_STATUS_INVERT 0x00400000
  1171. #define ELEMENT_STATUS_SVALID 0x00800000
  1172. #define ELEMENT_STATUS_PVOLTAG 0x10000000
  1173. #define ELEMENT_STATUS_AVOLTAG 0x20000000
  1174. #define ERROR_LABEL_UNREADABLE 0x00000001
  1175. #define ERROR_LABEL_QUESTIONABLE 0x00000002
  1176. #define ERROR_SLOT_NOT_PRESENT 0x00000004
  1177. #define ERROR_DRIVE_NOT_INSTALLED 0x00000008
  1178. #define ERROR_TRAY_MALFUNCTION 0x00000010
  1179. #define ERROR_INIT_STATUS_NEEDED 0x00000011
  1180. #define ERROR_UNHANDLED_ERROR 0xFFFFFFFF
  1181. typedef struct _CHANGER_INITIALIZE_ELEMENT_STATUS {
  1182. CHANGER_ELEMENT_LIST ElementList;
  1183. BOOLEAN BarCodeScan;
  1184. } CHANGER_INITIALIZE_ELEMENT_STATUS,*PCHANGER_INITIALIZE_ELEMENT_STATUS;
  1185. typedef struct _CHANGER_SET_POSITION {
  1186. CHANGER_ELEMENT Transport;
  1187. CHANGER_ELEMENT Destination;
  1188. BOOLEAN Flip;
  1189. } CHANGER_SET_POSITION,*PCHANGER_SET_POSITION;
  1190. typedef struct _CHANGER_EXCHANGE_MEDIUM {
  1191. CHANGER_ELEMENT Transport;
  1192. CHANGER_ELEMENT Source;
  1193. CHANGER_ELEMENT Destination1;
  1194. CHANGER_ELEMENT Destination2;
  1195. BOOLEAN Flip1;
  1196. BOOLEAN Flip2;
  1197. } CHANGER_EXCHANGE_MEDIUM,*PCHANGER_EXCHANGE_MEDIUM;
  1198. typedef struct _CHANGER_MOVE_MEDIUM {
  1199. CHANGER_ELEMENT Transport;
  1200. CHANGER_ELEMENT Source;
  1201. CHANGER_ELEMENT Destination;
  1202. BOOLEAN Flip;
  1203. } CHANGER_MOVE_MEDIUM,*PCHANGER_MOVE_MEDIUM;
  1204. typedef struct _CHANGER_SEND_VOLUME_TAG_INFORMATION {
  1205. CHANGER_ELEMENT StartingElement;
  1206. DWORD ActionCode;
  1207. BYTE VolumeIDTemplate[MAX_VOLUME_TEMPLATE_SIZE];
  1208. } CHANGER_SEND_VOLUME_TAG_INFORMATION,*PCHANGER_SEND_VOLUME_TAG_INFORMATION;
  1209. typedef struct _READ_ELEMENT_ADDRESS_INFO {
  1210. DWORD NumberOfElements;
  1211. CHANGER_ELEMENT_STATUS ElementStatus[1];
  1212. } READ_ELEMENT_ADDRESS_INFO,*PREAD_ELEMENT_ADDRESS_INFO;
  1213. #define SEARCH_ALL 0x0
  1214. #define SEARCH_PRIMARY 0x1
  1215. #define SEARCH_ALTERNATE 0x2
  1216. #define SEARCH_ALL_NO_SEQ 0x4
  1217. #define SEARCH_PRI_NO_SEQ 0x5
  1218. #define SEARCH_ALT_NO_SEQ 0x6
  1219. #define ASSERT_PRIMARY 0x8
  1220. #define ASSERT_ALTERNATE 0x9
  1221. #define REPLACE_PRIMARY 0xA
  1222. #define REPLACE_ALTERNATE 0xB
  1223. #define UNDEFINE_PRIMARY 0xC
  1224. #define UNDEFINE_ALTERNATE 0xD
  1225. typedef enum _CHANGER_DEVICE_PROBLEM_TYPE {
  1226. DeviceProblemNone,DeviceProblemHardware,DeviceProblemCHMError,DeviceProblemDoorOpen,DeviceProblemCalibrationError,DeviceProblemTargetFailure,
  1227. DeviceProblemCHMMoveError,DeviceProblemCHMZeroError,DeviceProblemCartridgeInsertError,DeviceProblemPositionError,DeviceProblemSensorError,
  1228. DeviceProblemCartridgeEjectError,DeviceProblemGripperError,DeviceProblemDriveError
  1229. } CHANGER_DEVICE_PROBLEM_TYPE,*PCHANGER_DEVICE_PROBLEM_TYPE;
  1230. #define IOCTL_SERIAL_LSRMST_INSERT CTL_CODE(FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1231. #define IOCTL_SERENUM_EXPOSE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1232. #define IOCTL_SERENUM_REMOVE_HARDWARE CTL_CODE(FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1233. #define IOCTL_SERENUM_PORT_DESC CTL_CODE(FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1234. #define IOCTL_SERENUM_GET_PORT_NAME CTL_CODE(FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1235. #define SERIAL_LSRMST_ESCAPE ((BYTE)0x00)
  1236. #define SERIAL_LSRMST_LSR_DATA ((BYTE)0x01)
  1237. #define SERIAL_LSRMST_LSR_NODATA ((BYTE)0x02)
  1238. #define SERIAL_LSRMST_MST ((BYTE)0x03)
  1239. #define SERIAL_IOC_FCR_FIFO_ENABLE ((DWORD)0x00000001)
  1240. #define SERIAL_IOC_FCR_RCVR_RESET ((DWORD)0x00000002)
  1241. #define SERIAL_IOC_FCR_XMIT_RESET ((DWORD)0x00000004)
  1242. #define SERIAL_IOC_FCR_DMA_MODE ((DWORD)0x00000008)
  1243. #define SERIAL_IOC_FCR_RES1 ((DWORD)0x00000010)
  1244. #define SERIAL_IOC_FCR_RES2 ((DWORD)0x00000020)
  1245. #define SERIAL_IOC_FCR_RCVR_TRIGGER_LSB ((DWORD)0x00000040)
  1246. #define SERIAL_IOC_FCR_RCVR_TRIGGER_MSB ((DWORD)0x00000080)
  1247. #define SERIAL_IOC_MCR_DTR ((DWORD)0x00000001)
  1248. #define SERIAL_IOC_MCR_RTS ((DWORD)0x00000002)
  1249. #define SERIAL_IOC_MCR_OUT1 ((DWORD)0x00000004)
  1250. #define SERIAL_IOC_MCR_OUT2 ((DWORD)0x00000008)
  1251. #define SERIAL_IOC_MCR_LOOP ((DWORD)0x00000010)
  1252. #ifndef _FILESYSTEMFSCTL_
  1253. #define _FILESYSTEMFSCTL_
  1254. #define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,0,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1255. #define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,1,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1256. #define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,2,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1257. #define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,3,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1258. #define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,4,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1259. #define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,5,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1260. #define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,6,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1261. #define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,7,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1262. #define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,8,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1263. #define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1264. #define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,11,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1265. #define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1266. #define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,14,METHOD_NEITHER,FILE_ANY_ACCESS)
  1267. #define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1268. #define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA)
  1269. #define FSCTL_SET_BOOTLOADER_ACCESSED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,19,METHOD_NEITHER,FILE_ANY_ACCESS)
  1270. #define FSCTL_MARK_AS_SYSTEM_HIVE FSCTL_SET_BOOTLOADER_ACCESSED
  1271. #define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,20,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1272. #define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,21,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1273. #define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM,22,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1274. #define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,23,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1275. #define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1276. #define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1277. #define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1278. #define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27,METHOD_NEITHER,FILE_ANY_ACCESS)
  1279. #define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28,METHOD_NEITHER,FILE_ANY_ACCESS)
  1280. #define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1281. #define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,30,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1282. #define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32,METHOD_NEITHER,FILE_ANY_ACCESS)
  1283. #define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,35,METHOD_NEITHER,FILE_ANY_ACCESS)
  1284. #define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,38,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1285. #define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,39,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1286. #define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,40,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1287. #define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,41,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1288. #define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,42,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1289. #define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM,43,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1290. #define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_ANY_ACCESS)
  1291. #define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,45,METHOD_NEITHER,FILE_READ_DATA)
  1292. #define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,46,METHOD_NEITHER,FILE_ANY_ACCESS)
  1293. #define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,47,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1294. #define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,48,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1295. #define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,49,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1296. #define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,50,METHOD_BUFFERED,FILE_WRITE_DATA)
  1297. #define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,51,METHOD_NEITHER,FILE_READ_DATA)
  1298. #define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,52,METHOD_BUFFERED,FILE_WRITE_DATA)
  1299. #define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,53,METHOD_NEITHER,FILE_ANY_ACCESS)
  1300. #define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,54,METHOD_NEITHER,FILE_ANY_ACCESS)
  1301. #define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,55,METHOD_NEITHER,FILE_SPECIAL_ACCESS)
  1302. #define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,56,METHOD_NEITHER,FILE_SPECIAL_ACCESS)
  1303. #define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,57,METHOD_NEITHER,FILE_ANY_ACCESS)
  1304. #define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,58,METHOD_NEITHER,FILE_ANY_ACCESS)
  1305. #define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,59,METHOD_NEITHER,FILE_ANY_ACCESS)
  1306. #define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1307. #define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,61,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1308. #define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM,62,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1309. #define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,63,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1310. #define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,64,METHOD_BUFFERED,FILE_ANY_ACCESS)
  1311. #define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,65,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA)
  1312. #define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM,66,METHOD_BUFFERED,FILE_READ_DATA | FILE_WRITE_DATA)
  1313. #define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,68,METHOD_NEITHER,FILE_READ_DATA | FILE_WRITE_DATA)
  1314. #define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,69,METHOD_NEITHER,FILE_ANY_ACCESS)
  1315. #define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM,71,METHOD_OUT_DIRECT,FILE_READ_DATA)
  1316. #define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM,72,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  1317. typedef struct _PATHNAME_BUFFER {
  1318. DWORD PathNameLength;
  1319. WCHAR Name[1];
  1320. } PATHNAME_BUFFER,*PPATHNAME_BUFFER;
  1321. typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
  1322. BYTE First0x24BytesOfBootSector[0x24];
  1323. } FSCTL_QUERY_FAT_BPB_BUFFER,*PFSCTL_QUERY_FAT_BPB_BUFFER;
  1324. typedef struct {
  1325. LARGE_INTEGER VolumeSerialNumber;
  1326. LARGE_INTEGER NumberSectors;
  1327. LARGE_INTEGER TotalClusters;
  1328. LARGE_INTEGER FreeClusters;
  1329. LARGE_INTEGER TotalReserved;
  1330. DWORD BytesPerSector;
  1331. DWORD BytesPerCluster;
  1332. DWORD BytesPerFileRecordSegment;
  1333. DWORD ClustersPerFileRecordSegment;
  1334. LARGE_INTEGER MftValidDataLength;
  1335. LARGE_INTEGER MftStartLcn;
  1336. LARGE_INTEGER Mft2StartLcn;
  1337. LARGE_INTEGER MftZoneStart;
  1338. LARGE_INTEGER MftZoneEnd;
  1339. } NTFS_VOLUME_DATA_BUFFER,*PNTFS_VOLUME_DATA_BUFFER;
  1340. typedef struct {
  1341. DWORD ByteCount;
  1342. WORD MajorVersion;
  1343. WORD MinorVersion;
  1344. } NTFS_EXTENDED_VOLUME_DATA,*PNTFS_EXTENDED_VOLUME_DATA;
  1345. typedef struct {
  1346. LARGE_INTEGER StartingLcn;
  1347. } STARTING_LCN_INPUT_BUFFER,*PSTARTING_LCN_INPUT_BUFFER;
  1348. typedef struct {
  1349. LARGE_INTEGER StartingLcn;
  1350. LARGE_INTEGER BitmapSize;
  1351. BYTE Buffer[1];
  1352. } VOLUME_BITMAP_BUFFER,*PVOLUME_BITMAP_BUFFER;
  1353. typedef struct {
  1354. LARGE_INTEGER StartingVcn;
  1355. } STARTING_VCN_INPUT_BUFFER,*PSTARTING_VCN_INPUT_BUFFER;
  1356. typedef struct RETRIEVAL_POINTERS_BUFFER {
  1357. DWORD ExtentCount;
  1358. LARGE_INTEGER StartingVcn;
  1359. struct {
  1360. LARGE_INTEGER NextVcn;
  1361. LARGE_INTEGER Lcn;
  1362. } Extents[1];
  1363. } RETRIEVAL_POINTERS_BUFFER,*PRETRIEVAL_POINTERS_BUFFER;
  1364. typedef struct {
  1365. LARGE_INTEGER FileReferenceNumber;
  1366. } NTFS_FILE_RECORD_INPUT_BUFFER,*PNTFS_FILE_RECORD_INPUT_BUFFER;
  1367. typedef struct {
  1368. LARGE_INTEGER FileReferenceNumber;
  1369. DWORD FileRecordLength;
  1370. BYTE FileRecordBuffer[1];
  1371. } NTFS_FILE_RECORD_OUTPUT_BUFFER,*PNTFS_FILE_RECORD_OUTPUT_BUFFER;
  1372. typedef struct {
  1373. HANDLE FileHandle;
  1374. LARGE_INTEGER StartingVcn;
  1375. LARGE_INTEGER StartingLcn;
  1376. DWORD ClusterCount;
  1377. } MOVE_FILE_DATA,*PMOVE_FILE_DATA;
  1378. typedef struct _MOVE_FILE_RECORD_DATA {
  1379. HANDLE FileHandle;
  1380. LARGE_INTEGER SourceFileRecord;
  1381. LARGE_INTEGER TargetFileRecord;
  1382. } MOVE_FILE_RECORD_DATA, *PMOVE_FILE_RECORD_DATA;
  1383. #ifdef _WIN64
  1384. typedef struct _MOVE_FILE_DATA32 {
  1385. UINT32 FileHandle;
  1386. LARGE_INTEGER StartingVcn;
  1387. LARGE_INTEGER StartingLcn;
  1388. DWORD ClusterCount;
  1389. } MOVE_FILE_DATA32,*PMOVE_FILE_DATA32;
  1390. #endif
  1391. typedef struct {
  1392. DWORD Restart;
  1393. SID Sid;
  1394. } FIND_BY_SID_DATA,*PFIND_BY_SID_DATA;
  1395. typedef struct {
  1396. DWORD NextEntryOffset;
  1397. DWORD FileIndex;
  1398. DWORD FileNameLength;
  1399. WCHAR FileName[1];
  1400. } FIND_BY_SID_OUTPUT,*PFIND_BY_SID_OUTPUT;
  1401. typedef struct {
  1402. DWORDLONG StartFileReferenceNumber;
  1403. USN LowUsn;
  1404. USN HighUsn;
  1405. } MFT_ENUM_DATA,*PMFT_ENUM_DATA;
  1406. typedef struct {
  1407. DWORDLONG MaximumSize;
  1408. DWORDLONG AllocationDelta;
  1409. } CREATE_USN_JOURNAL_DATA,*PCREATE_USN_JOURNAL_DATA;
  1410. typedef struct {
  1411. USN StartUsn;
  1412. DWORD ReasonMask;
  1413. DWORD ReturnOnlyOnClose;
  1414. DWORDLONG Timeout;
  1415. DWORDLONG BytesToWaitFor;
  1416. DWORDLONG UsnJournalID;
  1417. } READ_USN_JOURNAL_DATA,*PREAD_USN_JOURNAL_DATA;
  1418. typedef struct {
  1419. DWORD RecordLength;
  1420. WORD MajorVersion;
  1421. WORD MinorVersion;
  1422. DWORDLONG FileReferenceNumber;
  1423. DWORDLONG ParentFileReferenceNumber;
  1424. USN Usn;
  1425. LARGE_INTEGER TimeStamp;
  1426. DWORD Reason;
  1427. DWORD SourceInfo;
  1428. DWORD SecurityId;
  1429. DWORD FileAttributes;
  1430. WORD FileNameLength;
  1431. WORD FileNameOffset;
  1432. WCHAR FileName[1];
  1433. } USN_RECORD,*PUSN_RECORD;
  1434. #define USN_PAGE_SIZE (0x1000)
  1435. #define USN_REASON_DATA_OVERWRITE (0x00000001)
  1436. #define USN_REASON_DATA_EXTEND (0x00000002)
  1437. #define USN_REASON_DATA_TRUNCATION (0x00000004)
  1438. #define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010)
  1439. #define USN_REASON_NAMED_DATA_EXTEND (0x00000020)
  1440. #define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040)
  1441. #define USN_REASON_FILE_CREATE (0x00000100)
  1442. #define USN_REASON_FILE_DELETE (0x00000200)
  1443. #define USN_REASON_EA_CHANGE (0x00000400)
  1444. #define USN_REASON_SECURITY_CHANGE (0x00000800)
  1445. #define USN_REASON_RENAME_OLD_NAME (0x00001000)
  1446. #define USN_REASON_RENAME_NEW_NAME (0x00002000)
  1447. #define USN_REASON_INDEXABLE_CHANGE (0x00004000)
  1448. #define USN_REASON_BASIC_INFO_CHANGE (0x00008000)
  1449. #define USN_REASON_HARD_LINK_CHANGE (0x00010000)
  1450. #define USN_REASON_COMPRESSION_CHANGE (0x00020000)
  1451. #define USN_REASON_ENCRYPTION_CHANGE (0x00040000)
  1452. #define USN_REASON_OBJECT_ID_CHANGE (0x00080000)
  1453. #define USN_REASON_REPARSE_POINT_CHANGE (0x00100000)
  1454. #define USN_REASON_STREAM_CHANGE (0x00200000)
  1455. #define USN_REASON_TRANSACTED_CHANGE (0x00400000)
  1456. #define USN_REASON_CLOSE (0x80000000)
  1457. typedef struct {
  1458. DWORDLONG UsnJournalID;
  1459. USN FirstUsn;
  1460. USN NextUsn;
  1461. USN LowestValidUsn;
  1462. USN MaxUsn;
  1463. DWORDLONG MaximumSize;
  1464. DWORDLONG AllocationDelta;
  1465. } USN_JOURNAL_DATA,*PUSN_JOURNAL_DATA;
  1466. typedef struct {
  1467. DWORDLONG UsnJournalID;
  1468. DWORD DeleteFlags;
  1469. } DELETE_USN_JOURNAL_DATA,*PDELETE_USN_JOURNAL_DATA;
  1470. #define USN_DELETE_FLAG_DELETE (0x00000001)
  1471. #define USN_DELETE_FLAG_NOTIFY (0x00000002)
  1472. #define USN_DELETE_VALID_FLAGS (0x00000003)
  1473. typedef struct {
  1474. DWORD UsnSourceInfo;
  1475. HANDLE VolumeHandle;
  1476. DWORD HandleInfo;
  1477. } MARK_HANDLE_INFO,*PMARK_HANDLE_INFO;
  1478. #ifdef _WIN64
  1479. typedef struct {
  1480. DWORD UsnSourceInfo;
  1481. UINT32 VolumeHandle;
  1482. DWORD HandleInfo;
  1483. } MARK_HANDLE_INFO32,*PMARK_HANDLE_INFO32;
  1484. #endif
  1485. #define USN_SOURCE_DATA_MANAGEMENT (0x00000001)
  1486. #define USN_SOURCE_AUXILIARY_DATA (0x00000002)
  1487. #define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004)
  1488. #define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001)
  1489. #define MARK_HANDLE_TXF_SYSTEM_LOG (0x00000004)
  1490. #define MARK_HANDLE_NOT_TXF_SYSTEM_LOG (0x00000008)
  1491. #define MARK_HANDLE_REALTIME (0x00000020)
  1492. #define MARK_HANDLE_NOT_REALTIME (0x00000040)
  1493. typedef struct {
  1494. ACCESS_MASK DesiredAccess;
  1495. DWORD SecurityIds[1];
  1496. } BULK_SECURITY_TEST_DATA,*PBULK_SECURITY_TEST_DATA;
  1497. #define VOLUME_IS_DIRTY (0x00000001)
  1498. #define VOLUME_UPGRADE_SCHEDULED (0x00000002)
  1499. #define VOLUME_SESSION_OPEN (0x00000004)
  1500. typedef struct _FILE_PREFETCH {
  1501. DWORD Type;
  1502. DWORD Count;
  1503. DWORDLONG Prefetch[1];
  1504. } FILE_PREFETCH,*PFILE_PREFETCH;
  1505. typedef struct _FILE_PREFETCH_EX {
  1506. ULONG Type;
  1507. ULONG Count;
  1508. PVOID Context;
  1509. ULONGLONG Prefetch[1];
  1510. } FILE_PREFETCH_EX, *PFILE_PREFETCH_EX;
  1511. #define FILE_PREFETCH_TYPE_FOR_CREATE 0x1
  1512. #define FILE_PREFETCH_TYPE_FOR_DIRENUM 0x2
  1513. #define FILE_PREFETCH_TYPE_FOR_CREATE_EX 0x3
  1514. #define FILE_PREFETCH_TYPE_FOR_DIRENUM_EX 0x4
  1515. #define FILE_PREFETCH_TYPE_MAX 0x4
  1516. typedef struct _FILESYSTEM_STATISTICS {
  1517. WORD FileSystemType;
  1518. WORD Version;
  1519. DWORD SizeOfCompleteStructure;
  1520. DWORD UserFileReads;
  1521. DWORD UserFileReadBytes;
  1522. DWORD UserDiskReads;
  1523. DWORD UserFileWrites;
  1524. DWORD UserFileWriteBytes;
  1525. DWORD UserDiskWrites;
  1526. DWORD MetaDataReads;
  1527. DWORD MetaDataReadBytes;
  1528. DWORD MetaDataDiskReads;
  1529. DWORD MetaDataWrites;
  1530. DWORD MetaDataWriteBytes;
  1531. DWORD MetaDataDiskWrites;
  1532. } FILESYSTEM_STATISTICS,*PFILESYSTEM_STATISTICS;
  1533. #define FILESYSTEM_STATISTICS_TYPE_NTFS 1
  1534. #define FILESYSTEM_STATISTICS_TYPE_FAT 2
  1535. #define FILESYSTEM_STATISTICS_TYPE_EXFAT 3
  1536. typedef struct _FAT_STATISTICS {
  1537. DWORD CreateHits;
  1538. DWORD SuccessfulCreates;
  1539. DWORD FailedCreates;
  1540. DWORD NonCachedReads;
  1541. DWORD NonCachedReadBytes;
  1542. DWORD NonCachedWrites;
  1543. DWORD NonCachedWriteBytes;
  1544. DWORD NonCachedDiskReads;
  1545. DWORD NonCachedDiskWrites;
  1546. } FAT_STATISTICS,*PFAT_STATISTICS;
  1547. typedef struct _EXFAT_STATISTICS {
  1548. DWORD CreateHits;
  1549. DWORD SuccessfulCreates;
  1550. DWORD FailedCreates;
  1551. DWORD NonCachedReads;
  1552. DWORD NonCachedReadBytes;
  1553. DWORD NonCachedWrites;
  1554. DWORD NonCachedWriteBytes;
  1555. DWORD NonCachedDiskReads;
  1556. DWORD NonCachedDiskWrites;
  1557. } EXFAT_STATISTICS, *PEXFAT_STATISTICS;
  1558. typedef struct _NTFS_STATISTICS {
  1559. DWORD LogFileFullExceptions;
  1560. DWORD OtherExceptions;
  1561. DWORD MftReads;
  1562. DWORD MftReadBytes;
  1563. DWORD MftWrites;
  1564. DWORD MftWriteBytes;
  1565. struct {
  1566. WORD Write;
  1567. WORD Create;
  1568. WORD SetInfo;
  1569. WORD Flush;
  1570. } MftWritesUserLevel;
  1571. WORD MftWritesFlushForLogFileFull;
  1572. WORD MftWritesLazyWriter;
  1573. WORD MftWritesUserRequest;
  1574. DWORD Mft2Writes;
  1575. DWORD Mft2WriteBytes;
  1576. struct {
  1577. WORD Write;
  1578. WORD Create;
  1579. WORD SetInfo;
  1580. WORD Flush;
  1581. } Mft2WritesUserLevel;
  1582. WORD Mft2WritesFlushForLogFileFull;
  1583. WORD Mft2WritesLazyWriter;
  1584. WORD Mft2WritesUserRequest;
  1585. DWORD RootIndexReads;
  1586. DWORD RootIndexReadBytes;
  1587. DWORD RootIndexWrites;
  1588. DWORD RootIndexWriteBytes;
  1589. DWORD BitmapReads;
  1590. DWORD BitmapReadBytes;
  1591. DWORD BitmapWrites;
  1592. DWORD BitmapWriteBytes;
  1593. WORD BitmapWritesFlushForLogFileFull;
  1594. WORD BitmapWritesLazyWriter;
  1595. WORD BitmapWritesUserRequest;
  1596. struct {
  1597. WORD Write;
  1598. WORD Create;
  1599. WORD SetInfo;
  1600. } BitmapWritesUserLevel;
  1601. DWORD MftBitmapReads;
  1602. DWORD MftBitmapReadBytes;
  1603. DWORD MftBitmapWrites;
  1604. DWORD MftBitmapWriteBytes;
  1605. WORD MftBitmapWritesFlushForLogFileFull;
  1606. WORD MftBitmapWritesLazyWriter;
  1607. WORD MftBitmapWritesUserRequest;
  1608. struct {
  1609. WORD Write;
  1610. WORD Create;
  1611. WORD SetInfo;
  1612. WORD Flush;
  1613. } MftBitmapWritesUserLevel;
  1614. DWORD UserIndexReads;
  1615. DWORD UserIndexReadBytes;
  1616. DWORD UserIndexWrites;
  1617. DWORD UserIndexWriteBytes;
  1618. DWORD LogFileReads;
  1619. DWORD LogFileReadBytes;
  1620. DWORD LogFileWrites;
  1621. DWORD LogFileWriteBytes;
  1622. struct {
  1623. DWORD Calls;
  1624. DWORD Clusters;
  1625. DWORD Hints;
  1626. DWORD RunsReturned;
  1627. DWORD HintsHonored;
  1628. DWORD HintsClusters;
  1629. DWORD Cache;
  1630. DWORD CacheClusters;
  1631. DWORD CacheMiss;
  1632. DWORD CacheMissClusters;
  1633. } Allocate;
  1634. } NTFS_STATISTICS,*PNTFS_STATISTICS;
  1635. typedef struct _FILE_OBJECTID_BUFFER {
  1636. BYTE ObjectId[16];
  1637. __C89_NAMELESS union {
  1638. __C89_NAMELESS struct {
  1639. BYTE BirthVolumeId[16];
  1640. BYTE BirthObjectId[16];
  1641. BYTE DomainId[16];
  1642. } DUMMYSTRUCTNAME;
  1643. BYTE ExtendedInfo[48];
  1644. } DUMMYUNIONNAME;
  1645. } FILE_OBJECTID_BUFFER,*PFILE_OBJECTID_BUFFER;
  1646. typedef struct _FILE_SET_SPARSE_BUFFER {
  1647. BOOLEAN SetSparse;
  1648. } FILE_SET_SPARSE_BUFFER,*PFILE_SET_SPARSE_BUFFER;
  1649. typedef struct _FILE_ZERO_DATA_INFORMATION {
  1650. LARGE_INTEGER FileOffset;
  1651. LARGE_INTEGER BeyondFinalZero;
  1652. } FILE_ZERO_DATA_INFORMATION,*PFILE_ZERO_DATA_INFORMATION;
  1653. typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
  1654. LARGE_INTEGER FileOffset;
  1655. LARGE_INTEGER Length;
  1656. } FILE_ALLOCATED_RANGE_BUFFER,*PFILE_ALLOCATED_RANGE_BUFFER;
  1657. typedef struct _ENCRYPTION_BUFFER {
  1658. DWORD EncryptionOperation;
  1659. BYTE Private[1];
  1660. } ENCRYPTION_BUFFER,*PENCRYPTION_BUFFER;
  1661. #define FILE_SET_ENCRYPTION 0x00000001
  1662. #define FILE_CLEAR_ENCRYPTION 0x00000002
  1663. #define STREAM_SET_ENCRYPTION 0x00000003
  1664. #define STREAM_CLEAR_ENCRYPTION 0x00000004
  1665. #define MAXIMUM_ENCRYPTION_VALUE 0x00000004
  1666. typedef struct _DECRYPTION_STATUS_BUFFER {
  1667. BOOLEAN NoEncryptedStreams;
  1668. } DECRYPTION_STATUS_BUFFER,*PDECRYPTION_STATUS_BUFFER;
  1669. #define ENCRYPTION_FORMAT_DEFAULT (0x01)
  1670. #define COMPRESSION_FORMAT_SPARSE (0x4000)
  1671. typedef struct _REQUEST_RAW_ENCRYPTED_DATA {
  1672. LONGLONG FileOffset;
  1673. DWORD Length;
  1674. } REQUEST_RAW_ENCRYPTED_DATA,*PREQUEST_RAW_ENCRYPTED_DATA;
  1675. typedef struct _ENCRYPTED_DATA_INFO {
  1676. DWORDLONG StartingFileOffset;
  1677. DWORD OutputBufferOffset;
  1678. DWORD BytesWithinFileSize;
  1679. DWORD BytesWithinValidDataLength;
  1680. WORD CompressionFormat;
  1681. BYTE DataUnitShift;
  1682. BYTE ChunkShift;
  1683. BYTE ClusterShift;
  1684. BYTE EncryptionFormat;
  1685. WORD NumberOfDataBlocks;
  1686. DWORD DataBlockSize[ANYSIZE_ARRAY];
  1687. } ENCRYPTED_DATA_INFO;
  1688. typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO;
  1689. typedef struct _PLEX_READ_DATA_REQUEST {
  1690. LARGE_INTEGER ByteOffset;
  1691. DWORD ByteLength;
  1692. DWORD PlexNumber;
  1693. } PLEX_READ_DATA_REQUEST,*PPLEX_READ_DATA_REQUEST;
  1694. typedef struct _SI_COPYFILE {
  1695. DWORD SourceFileNameLength;
  1696. DWORD DestinationFileNameLength;
  1697. DWORD Flags;
  1698. WCHAR FileNameBuffer[1];
  1699. } SI_COPYFILE,*PSI_COPYFILE;
  1700. #define COPYFILE_SIS_LINK 0x0001
  1701. #define COPYFILE_SIS_REPLACE 0x0002
  1702. #define COPYFILE_SIS_FLAGS 0x0003
  1703. typedef struct _STORAGE_DESCRIPTOR_HEADER {
  1704. DWORD Version;
  1705. DWORD Size;
  1706. } STORAGE_DESCRIPTOR_HEADER, *PSTORAGE_DESCRIPTOR_HEADER;
  1707. typedef enum _STORAGE_PROPERTY_ID {
  1708. StorageDeviceProperty = 0,
  1709. StorageAdapterProperty,
  1710. StorageDeviceIdProperty,
  1711. StorageDeviceUniqueIdProperty,
  1712. StorageDeviceWriteCacheProperty,
  1713. StorageMiniportProperty,
  1714. StorageAccessAlignmentProperty,
  1715. StorageDeviceSeekPenaltyProperty,
  1716. StorageDeviceTrimProperty,
  1717. StorageDeviceWriteAggregationProperty,
  1718. StorageDeviceDeviceTelemetryProperty,
  1719. StorageDeviceLBProvisioningProperty,
  1720. StorageDevicePowerProperty,
  1721. StorageDeviceCopyOffloadProperty,
  1722. StorageDeviceResiliencyProperty,
  1723. StorageDeviceMediumProductType,
  1724. StorageAdapterRpmbProperty,
  1725. StorageAdapterCryptoProperty,
  1726. StorageDeviceIoCapabilityProperty = 48,
  1727. StorageAdapterProtocolSpecificProperty,
  1728. StorageDeviceProtocolSpecificProperty,
  1729. StorageAdapterTemperatureProperty,
  1730. StorageDeviceTemperatureProperty,
  1731. StorageAdapterPhysicalTopologyProperty,
  1732. StorageDevicePhysicalTopologyProperty,
  1733. StorageDeviceAttributesProperty,
  1734. StorageDeviceManagementStatus,
  1735. StorageAdapterSerialNumberProperty,
  1736. StorageDeviceLocationProperty,
  1737. StorageDeviceNumaProperty,
  1738. StorageDeviceZonedDeviceProperty,
  1739. StorageDeviceUnsafeShutdownCount,
  1740. StorageDeviceEnduranceProperty,
  1741. StorageDeviceLedStateProperty,
  1742. StorageDeviceSelfEncryptionProperty = 64,
  1743. StorageFruIdProperty
  1744. } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
  1745. typedef enum _STORAGE_QUERY_TYPE {
  1746. PropertyStandardQuery = 0,
  1747. PropertyExistsQuery = 1,
  1748. PropertyMaskQuery = 2,
  1749. PropertyQueryMaxDefined = 3
  1750. } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
  1751. typedef enum _STORAGE_SET_TYPE {
  1752. PropertyStandardSet = 0,
  1753. PropertyExistsSet,
  1754. PropertySetMaxDefined
  1755. } STORAGE_SET_TYPE, *PSTORAGE_SET_TYPE;
  1756. typedef struct _STORAGE_PROPERTY_QUERY {
  1757. STORAGE_PROPERTY_ID PropertyId;
  1758. STORAGE_QUERY_TYPE QueryType;
  1759. BYTE AdditionalParameters[1];
  1760. } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
  1761. typedef struct _STORAGE_PROPERTY_SET {
  1762. STORAGE_PROPERTY_ID PropertyId;
  1763. STORAGE_SET_TYPE SetType;
  1764. BYTE AdditionalParameters[1];
  1765. } STORAGE_PROPERTY_SET, *PSTORAGE_PROPERTY_SET;
  1766. typedef struct _STORAGE_DEVICE_DESCRIPTOR {
  1767. DWORD Version;
  1768. DWORD Size;
  1769. BYTE DeviceType;
  1770. BYTE DeviceTypeModifier;
  1771. BOOLEAN RemovableMedia;
  1772. BOOLEAN CommandQueueing;
  1773. DWORD VendorIdOffset;
  1774. DWORD ProductIdOffset;
  1775. DWORD ProductRevisionOffset;
  1776. DWORD SerialNumberOffset;
  1777. STORAGE_BUS_TYPE BusType;
  1778. DWORD RawPropertiesLength;
  1779. BYTE RawDeviceProperties[1];
  1780. } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
  1781. typedef struct _STORAGE_ADAPTER_DESCRIPTOR {
  1782. DWORD Version;
  1783. DWORD Size;
  1784. DWORD MaximumTransferLength;
  1785. DWORD MaximumPhysicalPages;
  1786. DWORD AlignmentMask;
  1787. BOOLEAN AdapterUsesPio;
  1788. BOOLEAN AdapterScansDown;
  1789. BOOLEAN CommandQueueing;
  1790. BOOLEAN AcceleratedTransfer;
  1791. BYTE BusType;
  1792. WORD BusMajorVersion;
  1793. WORD BusMinorVersion;
  1794. #if NTDDI_VERSION >= NTDDI_WIN8
  1795. BYTE SrbType;
  1796. BYTE AddressType;
  1797. #endif
  1798. } STORAGE_ADAPTER_DESCRIPTOR, *PSTORAGE_ADAPTER_DESCRIPTOR;
  1799. #if NTDDI_VERSION >= NTDDI_WIN8
  1800. #define NO_SRBTYPE_ADAPTER_DESCRIPTOR_SIZE UFIELD_OFFSET(STORAGE_ADAPTER_DESCRIPTOR, SrbType)
  1801. #ifndef SRB_TYPE_SCSI_REQUEST_BLOCK
  1802. #define SRB_TYPE_SCSI_REQUEST_BLOCK 0
  1803. #endif
  1804. #ifndef SRB_TYPE_STORAGE_REQUEST_BLOCK
  1805. #define SRB_TYPE_STORAGE_REQUEST_BLOCK 1
  1806. #endif
  1807. #ifndef STORAGE_ADDRESS_TYPE_BTL8
  1808. #define STORAGE_ADDRESS_TYPE_BTL8 0
  1809. #endif
  1810. #endif
  1811. typedef struct _STORAGE_DEVICE_ID_DESCRIPTOR {
  1812. DWORD Version;
  1813. DWORD Size;
  1814. DWORD NumberOfIdentifiers;
  1815. BYTE Identifiers[1];
  1816. } STORAGE_DEVICE_ID_DESCRIPTOR, *PSTORAGE_DEVICE_ID_DESCRIPTOR;
  1817. typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
  1818. ULONGLONG GptAttributes;
  1819. } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
  1820. #if (_WIN32_WINNT >= 0x0600)
  1821. #define FSCTL_MAKE_MEDIA_COMPATIBLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 76, METHOD_BUFFERED, FILE_WRITE_DATA)
  1822. #define FSCTL_SET_DEFECT_MANAGEMENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
  1823. #define FSCTL_QUERY_SPARING_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1824. #define FSCTL_QUERY_ON_DISK_VOLUME_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1825. #define FSCTL_SET_VOLUME_COMPRESSION_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,80, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1826. #define FSCTL_TXFS_MODIFY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,81, METHOD_BUFFERED, FILE_WRITE_DATA)
  1827. #define FSCTL_TXFS_QUERY_RM_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,82, METHOD_BUFFERED, FILE_READ_DATA)
  1828. #define FSCTL_TXFS_ROLLFORWARD_REDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,84, METHOD_BUFFERED, FILE_WRITE_DATA)
  1829. #define FSCTL_TXFS_ROLLFORWARD_UNDO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,85, METHOD_BUFFERED, FILE_WRITE_DATA)
  1830. #define FSCTL_TXFS_START_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,86, METHOD_BUFFERED, FILE_WRITE_DATA)
  1831. #define FSCTL_TXFS_SHUTDOWN_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED, FILE_WRITE_DATA)
  1832. #define FSCTL_TXFS_READ_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,88, METHOD_BUFFERED, FILE_READ_DATA)
  1833. #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,89, METHOD_BUFFERED, FILE_WRITE_DATA)
  1834. #define FSCTL_TXFS_CREATE_SECONDARY_RM CTL_CODE(FILE_DEVICE_FILE_SYSTEM,90,METHOD_BUFFERED, FILE_WRITE_DATA)
  1835. #define FSCTL_TXFS_GET_METADATA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,91, METHOD_BUFFERED, FILE_READ_DATA)
  1836. #define FSCTL_TXFS_GET_TRANSACTED_VERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,92, METHOD_BUFFERED, FILE_READ_DATA)
  1837. #define FSCTL_TXFS_SAVEPOINT_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,94, METHOD_BUFFERED, FILE_WRITE_DATA)
  1838. #define FSCTL_TXFS_CREATE_MINIVERSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 95, METHOD_BUFFERED, FILE_WRITE_DATA)
  1839. #define FSCTL_TXFS_TRANSACTION_ACTIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,99, METHOD_BUFFERED, FILE_READ_DATA)
  1840. #define FSCTL_SET_ZERO_ON_DEALLOCATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,101, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1841. #define FSCTL_SET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1842. #define FSCTL_GET_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1843. #define FSCTL_WAIT_FOR_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1844. #define FSCTL_INITIATE_REPAIR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1845. #define FSCTL_CSC_INTERNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER, FILE_ANY_ACCESS)
  1846. #define FSCTL_SHRINK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
  1847. #define FSCTL_SET_SHORT_NAME_BEHAVIOR CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1848. #define FSCTL_DFSR_SET_GHOST_HANDLE_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1849. #define FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_READ_DATA)
  1850. #define FSCTL_TXFS_LIST_TRANSACTIONS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_READ_DATA)
  1851. #define FSCTL_QUERY_PAGEFILE_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1852. #define FSCTL_RESET_VOLUME_ALLOCATION_HINTS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1853. #define FSCTL_TXFS_READ_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS)
  1854. #define SET_REPAIR_ENABLED 0x00000001
  1855. #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002
  1856. #define SET_REPAIR_DELETE_CROSSLINK 0x00000004
  1857. #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008
  1858. #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010
  1859. typedef struct _FILE_MAKE_COMPATIBLE_BUFFER {
  1860. BOOLEAN CloseDisc;
  1861. } FILE_MAKE_COMPATIBLE_BUFFER, *PFILE_MAKE_COMPATIBLE_BUFFER;
  1862. typedef struct _FILE_SET_DEFECT_MGMT_BUFFER {
  1863. BOOLEAN Disable;
  1864. } FILE_SET_DEFECT_MGMT_BUFFER, *PFILE_SET_DEFECT_MGMT_BUFFER;
  1865. typedef struct _FILE_QUERY_SPARING_BUFFER {
  1866. ULONG SparingUnitBytes;
  1867. BOOLEAN SoftwareSparing;
  1868. ULONG TotalSpareBlocks;
  1869. ULONG FreeSpareBlocks;
  1870. } FILE_QUERY_SPARING_BUFFER, *PFILE_QUERY_SPARING_BUFFER;
  1871. typedef struct _FILE_QUERY_ON_DISK_VOL_INFO_BUFFER {
  1872. LARGE_INTEGER DirectoryCount;
  1873. LARGE_INTEGER FileCount;
  1874. WORD FsFormatMajVersion;
  1875. WORD FsFormatMinVersion;
  1876. WCHAR FsFormatName[12];
  1877. LARGE_INTEGER FormatTime;
  1878. LARGE_INTEGER LastUpdateTime;
  1879. WCHAR CopyrightInfo[34];
  1880. WCHAR AbstractInfo[34];
  1881. WCHAR FormattingImplementationInfo[34];
  1882. WCHAR LastModifyingImplementationInfo[34];
  1883. } FILE_QUERY_ON_DISK_VOL_INFO_BUFFER, *PFILE_QUERY_ON_DISK_VOL_INFO_BUFFER;
  1884. #define SET_REPAIR_ENABLED 0x00000001
  1885. #define SET_REPAIR_VOLUME_BITMAP_SCAN 0x00000002
  1886. #define SET_REPAIR_DELETE_CROSSLINK 0x00000004
  1887. #define SET_REPAIR_WARN_ABOUT_DATA_LOSS 0x00000008
  1888. #define SET_REPAIR_DISABLED_AND_BUGCHECK_ON_CORRUPT 0x00000010
  1889. #define SET_REPAIR_VALID_MASK 0x0000001F
  1890. typedef enum _SHRINK_VOLUME_REQUEST_TYPES {
  1891. ShrinkPrepare = 1,
  1892. ShrinkCommit,
  1893. ShrinkAbort
  1894. } SHRINK_VOLUME_REQUEST_TYPES;
  1895. typedef struct _SHRINK_VOLUME_INFORMATION {
  1896. SHRINK_VOLUME_REQUEST_TYPES ShrinkRequestType;
  1897. DWORDLONG Flags;
  1898. LONGLONG NewNumberOfSectors;
  1899. } SHRINK_VOLUME_INFORMATION, *PSHRINK_VOLUME_INFORMATION;
  1900. #define TXFS_RM_FLAG_LOGGING_MODE 0x00000001
  1901. #define TXFS_RM_FLAG_RENAME_RM 0x00000002
  1902. #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000004
  1903. #define TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000008
  1904. #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000010
  1905. #define TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000020
  1906. #define TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000040
  1907. #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000080
  1908. #define TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000100
  1909. #define TXFS_RM_FLAG_GROW_LOG 0x00000400
  1910. #define TXFS_RM_FLAG_SHRINK_LOG 0x00000800
  1911. #define TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE 0x00001000
  1912. #define TXFS_RM_FLAG_PRESERVE_CHANGES 0x00002000
  1913. #define TXFS_RM_FLAG_RESET_RM_AT_NEXT_START 0x00004000
  1914. #define TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START 0x00008000
  1915. #define TXFS_RM_FLAG_PREFER_CONSISTENCY 0x00010000
  1916. #define TXFS_RM_FLAG_PREFER_AVAILABILITY 0x00020000
  1917. #define TXFS_LOGGING_MODE_SIMPLE 1
  1918. #define TXFS_LOGGING_MODE_FULL 2
  1919. #define TXFS_TRANSACTION_STATE_NONE 0
  1920. #define TXFS_TRANSACTION_STATE_ACTIVE 1
  1921. #define TXFS_TRANSACTION_STATE_PREPARED 2
  1922. #define TXFS_TRANSACTION_STATE_NOTACTIVE 3
  1923. #define TXFS_MODIFY_RM_VALID_FLAGS (TXFS_RM_FLAG_LOGGING_MODE | \
  1924. TXFS_RM_FLAG_RENAME_RM | \
  1925. TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
  1926. TXFS_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
  1927. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  1928. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  1929. TXFS_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
  1930. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  1931. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
  1932. TXFS_RM_FLAG_SHRINK_LOG | \
  1933. TXFS_RM_FLAG_GROW_LOG | \
  1934. TXFS_RM_FLAG_ENFORCE_MINIMUM_SIZE | \
  1935. TXFS_RM_FLAG_PRESERVE_CHANGES | \
  1936. TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
  1937. TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
  1938. TXFS_RM_FLAG_PREFER_CONSISTENCY | \
  1939. TXFS_RM_FLAG_PREFER_AVAILABILITY)
  1940. typedef struct _TXFS_MODIFY_RM {
  1941. ULONG Flags;
  1942. ULONG LogContainerCountMax;
  1943. ULONG LogContainerCountMin;
  1944. ULONG LogContainerCount;
  1945. ULONG LogGrowthIncrement;
  1946. ULONG LogAutoShrinkPercentage;
  1947. ULONGLONG Reserved;
  1948. USHORT LoggingMode;
  1949. } TXFS_MODIFY_RM, *PTXFS_MODIFY_RM;
  1950. #define TXFS_RM_STATE_NOT_STARTED 0
  1951. #define TXFS_RM_STATE_STARTING 1
  1952. #define TXFS_RM_STATE_ACTIVE 2
  1953. #define TXFS_RM_STATE_SHUTTING_DOWN 3
  1954. #define TXFS_QUERY_RM_INFORMATION_VALID_FLAGS \
  1955. (TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  1956. TXFS_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  1957. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  1958. TXFS_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN | \
  1959. TXFS_RM_FLAG_RESET_RM_AT_NEXT_START | \
  1960. TXFS_RM_FLAG_DO_NOT_RESET_RM_AT_NEXT_START | \
  1961. TXFS_RM_FLAG_PREFER_CONSISTENCY | \
  1962. TXFS_RM_FLAG_PREFER_AVAILABILITY)
  1963. typedef struct _TXFS_QUERY_RM_INFORMATION {
  1964. ULONG BytesRequired;
  1965. ULONGLONG TailLsn;
  1966. ULONGLONG CurrentLsn;
  1967. ULONGLONG ArchiveTailLsn;
  1968. ULONGLONG LogContainerSize;
  1969. LARGE_INTEGER HighestVirtualClock;
  1970. ULONG LogContainerCount;
  1971. ULONG LogContainerCountMax;
  1972. ULONG LogContainerCountMin;
  1973. ULONG LogGrowthIncrement;
  1974. ULONG LogAutoShrinkPercentage;
  1975. ULONG Flags;
  1976. USHORT LoggingMode;
  1977. USHORT Reserved;
  1978. ULONG RmState;
  1979. ULONGLONG LogCapacity;
  1980. ULONGLONG LogFree;
  1981. ULONGLONG TopsSize;
  1982. ULONGLONG TopsUsed;
  1983. ULONGLONG TransactionCount;
  1984. ULONGLONG OnePCCount;
  1985. ULONGLONG TwoPCCount;
  1986. ULONGLONG NumberLogFileFull;
  1987. ULONGLONG OldestTransactionAge;
  1988. GUID RMName;
  1989. ULONG TmLogPathOffset;
  1990. } TXFS_QUERY_RM_INFORMATION, *PTXFS_QUERY_RM_INFORMATION;
  1991. #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN 0x01
  1992. #define TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK 0x02
  1993. #define TXFS_ROLLFORWARD_REDO_VALID_FLAGS \
  1994. (TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_REDO_LSN | \
  1995. TXFS_ROLLFORWARD_REDO_FLAG_USE_LAST_VIRTUAL_CLOCK)
  1996. typedef struct _TXFS_ROLLFORWARD_REDO_INFORMATION {
  1997. LARGE_INTEGER LastVirtualClock;
  1998. ULONGLONG LastRedoLsn;
  1999. ULONGLONG HighestRecoveryLsn;
  2000. ULONG Flags;
  2001. } TXFS_ROLLFORWARD_REDO_INFORMATION, *PTXFS_ROLLFORWARD_REDO_INFORMATION;
  2002. #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX 0x00000001
  2003. #define TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN 0x00000002
  2004. #define TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE 0x00000004
  2005. #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS 0x00000008
  2006. #define TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT 0x00000010
  2007. #define TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE 0x00000020
  2008. #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX 0x00000040
  2009. #define TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MIN 0x00000080
  2010. #define TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT 0x00000200
  2011. #define TXFS_START_RM_FLAG_LOGGING_MODE 0x00000400
  2012. #define TXFS_START_RM_FLAG_PRESERVE_CHANGES 0x00000800
  2013. #define TXFS_START_RM_FLAG_PREFER_CONSISTENCY 0x00001000
  2014. #define TXFS_START_RM_FLAG_PREFER_AVAILABILITY 0x00002000
  2015. #define TXFS_START_RM_VALID_FLAGS \
  2016. (TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MAX | \
  2017. TXFS_START_RM_FLAG_LOG_CONTAINER_COUNT_MIN | \
  2018. TXFS_START_RM_FLAG_LOG_CONTAINER_SIZE | \
  2019. TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_NUM_CONTAINERS | \
  2020. TXFS_START_RM_FLAG_LOG_GROWTH_INCREMENT_PERCENT | \
  2021. TXFS_START_RM_FLAG_LOG_AUTO_SHRINK_PERCENTAGE | \
  2022. TXFS_START_RM_FLAG_RECOVER_BEST_EFFORT | \
  2023. TXFS_START_RM_FLAG_LOG_NO_CONTAINER_COUNT_MAX | \
  2024. TXFS_START_RM_FLAG_LOGGING_MODE | \
  2025. TXFS_START_RM_FLAG_PRESERVE_CHANGES | \
  2026. TXFS_START_RM_FLAG_PREFER_CONSISTENCY | \
  2027. TXFS_START_RM_FLAG_PREFER_AVAILABILITY)
  2028. typedef struct _TXFS_START_RM_INFORMATION {
  2029. ULONG Flags;
  2030. ULONGLONG LogContainerSize;
  2031. ULONG LogContainerCountMin;
  2032. ULONG LogContainerCountMax;
  2033. ULONG LogGrowthIncrement;
  2034. ULONG LogAutoShrinkPercentage;
  2035. ULONG TmLogPathOffset;
  2036. USHORT TmLogPathLength;
  2037. USHORT LoggingMode;
  2038. USHORT LogPathLength;
  2039. USHORT Reserved;
  2040. WCHAR LogPath[1];
  2041. } TXFS_START_RM_INFORMATION, *PTXFS_START_RM_INFORMATION;
  2042. typedef struct _TXFS_GET_METADATA_INFO_OUT {
  2043. struct {
  2044. LONGLONG LowPart;
  2045. LONGLONG HighPart;
  2046. } TxfFileId;
  2047. GUID LockingTransaction;
  2048. ULONGLONG LastLsn;
  2049. ULONG TransactionState;
  2050. } TXFS_GET_METADATA_INFO_OUT, *PTXFS_GET_METADATA_INFO_OUT;
  2051. #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_CREATED 0x00000001
  2052. #define TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY_FLAG_DELETED 0x00000002
  2053. typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY {
  2054. ULONGLONG Offset;
  2055. ULONG NameFlags;
  2056. LONGLONG FileId;
  2057. ULONG Reserved1;
  2058. ULONG Reserved2;
  2059. LONGLONG Reserved3;
  2060. WCHAR FileName[1];
  2061. } TXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY, *PTXFS_LIST_TRANSACTION_LOCKED_FILES_ENTRY;
  2062. typedef struct _TXFS_LIST_TRANSACTION_LOCKED_FILES {
  2063. GUID KtmTransaction;
  2064. ULONGLONG NumberOfFiles;
  2065. ULONGLONG BufferSizeRequired;
  2066. ULONGLONG Offset;
  2067. } TXFS_LIST_TRANSACTION_LOCKED_FILES, *PTXFS_LIST_TRANSACTION_LOCKED_FILES;
  2068. typedef struct _TXFS_LIST_TRANSACTIONS_ENTRY {
  2069. GUID TransactionId;
  2070. ULONG TransactionState;
  2071. ULONG Reserved1;
  2072. ULONG Reserved2;
  2073. LONGLONG Reserved3;
  2074. } TXFS_LIST_TRANSACTIONS_ENTRY, *PTXFS_LIST_TRANSACTIONS_ENTRY;
  2075. typedef struct _TXFS_LIST_TRANSACTIONS {
  2076. ULONGLONG NumberOfTransactions;
  2077. ULONGLONG BufferSizeRequired;
  2078. } TXFS_LIST_TRANSACTIONS, *PTXFS_LIST_TRANSACTIONS;
  2079. typedef struct _TXFS_READ_BACKUP_INFORMATION_OUT {
  2080. __C89_NAMELESS union {
  2081. ULONG BufferLength;
  2082. UCHAR Buffer;
  2083. } DUMMYUNIONNAME;
  2084. } TXFS_READ_BACKUP_INFORMATION_OUT, *PTXFS_READ_BACKUP_INFORMATION_OUT;
  2085. typedef struct _TXFS_WRITE_BACKUP_INFORMATION {
  2086. UCHAR Buffer;
  2087. } TXFS_WRITE_BACKUP_INFORMATION, *PTXFS_WRITE_BACKUP_INFORMATION;
  2088. #define TXFS_TRANSACTED_VERSION_NONTRANSACTED 0xFFFFFFFE
  2089. #define TXFS_TRANSACTED_VERSION_UNCOMMITTED 0xFFFFFFFF
  2090. typedef struct _TXFS_GET_TRANSACTED_VERSION {
  2091. ULONG ThisBaseVersion;
  2092. ULONG LatestVersion;
  2093. USHORT ThisMiniVersion;
  2094. USHORT FirstMiniVersion;
  2095. USHORT LatestMiniVersion;
  2096. } TXFS_GET_TRANSACTED_VERSION, *PTXFS_GET_TRANSACTED_VERSION;
  2097. #define TXFS_SAVEPOINT_SET 1
  2098. #define TXFS_SAVEPOINT_ROLLBACK 2
  2099. #define TXFS_SAVEPOINT_CLEAR 4
  2100. #define TXFS_SAVEPOINT_CLEAR_ALL 16
  2101. typedef struct _TXFS_SAVEPOINT_INFORMATION {
  2102. HANDLE KtmTransaction;
  2103. ULONG ActionCode;
  2104. ULONG SavepointId;
  2105. } TXFS_SAVEPOINT_INFORMATION, *PTXFS_SAVEPOINT_INFORMATION;
  2106. typedef struct _TXFS_CREATE_MINIVERSION_INFO {
  2107. USHORT StructureVersion;
  2108. USHORT StructureLength;
  2109. ULONG BaseVersion;
  2110. USHORT MiniVersion;
  2111. } TXFS_CREATE_MINIVERSION_INFO, *PTXFS_CREATE_MINIVERSION_INFO;
  2112. typedef struct _TXFS_TRANSACTION_ACTIVE_INFO {
  2113. BOOLEAN TransactionsActiveAtSnapshot;
  2114. } TXFS_TRANSACTION_ACTIVE_INFO, *PTXFS_TRANSACTION_ACTIVE_INFO;
  2115. typedef enum _WRITE_CACHE_TYPE {
  2116. WriteCacheTypeUnknown = 0,
  2117. WriteCacheTypeNone = 1,
  2118. WriteCacheTypeWriteBack = 2,
  2119. WriteCacheTypeWriteThrough = 3
  2120. } WRITE_CACHE_TYPE;
  2121. typedef enum _WRITE_CACHE_ENABLE {
  2122. WriteCacheEnableUnknown = 0,
  2123. WriteCacheDisabled = 1,
  2124. WriteCacheEnabled = 2
  2125. } WRITE_CACHE_ENABLE;
  2126. typedef enum _WRITE_CACHE_CHANGE {
  2127. WriteCacheChangeUnknown = 0,
  2128. WriteCacheNotChangeable = 1,
  2129. WriteCacheChangeable = 2
  2130. } WRITE_CACHE_CHANGE;
  2131. typedef enum _WRITE_THROUGH {
  2132. WriteThroughUnknown = 0,
  2133. WriteThroughNotSupported = 1,
  2134. WriteThroughSupported = 2
  2135. } WRITE_THROUGH;
  2136. typedef struct _STORAGE_WRITE_CACHE_PROPERTY {
  2137. DWORD Version;
  2138. DWORD Size;
  2139. WRITE_CACHE_TYPE WriteCacheType;
  2140. WRITE_CACHE_ENABLE WriteCacheEnabled;
  2141. WRITE_CACHE_CHANGE WriteCacheChangeable;
  2142. WRITE_THROUGH WriteThroughSupported;
  2143. BOOLEAN FlushCacheSupported;
  2144. BOOLEAN UserDefinedPowerProtection;
  2145. BOOLEAN NVCacheEnabled;
  2146. } STORAGE_WRITE_CACHE_PROPERTY, *PSTORAGE_WRITE_CACHE_PROPERTY;
  2147. typedef enum _STORAGE_PORT_CODE_SET {
  2148. StoragePortCodeSetReserved = 0,
  2149. StoragePortCodeSetStorport = 1,
  2150. StoragePortCodeSetSCSIport = 2,
  2151. StoragePortCodeSetSpaceport = 3,
  2152. StoragePortCodeSetATAport = 4,
  2153. StoragePortCodeSetUSBport = 5,
  2154. StoragePortCodeSetSBP2port = 6,
  2155. StoragePortCodeSetSDport = 7
  2156. } STORAGE_PORT_CODE_SET, *PSTORAGE_PORT_CODE_SET;
  2157. typedef struct _STORAGE_MINIPORT_DESCRIPTOR {
  2158. DWORD Version;
  2159. DWORD Size;
  2160. STORAGE_PORT_CODE_SET Portdriver;
  2161. BOOLEAN LUNResetSupported;
  2162. BOOLEAN TargetResetSupported;
  2163. } STORAGE_MINIPORT_DESCRIPTOR, *PSTORAGE_MINIPORT_DESCRIPTOR;
  2164. typedef enum _STORAGE_IDENTIFIER_CODE_SET {
  2165. StorageIdCodeSetReserved = 0,
  2166. StorageIdCodeSetBinary = 1,
  2167. StorageIdCodeSetAscii = 2,
  2168. StorageIdCodeSetUtf8 = 3
  2169. } STORAGE_IDENTIFIER_CODE_SET, *PSTORAGE_IDENTIFIER_CODE_SET;
  2170. typedef enum _STORAGE_IDENTIFIER_TYPE {
  2171. StorageIdTypeVendorSpecific = 0,
  2172. StorageIdTypeVendorId = 1,
  2173. StorageIdTypeEUI64 = 2,
  2174. StorageIdTypeFCPHName = 3,
  2175. StorageIdTypePortRelative = 4,
  2176. StorageIdTypeTargetPortGroup = 5,
  2177. StorageIdTypeLogicalUnitGroup = 6,
  2178. StorageIdTypeMD5LogicalUnitIdentifier = 7,
  2179. StorageIdTypeScsiNameString = 8
  2180. } STORAGE_IDENTIFIER_TYPE, *PSTORAGE_IDENTIFIER_TYPE;
  2181. #define StorageIdTypeNAA StorageIdTypeFCPHName
  2182. typedef enum _STORAGE_ID_NAA_FORMAT {
  2183. StorageIdNAAFormatIEEEExtended = 2,
  2184. StorageIdNAAFormatIEEERegistered = 3,
  2185. StorageIdNAAFormatIEEEERegisteredExtended = 5
  2186. } STORAGE_ID_NAA_FORMAT, *PSTORAGE_ID_NAA_FORMAT;
  2187. typedef enum _STORAGE_ASSOCIATION_TYPE {
  2188. StorageIdAssocDevice = 0,
  2189. StorageIdAssocPort = 1,
  2190. StorageIdAssocTarget = 2
  2191. } STORAGE_ASSOCIATION_TYPE, *PSTORAGE_ASSOCIATION_TYPE;
  2192. typedef struct _STORAGE_IDENTIFIER {
  2193. STORAGE_IDENTIFIER_CODE_SET CodeSet;
  2194. STORAGE_IDENTIFIER_TYPE Type;
  2195. USHORT IdentifierSize;
  2196. USHORT NextOffset;
  2197. STORAGE_ASSOCIATION_TYPE Association;
  2198. UCHAR Identifier[1];
  2199. } STORAGE_IDENTIFIER, *PSTORAGE_IDENTIFIER;
  2200. typedef struct _STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR {
  2201. DWORD Version;
  2202. DWORD Size;
  2203. DWORD BytesPerCacheLine;
  2204. DWORD BytesOffsetForCacheAlignment;
  2205. DWORD BytesPerLogicalSector;
  2206. DWORD BytesPerPhysicalSector;
  2207. DWORD BytesOffsetForSectorAlignment;
  2208. } STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR, *PSTORAGE_ACCESS_ALIGNMENT_DESCRIPTOR;
  2209. typedef struct _STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR {
  2210. DWORD Version;
  2211. DWORD Size;
  2212. DWORD MediumProductType;
  2213. } STORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR, *PSTORAGE_MEDIUM_PRODUCT_TYPE_DESCRIPTOR;
  2214. #endif /*(_WIN32_WINNT >= 0x0600)*/
  2215. typedef struct _DEVICE_SEEK_PENALTY_DESCRIPTOR {
  2216. DWORD Version;
  2217. DWORD Size;
  2218. BOOLEAN IncursSeekPenalty;
  2219. } DEVICE_SEEK_PENALTY_DESCRIPTOR, *PDEVICE_SEEK_PENALTY_DESCRIPTOR;
  2220. typedef struct _DEVICE_WRITE_AGGREGATION_DESCRIPTOR {
  2221. ULONG Version;
  2222. ULONG Size;
  2223. BOOLEAN BenefitsFromWriteAggregation;
  2224. } DEVICE_WRITE_AGGREGATION_DESCRIPTOR, *PDEVICE_WRITE_AGGREGATION_DESCRIPTOR;
  2225. typedef struct _DEVICE_TRIM_DESCRIPTOR {
  2226. DWORD Version;
  2227. DWORD Size;
  2228. BOOLEAN TrimEnabled;
  2229. } DEVICE_TRIM_DESCRIPTOR, *PDEVICE_TRIM_DESCRIPTOR;
  2230. typedef struct _DEVICE_LB_PROVISIONING_DESCRIPTOR {
  2231. DWORD Version;
  2232. DWORD Size;
  2233. BYTE ThinProvisioningEnabled : 1;
  2234. BYTE ThinProvisioningReadZeros : 1;
  2235. BYTE AnchorSupported : 3;
  2236. BYTE UnmapGranularityAlignmentValid : 1;
  2237. BYTE GetFreeSpaceSupported : 1;
  2238. BYTE MapSupported : 1;
  2239. BYTE Reserved1[7];
  2240. DWORDLONG OptimalUnmapGranularity;
  2241. DWORDLONG UnmapGranularityAlignment;
  2242. #if NTDDI_VERSION >= NTDDI_WINBLUE
  2243. DWORD MaxUnmapLbaCount;
  2244. DWORD MaxUnmapBlockDescriptorCount;
  2245. #endif
  2246. } DEVICE_LB_PROVISIONING_DESCRIPTOR, *PDEVICE_LB_PROVISIONING_DESCRIPTOR;
  2247. #define DEVICE_LB_PROVISIONING_DESCRIPTOR_V1_SIZE RTL_SIZEOF_THROUGH_FIELD(DEVICE_LB_PROVISIONING_DESCRIPTOR, UnmapGranularityAlignment)
  2248. typedef struct _STORAGE_LB_PROVISIONING_MAP_RESOURCES {
  2249. DWORD Size;
  2250. DWORD Version;
  2251. BYTE AvailableMappingResourcesValid : 1;
  2252. BYTE UsedMappingResourcesValid : 1;
  2253. BYTE Reserved0 : 6;
  2254. BYTE Reserved1[3];
  2255. BYTE AvailableMappingResourcesScope : 2;
  2256. BYTE UsedMappingResourcesScope : 2;
  2257. BYTE Reserved2 : 4;
  2258. BYTE Reserved3[3];
  2259. DWORDLONG AvailableMappingResources;
  2260. DWORDLONG UsedMappingResources;
  2261. } STORAGE_LB_PROVISIONING_MAP_RESOURCES, *PSTORAGE_LB_PROVISIONING_MAP_RESOURCES;
  2262. typedef struct _DEVICE_POWER_DESCRIPTOR {
  2263. DWORD Version;
  2264. DWORD Size;
  2265. BOOLEAN DeviceAttentionSupported;
  2266. BOOLEAN AsynchronousNotificationSupported;
  2267. BOOLEAN IdlePowerManagementEnabled;
  2268. BOOLEAN D3ColdEnabled;
  2269. BOOLEAN D3ColdSupported;
  2270. BOOLEAN NoVerifyDuringIdlePower;
  2271. BYTE Reserved[2];
  2272. DWORD IdleTimeoutInMS;
  2273. } DEVICE_POWER_DESCRIPTOR, *PDEVICE_POWER_DESCRIPTOR;
  2274. typedef struct _DEVICE_COPY_OFFLOAD_DESCRIPTOR {
  2275. DWORD Version;
  2276. DWORD Size;
  2277. DWORD MaximumTokenLifetime;
  2278. DWORD DefaultTokenLifetime;
  2279. DWORDLONG MaximumTransferSize;
  2280. DWORDLONG OptimalTransferCount;
  2281. DWORD MaximumDataDescriptors;
  2282. DWORD MaximumTransferLengthPerDescriptor;
  2283. DWORD OptimalTransferLengthPerDescriptor;
  2284. WORD OptimalTransferLengthGranularity;
  2285. BYTE Reserved[2];
  2286. } DEVICE_COPY_OFFLOAD_DESCRIPTOR, *PDEVICE_COPY_OFFLOAD_DESCRIPTOR;
  2287. typedef struct _STORAGE_DEVICE_RESILIENCY_DESCRIPTOR {
  2288. DWORD Version;
  2289. DWORD Size;
  2290. DWORD NameOffset;
  2291. DWORD NumberOfLogicalCopies;
  2292. DWORD NumberOfPhysicalCopies;
  2293. DWORD PhysicalDiskRedundancy;
  2294. DWORD NumberOfColumns;
  2295. DWORD Interleave;
  2296. } STORAGE_DEVICE_RESILIENCY_DESCRIPTOR, *PSTORAGE_DEVICE_RESILIENCY_DESCRIPTOR;
  2297. typedef enum _STORAGE_RPMB_FRAME_TYPE {
  2298. StorageRpmbFrameTypeUnknown = 0,
  2299. StorageRpmbFrameTypeStandard,
  2300. StorageRpmbFrameTypeMax
  2301. } STORAGE_RPMB_FRAME_TYPE, *PSTORAGE_RPMB_FRAME_TYPE;
  2302. #define STORAGE_RPMB_DESCRIPTOR_VERSION_1 1
  2303. #define STORAGE_RPMB_MINIMUM_RELIABLE_WRITE_SIZE 512
  2304. typedef struct _STORAGE_RPMB_DESCRIPTOR {
  2305. DWORD Version;
  2306. DWORD Size;
  2307. DWORD SizeInBytes;
  2308. DWORD MaxReliableWriteSizeInBytes;
  2309. STORAGE_RPMB_FRAME_TYPE FrameFormat;
  2310. } STORAGE_RPMB_DESCRIPTOR, *PSTORAGE_RPMB_DESCRIPTOR;
  2311. typedef enum _STORAGE_CRYPTO_ALGORITHM_ID {
  2312. StorageCryptoAlgorithmUnknown = 0,
  2313. StorageCryptoAlgorithmXTSAES = 1,
  2314. StorageCryptoAlgorithmBitlockerAESCBC,
  2315. StorageCryptoAlgorithmAESECB,
  2316. StorageCryptoAlgorithmESSIVAESCBC,
  2317. StorageCryptoAlgorithmMax
  2318. } STORAGE_CRYPTO_ALGORITHM_ID, *PSTORAGE_CRYPTO_ALGORITHM_ID;
  2319. typedef enum _STORAGE_CRYPTO_KEY_SIZE {
  2320. StorageCryptoKeySizeUnknown = 0,
  2321. StorageCryptoKeySize128Bits = 1,
  2322. StorageCryptoKeySize192Bits,
  2323. StorageCryptoKeySize256Bits,
  2324. StorageCryptoKeySize512Bits
  2325. } STORAGE_CRYPTO_KEY_SIZE, *PSTORAGE_CRYPTO_KEY_SIZE;
  2326. #define STORAGE_CRYPTO_CAPABILITY_VERSION_1 1
  2327. typedef struct _STORAGE_CRYPTO_CAPABILITY {
  2328. DWORD Version;
  2329. DWORD Size;
  2330. DWORD CryptoCapabilityIndex;
  2331. STORAGE_CRYPTO_ALGORITHM_ID AlgorithmId;
  2332. STORAGE_CRYPTO_KEY_SIZE KeySize;
  2333. DWORD DataUnitSizeBitmask;
  2334. } STORAGE_CRYPTO_CAPABILITY, *PSTORAGE_CRYPTO_CAPABILITY;
  2335. #define STORAGE_CRYPTO_DESCRIPTOR_VERSION_1 1
  2336. typedef struct _STORAGE_CRYPTO_DESCRIPTOR {
  2337. DWORD Version;
  2338. DWORD Size;
  2339. DWORD NumKeysSupported;
  2340. DWORD NumCryptoCapabilities;
  2341. STORAGE_CRYPTO_CAPABILITY CryptoCapabilities[ANYSIZE_ARRAY];
  2342. } STORAGE_CRYPTO_DESCRIPTOR, *PSTORAGE_CRYPTO_DESCRIPTOR;
  2343. #define STORAGE_TIER_NAME_LENGTH (256)
  2344. #define STORAGE_TIER_DESCRIPTION_LENGTH (512)
  2345. #define STORAGE_TIER_FLAG_NO_SEEK_PENALTY (0x00020000)
  2346. #define STORAGE_TIER_FLAG_WRITE_BACK_CACHE (0x00200000)
  2347. #define STORAGE_TIER_FLAG_READ_CACHE (0x00400000)
  2348. #define STORAGE_TIER_FLAG_PARITY (0x00800000)
  2349. #define STORAGE_TIER_FLAG_SMR (0x01000000)
  2350. typedef enum _STORAGE_TIER_MEDIA_TYPE {
  2351. StorageTierMediaTypeUnspecified = 0,
  2352. StorageTierMediaTypeDisk = 1,
  2353. StorageTierMediaTypeSsd = 2,
  2354. StorageTierMediaTypeScm = 4,
  2355. StorageTierMediaTypeMax
  2356. } STORAGE_TIER_MEDIA_TYPE, *PSTORAGE_TIER_MEDIA_TYPE;
  2357. typedef enum _STORAGE_TIER_CLASS {
  2358. StorageTierClassUnspecified = 0,
  2359. StorageTierClassCapacity,
  2360. StorageTierClassPerformance,
  2361. StorageTierClassMax
  2362. } STORAGE_TIER_CLASS, *PSTORAGE_TIER_CLASS;
  2363. typedef struct _STORAGE_TIER {
  2364. GUID Id;
  2365. WCHAR Name[STORAGE_TIER_NAME_LENGTH];
  2366. WCHAR Description[STORAGE_TIER_NAME_LENGTH];
  2367. DWORDLONG Flags;
  2368. DWORDLONG ProvisionedCapacity;
  2369. STORAGE_TIER_MEDIA_TYPE MediaType;
  2370. STORAGE_TIER_CLASS Class;
  2371. } STORAGE_TIER, *PSTORAGE_TIER;
  2372. typedef struct _STORAGE_DEVICE_TIERING_DESCRIPTOR {
  2373. DWORD Version;
  2374. DWORD Size;
  2375. DWORD Flags;
  2376. DWORD TotalNumberOfTiers;
  2377. DWORD NumberOfTiersReturned;
  2378. STORAGE_TIER Tiers[ANYSIZE_ARRAY];
  2379. } STORAGE_DEVICE_TIERING_DESCRIPTOR, *PSTORAGE_DEVICE_TIERING_DESCRIPTOR;
  2380. typedef struct _STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR {
  2381. DWORD Version;
  2382. DWORD Size;
  2383. DWORD NumberOfFaultDomains;
  2384. GUID FaultDomainIds[ANYSIZE_ARRAY];
  2385. } STORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR, *PSTORAGE_DEVICE_FAULT_DOMAIN_DESCRIPTOR;
  2386. typedef enum _STORAGE_PROTOCOL_TYPE {
  2387. ProtocolTypeUnknown = 0x00,
  2388. ProtocolTypeScsi,
  2389. ProtocolTypeAta,
  2390. ProtocolTypeNvme,
  2391. ProtocolTypeSd,
  2392. ProtocolTypeUfs,
  2393. ProtocolTypeProprietary = 0x7E,
  2394. ProtocolTypeMaxReserved = 0x7F
  2395. } STORAGE_PROTOCOL_TYPE, *PSTORAGE_PROTOCOL_TYPE;
  2396. typedef enum _STORAGE_PROTOCOL_NVME_DATA_TYPE {
  2397. NVMeDataTypeUnknown = 0,
  2398. NVMeDataTypeIdentify,
  2399. NVMeDataTypeLogPage,
  2400. NVMeDataTypeFeature
  2401. } STORAGE_PROTOCOL_NVME_DATA_TYPE, *PSTORAGE_PROTOCOL_NVME_DATA_TYPE;
  2402. typedef enum _STORAGE_PROTOCOL_ATA_DATA_TYPE {
  2403. AtaDataTypeUnknown = 0,
  2404. AtaDataTypeIdentify,
  2405. AtaDataTypeLogPage
  2406. } STORAGE_PROTOCOL_ATA_DATA_TYPE, *PSTORAGE_PROTOCOL_ATA_DATA_TYPE;
  2407. typedef enum _STORAGE_PROTOCOL_UFS_DATA_TYPE {
  2408. UfsDataTypeUnknown = 0,
  2409. UfsDataTypeQueryDescriptor,
  2410. UfsDataTypeQueryAttribute,
  2411. UfsDataTypeQueryFlag,
  2412. UfsDataTypeQueryDmeAttribute,
  2413. UfsDataTypeQueryDmePeerAttribute,
  2414. UfsDataTypeMax
  2415. } STORAGE_PROTOCOL_UFS_DATA_TYPE, *PSTORAGE_PROTOCOL_UFS_DATA_TYPE;
  2416. typedef union _STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE {
  2417. __C89_NAMELESS struct {
  2418. DWORD RetainAsynEvent : 1;
  2419. DWORD LogSpecificField : 4;
  2420. DWORD Reserved : 27;
  2421. };
  2422. DWORD AsUlong;
  2423. } STORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE, *PSTORAGE_PROTOCOL_DATA_SUBVALUE_GET_LOG_PAGE;
  2424. typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA {
  2425. STORAGE_PROTOCOL_TYPE ProtocolType;
  2426. DWORD DataType;
  2427. DWORD ProtocolDataRequestValue;
  2428. DWORD ProtocolDataRequestSubValue;
  2429. DWORD ProtocolDataOffset;
  2430. DWORD ProtocolDataLength;
  2431. DWORD FixedProtocolReturnData;
  2432. DWORD ProtocolDataRequestSubValue2;
  2433. DWORD ProtocolDataRequestSubValue3;
  2434. DWORD ProtocolDataRequestSubValue4;
  2435. } STORAGE_PROTOCOL_SPECIFIC_DATA, *PSTORAGE_PROTOCOL_SPECIFIC_DATA;
  2436. typedef struct _STORAGE_PROTOCOL_SPECIFIC_DATA_EXT {
  2437. STORAGE_PROTOCOL_TYPE ProtocolType;
  2438. DWORD DataType;
  2439. DWORD ProtocolDataValue;
  2440. DWORD ProtocolDataSubValue;
  2441. DWORD ProtocolDataOffset;
  2442. DWORD ProtocolDataLength;
  2443. DWORD FixedProtocolReturnData;
  2444. DWORD ProtocolDataSubValue2;
  2445. DWORD ProtocolDataSubValue3;
  2446. DWORD ProtocolDataSubValue4;
  2447. DWORD ProtocolDataSubValue5;
  2448. DWORD Reserved[5];
  2449. } STORAGE_PROTOCOL_SPECIFIC_DATA_EXT, *PSTORAGE_PROTOCOL_SPECIFIC_DATA_EXT;
  2450. typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR {
  2451. DWORD Version;
  2452. DWORD Size;
  2453. STORAGE_PROTOCOL_SPECIFIC_DATA ProtocolSpecificData;
  2454. } STORAGE_PROTOCOL_DATA_DESCRIPTOR, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR;
  2455. typedef struct _STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT {
  2456. DWORD Version;
  2457. DWORD Size;
  2458. STORAGE_PROTOCOL_SPECIFIC_DATA_EXT ProtocolSpecificData;
  2459. } STORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT, *PSTORAGE_PROTOCOL_DATA_DESCRIPTOR_EXT;
  2460. #if (_WIN32_WINNT >= 0x0601)
  2461. typedef struct _REQUEST_OPLOCK_INPUT_BUFFER {
  2462. WORD StructureVersion;
  2463. WORD StructureLength;
  2464. DWORD RequestedOplockLevel;
  2465. DWORD Flags;
  2466. } REQUEST_OPLOCK_INPUT_BUFFER, *PREQUEST_OPLOCK_INPUT_BUFFER;
  2467. typedef struct _REQUEST_OPLOCK_OUTPUT_BUFFER {
  2468. WORD StructureVersion;
  2469. WORD StructureLength;
  2470. DWORD OriginalOplockLevel;
  2471. DWORD NewOplockLevel;
  2472. DWORD Flags;
  2473. ACCESS_MASK AccessMode;
  2474. WORD ShareMode;
  2475. } REQUEST_OPLOCK_OUTPUT_BUFFER, *PREQUEST_OPLOCK_OUTPUT_BUFFER;
  2476. #define PERSISTENT_VOLUME_STATE_SHORT_NAME_CREATION_DISABLED (0x00000001)
  2477. typedef struct _BOOT_AREA_INFO {
  2478. ULONG BootSectorCount;
  2479. struct {
  2480. LARGE_INTEGER Offset;
  2481. } BootSectors[2];
  2482. } BOOT_AREA_INFO, *PBOOT_AREA_INFO;
  2483. typedef struct _RETRIEVAL_POINTER_BASE {
  2484. LARGE_INTEGER FileAreaOffset;
  2485. } RETRIEVAL_POINTER_BASE, *PRETRIEVAL_POINTER_BASE;
  2486. typedef struct _FILE_FS_PERSISTENT_VOLUME_INFORMATION {
  2487. ULONG VolumeFlags;
  2488. ULONG FlagMask;
  2489. ULONG Version;
  2490. ULONG Reserved;
  2491. } FILE_FS_PERSISTENT_VOLUME_INFORMATION, *PFILE_FS_PERSISTENT_VOLUME_INFORMATION;
  2492. typedef struct _FILE_SYSTEM_RECOGNITION_INFORMATION {
  2493. CHAR FileSystem[9];
  2494. } FILE_SYSTEM_RECOGNITION_INFORMATION, *PFILE_SYSTEM_RECOGNITION_INFORMATION;
  2495. typedef struct _FILE_SYSTEM_RECOGNITION_STRUCTURE {
  2496. UCHAR Jmp[3];
  2497. UCHAR FsName[8];
  2498. UCHAR MustBeZero[5];
  2499. ULONG Identifier;
  2500. USHORT Length;
  2501. USHORT Checksum;
  2502. } FILE_SYSTEM_RECOGNITION_STRUCTURE;
  2503. #define OPLOCK_LEVEL_CACHE_READ (0x00000001)
  2504. #define OPLOCK_LEVEL_CACHE_HANDLE (0x00000002)
  2505. #define OPLOCK_LEVEL_CACHE_WRITE (0x00000004)
  2506. #define REQUEST_OPLOCK_INPUT_FLAG_REQUEST (0x00000001)
  2507. #define REQUEST_OPLOCK_INPUT_FLAG_ACK (0x00000002)
  2508. #define REQUEST_OPLOCK_INPUT_FLAG_COMPLETE_ACK_ON_CLOSE (0x00000004)
  2509. #define REQUEST_OPLOCK_CURRENT_VERSION 1
  2510. #define REQUEST_OPLOCK_OUTPUT_FLAG_ACK_REQUIRED (0x00000001)
  2511. #define REQUEST_OPLOCK_OUTPUT_FLAG_MODES_PROVIDED (0x00000002)
  2512. #define SD_GLOBAL_CHANGE_TYPE_MACHINE_SID 1
  2513. typedef struct _SD_CHANGE_MACHINE_SID_INPUT {
  2514. USHORT CurrentMachineSIDOffset;
  2515. USHORT CurrentMachineSIDLength;
  2516. USHORT NewMachineSIDOffset;
  2517. USHORT NewMachineSIDLength;
  2518. } SD_CHANGE_MACHINE_SID_INPUT, *PSD_CHANGE_MACHINE_SID_INPUT;
  2519. typedef struct _SD_CHANGE_MACHINE_SID_OUTPUT {
  2520. ULONGLONG NumSDChangedSuccess;
  2521. ULONGLONG NumSDChangedFail;
  2522. ULONGLONG NumSDUnused;
  2523. ULONGLONG NumSDTotal;
  2524. ULONGLONG NumMftSDChangedSuccess;
  2525. ULONGLONG NumMftSDChangedFail;
  2526. ULONGLONG NumMftSDTotal;
  2527. } SD_CHANGE_MACHINE_SID_OUTPUT, *PSD_CHANGE_MACHINE_SID_OUTPUT;
  2528. #define ENCRYPTED_DATA_INFO_SPARSE_FILE 1
  2529. typedef struct _EXTENDED_ENCRYPTED_DATA_INFO {
  2530. ULONG ExtendedCode;
  2531. ULONG Length;
  2532. ULONG Flags;
  2533. ULONG Reserved;
  2534. } EXTENDED_ENCRYPTED_DATA_INFO, *PEXTENDED_ENCRYPTED_DATA_INFO;
  2535. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_INPUT {
  2536. DWORD Flags;
  2537. DWORD NumberOfClusters;
  2538. LARGE_INTEGER Cluster[1];
  2539. } LOOKUP_STREAM_FROM_CLUSTER_INPUT, *PLOOKUP_STREAM_FROM_CLUSTER_INPUT;
  2540. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_OUTPUT {
  2541. DWORD Offset;
  2542. DWORD NumberOfMatches;
  2543. DWORD BufferSizeRequired;
  2544. } LOOKUP_STREAM_FROM_CLUSTER_OUTPUT, *PLOOKUP_STREAM_FROM_CLUSTER_OUTPUT;
  2545. typedef struct _LOOKUP_STREAM_FROM_CLUSTER_ENTRY {
  2546. DWORD OffsetToNext;
  2547. DWORD Flags;
  2548. LARGE_INTEGER Reserved;
  2549. LARGE_INTEGER Cluster;
  2550. WCHAR FileName[1];
  2551. } LOOKUP_STREAM_FROM_CLUSTER_ENTRY, *PLOOKUP_STREAM_FROM_CLUSTER_ENTRY;
  2552. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_MASK 0xff000000
  2553. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_PAGE_FILE 0x00000001
  2554. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_DENY_DEFRAG_SET 0x00000002
  2555. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_FS_SYSTEM_FILE 0x00000004
  2556. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_FLAG_TXF_SYSTEM_FILE 0x00000008
  2557. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_DATA 0x01000000
  2558. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_INDEX 0x02000000
  2559. #define LOOKUP_STREAM_FROM_CLUSTER_ENTRY_ATTRIBUTE_SYSTEM 0x03000000
  2560. typedef struct _FILE_TYPE_NOTIFICATION_INPUT {
  2561. ULONG Flags;
  2562. ULONG NumFileTypeIDs;
  2563. GUID FileTypeID[1];
  2564. } FILE_TYPE_NOTIFICATION_INPUT, *PFILE_TYPE_NOTIFICATION_INPUT;
  2565. #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_BEGIN 0x00000001
  2566. #define FILE_TYPE_NOTIFICATION_FLAG_USAGE_END 0x00000002
  2567. #define FSCTL_QUERY_DEPENDENT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,124, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2568. #define FSCTL_SD_GLOBAL_CHANGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,125, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2569. #define FSCTL_LOOKUP_STREAM_FROM_CLUSTER CTL_CODE(FILE_DEVICE_FILE_SYSTEM,127, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2570. #define FSCTL_TXFS_WRITE_BACKUP_INFORMATION2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,128, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2571. #define FSCTL_FILE_TYPE_NOTIFICATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,129, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2572. #define FSCTL_GET_BOOT_AREA_INFO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,140, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2573. #define FSCTL_GET_RETRIEVAL_POINTER_BASE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,141, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2574. #define FSCTL_SET_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2575. #define FSCTL_QUERY_PERSISTENT_VOLUME_STATE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2576. #define FSCTL_REQUEST_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,144,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2577. #define FSCTL_CSV_TUNNEL_REQUEST CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2578. #define FSCTL_IS_CSV_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2579. #define FSCTL_QUERY_FILE_SYSTEM_RECOGNITION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,147, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2580. #define FSCTL_CSV_GET_VOLUME_PATH_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,148, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2581. #define FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2582. #define FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2583. #define FSCTL_IS_FILE_ON_CSV_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS)
  2584. typedef struct _CSV_NAMESPACE_INFO {
  2585. ULONG Version;
  2586. ULONG DeviceNumber;
  2587. LARGE_INTEGER StartingOffset;
  2588. ULONG SectorSize;
  2589. } CSV_NAMESPACE_INFO, *PCSV_NAMESPACE_INFO;
  2590. #define CSV_NAMESPACE_INFO_V1 (sizeof(CSV_NAMESPACE_INFO))
  2591. #define CSV_INVALID_DEVICE_NUMBER 0xFFFFFFFF
  2592. #endif /*(_WIN32_WINNT >= 0x0601)*/
  2593. #endif /* _FILESYSTEMFSCTL_ */
  2594. #define IOCTL_VOLUME_BASE ((DWORD) 'V')
  2595. #define IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS CTL_CODE(IOCTL_VOLUME_BASE,0,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2596. #define IOCTL_VOLUME_SUPPORTS_ONLINE_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,1,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2597. #define IOCTL_VOLUME_ONLINE CTL_CODE(IOCTL_VOLUME_BASE,2,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  2598. #define IOCTL_VOLUME_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,3,METHOD_BUFFERED,FILE_READ_ACCESS | FILE_WRITE_ACCESS)
  2599. #define IOCTL_VOLUME_IS_OFFLINE CTL_CODE(IOCTL_VOLUME_BASE,4,METHOD_BUFFERED, FILE_ANY_ACCESS)
  2600. #define IOCTL_VOLUME_IS_IO_CAPABLE CTL_CODE(IOCTL_VOLUME_BASE,5,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2601. #define IOCTL_VOLUME_QUERY_FAILOVER_SET CTL_CODE(IOCTL_VOLUME_BASE,6,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2602. #define IOCTL_VOLUME_QUERY_VOLUME_NUMBER CTL_CODE(IOCTL_VOLUME_BASE,7,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2603. #define IOCTL_VOLUME_LOGICAL_TO_PHYSICAL CTL_CODE(IOCTL_VOLUME_BASE,8,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2604. #define IOCTL_VOLUME_PHYSICAL_TO_LOGICAL CTL_CODE(IOCTL_VOLUME_BASE,9,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2605. #define IOCTL_VOLUME_IS_CLUSTERED CTL_CODE(IOCTL_VOLUME_BASE,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2606. #define IOCTL_VOLUME_GET_GPT_ATTRIBUTES CTL_CODE(IOCTL_VOLUME_BASE,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2607. typedef struct _DISK_EXTENT {
  2608. DWORD DiskNumber;
  2609. LARGE_INTEGER StartingOffset;
  2610. LARGE_INTEGER ExtentLength;
  2611. } DISK_EXTENT,*PDISK_EXTENT;
  2612. typedef struct _VOLUME_DISK_EXTENTS {
  2613. DWORD NumberOfDiskExtents;
  2614. DISK_EXTENT Extents[1];
  2615. } VOLUME_DISK_EXTENTS,*PVOLUME_DISK_EXTENTS;
  2616. #if (_WIN32_WINNT >= 0x0603)
  2617. #define FSCTL_SET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,195,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  2618. #define FSCTL_GET_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,196,METHOD_BUFFERED,FILE_ANY_ACCESS)
  2619. #define FSCTL_DELETE_EXTERNAL_BACKING CTL_CODE(FILE_DEVICE_FILE_SYSTEM,197,METHOD_BUFFERED,FILE_SPECIAL_ACCESS)
  2620. #define WOF_CURRENT_VERSION 1
  2621. typedef struct _WOF_EXTERNAL_INFO {
  2622. DWORD Version;
  2623. DWORD Provider;
  2624. } WOF_EXTERNAL_INFO, *PWOF_EXTERNAL_INFO;
  2625. #endif /*(_WIN32_WINNT >= 0x0603)*/
  2626. #if (_WIN32_WINNT >= 0x0A00)
  2627. #define WOF_PROVIDER_FILE 2
  2628. #define FILE_PROVIDER_CURRENT_VERSION 1
  2629. #define FILE_PROVIDER_COMPRESSION_XPRESS4K 0
  2630. #define FILE_PROVIDER_COMPRESSION_LZX 1
  2631. #define FILE_PROVIDER_COMPRESSION_XPRESS8K 2
  2632. #define FILE_PROVIDER_COMPRESSION_XPRESS16K 3
  2633. typedef struct _FILE_PROVIDER_EXTERNAL_INFO_V0 {
  2634. DWORD Version;
  2635. DWORD Algorithm;
  2636. } FILE_PROVIDER_EXTERNAL_INFO_V0, *PFILE_PROVIDER_EXTERNAL_INFO_V0;
  2637. typedef struct _FILE_PROVIDER_EXTERNAL_INFO_V1 {
  2638. DWORD Version;
  2639. DWORD Algorithm;
  2640. DWORD Flags;
  2641. } FILE_PROVIDER_EXTERNAL_INFO_V1, *PFILE_PROVIDER_EXTERNAL_INFO_V1;
  2642. #endif /*(_WIN32_WINNT >= 0x0A00)*/
  2643. #endif /* _WINIOCTL_ */