Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

274 lines
6.8 KiB

/*++
Copyright (C) Microsoft Corporation, 1991 - 1999
Module Name:
epmp.idl
Abstract:
This file specifies the interface to the endpoint mapper
Author:
Bharat Shah (barats) 2-11-92
Revision History:
barats 03-13-92 Changed to new spec.
barats 05-10-92 Midl related bugbug removed
mariogo 06-08-94 Changed to full pointers.
mariogo 04-24-96 Added local interface for local runtime
<-> rpcss calls.
gopalp 06-03-97 Added code to cleanup stale EP Mapper entries.
--*/
#ifdef WIN
#define __RPC_FAR __far
#else
#define __RPC_FAR
#endif
//
// EPMP Interface.
//
[
uuid(e1af8308-5d1f-11c9-91a4-08002b14a0fa), version(3.0),
pointer_default(ptr)
]
interface epmp
{
import "nbase.idl";
import "wtypes.idl";
//
// Well known endpoint mapper constants
//
const unsigned32 ep_max_annotation_size = 64;
const unsigned32 EP_S_CANT_PERFORM_OP = 0x16c9a0cd;
const unsigned32 EP_S_NOT_REGISTERED = 0x16c9a0d6;
//
// User Defind Types
//
typedef unsigned long ulong;
typedef unsigned32 error_status;
typedef [context_handle] void * ept_lookup_handle_t;
typedef [context_handle] void * ept_cleanup_handle_t;
#define ep_max_annotation_size 64
typedef struct _twr_t {
[range(0, 2000)] unsigned32 tower_length;
[size_is(tower_length)]
byte tower_octet_string[];
} twr_t, *twr_p_t;
#ifdef _CLIENT_PASS_
typedef [unique] twr_t *TWR_P_T;
#else
typedef [ptr] twr_t *TWR_P_T;
#endif
typedef struct {
UUID object;
twr_p_t tower;
[string] char annotation[ep_max_annotation_size];
} ept_entry_t;
typedef [ptr] ept_entry_t * ept_entry_p_t;
typedef struct _I_Tower {
TWR_P_T Tower;
} I_Tower;
cpp_quote("//")
cpp_quote("// The maximum size, in bytes, of incoming data for methods in the interface.")
cpp_quote("//")
cpp_quote("// The largest [in] size is for ept_insert if 500 ept_entry_t's are passed but")
cpp_quote("// the funciton is depricated and will fail. Any legitimate call should fit into")
cpp_quote("// several K and we will be generous.")
cpp_quote("//")
cpp_quote("#define epmp_MaxRpcSize (4*1024)")
//
// Interface Exported Methods
//
void
ept_insert(
[in] handle_t hEpMapper,
[in, range(0,500)] unsigned32 num_ents,
[in, size_is(num_ents)] ept_entry_t entries[],
[in] unsigned long replace,
[out] error_status *status
);
void
ept_delete (
[in] handle_t hEpMapper,
[in, range(0,500)] unsigned32 num_ents,
[in, size_is(num_ents)] ept_entry_t entries[],
[out] error_status *status
);
void
ept_lookup (
[in] handle_t hEpMapper,
[in] unsigned32 inquiry_type,
[in, ptr] UUID * object,
[in, ptr] RPC_IF_ID * Ifid,
[in] unsigned32 vers_option,
[in, out] ept_lookup_handle_t *entry_handle,
[in, range(0, 500)] unsigned32 max_ents,
[out] unsigned32 *num_ents,
[out, length_is(*num_ents), size_is(max_ents)] ept_entry_t entries[],
[out] error_status *status
);
void __RPC_FAR
ept_map (
[in] handle_t hEpMapper,
[in, ptr] UUID * obj,
[in, ptr] twr_p_t map_tower,
[in, out] ept_lookup_handle_t *entry_handle,
[in, range(0, 500)] unsigned32 max_towers,
[out] unsigned32 *num_towers,
[out,size_is(max_towers),length_is(*num_towers)] TWR_P_T *ITowers,
[out] error_status *status
);
void
ept_lookup_handle_free (
[in] handle_t h,
[in, out] ept_lookup_handle_t *entry_handle,
[out] error_status *status
);
void
ept_inq_object (
[in] handle_t hEpMapper,
[in] UUID *ept_object,
[out] error_status *status
);
void
ept_mgmt_delete (
[in] handle_t hEpMapper,
[in] boolean32 object_speced,
[in, ptr] UUID * object,
[in, ptr] twr_p_t tower,
[out] error_status *status
);
void __RPC_FAR
ept_map_auth (
[in] handle_t hEpMapper,
[in, ptr] UUID * obj,
[in, ptr] twr_p_t map_tower,
[in, unique] PISID pSID,
[in, out] ept_lookup_handle_t *entry_handle,
[in, range(0, 500)] unsigned32 max_towers,
[out] unsigned32 *num_towers,
[out,size_is(max_towers),length_is(*num_towers)] TWR_P_T *ITowers,
[out] error_status *status
);
} // interface epmp
//
// LOCALEPMP Interface.
//
#if !defined(MAC) && !defined(MPPC)
[
uuid(0b0a6584-9e0f-11cf-a3cf-00805f68cb1b),
version(1.1)
]
interface localepmp
{
cpp_quote("//")
cpp_quote("// The maximum size, in bytes, of incoming data for methods in the interface.")
cpp_quote("//")
cpp_quote("// The largest [in] size is for ept_insert_ex if 500 ept_entry_t's are passed.")
cpp_quote("// This would require 500*(64+2000+...) > 500K bytes. We would not expect")
cpp_quote("// a legitimate client to send this much. 200K will be enough for at least 100")
cpp_quote("// towers.")
cpp_quote("//")
cpp_quote("#define localepmp_MaxRpcSize (200*1024)")
typedef [context_handle] void *HPROCESS;
//
// Must be called to call the local endpoint mapper at all.
//
error_status_t
OpenEndpointMapper([in] handle_t hServer,
[out] HPROCESS *pProcessHandle);
//
// For machines on networks with port restrictions due to firewalls
// we need to centrally (for a system) manage port allocation.
//
// Regardless of the general policy for the network, applications
// either want a "standard" port which is not available from an
// external network (system services usually) or want a "restricted"
// port because their service needs to be avaiable to both internal
// and external users.
// The endpoint mapper manages ranges of both kinds of ports and
// will return "restricted" (if fRestricted) or "standard" ports
// as required by applications.
// If *pPort is zero then any port maybe used.
//
typedef [v1_enum] enum {
PORT_INTERNET = 1,
PORT_INTRANET,
PORT_DEFAULT
} PORT_TYPE;
error_status_t
AllocateReservedIPPort(
[in] HPROCESS hProcess,
[in] PORT_TYPE DesiredPort,
[out] long *pAllocationStatus,
[out] unsigned short *pPort);
void
ept_insert_ex(
[in] handle_t hEpMapper,
[in, out] ept_cleanup_handle_t *hEpCleanup,
[in, range(0, 500)] unsigned32 num_ents,
[in, size_is(num_ents)] ept_entry_t entries[],
[in] unsigned long replace,
[out] error_status *status
);
void
ept_delete_ex (
[in] handle_t hEpMapper,
[in, out] ept_cleanup_handle_t *hEpCleanup,
[in, range(0, 500)] unsigned32 num_ents,
[in, size_is(num_ents)] ept_entry_t entries[],
[out] error_status *status
);
} // interface localepmp
#endif // !MAC && !MPPC