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
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1992 Microsoft Corporation
Module Name:
ntdddfs.h
Abstract:
This is the include file that defines all constants and types for
accessing the Distributed file service device.
Author:
Alan Whitney (alanw) 27 May 1992
Revision History:
--*/
#ifndef _NTDDDFS_
#define _NTDDDFS_
//
// The names of logical roots are restricted to be less than or equal to
// MAX_LOGICAL_ROOT_NAME chars.
//
#define MAX_LOGICAL_ROOT_NAME 8
//
// Device Name - this string is the name of the device. It is the name
// that should be passed to NtOpenFile when accessing the device.
//
extern LPCWSTR DD_DFS_DEVICE_DIR;
extern LPCWSTR DD_DFS_DLORG_DEVICE_NAME; // Device for downlevel access
extern LPCWSTR DD_DFS_ORG_DEVICE_NAME; // Device pointing to root of dfs
//
// 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 IOCTL_DFS_BASE FILE_DEVICE_DFS
// BUGBUG - borrow a currently unused bit in CreateOptions to indicate
// that the file server is calling into DNR.
#define FILE_OPEN_LOCAL_SCOPE FILE_OPEN_BY_FILE_ID //BUGBUG - need a real bit defn.
#define STATUS_CHILD_VOLUME STATUS_DFS_EXIT_PATH_FOUND // vol. is child of local volume
// BUGBUG - The following need to be in devioctl.h
#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000030
#define FILE_DEVICE_DFS_VOLUME 0x00000031
// BUGBUG - End TEMP declarations
//
// Distributed file service file control code and structure declarations
//
//
// External Distributed file service file control operations
//
#define FSCTL_DFS_DEFINE_LOGICAL_ROOT CTL_CODE(IOCTL_DFS_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_LOGICAL_ROOT CTL_CODE(IOCTL_DFS_BASE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_LOGICAL_ROOT_PREFIX CTL_CODE(IOCTL_DFS_BASE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_DSMACHINE CTL_CODE(IOCTL_DFS_BASE, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_HANDLE_IDS CTL_CODE(IOCTL_DFS_BASE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DEFINE_PROVIDER CTL_CODE(IOCTL_DFS_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_REFERRAL CTL_CODE(IOCTL_DFS_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_INIT_LOCAL_PARTITIONS CTL_CODE(IOCTL_DFS_BASE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CREATE_LOCAL_PARTITION CTL_CODE(IOCTL_DFS_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_LOCAL_PARTITION CTL_CODE(IOCTL_DFS_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_LOCAL_VOLUME_STATE CTL_CODE(IOCTL_DFS_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_SERVICE_STATE CTL_CODE(IOCTL_DFS_BASE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DC_SET_VOLUME_STATE CTL_CODE(IOCTL_DFS_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
//#define FSCTL_DFS_unused CTL_CODE(IOCTL_DFS_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
//#define FSCTL_DFS_unused CTL_CODE(IOCTL_DFS_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_IS_CHILDNAME_LEGAL CTL_CODE(IOCTL_DFS_BASE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_CREATE_ENTRY CTL_CODE(IOCTL_DFS_BASE, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_CREATE_SUBORDINATE_ENTRY CTL_CODE(IOCTL_DFS_BASE, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CHECK_STGID_IN_USE CTL_CODE(IOCTL_DFS_BASE, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_UPDATE_MACHINE_ADDRESS CTL_CODE(IOCTL_DFS_BASE, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_DOMAIN_GLUON CTL_CODE(IOCTL_DFS_BASE, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_UPDATE_SITE_COSTS CTL_CODE(IOCTL_DFS_BASE, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_SET_RELATION_INFO CTL_CODE(IOCTL_DFS_BASE, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_SERVER_INFO CTL_CODE(IOCTL_DFS_BASE, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SET_SERVER_INFO CTL_CODE(IOCTL_DFS_BASE, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_NAME_RESOLVE CTL_CODE(IOCTL_DFS_BASE, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_DESTROY_ENTRY CTL_CODE(IOCTL_DFS_BASE, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_GET_RELATION_INFO CTL_CODE(IOCTL_DFS_BASE, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_LOCAL_NAME_RESOLVE CTL_CODE(IOCTL_DFS_BASE, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CREATE_EXIT_POINT CTL_CODE(IOCTL_DFS_BASE, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_DELETE_EXIT_POINT CTL_CODE(IOCTL_DFS_BASE, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_ALL_ENTRIES CTL_CODE(IOCTL_DFS_BASE, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_CAIRO_SERVER CTL_CODE(IOCTL_DFS_BASE, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_CHILDREN CTL_CODE(IOCTL_DFS_BASE, 33, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_CHECK_REMOTE_PARTITION CTL_CODE(IOCTL_DFS_BASE, 34, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_VERIFY_REMOTE_VOLUME_KNOWLEDGE CTL_CODE(IOCTL_DFS_BASE, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_VERIFY_LOCAL_VOLUME_KNOWLEDGE CTL_CODE(IOCTL_DFS_BASE, 36, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_KNOWLEDGE_SYNC_PARAMETERS CTL_CODE(IOCTL_DFS_BASE, 37, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_MODIFY_PREFIX CTL_CODE(IOCTL_DFS_BASE, 38, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_FIX_LOCAL_VOLUME CTL_CODE(IOCTL_DFS_BASE, 39, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_DRIVE_INFO CTL_CODE(IOCTL_DFS_BASE, 40, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_DRIVE_FOR_PATH CTL_CODE(IOCTL_DFS_BASE, 41, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PATH_TO_INFO CTL_CODE(IOCTL_DFS_BASE, 42, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_INIT_MACH_SHARES CTL_CODE(IOCTL_DFS_BASE, 43, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_ENTRY_MODIFY_GUID CTL_CODE(IOCTL_DFS_BASE, 44, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_PKT_UPDATE_DOMAIN_KNOWLEDGE CTL_CODE(IOCTL_DFS_BASE, 45, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_LINK_DRIVE CTL_CODE(IOCTL_DFS_BASE, 46, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_CONNECTED_RESOURCES CTL_CODE(IOCTL_DFS_BASE, 47, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_SERVER_NAME CTL_CODE(IOCTL_DFS_BASE, 48, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_PATH_FROM_PREFIX CTL_CODE(IOCTL_DFS_BASE, 49, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_READ_METERS CTL_CODE(IOCTL_DFS_BASE, 50, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_SHUFFLE_ENTRY CTL_CODE(IOCTL_DFS_BASE, 51, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_FIRST_SVC CTL_CODE(IOCTL_DFS_BASE, 52, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_NEXT_SVC CTL_CODE(IOCTL_DFS_BASE, 53, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_ENTRY_TYPE CTL_CODE(IOCTL_DFS_BASE, 54, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_DFS_GET_HANDLE_SERVER_INFO CTL_CODE(IOCTL_DFS_BASE, 55, METHOD_BUFFERED, FILE_ANY_ACCESS)
//
// Ea buffer name to open JPs
//
#define EA_NAME_OPENIFJP ".OpenIfJP"
//
// NtDeviceIoControlFile InputBuffer/OutputBuffer record structures for
// this device.
//
#ifndef GUID_DEFINED // BUGBUG - Should come
#define GUID_DEFINED // from someplace more
typedef struct _GUID { // global than ntdddfs.h
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID;
#endif // GUID_DEFINED
//[ dfs_object_guids
//
// The following structure describes the guids that identify an object
// anywhere on the network. This is returned by FSCTL_DFS_GET_HANDLE_IDS.
//
typedef struct _DFS_OBJECT_GUIDS {
GUID guidDomain;
GUID guidVolume;
GUID guidObject;
ULONG ulUniquifier;
} DFS_OBJECT_GUIDS, *PDFS_OBJECT_GUIDS;
//[ dfs_site_cost
//
// The following structure describes a site cost.
//
typedef struct _DFS_SITE_COST {
GUID guidSite;
unsigned long dwCost;
} DFS_SITE_COST, *PDFS_SITE_COST;
//[ dfs_referral
//
// The following structures describe a set of referrals.
//
typedef enum _DFS_REF_TYPE {
MasterReplica = 1,
ReadOnlyReplica = 2,
KnowledgeSource = 3,
LocalReplica = 4,
} DFS_REF_TYPE;
// 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_OFS_API 1 // accepts OFS extension APIs
#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.
typedef struct _DFS_REFERRAL {
ULONG cbRefSize; // total size of referral struct
USHORT eProviderId; // ID of provider
USHORT fRefCapability; // Capabilities of provider
DFS_REF_TYPE eRefType; // type of referral
ULONG cbAddrSize; // size in bytes of address part
ULONG cwPrincipal; // size of principal name
ULONG cbMachine; // size of Machine Buf below.
UCHAR bAddr[1]; // server and resource name/address
WCHAR Principal[1]; // server principal name if cwPrincipal != 0
UCHAR MachineBuf[1]; // Machine struct is marshalled into this.
} DFS_REFERRAL;
typedef struct _DFS_REF_LIST {
ULONG cReferrals; // num of referral structs which follow
DFS_REFERRAL sReferrals[1]; // one or more referral structures
} DFS_REF_LIST;
//]
//[ dsfs_fsctlstructs
// Control structure for FSCTL_DFS_DEFINE_LOGICAL_ROOT
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;
// Control structure for FSCTL_DFS_NAME_RESOLVE
#define DFS_NAME_RES_TYPE_REFERRAL 0
#define DFS_NAME_RES_TYPE_LOCAL 1
typedef struct _FILE_DFS_NAME_RESOLVE_BUFFER {
ULONG ServiceTypes;
ULONG ReferralType; // 1 means return entry that
WCHAR PrefixName[1]; // matches Prefix, 0 means
// return referral for Prefix
} FILE_DFS_NAME_RESOLVE_BUFFER, *PFILE_DFS_NAME_RESOLVE_BUFFER;
// Control structure for FSCTL_DFS_UPD_REFERRAL
typedef struct _FILE_DFS_UPD_REFERRAL_BUFFER {
ULONG ReferralOffset; // Offset in buffer of referral data
GUID PrefixID; // partition ID
ULONG ReferralEntryType;
WCHAR PrefixName[1];
DFS_REF_LIST ReferralData;
} FILE_DFS_UPD_REFERRAL_BUFFER, *PFILE_DFS_UPD_REFERRAL_BUFFER;
// Control structure for FSCTL_DFS_DEFINE_PROVIDER
typedef struct _FILE_DFS_DEF_PROVIDER {
USHORT eProviderId; // ID of provider
USHORT fProvCapability; // Capabilities of provider
WCHAR ProviderName[1];
} FILE_DFS_DEF_PROVIDER, *PFILE_DFS_DEF_PROVIDER;
// Control structure for FSCTL_DFS_GET_DRIVE_FOR_PATH
typedef struct _FILE_DFS_GET_DRIVE {
WCHAR wcDrive;
ULONG cbMatchLength;
} FILE_DFS_GET_DRIVE, *PFILE_DFS_GET_DRIVE;
//]
#endif // _NTDDDFS_
|