/*++ 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_