1/*
2 * Copyright (c) 2010 - 2012 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24#ifndef _MSFSCC_H_
25#define _MSFSCC_H_
26
27
28/*
29 * Reparse Tags
30 *
31 * Each reparse point has a reparse tag. The reparse tag uniquely identifies the
32 * owner of that reparse point. The owner is the implementer of the file system
33 * filter driver associated with a reparse tag. Reparse tags are exposed to clients
34 * for third-party applications. Those applications can set, get, and process
35 * reparse tags as needed. Third parties MUST request a reserved reparse tag
36 * value to ensure that conflicting tag values do not occur. The following reparse
37 * tags, with the exception of IO_REPARSE_TAG_SYMLINK, are processed on the server
38 * and are not processed by a client after transmission over the wire. Clients
39 * should treat associated reparse data as opaque data.
40 *
41 */
42#define	IO_REPARSE_TAG_RESERVED_ZERO	0x00000000
43#define	IO_REPARSE_TAG_RESERVED_ONE		0x00000001
44#define IO_REPARSE_TAG_MOUNT_POINT		0xA0000003
45#define IO_REPARSE_TAG_HSM				0xC0000004
46#define IO_REPARSE_TAG_HSM2				0x80000006
47#define IO_REPARSE_TAG_DRIVER_EXTENDER	0x80000005
48#define IO_REPARSE_TAG_SIS				0x80000007
49#define IO_REPARSE_TAG_DFS				0x8000000A
50#define IO_REPARSE_TAG_DFSR				0x80000012
51#define IO_REPARSE_TAG_FILTER_MANAGER	0x8000000B
52#define IO_REPARSE_TAG_SYMLINK			0xA000000C
53
54
55/*
56 * A process invokes an FSCTL on a handle to perform an action against the file
57 * or directory associated with the handle. When a server receives an FSCTL request,
58 * it SHOULD use the information in the request, which includes a handle and,
59 * optionally, an input data buffer, to perform the requested action. How a server
60 * performs the action requested by an FSCTL is implementation dependent. The
61 * following specifies the system-defined generic FSCTLs that are permitted to be
62 * invoked across the network. Generic FSCTLs are used by the local file systems
63 * or by multiple components within the system. Any application, service, or
64 * driver may define private FSCTLs. Most private FSCTLs are used locally in the
65 * internal driver stacks and do not flow over the wire. However, if a component
66 * allows its private FSCTLs to flow over the wire, that component is responsible
67 * for ensuring the FSCTLs and associated data structures are documented.
68 * Examples of such private FSCTLs can be found in [MS-SMB2] and [MS-DFSC].
69 */
70#define FSCTL_CREATE_OR_GET_OBJECT_ID				0x900c0
71#define FSCTL_DELETE_OBJECT_ID						0x900a0
72#define FSCTL_DELETE_REPARSE_POINT					0x900ac
73#define FSCTL_FILESYSTEM_GET_STATISTICS				0x90060
74#define FSCTL_FIND_FILES_BY_SID						0x9008f
75#define FSCTL_GET_COMPRESSION						0x9003c
76#define FSCTL_GET_NTFS_VOLUME_DATA					0x90064
77#define FSCTL_GET_OBJECT_ID							0x9009c
78#define FSCTL_GET_REPARSE_POINT						0x900a8
79#define FSCTL_GET_RETRIEVAL_POINTERS				0x90073
80#define FSCTL_IS_PATHNAME_VALID						0x9002c
81#define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION		0x1400ec
82#define FSCTL_PIPE_PEEK								0x11400c
83#define FSCTL_PIPE_TRANSCEIVE						0x11c017
84#define FSCTL_PIPE_WAIT								0x110018
85#define FSCTL_QUERY_FAT_BPB							0x90058
86#define FSCTL_QUERY_ALLOCATED_RANGES				0x940cf
87#define FSCTL_QUERY_ON_DISK_VOLUME_INFO				0x9013c
88#define FSCTL_QUERY_SPARING_INFO					0x90138
89#define FSCTL_READ_FILE_USN_DATA					0x900eb
90#define FSCTL_RECALL_FILE							0x90117
91#define FSCTL_SET_COMPRESSION						0x9c040
92#define FSCTL_SET_DEFECT_MANAGEMENT					0x98134
93#define FSCTL_SET_ENCRYPTION						0x900D7
94#define FSCTL_SET_OBJECT_ID							0x90098
95#define FSCTL_SET_OBJECT_ID_EXTENDED				0x900bc
96#define FSCTL_SET_REPARSE_POINT						0x900a4
97#define FSCTL_SET_SPARSE							0x900c4
98#define FSCTL_SET_ZERO_DATA							0x980c8
99#define FSCTL_SET_ZERO_ON_DEALLOCATION				0x90194
100#define FSCTL_SIS_COPYFILE							0x90100
101#define FSCTL_WRITE_USN_CLOSE_RECORD				0x900ef
102#define FSCTL_DFS_GET_REFERRALS                     0x60194
103#define FSCTL_SRV_COPYCHUNK                         0x1440F2
104#define FSCTL_SRV_ENUMERATE_SNAPSHOTS               0x144064
105#define FSCTL_SRV_REQUEST_RESUME_KEY                0x140078
106#define FSCTL_SRV_READ_HASH                         0x1441bb
107#define FSCTL_SRV_COPYCHUNK_WRITE                   0x001480F2
108#define FSCTL_LMR_REQUEST_RESILIENCY                0x001401D4
109#define FSCTL_VALIDATE_NEGOTIATE_INFO               0x00140204
110
111/*
112 * Symbolic Link Reparse Data Buffer
113 * Flags (4 bytes): A 32-bit field that specifies whether the substitute name is
114 * a full path name or a path name relative to the directory containing the
115 * symbolic link. This field contains one of the following values.
116 */
117#define SYMLINK_FLAG_ABSOLUTE 0x00000000
118#define SYMLINK_FLAG_RELATIVE 0x00000001
119
120#endif // _MSFSCC_H_