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