windows-nt/Source/XPSP1/NT/ds/netapi/svcdlls/wkssvc/idl/wkssvc.idl

621 lines
18 KiB
Plaintext
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
wkssvc.idl
Abstract:
Contains the Netr (Net Remote) RPC interface specification for the APIs
associated with the Workstation service. This includes APIs from the
following catagories:
NetWksta
NetUse
Also contains the RPC specific data structures for these API.
Author:
Rita Wong (ritaw) 06-May-1991
Environment:
User Mode - Win32 - MIDL
Revision History:
21-Jan-1992 rfirth
* Removed NET_API_FUNCTION from all interfaces
--*/
//
// Interface Attributes
//
[
uuid(6BFFD098-A112-3610-9833-46C3F87E345A),
version(1.0),
#ifdef __midl
ms_union,
#endif // __midl
pointer_default(unique)
]
//
// Interface Keyword
//
interface wkssvc
//
// Interface Body
//
{
import "imports.idl";
#include <lmcons.h>
//
// BUGBUG - take this definition out when midl understands LPWSTR etc
//
#ifdef UNICODE
#define LPTSTR wchar_t*
#endif
//
// ---------------------------------------------------------------//
//
typedef [handle] LPTSTR WKSSVC_IMPERSONATE_HANDLE;
typedef [handle] LPTSTR WKSSVC_IDENTIFY_HANDLE;
//
// Workstation APIs
//
//
// NetrWkstaGetInfo and NetrWkstaSetInfo
//
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(1010)]
LPWKSTA_INFO_1010 WkstaInfo1010;
[case(1011)]
LPWKSTA_INFO_1011 WkstaInfo1011;
[case(1012)]
LPWKSTA_INFO_1012 WkstaInfo1012;
[case(1013)]
LPWKSTA_INFO_1013 WkstaInfo1013;
[case(1018)]
LPWKSTA_INFO_1018 WkstaInfo1018;
[case(1023)]
LPWKSTA_INFO_1023 WkstaInfo1023;
[case(1033)]
LPWKSTA_INFO_1033 WkstaInfo1033;
[case(1041)]
LPWKSTA_INFO_1041 WkstaInfo1041;
[case(1042)]
LPWKSTA_INFO_1042 WkstaInfo1042;
[case(1043)]
LPWKSTA_INFO_1043 WkstaInfo1043;
[case(1044)]
LPWKSTA_INFO_1044 WkstaInfo1044;
[case(1045)]
LPWKSTA_INFO_1045 WkstaInfo1045;
[case(1046)]
LPWKSTA_INFO_1046 WkstaInfo1046;
[case(1047)]
LPWKSTA_INFO_1047 WkstaInfo1047;
[case(1048)]
LPWKSTA_INFO_1048 WkstaInfo1048;
[case(1049)]
LPWKSTA_INFO_1049 WkstaInfo1049;
[case(1050)]
LPWKSTA_INFO_1050 WkstaInfo1050;
[case(1051)]
LPWKSTA_INFO_1051 WkstaInfo1051;
[case(1052)]
LPWKSTA_INFO_1052 WkstaInfo1052;
[case(1053)]
LPWKSTA_INFO_1053 WkstaInfo1053;
[case(1054)]
LPWKSTA_INFO_1054 WkstaInfo1054;
[case(1055)]
LPWKSTA_INFO_1055 WkstaInfo1055;
[case(1056)]
LPWKSTA_INFO_1056 WkstaInfo1056;
[case(1057)]
LPWKSTA_INFO_1057 WkstaInfo1057;
[case(1058)]
LPWKSTA_INFO_1058 WkstaInfo1058;
[case(1059)]
LPWKSTA_INFO_1059 WkstaInfo1059;
[case(1060)]
LPWKSTA_INFO_1060 WkstaInfo1060;
[case(1061)]
LPWKSTA_INFO_1061 WkstaInfo1061;
[case(1062)]
LPWKSTA_INFO_1062 WkstaInfo1062;
[case(502)]
LPWKSTA_INFO_502 WkstaInfo502;
[default]
;
} WKSTA_INFO, *PWKSTA_INFO, *LPWKSTA_INFO;
NET_API_STATUS
NetrWkstaGetInfo (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in] DWORD Level,
[out, switch_is(Level)] LPWKSTA_INFO WkstaInfo
);
NET_API_STATUS
NetrWkstaSetInfo (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in] DWORD Level,
[in, switch_is(Level)] LPWKSTA_INFO WkstaInfo,
[in,out,unique] LPDWORD ErrorParameter
);
//
// NetrWkstaUserEnum
//
typedef struct _WKSTA_USER_INFO_0_CONTAINER {
DWORD 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 {
DWORD 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 {
DWORD 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;
NET_API_STATUS
NetrWkstaUserEnum (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in,out] LPWKSTA_USER_ENUM_STRUCT UserInfo,
[in] DWORD PreferredMaximumLength,
[out] LPDWORD TotalEntries,
[in,out,unique] LPDWORD ResumeHandle
);
//
// NetrWkstaUserGetInfo and NetrWkstaUserSetInfo
//
typedef [switch_type(unsigned long)] union _WKSTA_USER_INFO {
[case(0)]
LPWKSTA_USER_INFO_0 UserInfo0;
[case(1)]
LPWKSTA_USER_INFO_1 UserInfo1;
[case(1101)]
LPWKSTA_USER_INFO_1101 UserInfo1101;
[default]
;
} WKSTA_USER_INFO, *PWKSTA_USER_INFO, *LPWKSTA_USER_INFO;
NET_API_STATUS
NetrWkstaUserGetInfo (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE Reserved,
[in] DWORD Level,
[out, switch_is(Level)] LPWKSTA_USER_INFO UserInfo
);
NET_API_STATUS
NetrWkstaUserSetInfo (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE Reserved,
[in] DWORD Level,
[in, switch_is(Level)] LPWKSTA_USER_INFO UserInfo,
[in,out,unique] LPDWORD ErrorParameter
);
//
// NetrWkstaTransportEnum
//
typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER {
DWORD 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 {
DWORD 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;
NET_API_STATUS
NetrWkstaTransportEnum (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in,out] LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
[in] DWORD PreferredMaximumLength,
[out] LPDWORD TotalEntries,
[in,out,unique] LPDWORD ResumeHandle
);
//
// NetrWkstaTransportAdd
//
NET_API_STATUS
NetrWkstaTransportAdd (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in] DWORD Level,
[in] LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
[in,out,unique] LPDWORD ErrorParameter
);
//
// NetrWkstaTransportDel
//
NET_API_STATUS
NetrWkstaTransportDel (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in,string,unique] LPTSTR TransportName,
[in] DWORD ForceLevel
);
//
// NetrUseAdd and NetrUseGetInfo
//
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;
NET_API_STATUS
NetrUseAdd (
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in] DWORD Level,
[in, switch_is(Level)] LPUSE_INFO InfoStruct,
[in,out,unique] LPDWORD ErrorParameter
);
NET_API_STATUS
NetrUseGetInfo (
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPTSTR UseName,
[in] DWORD Level,
[out, switch_is(Level)] LPUSE_INFO InfoStruct
);
//
// NetrUseDel
//
NET_API_STATUS
NetrUseDel (
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPTSTR UseName,
[in] DWORD ForceLevel
);
//
// NetrUseEnum
//
typedef struct _USE_INFO_0_CONTAINER {
DWORD EntriesRead;
[size_is(EntriesRead)] LPUSE_INFO_0 Buffer;
} USE_INFO_0_CONTAINER, *PUSE_INFO_0_CONTAINER, *LPUSE_INFO_0_CONTAINER;
typedef struct _USE_INFO_1_CONTAINER {
DWORD EntriesRead;
[size_is(EntriesRead)] LPUSE_INFO_1 Buffer;
} USE_INFO_1_CONTAINER, *PUSE_INFO_1_CONTAINER, *LPUSE_INFO_1_CONTAINER;
typedef struct _USE_INFO_2_CONTAINER {
DWORD EntriesRead;
[size_is(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;
NET_API_STATUS
NetrUseEnum (
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in,out] LPUSE_ENUM_STRUCT InfoStruct,
[in] DWORD PreferedMaximumLength,
[out] LPDWORD TotalEntries,
[in,out,unique] LPDWORD ResumeHandle
);
//
// NetrMessageBufferSend
//
NET_API_STATUS
NetrMessageBufferSend (
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPTSTR MessageName,
[in,string,unique] LPTSTR FromName,
[in,size_is(MessageSize)] LPBYTE Message,
[in] DWORD MessageSize
);
NET_API_STATUS
NetrWorkstationStatisticsGet(
[in,string,unique] WKSSVC_IDENTIFY_HANDLE ServerName,
[in,string,unique] LPTSTR ServiceName,
[in] DWORD Level,
[in] DWORD Options,
[out] LPSTAT_WORKSTATION_0* Buffer
);
//
// I_NetrLogonDomainNameAdd
//
NET_API_STATUS
I_NetrLogonDomainNameAdd(
[in,string] WKSSVC_IDENTIFY_HANDLE LogonDomain
);
//
// I_NetrLogonDomainNameDel
//
NET_API_STATUS
I_NetrLogonDomainNameDel(
[in,string] WKSSVC_IDENTIFY_HANDLE LogonDomain
);
//
// Net join apis
//
NET_API_STATUS
NetrJoinDomain(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPTSTR DomainName,
[in,string,unique] LPTSTR MachineAccountOU,
[in,string,unique] LPTSTR AccountName,
[in,string,unique] LPTSTR Password,
[in] DWORD Options
);
NET_API_STATUS
NetrUnjoinDomain(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string,unique] LPTSTR AccountName,
[in,string,unique] LPTSTR Password,
[in] DWORD Options
);
NET_API_STATUS
NetrRenameMachineInDomain(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string,unique] LPTSTR MachineName,
[in,string,unique] LPTSTR AccountName,
[in,string,unique] LPTSTR Password,
[in] DWORD Options
);
//
// Determine the validity of a name
//
NET_API_STATUS
NetrValidateName(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPTSTR NameToValidate,
[in,string,unique] LPTSTR AccountName,
[in,string,unique] LPTSTR Password,
[in] NETSETUP_NAME_TYPE NameType
);
//
// Determines whether a workstation is joined to a domain or not
//
NET_API_STATUS
NetrGetJoinInformation(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,out,string] LPTSTR *NameBuffer,
[out] PNETSETUP_JOIN_STATUS BufferType
);
typedef struct _NETSETUPR_MACHINE_ACCOUNT_OUS {
[size_is( OUCount ), string ] LPWSTR *OUs;
DWORD OUCount;
} NETSETUPR_MACHINE_ACCOUNT_OUS, *PNETSETUPR_MACHINE_ACCOUNT_OUS,
*LPNETSETUPR_MACHINE_ACCOUNT_OUS;
typedef [string] LPWSTR OUSTRING;
NET_API_STATUS
NetrGetJoinableOUs(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in,string] LPWSTR Domain,
[in,string,unique] LPWSTR Account,
[in,string,unique] LPWSTR Password,
[in,out] DWORD *OUCount,
[out,size_is(,*OUCount)] OUSTRING **OUs
);
//
// Join APIs with encrypted passwords
//
//
// Structure to pass an encrypted password over the wire. The Length is the
// length of the password, which should be placed at the end of the buffer.
//
#define JOIN_OBFUSCATOR_LENGTH 8
#define JOIN_MAX_PASSWORD_LENGTH PWLEN
typedef struct _JOINPR_USER_PASSWORD {
UCHAR Obfuscator[JOIN_OBFUSCATOR_LENGTH];
WCHAR Buffer[JOIN_MAX_PASSWORD_LENGTH];
ULONG Length;
} JOINPR_USER_PASSWORD, *PJOINPR_USER_PASSWORD;
//
// Buffer - contains random fill with the password filling up the end
// of the buffer (the last Length bytes).
// Length - Length, in bytes, of the buffer.
//
//
// This is the encrypted version of the above structure, and is passed
// on the wire.
//
typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD {
UCHAR Buffer[ JOIN_OBFUSCATOR_LENGTH + (JOIN_MAX_PASSWORD_LENGTH * sizeof(WCHAR)) + sizeof(ULONG) ];
} JOINPR_ENCRYPTED_USER_PASSWORD, *PJOINPR_ENCRYPTED_USER_PASSWORD;
NET_API_STATUS
NetrJoinDomain2(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string] LPTSTR DomainName,
[in,string,unique] LPTSTR MachineAccountOU,
[in,string,unique] LPTSTR AccountName,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
[in] DWORD Options
);
NET_API_STATUS
NetrUnjoinDomain2(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string,unique] LPTSTR AccountName,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
[in] DWORD Options
);
NET_API_STATUS
NetrRenameMachineInDomain2(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string,unique] LPTSTR MachineName,
[in,string,unique] LPTSTR AccountName,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
[in] DWORD Options
);
NET_API_STATUS
NetrValidateName2(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string] LPTSTR NameToValidate,
[in,string,unique] LPTSTR AccountName,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
[in] NETSETUP_NAME_TYPE NameType
);
NET_API_STATUS
NetrGetJoinableOUs2(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string] LPWSTR Domain,
[in,string,unique] LPWSTR Account,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD Password,
[in,out] DWORD *OUCount,
[out,size_is(,*OUCount)] OUSTRING **OUs
);
//
// Computer rename preparation API
//
NET_API_STATUS
NetrAddAlternateComputerName(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string,unique] LPTSTR AlternateName,
[in,string,unique] LPTSTR DomainAccount,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
[in] DWORD Options
);
NET_API_STATUS
NetrRemoveAlternateComputerName(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string,unique] LPTSTR AlternateName,
[in,string,unique] LPTSTR DomainAccount,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
[in] DWORD Options
);
NET_API_STATUS
NetrSetPrimaryComputerName(
[in] handle_t RpcBindingHandle,
[in,string,unique] LPTSTR ServerName,
[in,string,unique] LPTSTR PrimaryName,
[in,string,unique] LPTSTR DomainAccount,
[in,unique] PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
[in] DWORD Options
);
typedef struct _NET_COMPUTER_NAME_ARRAY {
ULONG EntryCount;
[size_is(EntryCount)] PUNICODE_STRING ComputerNames;
} NET_COMPUTER_NAME_ARRAY, *PNET_COMPUTER_NAME_ARRAY;
NET_API_STATUS
NetrEnumerateComputerNames(
[in,string,unique] WKSSVC_IMPERSONATE_HANDLE ServerName,
[in] NET_COMPUTER_NAME_TYPE NameType,
[in] DWORD Options,
[out] PNET_COMPUTER_NAME_ARRAY *ComputerNames
);
}