[NETAPI32] Add DFS RPC interface and some DFS stubs
authorEric Kohl <eric.kohl@reactos.org>
Sun, 12 Aug 2018 12:13:26 +0000 (14:13 +0200)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 12 Aug 2018 12:31:07 +0000 (14:31 +0200)
dll/win32/netapi32/CMakeLists.txt
dll/win32/netapi32/dfs.c [new file with mode: 0644]
dll/win32/netapi32/netapi32.spec
sdk/include/reactos/idl/netdfs.idl [new file with mode: 0644]

index 0339f76..c5066c0 100644 (file)
@@ -9,6 +9,7 @@ add_rpc_files(client
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/atsvc.idl
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/browser.idl
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/dssetup.idl
+    ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/netdfs.idl
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/netlogon.idl
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/srvsvc.idl
     ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/wkssvc.idl)
@@ -16,6 +17,7 @@ add_rpc_files(client
 list(APPEND SOURCE
     apibuf.c
     browser.c
+    dfs.c
     display.c
     dssetup.c
     group.c
@@ -38,6 +40,7 @@ list(APPEND SOURCE
     ${CMAKE_CURRENT_BINARY_DIR}/atsvc_c.c
     ${CMAKE_CURRENT_BINARY_DIR}/browser_c.c
     ${CMAKE_CURRENT_BINARY_DIR}/dssetup_c.c
+    ${CMAKE_CURRENT_BINARY_DIR}/netdfs_c.c
     ${CMAKE_CURRENT_BINARY_DIR}/netlogon_c.c
     ${CMAKE_CURRENT_BINARY_DIR}/srvsvc_c.c
     ${CMAKE_CURRENT_BINARY_DIR}/wkssvc_c.c)
diff --git a/dll/win32/netapi32/dfs.c b/dll/win32/netapi32/dfs.c
new file mode 100644 (file)
index 0000000..af4bcdd
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         NetAPI DLL
+ * FILE:            reactos/dll/win32/netapi32/dfs.c
+ * PURPOSE:         Distributed File System Service interface code
+ * PROGRAMMERS:     Eric Kohl
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include "netapi32.h"
+
+#include <rpc.h>
+#include "netdfs_c.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(netapi32);
+
+/* FUNCTIONS *****************************************************************/
+
+NET_API_STATUS
+WINAPI
+NetDfsAdd(
+    _In_ LPWSTR DfsEntryPath,
+    _In_ LPWSTR ServerName,
+    _In_ LPWSTR PathName,
+    _In_opt_ LPWSTR Comment,
+    _In_ DWORD Flags)
+{
+#if 0
+    NET_API_STATUS
+    __stdcall
+    status = NetrDfsAdd(DfsEntryPath,
+                        ServerName,
+                        PathName,
+                        Comment,
+                        Flags);
+#endif
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetDfsAddFtRoot(
+    _In_ LPWSTR ServerName,
+    _In_ LPWSTR RootShare,
+    _In_ LPWSTR FtDfsName,
+    _In_opt_ LPWSTR Comment,
+    _In_ DWORD Flags)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetDfsAddStdRoot(
+    _In_ LPWSTR ServerName,
+    _In_ LPWSTR RootShare,
+    _In_opt_ LPWSTR Comment,
+    _In_ DWORD Flags)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetDfsAddStdRootForced(
+    _In_ LPWSTR ServerName,
+    _In_ LPWSTR RootShare,
+    _In_opt_ LPWSTR Comment,
+    _In_ LPWSTR Store)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetDfsEnum(
+    _In_ LPWSTR DfsName,
+    _In_ DWORD Level,
+    _In_ DWORD PrefMaxLen,
+    _Out_ LPBYTE *Buffer,
+    _Out_ LPDWORD EntriesRead,
+    _Out_ LPDWORD ResumeHandle)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+NET_API_STATUS
+WINAPI
+NetDfsGetClientInfo(
+    _In_ LPWSTR DfsEntryPath,
+    _In_ LPWSTR ServerName,
+    _In_ LPWSTR ShareName,
+    _In_ DWORD Level,
+    _Out_ LPBYTE *Buffer)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+/* NetDfsGetDcAddress */
+
+
+NET_API_STATUS
+WINAPI
+NetDfsGetFtContainerSecurity(
+    _In_ LPWSTR DomainName,
+    _In_ SECURITY_INFORMATION SecurityInformation,
+    _Out_ PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
+    _Out_ LPDWORD lpcbSecurityDescriptor)
+{
+    UNIMPLEMENTED;
+    return 0;
+}
+
+
+/* EOF */
index 333d140..d00d2f4 100644 (file)
 @ stdcall NetConfigGetAll(wstr wstr ptr)
 @ stdcall NetConfigSet(wstr wstr wstr long long ptr long)
 @ stdcall NetConnectionEnum(wstr wstr long ptr long ptr ptr ptr)
-@ stub NetDfsAdd
-@ stub NetDfsAddFtRoot
-@ stub NetDfsAddStdRoot
-@ stub NetDfsAddStdRootForced
-@ stub NetDfsEnum
-@ stub NetDfsGetClientInfo
+@ stdcall NetDfsAdd(wstr wstr wstr wstr long)
+@ stdcall NetDfsAddFtRoot(wstr wstr wstr wstr long)
+@ stdcall NetDfsAddStdRoot(wstr wstr wstr long)
+@ stdcall NetDfsAddStdRootForced(wstr wstr wstr wstr)
+@ stdcall NetDfsEnum(wstr long long ptr ptr ptr)
+@ stdcall NetDfsGetClientInfo(wstr wstr wstr long ptr)
 @ stub NetDfsGetDcAddress
-@ stub NetDfsGetFtContainerSecurity
+@ stdcall NetDfsGetFtContainerSecurity(wstr long ptr ptr);
 @ stub NetDfsGetInfo
 @ stub NetDfsGetSecurity
 @ stub NetDfsGetStdContainerSecurity
diff --git a/sdk/include/reactos/idl/netdfs.idl b/sdk/include/reactos/idl/netdfs.idl
new file mode 100644 (file)
index 0000000..bd4ca88
--- /dev/null
@@ -0,0 +1,581 @@
+/*
+ * Distributed File System service interface definition
+ */
+
+#include <ms-dtyp.idl>
+
+typedef DWORD NET_API_STATUS;
+
+typedef WCHAR *NETDFS_SERVER_OR_DOMAIN_HANDLE;
+
+typedef [v1_enum] enum _DFS_TARGET_PRIORITY_CLASS
+{
+    DfsInvalidPriorityClass = -1,
+    DfsSiteCostNormalPriorityClass = 0,
+    DfsGlobalHighPriorityClass = 1,
+    DfsSiteCostHighPriorityClass = 2,
+    DfsSiteCostLowPriorityClass = 3,
+    DfsGlobalLowPriorityClass = 4
+} DFS_TARGET_PRIORITY_CLASS;
+
+typedef struct _DFS_TARGET_PRIORITY
+{
+    DFS_TARGET_PRIORITY_CLASS TargetPriorityClass;
+    unsigned short TargetPriorityRank;
+    unsigned short Reserved;
+} DFS_TARGET_PRIORITY;
+
+typedef struct _DFS_STORAGE_INFO
+{
+    unsigned long State;
+    [string] WCHAR *ServerName;
+    [string] WCHAR *ShareName;
+} DFS_STORAGE_INFO;
+
+typedef struct _DFS_STORAGE_INFO_1
+{
+    unsigned long State;
+    [string] WCHAR *ServerName;
+    [string] WCHAR * ShareName;
+    DFS_TARGET_PRIORITY TargetPriority;
+} DFS_STORAGE_INFO_1, *PDFS_STORAGE_INFO_1, *LPDFS_STORAGE_INFO_1;
+
+typedef struct _DFSM_ROOT_LIST_ENTRY
+{
+    [string, unique] WCHAR *ServerShare;
+} DFSM_ROOT_LIST_ENTRY;
+
+typedef struct _DFSM_ROOT_LIST
+{
+    DWORD cEntries;
+    [size_is(cEntries)] DFSM_ROOT_LIST_ENTRY Entry[];
+} DFSM_ROOT_LIST;
+
+typedef enum
+{
+    DFS_NAMESPACE_VERSION_ORIGIN_COMBINED = 0,
+    DFS_NAMESPACE_VERSION_ORIGIN_SERVER,
+    DFS_NAMESPACE_VERSION_ORIGIN_DOMAIN
+} DFS_NAMESPACE_VERSION_ORIGIN;
+
+typedef struct _DFS_SUPPORTED_NAMESPACE_VERSION_INFO
+{
+    unsigned long DomainDfsMajorVersion;
+    unsigned long DomainDfsMinorVersion;
+    ULONGLONG DomainDfsCapabilities;
+    unsigned long StandaloneDfsMajorVersion;
+    unsigned long StandaloneDfsMinorVersion;
+    ULONGLONG StandaloneDfsCapabilities;
+} DFS_SUPPORTED_NAMESPACE_VERSION_INFO, *PDFS_SUPPORTED_NAMESPACE_VERSION_INFO;
+
+typedef struct _DFS_INFO_1
+{
+    [string] WCHAR *EntryPath;
+} DFS_INFO_1;
+
+typedef struct _DFS_INFO_2
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    DWORD NumberOfStorages;
+} DFS_INFO_2;
+
+typedef struct _DFS_INFO_3
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    DWORD NumberOfStorages;
+    [size_is(NumberOfStorages)] DFS_STORAGE_INFO *Storage;
+} DFS_INFO_3;
+
+typedef struct _DFS_INFO_4
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    GUID Guid;
+    DWORD NumberOfStorages;
+    [size_is(NumberOfStorages)] DFS_STORAGE_INFO *Storage;
+} DFS_INFO_4;
+
+typedef struct _DFS_INFO_5
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    GUID Guid;
+    unsigned long PropertyFlags;
+    unsigned long MetadataSize;
+    DWORD NumberOfStorages;
+} DFS_INFO_5;
+
+typedef struct _DFS_INFO_6
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    GUID Guid;
+    unsigned long PropertyFlags;
+    unsigned long MetadataSize;
+    DWORD NumberOfStorages;
+    [size_is(NumberOfStorages)] DFS_STORAGE_INFO_1 *Storage;
+} DFS_INFO_6;
+
+typedef struct _DFS_INFO_7
+{
+    GUID GenerationGuid;
+} DFS_INFO_7;
+
+typedef struct _DFS_INFO_8
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout; GUID Guid;
+    unsigned long PropertyFlags;
+    unsigned long MetadataSize;
+    ULONG SecurityDescriptorLength;
+    [size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
+    DWORD NumberOfStorages;
+} DFS_INFO_8, *LPDFS_INFO_8;
+
+typedef struct _DFS_INFO_9
+{
+    [string] WCHAR *EntryPath;
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    GUID Guid;
+    unsigned long PropertyFlags;
+    unsigned long MetadataSize;
+    ULONG SecurityDescriptorLength;
+    [size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
+    DWORD NumberOfStorages;
+    [size_is(NumberOfStorages)] LPDFS_STORAGE_INFO_1 Storage;
+} DFS_INFO_9, *LPDFS_INFO_9;
+
+typedef struct _DFS_INFO_50
+{
+     unsigned long NamespaceMajorVersion;
+     unsigned long NamespaceMinorVersion;
+     unsigned __int64 NamespaceCapabilities;
+} DFS_INFO_50;
+
+typedef struct _DFS_INFO_100
+{
+    [string] WCHAR *Comment;
+} DFS_INFO_100;
+
+typedef struct _DFS_INFO_101
+{
+    unsigned long State;
+} DFS_INFO_101;
+
+typedef struct _DFS_INFO_102
+{
+    unsigned long Timeout;
+} DFS_INFO_102;
+
+typedef struct _DFS_INFO_103
+{
+    unsigned long PropertyFlagMask;
+    unsigned long PropertyFlags;
+} DFS_INFO_103;
+
+typedef struct _DFS_INFO_104
+{
+    DFS_TARGET_PRIORITY TargetPriority;
+} DFS_INFO_104;
+
+typedef struct _DFS_INFO_105
+{
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    unsigned long PropertyFlagMask;
+    unsigned long PropertyFlags;
+} DFS_INFO_105;
+
+typedef struct _DFS_INFO_106
+{
+    DWORD State;
+    DFS_TARGET_PRIORITY TargetPriority;
+} DFS_INFO_106;
+
+typedef struct _DFS_INFO_107
+{
+    [string] WCHAR *Comment;
+    DWORD State;
+    unsigned long Timeout;
+    unsigned long PropertyFlagMask;
+    unsigned long PropertyFlags;
+    ULONG SecurityDescriptorLength;
+    [size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
+} DFS_INFO_107;
+
+typedef struct _DFS_INFO_150
+{
+    ULONG SecurityDescriptorLength;
+    [size_is(SecurityDescriptorLength)] PUCHAR pSecurityDescriptor;
+} DFS_INFO_150;
+
+typedef struct _DFS_INFO_200
+{
+    [string] WCHAR *FtDfsName;
+} DFS_INFO_200;
+
+typedef struct _DFS_INFO_300
+{
+    DWORD Flags;
+    [string] WCHAR *DfsName;
+} DFS_INFO_300;
+
+typedef [switch_type(unsigned long)] union _DFS_INFO_STRUCT
+{
+    [case(1)] DFS_INFO_1 *DfsInfo1;
+    [case(2)] DFS_INFO_2 *DfsInfo2;
+    [case(3)] DFS_INFO_3 *DfsInfo3;
+    [case(4)] DFS_INFO_4 *DfsInfo4;
+    [case(5)] DFS_INFO_5 *DfsInfo5;
+    [case(6)] DFS_INFO_6 *DfsInfo6;
+    [case(7)] DFS_INFO_7 *DfsInfo7;
+    [case(8)] DFS_INFO_8 *DfsInfo8;
+    [case(9)] DFS_INFO_9 *DfsInfo9;
+    [case(50)] DFS_INFO_50 *DfsInfo50;
+    [case(100)] DFS_INFO_100 *DfsInfo100;
+    [case(101)] DFS_INFO_101 *DfsInfo101;
+    [case(102)] DFS_INFO_102 *DfsInfo102;
+    [case(103)] DFS_INFO_103 *DfsInfo103;
+    [case(104)] DFS_INFO_104 *DfsInfo104;
+    [case(105)] DFS_INFO_105 *DfsInfo105;
+    [case(106)] DFS_INFO_106 *DfsInfo106;
+    [case(107)] DFS_INFO_107 *DfsInfo107;
+    [case(150)] DFS_INFO_150 *DfsInfo150;
+    [default];
+} DFS_INFO_STRUCT;
+
+typedef struct _DFS_INFO_1_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_1 *Buffer;
+} DFS_INFO_1_CONTAINER;
+
+typedef struct _DFS_INFO_2_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_2 *Buffer;
+} DFS_INFO_2_CONTAINER;
+
+typedef struct _DFS_INFO_3_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_3 *Buffer;
+} DFS_INFO_3_CONTAINER;
+
+typedef struct _DFS_INFO_4_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_4 *Buffer;
+} DFS_INFO_4_CONTAINER;
+
+typedef struct _DFS_INFO_5_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_5 *Buffer;
+} DFS_INFO_5_CONTAINER;
+
+typedef struct _DFS_INFO_6_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_6 *Buffer;
+} DFS_INFO_6_CONTAINER;
+
+typedef struct _DFS_INFO_8_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] LPDFS_INFO_8 Buffer;
+} DFS_INFO_8_CONTAINER, *LPDFS_INFO_8_CONTAINER;
+
+typedef struct _DFS_INFO_9_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] LPDFS_INFO_9 Buffer;
+} DFS_INFO_9_CONTAINER, *LPDFS_INFO_9_CONTAINER;
+
+typedef struct _DFS_INFO_200_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_200 *Buffer;
+} DFS_INFO_200_CONTAINER;
+
+typedef struct _DFS_INFO_300_CONTAINER
+{
+    DWORD EntriesRead;
+    [size_is(EntriesRead)] DFS_INFO_300 *Buffer;
+} DFS_INFO_300_CONTAINER;
+
+typedef struct _DFS_INFO_ENUM_STRUCT
+{
+    DWORD Level;
+    [switch_is(Level)] union
+    {
+        [case(1)] DFS_INFO_1_CONTAINER *DfsInfo1Container;
+        [case(2)] DFS_INFO_2_CONTAINER *DfsInfo2Container;
+        [case(3)] DFS_INFO_3_CONTAINER *DfsInfo3Container;
+        [case(4)] DFS_INFO_4_CONTAINER *DfsInfo4Container;
+        [case(5)] DFS_INFO_5_CONTAINER *DfsInfo5Container;
+        [case(6)] DFS_INFO_6_CONTAINER *DfsInfo6Container;
+        [case(8)] DFS_INFO_8_CONTAINER *DfsInfo8Container;
+        [case(9)] DFS_INFO_9_CONTAINER *DfsInfo9Container;
+        [case(200)] DFS_INFO_200_CONTAINER *DfsInfo200Container;
+        [case(300)] DFS_INFO_300_CONTAINER *DfsInfo300Container;
+    } DfsInfoContainer;
+} DFS_INFO_ENUM_STRUCT;
+
+[
+    uuid(4fc742e0-4a10-11cf-8273-00aa004ae673),
+    version(3.0),
+    pointer_default(unique),
+#ifdef __midl
+    ms_union,
+#endif
+    endpoint("ncacn_np:[\\pipe\\netdfs]")
+#ifndef __midl
+    ,implicit_handle(handle_t hBinding)
+#endif
+]
+interface netdfs
+{
+    /* Function 0 */
+    DWORD
+    __stdcall
+    NetrDfsManagerGetVersion();
+
+    /* Function 1 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAdd(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in, unique, string] WCHAR *Comment,
+        [in] DWORD Flags);
+
+    /* Function 2 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRemove(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, unique, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName);
+
+    /* Function 3 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsSetInfo(
+        [in, string] WCHAR * DfsEntryPath,
+        [in, unique, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in] DWORD Level,
+        [in, switch_is(Level)] DFS_INFO_STRUCT *DfsInfo);
+
+    /* Function 4 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsGetInfo(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, unique, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in] DWORD Level,
+        [out, switch_is(Level)] DFS_INFO_STRUCT *DfsInfo);
+
+    /* Function 5 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsEnum(
+        [in] DWORD Level,
+        [in] DWORD PrefMaxLen,
+        [in, out, unique] DFS_INFO_ENUM_STRUCT *DfsEnum,
+        [in, out, unique] DWORD *ResumeHandle);
+
+    /* Function 6 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRename(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, string] WCHAR *NewDfsEntryPath,
+        [in] unsigned long Flags);
+
+    /* Function 7 - Not used on wire */
+    void
+    __stdcall
+    NetrDfsMove(void);
+
+    /* Function 8 - Not used on wire */
+    void
+    __stdcall
+    NetrDfsManagerGetConfigInfo(void);
+
+    /* Function 9 - Not used on wire */
+    void
+    __stdcall
+    NetrDfsManagerSendSiteInfo(void);
+
+    /* Function 10 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAddFtRoot(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *DcName,
+        [in, string] WCHAR *RootShare,
+        [in, string] WCHAR *FtDfsName,
+        [in, string] WCHAR *Comment,
+        [in, string] WCHAR *ConfigDN,
+        [in] BOOLEAN NewFtDfs,
+        [in] DWORD ApiFlags,
+        [in, out, unique] DFSM_ROOT_LIST **ppRootList);
+
+    /* Function 11 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRemoveFtRoot(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *DcName,
+        [in, string] WCHAR *RootShare,
+        [in, string] WCHAR *FtDfsName,
+        [in] DWORD ApiFlags,
+        [in, out, unique] DFSM_ROOT_LIST **ppRootList);
+
+    /* Function 12 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAddStdRoot(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *RootShare,
+        [in, string] WCHAR *Comment,
+        [in] DWORD ApiFlags);
+
+    /* Function 13 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRemoveStdRoot(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *RootShare,
+        [in] DWORD ApiFlags);
+
+    /* Function 14 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsManagerInitialize(
+        [in, string] WCHAR *ServerName,
+        [in] DWORD Flags);
+
+    /* Function 15 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAddStdRootForced(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *RootShare,
+        [in, string] WCHAR *Comment,
+        [in, string] WCHAR *Share);
+
+    /* Function 16 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsGetDcAddress(
+        [in, string] WCHAR *ServerName,
+        [in, out, string] WCHAR **DcName,
+        [in, out] BOOLEAN *IsRoot,
+        [in, out] unsigned long *Timeout);
+
+    /* Function 17 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsSetDcAddress(
+        [in, string] WCHAR *ServerName,
+        [in, string] WCHAR *DcName,
+        [in] DWORD Timeout,
+        [in] DWORD Flags);
+
+    /* Function 18 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsFlushFtTable(
+        [in, string] WCHAR *DcName,
+        [in, string] WCHAR *wszFtDfsName);
+
+    /* Function 19 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAdd2(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, string] WCHAR *DcName,
+        [in, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in, unique, string] WCHAR *Comment,
+        [in] DWORD Flags,
+        [in, out, unique] DFSM_ROOT_LIST **ppRootList);
+
+    /* Function 20 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRemove2(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, string] WCHAR *DcName,
+        [in, unique, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in, out, unique] DFSM_ROOT_LIST **ppRootList);
+
+    /* Function 21 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsEnumEx(
+        [in, string] WCHAR *DfsEntryPath,
+        [in] DWORD Level,
+        [in] DWORD PrefMaxLen,
+        [in, out, unique] DFS_INFO_ENUM_STRUCT *DfsEnum,
+        [in, out, unique] DWORD *ResumeHandle);
+
+    /* Function 22 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsSetInfo2(
+        [in, string] WCHAR *DfsEntryPath,
+        [in, string] WCHAR *DcName,
+        [in, unique, string] WCHAR *ServerName,
+        [in, unique, string] WCHAR *ShareName,
+        [in] DWORD Level,
+        [in, switch_is(Level)] DFS_INFO_STRUCT *pDfsInfo,
+        [in, out, unique] DFSM_ROOT_LIST **ppRootList);
+
+    /* Function 23 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsAddRootTarget(
+        [in, unique, string] LPWSTR pDfsPath,
+        [in, unique, string] LPWSTR pTargetPath,
+        [in] ULONG MajorVersion,
+        [in, unique, string] LPWSTR pComment,
+        [in] BOOLEAN NewNamespace, [in] ULONG Flags);
+
+    /* Function 24 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsRemoveRootTarget(
+        [in, unique, string] LPWSTR pDfsPath,
+        [in, unique, string] LPWSTR pTargetPath,
+        [in] ULONG Flags);
+
+    /* Function 25 */
+    NET_API_STATUS
+    __stdcall
+    NetrDfsGetSupportedNamespaceVersion(
+        [in] DFS_NAMESPACE_VERSION_ORIGIN Origin,
+        [in, unique, string] NETDFS_SERVER_OR_DOMAIN_HANDLE pName,
+        [out] PDFS_SUPPORTED_NAMESPACE_VERSION_INFO pVersionInfo);
+}