xpmgr/BuildTools/Include/LMDFS.h

1015 lines
34 KiB
C

/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1991-1999 Microsoft Corporation
Module Name:
lmdfs.h
Abstract:
This file contains structures, function prototypes, and definitions
for the NetDfs API
Environment:
User Mode - Win32
Notes:
You must include <windef.h> and <lmcons.h> before this file.
--*/
#ifndef _LMDFS_
#define _LMDFS_
#if _MSC_VER > 1000
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
//
// DFS Volume state
//
#define DFS_VOLUME_STATES 0xF
#define DFS_VOLUME_STATE_OK 1
#define DFS_VOLUME_STATE_INCONSISTENT 2
#define DFS_VOLUME_STATE_OFFLINE 3
#define DFS_VOLUME_STATE_ONLINE 4
//
// These are valid for setting the volume state on the root
// These are available to force a resynchronize on the root
// volume or to put it in a standby mode.
//
#define DFS_VOLUME_STATE_RESYNCHRONIZE 0x10
#define DFS_VOLUME_STATE_STANDBY 0x20
//
// When supported by a DFS namespace, the local state on
// the DFS root target is refreshed with information from
// the master state in the DFS metadata forcibly.
//
#define DFS_VOLUME_STATE_FORCE_SYNC 0x40
//
// These are valid on getting the volume state on the root
// These are available to determine the flavor of DFS
// A few bits are reserved to determine the flavor of the DFS root.
// To get the flavor, and the state with DFS_VOLUME_FLAVORS.
//
// (_state & DFS_VOLUME_FLAVORS) will tell you the flavor of the dfs root.
//
//
#define DFS_VOLUME_FLAVORS 0x0300
#define DFS_VOLUME_FLAVOR_UNUSED1 0x0000
#define DFS_VOLUME_FLAVOR_STANDALONE 0x0100
#define DFS_VOLUME_FLAVOR_AD_BLOB 0x0200
#define DFS_STORAGE_FLAVOR_UNUSED2 0x0300
//
// DFS Storage State
//
#define DFS_STORAGE_STATES 0xF
#define DFS_STORAGE_STATE_OFFLINE 1
#define DFS_STORAGE_STATE_ONLINE 2
#define DFS_STORAGE_STATE_ACTIVE 4
//
// Priority of a DFS target consists of the
// tuple <priority class, priority rank>. Priority
// ranks are valid only within a priority class and
// not across priority classes.
// Priority rank is 0-n, where 0 is highest rank.
//
// We have consciously chosen 0 to indicate the
// "normal" priority class, i.e. one that would
// be used if target priorities aren't used.
//
// The members of the enumeration have been explicitly
// set in a specific order (in the enumeration).
//
// We need the MIDL_PASS decoration to force sending
// the enums as 32-bit values instead of the default
// 16-bit values for enums.
//
#ifdef MIDL_PASS
typedef [v1_enum] enum _DFS_TARGET_PRIORITY_CLASS {
#else
typedef enum _DFS_TARGET_PRIORITY_CLASS {
#endif
DfsInvalidPriorityClass = -1,
DfsSiteCostNormalPriorityClass = 0,
DfsGlobalHighPriorityClass,
DfsSiteCostHighPriorityClass,
DfsSiteCostLowPriorityClass,
DfsGlobalLowPriorityClass
} DFS_TARGET_PRIORITY_CLASS;
typedef struct _DFS_TARGET_PRIORITY {
DFS_TARGET_PRIORITY_CLASS TargetPriorityClass; // Priority class of target.
USHORT TargetPriorityRank; // Priority rank of target.
USHORT Reserved; // Must be set to 0.
} DFS_TARGET_PRIORITY, *PDFS_TARGET_PRIORITY;
//
// Level 1:
//
typedef struct _DFS_INFO_1 {
LPWSTR EntryPath; // Dfs name for the top of this piece of storage
} DFS_INFO_1, *PDFS_INFO_1, *LPDFS_INFO_1;
#if defined(_WIN64)
//
// WOW64 support: Permit 32-bit callers to use 64-bit
// driver.
//
typedef struct _DFS_INFO_1_32 {
ULONG EntryPath; // Dfs name for the top of this volume
} DFS_INFO_1_32, *PDFS_INFO_1_32, *LPDFS_INFO_1_32;
#endif /* _WIN64 */
//
// Level 2:
//
typedef struct _DFS_INFO_2 {
LPWSTR EntryPath; // Dfs name for the top of this volume
LPWSTR Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
DWORD NumberOfStorages; // Number of storages for this volume
} DFS_INFO_2, *PDFS_INFO_2, *LPDFS_INFO_2;
#if defined(_WIN64)
//
// WOW64 support: Permit 32-bit callers to use 64-bit
// driver.
//
typedef struct _DFS_INFO_2_32 {
ULONG EntryPath; // Dfs name for the top of this volume
ULONG Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
DWORD NumberOfStorages; // Number of storage servers for this volume
} DFS_INFO_2_32, *PDFS_INFO_2_32, *LPDFS_INFO_2_32;
#endif /* _WIN64 */
typedef struct _DFS_STORAGE_INFO {
ULONG State; // State of this storage, one of DFS_STORAGE_STATE_*
// possibly OR'd with DFS_STORAGE_STATE_ACTIVE
LPWSTR ServerName; // Name of server hosting this storage
LPWSTR ShareName; // Name of share hosting this storage
} DFS_STORAGE_INFO, *PDFS_STORAGE_INFO, *LPDFS_STORAGE_INFO;
#if defined(_WIN64)
//
// We should be calling this structure DFS_STORAGE_INFO_32 as per
// convention. However, we don't want to pollute the namespace of new
// types that have been defined (for example, DFS_STORAGE_INFO_1) as
// enhancements to the "base" DFS_STORAGE_INFO structure. Hence,
// we define the WOW64 support structure as DFS_STORAGE_INFO_0_32.
//
typedef struct _DFS_STORAGE_INFO_0_32 {
ULONG State; // State of this storage, one of DFS_STORAGE_STATE_*
// possibly OR'd with DFS_STORAGE_STATE_ACTIVE
ULONG ServerName; // Name of server hosting this storage
ULONG ShareName; // Name of share hosting this storage
} DFS_STORAGE_INFO_0_32, *PDFS_STORAGE_INFO_0_32, *LPDFS_STORAGE_INFO_0_32;
#endif // _WIN64.
//
// WOW64 support: Permit 32-bit callers to use 64-bit
// driver.
//
typedef struct _DFS_STORAGE_INFO_1 {
ULONG State; // State of this target, one of DFS_TARGET_STATE_*
// possibly OR'd with DFS_STORAGE_STATE_ACTIVE
LPWSTR ServerName; // Name of server hosting this target
LPWSTR ShareName; // Name of share hosting this target
DFS_TARGET_PRIORITY TargetPriority; // Priority of this target.
} DFS_STORAGE_INFO_1, *PDFS_STORAGE_INFO_1, *LPDFS_STORAGE_INFO_1;
//
// Level 3:
//
typedef struct _DFS_INFO_3 {
LPWSTR EntryPath; // Dfs name for the top of this volume
LPWSTR Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
DWORD NumberOfStorages; // Number of storage servers for this volume
#ifdef MIDL_PASS
[size_is(NumberOfStorages)] LPDFS_STORAGE_INFO Storage;
#else
LPDFS_STORAGE_INFO Storage; // An array (of NumberOfStorages elements) of
// storage-specific information.
#endif // MIDL_PASS
} DFS_INFO_3, *PDFS_INFO_3, *LPDFS_INFO_3;
#if defined(_WIN64)
//
// WOW64 support: Permit 32-bit callers to use 64-bit
// driver.
//
typedef struct _DFS_INFO_3_32 {
ULONG EntryPath; // Dfs name for the top of this volume
ULONG Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
DWORD NumberOfStorages; // Number of storage servers for this volume
ULONG Storage; // An array (of NumberOfStorages elements) of
// storage-specific information. Each element
// is of type DFS_STORAGE_INFO_0_32.
} DFS_INFO_3_32, *PDFS_INFO_3_32, *LPDFS_INFO_3_32;
#endif /* _WIN64 */
//
// Level 4:
//
typedef struct _DFS_INFO_4 {
LPWSTR EntryPath; // Dfs name for the top of this volume
LPWSTR Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
ULONG Timeout; // Timeout, in seconds, of this junction point
GUID Guid; // Guid of this junction point
DWORD NumberOfStorages; // Number of storage servers for this volume
#ifdef MIDL_PASS
[size_is(NumberOfStorages)] LPDFS_STORAGE_INFO Storage;
#else
LPDFS_STORAGE_INFO Storage; // An array (of NumberOfStorages elements) of
// storage-specific information.
#endif // MIDL_PASS
} DFS_INFO_4, *PDFS_INFO_4, *LPDFS_INFO_4;
#if defined(_WIN64)
//
// WOW64 support: Permit 32-bit callers to use 64-bit
// driver.
//
typedef struct _DFS_INFO_4_32 {
ULONG EntryPath; // Dfs name for the top of this volume
ULONG Comment; // Comment for this volume
DWORD State; // State of this volume, one of DFS_VOLUME_STATE_*
ULONG Timeout; // Timeout, in seconds, of this junction point
GUID Guid; // Guid of this junction point
DWORD NumberOfStorages; // Number of storage servers for this volume
ULONG Storage; // An array (of NumberOfStorages elements) of
// storage-specific information. Each element
// is of type DFS_STORAGE_INFO_0_32.
} DFS_INFO_4_32, *PDFS_INFO_4_32, *LPDFS_INFO_4_32;
#endif /* _WIN64 */
//
// Level 5:
//
typedef struct _DFS_INFO_5 {
LPWSTR EntryPath; // Name of DFS namespace, DFS root name.
LPWSTR Comment; // Comment for root/link.
DWORD State; // State of the root/link, one of DFS_VOLUME_STATE_*
// Also has DFS_VOLUME_FLAVOR_* information.
ULONG Timeout; // Referral TTL, in seconds, of root/link.
GUID Guid; // GUID of this root/link.
ULONG PropertyFlags; // Properties of root/link. One of DFS_PROPERTY_FLAG_*
ULONG MetadataSize; // Size of Active Directory BLOB for a domain-based
// DFS namespace; size of metadata stored in registry
// for stand-alone DFS. Valid for DFS roots only.
DWORD NumberOfStorages; // Number of storage servers for this volume
} DFS_INFO_5, *PDFS_INFO_5, *LPDFS_INFO_5;
//
// Level 6:
//
typedef struct _DFS_INFO_6 {
LPWSTR EntryPath; // Name of DFS namespace, DFS root name.
LPWSTR Comment; // Comment for root/link.
DWORD State; // State of the root/link, one of DFS_VOLUME_STATE_*
// Also has DFS_VOLUME_FLAVOR_* information.
ULONG Timeout; // Referral TTL, in seconds, of root/link.
GUID Guid; // GUID of this root/link.
ULONG PropertyFlags; // Properties of root/link. One of DFS_PROPERTY_FLAG_*
ULONG MetadataSize; // Size of Active Directory BLOB for a domain-based
// DFS namespace; size of metadata stored in registry
// for stand-alone DFS. Valid for DFS roots only.
DWORD NumberOfStorages; // Number of targets for this root/link.
#ifdef MIDL_PASS
[size_is(NumberOfStorages)] LPDFS_STORAGE_INFO_1 Storage;
#else
LPDFS_STORAGE_INFO_1 Storage; // An array (of NumberOfStorages elements) of
// storage-specific information.
#endif // MIDL_PASS
} DFS_INFO_6, *PDFS_INFO_6, *LPDFS_INFO_6;
//
// Level 7:
//
typedef struct _DFS_INFO_7 {
GUID GenerationGuid; // Guid representation of the version/generation
// number of the DFS root.
} DFS_INFO_7, *PDFS_INFO_7, *LPDFS_INFO_7;
//
// Level 8:
//
typedef struct _DFS_INFO_8 {
LPWSTR EntryPath; // Name of DFS namespace, DFS root name.
LPWSTR Comment; // Comment for root/link.
DWORD State; // State of the root/link, one of DFS_VOLUME_STATE_*
// Also has DFS_VOLUME_FLAVOR_* information.
ULONG Timeout; // Referral TTL, in seconds, of root/link.
GUID Guid; // GUID of this root/link.
ULONG PropertyFlags; // Properties of root/link. One of DFS_PROPERTY_FLAG_*
ULONG MetadataSize; // Size of Active Directory BLOB for a domain-based
// DFS namespace; size of metadata stored in registry
// for stand-alone DFS. Valid for DFS roots only.
#ifdef MIDL_PASS
//
// For use by the RPC marshalling code only.
//
ULONG SecurityDescriptorLength;
//
// Self-relative security descriptor to be associated
// with DFS link (and stamped on the reparse-point
// on disk).
//
[size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
#else
ULONG SdLengthReserved;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
#endif
DWORD NumberOfStorages; // Number of storage servers for this volume
} DFS_INFO_8, *PDFS_INFO_8, *LPDFS_INFO_8;
//
// Level 9:
//
typedef struct _DFS_INFO_9 {
LPWSTR EntryPath; // Name of DFS namespace, DFS root name.
LPWSTR Comment; // Comment for root/link.
DWORD State; // State of the root/link, one of DFS_VOLUME_STATE_*
// Also has DFS_VOLUME_FLAVOR_* information.
ULONG Timeout; // Referral TTL, in seconds, of root/link.
GUID Guid; // GUID of this root/link.
ULONG PropertyFlags; // Properties of root/link. One of DFS_PROPERTY_FLAG_*
ULONG MetadataSize; // Size of Active Directory BLOB for a domain-based
// DFS namespace; size of metadata stored in registry
// for stand-alone DFS. Valid for DFS roots only.
#ifdef MIDL_PASS
//
// For use by the RPC marshalling code only.
//
ULONG SecurityDescriptorLength;
//
// Self-relative security descriptor to be associated
// with DFS link (and stamped on the reparse-point
// on disk).
//
[size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
#else
ULONG SdLengthReserved;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
#endif
DWORD NumberOfStorages; // Number of targets for this root/link.
#ifdef MIDL_PASS
[size_is(NumberOfStorages)] LPDFS_STORAGE_INFO_1 Storage;
#else
LPDFS_STORAGE_INFO_1 Storage; // An array (of NumberOfStorages elements) of
// storage-specific information.
#endif // MIDL_PASS
} DFS_INFO_9, *PDFS_INFO_9, *LPDFS_INFO_9;
//
// The PropertyFlags field of DFS_INFO_5, DFS_INFO_6,
// DFS_INFO_103, DFS_INFO_105 & DFS_INFO_107.
//
#define DFS_VALID_PROPERTY_FLAGS (DFS_PROPERTY_FLAG_INSITE_REFERRALS | \
DFS_PROPERTY_FLAG_ROOT_SCALABILITY | \
DFS_PROPERTY_FLAG_SITE_COSTING | \
DFS_PROPERTY_FLAG_TARGET_FAILBACK | \
DFS_PROPERTY_FLAG_CLUSTER_ENABLED | \
DFS_PROPERTY_FLAG_ABDE)
//
// The "insite" flag. When set, only targets in the same
// site as the client are returned.
//
// Valid for domain/standalone roots/links
//
#define DFS_PROPERTY_FLAG_INSITE_REFERRALS 0x00000001
//
// "Root scalability" mode. When set, DFS server polls
// the nearest DC instead of PDC to check for DFS namespace
// changes. Valid only for domain roots.
//
#define DFS_PROPERTY_FLAG_ROOT_SCALABILITY 0x00000002
//
// Enables Active Directory site costing of targets. When enabled,
// targets are grouped into sets of increasing site costs from
// DFS client to target. Each set has targets of same cost.
// If not set, there are only two sets: set of targets in same
// site as client and set of targets not in the same site as the client.
// The latter is called "site awareness".
// Valid only domain/standalone roots
//
#define DFS_PROPERTY_FLAG_SITE_COSTING 0x00000004
//
// Should the DFS client attempt to failback to a closer target
// when it is available after failing over to a non-optimal target?
// Valid for domain/standalone roots/links.
//
#define DFS_PROPERTY_FLAG_TARGET_FAILBACK 0x00000008
//
// Bit will be 1 if the DFS root is clustered. Cannot be set
// using the NetDfsSetInfo() API.
//
#define DFS_PROPERTY_FLAG_CLUSTER_ENABLED 0x00000010
//
// When set by the caller, Access-Based Directory Enumeration support
// is enabled on all the DFS root target share of the DFS namespace.
// Valid only for DFS namespaces which support the capability
// DFS_NAMESPACE_CAPABILITY_ABDE. Valid only on the DFS namespace root
// and not on root targets, link or link targets.
// This property must be enabled to associate security descriptor
// with a DFS link.
//
#define DFS_PROPERTY_FLAG_ABDE 0x00000020
//
// Level 50:
//
//
// DFS metadata version and capabilities of an existing
// DFS namespace.
//
typedef struct _DFS_INFO_50 {
ULONG NamespaceMajorVersion;
ULONG NamespaceMinorVersion;
ULONGLONG NamespaceCapabilities;
} DFS_INFO_50, *PDFS_INFO_50, *LPDFS_INFO_50;
//
// Level 100:
//
typedef struct _DFS_INFO_100 {
LPWSTR Comment; // Comment for this volume or storage
} DFS_INFO_100, *PDFS_INFO_100, *LPDFS_INFO_100;
//
// Level 101:
//
typedef struct _DFS_INFO_101 {
DWORD State; // State of this storage, one of DFS_STORAGE_STATE_*
// possibly OR'd with DFS_STORAGE_STATE_ACTIVE
} DFS_INFO_101, *PDFS_INFO_101, *LPDFS_INFO_101;
//
// Level 102:
//
typedef struct _DFS_INFO_102 {
ULONG Timeout; // Timeout, in seconds, of the junction
} DFS_INFO_102, *PDFS_INFO_102, *LPDFS_INFO_102;
//
// Level 103:
//
typedef struct _DFS_INFO_103 {
ULONG PropertyFlagMask; // Indicates which flags in PropertyFlags are valid.
ULONG PropertyFlags; // Flag meaningful only if corresponding bit set in
// PropertyFlagMask above.
} DFS_INFO_103, *PDFS_INFO_103, *LPDFS_INFO_103;
//
// Level 104:
//
typedef struct _DFS_INFO_104 {
DFS_TARGET_PRIORITY TargetPriority; // Priority of target.
} DFS_INFO_104, *PDFS_INFO_104, *LPDFS_INFO_104;
//
// Level 105:
//
typedef struct _DFS_INFO_105 {
LPWSTR Comment; // Comment for this root/link.
DWORD State; // State of this root/link. One of DFS_VOLUME_STATE_*
ULONG Timeout; // Referral TTL, in seconds, of root/link.
ULONG PropertyFlagMask; // Indicates which flags in PropertyFlags are valid.
ULONG PropertyFlags; // One of DFS_PROPERTY_FLAG_*
} DFS_INFO_105, *PDFS_INFO_105, *LPDFS_INFO_105;
//
// Level 106:
//
typedef struct _DFS_INFO_106 {
DWORD State; // State of this root/link target.
// One of DFS_TARGET_STATE_*
DFS_TARGET_PRIORITY TargetPriority; // Priority of this target.
} DFS_INFO_106, *PDFS_INFO_106, *LPDFS_INFO_106;
//
// Level 107:
//
typedef struct _DFS_INFO_107 {
LPWSTR Comment; // Comment for this root/link.
DWORD State; // State of this root/link. One of DFS_VOLUME_STATE_*
ULONG Timeout; // Referral TTL, in seconds, of root/link.
ULONG PropertyFlagMask; // Indicates which flags in PropertyFlags are valid.
ULONG PropertyFlags; // One of DFS_PROPERTY_FLAG_*
#ifdef MIDL_PASS
//
// For use by the RPC marshalling code only.
//
ULONG SecurityDescriptorLength;
//
// Self-relative security descriptor to be associated
// with DFS link (and stamped on the reparse-point
// on disk).
//
[size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
#else
ULONG SdLengthReserved;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
#endif
} DFS_INFO_107, *PDFS_INFO_107, *LPDFS_INFO_107;
//
// Level 150:
//
typedef struct _DFS_INFO_150 {
#ifdef MIDL_PASS
//
// For use by the RPC marshalling code only.
//
ULONG SecurityDescriptorLength;
//
// Self-relative security descriptor to be associated
// with DFS link (and stamped on the reparse-point
// on disk).
//
[size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
#else
ULONG SdLengthReserved;
PSECURITY_DESCRIPTOR pSecurityDescriptor;
#endif
} DFS_INFO_150, *PDFS_INFO_150, *LPDFS_INFO_150;
//
// Level 200:
//
typedef struct _DFS_INFO_200 {
LPWSTR FtDfsName; // FtDfs name
} DFS_INFO_200, *PDFS_INFO_200, *LPDFS_INFO_200;
//
// Level 300:
//
typedef struct _DFS_INFO_300 {
DWORD Flags;
LPWSTR DfsName; // Dfs name
} DFS_INFO_300, *PDFS_INFO_300, *LPDFS_INFO_300;
//
// Add a new volume or additional storage for an existing volume at
// DfsEntryPath.
//
NET_API_STATUS NET_API_FUNCTION
NetDfsAdd(
__in LPWSTR DfsEntryPath, // DFS entry path for this added volume or storage
__in LPWSTR ServerName, // Name of server hosting the storage
__in LPWSTR ShareName, // Existing share name for the storage
__in_opt LPWSTR Comment, // Optional comment for this volume or storage
__in DWORD Flags // See below. Zero for no flags.
);
//
// Flags:
//
#define DFS_ADD_VOLUME 1 // Add a new volume to the DFS if not already there
#define DFS_RESTORE_VOLUME 2 // Volume/Replica is being restored - do not verify share etc.
//
// Setup/teardown API's for standard and FtDfs roots.
//
NET_API_STATUS NET_API_FUNCTION
NetDfsAddStdRoot(
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share to make Dfs root
__in_opt LPWSTR Comment, // Comment
__in DWORD Flags // Flags for operation. Zero for no flags.
);
NET_API_STATUS NET_API_FUNCTION
NetDfsRemoveStdRoot(
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share that host Dfs root
__reserved DWORD Flags // Flags for operation. Zero for no flags.
);
NET_API_STATUS NET_API_FUNCTION
NetDfsAddFtRoot(
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share to make Dfs root
__in LPWSTR FtDfsName, // Name of FtDfs to create/join
__in_opt LPWSTR Comment, // Comment
__in DWORD Flags // Flags for operation. Zero for no flags.
);
NET_API_STATUS NET_API_FUNCTION
NetDfsRemoveFtRoot(
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share that host Dfs root
__in LPWSTR FtDfsName, // Name of FtDfs to remove or unjoin from.
__reserved DWORD Flags // Flags for operation. Zero for no flags.
);
NET_API_STATUS NET_API_FUNCTION
NetDfsRemoveFtRootForced(
__in LPWSTR DomainName, // Name of domain the server is in
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share that host Dfs root
__in LPWSTR FtDfsName, // Name of FtDfs to remove or unjoin from.
__reserved DWORD Flags // Flags for operation. Zero for no flags.
);
//
// Call to reinitialize the dfsmanager on a machine
//
NET_API_STATUS NET_API_FUNCTION
NetDfsManagerInitialize(
__in LPWSTR ServerName, // Server to remote to
__reserved DWORD Flags // Flags for operation. Zero for no flags.
);
NET_API_STATUS NET_API_FUNCTION
NetDfsAddStdRootForced(
__in LPWSTR ServerName, // Server to remote to
__in LPWSTR RootShare, // Share to make Dfs root
__in_opt LPWSTR Comment, // Comment
__in LPWSTR Store // Drive:\dir backing the share
);
NET_API_STATUS NET_API_FUNCTION
NetDfsGetDcAddress(
__in LPWSTR ServerName, // Server to remote to
__deref_out LPWSTR *DcIpAddress, // The IP address of the DC to use
__out PBOOLEAN IsRoot, // TRUE if server is a Dfs root, FALSE otherwise
__out PULONG Timeout // Time, in sec, that we stay with this DC
);
//
// Flags for NetDfsSetDcAddress()
//
#define NET_DFS_SETDC_FLAGS 0x00000000
#define NET_DFS_SETDC_TIMEOUT 0x00000001
#define NET_DFS_SETDC_INITPKT 0x00000002
//
// Structures used for site reporting. Last used in Windows 2000, maintained for
// the obsolete SRVSVC RPC API NetrDfsManagerReportSiteInfo.
//
typedef struct {
ULONG SiteFlags; // Below
#ifdef MIDL_PASS
[string,unique] LPWSTR SiteName;
#else
LPWSTR SiteName;
#endif
} DFS_SITENAME_INFO, *PDFS_SITENAME_INFO, *LPDFS_SITENAME_INFO;
// SiteFlags
#define DFS_SITE_PRIMARY 0x1 // This site returned by DsGetSiteName()
typedef struct {
ULONG cSites;
#ifdef MIDL_PASS
[size_is(cSites)] DFS_SITENAME_INFO Site[];
#else
DFS_SITENAME_INFO Site[1];
#endif
} DFS_SITELIST_INFO, *PDFS_SITELIST_INFO, *LPDFS_SITELIST_INFO;
//
// Remove a volume or additional storage for volume from the Dfs at
// DfsEntryPath. When applied to the last storage in a volume, removes
// the volume from the DFS.
//
NET_API_STATUS NET_API_FUNCTION
NetDfsRemove(
__in LPWSTR DfsEntryPath, // DFS entry path for this added volume or storage
__in_opt LPWSTR ServerName, // Name of server hosting the storage
__in_opt LPWSTR ShareName // Name of share hosting the storage
);
//
// Get information about all of the volumes in the Dfs. DfsName is
// the "server" part of the UNC name used to refer to this particular Dfs.
//
// Valid levels are 1-5, 200, 300
//
NET_API_STATUS NET_API_FUNCTION
NetDfsEnum(
__in LPWSTR DfsName, // Name of the Dfs for enumeration
__in DWORD Level, // Level of information requested
__in DWORD PrefMaxLen, // Advisory, but -1 means "get it all"
__out LPBYTE *Buffer, // API allocates and returns buffer with requested info
__out LPDWORD EntriesRead, // Number of entries returned
__inout LPDWORD ResumeHandle // Must be 0 on first call, reused on subsequent calls
);
//
// Get information about the volume or storage.
// If ServerName and ShareName are specified, the information returned
// is specific to that server and share, else the information is specific
// to the volume as a whole.
//
// Valid levels are 1-5, 100
//
NET_API_STATUS NET_API_FUNCTION
NetDfsGetInfo(
__in LPWSTR DfsEntryPath, // DFS entry path for the volume
__in_opt LPWSTR ServerName, // Name of server hosting a storage
__in_opt LPWSTR ShareName, // Name of share on server serving the volume
__in DWORD Level, // Level of information requested
__out LPBYTE *Buffer // API allocates and returns buffer with requested info
);
//
// Set info about the volume or storage.
// If ServerName and ShareName are specified, the information set is
// specific to that server and share, else the information is specific
// to the volume as a whole.
//
// Valid levels are 100, 101 and 102
//
NET_API_STATUS NET_API_FUNCTION
NetDfsSetInfo(
__in LPWSTR DfsEntryPath, // DFS entry path for the volume
__in_opt LPWSTR ServerName, // Name of server hosting a storage
__in_opt LPWSTR ShareName, // Name of share hosting a storage
__in DWORD Level, // Level of information to be set
__in LPBYTE Buffer // Buffer holding information
);
//
// Get client's cached information about the volume or storage.
// If ServerName and ShareName are specified, the information returned
// is specific to that server and share, else the information is specific
// to the volume as a whole.
//
// Valid levels are 1-4
//
NET_API_STATUS NET_API_FUNCTION
NetDfsGetClientInfo(
__in LPWSTR DfsEntryPath, // DFS entry path for the volume
__in_opt LPWSTR ServerName, // Name of server hosting a storage
__in_opt LPWSTR ShareName, // Name of share on server serving the volume
__in DWORD Level, // Level of information requested
__out LPBYTE *Buffer // API allocates and returns buffer with requested info
);
//
// Set client's cached info about the volume or storage.
// If ServerName and ShareName are specified, the information set is
// specific to that server and share, else the information is specific
// to the volume as a whole.
//
// Valid levels are 101 and 102.
//
NET_API_STATUS NET_API_FUNCTION
NetDfsSetClientInfo(
__in LPWSTR DfsEntryPath, // DFS entry path for the volume
__in_opt LPWSTR ServerName, // Name of server hosting a storage
__in_opt LPWSTR ShareName, // Name of share hosting a storage
__in DWORD Level, // Level of information to be set
__in LPBYTE Buffer // Buffer holding information
);
//
// Move a DFS volume and all subordinate volumes from one place in the
// DFS to another place in the DFS.
//
NET_API_STATUS NET_API_FUNCTION
NetDfsMove(
__in LPWSTR OldDfsEntryPath, // Current DFS entry path for this volume
__in LPWSTR NewDfsEntryPath, // New DFS entry path for this volume
__in ULONG Flags
);
//
// Flags accepted by NetDfsMove
//
//
// This indicates that if a colliding link is found it should be replaced
//
#define DFS_MOVE_FLAG_REPLACE_IF_EXISTS 0x00000001
NET_API_STATUS NET_API_FUNCTION
NetDfsRename(
__in LPWSTR Path, // Current Win32 path in a Dfs
__in LPWSTR NewPath // New Win32 path in the same Dfs
);
NET_API_STATUS NET_API_FUNCTION
NetDfsAddRootTarget(
__in LPWSTR pDfsPath,
__in_opt LPWSTR pTargetPath,
__in ULONG MajorVersion,
__in_opt LPWSTR pComment,
__in ULONG Flags
);
//
// Reuse existing definition used by NetrDfsRemoveFtRoot().
//
#ifndef DFS_FORCE_REMOVE
#define DFS_FORCE_REMOVE 0x80000000
#endif
NET_API_STATUS NET_API_FUNCTION
NetDfsRemoveRootTarget(
__in LPWSTR pDfsPath,
__in_opt LPWSTR pTargetPath,
__in ULONG Flags
);
NET_API_STATUS NET_API_FUNCTION
NetDfsGetSecurity(
__in LPWSTR DfsEntryPath,
__in SECURITY_INFORMATION SecurityInformation,
__deref_out_bcount(*lpcbSecurityDescriptor) PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
__out LPDWORD lpcbSecurityDescriptor
);
NET_API_STATUS NET_API_FUNCTION
NetDfsSetSecurity(
__in LPWSTR DfsEntryPath,
__in SECURITY_INFORMATION SecurityInformation,
__in PSECURITY_DESCRIPTOR pSecurityDescriptor
);
NET_API_STATUS NET_API_FUNCTION
NetDfsGetStdContainerSecurity(
__in LPWSTR MachineName,
__in SECURITY_INFORMATION SecurityInformation,
__deref_out_bcount(*lpcbSecurityDescriptor) PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
__out LPDWORD lpcbSecurityDescriptor
);
NET_API_STATUS NET_API_FUNCTION
NetDfsSetStdContainerSecurity(
__in LPWSTR MachineName,
__in SECURITY_INFORMATION SecurityInformation,
__in PSECURITY_DESCRIPTOR pSecurityDescriptor
);
NET_API_STATUS NET_API_FUNCTION
NetDfsGetFtContainerSecurity(
__in LPWSTR DomainName,
__in SECURITY_INFORMATION SecurityInformation,
__deref_out_bcount(*lpcbSecurityDescriptor) PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
__out LPDWORD lpcbSecurityDescriptor
);
NET_API_STATUS NET_API_FUNCTION
NetDfsSetFtContainerSecurity(
__in LPWSTR DomainName,
__in SECURITY_INFORMATION SecurityInformation,
__in PSECURITY_DESCRIPTOR pSecurityDescriptor
);
//
// Origin of DFS namespace version information.
//
typedef enum {
DFS_NAMESPACE_VERSION_ORIGIN_COMBINED = 0, // Max version {server, AD DS domain}
// can support.
DFS_NAMESPACE_VERSION_ORIGIN_SERVER, // Max version server can support.
DFS_NAMESPACE_VERSION_ORIGIN_DOMAIN // Max version AD DS domain can support.
} DFS_NAMESPACE_VERSION_ORIGIN, *PDFS_NAMESPACE_VERSION_ORIGIN;
//
// Capabilities:
// Set of bit flags which indicates support for a specific capability.
//
//
// DFS namespace supports associating a security descriptor with DFS link
// for Access-Based Directory Enumeration purposes.
//
#define DFS_NAMESPACE_CAPABILITY_ABDE ((ULONGLONG) 0x0000000000000001)
typedef struct _DFS_SUPPORTED_NAMESPACE_VERSION_INFO {
//
// Domain-based DFS information.
// Valid only if DomainDfsMajorVersion != 0.
//
ULONG DomainDfsMajorVersion;
ULONG DomainDfsMinorVersion;
ULONGLONG DomainDfsCapabilities;
//
// Standalone DFS information.
// Valid only if StandaloneDfsMajorVersion != 0.
//
ULONG StandaloneDfsMajorVersion;
ULONG StandaloneDfsMinorVersion;
ULONGLONG StandaloneDfsCapabilities;
} DFS_SUPPORTED_NAMESPACE_VERSION_INFO, *PDFS_SUPPORTED_NAMESPACE_VERSION_INFO;
NET_API_STATUS NET_API_FUNCTION
NetDfsGetSupportedNamespaceVersion(
__in DFS_NAMESPACE_VERSION_ORIGIN Origin,
__in_opt PWSTR pName,
__deref_out PDFS_SUPPORTED_NAMESPACE_VERSION_INFO *ppVersionInfo
);
#ifdef __cplusplus
}
#endif
#endif // _LMDFS_