1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
|
//+----------------------------------------------------------------------------
//
// Copyright (C) 1996, Microsoft Corporation
//
// File: dfsfsctl.h
//
// Contents: The FsControl codes, data structures, and names needed for
// communication between user-level code and the Dfs kernel
// driver.
//
// Classes: None
//
// Functions:
//
//-----------------------------------------------------------------------------
#ifndef _DFSFSCTL_
#define _DFSFSCTL_
//
// Distributed file service file control code and structure declarations
//
//
// The name of the Dfs driver file system device for server and client
//
#define DFS_DRIVER_NAME L"\\Dfs"
#define DFS_SERVER_NAME L"\\DfsServer"
//
// The name of the NT object directory under which Dfs creates its own
// devices.
//
#define DD_DFS_DEVICE_DIRECTORY L"\\Device\\WinDfs"
//
// The canonical device Dfs creates for fielding file open requests.
//
#define DD_DFS_DEVICE_NAME L"Root"
//
// BUGBUG - The following need to be in devioctl.h
#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000030
#define FILE_DEVICE_DFS_VOLUME 0x00000031
#define DFS_OPEN_CONTEXT 0xFF444653
#define DFS_DOWNLEVEL_OPEN_CONTEXT 0x11444653
// END BUGBUG
//
// NtDeviceIoControlFile IoControlCode values for this device.
//
// Warning: Remember that the low two bits of the code specify how the
// buffers are passed to the driver!
//
#define FSCTL_DFS_BASE FILE_DEVICE_DFS
//
// DFS FSCTL operations. When a passed-in buffer contains pointers, and the caller
// is not KernelMode, the passed-in pointer value is set relative to the beginning of
// the buffer. They must be adjusted before use. If the caller mode was KernelMode,
// pointers should be used as is.
//
//
//
// These are the fsctl codes used by the srvsvc to implement the I_NetDfsXXX
// calls.
//
#define FSCTL_DFS_CREATE_LOCAL_PARTITION CTL_CODE(FSCTL_DFS_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_LOCAL_PARTITION CTL_CODE(FSCTL_DFS_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_LOCAL_VOLUME_STATE CTL_CODE(FSCTL_DFS_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_SERVER_INFO CTL_CODE(FSCTL_DFS_BASE, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CREATE_EXIT_POINT CTL_CODE(FSCTL_DFS_BASE, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_EXIT_POINT CTL_CODE(FSCTL_DFS_BASE, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_MODIFY_PREFIX CTL_CODE(FSCTL_DFS_BASE, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_FIX_LOCAL_VOLUME CTL_CODE(FSCTL_DFS_BASE, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are the fsctl codes used by the SMB server to support shares in the
// Dfs
//
#define FSCTL_DFS_TRANSLATE_PATH CTL_CODE(FSCTL_DFS_BASE, 100, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_REFERRALS CTL_CODE(FSCTL_DFS_BASE, 101, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_REPORT_INCONSISTENCY CTL_CODE(FSCTL_DFS_BASE, 102, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_IS_SHARE_IN_DFS CTL_CODE(FSCTL_DFS_BASE, 103, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_IS_ROOT CTL_CODE(FSCTL_DFS_BASE, 104, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_VERSION CTL_CODE(FSCTL_DFS_BASE, 105, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are the fsctl codes supported by the Dfs client to identify quickly
// whether paths are in the Dfs or not.
//
#define FSCTL_DFS_IS_VALID_PREFIX CTL_CODE(FSCTL_DFS_BASE, 106, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_IS_VALID_LOGICAL_ROOT CTL_CODE(FSCTL_DFS_BASE, 107, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are the fsctl codes used by the Dfs Manager / Dfs Service to
// manipulate the Dfs.
//
#define FSCTL_DFS_STOP_DFS CTL_CODE(FSCTL_DFS_BASE, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_START_DFS CTL_CODE(FSCTL_DFS_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_INIT_LOCAL_PARTITIONS CTL_CODE(FSCTL_DFS_BASE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_SERVICE_STATE CTL_CODE(FSCTL_DFS_BASE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DC_SET_VOLUME_STATE CTL_CODE(FSCTL_DFS_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_IS_CHILDNAME_LEGAL CTL_CODE(FSCTL_DFS_BASE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_CREATE_ENTRY CTL_CODE(FSCTL_DFS_BASE, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_CREATE_SUBORDINATE_ENTRY CTL_CODE(FSCTL_DFS_BASE, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CHECK_STGID_IN_USE CTL_CODE(FSCTL_DFS_BASE, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_SET_RELATION_INFO CTL_CODE(FSCTL_DFS_BASE, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_SERVER_INFO CTL_CODE(FSCTL_DFS_BASE, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_DESTROY_ENTRY CTL_CODE(FSCTL_DFS_BASE, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_GET_RELATION_INFO CTL_CODE(FSCTL_DFS_BASE, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CHECK_REMOTE_PARTITION CTL_CODE(FSCTL_DFS_BASE, 34, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_VERIFY_REMOTE_VOLUME_KNOWLEDGE CTL_CODE(FSCTL_DFS_BASE, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_VERIFY_LOCAL_VOLUME_KNOWLEDGE CTL_CODE(FSCTL_DFS_BASE, 36, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PRUNE_LOCAL_PARTITION CTL_CODE(FSCTL_DFS_BASE, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are the fsctl codes used by the Dfs WNet provider to support the
// WNet APIs for Dfs
//
#define FSCTL_DFS_DEFINE_LOGICAL_ROOT CTL_CODE(FSCTL_DFS_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_LOGICAL_ROOT CTL_CODE(FSCTL_DFS_BASE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_LOGICAL_ROOT_PREFIX CTL_CODE(FSCTL_DFS_BASE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_CONNECTED_RESOURCES CTL_CODE(FSCTL_DFS_BASE, 47, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_SERVER_NAME CTL_CODE(FSCTL_DFS_BASE, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DEFINE_ROOT_CREDENTIALS CTL_CODE(FSCTL_DFS_BASE, 49, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are fsctl codes used by the Dfs Perfmon DLL
//
#define FSCTL_DFS_READ_METERS CTL_CODE(FSCTL_DFS_BASE, 50, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are fsctls useful for testing Dfs
//
#define FSCTL_DFS_SHUFFLE_ENTRY CTL_CODE(FSCTL_DFS_BASE, 51, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_FIRST_SVC CTL_CODE(FSCTL_DFS_BASE, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_NEXT_SVC CTL_CODE(FSCTL_DFS_BASE, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_ENTRY_TYPE CTL_CODE(FSCTL_DFS_BASE, 54, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// These are the fsctl codes that might be useful in the future.
//
#define FSCTL_DFS_NAME_RESOLVE CTL_CODE(FSCTL_DFS_BASE, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_DOMAIN_GLUON CTL_CODE(FSCTL_DFS_BASE, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
#ifdef MIDL_PASS
#define DFSMIDLSTRING [string] LPWSTR
#define DFSSIZEIS [size_is(Count)]
#else
#define DFSMIDLSTRING LPWSTR
#define DFSSIZEIS
#endif
typedef struct {
GUID Uid;
DFSMIDLSTRING Prefix;
} NET_DFS_ENTRY_ID, *LPNET_DFS_ENTRY_ID;
typedef struct {
ULONG Count;
DFSSIZEIS LPNET_DFS_ENTRY_ID Buffer;
} NET_DFS_ENTRY_ID_CONTAINER, *LPNET_DFS_ENTRY_ID_CONTAINER;
// FSCTL_DFS_CREATE_LOCAL_PARTITION Input Buffer:
typedef struct {
LPWSTR ShareName;
LPWSTR SharePath;
GUID EntryUid;
LPWSTR EntryPrefix;
LPWSTR ShortName;
LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo;
BOOLEAN Force;
} *PDFS_CREATE_LOCAL_PARTITION_ARG;
// FSCTL_DFS_DELETE_LOCAL_PARTITION Input Buffer:
typedef struct {
GUID Uid;
LPWSTR Prefix;
} *PDFS_DELETE_LOCAL_PARTITION_ARG;
// FSCTL_DFS_SET_LOCAL_VOLUME_STATE Input Buffer
typedef struct {
GUID Uid;
LPWSTR Prefix;
ULONG State;
} *PDFS_SET_LOCAL_VOLUME_STATE_ARG;
// FSCTL_DFS_SET_SERVER_INFO Input Buffer
typedef struct {
GUID Uid;
LPWSTR Prefix;
} *PDFS_SET_SERVER_INFO_ARG;
// FSCTL_DFS_CREATE_EXIT_POINT Input Buffer
typedef struct {
GUID Uid;
LPWSTR Prefix;
ULONG Type;
} *PDFS_CREATE_EXIT_POINT_ARG;
// FSCTL_DFS_DELETE_EXIT_POINT Input Buffer
typedef struct {
GUID Uid;
LPWSTR Prefix;
ULONG Type;
} *PDFS_DELETE_EXIT_POINT_ARG;
// FSCTL_DFS_MODIFY_PREFIX Input Buffer
typedef struct {
GUID Uid;
LPWSTR Prefix;
} *PDFS_MODIFY_PREFIX_ARG;
// FSCTL_DFS_FIX_LOCAL_VOLUME Input Buffer
typedef struct {
LPWSTR VolumeName;
ULONG EntryType;
ULONG ServiceType;
LPWSTR StgId;
GUID EntryUid;
LPWSTR EntryPrefix;
LPWSTR ShortPrefix;
LPNET_DFS_ENTRY_ID_CONTAINER RelationInfo;
ULONG CreateDisposition;
} *PDFS_FIX_LOCAL_VOLUME_ARG;
// FSCTL_DFS_TRANSLATE_PATH Input Buffer
typedef struct {
ULONG Flags;
UNICODE_STRING SubDirectory;
UNICODE_STRING ParentPathName;
UNICODE_STRING DfsPathName;
} DFS_TRANSLATE_PATH_ARG, *PDFS_TRANSLATE_PATH_ARG;
#define DFS_TRANSLATE_STRIP_LAST_COMPONENT 1
// FSCTL_DFS_GET_REFERRALS Input Buffer
typedef struct {
UNICODE_STRING DfsPathName;
ULONG MaxReferralLevel;
} DFS_GET_REFERRALS_INPUT_ARG, *PDFS_GET_REFERRALS_INPUT_ARG;
// FSCTL_DFS_GET_REFERRALS Output Buffer
// IoStatus.Information contains the amount of data returned
//
// The format of the Output Buffer is simply that of RESP_GET_DFS_REFERRAL,
// described in smbtrans.h
//
// FSCTL_DFS_REPORT_INCONSISTENCY Input Buffer
typedef struct {
UNICODE_STRING DfsPathName; // DFS path having inconsistency
PCHAR Ref; // Actually, pointer to a DFS_REFERRAL_V1
} DFS_REPORT_INCONSISTENCY_ARG, *PDFS_REPORT_INCONSISTENCY_ARG;
// FSCTL_DFS_IS_SHARE_IN_DFS Input Buffer
typedef struct {
union {
USHORT ServerType; // 0 == Don't know, 1 == SMB, 2 == Netware
USHORT ShareType; // On return, 0x1 == share is root of a Dfs
}; // 0x2 == share is participating in Dfs
UNICODE_STRING ShareName; // Name of share
UNICODE_STRING SharePath; // Path of the share
} DFS_IS_SHARE_IN_DFS_ARG, *PDFS_IS_SHARE_IN_DFS_ARG;
#define DFS_SHARE_TYPE_ROOT 0x1
#define DFS_SHARE_TYPE_DFS_VOLUME 0x2
//
//FSCTL_DFS_GET_VERSION Input Buffer:
// This fsctl returns the version number of the Dfs driver installed on the
// machine.
typedef struct {
ULONG Version;
} DFS_GET_VERSION_ARG, *PDFS_GET_VERSION_ARG;
// Standardized provider IDs as given in eProviderId
#define PROV_ID_LOCAL_FS 0x101 // generic local file system
#define PROV_ID_DFS_RDR 0x201 // The standard Cairo redirector
#define PROV_ID_LM_RDR 0x202 // The usual LanMan (downlevel) redir
// Provider capabilities as given in fRefCapability and fProvCapability
#define PROV_DFS_RDR 2 // accepts NtCreateFile with EA Principal
#define PROV_STRIP_PREFIX 4 // strip file name prefix before redispatching
#define PROV_UNAVAILABLE 8 // provider unavailable - try to reattach.
//[ dfs_define_logical_root
//
// Control structure for FSCTL_DFS_DEFINE_LOGICAL_ROOT
#define MAX_LOGICAL_ROOT_NAME 16
typedef struct _FILE_DFS_DEF_LOGICAL_ROOT_BUFFER {
BOOLEAN fForce;
WCHAR LogicalRoot[MAX_LOGICAL_ROOT_NAME];
WCHAR RootPrefix[1];
} FILE_DFS_DEF_ROOT_BUFFER, *PFILE_DFS_DEF_ROOT_BUFFER;
//]
//[ dfs_define_root_credentials
//
// Control structure for FSCTL_DFS_DEFINE_ROOT_CREDENTIALS. All the strings
// appear in Buffer in the same order as the length fields. The strings
// are not NULL terminated. The length values are in bytes.
//
typedef struct _FILE_DFS_DEF_ROOT_CREDENTIALS {
USHORT Flags;
USHORT DomainNameLen;
USHORT UserNameLen;
USHORT PasswordLen;
USHORT ServerNameLen;
USHORT ShareNameLen;
USHORT RootPrefixLen;
WCHAR LogicalRoot[MAX_LOGICAL_ROOT_NAME];
WCHAR Buffer[1];
} FILE_DFS_DEF_ROOT_CREDENTIALS, *PFILE_DFS_DEF_ROOT_CREDENTIALS;
#define DFS_DEFERRED_CONNECTION 1
#define DFS_USE_NULL_PASSWORD 2
//]
//----------------------------------------------------------------------------
//
// Everything below here is to support the old Dfs design.
//
#define EA_NAME_OPENIFJP ".OpenIfJP"
#endif
|