1 /* NFSv4.1 client for Windows
2 * Copyright © 2012 The Regents of the University of Michigan
4 * Olga Kornievskaia <aglo@umich.edu>
5 * Casey Bodley <cbodley@umich.edu>
7 * This library is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 2.1 of the License, or (at
10 * your option) any later version.
12 * This library is distributed in the hope that it will be useful, but
13 * without any warranty; without even the implied warranty of merchantability
14 * or fitness for a particular purpose. See the GNU Lesser General Public
15 * License for more details.
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this library; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 #ifndef _NFS41_DAEMON_
23 #define _NFS41_DAEMON_
25 #define FILE_DIRECTORY_FILE 0x00000001
26 #define FILE_WRITE_THROUGH 0x00000002
27 #define FILE_SEQUENTIAL_ONLY 0x00000004
28 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
30 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
31 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
32 #define FILE_NON_DIRECTORY_FILE 0x00000040
33 #define FILE_CREATE_TREE_CONNECTION 0x00000080
35 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
36 #define FILE_NO_EA_KNOWLEDGE 0x00000200
37 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
38 #define FILE_RANDOM_ACCESS 0x00000800
40 #define FILE_DELETE_ON_CLOSE 0x00001000
41 #define FILE_OPEN_BY_FILE_ID 0x00002000
42 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
43 #define FILE_NO_COMPRESSION 0x00008000
45 #define FILE_RESERVE_OPFILTER 0x00100000
46 #define FILE_OPEN_REPARSE_POINT 0x00200000
47 #define FILE_OPEN_NO_RECALL 0x00400000
48 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
50 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
51 #define FILE_STRUCTURED_STORAGE 0x00000441
53 #define FILE_SUPERSEDE 0x00000000
54 #define FILE_OPEN 0x00000001
55 #define FILE_CREATE 0x00000002
56 #define FILE_OPEN_IF 0x00000003
57 #define FILE_OVERWRITE 0x00000004
58 #define FILE_OVERWRITE_IF 0x00000005
59 #define FILE_MAXIMUM_DISPOSITION 0x00000005
61 typedef enum _FILE_INFORMATION_CLASS
{
62 FileDirectoryInformation
= 1,
63 FileFullDirectoryInformation
, // 2
64 FileBothDirectoryInformation
, // 3
65 FileBasicInformation
, // 4
66 FileStandardInformation
, // 5
67 FileInternalInformation
, // 6
68 FileEaInformation
, // 7
69 FileAccessInformation
, // 8
70 FileNameInformation
, // 9
71 FileRenameInformation
, // 10
72 FileLinkInformation
, // 11
73 FileNamesInformation
, // 12
74 FileDispositionInformation
, // 13
75 FilePositionInformation
, // 14
76 FileFullEaInformation
, // 15
77 FileModeInformation
, // 16
78 FileAlignmentInformation
, // 17
79 FileAllInformation
, // 18
80 FileAllocationInformation
, // 19
81 FileEndOfFileInformation
, // 20
82 FileAlternateNameInformation
, // 21
83 FileStreamInformation
, // 22
84 FilePipeInformation
, // 23
85 FilePipeLocalInformation
, // 24
86 FilePipeRemoteInformation
, // 25
87 FileMailslotQueryInformation
, // 26
88 FileMailslotSetInformation
, // 27
89 FileCompressionInformation
, // 28
90 FileObjectIdInformation
, // 29
91 FileCompletionInformation
, // 30
92 FileMoveClusterInformation
, // 31
93 FileQuotaInformation
, // 32
94 FileReparsePointInformation
, // 33
95 FileNetworkOpenInformation
, // 34
96 FileAttributeTagInformation
, // 35
97 FileTrackingInformation
, // 36
98 FileIdBothDirectoryInformation
, // 37
99 FileIdFullDirectoryInformation
, // 38
100 FileValidDataLengthInformation
, // 39
101 FileShortNameInformation
, // 40
102 FileIoCompletionNotificationInformation
, // 41
103 FileIoStatusBlockRangeInformation
, // 42
104 FileIoPriorityHintInformation
, // 43
105 FileSfioReserveInformation
, // 44
106 FileSfioVolumeInformation
, // 45
107 FileHardLinkInformation
, // 46
108 FileProcessIdsUsingFileInformation
, // 47
109 FileNormalizedNameInformation
, // 48
110 FileNetworkPhysicalNameInformation
, // 49
111 FileIdGlobalTxDirectoryInformation
, // 50
112 FileMaximumInformation
113 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
116 /* kernel structures for QueryDirectory results */
117 typedef struct _FILE_NAMES_INFORMATION
{
118 ULONG NextEntryOffset
;
120 ULONG FileNameLength
;
122 } FILE_NAMES_INFORMATION
, *PFILE_NAMES_INFORMATION
;
124 typedef struct _FILE_DIRECTORY_INFO
{
125 ULONG NextEntryOffset
;
127 LARGE_INTEGER CreationTime
;
128 LARGE_INTEGER LastAccessTime
;
129 LARGE_INTEGER LastWriteTime
;
130 LARGE_INTEGER ChangeTime
;
131 LARGE_INTEGER EndOfFile
;
132 LARGE_INTEGER AllocationSize
;
133 ULONG FileAttributes
;
134 ULONG FileNameLength
;
136 } FILE_DIRECTORY_INFO
, *PFILE_DIRECTORY_INFO
;
138 typedef struct _FILE_BOTH_DIR_INFORMATION
{
139 ULONG NextEntryOffset
;
141 LARGE_INTEGER CreationTime
;
142 LARGE_INTEGER LastAccessTime
;
143 LARGE_INTEGER LastWriteTime
;
144 LARGE_INTEGER ChangeTime
;
145 LARGE_INTEGER EndOfFile
;
146 LARGE_INTEGER AllocationSize
;
147 ULONG FileAttributes
;
148 ULONG FileNameLength
;
150 CCHAR ShortNameLength
;
153 } FILE_BOTH_DIR_INFORMATION
, *PFILE_BOTH_DIR_INFORMATION
;
155 typedef struct _FILE_FULL_DIR_INFO
{
156 ULONG NextEntryOffset
;
158 LARGE_INTEGER CreationTime
;
159 LARGE_INTEGER LastAccessTime
;
160 LARGE_INTEGER LastWriteTime
;
161 LARGE_INTEGER ChangeTime
;
162 LARGE_INTEGER EndOfFile
;
163 LARGE_INTEGER AllocationSize
;
164 ULONG FileAttributes
;
165 ULONG FileNameLength
;
168 } FILE_FULL_DIR_INFO
, *PFILE_FULL_DIR_INFO
;
170 typedef struct _FILE_ID_FULL_DIR_INFO
{
171 ULONG NextEntryOffset
;
173 LARGE_INTEGER CreationTime
;
174 LARGE_INTEGER LastAccessTime
;
175 LARGE_INTEGER LastWriteTime
;
176 LARGE_INTEGER ChangeTime
;
177 LARGE_INTEGER EndOfFile
;
178 LARGE_INTEGER AllocationSize
;
179 ULONG FileAttributes
;
180 ULONG FileNameLength
;
182 LARGE_INTEGER FileId
;
184 } FILE_ID_FULL_DIR_INFO
, *PFILE_ID_FULL_DIR_INFO
;
186 typedef struct _FILE_LINK_INFORMATION
{
187 BOOLEAN ReplaceIfExists
;
188 HANDLE RootDirectory
;
189 ULONG FileNameLength
;
191 } FILE_LINK_INFORMATION
, *PFILE_LINK_INFORMATION
;
193 typedef struct _FILE_FULL_EA_INFORMATION
{
194 ULONG NextEntryOffset
;
197 USHORT EaValueLength
;
199 } FILE_FULL_EA_INFORMATION
, *PFILE_FULL_EA_INFORMATION
;
201 typedef struct _FILE_GET_EA_INFORMATION
{
202 ULONG NextEntryOffset
;
205 } FILE_GET_EA_INFORMATION
, *PFILE_GET_EA_INFORMATION
;
207 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
208 LARGE_INTEGER CreationTime
;
209 LARGE_INTEGER LastAccessTime
;
210 LARGE_INTEGER LastWriteTime
;
211 LARGE_INTEGER ChangeTime
;
212 LARGE_INTEGER AllocationSize
;
213 LARGE_INTEGER EndOfFile
;
214 ULONG FileAttributes
;
215 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
218 typedef enum _FSINFOCLASS
{
219 FileFsVolumeInformation
= 1,
220 FileFsLabelInformation
, // 2
221 FileFsSizeInformation
, // 3
222 FileFsDeviceInformation
, // 4
223 FileFsAttributeInformation
, // 5
224 FileFsControlInformation
, // 6
225 FileFsFullSizeInformation
, // 7
226 FileFsObjectIdInformation
, // 8
227 FileFsDriverPathInformation
, // 9
228 FileFsVolumeFlagsInformation
,// 10
229 FileFsMaximumInformation
230 } FS_INFORMATION_CLASS
, *PFS_INFORMATION_CLASS
;
233 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
234 #define FILE_CASE_PRESERVED_NAMES 0x00000002
235 #define FILE_UNICODE_ON_DISK 0x00000004
236 #define FILE_PERSISTENT_ACLS 0x00000008
237 #define FILE_FILE_COMPRESSION 0x00000010
238 #define FILE_VOLUME_QUOTAS 0x00000020
239 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
240 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
241 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
242 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
243 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
244 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
245 #define FILE_NAMED_STREAMS 0x00040000
246 #define FILE_READ_ONLY_VOLUME 0x00080000
247 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
248 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
249 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
250 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
251 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
252 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
254 typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
255 ULONG FileSystemAttributes
;
256 LONG MaximumComponentNameLength
;
257 ULONG FileSystemNameLength
;
258 WCHAR FileSystemName
[1];
259 } FILE_FS_ATTRIBUTE_INFORMATION
, *PFILE_FS_ATTRIBUTE_INFORMATION
;
262 typedef struct _FILE_FS_SIZE_INFORMATION
{
263 LARGE_INTEGER TotalAllocationUnits
;
264 LARGE_INTEGER AvailableAllocationUnits
;
265 ULONG SectorsPerAllocationUnit
;
266 ULONG BytesPerSector
;
267 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
269 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
270 LARGE_INTEGER TotalAllocationUnits
;
271 LARGE_INTEGER CallerAvailableAllocationUnits
;
272 LARGE_INTEGER ActualAvailableAllocationUnits
;
273 ULONG SectorsPerAllocationUnit
;
274 ULONG BytesPerSector
;
275 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
277 typedef struct _FILE_INTERNAL_INFORMATION
{
278 LARGE_INTEGER IndexNumber
;
279 } FILE_INTERNAL_INFORMATION
, *PFILE_INTERNAL_INFORMATION
;