[INCLUDE]
authorEric Kohl <eric.kohl@reactos.org>
Sun, 22 Feb 2015 14:36:29 +0000 (14:36 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 22 Feb 2015 14:36:29 +0000 (14:36 +0000)
CORE-9248
Add the RPC interface difinition for the Workstation service.

svn path=/trunk/; revision=66403

reactos/include/reactos/idl/wkssvc.acf [new file with mode: 0644]
reactos/include/reactos/idl/wkssvc.idl [new file with mode: 0644]

diff --git a/reactos/include/reactos/idl/wkssvc.acf b/reactos/include/reactos/idl/wkssvc.acf
new file mode 100644 (file)
index 0000000..1f0682b
--- /dev/null
@@ -0,0 +1,6 @@
+[
+    implicit_handle(handle_t hBinding)
+]
+interface wkssvc
+{
+}
\ No newline at end of file
diff --git a/reactos/include/reactos/idl/wkssvc.idl b/reactos/include/reactos/idl/wkssvc.idl
new file mode 100644 (file)
index 0000000..0b887b4
--- /dev/null
@@ -0,0 +1,603 @@
+/*
+ * Workstation Service interface definition
+ */
+
+#include <ms-dtyp.idl>
+
+typedef [handle] wchar_t *WKSSVC_IDENTIFY_HANDLE;
+typedef [handle] wchar_t *WKSSVC_IMPERSONATE_HANDLE;
+
+typedef enum _NETSETUP_JOIN_STATUS
+{
+    NetSetupUnknownStatus = 0,
+    NetSetupUnjoined,
+    NetSetupWorkgroupName,
+    NetSetupDomainName
+} NETSETUP_JOIN_STATUS, *PNETSETUP_JOIN_STATUS;
+
+typedef enum _NETSETUP_NAME_TYPE
+{
+    NetSetupUnknown = 0,
+    NetSetupMachine,
+    NetSetupWorkgroup,
+    NetSetupDomain,
+    NetSetupNonExistentDomain,
+    NetSetupDnsMachine
+} NETSETUP_NAME_TYPE, *PNETSETUP_NAME_TYPE;
+
+typedef enum _NET_COMPUTER_NAME_TYPE
+{
+    NetPrimaryComputerName = 0,
+    NetAlternateComputerNames,
+    NetAllComputerNames,
+    NetComputerNameTypeMax
+} NET_COMPUTER_NAME_TYPE, *PNET_COMPUTER_NAME_TYPE;
+
+typedef struct _STAT_WORKSTATION_0
+{
+    LARGE_INTEGER StatisticsStartTime;
+    LARGE_INTEGER BytesReceived;
+    LARGE_INTEGER SmbsReceived;
+    LARGE_INTEGER PagingReadBytesRequested;
+    LARGE_INTEGER NonPagingReadBytesRequested;
+    LARGE_INTEGER CacheReadBytesRequested;
+    LARGE_INTEGER NetworkReadBytesRequested;
+    LARGE_INTEGER BytesTransmitted;
+    LARGE_INTEGER SmbsTransmitted;
+    LARGE_INTEGER PagingWriteBytesRequested;
+    LARGE_INTEGER NonPagingWriteBytesRequested;
+    LARGE_INTEGER CacheWriteBytesRequested;
+    LARGE_INTEGER NetworkWriteBytesRequested;
+    unsigned long InitiallyFailedOperations;
+    unsigned long FailedCompletionOperations;
+    unsigned long ReadOperations;
+    unsigned long RandomReadOperations;
+    unsigned long ReadSmbs;
+    unsigned long LargeReadSmbs;
+    unsigned long SmallReadSmbs;
+    unsigned long WriteOperations;
+    unsigned long RandomWriteOperations;
+    unsigned long WriteSmbs;
+    unsigned long LargeWriteSmbs;
+    unsigned long SmallWriteSmbs;
+    unsigned long RawReadsDenied;
+    unsigned long RawWritesDenied;
+    unsigned long NetworkErrors;
+    unsigned long Sessions;
+    unsigned long FailedSessions;
+    unsigned long Reconnects;
+    unsigned long CoreConnects;
+    unsigned long Lanman20Connects;
+    unsigned long Lanman21Connects;
+    unsigned long LanmanNtConnects;
+    unsigned long ServerDisconnects;
+    unsigned long HungSessions;
+    unsigned long UseCount;
+    unsigned long FailedUseCount;
+    unsigned long CurrentCommands;
+} STAT_WORKSTATION_0, *PSTAT_WORKSTATION_0, *LPSTAT_WORKSTATION_0;
+
+typedef struct _WKSTA_INFO_100
+{
+    unsigned long wki100_platform_id;
+    [string] wchar_t *wki100_computername;
+    [string] wchar_t *wki100_langroup;
+    unsigned long wki100_ver_major;
+    unsigned long wki100_ver_minor;
+} WKSTA_INFO_100, *PWKSTA_INFO_100, *LPWKSTA_INFO_100;
+
+typedef struct _WKSTA_INFO_101
+{
+    unsigned long wki101_platform_id;
+    [string] wchar_t *wki101_computername;
+    [string] wchar_t *wki101_langroup;
+    unsigned long wki101_ver_major;
+    unsigned long wki101_ver_minor;
+    [string] wchar_t* wki101_lanroot;
+} WKSTA_INFO_101, *PWKSTA_INFO_101, *LPWKSTA_INFO_101;
+
+typedef struct _WKSTA_INFO_102
+{
+    unsigned long wki102_platform_id;
+    [string] wchar_t *wki102_computername;
+    [string] wchar_t *wki102_langroup;
+    unsigned long wki102_ver_major;
+    unsigned long wki102_ver_minor;
+    [string] wchar_t *wki102_lanroot;
+    unsigned long wki102_logged_on_users;
+} WKSTA_INFO_102, *PWKSTA_INFO_102, *LPWKSTA_INFO_102;
+
+typedef struct _WKSTA_INFO_502
+{
+    unsigned long wki502_char_wait;
+    unsigned long wki502_collection_time;
+    unsigned long wki502_maximum_collection_count;
+    unsigned long wki502_keep_conn;
+    unsigned long wki502_max_cmds;
+    unsigned long wki502_sess_timeout;
+    unsigned long wki502_siz_char_buf;
+    unsigned long wki502_max_threads;
+    unsigned long wki502_lock_quota;
+    unsigned long wki502_lock_increment;
+    unsigned long wki502_lock_maximum;
+    unsigned long wki502_pipe_increment;
+    unsigned long wki502_pipe_maximum;
+    unsigned long wki502_cache_file_timeout;
+    unsigned long wki502_dormant_file_limit;
+    unsigned long wki502_read_ahead_throughput;
+    unsigned long wki502_num_mailslot_buffers;
+    unsigned long wki502_num_srv_announce_buffers;
+    unsigned long wki502_max_illegal_datagram_events;
+    unsigned long wki502_illegal_datagram_event_reset_frequency;
+    int wki502_log_election_packets;
+    int wki502_use_opportunistic_locking;
+    int wki502_use_unlock_behind;
+    int wki502_use_close_behind;
+    int wki502_buf_named_pipes;
+    int wki502_use_lock_read_unlock;
+    int wki502_utilize_nt_caching;
+    int wki502_use_raw_read;
+    int wki502_use_raw_write;
+    int wki502_use_write_raw_data;
+    int wki502_use_encryption;
+    int wki502_buf_files_deny_write;
+    int wki502_buf_read_only_files;
+    int wki502_force_core_create_mode;
+    int wki502_use_512_byte_max_transfer;
+} WKSTA_INFO_502, *PWKSTA_INFO_502, *LPWKSTA_INFO_502;
+
+typedef struct _WKSTA_INFO_1013
+{
+    unsigned long wki1013_keep_conn;
+} WKSTA_INFO_1013, *PWKSTA_INFO_1013, *LPWKSTA_INFO_1013;
+
+typedef struct _WKSTA_INFO_1018
+{
+    unsigned long wki1018_sess_timeout;
+} WKSTA_INFO_1018, *PWKSTA_INFO_1018, *LPWKSTA_INFO_1018;
+
+typedef struct _WKSTA_INFO_1046
+{
+    unsigned long wki1046_dormant_file_limit;
+} WKSTA_INFO_1046, *PWKSTA_INFO_1046, *LPWKSTA_INFO_1046;
+
+typedef struct _WKSTA_USER_INFO_0
+{
+    [string] wchar_t *wkui0_username;
+} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
+
+typedef struct _WKSTA_USER_INFO_1
+{
+    [string] wchar_t *wkui1_username;
+    [string] wchar_t *wkui1_logon_domain;
+    [string] wchar_t *wkui1_oth_domains;
+    [string] wchar_t *wkui1_logon_server;
+} WKSTA_USER_INFO_1, *PWKSTA_USER_INFO_1, *LPWKSTA_USER_INFO_1;
+
+typedef struct _WKSTA_TRANSPORT_INFO_0
+{
+    unsigned long wkti0_quality_of_service;
+    unsigned long wkti0_number_of_vcs;
+    [string] wchar_t *wkti0_transport_name;
+    [string] wchar_t *wkti0_transport_address;
+    unsigned long wkti0_wan_ish;
+} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
+
+typedef [switch_type(unsigned long)] union _WKSTA_INFO
+{
+    [case(100)] LPWKSTA_INFO_100 WkstaInfo100;
+    [case(101)] LPWKSTA_INFO_101 WkstaInfo101;
+    [case(102)] LPWKSTA_INFO_102 WkstaInfo102;
+    [case(502)] LPWKSTA_INFO_502 WkstaInfo502;
+    [case(1013)] LPWKSTA_INFO_1013 WkstaInfo1013;
+    [case(1018)] LPWKSTA_INFO_1018 WkstaInfo1018;
+    [case(1046)] LPWKSTA_INFO_1046 WkstaInfo1046;
+    [default] ;
+} WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
+
+typedef struct _USE_INFO_0
+{
+    [string] wchar_t *ui0_local;
+    [string] wchar_t *ui0_remote;
+} USE_INFO_0, *PUSE_INFO_0, *LPUSE_INFO_0;
+
+typedef struct _USE_INFO_1
+{
+    [string] wchar_t *ui1_local;
+    [string] wchar_t *ui1_remote;
+    [string] wchar_t *ui1_password;
+    unsigned long ui1_status;
+    unsigned long ui1_asg_type;
+    unsigned long ui1_refcount;
+    unsigned long ui1_usecount;
+} USE_INFO_1, *PUSE_INFO_1, *LPUSE_INFO_1;
+
+typedef struct _USE_INFO_2
+{
+    USE_INFO_1 ui2_useinfo;
+    [string] wchar_t *ui2_username;
+    [string] wchar_t *ui2_domainname;
+} USE_INFO_2, *PUSE_INFO_2, *LPUSE_INFO_2;
+
+typedef struct _USE_INFO_3
+{
+    USE_INFO_2 ui3_ui2;
+    ULONG ui3_flags;
+} USE_INFO_3, *PUSE_INFO_3, *LPUSE_INFO_3;
+
+typedef [switch_type(unsigned long)] union _USE_INFO
+{
+    [case(0)] LPUSE_INFO_0 UseInfo0;
+    [case(1)] LPUSE_INFO_1 UseInfo1;
+    [case(2)] LPUSE_INFO_2 UseInfo2;
+    [case(3)] LPUSE_INFO_3 UseInfo3;
+    [default] ;
+} USE_INFO, *PUSE_INFO, *LPUSE_INFO;
+
+typedef struct _USE_INFO_0_CONTAINER
+{
+    unsigned long EntriesRead;
+    LPUSE_INFO_0 Buffer;
+} USE_INFO_0_CONTAINER, *PUSE_INFO_0_CONTAINER, *LPUSE_INFO_0_CONTAINER;
+
+typedef struct _USE_INFO_1_CONTAINER
+{
+    unsigned long EntriesRead;
+    LPUSE_INFO_1 Buffer;
+} USE_INFO_1_CONTAINER, *PUSE_INFO_1_CONTAINER, *LPUSE_INFO_1_CONTAINER;
+
+typedef struct _USE_INFO_2_CONTAINER
+{
+    unsigned long EntriesRead;
+    LPUSE_INFO_2 Buffer;
+} USE_INFO_2_CONTAINER, *PUSE_INFO_2_CONTAINER, *LPUSE_INFO_2_CONTAINER;
+
+typedef struct _USE_ENUM_STRUCT
+{
+    DWORD Level;
+    [switch_is(Level)] union _USE_ENUM_UNION
+    {
+        [case(0)] LPUSE_INFO_0_CONTAINER Level0;
+        [case(1)] LPUSE_INFO_1_CONTAINER Level1;
+        [case(2)] LPUSE_INFO_2_CONTAINER Level2;
+        [default] ;
+    } UseInfo;
+} USE_ENUM_STRUCT, *PUSE_ENUM_STRUCT, *LPUSE_ENUM_STRUCT;
+
+typedef struct _WKSTA_USER_INFO_0_CONTAINER
+{
+    unsigned long EntriesRead;
+    [size_is(EntriesRead)] LPWKSTA_USER_INFO_0 Buffer;
+} WKSTA_USER_INFO_0_CONTAINER, *PWKSTA_USER_INFO_0_CONTAINER, *LPWKSTA_USER_INFO_0_CONTAINER;
+
+typedef struct _WKSTA_USER_INFO_1_CONTAINER
+{
+    unsigned long EntriesRead;
+    [size_is(EntriesRead)] LPWKSTA_USER_INFO_1 Buffer;
+} WKSTA_USER_INFO_1_CONTAINER, *PWKSTA_USER_INFO_1_CONTAINER, *LPWKSTA_USER_INFO_1_CONTAINER;
+
+typedef struct _WKSTA_USER_ENUM_STRUCT
+{
+    unsigned long Level;
+    [switch_is(Level)] union _WKSTA_USER_ENUM_UNION
+    {
+        [case(0)] LPWKSTA_USER_INFO_0_CONTAINER Level0;
+        [case(1)] LPWKSTA_USER_INFO_1_CONTAINER Level1;
+        [default] ;
+    } WkstaUserInfo;
+} WKSTA_USER_ENUM_STRUCT, *PWKSTA_USER_ENUM_STRUCT, *LPWKSTA_USER_ENUM_STRUCT;
+
+typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER
+{
+    unsigned long EntriesRead;
+    [size_is(EntriesRead)] LPWKSTA_TRANSPORT_INFO_0 Buffer;
+} WKSTA_TRANSPORT_INFO_0_CONTAINER, *PWKSTA_TRANSPORT_INFO_0_CONTAINER, *LPWKSTA_TRANSPORT_INFO_0_CONTAINER;
+
+typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT
+{
+    unsigned long Level;
+    [switch_is(Level)] union _WKSTA_TRANSPORT_ENUM_UNION
+    {
+        [case(0)] LPWKSTA_TRANSPORT_INFO_0_CONTAINER Level0;
+        [default] ;
+    } WkstaTransportInfo;
+} WKSTA_TRANSPORT_ENUM_STRUCT, *PWKSTA_TRANSPORT_ENUM_STRUCT, *LPWKSTA_TRANSPORT_ENUM_STRUCT;
+
+#define JOIN_OBFUSCATOR_LENGTH 8
+#define JOIN_MAX_PASSWORD_LENGTH 256
+typedef struct _JOINPR_USER_PASSWORD
+{
+    unsigned char Obfuscator[JOIN_OBFUSCATOR_LENGTH];
+    wchar_t Buffer[JOIN_MAX_PASSWORD_LENGTH];
+    unsigned long Length;
+} JOINPR_USER_PASSWORD, *PJOINPR_USER_PASSWORD;
+
+typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD
+{
+    unsigned char Buffer[JOIN_OBFUSCATOR_LENGTH + (JOIN_MAX_PASSWORD_LENGTH * sizeof(wchar_t)) + sizeof(unsigned long)];
+} JOINPR_ENCRYPTED_USER_PASSWORD, *PJOINPR_ENCRYPTED_USER_PASSWORD;
+
+cpp_quote("#if !defined(_NTSECAPI_H)")
+typedef struct _UNICODE_STRING
+{
+    unsigned short Length;
+    unsigned short MaximumLength;
+    [size_is(MaximumLength / 2), length_is((Length) / 2)] unsigned short *Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+cpp_quote("#endif")
+
+typedef struct _NET_COMPUTER_NAME_ARRAY
+{
+    unsigned long EntryCount;
+    [size_is(EntryCount)] PUNICODE_STRING ComputerNames;
+} NET_COMPUTER_NAME_ARRAY, *PNET_COMPUTER_NAME_ARRAY;
+
+
+[
+    uuid(6BFFD098-A112-3610-9833-46C3F87E345A),version(1.0),
+    version(1.0),
+    pointer_default(unique),
+    endpoint("ncacn_np:[\\pipe\\wkssvc]")
+#ifndef __midl
+    ,implicit_handle(handle_t hBinding)
+#endif
+
+]
+interface wkssvc
+{
+    /* Function 0 */
+    unsigned long
+    __stdcall
+    NetrWkstaGetInfo (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in] unsigned long Level,
+        [out, switch_is(Level)] LPWKSTA_INFO WkstaInfo);
+
+    /* Function 1 */
+    unsigned long
+    __stdcall
+    NetrWkstaSetInfo (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in] unsigned long Level,
+        [in, switch_is(Level)] LPWKSTA_INFO WkstaInfo,
+        [in, out, unique] unsigned long *ErrorParameter);
+
+    /* Function 2 */
+    unsigned long
+    __stdcall
+    NetrWkstaUserEnum (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in, out] LPWKSTA_USER_ENUM_STRUCT UserInfo,
+        [in] unsigned long PreferredMaximumLength,
+        [out] unsigned long *TotalEntries,
+        [in, out, unique] unsigned long *ResumeHandle);
+
+    /* Function 3 */
+    void
+    __stdcall
+    Opnum3NotUsedOnWire(void);
+
+    /* Function 4 */
+    void
+    __stdcall
+    Opnum4NotUsedOnWire(void);
+
+    /* Function 5 */
+    unsigned long
+    __stdcall
+    NetrWkstaTransportEnum (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in, out] LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
+        [in] unsigned long PreferredMaximumLength,
+        [out] unsigned long* TotalEntries,
+        [in, out, unique] unsigned long *ResumeHandle);
+
+    /* Function 6 */
+    unsigned long
+    __stdcall
+    NetrWkstaTransportAdd (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in] unsigned long Level,
+        [in] LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
+        [in, out, unique] unsigned long *ErrorParameter);
+
+    /* Function 7 */
+    unsigned long
+    __stdcall
+    NetrWkstaTransportDel (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in, string, unique] wchar_t *TransportName,
+        [in] unsigned long ForceLevel);
+
+    /* Function 8 */
+    unsigned long
+    __stdcall
+    NetrUseAdd (
+        [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
+        [in] unsigned long Level,
+        [in, switch_is(Level)] LPUSE_INFO InfoStruct,
+        [in, out, unique] unsigned long *ErrorParameter);
+
+    /* Function 9 */
+    unsigned long
+    __stdcall
+    NetrUseGetInfo (
+        [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
+        [in, string] wchar_t *UseName,
+        [in] unsigned long Level,
+        [out, switch_is(Level)] LPUSE_INFO InfoStruct);
+
+    /* Function 10 */
+    unsigned long
+    __stdcall
+    NetrUseDel (
+        [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
+        [in, string] wchar_t *UseName,
+        [in] unsigned long ForceLevel);
+
+    /* Function 11 */
+    unsigned long
+    __stdcall
+    NetrUseEnum (
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in, out] LPUSE_ENUM_STRUCT InfoStruct,
+        [in] unsigned long PreferredMaximumLength,
+        [out] unsigned long *TotalEntries,
+        [in, out, unique] unsigned long *ResumeHandle);
+
+    /* Function 12 */
+    void
+    __stdcall
+    Opnum12NotUsedOnWire(void);
+
+    /* Function 13 */
+    unsigned long
+    __stdcall
+    NetrWorkstationStatisticsGet(
+        [in, string, unique] WKSSVC_IDENTIFY_HANDLE ServerName,
+        [in, string, unique] wchar_t *ServiceName,
+        [in] unsigned long Level,
+        [in] unsigned long Options,
+        [out] LPSTAT_WORKSTATION_0 *Buffer);
+
+    /* Function 14 */
+    void
+    __stdcall
+    Opnum14NotUsedOnWire(void);
+
+    /* Function 15 */
+    void
+    __stdcall
+    Opnum15NotUsedOnWire(void);
+
+    /* Function 16 */
+    void
+    __stdcall
+    Opnum16NotUsedOnWire(void);
+
+    /* Function 17 */
+    void
+    __stdcall
+    Opnum17NotUsedOnWire(void);
+
+    /* Function 18 */
+    void
+    __stdcall
+    Opnum18NotUsedOnWire(void);
+
+    /* Function 19 */
+    void
+    __stdcall
+    Opnum19NotUsedOnWire(void);
+
+    /* Function 20 */
+    unsigned long
+    __stdcall
+    NetrGetJoinInformation(
+        [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
+        [in, out, string] wchar_t **NameBuffer,
+        [out] PNETSETUP_JOIN_STATUS BufferType);
+
+    /* Function 21 */
+    void
+    __stdcall
+    Opnum21NotUsedOnWire(void);
+
+    /* Function 22 */
+    unsigned long
+    __stdcall
+    NetrJoinDomain2(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string] wchar_t *DomainNameParam,
+        [in, string, unique] wchar_t *MachineAccountOU,
+        [in, string, unique] wchar_t *AccountName,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
+        [in] unsigned long Options);
+
+    /* Function 23 */
+    unsigned long
+    __stdcall
+    NetrUnjoinDomain2(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string, unique] wchar_t *AccountName,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
+        [in] unsigned long Options);
+
+    /* Function 24 */
+    unsigned long
+    __stdcall
+    NetrRenameMachineInDomain2(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string, unique] wchar_t *MachineName,
+        [in, string, unique] wchar_t *AccountName,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
+        [in] unsigned long Options);
+
+    /* Function 25 */
+    unsigned long
+    __stdcall
+    NetrValidateName2(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string] wchar_t *NameToValidate,
+        [in, string, unique] wchar_t *AccountName,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
+        [in] NETSETUP_NAME_TYPE NameType);
+
+    /* Function 26 */
+    unsigned long
+    __stdcall
+    NetrGetJoinableOUs2(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string] wchar_t *DomainNameParam,
+        [in, string, unique] wchar_t *AccountName,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
+        [in, out] unsigned long* OUCount,
+        [out, string, size_is(,*OUCount)] wchar_t ***OUs);
+
+    /* Function 27 */
+    unsigned long
+    __stdcall
+    NetrAddAlternateComputerName(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string, unique] wchar_t *AlternateName,
+        [in, string, unique] wchar_t *DomainAccount,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
+        [in] unsigned long Reserved);
+
+    /* Function 28 */
+    unsigned long
+    __stdcall
+    NetrRemoveAlternateComputerName(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string, unique] wchar_t *AlternateName,
+        [in, string, unique] wchar_t *DomainAccount,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
+        [in] unsigned long Reserved);
+
+    /* Function 29 */
+    unsigned long
+    __stdcall
+    NetrSetPrimaryComputerName(
+        [in] handle_t RpcBindingHandle,
+        [in, string, unique] wchar_t *ServerName,
+        [in, string, unique] wchar_t *PrimaryName,
+        [in, string, unique] wchar_t *DomainAccount,
+        [in, unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
+        [in] unsigned long Reserved);
+
+    /* Function 30 */
+    unsigned long
+    __stdcall
+    NetrEnumerateComputerNames(
+        [in, string, unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
+        [in] NET_COMPUTER_NAME_TYPE NameType,
+        [in] unsigned long Reserved,
+        [out] PNET_COMPUTER_NAME_ARRAY *ComputerNames);
+}