winapi_ui_automation/um/
winioctl.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! This module defines the 32-Bit Windows Device I/O control codes.
7use 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}
56//146
57DEFINE_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}
63//177
64pub 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}
154//288
155pub 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;
159//317
160pub 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;
164//347
165pub 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);
256//565
257STRUCT!{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;
268//1040
269ENUM!{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;
316//1574
317STRUCT!{struct DEVICE_TRIM_DESCRIPTOR {
318    Version: DWORD,
319    Size: DWORD,
320    TrimEnabled: BOOLEAN,
321}}
322pub type PDEVICE_TRIM_DESCRIPTOR = *mut DEVICE_TRIM_DESCRIPTOR;
323//7540
324pub 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);
427//7810
428ENUM!{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;
457//7884
458STRUCT!{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;
518//8059
519STRUCT!{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}}
599//8350
600STRUCT!{struct DISK_GEOMETRY_EX {
601    Geometry: DISK_GEOMETRY,
602    DiskSize: LARGE_INTEGER,
603    Data: [BYTE; 1],
604}}
605//8933
606pub 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);
639//9717
640pub 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);
945// FILE_DEVICE_AVIO is defined nowhere
946//pub const IOCTL_AVIO_ALLOCATE_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED,
947//    FILE_SPECIAL_ACCESS);
948//pub const IOCTL_AVIO_FREE_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED,
949//    FILE_SPECIAL_ACCESS);
950//pub const IOCTL_AVIO_MODIFY_STREAM: DWORD = CTL_CODE!(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED,
951//    FILE_SPECIAL_ACCESS);
952STRUCT!{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;
1054//15468
1055pub 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;