/*++ 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 and 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_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 // // 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_STATE_OFFLINE 1 #define DFS_STORAGE_STATE_ONLINE 2 #define DFS_STORAGE_STATE_ACTIVE 4 // // 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; // // 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; 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; // // 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; // // 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; // // 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 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 LPWSTR Comment OPTIONAL, // 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 LPWSTR Comment OPTIONAL, // 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 IN 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 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. IN 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. IN 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 IN 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 LPWSTR Comment OPTIONAL, // Comment IN LPWSTR Store // Drive:\dir backing the share ); NET_API_STATUS NET_API_FUNCTION NetDfsGetDcAddress( IN LPWSTR ServerName, // Server to remote to IN OUT LPWSTR *DcIpAddress, // The IP address of the DC to use IN OUT BOOLEAN *IsRoot, // TRUE if server is a Dfs root, FALSE otherwise IN OUT ULONG *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 // 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 LPWSTR ServerName, // Name of server hosting the storage IN 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-4, 200 // 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 IN OUT 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-4, 100 // NET_API_STATUS NET_API_FUNCTION NetDfsGetInfo( IN LPWSTR DfsEntryPath, // DFS entry path for the volume IN LPWSTR ServerName OPTIONAL,// Name of server hosting a storage IN LPWSTR ShareName OPTIONAL, // 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 LPWSTR ServerName OPTIONAL, // Name of server hosting a storage IN LPWSTR ShareName OPTIONAL, // 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 LPWSTR ServerName OPTIONAL,// Name of server hosting a storage IN LPWSTR ShareName OPTIONAL, // 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 LPWSTR ServerName OPTIONAL, // Name of server hosting a storage IN LPWSTR ShareName OPTIONAL, // 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 DfsEntryPath, // Current DFS entry path for this volume IN LPWSTR DfsNewEntryPath // New DFS entry path for this volume ); 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 ); #ifdef __cplusplus } #endif #endif // _LMDFS_