xref: /illumos-gate/usr/src/uts/common/smb/winioctl.h (revision 08f2ce59ccfd4e449c92dd87b23e756e439d4daa)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  *
25  * Copyright 2018 Nexenta Systems, Inc.  All rights reserved.
26  * Copyright 2022 RackTop Systems, Inc.
27  */
28 #ifndef _SMB_WINIOCTL_H
29 #define	_SMB_WINIOCTL_H
30 
31 /*
32  * Standard Windows NT IOCTL/FSCTL definitions (derived from the VC++
33  * include file of the same name).
34  */
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 #ifndef _DEVIOCTL_
41 #define	_DEVIOCTL_
42 
43 /*
44  * begin_ntddk begin_wdm begin_nthal begin_ntifs
45  *
46  * Define the various device type values.  Note that values used by Microsoft
47  * Corporation are in the range 0-32767, and 32768-65535 are reserved for use
48  * by customers.
49  */
50 
51 #define	DEVICE_TYPE DWORD
52 
53 #define	FILE_DEVICE_BEEP		0x00000001
54 #define	FILE_DEVICE_CD_ROM		0x00000002
55 #define	FILE_DEVICE_CD_ROM_FILE_SYSTEM	0x00000003
56 #define	FILE_DEVICE_CONTROLLER		0x00000004
57 #define	FILE_DEVICE_DATALINK		0x00000005
58 #define	FILE_DEVICE_DFS			0x00000006
59 #define	FILE_DEVICE_DISK		0x00000007
60 #define	FILE_DEVICE_DISK_FILE_SYSTEM	0x00000008
61 #define	FILE_DEVICE_FILE_SYSTEM		0x00000009
62 #define	FILE_DEVICE_INPORT_PORT		0x0000000a
63 #define	FILE_DEVICE_KEYBOARD		0x0000000b
64 #define	FILE_DEVICE_MAILSLOT		0x0000000c
65 #define	FILE_DEVICE_MIDI_IN		0x0000000d
66 #define	FILE_DEVICE_MIDI_OUT		0x0000000e
67 #define	FILE_DEVICE_MOUSE		0x0000000f
68 #define	FILE_DEVICE_MULTI_UNC_PROVIDER	0x00000010
69 #define	FILE_DEVICE_NAMED_PIPE		0x00000011
70 #define	FILE_DEVICE_NETWORK		0x00000012
71 #define	FILE_DEVICE_NETWORK_BROWSER	0x00000013
72 #define	FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
73 #define	FILE_DEVICE_NULL		0x00000015
74 #define	FILE_DEVICE_PARALLEL_PORT	0x00000016
75 #define	FILE_DEVICE_PHYSICAL_NETCARD	0x00000017
76 #define	FILE_DEVICE_PRINTER		0x00000018
77 #define	FILE_DEVICE_SCANNER		0x00000019
78 #define	FILE_DEVICE_SERIAL_MOUSE_PORT	0x0000001a
79 #define	FILE_DEVICE_SERIAL_PORT		0x0000001b
80 #define	FILE_DEVICE_SCREEN		0x0000001c
81 #define	FILE_DEVICE_SOUND		0x0000001d
82 #define	FILE_DEVICE_STREAMS		0x0000001e
83 #define	FILE_DEVICE_TAPE		0x0000001f
84 #define	FILE_DEVICE_TAPE_FILE_SYSTEM	0x00000020
85 #define	FILE_DEVICE_TRANSPORT		0x00000021
86 #define	FILE_DEVICE_UNKNOWN		0x00000022
87 #define	FILE_DEVICE_VIDEO		0x00000023
88 #define	FILE_DEVICE_VIRTUAL_DISK	0x00000024
89 #define	FILE_DEVICE_WAVE_IN		0x00000025
90 #define	FILE_DEVICE_WAVE_OUT		0x00000026
91 #define	FILE_DEVICE_8042_PORT		0x00000027
92 #define	FILE_DEVICE_NETWORK_REDIRECTOR	0x00000028
93 #define	FILE_DEVICE_BATTERY		0x00000029
94 #define	FILE_DEVICE_BUS_EXTENDER	0x0000002a
95 #define	FILE_DEVICE_MODEM		0x0000002b
96 #define	FILE_DEVICE_VDM			0x0000002c
97 #define	FILE_DEVICE_MASS_STORAGE	0x0000002d
98 #define	FILE_DEVICE_SMB			0x0000002e
99 #define	FILE_DEVICE_KS			0x0000002f
100 #define	FILE_DEVICE_CHANGER		0x00000030
101 #define	FILE_DEVICE_SMARTCARD		0x00000031
102 #define	FILE_DEVICE_ACPI		0x00000032
103 #define	FILE_DEVICE_DVD			0x00000033
104 #define	FILE_DEVICE_FULLSCREEN_VIDEO	0x00000034
105 #define	FILE_DEVICE_DFS_FILE_SYSTEM	0x00000035
106 #define	FILE_DEVICE_DFS_VOLUME		0x00000036
107 
108 /*
109  * Macro definition for defining IOCTL and FSCTL function control codes.  Note
110  * that function codes 0-2047 are reserved for Microsoft Corporation, and
111  * 2048-4095 are reserved for customers.
112  */
113 
114 #define	CTL_CODE(DeviceType, Function, Method, Access) \
115 	(((DeviceType) << 16) | ((Access) << 14) |     \
116 	((Function) << 2) | (Method))
117 
118 /*
119  * Define the method codes for how buffers are passed for I/O and FS controls
120  */
121 
122 #define	METHOD_BUFFERED			0
123 #define	METHOD_IN_DIRECT		1
124 #define	METHOD_OUT_DIRECT		2
125 #define	METHOD_NEITHER			3
126 
127 /*
128  * Define the access check value for any access
129  */
130 
131 #define	FILE_ANY_ACCESS			0
132 #define	FILE_READ_ACCESS		0x0001	/* file & pipe */
133 #define	FILE_WRITE_ACCESS		0x0002	/* file & pipe */
134 
135 /* end_ntddk end_wdm end_nthal end_ntifs */
136 
137 #endif /* _DEVIOCTL_ */
138 
139 
140 #ifndef _NTDDSTOR_H_
141 #define	_NTDDSTOR_H_
142 
143 #ifdef __cplusplus
144 extern "C" {
145 #endif
146 
147 /*
148  * IoControlCode values for storage devices
149  */
150 
151 #define	IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
152 
153 /*
154  * The following device control codes are common for all class drivers.  They
155  * should be used in place of the older IOCTL_DISK, IOCTL_CDROM and IOCTL_TAPE
156  * common codes
157  */
158 
159 #define	IOCTL_STORAGE_CHECK_VERIFY \
160 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
161 #define	IOCTL_STORAGE_MEDIA_REMOVAL \
162 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
163 #define	IOCTL_STORAGE_EJECT_MEDIA \
164 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
165 #define	IOCTL_STORAGE_LOAD_MEDIA \
166 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
167 #define	IOCTL_STORAGE_RESERVE \
168 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
169 #define	IOCTL_STORAGE_RELEASE \
170 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
171 #define	IOCTL_STORAGE_FIND_NEW_DEVICES \
172 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
173 
174 #define	IOCTL_STORAGE_GET_MEDIA_TYPES \
175 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
176 #define	IOCTL_STORAGE_GET_MEDIA_TYPES_EX \
177 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 
179 #define	IOCTL_STORAGE_RESET_BUS \
180 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
181 #define	IOCTL_STORAGE_RESET_DEVICE \
182 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
183 
184 #define	IOCTL_STORAGE_GET_DEVICE_NUMBER \
185 	CTL_CODE(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS)
186 
187 
188 #ifdef __cplusplus
189 }
190 #endif
191 #endif /* _NTDDSTOR_H_ */
192 
193 /*
194  * IoControlCode values for disk devices.
195  */
196 
197 #define	IOCTL_DISK_BASE			FILE_DEVICE_DISK
198 #define	IOCTL_DISK_GET_DRIVE_GEOMETRY \
199 	CTL_CODE(IOCTL_DISK_BASE, 0x0000, METHOD_BUFFERED, FILE_ANY_ACCESS)
200 #define	IOCTL_DISK_GET_PARTITION_INFO \
201 	CTL_CODE(IOCTL_DISK_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
202 #define	IOCTL_DISK_SET_PARTITION_INFO \
203 	CTL_CODE(IOCTL_DISK_BASE, 0x0002, METHOD_BUFFERED, \
204 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
205 #define	IOCTL_DISK_GET_DRIVE_LAYOUT \
206 	CTL_CODE(IOCTL_DISK_BASE, 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS)
207 #define	IOCTL_DISK_SET_DRIVE_LAYOUT \
208 	CTL_CODE(IOCTL_DISK_BASE, 0x0004, METHOD_BUFFERED, \
209 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
210 #define	IOCTL_DISK_VERIFY \
211 	CTL_CODE(IOCTL_DISK_BASE, 0x0005, METHOD_BUFFERED, FILE_ANY_ACCESS)
212 #define	IOCTL_DISK_FORMAT_TRACKS \
213 	CTL_CODE(IOCTL_DISK_BASE, 0x0006, METHOD_BUFFERED,	\
214 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
215 #define	IOCTL_DISK_REASSIGN_BLOCKS \
216 	CTL_CODE(IOCTL_DISK_BASE, 0x0007, METHOD_BUFFERED, \
217 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
218 #define	IOCTL_DISK_PERFORMANCE \
219 	CTL_CODE(IOCTL_DISK_BASE, 0x0008, METHOD_BUFFERED, FILE_ANY_ACCESS)
220 #define	IOCTL_DISK_IS_WRITABLE \
221 	CTL_CODE(IOCTL_DISK_BASE, 0x0009, METHOD_BUFFERED, FILE_ANY_ACCESS)
222 #define	IOCTL_DISK_LOGGING \
223 	CTL_CODE(IOCTL_DISK_BASE, 0x000a, METHOD_BUFFERED, FILE_ANY_ACCESS)
224 #define	IOCTL_DISK_FORMAT_TRACKS_EX \
225 	CTL_CODE(IOCTL_DISK_BASE, 0x000b, METHOD_BUFFERED, \
226 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
227 #define	IOCTL_DISK_HISTOGRAM_STRUCTURE \
228 	CTL_CODE(IOCTL_DISK_BASE, 0x000c, METHOD_BUFFERED, FILE_ANY_ACCESS)
229 #define	IOCTL_DISK_HISTOGRAM_DATA \
230 	CTL_CODE(IOCTL_DISK_BASE, 0x000d, METHOD_BUFFERED, FILE_ANY_ACCESS)
231 #define	IOCTL_DISK_HISTOGRAM_RESET \
232 	CTL_CODE(IOCTL_DISK_BASE, 0x000e, METHOD_BUFFERED, FILE_ANY_ACCESS)
233 #define	IOCTL_DISK_REQUEST_STRUCTURE \
234 	CTL_CODE(IOCTL_DISK_BASE, 0x000f, METHOD_BUFFERED, FILE_ANY_ACCESS)
235 #define	IOCTL_DISK_REQUEST_DATA \
236 	CTL_CODE(IOCTL_DISK_BASE, 0x0010, METHOD_BUFFERED, FILE_ANY_ACCESS)
237 #define	IOCTL_DISK_CONTROLLER_NUMBER \
238 	CTL_CODE(IOCTL_DISK_BASE, 0x0011, METHOD_BUFFERED, FILE_ANY_ACCESS)
239 
240 /*
241  * IOCTL support for SMART drive fault prediction.
242  */
243 
244 #define	SMART_GET_VERSION \
245 	CTL_CODE(IOCTL_DISK_BASE, 0x0020, METHOD_BUFFERED, FILE_READ_ACCESS)
246 #define	SMART_SEND_DRIVE_COMMAND \
247 	CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED,	\
248 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
249 #define	SMART_RCV_DRIVE_DATA \
250 	CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, \
251 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
252 
253 
254 /*
255  * The following device control codes are common for all class drivers.  The
256  * functions codes defined here must match all of the other class drivers.
257  *
258  * Warning: these codes will be replaced in the future by equivalent
259  * IOCTL_STORAGE codes
260  */
261 
262 #define	IOCTL_DISK_CHECK_VERIFY \
263 	CTL_CODE(IOCTL_DISK_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
264 #define	IOCTL_DISK_MEDIA_REMOVAL \
265 	CTL_CODE(IOCTL_DISK_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
266 #define	IOCTL_DISK_EJECT_MEDIA \
267 	CTL_CODE(IOCTL_DISK_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
268 #define	IOCTL_DISK_LOAD_MEDIA \
269 	CTL_CODE(IOCTL_DISK_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
270 #define	IOCTL_DISK_RESERVE \
271 	CTL_CODE(IOCTL_DISK_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
272 #define	IOCTL_DISK_RELEASE \
273 	CTL_CODE(IOCTL_DISK_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
274 #define	IOCTL_DISK_FIND_NEW_DEVICES \
275 	CTL_CODE(IOCTL_DISK_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
276 #define	IOCTL_DISK_GET_MEDIA_TYPES \
277 	CTL_CODE(IOCTL_DISK_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS)
278 
279 #define	IOCTL_CHANGER_BASE		FILE_DEVICE_CHANGER
280 
281 #define	IOCTL_CHANGER_GET_PARAMETERS \
282 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
283 #define	IOCTL_CHANGER_GET_STATUS \
284 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS)
285 #define	IOCTL_CHANGER_GET_PRODUCT_DATA \
286 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS)
287 #define	IOCTL_CHANGER_SET_ACCESS \
288 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0004, METHOD_BUFFERED, \
289 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
290 #define	IOCTL_CHANGER_GET_ELEMENT_STATUS \
291 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0005, METHOD_BUFFERED, \
292 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
293 #define	IOCTL_CHANGER_INITIALIZE_ELEMENT_STATUS \
294 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0006, METHOD_BUFFERED, FILE_READ_ACCESS)
295 #define	IOCTL_CHANGER_SET_POSITION \
296 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS)
297 #define	IOCTL_CHANGER_EXCHANGE_MEDIUM \
298 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS)
299 #define	IOCTL_CHANGER_MOVE_MEDIUM \
300 	CTL_CODE(IOCTL_CHANGER_BASE, 0x0009, METHOD_BUFFERED, FILE_READ_ACCESS)
301 #define	IOCTL_CHANGER_REINITIALIZE_TRANSPORT \
302 	CTL_CODE(IOCTL_CHANGER_BASE, 0x000A, METHOD_BUFFERED, FILE_READ_ACCESS)
303 #define	IOCTL_CHANGER_QUERY_VOLUME_TAGS \
304 	CTL_CODE(IOCTL_CHANGER_BASE, 0x000B, METHOD_BUFFERED, \
305 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
306 
307 #ifndef _FILESYSTEMFSCTL_
308 #define	_FILESYSTEMFSCTL_
309 /*
310  * The following is a list of the native file system fsctls followed by
311  * additional network file system fsctls, DFS fsctls and Named Pipe fsctls.
312  * Some values have been decommissioned.
313  */
314 
315 /* FILE_DEVICE_FILE_SYSTEM */
316 #define	FSCTL_REQUEST_OPLOCK_LEVEL_1 \
317 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
318 #define	FSCTL_REQUEST_OPLOCK_LEVEL_2 \
319 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  1, METHOD_BUFFERED, FILE_ANY_ACCESS)
320 #define	FSCTL_REQUEST_BATCH_OPLOCK \
321 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  2, METHOD_BUFFERED, FILE_ANY_ACCESS)
322 #define	FSCTL_OPLOCK_BREAK_ACKNOWLEDGE \
323 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  3, METHOD_BUFFERED, FILE_ANY_ACCESS)
324 #define	FSCTL_OPBATCH_ACK_CLOSE_PENDING \
325 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  4, METHOD_BUFFERED, FILE_ANY_ACCESS)
326 #define	FSCTL_OPLOCK_BREAK_NOTIFY \
327 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
328 #define	FSCTL_LOCK_VOLUME \
329 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
330 #define	FSCTL_UNLOCK_VOLUME \
331 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
332 #define	FSCTL_DISMOUNT_VOLUME \
333 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
334 /* decommissioned fsctl value 9 */
335 #define	FSCTL_IS_VOLUME_MOUNTED \
336 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
337 /* PATHNAME_BUFFER, */
338 #define	FSCTL_IS_PATHNAME_VALID \
339 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
340 #define	FSCTL_MARK_VOLUME_DIRTY \
341 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
342 /* decommissioned fsctl value 13 */
343 #define	FSCTL_QUERY_RETRIEVAL_POINTERS \
344 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14,  METHOD_NEITHER, FILE_ANY_ACCESS)
345 #define	FSCTL_GET_COMPRESSION \
346 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
347 #define	FSCTL_SET_COMPRESSION \
348 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, \
349 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
350 /* decommissioned fsctl value 17 */
351 /* decommissioned fsctl value 18 */
352 #define	FSCTL_MARK_AS_SYSTEM_HIVE \
353 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19,  METHOD_NEITHER, FILE_ANY_ACCESS)
354 #define	FSCTL_OPLOCK_BREAK_ACK_NO_2 \
355 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
356 #define	FSCTL_INVALIDATE_VOLUMES \
357 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
358 /* FSCTL_QUERY_FAT_BPB_BUFFER */
359 #define	FSCTL_QUERY_FAT_BPB \
360 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
361 #define	FSCTL_REQUEST_FILTER_OPLOCK \
362 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
363 /* FILESYSTEM_STATISTICS */
364 #define	FSCTL_FILESYSTEM_GET_STATISTICS \
365 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
366 /* NTFS_VOLUME_DATA_BUFFER */
367 #define	FSCTL_GET_NTFS_VOLUME_DATA \
368 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
369 /* NTFS_FILE_RECORD_INPUT_BUFFER, NTFS_FILE_RECORD_OUTPUT_BUFFER */
370 #define	FSCTL_GET_NTFS_FILE_RECORD \
371 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
372 /* STARTING_LCN_INPUT_BUFFER, VOLUME_BITMAP_BUFFER */
373 #define	FSCTL_GET_VOLUME_BITMAP \
374 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27,  METHOD_NEITHER, FILE_ANY_ACCESS)
375 /* STARTING_VCN_INPUT_BUFFER, RETRIEVAL_POINTERS_BUFFER */
376 #define	FSCTL_GET_RETRIEVAL_POINTERS \
377 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28,  METHOD_NEITHER, FILE_ANY_ACCESS)
378 /* MOVE_FILE_DATA, */
379 #define	FSCTL_MOVE_FILE \
380 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
381 #define	FSCTL_IS_VOLUME_DIRTY \
382 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
383 #define	FSCTL_GET_HFS_INFORMATION \
384 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
385 #define	FSCTL_ALLOW_EXTENDED_DASD_IO \
386 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER,  FILE_ANY_ACCESS)
387 #define	FSCTL_READ_PROPERTY_DATA \
388 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS)
389 #define	FSCTL_WRITE_PROPERTY_DATA \
390 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS)
391 #define	FSCTL_FIND_FILES_BY_SID \
392 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS)
393 /* decommissioned fsctl value 36 */
394 #define	FSCTL_DUMP_PROPERTY_DATA \
395 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37,  METHOD_NEITHER, FILE_ANY_ACCESS)
396 /* FILE_OBJECTID_BUFFER */
397 #define	FSCTL_SET_OBJECT_ID \
398 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
399 /* FILE_OBJECTID_BUFFER */
400 #define	FSCTL_GET_OBJECT_ID \
401 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
402 #define	FSCTL_DELETE_OBJECT_ID \
403 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
404 /* REPARSE_DATA_BUFFER, */
405 #define	FSCTL_SET_REPARSE_POINT \
406 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_ANY_ACCESS)
407 /* REPARSE_DATA_BUFFER */
408 #define	FSCTL_GET_REPARSE_POINT \
409 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
410 /* REPARSE_DATA_BUFFER, */
411 #define	FSCTL_DELETE_REPARSE_POINT \
412 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_ANY_ACCESS)
413 /* MFT_ENUM_DATA, */
414 #define	FSCTL_ENUM_USN_DATA \
415 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44,  METHOD_NEITHER, FILE_READ_ACCESS)
416 /* BULK_SECURITY_TEST_DATA, */
417 #define	FSCTL_SECURITY_ID_CHECK \
418 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45,  METHOD_NEITHER, FILE_READ_ACCESS)
419 /* READ_USN_JOURNAL_DATA, USN */
420 #define	FSCTL_READ_USN_JOURNAL \
421 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46,  METHOD_NEITHER, FILE_READ_ACCESS)
422 #define	FSCTL_SET_OBJECT_ID_EXTENDED \
423 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_ANY_ACCESS)
424 /* FILE_OBJECTID_BUFFER */
425 #define	FSCTL_CREATE_OR_GET_OBJECT_ID \
426 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
427 #define	FSCTL_SET_SPARSE \
428 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_ANY_ACCESS)
429 /* FILE_ZERO_DATA_INFORMATION, */
430 #define	FSCTL_SET_ZERO_DATA \
431     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_ACCESS)
432 /* FILE_ALLOCATED_RANGE_BUFFER, FILE_ALLOCATED_RANGE_BUFFER */
433 #define	FSCTL_QUERY_ALLOCATED_RANGES \
434 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51,  METHOD_NEITHER, FILE_READ_ACCESS)
435 #define	FSCTL_ENABLE_UPGRADE \
436     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_ACCESS)
437 /* ENCRYPTION_BUFFER, */
438 #define	FSCTL_SET_ENCRYPTION \
439 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS)
440 #define	FSCTL_ENCRYPTION_FSCTL_IO \
441 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54,  METHOD_NEITHER, FILE_ANY_ACCESS)
442 /* ENCRYPTED_DATA_INFO, */
443 #define	FSCTL_WRITE_RAW_ENCRYPTED \
444 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55,  METHOD_NEITHER, FILE_ANY_ACCESS)
445 /* REQUEST_RAW_ENCRYPTED_DATA, ENCRYPTED_DATA_INFO */
446 #define	FSCTL_READ_RAW_ENCRYPTED \
447 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56,  METHOD_NEITHER, FILE_ANY_ACCESS)
448 /* CREATE_USN_JOUNRAL_DATA, */
449 #define	FSCTL_CREATE_USN_JOURNAL \
450 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57,  METHOD_NEITHER, FILE_READ_ACCESS)
451 /* Read the Usn Record for a file */
452 #define	FSCTL_READ_FILE_USN_DATA \
453 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58,  METHOD_NEITHER, FILE_ANY_ACCESS)
454 /* Generate Close Usn Record */
455 #define	FSCTL_WRITE_USN_CLOSE_RECORD \
456 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59,  METHOD_NEITHER, FILE_ANY_ACCESS)
457 #define	FSCTL_EXTEND_VOLUME \
458 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS)
459 #define	FSCTL_SIS_COPYFILE \
460 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS)
461 #define	FSCTL_RECALL_FILE \
462 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS)
463 #define	FSCTL_SET_DEFECT_MANAGEMENT \
464     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 77, METHOD_BUFFERED, FILE_WRITE_ACCESS)
465 #define	FSCTL_QUERY_SPARING_INFO \
466 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
467 #define	FSCTL_QUERY_ON_DISK_VOLUME_INFO \
468 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
469 #define	FSCTL_SET_ZERO_ON_DEALLOCATION \
470 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_ANY_ACCESS)
471 #define	FSCTL_SET_SHORT_NAME_BEHAVIOR \
472 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS)
473 #define	FSCTL_FILE_LEVEL_TRIM \
474     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_WRITE_ACCESS)
475 #define	FSCTL_OFFLOAD_READ \
476     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_READ_ACCESS)
477 #define	FSCTL_OFFLOAD_WRITE \
478     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_WRITE_ACCESS)
479 #define	FSCTL_GET_INTEGRITY_INFORMATION \
480 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS)
481 #define	FSCTL_SET_INTEGRITY_INFORMATION \
482 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, \
483 		FILE_READ_ACCESS | FILE_WRITE_ACCESS)
484 #define	FSCTL_QUERY_FILE_REGIONS \
485 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS)
486 
487 #define	FSCTL_REFS_STREAM_SNAPSHOT_MANAGEMENT \
488 	CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 272, METHOD_BUFFERED, FILE_ANY_ACCESS)
489 
490 /* FILE_DEVICE_NETWORK_FILE_SYSTEM */
491 /* Read the snapshot info for Volume Shadow Copy Services */
492 #define	FSCTL_SRV_ENUMERATE_SNAPSHOTS \
493 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x19, \
494 	METHOD_BUFFERED, FILE_READ_ACCESS)
495 /* Retrieve an opaque file reference for server-side data movement */
496 #define	FSCTL_SRV_REQUEST_RESUME_KEY \
497 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x1e, \
498 	METHOD_BUFFERED, FILE_ANY_ACCESS)
499 #define	FSCTL_LMR_GET_LINK_TRACKING_INFORMATION \
500 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x3a, \
501 	METHOD_BUFFERED, FILE_ANY_ACCESS)
502 #define	FSCTL_LMR_SET_LINK_TRACKING_INFORMATION \
503 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x3b, \
504 	METHOD_BUFFERED, FILE_ANY_ACCESS)
505 /* server-side data movement */
506 #define	FSCTL_SRV_COPYCHUNK \
507 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x3c, \
508 	METHOD_OUT_DIRECT, FILE_READ_ACCESS)
509 /* server-side data movement */
510 #define	FSCTL_SRV_COPYCHUNK_WRITE \
511 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x3c, \
512 	METHOD_OUT_DIRECT, FILE_WRITE_ACCESS)
513 #define	FSCTL_SRV_NOTIFY_TRANSACTION \
514 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x46, \
515 	METHOD_BUFFERED, FILE_WRITE_ACCESS)
516 #define	FSCTL_SRV_READ_HASH \
517 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x6e, \
518 	METHOD_NEITHER, FILE_READ_ACCESS)
519 #define	FSCTL_SRV_UNKNOWN_x71 \
520 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x71, \
521 	METHOD_BUFFERED, FILE_ANY_ACCESS)
522 #define	FSCTL_LMR_REQUEST_RESILIENCY \
523 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x75, \
524 	METHOD_BUFFERED, FILE_ANY_ACCESS)
525 #define	FSCTL_QUERY_NETWORK_INTERFACE_INFO \
526 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x7f, \
527 	METHOD_BUFFERED, FILE_ANY_ACCESS)
528 #define	FSCTL_VALIDATE_NEGOTIATE_INFO \
529 	CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 0x81, \
530 	METHOD_BUFFERED, FILE_ANY_ACCESS)
531 
532 /* FILE_DEVICE_DFS */
533 #define	FSCTL_DFS_GET_REFERRALS \
534 	CTL_CODE(FILE_DEVICE_DFS, 0x65, METHOD_BUFFERED, FILE_ANY_ACCESS)
535 #define	FSCTL_DFS_GET_REFERRALS_EX \
536 	CTL_CODE(FILE_DEVICE_DFS, 0x6c, METHOD_BUFFERED, FILE_ANY_ACCESS)
537 
538 /* FILE_DEVICE_NAMED_PIPE */
539 #define	FSCTL_PIPE_PEEK \
540 	CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
541 #define	FSCTL_PIPE_TRANSCEIVE \
542 	CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, \
543 	FILE_READ_ACCESS | FILE_WRITE_ACCESS)
544 #define	FSCTL_PIPE_WAIT \
545 	CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
546 
547 #endif /* _FILESYSTEMFSCTL_ */
548 
549 #ifdef __cplusplus
550 }
551 #endif
552 
553 #endif /* _SMB_WINIOCTL_H */
554