/* CVE-2022-38034 PoC code
 * Copyright 2022 Akamai Technologies, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in
 * compliance with the License.  You may obtain a copy
 * of the License at
 *
 *   https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in
 * writing, software distributed under the License is
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 */

/* this ALWAYS GENERATED file contains the definitions for the interfaces */


 /* File created by MIDL compiler version 8.01.0626 */
/* at Tue Jan 19 05:14:07 2038
 */
/* Compiler settings for ms-wkst.idl:
    Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.01.0626 
    protocol : all , ms_ext, c_ext, robust
    error checks: allocation ref bounds_check enum stub_data 
    VC __declspec() decoration level: 
         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
         DECLSPEC_UUID(), MIDL_INTERFACE()
*/
/* @@MIDL_FILE_HEADING(  ) */



/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 500
#endif

#include "rpc.h"
#include "rpcndr.h"

#ifndef __RPCNDR_H_VERSION__
#error this stub requires an updated version of <rpcndr.h>
#endif /* __RPCNDR_H_VERSION__ */


#ifndef __ms2Dwkst_h_h__
#define __ms2Dwkst_h_h__

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#ifndef DECLSPEC_XFGVIRT
#if _CONTROL_FLOW_GUARD_XFG
#define DECLSPEC_XFGVIRT(base, func) __declspec(xfg_virtual(base, func))
#else
#define DECLSPEC_XFGVIRT(base, func)
#endif
#endif

/* Forward Declarations */ 

/* header files for imported files */
//#include "ms-dtyp.h"

#ifdef __cplusplus
extern "C"{
#endif 


#ifndef __wkssvc_INTERFACE_DEFINED__
#define __wkssvc_INTERFACE_DEFINED__

/* interface wkssvc */
/* [unique][version][uuid] */ 

typedef 
enum _NETSETUP_JOIN_STATUS
    {
        NetSetupUnknownStatus	= 0,
        NetSetupUnjoined	= ( NetSetupUnknownStatus + 1 ) ,
        NetSetupWorkgroupName	= ( NetSetupUnjoined + 1 ) ,
        NetSetupDomainName	= ( NetSetupWorkgroupName + 1 ) 
    } 	NETSETUP_JOIN_STATUS;

typedef enum _NETSETUP_JOIN_STATUS *PNETSETUP_JOIN_STATUS;

typedef 
enum _NETSETUP_NAME_TYPE
    {
        NetSetupUnknown	= 0,
        NetSetupMachine	= ( NetSetupUnknown + 1 ) ,
        NetSetupWorkgroup	= ( NetSetupMachine + 1 ) ,
        NetSetupDomain	= ( NetSetupWorkgroup + 1 ) ,
        NetSetupNonExistentDomain	= ( NetSetupDomain + 1 ) ,
        NetSetupDnsMachine	= ( NetSetupNonExistentDomain + 1 ) 
    } 	NETSETUP_NAME_TYPE;

typedef enum _NETSETUP_NAME_TYPE *PNETSETUP_NAME_TYPE;

typedef 
enum _NET_COMPUTER_NAME_TYPE
    {
        NetPrimaryComputerName	= 0,
        NetAlternateComputerNames	= ( NetPrimaryComputerName + 1 ) ,
        NetAllComputerNames	= ( NetAlternateComputerNames + 1 ) ,
        NetComputerNameTypeMax	= ( NetAllComputerNames + 1 ) 
    } 	NET_COMPUTER_NAME_TYPE;

typedef enum _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;

typedef struct _STAT_WORKSTATION_0 *PSTAT_WORKSTATION_0;

typedef struct _STAT_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;

typedef struct _WKSTA_INFO_100 *PWKSTA_INFO_100;

typedef struct _WKSTA_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;

typedef struct _WKSTA_INFO_101 *PWKSTA_INFO_101;

typedef struct _WKSTA_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;

typedef struct _WKSTA_INFO_102 *PWKSTA_INFO_102;

typedef struct _WKSTA_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;

typedef struct _WKSTA_INFO_502 *PWKSTA_INFO_502;

typedef struct _WKSTA_INFO_502 *LPWKSTA_INFO_502;

typedef struct _WKSTA_INFO_1013
    {
    unsigned long wki1013_keep_conn;
    } 	WKSTA_INFO_1013;

typedef struct _WKSTA_INFO_1013 *PWKSTA_INFO_1013;

typedef struct _WKSTA_INFO_1013 *LPWKSTA_INFO_1013;

typedef struct _WKSTA_INFO_1018
    {
    unsigned long wki1018_sess_timeout;
    } 	WKSTA_INFO_1018;

typedef struct _WKSTA_INFO_1018 *PWKSTA_INFO_1018;

typedef struct _WKSTA_INFO_1018 *LPWKSTA_INFO_1018;

typedef struct _WKSTA_INFO_1046
    {
    unsigned long wki1046_dormant_file_limit;
    } 	WKSTA_INFO_1046;

typedef struct _WKSTA_INFO_1046 *PWKSTA_INFO_1046;

typedef struct _WKSTA_INFO_1046 *LPWKSTA_INFO_1046;

typedef struct _WKSTA_USER_INFO_0
    {
    /* [string] */ wchar_t *wkui0_username;
    } 	WKSTA_USER_INFO_0;

typedef struct _WKSTA_USER_INFO_0 *PWKSTA_USER_INFO_0;

typedef struct _WKSTA_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;

typedef struct _WKSTA_USER_INFO_1 *PWKSTA_USER_INFO_1;

typedef struct _WKSTA_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;

typedef struct _WKSTA_TRANSPORT_INFO_0 *PWKSTA_TRANSPORT_INFO_0;

typedef struct _WKSTA_TRANSPORT_INFO_0 *LPWKSTA_TRANSPORT_INFO_0;

typedef /* [handle] */ wchar_t *WKSSVC_IDENTIFY_HANDLE;

typedef /* [handle] */ wchar_t *WKSSVC_IMPERSONATE_HANDLE;

typedef /* [switch_type] */ union _WKSTA_INFO
    {
    /* [case()] */ LPWKSTA_INFO_100 WkstaInfo100;
    /* [case()] */ LPWKSTA_INFO_101 WkstaInfo101;
    /* [case()] */ LPWKSTA_INFO_102 WkstaInfo102;
    /* [case()] */ LPWKSTA_INFO_502 WkstaInfo502;
    /* [case()] */ LPWKSTA_INFO_1013 WkstaInfo1013;
    /* [case()] */ LPWKSTA_INFO_1018 WkstaInfo1018;
    /* [case()] */ LPWKSTA_INFO_1046 WkstaInfo1046;
    /* [default] */  /* Empty union arm */ 
    } 	WKSTA_INFO;

typedef /* [switch_type] */ union _WKSTA_INFO *PWKSTA_INFO;

typedef /* [switch_type] */ union _WKSTA_INFO *LPWKSTA_INFO;

typedef struct _USE_INFO_0
    {
    /* [string] */ wchar_t *ui0_local;
    /* [string] */ wchar_t *ui0_remote;
    } 	USE_INFO_0;

typedef struct _USE_INFO_0 *PUSE_INFO_0;

typedef struct _USE_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;

typedef struct _USE_INFO_1 *PUSE_INFO_1;

typedef struct _USE_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;

typedef struct _USE_INFO_2 *PUSE_INFO_2;

typedef struct _USE_INFO_2 *LPUSE_INFO_2;

typedef struct _USE_INFO_3
    {
    USE_INFO_2 ui3_ui2;
    ULONG ui3_flags;
    } 	USE_INFO_3;

typedef struct _USE_INFO_3 *PUSE_INFO_3;

typedef struct _USE_INFO_3 *LPUSE_INFO_3;

typedef /* [switch_type] */ union _USE_INFO
    {
    /* [case()] */ LPUSE_INFO_0 UseInfo0;
    /* [case()] */ LPUSE_INFO_1 UseInfo1;
    /* [case()] */ LPUSE_INFO_2 UseInfo2;
    /* [case()] */ LPUSE_INFO_3 UseInfo3;
    /* [default] */  /* Empty union arm */ 
    } 	USE_INFO;

typedef /* [switch_type] */ union _USE_INFO *PUSE_INFO;

typedef /* [switch_type] */ union _USE_INFO *LPUSE_INFO;

typedef struct _USE_INFO_0_CONTAINER
    {
    unsigned long EntriesRead;
    LPUSE_INFO_0 Buffer;
    } 	USE_INFO_0_CONTAINER;

typedef struct _USE_INFO_0_CONTAINER *PUSE_INFO_0_CONTAINER;

typedef struct _USE_INFO_0_CONTAINER *LPUSE_INFO_0_CONTAINER;

typedef struct _USE_INFO_1_CONTAINER
    {
    unsigned long EntriesRead;
    LPUSE_INFO_1 Buffer;
    } 	USE_INFO_1_CONTAINER;

typedef struct _USE_INFO_1_CONTAINER *PUSE_INFO_1_CONTAINER;

typedef struct _USE_INFO_1_CONTAINER *LPUSE_INFO_1_CONTAINER;

typedef struct _USE_INFO_2_CONTAINER
    {
    unsigned long EntriesRead;
    LPUSE_INFO_2 Buffer;
    } 	USE_INFO_2_CONTAINER;

typedef struct _USE_INFO_2_CONTAINER *PUSE_INFO_2_CONTAINER;

typedef struct _USE_INFO_2_CONTAINER *LPUSE_INFO_2_CONTAINER;

typedef struct _USE_ENUM_STRUCT
    {
    DWORD Level;
    /* [switch_is] */ /* [switch_type] */ union _USE_ENUM_UNION
        {
        /* [case()] */ LPUSE_INFO_0_CONTAINER Level0;
        /* [case()] */ LPUSE_INFO_1_CONTAINER Level1;
        /* [case()] */ LPUSE_INFO_2_CONTAINER Level2;
        /* [default] */  /* Empty union arm */ 
        } 	UseInfo;
    } 	USE_ENUM_STRUCT;

typedef struct _USE_ENUM_STRUCT *PUSE_ENUM_STRUCT;

typedef struct _USE_ENUM_STRUCT *LPUSE_ENUM_STRUCT;

unsigned long NetrWkstaGetInfo( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [in] */ unsigned long Level,
    /* [switch_is][out] */ LPWKSTA_INFO WkstaInfo);

unsigned long NetrWkstaSetInfo( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [in] */ unsigned long Level,
    /* [switch_is][in] */ LPWKSTA_INFO WkstaInfo,
    /* [unique][out][in] */ unsigned long *ErrorParameter);

typedef struct _WKSTA_USER_INFO_0_CONTAINER
    {
    unsigned long EntriesRead;
    /* [size_is] */ LPWKSTA_USER_INFO_0 Buffer;
    } 	WKSTA_USER_INFO_0_CONTAINER;

typedef struct _WKSTA_USER_INFO_0_CONTAINER *PWKSTA_USER_INFO_0_CONTAINER;

typedef struct _WKSTA_USER_INFO_0_CONTAINER *LPWKSTA_USER_INFO_0_CONTAINER;

typedef struct _WKSTA_USER_INFO_1_CONTAINER
    {
    unsigned long EntriesRead;
    /* [size_is] */ LPWKSTA_USER_INFO_1 Buffer;
    } 	WKSTA_USER_INFO_1_CONTAINER;

typedef struct _WKSTA_USER_INFO_1_CONTAINER *PWKSTA_USER_INFO_1_CONTAINER;

typedef struct _WKSTA_USER_INFO_1_CONTAINER *LPWKSTA_USER_INFO_1_CONTAINER;

typedef struct _WKSTA_USER_ENUM_STRUCT
    {
    unsigned long Level;
    /* [switch_is] */ /* [switch_type] */ union _WKSTA_USER_ENUM_UNION
        {
        /* [case()] */ LPWKSTA_USER_INFO_0_CONTAINER Level0;
        /* [case()] */ LPWKSTA_USER_INFO_1_CONTAINER Level1;
        /* [default] */  /* Empty union arm */ 
        } 	WkstaUserInfo;
    } 	WKSTA_USER_ENUM_STRUCT;

typedef struct _WKSTA_USER_ENUM_STRUCT *PWKSTA_USER_ENUM_STRUCT;

typedef struct _WKSTA_USER_ENUM_STRUCT *LPWKSTA_USER_ENUM_STRUCT;

unsigned long NetrWkstaUserEnum( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [out][in] */ LPWKSTA_USER_ENUM_STRUCT UserInfo,
    /* [in] */ unsigned long PreferredMaximumLength,
    /* [out] */ unsigned long *TotalEntries,
    /* [unique][out][in] */ unsigned long *ResumeHandle);

void Opnum3NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum4NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER
    {
    unsigned long EntriesRead;
    /* [size_is] */ LPWKSTA_TRANSPORT_INFO_0 Buffer;
    } 	WKSTA_TRANSPORT_INFO_0_CONTAINER;

typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER *PWKSTA_TRANSPORT_INFO_0_CONTAINER;

typedef struct _WKSTA_TRANSPORT_INFO_0_CONTAINER *LPWKSTA_TRANSPORT_INFO_0_CONTAINER;

typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT
    {
    unsigned long Level;
    /* [switch_is] */ /* [switch_type] */ union _WKSTA_TRANSPORT_ENUM_UNION
        {
        /* [case()] */ LPWKSTA_TRANSPORT_INFO_0_CONTAINER Level0;
        /* [default] */  /* Empty union arm */ 
        } 	WkstaTransportInfo;
    } 	WKSTA_TRANSPORT_ENUM_STRUCT;

typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT *PWKSTA_TRANSPORT_ENUM_STRUCT;

typedef struct _WKSTA_TRANSPORT_ENUM_STRUCT *LPWKSTA_TRANSPORT_ENUM_STRUCT;

unsigned long NetrWkstaTransportEnum( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [out][in] */ LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
    /* [in] */ unsigned long PreferredMaximumLength,
    /* [out] */ unsigned long *TotalEntries,
    /* [unique][out][in] */ unsigned long *ResumeHandle);

unsigned long NetrWkstaTransportAdd( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [in] */ unsigned long Level,
    /* [in] */ LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
    /* [unique][out][in] */ unsigned long *ErrorParameter);

unsigned long NetrWkstaTransportDel( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [unique][string][in] */ wchar_t *TransportName,
    /* [in] */ unsigned long ForceLevel);

unsigned long NetrUseAdd( 
    /* [unique][string][in] */ WKSSVC_IMPERSONATE_HANDLE ServerName,
    /* [in] */ unsigned long Level,
    /* [switch_is][in] */ LPUSE_INFO InfoStruct,
    /* [unique][out][in] */ unsigned long *ErrorParameter);

unsigned long NetrUseGetInfo( 
    /* [unique][string][in] */ WKSSVC_IMPERSONATE_HANDLE ServerName,
    /* [string][in] */ wchar_t *UseName,
    /* [in] */ unsigned long Level,
    /* [switch_is][out] */ LPUSE_INFO InfoStruct);

unsigned long NetrUseDel( 
    /* [unique][string][in] */ WKSSVC_IMPERSONATE_HANDLE ServerName,
    /* [string][in] */ wchar_t *UseName,
    /* [in] */ unsigned long ForceLevel);

unsigned long NetrUseEnum( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [out][in] */ LPUSE_ENUM_STRUCT InfoStruct,
    /* [in] */ unsigned long PreferredMaximumLength,
    /* [out] */ unsigned long *TotalEntries,
    /* [unique][out][in] */ unsigned long *ResumeHandle);

void Opnum12NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

unsigned long NetrWorkstationStatisticsGet( 
    /* [unique][string][in] */ WKSSVC_IDENTIFY_HANDLE ServerName,
    /* [unique][string][in] */ wchar_t *ServiceName,
    /* [in] */ unsigned long Level,
    /* [in] */ unsigned long Options,
    /* [out] */ LPSTAT_WORKSTATION_0 *Buffer);

void Opnum14NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum15NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum16NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum17NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum18NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

void Opnum19NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

unsigned long NetrGetJoinInformation( 
    /* [unique][string][in] */ WKSSVC_IMPERSONATE_HANDLE ServerName,
    /* [string][out][in] */ wchar_t **NameBuffer,
    /* [out] */ PNETSETUP_JOIN_STATUS BufferType);

void Opnum21NotUsedOnWire( 
    /* [in] */ handle_t IDL_handle);

typedef struct _JOINPR_USER_PASSWORD
    {
    unsigned char Obfuscator[ 8 ];
    wchar_t Buffer[ 256 ];
    unsigned long Length;
    } 	JOINPR_USER_PASSWORD;

typedef struct _JOINPR_USER_PASSWORD *PJOINPR_USER_PASSWORD;

typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD
    {
    unsigned char Buffer[ 524 ];
    } 	JOINPR_ENCRYPTED_USER_PASSWORD;

typedef struct _JOINPR_ENCRYPTED_USER_PASSWORD *PJOINPR_ENCRYPTED_USER_PASSWORD;

typedef struct _UNICODE_STRING
    {
    unsigned short Length;
    unsigned short MaximumLength;
    /* [length_is][size_is] */ unsigned short *Buffer;
    } 	UNICODE_STRING;

typedef struct _UNICODE_STRING *PUNICODE_STRING;

unsigned long NetrJoinDomain2( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [string][in] */ wchar_t *DomainNameParam,
    /* [unique][string][in] */ wchar_t *MachineAccountOU,
    /* [unique][string][in] */ wchar_t *AccountName,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD Password,
    /* [in] */ unsigned long Options);

unsigned long NetrUnjoinDomain2( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [unique][string][in] */ wchar_t *AccountName,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD Password,
    /* [in] */ unsigned long Options);

unsigned long NetrRenameMachineInDomain2( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [unique][string][in] */ wchar_t *MachineName,
    /* [unique][string][in] */ wchar_t *AccountName,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD Password,
    /* [in] */ unsigned long Options);

unsigned long NetrValidateName2( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [string][in] */ wchar_t *NameToValidate,
    /* [unique][string][in] */ wchar_t *AccountName,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD Password,
    /* [in] */ NETSETUP_NAME_TYPE NameType);

unsigned long NetrGetJoinableOUs2( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [string][in] */ wchar_t *DomainNameParam,
    /* [unique][string][in] */ wchar_t *AccountName,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD Password,
    /* [out][in] */ unsigned long *OUCount,
    /* [size_is][size_is][string][out] */ wchar_t ***OUs);

unsigned long NetrAddAlternateComputerName( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [unique][string][in] */ wchar_t *AlternateName,
    /* [unique][string][in] */ wchar_t *DomainAccount,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
    /* [in] */ unsigned long Reserved);

unsigned long NetrRemoveAlternateComputerName( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [unique][string][in] */ wchar_t *AlternateName,
    /* [unique][string][in] */ wchar_t *DomainAccount,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
    /* [in] */ unsigned long Reserved);

unsigned long NetrSetPrimaryComputerName( 
    /* [in] */ handle_t RpcBindingHandle,
    /* [unique][string][in] */ wchar_t *ServerName,
    /* [unique][string][in] */ wchar_t *PrimaryName,
    /* [unique][string][in] */ wchar_t *DomainAccount,
    /* [unique][in] */ PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
    /* [in] */ unsigned long Reserved);

typedef struct _NET_COMPUTER_NAME_ARRAY
    {
    unsigned long EntryCount;
    /* [size_is] */ PUNICODE_STRING ComputerNames;
    } 	NET_COMPUTER_NAME_ARRAY;

typedef struct _NET_COMPUTER_NAME_ARRAY *PNET_COMPUTER_NAME_ARRAY;

unsigned long NetrEnumerateComputerNames( 
    /* [unique][string][in] */ WKSSVC_IMPERSONATE_HANDLE ServerName,
    /* [in] */ NET_COMPUTER_NAME_TYPE NameType,
    /* [in] */ unsigned long Reserved,
    /* [out] */ PNET_COMPUTER_NAME_ARRAY *ComputerNames);



extern RPC_IF_HANDLE wkssvc_v1_0_c_ifspec;
extern RPC_IF_HANDLE wkssvc_v1_0_s_ifspec;
#endif /* __wkssvc_INTERFACE_DEFINED__ */

/* Additional Prototypes for ALL interfaces */

handle_t __RPC_USER WKSSVC_IDENTIFY_HANDLE_bind ( WKSSVC_IDENTIFY_HANDLE );
void     __RPC_USER WKSSVC_IDENTIFY_HANDLE_unbind( WKSSVC_IDENTIFY_HANDLE,  handle_t );
handle_t __RPC_USER WKSSVC_IMPERSONATE_HANDLE_bind ( WKSSVC_IMPERSONATE_HANDLE );
void     __RPC_USER WKSSVC_IMPERSONATE_HANDLE_unbind( WKSSVC_IMPERSONATE_HANDLE,  handle_t );

/* end of Additional Prototypes */

#ifdef __cplusplus
}
#endif

#endif


