diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/inc/dfsfsctl.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/inc/dfsfsctl.h')
-rw-r--r-- | private/inc/dfsfsctl.h | 359 |
1 files changed, 359 insertions, 0 deletions
diff --git a/private/inc/dfsfsctl.h b/private/inc/dfsfsctl.h new file mode 100644 index 000000000..05ddcecd9 --- /dev/null +++ b/private/inc/dfsfsctl.h @@ -0,0 +1,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 |