569 lines
20 KiB
C
569 lines
20 KiB
C
//+----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
// 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"
|
|
|
|
// The following three context definitions are values that are used by the
|
|
// DFS driver to distinguish opens to the underlying provider.
|
|
// The first two DFS_OPEN_CONTEXT,DFS_DOWNLEVEL_OPEN_CONTEXT are passed in the
|
|
// the FsContext2 field while the DFS_NAME_CONTEXT pointer is passed in the
|
|
// FsContext field of the FILE_OBJECT
|
|
//
|
|
// Sundown Notes: Because these values are stored in PVOID, the way these
|
|
// values are defined and how the compiler extends them to PVOIDs
|
|
// should be considered. They are now considered as const unsigned int.
|
|
// Note also that these values are unaligned and cannot be returned by
|
|
// any memory allocator or coming from the stack. If the "unaligned" point
|
|
// becomes incorrect in the future or if FsContext2 or FsContext fields are
|
|
// tested in any way in terms of pointer address range validity, we should
|
|
// revisit the following statement:
|
|
// These values should be zero-extended when stored to PVOIDs.
|
|
//
|
|
|
|
#define DFS_OPEN_CONTEXT 0xFF444653
|
|
#define DFS_DOWNLEVEL_OPEN_CONTEXT 0x11444653
|
|
#define DFS_CSCAGENT_NAME_CONTEXT 0xaaaaaaaa
|
|
#define DFS_USER_NAME_CONTEXT 0xbbbbbbbb
|
|
#define DFS_FLAG_LAST_ALTERNATE 0x00000001
|
|
|
|
|
|
typedef struct _DFS_NAME_CONTEXT_ {
|
|
UNICODE_STRING UNCFileName;
|
|
LONG NameContextType;
|
|
ULONG Flags;
|
|
PVOID pDfsTargetInfo; // Pointer to dfs crafted target info
|
|
PVOID pLMRTargetInfo; // pointer to lmr crafted target info
|
|
} DFS_NAME_CONTEXT, *PDFS_NAME_CONTEXT;
|
|
|
|
//
|
|
// 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_PKT_FLUSH_CACHE CTL_CODE(FSCTL_DFS_BASE, 2044, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_PKT_FLUSH_SPC_CACHE CTL_CODE(FSCTL_DFS_BASE, 2051, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_GET_PKT_ENTRY_STATE CTL_CODE(FSCTL_DFS_BASE, 2031, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_DFS_SET_PKT_ENTRY_STATE CTL_CODE(FSCTL_DFS_BASE, 2032, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
|
|
//
|
|
// 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)
|
|
#define FSCTL_DFS_FIND_SHARE CTL_CODE(FSCTL_DFS_BASE, 108, 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_START_DFS CTL_CODE(FSCTL_DFS_BASE, 6, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#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_STOP_DFS CTL_CODE(FSCTL_DFS_BASE, 3, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
//
|
|
// unused: keeping for historic reasons.
|
|
//
|
|
#define FSCTL_DFS_CREATE_LOCAL_PARTITION CTL_CODE(FSCTL_DFS_BASE, 8, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_DELETE_LOCAL_PARTITION CTL_CODE(FSCTL_DFS_BASE, 9, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_SET_LOCAL_VOLUME_STATE CTL_CODE(FSCTL_DFS_BASE, 10, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_SET_SERVER_INFO CTL_CODE(FSCTL_DFS_BASE, 24, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_CREATE_EXIT_POINT CTL_CODE(FSCTL_DFS_BASE, 29, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_DELETE_EXIT_POINT CTL_CODE(FSCTL_DFS_BASE, 30, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_VERIFY_REMOTE_VOLUME_KNOWLEDGE CTL_CODE(FSCTL_DFS_BASE, 35, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_DFS_MODIFY_PREFIX CTL_CODE(FSCTL_DFS_BASE, 38, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_FIX_LOCAL_VOLUME CTL_CODE(FSCTL_DFS_BASE, 39, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
//
|
|
// used
|
|
//
|
|
|
|
#define FSCTL_DFS_PKT_SET_DC_NAME CTL_CODE(FSCTL_DFS_BASE, 41, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#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)
|
|
#define FSCTL_DFS_PKT_SET_DOMAINNAMEFLAT CTL_CODE(FSCTL_DFS_BASE, 71, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_PKT_SET_DOMAINNAMEDNS CTL_CODE(FSCTL_DFS_BASE, 72, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_SPECIAL_SET_DC CTL_CODE(FSCTL_DFS_BASE, 74, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_REREAD_REGISTRY CTL_CODE(FSCTL_DFS_BASE, 75, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
#define FSCTL_DFS_GET_CONNECTION_PERF_INFO CTL_CODE(FSCTL_DFS_BASE, 76, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
// this fsctl tells the DFS that a server has gone offline or come online
|
|
// At present, it is issued by the CSC agent thread in winlogon
|
|
#define FSCTL_DFS_CSC_SERVER_OFFLINE CTL_CODE(FSCTL_DFS_BASE, 77, METHOD_BUFFERED, FILE_WRITE_DATA)
|
|
#define FSCTL_DFS_CSC_SERVER_ONLINE CTL_CODE(FSCTL_DFS_BASE, 78, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_DFS_SPC_REFRESH CTL_CODE(FSCTL_DFS_BASE, 79, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
//
|
|
// These are the fsctl codes used by the Dfs WNet provider to support the
|
|
// WNet APIs for Dfs
|
|
//
|
|
|
|
|
|
//
|
|
// These are fsctl codes used by the Dfs Perfmon DLL
|
|
//
|
|
|
|
|
|
//
|
|
// These are fsctls useful for testing Dfs
|
|
//
|
|
|
|
|
|
#define FSCTL_DFS_GET_ENTRY_TYPE CTL_CODE(FSCTL_DFS_BASE, 54, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_DFS_GET_PKT CTL_CODE(FSCTL_DFS_BASE, 70, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
#define FSCTL_DFS_GET_SPC_TABLE CTL_CODE(FSCTL_DFS_BASE, 73, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
|
|
|
//
|
|
// These are the fsctl codes that might be useful in the future.
|
|
//
|
|
|
|
//
|
|
// Registry key/value for site coverage
|
|
//
|
|
#define REG_KEY_COVERED_SITES L"SYSTEM\\CurrentControlSet\\Services\\DfsDriver\\CoveredSites"
|
|
#define REG_VALUE_COVERED_SITES L"CoveredSites"
|
|
|
|
typedef struct _DFS_IPADDRESS {
|
|
USHORT IpFamily; // probably AF_INET == 2
|
|
USHORT IpLen; // # bytes that count in IpData
|
|
CHAR IpData[14]; // IpLen bytes used
|
|
} DFS_IPADDRESS, *PDFS_IPADDRESS;
|
|
|
|
#ifdef MIDL_PASS
|
|
#define DFSMIDLSTRING [string] LPWSTR
|
|
#define DFSSIZEIS [size_is(Count)]
|
|
#else
|
|
#define DFSMIDLSTRING LPWSTR
|
|
#define DFSSIZEIS
|
|
#endif
|
|
|
|
// FSCTL_DFS_IS_VALID_PREFIX Input Buffer
|
|
// The length values are in bytes.
|
|
typedef struct {
|
|
BOOLEAN CSCAgentCreate;
|
|
SHORT RemoteNameLen;
|
|
WCHAR RemoteName[1];
|
|
} DFS_IS_VALID_PREFIX_ARG, *PDFS_IS_VALID_PREFIX_ARG;
|
|
|
|
// FSCTL_DFS_GET_PKT_ENTRY_STATE Input Buffer
|
|
// 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 {
|
|
SHORT DfsEntryPathLen;
|
|
SHORT ServerNameLen;
|
|
SHORT ShareNameLen;
|
|
ULONG Level;
|
|
WCHAR Buffer[1];
|
|
} DFS_GET_PKT_ENTRY_STATE_ARG, *PDFS_GET_PKT_ENTRY_STATE_ARG;
|
|
|
|
// FSCTRL_DFS_SET_PKT_ENTRY_STATE Input Buffer
|
|
// 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 {
|
|
SHORT DfsEntryPathLen;
|
|
SHORT ServerNameLen;
|
|
SHORT ShareNameLen;
|
|
ULONG Level;
|
|
union {
|
|
ULONG State; // DFS_INFO_101
|
|
ULONG Timeout; // DFS_INFL_102
|
|
};
|
|
WCHAR Buffer[1];
|
|
} DFS_SET_PKT_ENTRY_STATE_ARG, *PDFS_SET_PKT_ENTRY_STATE_ARG;
|
|
|
|
// FSCTL_DFS_PKT_CREATE_SPECIAL_NAMES Input Buffer:
|
|
typedef struct {
|
|
ULONG Count;
|
|
LPWSTR SpecialName;
|
|
LPWSTR *ExpandedNames;
|
|
} DFS_SPECIAL_NAME_CONTAINER, *PDFS_SPECIAL_NAME_CONTAINER;
|
|
|
|
typedef struct {
|
|
ULONG Count;
|
|
PDFS_SPECIAL_NAME_CONTAINER *SpecialNameContainers;
|
|
} DFS_PKT_CREATE_SPECIAL_NAMES_ARG, *PDFS_PKT_CREATE_SPECIAL_NAMES_ARG;
|
|
|
|
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_FIND_SHARE Input Buffer
|
|
typedef struct {
|
|
UNICODE_STRING ShareName;
|
|
} DFS_FIND_SHARE_ARG, *PDFS_FIND_SHARE_ARG;
|
|
|
|
// FSCTL_DFS_CREATE_SITE_INFO Input Buffer:
|
|
typedef struct {
|
|
UNICODE_STRING ServerName;
|
|
ULONG SiteCount;
|
|
UNICODE_STRING SiteName[1]; // actually SiteCount
|
|
} DFS_CREATE_SITE_INFO_ARG, *PDFS_CREATE_SITE_INFO_ARG;
|
|
|
|
// FSCTL_DFS_DELETE_SITE_INFO Input Buffer:
|
|
typedef struct {
|
|
UNICODE_STRING ServerName;
|
|
} DFS_DELETE_SITE_INFO_ARG, *PDFS_DELETE_SITE_INFO_ARG;
|
|
|
|
// FSCTL_DFS_CREATE_IP_INFO Input Buffer:
|
|
typedef struct {
|
|
DFS_IPADDRESS IpAddress;
|
|
UNICODE_STRING SiteName;
|
|
} DFS_CREATE_IP_INFO_ARG, *PDFS_CREATE_IP_INFO_ARG;
|
|
|
|
// FSCTL_DFS_DELETE_IP_INFO Input Buffer:
|
|
typedef struct {
|
|
DFS_IPADDRESS IpAddress;
|
|
} DFS_DELETE_IP_INFO_ARG, *PDFS_DELETE_IP_INFO_ARG;
|
|
|
|
// FSCTL_DFS_CREATE_SPECIAL_INFO Input Buffer:
|
|
typedef struct {
|
|
UNICODE_STRING SpecialName;
|
|
ULONG Flags;
|
|
ULONG TrustDirection;
|
|
ULONG TrustType;
|
|
ULONG Timeout;
|
|
LONG NameCount;
|
|
UNICODE_STRING Name[1]; // actually NameCount
|
|
} DFS_CREATE_SPECIAL_INFO_ARG, *PDFS_CREATE_SPECIAL_INFO_ARG;
|
|
|
|
// Flags for FSCTL_DFS_CREATE_SPECIAL_INFO
|
|
#define DFS_SPECIAL_INFO_PRIMARY 0x00000001
|
|
#define DFS_SPECIAL_INFO_NETBIOS 0x00000002
|
|
|
|
// FSCTL_DFS_DELETE_SPECIAL_INFO Input Buffer:
|
|
typedef struct {
|
|
UNICODE_STRING SpecialName;
|
|
} DFS_DELETE_SPECIAL_INFO_ARG, *PDFS_DELETE_SPECIAL_INFO_ARG;
|
|
|
|
// FSCTL_SRV_DFSSRV_CONNECT Input Buffer:
|
|
typedef struct {
|
|
UNICODE_STRING PortName;
|
|
} DFS_SRV_DFSSRV_CONNECT_ARG, *PDFS_SRV_DFSSRV_CONNECT_ARG;
|
|
|
|
// FSCTL_SRV_DFSSRV_IPADDR Input Buffer:
|
|
typedef struct {
|
|
DFS_IPADDRESS IpAddress;
|
|
} DFS_SRV_DFSSRV_IPADDR_ARG, *PDFS_SRV_DFSSRV_IPADDR_ARG;
|
|
|
|
// FSCTL_DFS_GET_REFERRALS Input Buffer
|
|
typedef struct {
|
|
UNICODE_STRING DfsPathName;
|
|
ULONG MaxReferralLevel;
|
|
DFS_IPADDRESS IpAddress;
|
|
} DFS_GET_REFERRALS_INPUT_ARG, *PDFS_GET_REFERRALS_INPUT_ARG;
|
|
|
|
// FSCTL_DFS_SPECIAL_SET_DC Input Buffer
|
|
typedef struct {
|
|
UNICODE_STRING SpecialName;
|
|
UNICODE_STRING DcName;
|
|
} DFS_SPECIAL_SET_DC_INPUT_ARG, *PDFS_SPECIAL_SET_DC_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
|
|
|
|
typedef struct {
|
|
ULONG EventType;
|
|
LPWSTR DomainName; // Name of domain
|
|
LPWSTR DCName; // Path of the share
|
|
} DFS_SPC_REFRESH_INFO, *PDFS_SPC_REFRESH_INFO;
|
|
|
|
|
|
//
|
|
//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;
|
|
|
|
//
|
|
// FSCTRL_DFS_GET_PKT address object
|
|
//
|
|
typedef struct {
|
|
USHORT State; // See below
|
|
WCHAR ServerShare[1]; // Really a WSTR, UNICODE_NULL terminated
|
|
} DFS_PKT_ADDRESS_OBJECT, *PDFS_PKT_ADDRESS_OBJECT;
|
|
|
|
#define DFS_PKT_ADDRESS_OBJECT_ACTIVE 0x001
|
|
#define DFS_PKT_ADDRESS_OBJECT_OFFLINE 0x002
|
|
|
|
//
|
|
// FSCTRL_DFS_GET_PKT object
|
|
//
|
|
typedef struct {
|
|
LPWSTR Prefix;
|
|
LPWSTR ShortPrefix;
|
|
ULONG Type;
|
|
ULONG USN;
|
|
ULONG ExpireTime;
|
|
ULONG UseCount;
|
|
GUID Uid;
|
|
ULONG ServiceCount;
|
|
PDFS_PKT_ADDRESS_OBJECT *Address; // Array of DFS_PKT_ADDRESS_OBJECTS's, len ServiceCount
|
|
} DFS_PKT_ENTRY_OBJECT, *PDFS_PKT_ENTRY_OBJECT;
|
|
|
|
//
|
|
// FSCTRL_DFS_GET_PKT Output Buffer:
|
|
// This fsctl returns what is in the PKT
|
|
//
|
|
typedef struct {
|
|
ULONG EntryCount;
|
|
DFS_PKT_ENTRY_OBJECT EntryObject[1]; // Really EntryCount
|
|
} DFS_GET_PKT_ARG, *PDFS_GET_PKT_ARG;
|
|
|
|
|
|
// Standardized provider IDs as given in eProviderId
|
|
|
|
#define PROV_ID_LOCAL_FS 0x101 // generic local file system
|
|
#define PROV_ID_DFS_RDR 0x201 // Uplevel LanMan redirector
|
|
#define PROV_ID_MUP_RDR 0x202 // Mup
|
|
#define PROV_ID_LM_RDR 0x202 // Compatability
|
|
#define PROV_ID_LANM_RDR 0x203 // Downlevel LanMan redirector
|
|
|
|
// 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;
|
|
|
|
//
|
|
// FORCE definition needed for NetrDfsRemoveFtRoot
|
|
//
|
|
|
|
#define DFS_FORCE_REMOVE 0x80000000
|
|
|
|
//]
|
|
|
|
//[ 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 {
|
|
BOOLEAN CSCAgentCreate;
|
|
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
|
|
|
|
typedef struct _DFS_ATTACH_SHARE_BUFFER {
|
|
BOOLEAN fAttach;
|
|
USHORT ShareNameLength;
|
|
WCHAR ShareName[1];
|
|
} DFS_ATTACH_SHARE_BUFFER, *PDFS_ATTACH_SHARE_BUFFER;
|
|
|
|
//]
|
|
|
|
//----------------------------------------------------------------------------
|
|
//
|
|
// Everything below here is to support the old Dfs design.
|
|
//
|
|
|
|
#define EA_NAME_OPENIFJP ".OpenIfJP"
|
|
|
|
#endif
|
|
|