/*++ Copyright (c) 1996 Microsoft Corporation Module Name: NETDFS.IDL Abstract: Contains the Netr (Net Remote) RPC interface specification for the API associated with the Dfs Manager Service. This includes the following APIs: NetDfsEnum Also contains the RPC specific data structures for these API. Author: Milan Shah (milans) 08-Jan-1996 Environment: User Mode - Win32 - MIDL Revision History: 08-Jan-1996 Milans Created. --*/ // // Interface Attributes // [ uuid(4fc742e0-4a10-11cf-8273-00aa004ae673), version(3.0), #ifdef __midl ms_union, #endif // __midl pointer_default(unique) ] interface netdfs { import "import.idl"; #include // // Data structures used by the public Dfs interface // typedef struct _DFS_INFO_1_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_1 Buffer; } DFS_INFO_1_CONTAINER, *LPDFS_INFO_1_CONTAINER; typedef struct _DFS_INFO_2_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_2 Buffer; } DFS_INFO_2_CONTAINER, *LPDFS_INFO_2_CONTAINER; typedef struct _DFS_INFO_3_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_3 Buffer; } DFS_INFO_3_CONTAINER, *LPDFS_INFO_3_CONTAINER; typedef struct _DFS_INFO_4_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_4 Buffer; } DFS_INFO_4_CONTAINER, *LPDFS_INFO_4_CONTAINER; typedef struct _DFS_INFO_200_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_200 Buffer; } DFS_INFO_200_CONTAINER, *LPDFS_INFO_200_CONTAINER; typedef struct _DFS_INFO_300_CONTAINER { DWORD EntriesRead; [size_is(EntriesRead)] LPDFS_INFO_300 Buffer; } DFS_INFO_300_CONTAINER, *LPDFS_INFO_300_CONTAINER; typedef struct _DFS_INFO_ENUM_STRUCT { DWORD Level; [switch_is(Level)] union { [case(1)] LPDFS_INFO_1_CONTAINER DfsInfo1Container; [case(2)] LPDFS_INFO_2_CONTAINER DfsInfo2Container; [case(3)] LPDFS_INFO_3_CONTAINER DfsInfo3Container; [case(4)] LPDFS_INFO_4_CONTAINER DfsInfo4Container; [case(200)] LPDFS_INFO_200_CONTAINER DfsInfo200Container; [case(300)] LPDFS_INFO_300_CONTAINER DfsInfo300Container; } DfsInfoContainer; } DFS_INFO_ENUM_STRUCT, *LPDFS_INFO_ENUM_STRUCT; typedef [switch_type(unsigned long)] union _DFS_INFO_STRUCT { [case(1)] LPDFS_INFO_1 DfsInfo1; [case(2)] LPDFS_INFO_2 DfsInfo2; [case(3)] LPDFS_INFO_3 DfsInfo3; [case(4)] LPDFS_INFO_4 DfsInfo4; [case(100)] LPDFS_INFO_100 DfsInfo100; [case(101)] LPDFS_INFO_101 DfsInfo101; [case(102)] LPDFS_INFO_102 DfsInfo102; [default] ; } DFS_INFO_STRUCT, *LPDFS_INFO_STRUCT; // // Data structures are used by the private Dfs Manager interface // typedef struct _DFSM_ENTRY_ID { GUID idSubordinate; [string, unique] LPWSTR wszSubordinate; } DFSM_ENTRY_ID, *LPDFSM_ENTRY_ID; typedef struct _DFSM_RELATION_INFO { DWORD cSubordinates; [size_is(cSubordinates)] DFSM_ENTRY_ID eid[]; } DFSM_RELATION_INFO, *LPDFSM_RELATION_INFO; typedef struct _DFSM_ROOT_LIST_ENTRY { [string, unique] LPWSTR ServerShare; } DFSM_ROOT_LIST_ENTRY, *PDFSM_ROOT_LIST_ENTRY, *LPDFSM_ROOT_LIST_ENTRY; typedef struct _DFSM_ROOT_LIST { DWORD cEntries; [size_is(cEntries)] DFSM_ROOT_LIST_ENTRY Entry[]; } DFSM_ROOT_LIST, *PDFSM_ROOT_LIST, *LPDFSM_ROOT_LIST; // // The public Dfs interface methods // DWORD NetrDfsManagerGetVersion(); NET_API_STATUS NetrDfsAdd( [in,string] LPWSTR DfsEntryPath, [in,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in,unique,string] LPWSTR Comment, [in] DWORD Flags); NET_API_STATUS NetrDfsRemove( [in,string] LPWSTR DfsEntryPath, [in,unique,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName); NET_API_STATUS NetrDfsSetInfo( [in,string] LPWSTR DfsEntryPath, [in,unique,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in] DWORD Level, [in,switch_is(Level)] LPDFS_INFO_STRUCT DfsInfo); NET_API_STATUS NetrDfsGetInfo( [in,string] LPWSTR DfsEntryPath, [in,unique,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in] DWORD Level, [out,switch_is(Level)] LPDFS_INFO_STRUCT DfsInfo); NET_API_STATUS NetrDfsEnum( [in] DWORD Level, [in] DWORD PrefMaxLen, [in,out,unique] LPDFS_INFO_ENUM_STRUCT DfsEnum, [in,out,unique] LPDWORD ResumeHandle); NET_API_STATUS NetrDfsMove( [in,string] LPWSTR DfsEntryPath, [in,string] LPWSTR NewDfsEntryPath); NET_API_STATUS NetrDfsRename( [in,string] LPWSTR Path, [in,string] LPWSTR NewPath); // // The private Dfs Manager methods // NET_API_STATUS NetrDfsManagerGetConfigInfo( [in, string] LPWSTR wszServer, [in, string] LPWSTR wszLocalVolumeEntryPath, [in] GUID idLocalVolume, [in, out, unique] LPDFSM_RELATION_INFO *ppRelationInfo); NET_API_STATUS NetrDfsManagerSendSiteInfo( [in, string] LPWSTR wszServer, [in] LPDFS_SITELIST_INFO pSiteInfo); // // Remote setup/teardown apis // NET_API_STATUS NetrDfsAddFtRoot( [in,string] LPWSTR ServerName, [in,string] LPWSTR DcName, [in,string] LPWSTR RootShare, [in,string] LPWSTR FtDfsName, [in,string] LPWSTR Comment, [in,string] LPWSTR ConfigDN, [in] BOOLEAN NewFtDfs, [in] DWORD Flags, [in,out,unique] PDFSM_ROOT_LIST *ppRootList); NET_API_STATUS NetrDfsRemoveFtRoot( [in,string] LPWSTR ServerName, [in,string] LPWSTR DcName, [in,string] LPWSTR RootShare, [in,string] LPWSTR FtDfsName, [in] DWORD Flags, [in,out,unique] PDFSM_ROOT_LIST *ppRootList); NET_API_STATUS NetrDfsAddStdRoot( [in,string] LPWSTR ServerName, [in,string] LPWSTR RootShare, [in,string] LPWSTR Comment, [in] DWORD Flags); NET_API_STATUS NetrDfsRemoveStdRoot( [in,string] LPWSTR ServerName, [in,string] LPWSTR RootShare, [in] DWORD Flags); // Reinitialize the Dfs Manager // NET_API_STATUS NetrDfsManagerInitialize( [in,string] LPWSTR ServerName, [in] DWORD Flags); // // Create a root with the share offline // NET_API_STATUS NetrDfsAddStdRootForced( [in,string] LPWSTR ServerName, [in,string] LPWSTR RootShare, [in,string] LPWSTR Comment, [in,string] LPWSTR Share); // // Api's for setting up an FtDfs root // NET_API_STATUS NetrDfsGetDcAddress( [in,string] LPWSTR ServerName, [in,out,string] LPWSTR *DcName, [in,out] BOOLEAN *IsRoot, [in,out] ULONG *Timeout); // // Api to direct an FtDfs root server to a specific DC // NET_API_STATUS NetrDfsSetDcAddress( [in,string] LPWSTR ServerName, [in,string] LPWSTR DcName, [in] DWORD Timeout, [in] DWORD Flags); // // Api to tell a DC to flush an FtDfs entry from its cache // NET_API_STATUS NetrDfsFlushFtTable( [in,string] LPWSTR DcName, [in,string] LPWSTR wszFtDfsName); // // New apis to work with Ft roots // NET_API_STATUS NetrDfsAdd2( [in,string] LPWSTR DfsEntryPath, [in,string] LPWSTR DcName, [in,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in,unique,string] LPWSTR Comment, [in] DWORD Flags, [in,out,unique] PDFSM_ROOT_LIST *ppRootList); NET_API_STATUS NetrDfsRemove2( [in,string] LPWSTR DfsEntryPath, [in,string] LPWSTR DcName, [in,unique,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in,out,unique] PDFSM_ROOT_LIST *ppRootList); NET_API_STATUS NetrDfsEnumEx( [in,string] LPWSTR DfsEntryPath, [in] DWORD Level, [in] DWORD PrefMaxLen, [in,out,unique] LPDFS_INFO_ENUM_STRUCT DfsEnum, [in,out,unique] LPDWORD ResumeHandle); NET_API_STATUS NetrDfsSetInfo2( [in,string] LPWSTR DfsEntryPath, [in,string] LPWSTR DcName, [in,unique,string] LPWSTR ServerName, [in,unique,string] LPWSTR ShareName, [in] DWORD Level, [in,switch_is(Level)] LPDFS_INFO_STRUCT pDfsInfo, [in,out,unique] PDFSM_ROOT_LIST *ppRootList); }