1use shared::basetsd::DWORD64;
8use shared::devpropdef::DEVPROPKEY;
9use shared::guiddef::GUID;
10use shared::minwindef::{BYTE, DWORD, WORD};
11use um::winnt::{
12 ANYSIZE_ARRAY, BOOLEAN, FILE_READ_DATA, FILE_WRITE_DATA, HANDLE, LARGE_INTEGER, WCHAR,
13};
14DEFINE_GUID!{GUID_DEVINTERFACE_DISK,
15 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
16DEFINE_GUID!{GUID_DEVINTERFACE_CDROM,
17 0x53f56308, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
18DEFINE_GUID!{GUID_DEVINTERFACE_PARTITION,
19 0x53f5630a, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
20DEFINE_GUID!{GUID_DEVINTERFACE_TAPE,
21 0x53f5630b, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
22DEFINE_GUID!{GUID_DEVINTERFACE_WRITEONCEDISK,
23 0x53f5630c, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
24DEFINE_GUID!{GUID_DEVINTERFACE_VOLUME,
25 0x53f5630d, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
26DEFINE_GUID!{GUID_DEVINTERFACE_MEDIUMCHANGER,
27 0x53f56310, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
28DEFINE_GUID!{GUID_DEVINTERFACE_FLOPPY,
29 0x53f56311, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
30DEFINE_GUID!{GUID_DEVINTERFACE_CDCHANGER,
31 0x53f56312, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
32DEFINE_GUID!{GUID_DEVINTERFACE_STORAGEPORT,
33 0x2accfe60, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b}
34DEFINE_GUID!{GUID_DEVINTERFACE_VMLUN,
35 0x6f416619, 0x9f29, 0x42a5, 0xb2, 0x0b, 0x37, 0xe2, 0x19, 0xca, 0x02, 0xb0}
36DEFINE_GUID!{GUID_DEVINTERFACE_SES,
37 0x1790c9ec, 0x47d5, 0x4df3, 0xb5, 0xaf, 0x9a, 0xdf, 0x3c, 0xf2, 0x3e, 0x48}
38DEFINE_GUID!{WDI_STORAGE_PREDICT_FAILURE_DPS_GUID,
39 0xe9f2d03a, 0x747c, 0x41c2, 0xbb, 0x9a, 0x02, 0xc6, 0x2b, 0x6d, 0x5f, 0xcb}
40DEFINE_GUID!{GUID_DEVINTERFACE_SERVICE_VOLUME,
41 0x6ead3d82, 0x25ec, 0x46bc, 0xb7, 0xfd, 0xc1, 0xf0, 0xdf, 0x8f, 0x50, 0x37}
42DEFINE_GUID!{GUID_DEVINTERFACE_HIDDEN_VOLUME,
43 0x7f108a28, 0x9833, 0x4b3b, 0xb7, 0x80, 0x2c, 0x6b, 0x5f, 0xa5, 0xc0, 0x62}
44DEFINE_GUID!{GUID_DEVINTERFACE_UNIFIED_ACCESS_RPMB,
45 0x27447c21, 0xbcc3, 0x4d07, 0xa0, 0x5b, 0xa3, 0x39, 0x5b, 0xb4, 0xee, 0xe7}
46DEFINE_GUID!{GUID_DEVINTERFACE_SCM_PHYSICAL_DEVICE,
47 0x4283609d, 0x4dc2, 0x43be, 0xbb, 0xb4, 0x4f, 0x15, 0xdf, 0xce, 0x2c, 0x61}
48DEFINE_GUID!{GUID_SCM_PD_HEALTH_NOTIFICATION,
49 0x9da2d386, 0x72f5, 0x4ee3, 0x81, 0x55, 0xec, 0xa0, 0x67, 0x8e, 0x3b, 0x06}
50DEFINE_GUID!{GUID_SCM_PD_PASSTHROUGH_INVDIMM,
51 0x4309AC30, 0x0D11, 0x11E4, 0x91, 0x91, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}
52DEFINE_GUID!{GUID_DEVINTERFACE_COMPORT,
53 0x86E0D1E0, 0x8089, 0x11D0, 0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73}
54DEFINE_GUID!{GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR,
55 0x4D36E978, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}
56DEFINE_DEVPROPKEY!{DEVPKEY_Storage_Portable,
58 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 2}
59DEFINE_DEVPROPKEY!{DEVPKEY_Storage_Removable_Media,
60 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 3}
61DEFINE_DEVPROPKEY!{DEVPKEY_Storage_System_Critical,
62 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 4}
63pub type DEVICE_TYPE = DWORD;
65pub const FILE_DEVICE_BEEP: DEVICE_TYPE = 0x00000001;
66pub const FILE_DEVICE_CD_ROM: DEVICE_TYPE = 0x00000002;
67pub const FILE_DEVICE_CD_ROM_FILE_SYSTEM: DEVICE_TYPE = 0x00000003;
68pub const FILE_DEVICE_CONTROLLER: DEVICE_TYPE = 0x00000004;
69pub const FILE_DEVICE_DATALINK: DEVICE_TYPE = 0x00000005;
70pub const FILE_DEVICE_DFS: DEVICE_TYPE = 0x00000006;
71pub const FILE_DEVICE_DISK: DEVICE_TYPE = 0x00000007;
72pub const FILE_DEVICE_DISK_FILE_SYSTEM: DEVICE_TYPE = 0x00000008;
73pub const FILE_DEVICE_FILE_SYSTEM: DEVICE_TYPE = 0x00000009;
74pub const FILE_DEVICE_INPORT_PORT: DEVICE_TYPE = 0x0000000a;
75pub const FILE_DEVICE_KEYBOARD: DEVICE_TYPE = 0x0000000b;
76pub const FILE_DEVICE_MAILSLOT: DEVICE_TYPE = 0x0000000c;
77pub const FILE_DEVICE_MIDI_IN: DEVICE_TYPE = 0x0000000d;
78pub const FILE_DEVICE_MIDI_OUT: DEVICE_TYPE = 0x0000000e;
79pub const FILE_DEVICE_MOUSE: DEVICE_TYPE = 0x0000000f;
80pub const FILE_DEVICE_MULTI_UNC_PROVIDER: DEVICE_TYPE = 0x00000010;
81pub const FILE_DEVICE_NAMED_PIPE: DEVICE_TYPE = 0x00000011;
82pub const FILE_DEVICE_NETWORK: DEVICE_TYPE = 0x00000012;
83pub const FILE_DEVICE_NETWORK_BROWSER: DEVICE_TYPE = 0x00000013;
84pub const FILE_DEVICE_NETWORK_FILE_SYSTEM: DEVICE_TYPE = 0x00000014;
85pub const FILE_DEVICE_NULL: DEVICE_TYPE = 0x00000015;
86pub const FILE_DEVICE_PARALLEL_PORT: DEVICE_TYPE = 0x00000016;
87pub const FILE_DEVICE_PHYSICAL_NETCARD: DEVICE_TYPE = 0x00000017;
88pub const FILE_DEVICE_PRINTER: DEVICE_TYPE = 0x00000018;
89pub const FILE_DEVICE_SCANNER: DEVICE_TYPE = 0x00000019;
90pub const FILE_DEVICE_SERIAL_MOUSE_PORT: DEVICE_TYPE = 0x0000001a;
91pub const FILE_DEVICE_SERIAL_PORT: DEVICE_TYPE = 0x0000001b;
92pub const FILE_DEVICE_SCREEN: DEVICE_TYPE = 0x0000001c;
93pub const FILE_DEVICE_SOUND: DEVICE_TYPE = 0x0000001d;
94pub const FILE_DEVICE_STREAMS: DEVICE_TYPE = 0x0000001e;
95pub const FILE_DEVICE_TAPE: DEVICE_TYPE = 0x0000001f;
96pub const FILE_DEVICE_TAPE_FILE_SYSTEM: DEVICE_TYPE = 0x00000020;
97pub const FILE_DEVICE_TRANSPORT: DEVICE_TYPE = 0x00000021;
98pub const FILE_DEVICE_UNKNOWN: DEVICE_TYPE = 0x00000022;
99pub const FILE_DEVICE_VIDEO: DEVICE_TYPE = 0x00000023;
100pub const FILE_DEVICE_VIRTUAL_DISK: DEVICE_TYPE = 0x00000024;
101pub const FILE_DEVICE_WAVE_IN: DEVICE_TYPE = 0x00000025;
102pub const FILE_DEVICE_WAVE_OUT: DEVICE_TYPE = 0x00000026;
103pub const FILE_DEVICE_8042_PORT: DEVICE_TYPE = 0x00000027;
104pub const FILE_DEVICE_NETWORK_REDIRECTOR: DEVICE_TYPE = 0x00000028;
105pub const FILE_DEVICE_BATTERY: DEVICE_TYPE = 0x00000029;
106pub const FILE_DEVICE_BUS_EXTENDER: DEVICE_TYPE = 0x0000002a;
107pub const FILE_DEVICE_MODEM: DEVICE_TYPE = 0x0000002b;
108pub const FILE_DEVICE_VDM: DEVICE_TYPE = 0x0000002c;
109pub const FILE_DEVICE_MASS_STORAGE: DEVICE_TYPE = 0x0000002d;
110pub const FILE_DEVICE_SMB: DEVICE_TYPE = 0x0000002e;
111pub const FILE_DEVICE_KS: DEVICE_TYPE = 0x0000002f;
112pub const FILE_DEVICE_CHANGER: DEVICE_TYPE = 0x00000030;
113pub const FILE_DEVICE_SMARTCARD: DEVICE_TYPE = 0x00000031;
114pub const FILE_DEVICE_ACPI: DEVICE_TYPE = 0x00000032;
115pub const FILE_DEVICE_DVD: DEVICE_TYPE = 0x00000033;
116pub const FILE_DEVICE_FULLSCREEN_VIDEO: DEVICE_TYPE = 0x00000034;
117pub const FILE_DEVICE_DFS_FILE_SYSTEM: DEVICE_TYPE = 0x00000035;
118pub const FILE_DEVICE_DFS_VOLUME: DEVICE_TYPE = 0x00000036;
119pub const FILE_DEVICE_SERENUM: DEVICE_TYPE = 0x00000037;
120pub const FILE_DEVICE_TERMSRV: DEVICE_TYPE = 0x00000038;
121pub const FILE_DEVICE_KSEC: DEVICE_TYPE = 0x00000039;
122pub const FILE_DEVICE_FIPS: DEVICE_TYPE = 0x0000003A;
123pub const FILE_DEVICE_INFINIBAND: DEVICE_TYPE = 0x0000003B;
124pub const FILE_DEVICE_VMBUS: DEVICE_TYPE = 0x0000003E;
125pub const FILE_DEVICE_CRYPT_PROVIDER: DEVICE_TYPE = 0x0000003F;
126pub const FILE_DEVICE_WPD: DEVICE_TYPE = 0x00000040;
127pub const FILE_DEVICE_BLUETOOTH: DEVICE_TYPE = 0x00000041;
128pub const FILE_DEVICE_MT_COMPOSITE: DEVICE_TYPE = 0x00000042;
129pub const FILE_DEVICE_MT_TRANSPORT: DEVICE_TYPE = 0x00000043;
130pub const FILE_DEVICE_BIOMETRIC: DEVICE_TYPE = 0x00000044;
131pub const FILE_DEVICE_PMI: DEVICE_TYPE = 0x00000045;
132pub const FILE_DEVICE_EHSTOR: DEVICE_TYPE = 0x00000046;
133pub const FILE_DEVICE_DEVAPI: DEVICE_TYPE = 0x00000047;
134pub const FILE_DEVICE_GPIO: DEVICE_TYPE = 0x00000048;
135pub const FILE_DEVICE_USBEX: DEVICE_TYPE = 0x00000049;
136pub const FILE_DEVICE_CONSOLE: DEVICE_TYPE = 0x00000050;
137pub const FILE_DEVICE_NFP: DEVICE_TYPE = 0x00000051;
138pub const FILE_DEVICE_SYSENV: DEVICE_TYPE = 0x00000052;
139pub const FILE_DEVICE_VIRTUAL_BLOCK: DEVICE_TYPE = 0x00000053;
140pub const FILE_DEVICE_POINT_OF_SERVICE: DEVICE_TYPE = 0x00000054;
141pub const FILE_DEVICE_STORAGE_REPLICATION: DEVICE_TYPE = 0x00000055;
142pub const FILE_DEVICE_TRUST_ENV: DEVICE_TYPE = 0x00000056;
143pub const FILE_DEVICE_UCM: DEVICE_TYPE = 0x00000057;
144pub const FILE_DEVICE_UCMTCPCI: DEVICE_TYPE = 0x00000058;
145#[inline]
146pub fn CTL_CODE(
147 DeviceType: DWORD,
148 Function: DWORD,
149 Method: DWORD,
150 Access: DWORD,
151) -> DWORD {
152 (DeviceType << 16) | (Access << 14) | (Function << 2) | Method
153}
154pub const METHOD_BUFFERED: DWORD = 0;
156pub const METHOD_IN_DIRECT: DWORD = 1;
157pub const METHOD_OUT_DIRECT: DWORD = 2;
158pub const METHOD_NEITHER: DWORD = 3;
159pub const FILE_ANY_ACCESS: DWORD = 0;
161pub const FILE_SPECIAL_ACCESS: DWORD = FILE_ANY_ACCESS;
162pub const FILE_READ_ACCESS: DWORD = 0x0001;
163pub const FILE_WRITE_ACCESS: DWORD = 0x0002;
164pub const IOCTL_STORAGE_BASE: DWORD = FILE_DEVICE_MASS_STORAGE;
166pub const IOCTL_STORAGE_CHECK_VERIFY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0200,
167 METHOD_BUFFERED, FILE_READ_ACCESS);
168pub const IOCTL_STORAGE_CHECK_VERIFY2: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0200,
169 METHOD_BUFFERED, FILE_ANY_ACCESS);
170pub const IOCTL_STORAGE_MEDIA_REMOVAL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0201,
171 METHOD_BUFFERED, FILE_READ_ACCESS);
172pub const IOCTL_STORAGE_EJECT_MEDIA: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0202,
173 METHOD_BUFFERED, FILE_READ_ACCESS);
174pub const IOCTL_STORAGE_LOAD_MEDIA: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0203,
175 METHOD_BUFFERED, FILE_READ_ACCESS);
176pub const IOCTL_STORAGE_LOAD_MEDIA2: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0203,
177 METHOD_BUFFERED, FILE_ANY_ACCESS);
178pub const IOCTL_STORAGE_RESERVE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED,
179 FILE_READ_ACCESS);
180pub const IOCTL_STORAGE_RELEASE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED,
181 FILE_READ_ACCESS);
182pub const IOCTL_STORAGE_FIND_NEW_DEVICES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0206,
183 METHOD_BUFFERED, FILE_READ_ACCESS);
184pub const IOCTL_STORAGE_EJECTION_CONTROL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0250,
185 METHOD_BUFFERED, FILE_ANY_ACCESS);
186pub const IOCTL_STORAGE_MCN_CONTROL: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0251,
187 METHOD_BUFFERED, FILE_ANY_ACCESS);
188pub const IOCTL_STORAGE_GET_MEDIA_TYPES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0300,
189 METHOD_BUFFERED, FILE_ANY_ACCESS);
190pub const IOCTL_STORAGE_GET_MEDIA_TYPES_EX: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0301,
191 METHOD_BUFFERED, FILE_ANY_ACCESS);
192pub const IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0304,
193 METHOD_BUFFERED, FILE_ANY_ACCESS);
194pub const IOCTL_STORAGE_GET_HOTPLUG_INFO: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0305,
195 METHOD_BUFFERED, FILE_ANY_ACCESS);
196pub const IOCTL_STORAGE_SET_HOTPLUG_INFO: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0306,
197 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
198pub const IOCTL_STORAGE_RESET_BUS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED,
199 FILE_READ_ACCESS);
200pub const IOCTL_STORAGE_RESET_DEVICE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0401,
201 METHOD_BUFFERED, FILE_READ_ACCESS);
202pub const IOCTL_STORAGE_BREAK_RESERVATION: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0405,
203 METHOD_BUFFERED, FILE_READ_ACCESS);
204pub const IOCTL_STORAGE_PERSISTENT_RESERVE_IN: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0406,
205 METHOD_BUFFERED, FILE_READ_ACCESS);
206pub const IOCTL_STORAGE_PERSISTENT_RESERVE_OUT: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0407,
207 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
208pub const IOCTL_STORAGE_GET_DEVICE_NUMBER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0420,
209 METHOD_BUFFERED, FILE_ANY_ACCESS);
210pub const IOCTL_STORAGE_PREDICT_FAILURE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0440,
211 METHOD_BUFFERED, FILE_ANY_ACCESS);
212pub const IOCTL_STORAGE_FAILURE_PREDICTION_CONFIG: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0441,
213 METHOD_BUFFERED, FILE_ANY_ACCESS);
214pub const IOCTL_STORAGE_READ_CAPACITY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0450,
215 METHOD_BUFFERED, FILE_READ_ACCESS);
216pub const IOCTL_STORAGE_GET_DEVICE_TELEMETRY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0470,
217 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
218pub const IOCTL_STORAGE_DEVICE_TELEMETRY_NOTIFY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0471,
219 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
220pub const IOCTL_STORAGE_DEVICE_TELEMETRY_QUERY_CAPS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
221 0x0472, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
222pub const IOCTL_STORAGE_GET_DEVICE_TELEMETRY_RAW: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0473,
223 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
224pub const IOCTL_STORAGE_QUERY_PROPERTY: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0500,
225 METHOD_BUFFERED, FILE_ANY_ACCESS);
226pub const IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0501,
227 METHOD_BUFFERED, FILE_WRITE_ACCESS);
228pub const IOCTL_STORAGE_GET_LB_PROVISIONING_MAP_RESOURCES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
229 0x0502, METHOD_BUFFERED, FILE_READ_ACCESS);
230pub const IOCTL_STORAGE_GET_BC_PROPERTIES: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0600,
231 METHOD_BUFFERED, FILE_READ_ACCESS);
232pub const IOCTL_STORAGE_ALLOCATE_BC_STREAM: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0601,
233 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
234pub const IOCTL_STORAGE_FREE_BC_STREAM: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0602,
235 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
236pub const IOCTL_STORAGE_CHECK_PRIORITY_HINT_SUPPORT: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE,
237 0x0620, METHOD_BUFFERED, FILE_ANY_ACCESS);
238pub const IOCTL_STORAGE_START_DATA_INTEGRITY_CHECK: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0621,
239 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
240pub const IOCTL_STORAGE_STOP_DATA_INTEGRITY_CHECK: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0622,
241 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
242pub const OBSOLETE_IOCTL_STORAGE_RESET_BUS: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0400,
243 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
244pub const OBSOLETE_IOCTL_STORAGE_RESET_DEVICE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0401,
245 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
246pub const IOCTL_STORAGE_ENABLE_IDLE_POWER: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0720,
247 METHOD_BUFFERED, FILE_ANY_ACCESS);
248pub const IOCTL_STORAGE_GET_IDLE_POWERUP_REASON: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0721,
249 METHOD_BUFFERED, FILE_ANY_ACCESS);
250pub const IOCTL_STORAGE_POWER_ACTIVE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0722,
251 METHOD_BUFFERED, FILE_ANY_ACCESS);
252pub const IOCTL_STORAGE_POWER_IDLE: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0723,
253 METHOD_BUFFERED, FILE_ANY_ACCESS);
254pub const IOCTL_STORAGE_EVENT_NOTIFICATION: DWORD = CTL_CODE!(IOCTL_STORAGE_BASE, 0x0724,
255 METHOD_BUFFERED, FILE_ANY_ACCESS);
256STRUCT!{struct STORAGE_DEVICE_NUMBER {
258 DeviceType: DEVICE_TYPE,
259 DeviceNumber: DWORD,
260 PartitionNumber: DWORD,
261}}
262pub type PSTORAGE_DEVICE_NUMBER = *mut STORAGE_DEVICE_NUMBER;
263STRUCT!{struct STORAGE_DEVICE_NUMBERS {
264 NumberOfDevices: DWORD,
265 Devices: [STORAGE_DEVICE_NUMBER; ANYSIZE_ARRAY],
266}}
267pub type PSTORAGE_DEVICE_NUMBERS = *mut STORAGE_DEVICE_NUMBERS;
268ENUM!{enum STORAGE_QUERY_TYPE {
270 PropertyStandardQuery = 0,
271 PropertyExistsQuery,
272 PropertyMaskQuery,
273 PropertyQueryMaxDefined,
274}}
275pub type PSTORAGE_QUERY_TYPE = *mut STORAGE_QUERY_TYPE;
276ENUM!{enum STORAGE_PROPERTY_ID {
277 StorageDeviceProperty = 0,
278 StorageAdapterProperty,
279 StorageDeviceIdProperty,
280 StorageDeviceUniqueIdProperty,
281 StorageDeviceWriteCacheProperty,
282 StorageMiniportProperty,
283 StorageAccessAlignmentProperty,
284 StorageDeviceSeekPenaltyProperty,
285 StorageDeviceTrimProperty,
286 StorageDeviceWriteAggregationProperty,
287 StorageDeviceDeviceTelemetryProperty,
288 StorageDeviceLBProvisioningProperty,
289 StorageDevicePowerProperty,
290 StorageDeviceCopyOffloadProperty,
291 StorageDeviceResiliencyProperty,
292 StorageDeviceMediumProductType,
293 StorageAdapterCryptoProperty,
294 StorageDeviceIoCapabilityProperty = 48,
295 StorageAdapterProtocolSpecificProperty,
296 StorageDeviceProtocolSpecificProperty,
297 StorageAdapterTemperatureProperty,
298 StorageDeviceTemperatureProperty,
299 StorageAdapterPhysicalTopologyProperty,
300 StorageDevicePhysicalTopologyProperty,
301 StorageDeviceAttributesProperty,
302 StorageDeviceManagementStatus,
303 StorageAdapterSerialNumberProperty,
304 StorageDeviceLocationProperty,
305 StorageDeviceNumaProperty,
306 StorageDeviceZonedDeviceProperty,
307 StorageDeviceUnsafeShutdownCount,
308}}
309pub type PSTORAGE_PROPERTY_ID = *mut STORAGE_PROPERTY_ID;
310STRUCT!{struct STORAGE_PROPERTY_QUERY {
311 PropertyId: STORAGE_PROPERTY_ID,
312 QueryType: STORAGE_QUERY_TYPE,
313 AdditionalParameters: [BYTE; 1],
314}}
315pub type PSTORAGE_PROPERTY_QUERY = *mut STORAGE_PROPERTY_QUERY;
316STRUCT!{struct DEVICE_TRIM_DESCRIPTOR {
318 Version: DWORD,
319 Size: DWORD,
320 TrimEnabled: BOOLEAN,
321}}
322pub type PDEVICE_TRIM_DESCRIPTOR = *mut DEVICE_TRIM_DESCRIPTOR;
323pub const IOCTL_DISK_BASE: DWORD = FILE_DEVICE_DISK;
325pub const IOCTL_DISK_GET_DRIVE_GEOMETRY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0000,
326 METHOD_BUFFERED, FILE_ANY_ACCESS);
327pub const IOCTL_DISK_GET_PARTITION_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0001,
328 METHOD_BUFFERED, FILE_READ_ACCESS);
329pub const IOCTL_DISK_SET_PARTITION_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0002,
330 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
331pub const IOCTL_DISK_GET_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0003,
332 METHOD_BUFFERED, FILE_READ_ACCESS);
333pub const IOCTL_DISK_SET_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0004,
334 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
335pub const IOCTL_DISK_VERIFY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED,
336 FILE_ANY_ACCESS);
337pub const IOCTL_DISK_FORMAT_TRACKS: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED,
338 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
339pub const IOCTL_DISK_REASSIGN_BLOCKS: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED,
340 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
341pub const IOCTL_DISK_PERFORMANCE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED,
342 FILE_ANY_ACCESS);
343pub const IOCTL_DISK_IS_WRITABLE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED,
344 FILE_ANY_ACCESS);
345pub const IOCTL_DISK_LOGGING: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED,
346 FILE_ANY_ACCESS);
347pub const IOCTL_DISK_FORMAT_TRACKS_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000b,
348 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
349pub const IOCTL_DISK_HISTOGRAM_STRUCTURE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000c,
350 METHOD_BUFFERED, FILE_ANY_ACCESS);
351pub const IOCTL_DISK_HISTOGRAM_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED,
352 FILE_ANY_ACCESS);
353pub const IOCTL_DISK_HISTOGRAM_RESET: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED,
354 FILE_ANY_ACCESS);
355pub const IOCTL_DISK_REQUEST_STRUCTURE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x000f,
356 METHOD_BUFFERED, FILE_ANY_ACCESS);
357pub const IOCTL_DISK_REQUEST_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED,
358 FILE_ANY_ACCESS);
359pub const IOCTL_DISK_PERFORMANCE_OFF: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0018, METHOD_BUFFERED,
360 FILE_ANY_ACCESS);
361pub const IOCTL_DISK_CONTROLLER_NUMBER: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0011,
362 METHOD_BUFFERED, FILE_ANY_ACCESS);
363pub const SMART_GET_VERSION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED,
364 FILE_READ_ACCESS);
365pub const SMART_SEND_DRIVE_COMMAND: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED,
366 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
367pub const SMART_RCV_DRIVE_DATA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED,
368 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
369pub const IOCTL_DISK_GET_PARTITION_INFO_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0012,
370 METHOD_BUFFERED, FILE_ANY_ACCESS);
371pub const IOCTL_DISK_SET_PARTITION_INFO_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0013,
372 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
373pub const IOCTL_DISK_GET_DRIVE_LAYOUT_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0014,
374 METHOD_BUFFERED, FILE_ANY_ACCESS);
375pub const IOCTL_DISK_SET_DRIVE_LAYOUT_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0015,
376 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
377pub const IOCTL_DISK_CREATE_DISK: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0016, METHOD_BUFFERED,
378 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
379pub const IOCTL_DISK_GET_LENGTH_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0017, METHOD_BUFFERED,
380 FILE_READ_ACCESS);
381pub const IOCTL_DISK_GET_DRIVE_GEOMETRY_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0028,
382 METHOD_BUFFERED, FILE_ANY_ACCESS);
383pub const IOCTL_DISK_REASSIGN_BLOCKS_EX: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0029,
384 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
385pub const IOCTL_DISK_UPDATE_DRIVE_SIZE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0032,
386 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
387pub const IOCTL_DISK_GROW_PARTITION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0034, METHOD_BUFFERED,
388 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
389pub const IOCTL_DISK_GET_CACHE_INFORMATION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0035,
390 METHOD_BUFFERED, FILE_READ_ACCESS);
391pub const IOCTL_DISK_SET_CACHE_INFORMATION: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0036,
392 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
393pub const IOCTL_DISK_GET_WRITE_CACHE_STATE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0037,
394 METHOD_BUFFERED, FILE_READ_ACCESS);
395pub const OBSOLETE_DISK_GET_WRITE_CACHE_STATE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0037,
396 METHOD_BUFFERED, FILE_READ_ACCESS);
397pub const IOCTL_DISK_DELETE_DRIVE_LAYOUT: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0040,
398 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
399pub const IOCTL_DISK_UPDATE_PROPERTIES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0050,
400 METHOD_BUFFERED, FILE_ANY_ACCESS);
401pub const IOCTL_DISK_FORMAT_DRIVE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x00f3, METHOD_BUFFERED,
402 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
403pub const IOCTL_DISK_SENSE_DEVICE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x00f8, METHOD_BUFFERED,
404 FILE_ANY_ACCESS);
405pub const IOCTL_DISK_CHECK_VERIFY: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED,
406 FILE_READ_ACCESS);
407pub const IOCTL_DISK_MEDIA_REMOVAL: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED,
408 FILE_READ_ACCESS);
409pub const IOCTL_DISK_EJECT_MEDIA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED,
410 FILE_READ_ACCESS);
411pub const IOCTL_DISK_LOAD_MEDIA: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED,
412 FILE_READ_ACCESS);
413pub const IOCTL_DISK_RESERVE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED,
414 FILE_READ_ACCESS);
415pub const IOCTL_DISK_RELEASE: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED,
416 FILE_READ_ACCESS);
417pub const IOCTL_DISK_FIND_NEW_DEVICES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0206,
418 METHOD_BUFFERED, FILE_READ_ACCESS);
419pub const IOCTL_DISK_GET_MEDIA_TYPES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED,
420 FILE_ANY_ACCESS);
421pub const IOCTL_DISK_GET_DISK_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x003c,
422 METHOD_BUFFERED, FILE_ANY_ACCESS);
423pub const IOCTL_DISK_SET_DISK_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x003d,
424 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
425pub const IOCTL_DISK_RESET_SNAPSHOT_INFO: DWORD = CTL_CODE!(IOCTL_DISK_BASE, 0x0084,
426 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
427ENUM!{enum MEDIA_TYPE {
429 Unknown,
430 F5_1Pt2_512,
431 F3_1Pt44_512,
432 F3_2Pt88_512,
433 F3_20Pt8_512,
434 F3_720_512,
435 F5_360_512,
436 F5_320_512,
437 F5_320_1024,
438 F5_180_512,
439 F5_160_512,
440 RemovableMedia,
441 FixedMedia,
442 F3_120M_512,
443 F3_640_512,
444 F5_640_512,
445 F5_720_512,
446 F3_1Pt2_512,
447 F3_1Pt23_1024,
448 F5_1Pt23_1024,
449 F3_128Mb_512,
450 F3_230Mb_512,
451 F8_256_128,
452 F3_200Mb_512,
453 F3_240M_512,
454 F3_32M_512,
455}}
456pub type PMEDIA_TYPE = *mut MEDIA_TYPE;
457STRUCT!{struct DISK_GEOMETRY {
459 Cylinders: LARGE_INTEGER,
460 MediaType: MEDIA_TYPE,
461 TracksPerCylinder: DWORD,
462 SectorsPerTrack: DWORD,
463 BytesPerSector: DWORD,
464}}
465pub type PDISK_GEOMETRY = *mut DISK_GEOMETRY;
466DEFINE_GUID!{WMI_DISK_GEOMETRY_GUID,
467 0x25007f51, 0x57c2, 0x11d1, 0xa5, 0x28, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10}
468STRUCT!{struct PARTITION_INFORMATION {
469 StartingOffset: LARGE_INTEGER,
470 PartitionLength: LARGE_INTEGER,
471 HiddenSectors: DWORD,
472 PartitionNumber: DWORD,
473 PartitionType: BYTE,
474 BootIndicator: BOOLEAN,
475 RecognizedPartition: BOOLEAN,
476 RewritePartition: BOOLEAN,
477}}
478pub type PPARTITION_INFORMATION = *mut PARTITION_INFORMATION;
479STRUCT!{struct SET_PARTITION_INFORMATION {
480 PartitionType: BYTE,
481}}
482pub type PSET_PARTITION_INFORMATION = *mut SET_PARTITION_INFORMATION;
483STRUCT!{struct DRIVE_LAYOUT_INFORMATION {
484 PartitionCount: DWORD,
485 Signature: DWORD,
486 PartitionEntry: [PARTITION_INFORMATION; 1],
487}}
488pub type PDRIVE_LAYOUT_INFORMATION = *mut DRIVE_LAYOUT_INFORMATION;
489STRUCT!{struct VERIFY_INFORMATION {
490 StartingOffset: LARGE_INTEGER,
491 Length: DWORD,
492}}
493pub type PVERIFY_INFORMATION = *mut VERIFY_INFORMATION;
494STRUCT!{struct REASSIGN_BLOCKS {
495 Reserved: WORD,
496 Count: WORD,
497 BlockNumber: [DWORD; 1],
498}}
499pub type PREASSIGN_BLOCKS = *mut REASSIGN_BLOCKS;
500STRUCT!{#[repr(packed)] struct REASSIGN_BLOCKS_EX {
501 Reserved: WORD,
502 Count: WORD,
503 BlockNumber: [LARGE_INTEGER; 1],
504}}
505pub type PREASSIGN_BLOCKS_EX = *mut REASSIGN_BLOCKS_EX;
506ENUM!{enum PARTITION_STYLE {
507 PARTITION_STYLE_MBR,
508 PARTITION_STYLE_GPT,
509 PARTITION_STYLE_RAW,
510}}
511STRUCT!{struct PARTITION_INFORMATION_GPT {
512 PartitionType: GUID,
513 PartitionId: GUID,
514 Attributes: DWORD64,
515 Name: [WCHAR; 36],
516}}
517pub type PPARTITION_INFORMATION_GPT = *mut PARTITION_INFORMATION_GPT;
518STRUCT!{struct PARTITION_INFORMATION_MBR {
520 PartitionType: BYTE,
521 BootIndicator: BOOLEAN,
522 RecognizedPartition: BOOLEAN,
523 HiddenSectors: DWORD,
524 PartitionId: GUID,
525}}
526pub type PPARTITION_INFORMATION_MBR = *mut PARTITION_INFORMATION_MBR;
527pub type SET_PARTITION_INFORMATION_MBR = SET_PARTITION_INFORMATION;
528pub type SET_PARTITION_INFORMATION_GPT = PARTITION_INFORMATION_GPT;
529STRUCT!{struct SET_PARTITION_INFORMATION_EX {
530 PartitionStyle: PARTITION_STYLE,
531 u: SET_PARTITION_INFORMATION_EX_u,
532}}
533UNION!{union SET_PARTITION_INFORMATION_EX_u {
534 [u64; 14],
535 Mbr Mbr_mut: SET_PARTITION_INFORMATION_MBR,
536 Gpt Gpt_mut: SET_PARTITION_INFORMATION_GPT,
537}}
538STRUCT!{struct CREATE_DISK_GPT {
539 DiskId: GUID,
540 MaxPartitionCount: DWORD,
541}}
542pub type PCREATE_DISK_GPT = *mut CREATE_DISK_GPT;
543STRUCT!{struct CREATE_DISK_MBR {
544 Signature: DWORD,
545}}
546pub type PCREATE_DISK_MBR = *mut CREATE_DISK_MBR;
547STRUCT!{struct CREATE_DISK {
548 PartitionStyle: PARTITION_STYLE,
549 u: CREATE_DISK_u,
550}}
551pub type PCREATE_DISK = *mut CREATE_DISK;
552UNION!{union CREATE_DISK_u {
553 [u32; 5],
554 Mbr Mbr_mut: CREATE_DISK_MBR,
555 Gpt Gpt_mut: CREATE_DISK_GPT,
556}}
557STRUCT!{struct GET_LENGTH_INFORMATION {
558 Length: LARGE_INTEGER,
559}}
560pub type PGET_LENGTH_INFORMATION = *mut GET_LENGTH_INFORMATION;
561STRUCT!{struct PARTITION_INFORMATION_EX {
562 PartitionStyle: PARTITION_STYLE,
563 StartingOffset: LARGE_INTEGER,
564 PartitionLength: LARGE_INTEGER,
565 PartitionNumber: DWORD,
566 RewritePartition: BOOLEAN,
567 u: PARTITION_INFORMATION_EX_u,
568}}
569pub type PPARTITION_INFORMATION_EX = *mut PARTITION_INFORMATION_EX;
570UNION!{union PARTITION_INFORMATION_EX_u {
571 [u64; 14],
572 Mbr Mbr_mut: PARTITION_INFORMATION_MBR,
573 Gpt Gpt_mut: PARTITION_INFORMATION_GPT,
574}}
575STRUCT!{struct DRIVE_LAYOUT_INFORMATION_GPT {
576 DiskId: GUID,
577 StartingUsableOffset: LARGE_INTEGER,
578 UsableLength: LARGE_INTEGER,
579 MaxPartitionCount: DWORD,
580}}
581pub type PDRIVE_LAYOUT_INFORMATION_GPT = *mut DRIVE_LAYOUT_INFORMATION_GPT;
582STRUCT!{struct DRIVE_LAYOUT_INFORMATION_MBR {
583 Signature: DWORD,
584 CheckSum: DWORD,
585}}
586pub type PDRIVE_LAYOUT_INFORMATION_MBR = *mut DRIVE_LAYOUT_INFORMATION_MBR;
587STRUCT!{struct DRIVE_LAYOUT_INFORMATION_EX {
588 PartitionStyle: DWORD,
589 PartitionCount: DWORD,
590 u: DRIVE_LAYOUT_INFORMATION_EX_u,
591 PartitionEntry: [PARTITION_INFORMATION_EX; 1],
592}}
593pub type PDRIVE_LAYOUT_INFORMATION_EX = *mut DRIVE_LAYOUT_INFORMATION_EX;
594UNION! {union DRIVE_LAYOUT_INFORMATION_EX_u {
595 [u64; 5],
596 Mbr Mbr_mut: DRIVE_LAYOUT_INFORMATION_MBR,
597 Gpt Gpt_mut: DRIVE_LAYOUT_INFORMATION_GPT,
598}}
599STRUCT!{struct DISK_GEOMETRY_EX {
601 Geometry: DISK_GEOMETRY,
602 DiskSize: LARGE_INTEGER,
603 Data: [BYTE; 1],
604}}
605pub const IOCTL_CHANGER_BASE: DWORD = FILE_DEVICE_CHANGER;
607pub const IOCTL_CHANGER_GET_PARAMETERS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0000,
608 METHOD_BUFFERED, FILE_READ_ACCESS);
609pub const IOCTL_CHANGER_GET_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0001,
610 METHOD_BUFFERED, FILE_READ_ACCESS);
611pub const IOCTL_CHANGER_GET_PRODUCT_DATA: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0002,
612 METHOD_BUFFERED, FILE_READ_ACCESS);
613pub const IOCTL_CHANGER_SET_ACCESS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0004,
614 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
615pub const IOCTL_CHANGER_GET_ELEMENT_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0005,
616 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
617pub const IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0006,
618 METHOD_BUFFERED, FILE_READ_ACCESS);
619pub const IOCTL_CHANGER_SET_POSITION: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0007,
620 METHOD_BUFFERED, FILE_READ_ACCESS);
621pub const IOCTL_CHANGER_EXCHANGE_MEDIUM: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0008,
622 METHOD_BUFFERED, FILE_READ_ACCESS);
623pub const IOCTL_CHANGER_MOVE_MEDIUM: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x0009,
624 METHOD_BUFFERED, FILE_READ_ACCESS);
625pub const IOCTL_CHANGER_REINITIALIZE_TRANSPORT: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x000A,
626 METHOD_BUFFERED, FILE_READ_ACCESS);
627pub const IOCTL_CHANGER_QUERY_VOLUME_TAGS: DWORD = CTL_CODE!(IOCTL_CHANGER_BASE, 0x000B,
628 METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS);
629pub const IOCTL_SERIAL_LSRMST_INSERT: DWORD = CTL_CODE!(FILE_DEVICE_SERIAL_PORT, 31,
630 METHOD_BUFFERED, FILE_ANY_ACCESS);
631pub const IOCTL_SERENUM_EXPOSE_HARDWARE: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 128,
632 METHOD_BUFFERED, FILE_ANY_ACCESS);
633pub const IOCTL_SERENUM_REMOVE_HARDWARE: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 129,
634 METHOD_BUFFERED, FILE_ANY_ACCESS);
635pub const IOCTL_SERENUM_PORT_DESC: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 130,
636 METHOD_BUFFERED, FILE_ANY_ACCESS);
637pub const IOCTL_SERENUM_GET_PORT_NAME: DWORD = CTL_CODE!(FILE_DEVICE_SERENUM, 131,
638 METHOD_BUFFERED, FILE_ANY_ACCESS);
639pub const FSCTL_REQUEST_OPLOCK_LEVEL_1: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 0,
641 METHOD_BUFFERED, FILE_ANY_ACCESS);
642pub const FSCTL_REQUEST_OPLOCK_LEVEL_2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 1,
643 METHOD_BUFFERED, FILE_ANY_ACCESS);
644pub const FSCTL_REQUEST_BATCH_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 2,
645 METHOD_BUFFERED, FILE_ANY_ACCESS);
646pub const FSCTL_OPLOCK_BREAK_ACKNOWLEDGE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 3,
647 METHOD_BUFFERED, FILE_ANY_ACCESS);
648pub const FSCTL_OPBATCH_ACK_CLOSE_PENDING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 4,
649 METHOD_BUFFERED, FILE_ANY_ACCESS);
650pub const FSCTL_OPLOCK_BREAK_NOTIFY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 5,
651 METHOD_BUFFERED, FILE_ANY_ACCESS);
652pub const FSCTL_LOCK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED,
653 FILE_ANY_ACCESS);
654pub const FSCTL_UNLOCK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED,
655 FILE_ANY_ACCESS);
656pub const FSCTL_DISMOUNT_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED,
657 FILE_ANY_ACCESS);
658pub const FSCTL_IS_VOLUME_MOUNTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 10,
659 METHOD_BUFFERED, FILE_ANY_ACCESS);
660pub const FSCTL_IS_PATHNAME_VALID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 11,
661 METHOD_BUFFERED, FILE_ANY_ACCESS);
662pub const FSCTL_MARK_VOLUME_DIRTY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 12,
663 METHOD_BUFFERED, FILE_ANY_ACCESS);
664pub const FSCTL_QUERY_RETRIEVAL_POINTERS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 14,
665 METHOD_NEITHER, FILE_ANY_ACCESS);
666pub const FSCTL_GET_COMPRESSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED,
667 FILE_ANY_ACCESS);
668pub const FSCTL_SET_COMPRESSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED,
669 FILE_READ_DATA | FILE_WRITE_DATA);
670pub const FSCTL_SET_BOOTLOADER_ACCESSED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 19,
671 METHOD_NEITHER, FILE_ANY_ACCESS);
672pub const FSCTL_MARK_AS_SYSTEM_HIVE: DWORD = FSCTL_SET_BOOTLOADER_ACCESSED;
673pub const FSCTL_OPLOCK_BREAK_ACK_NO_2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 20,
674 METHOD_BUFFERED, FILE_ANY_ACCESS);
675pub const FSCTL_INVALIDATE_VOLUMES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 21,
676 METHOD_BUFFERED, FILE_ANY_ACCESS);
677pub const FSCTL_QUERY_FAT_BPB: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED,
678 FILE_ANY_ACCESS);
679pub const FSCTL_REQUEST_FILTER_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 23,
680 METHOD_BUFFERED, FILE_ANY_ACCESS);
681pub const FSCTL_FILESYSTEM_GET_STATISTICS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 24,
682 METHOD_BUFFERED, FILE_ANY_ACCESS);
683pub const FSCTL_GET_NTFS_VOLUME_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 25,
684 METHOD_BUFFERED, FILE_ANY_ACCESS);
685pub const FSCTL_GET_NTFS_FILE_RECORD: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 26,
686 METHOD_BUFFERED, FILE_ANY_ACCESS);
687pub const FSCTL_GET_VOLUME_BITMAP: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER,
688 FILE_ANY_ACCESS);
689pub const FSCTL_GET_RETRIEVAL_POINTERS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 28,
690 METHOD_NEITHER, FILE_ANY_ACCESS);
691pub const FSCTL_MOVE_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED,
692 FILE_SPECIAL_ACCESS);
693pub const FSCTL_IS_VOLUME_DIRTY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED,
694 FILE_ANY_ACCESS);
695pub const FSCTL_ALLOW_EXTENDED_DASD_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 32,
696 METHOD_NEITHER, FILE_ANY_ACCESS);
697pub const FSCTL_FIND_FILES_BY_SID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER,
698 FILE_ANY_ACCESS);
699pub const FSCTL_SET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED,
700 FILE_SPECIAL_ACCESS);
701pub const FSCTL_GET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED,
702 FILE_ANY_ACCESS);
703pub const FSCTL_DELETE_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED,
704 FILE_SPECIAL_ACCESS);
705pub const FSCTL_SET_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 41,
706 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
707pub const FSCTL_GET_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 42,
708 METHOD_BUFFERED, FILE_ANY_ACCESS);
709pub const FSCTL_DELETE_REPARSE_POINT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 43,
710 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
711pub const FSCTL_ENUM_USN_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 44,
712 METHOD_NEITHER, FILE_ANY_ACCESS);
713pub const FSCTL_SECURITY_ID_CHECK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER,
714 FILE_READ_DATA);
715pub const FSCTL_READ_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER,
716 FILE_ANY_ACCESS);
717pub const FSCTL_SET_OBJECT_ID_EXTENDED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 47,
718 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
719pub const FSCTL_CREATE_OR_GET_OBJECT_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 48,
720 METHOD_BUFFERED, FILE_ANY_ACCESS);
721pub const FSCTL_SET_SPARSE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED,
722 FILE_SPECIAL_ACCESS);
723pub const FSCTL_SET_ZERO_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED,
724 FILE_WRITE_DATA);
725pub const FSCTL_QUERY_ALLOCATED_RANGES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 51,
726 METHOD_NEITHER, FILE_READ_DATA);
727pub const FSCTL_ENABLE_UPGRADE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED,
728 FILE_WRITE_DATA);
729pub const FSCTL_SET_ENCRYPTION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER,
730 FILE_ANY_ACCESS);
731pub const FSCTL_ENCRYPTION_FSCTL_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 54,
732 METHOD_NEITHER, FILE_ANY_ACCESS);
733pub const FSCTL_WRITE_RAW_ENCRYPTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 55,
734 METHOD_NEITHER, FILE_SPECIAL_ACCESS);
735pub const FSCTL_READ_RAW_ENCRYPTED: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 56,
736 METHOD_NEITHER, FILE_SPECIAL_ACCESS);
737pub const FSCTL_CREATE_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 57,
738 METHOD_NEITHER, FILE_ANY_ACCESS);
739pub const FSCTL_READ_FILE_USN_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 58,
740 METHOD_NEITHER, FILE_ANY_ACCESS);
741pub const FSCTL_WRITE_USN_CLOSE_RECORD: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 59,
742 METHOD_NEITHER, FILE_ANY_ACCESS);
743pub const FSCTL_EXTEND_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED,
744 FILE_ANY_ACCESS);
745pub const FSCTL_QUERY_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 61,
746 METHOD_BUFFERED, FILE_ANY_ACCESS);
747pub const FSCTL_DELETE_USN_JOURNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 62,
748 METHOD_BUFFERED, FILE_ANY_ACCESS);
749pub const FSCTL_MARK_HANDLE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED,
750 FILE_ANY_ACCESS);
751pub const FSCTL_SIS_COPYFILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED,
752 FILE_ANY_ACCESS);
753pub const FSCTL_SIS_LINK_FILES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED,
754 FILE_READ_DATA | FILE_WRITE_DATA);
755pub const FSCTL_RECALL_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER,
756 FILE_ANY_ACCESS);
757pub const FSCTL_READ_FROM_PLEX: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT,
758 FILE_READ_DATA);
759pub const FSCTL_FILE_PREFETCH: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED,
760 FILE_SPECIAL_ACCESS);
761pub const FSCTL_MAKE_MEDIA_COMPATIBLE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 76,
762 METHOD_BUFFERED, FILE_WRITE_DATA);
763pub const FSCTL_SET_DEFECT_MANAGEMENT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 77,
764 METHOD_BUFFERED, FILE_WRITE_DATA);
765pub const FSCTL_QUERY_SPARING_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 78,
766 METHOD_BUFFERED, FILE_ANY_ACCESS);
767pub const FSCTL_QUERY_ON_DISK_VOLUME_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 79,
768 METHOD_BUFFERED, FILE_ANY_ACCESS);
769pub const FSCTL_SET_VOLUME_COMPRESSION_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 80,
770 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
771pub const FSCTL_TXFS_MODIFY_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 81, METHOD_BUFFERED,
772 FILE_WRITE_DATA);
773pub const FSCTL_TXFS_QUERY_RM_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 82,
774 METHOD_BUFFERED, FILE_READ_DATA);
775pub const FSCTL_TXFS_ROLLFORWARD_REDO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 84,
776 METHOD_BUFFERED, FILE_WRITE_DATA);
777pub const FSCTL_TXFS_ROLLFORWARD_UNDO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 85,
778 METHOD_BUFFERED, FILE_WRITE_DATA);
779pub const FSCTL_TXFS_START_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 86, METHOD_BUFFERED,
780 FILE_WRITE_DATA);
781pub const FSCTL_TXFS_SHUTDOWN_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 87, METHOD_BUFFERED,
782 FILE_WRITE_DATA);
783pub const FSCTL_TXFS_READ_BACKUP_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 88,
784 METHOD_BUFFERED, FILE_READ_DATA);
785pub const FSCTL_TXFS_WRITE_BACKUP_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 89,
786 METHOD_BUFFERED, FILE_WRITE_DATA);
787pub const FSCTL_TXFS_CREATE_SECONDARY_RM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 90,
788 METHOD_BUFFERED, FILE_WRITE_DATA);
789pub const FSCTL_TXFS_GET_METADATA_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 91,
790 METHOD_BUFFERED, FILE_READ_DATA);
791pub const FSCTL_TXFS_GET_TRANSACTED_VERSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 92,
792 METHOD_BUFFERED, FILE_READ_DATA);
793pub const FSCTL_TXFS_SAVEPOINT_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 94,
794 METHOD_BUFFERED, FILE_WRITE_DATA);
795pub const FSCTL_TXFS_CREATE_MINIVERSION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 95,
796 METHOD_BUFFERED, FILE_WRITE_DATA);
797pub const FSCTL_TXFS_TRANSACTION_ACTIVE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 99,
798 METHOD_BUFFERED, FILE_READ_DATA);
799pub const FSCTL_SET_ZERO_ON_DEALLOCATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 101,
800 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
801pub const FSCTL_SET_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED,
802 FILE_ANY_ACCESS);
803pub const FSCTL_GET_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED,
804 FILE_ANY_ACCESS);
805pub const FSCTL_WAIT_FOR_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED,
806 FILE_ANY_ACCESS);
807pub const FSCTL_INITIATE_REPAIR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED,
808 FILE_ANY_ACCESS);
809pub const FSCTL_CSC_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_NEITHER,
810 FILE_ANY_ACCESS);
811pub const FSCTL_SHRINK_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED,
812 FILE_SPECIAL_ACCESS);
813pub const FSCTL_SET_SHORT_NAME_BEHAVIOR: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 109,
814 METHOD_BUFFERED, FILE_ANY_ACCESS);
815pub const FSCTL_DFSR_SET_GHOST_HANDLE_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 110,
816 METHOD_BUFFERED, FILE_ANY_ACCESS);
817pub const FSCTL_TXFS_LIST_TRANSACTION_LOCKED_FILES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
818 120, METHOD_BUFFERED, FILE_READ_DATA);
819pub const FSCTL_TXFS_LIST_TRANSACTIONS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 121,
820 METHOD_BUFFERED, FILE_READ_DATA);
821pub const FSCTL_QUERY_PAGEFILE_ENCRYPTION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 122,
822 METHOD_BUFFERED, FILE_ANY_ACCESS);
823pub const FSCTL_RESET_VOLUME_ALLOCATION_HINTS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 123,
824 METHOD_BUFFERED, FILE_ANY_ACCESS);
825pub const FSCTL_QUERY_DEPENDENT_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 124,
826 METHOD_BUFFERED, FILE_ANY_ACCESS);
827pub const FSCTL_SD_GLOBAL_CHANGE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 125,
828 METHOD_BUFFERED, FILE_ANY_ACCESS);
829pub const FSCTL_TXFS_READ_BACKUP_INFORMATION2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 126,
830 METHOD_BUFFERED, FILE_ANY_ACCESS);
831pub const FSCTL_LOOKUP_STREAM_FROM_CLUSTER: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 127,
832 METHOD_BUFFERED, FILE_ANY_ACCESS);
833pub const FSCTL_TXFS_WRITE_BACKUP_INFORMATION2: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 128,
834 METHOD_BUFFERED, FILE_ANY_ACCESS);
835pub const FSCTL_FILE_TYPE_NOTIFICATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 129,
836 METHOD_BUFFERED, FILE_ANY_ACCESS);
837pub const FSCTL_FILE_LEVEL_TRIM: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED,
838 FILE_WRITE_DATA);
839pub const FSCTL_GET_BOOT_AREA_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 140,
840 METHOD_BUFFERED, FILE_ANY_ACCESS);
841pub const FSCTL_GET_RETRIEVAL_POINTER_BASE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 141,
842 METHOD_BUFFERED, FILE_ANY_ACCESS);
843pub const FSCTL_SET_PERSISTENT_VOLUME_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 142,
844 METHOD_BUFFERED, FILE_ANY_ACCESS);
845pub const FSCTL_QUERY_PERSISTENT_VOLUME_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 143,
846 METHOD_BUFFERED, FILE_ANY_ACCESS);
847pub const FSCTL_REQUEST_OPLOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED,
848 FILE_ANY_ACCESS);
849pub const FSCTL_CSV_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 145,
850 METHOD_BUFFERED, FILE_ANY_ACCESS);
851pub const FSCTL_IS_CSV_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED,
852 FILE_ANY_ACCESS);
853pub const FSCTL_QUERY_FILE_SYSTEM_RECOGNITION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 147,
854 METHOD_BUFFERED, FILE_ANY_ACCESS);
855pub const FSCTL_CSV_GET_VOLUME_PATH_NAME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 148,
856 METHOD_BUFFERED, FILE_ANY_ACCESS);
857pub const FSCTL_CSV_GET_VOLUME_NAME_FOR_VOLUME_MOUNT_POINT: DWORD = CTL_CODE!(
858 FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS);
859pub const FSCTL_CSV_GET_VOLUME_PATH_NAMES_FOR_VOLUME_NAME: DWORD = CTL_CODE!(
860 FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS);
861pub const FSCTL_IS_FILE_ON_CSV_VOLUME: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 151,
862 METHOD_BUFFERED, FILE_ANY_ACCESS);
863pub const FSCTL_CORRUPTION_HANDLING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 152,
864 METHOD_BUFFERED, FILE_ANY_ACCESS);
865pub const FSCTL_OFFLOAD_READ: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED,
866 FILE_READ_ACCESS);
867pub const FSCTL_OFFLOAD_WRITE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED,
868 FILE_WRITE_ACCESS);
869pub const FSCTL_CSV_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED,
870 FILE_ANY_ACCESS);
871pub const FSCTL_SET_PURGE_FAILURE_MODE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 156,
872 METHOD_BUFFERED, FILE_ANY_ACCESS);
873pub const FSCTL_QUERY_FILE_LAYOUT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 157,
874 METHOD_NEITHER, FILE_ANY_ACCESS);
875pub const FSCTL_IS_VOLUME_OWNED_BYCSVFS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 158,
876 METHOD_BUFFERED, FILE_ANY_ACCESS);
877pub const FSCTL_GET_INTEGRITY_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 159,
878 METHOD_BUFFERED, FILE_ANY_ACCESS);
879pub const FSCTL_SET_INTEGRITY_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 160,
880 METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA);
881pub const FSCTL_QUERY_FILE_REGIONS: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 161,
882 METHOD_BUFFERED, FILE_ANY_ACCESS);
883pub const FSCTL_DEDUP_FILE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED,
884 FILE_ANY_ACCESS);
885pub const FSCTL_DEDUP_QUERY_FILE_HASHES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 166,
886 METHOD_NEITHER, FILE_READ_DATA);
887pub const FSCTL_DEDUP_QUERY_RANGE_STATE: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 167,
888 METHOD_NEITHER, FILE_READ_DATA);
889pub const FSCTL_DEDUP_QUERY_REPARSE_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 168,
890 METHOD_NEITHER, FILE_ANY_ACCESS);
891pub const FSCTL_RKF_INTERNAL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_NEITHER,
892 FILE_ANY_ACCESS);
893pub const FSCTL_SCRUB_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED,
894 FILE_ANY_ACCESS);
895pub const FSCTL_REPAIR_COPIES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED,
896 FILE_READ_DATA | FILE_WRITE_DATA);
897pub const FSCTL_DISABLE_LOCAL_BUFFERING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 174,
898 METHOD_BUFFERED, FILE_ANY_ACCESS);
899pub const FSCTL_CSV_MGMT_LOCK: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED,
900 FILE_ANY_ACCESS);
901pub const FSCTL_CSV_QUERY_DOWN_LEVEL_FILE_SYSTEM_CHARACTERISTICS: DWORD = CTL_CODE!(
902 FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS);
903pub const FSCTL_ADVANCE_FILE_ID: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED,
904 FILE_ANY_ACCESS);
905pub const FSCTL_CSV_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 178,
906 METHOD_BUFFERED, FILE_ANY_ACCESS);
907pub const FSCTL_CSV_QUERY_VETO_FILE_DIRECT_IO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 179,
908 METHOD_BUFFERED, FILE_ANY_ACCESS);
909pub const FSCTL_WRITE_USN_REASON: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 180,
910 METHOD_BUFFERED, FILE_ANY_ACCESS);
911pub const FSCTL_CSV_CONTROL: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 181, METHOD_BUFFERED,
912 FILE_ANY_ACCESS);
913pub const FSCTL_GET_REFS_VOLUME_DATA: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 182,
914 METHOD_BUFFERED, FILE_ANY_ACCESS);
915pub const FSCTL_CSV_H_BREAKING_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
916 185, METHOD_BUFFERED, FILE_ANY_ACCESS);
917pub const FSCTL_QUERY_STORAGE_CLASSES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 187,
918 METHOD_BUFFERED, FILE_ANY_ACCESS);
919pub const FSCTL_QUERY_REGION_INFO: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 188,
920 METHOD_BUFFERED, FILE_ANY_ACCESS);
921pub const FSCTL_USN_TRACK_MODIFIED_RANGES: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 189,
922 METHOD_BUFFERED, FILE_ANY_ACCESS);
923pub const FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM,
924 192, METHOD_BUFFERED, FILE_ANY_ACCESS);
925pub const FSCTL_SVHDX_SYNC_TUNNEL_REQUEST: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 193,
926 METHOD_BUFFERED, FILE_ANY_ACCESS);
927pub const FSCTL_SVHDX_SET_INITIATOR_INFORMATION: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 194,
928 METHOD_BUFFERED, FILE_ANY_ACCESS);
929pub const FSCTL_SET_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 195,
930 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
931pub const FSCTL_GET_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 196,
932 METHOD_BUFFERED, FILE_ANY_ACCESS);
933pub const FSCTL_DELETE_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 197,
934 METHOD_BUFFERED, FILE_SPECIAL_ACCESS);
935pub const FSCTL_ENUM_EXTERNAL_BACKING: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 198,
936 METHOD_BUFFERED, FILE_ANY_ACCESS);
937pub const FSCTL_ENUM_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 199, METHOD_NEITHER,
938 FILE_ANY_ACCESS);
939pub const FSCTL_ADD_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 204, METHOD_BUFFERED,
940 FILE_WRITE_DATA);
941pub const FSCTL_REMOVE_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 205, METHOD_BUFFERED,
942 FILE_WRITE_DATA);
943pub const FSCTL_UPDATE_OVERLAY: DWORD = CTL_CODE!(FILE_DEVICE_FILE_SYSTEM, 206, METHOD_BUFFERED,
944 FILE_WRITE_DATA);
945STRUCT!{struct PATHNAME_BUFFER {
953 PathNameLength: DWORD,
954 Name: [WCHAR; 1],
955}}
956pub type PPATHNAME_BUFFER = *mut PATHNAME_BUFFER;
957STRUCT!{struct FSCTL_QUERY_FAT_BPB_BUFFER {
958 First0x24BytesOfBootSector: [BYTE; 0x24],
959}}
960pub type PFSCTL_QUERY_FAT_BPB_BUFFER = *mut FSCTL_QUERY_FAT_BPB_BUFFER;
961STRUCT!{struct NTFS_VOLUME_DATA_BUFFER {
962 VolumeSerialNumber: LARGE_INTEGER,
963 NumberSectors: LARGE_INTEGER,
964 TotalClusters: LARGE_INTEGER,
965 FreeClusters: LARGE_INTEGER,
966 TotalReserved: LARGE_INTEGER,
967 BytesPerSector: DWORD,
968 BytesPerCluster: DWORD,
969 BytesPerFileRecordSegment: DWORD,
970 ClustersPerFileRecordSegment: DWORD,
971 MftValidDataLength: LARGE_INTEGER,
972 MftStartLcn: LARGE_INTEGER,
973 Mft2StartLcn: LARGE_INTEGER,
974 MftZoneStart: LARGE_INTEGER,
975 MftZoneEnd: LARGE_INTEGER,
976}}
977pub type PNTFS_VOLUME_DATA_BUFFER = *mut NTFS_VOLUME_DATA_BUFFER;
978STRUCT!{struct NTFS_EXTENDED_VOLUME_DATA {
979 ByteCount: DWORD,
980 MajorVersion: WORD,
981 MinorVersion: WORD,
982 BytesPerPhysicalSector: DWORD,
983 LfsMajorVersion: WORD,
984 LfsMinorVersion: WORD,
985 MaxDeviceTrimExtentCount: DWORD,
986 MaxDeviceTrimByteCount: DWORD,
987 MaxVolumeTrimExtentCount: DWORD,
988 MaxVolumeTrimByteCount: DWORD,
989}}
990pub type PNTFS_EXTENDED_VOLUME_DATA = *mut NTFS_EXTENDED_VOLUME_DATA;
991STRUCT!{struct REFS_VOLUME_DATA_BUFFER {
992 ByteCount: DWORD,
993 MajorVersion: DWORD,
994 MinorVersion: DWORD,
995 BytesPerPhysicalSector: DWORD,
996 VolumeSerialNumber: LARGE_INTEGER,
997 NumberSectors: LARGE_INTEGER,
998 TotalClusters: LARGE_INTEGER,
999 FreeClusters: LARGE_INTEGER,
1000 TotalReserved: LARGE_INTEGER,
1001 BytesPerSector: DWORD,
1002 BytesPerCluster: DWORD,
1003 MaximumSizeOfResidentFile: LARGE_INTEGER,
1004 Reserved: [LARGE_INTEGER; 10],
1005}}
1006pub type PREFS_VOLUME_DATA_BUFFER = *mut REFS_VOLUME_DATA_BUFFER;
1007STRUCT!{struct STARTING_LCN_INPUT_BUFFER {
1008 StartingLcn: LARGE_INTEGER,
1009}}
1010pub type PSTARTING_LCN_INPUT_BUFFER = *mut STARTING_LCN_INPUT_BUFFER;
1011STRUCT!{struct VOLUME_BITMAP_BUFFER {
1012 StartingLcn: LARGE_INTEGER,
1013 BitmapSize: LARGE_INTEGER,
1014 Buffer: [BYTE; 1],
1015}}
1016pub type PVOLUME_BITMAP_BUFFER = *mut VOLUME_BITMAP_BUFFER;
1017STRUCT!{struct STARTING_VCN_INPUT_BUFFER {
1018 StartingVcn: LARGE_INTEGER,
1019}}
1020pub type PSTARTING_VCN_INPUT_BUFFER = *mut STARTING_VCN_INPUT_BUFFER;
1021STRUCT!{struct RETRIEVAL_POINTERS_BUFFER_INTERNAL {
1022 NextVcn: LARGE_INTEGER,
1023 Lcn: LARGE_INTEGER,
1024}}
1025STRUCT!{struct RETRIEVAL_POINTERS_BUFFER {
1026 ExtentCount: DWORD,
1027 StartingVcn: LARGE_INTEGER,
1028 Extents: [RETRIEVAL_POINTERS_BUFFER_INTERNAL; 1],
1029}}
1030pub type PRETRIEVAL_POINTERS_BUFFER = *mut RETRIEVAL_POINTERS_BUFFER;
1031STRUCT!{struct NTFS_FILE_RECORD_INPUT_BUFFER {
1032 FileReferenceNumber: LARGE_INTEGER,
1033}}
1034pub type PNTFS_FILE_RECORD_INPUT_BUFFER = *mut NTFS_FILE_RECORD_INPUT_BUFFER;
1035STRUCT!{struct NTFS_FILE_RECORD_OUTPUT_BUFFER {
1036 FileReferenceNumber: LARGE_INTEGER,
1037 FileRecordLength: DWORD,
1038 FileRecordBuffer: [BYTE; 1],
1039}}
1040pub type PNTFS_FILE_RECORD_OUTPUT_BUFFER = *mut NTFS_FILE_RECORD_OUTPUT_BUFFER;
1041STRUCT!{struct MOVE_FILE_DATA {
1042 FileHandle: HANDLE,
1043 StartingVcn: LARGE_INTEGER,
1044 StartingLcn: LARGE_INTEGER,
1045 ClusterCount: DWORD,
1046}}
1047pub type PMOVE_FILE_DATA = *mut MOVE_FILE_DATA;
1048STRUCT!{struct MOVE_FILE_RECORD_DATA {
1049 FileHandle: HANDLE,
1050 SourceFileRecord: LARGE_INTEGER,
1051 TargetFileRecord: LARGE_INTEGER,
1052}}
1053pub type PMOVE_FILE_RECORD_DATA = *mut MOVE_FILE_RECORD_DATA;
1054pub const IOCTL_VOLUME_BASE: DWORD = 0x00000056;
1056pub const IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 0,
1057 METHOD_BUFFERED, FILE_ANY_ACCESS);
1058STRUCT!{struct DISK_EXTENT {
1059 DiskNumber: DWORD,
1060 StartingOffset: LARGE_INTEGER,
1061 ExtentLength: LARGE_INTEGER,
1062}}
1063pub type PDISK_EXTENT = *mut DISK_EXTENT;
1064STRUCT!{struct VOLUME_DISK_EXTENTS {
1065 NumberOfDiskExtents: DWORD,
1066 Extents: [DISK_EXTENT; ANYSIZE_ARRAY],
1067}}
1068pub type PVOLUME_DISK_EXTENTS = *mut VOLUME_DISK_EXTENTS;
1069pub const IOCTL_VOLUME_ONLINE: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 2, METHOD_BUFFERED,
1070 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
1071pub const IOCTL_VOLUME_OFFLINE: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 3, METHOD_BUFFERED,
1072 FILE_READ_ACCESS | FILE_WRITE_ACCESS);
1073pub const IOCTL_VOLUME_IS_CLUSTERED: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED,
1074 FILE_ANY_ACCESS);
1075pub const IOCTL_VOLUME_GET_GPT_ATTRIBUTES: DWORD = CTL_CODE!(IOCTL_VOLUME_BASE, 14,
1076 METHOD_BUFFERED, FILE_ANY_ACCESS);
1077STRUCT!{struct DISK_PERFORMANCE {
1078 BytesRead: LARGE_INTEGER,
1079 BytesWritten: LARGE_INTEGER,
1080 ReadTime: LARGE_INTEGER,
1081 WriteTime: LARGE_INTEGER,
1082 IdleTime: LARGE_INTEGER,
1083 ReadCount: DWORD,
1084 WriteCount: DWORD,
1085 QueueDepth: DWORD,
1086 SplitCount: DWORD,
1087 QueryTime: LARGE_INTEGER,
1088 StorageDeviceNumber: DWORD,
1089 StorageManagerName: [WCHAR; 8],
1090}}
1091pub type PDISK_PERFORMANCE = *mut DISK_PERFORMANCE;