NT4/public/sdk/inc/ntdddfs.h
2020-09-30 17:12:29 +02:00

292 lines
12 KiB
C

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