/*++ 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"; // // Well known endpoint mapper constants // const unsigned32 ep_max_annotation_size = 64; const unsigned32 EP_S_SUCCESS = 0x00000000; const unsigned32 EP_S_CANT_PERFORM_OP = 0x16c9a0cd; const unsigned32 EP_S_DATABASE_INVALID = 0x16c9a0cf; const unsigned32 EP_S_CANT_CREATE = 0x16c9a0d0; const unsigned32 EP_S_CANT_ACCESS = 0x16c9a0d1; const unsigned32 EP_S_BAD_ENTRY = 0x16c9a0d3; const unsigned32 EP_S_UPDATA_FAILED = 0x16c9a0d4; const unsigned32 EP_S_NOT_REGISTERED = 0x16c9a0d6; const unsigned32 EP_S_SERVER_UNAVAILABLE = 0x16c9a0d7; // // 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 { 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; // // Interface Exported Methods // void ept_insert( [in] handle_t hEpMapper, [in] 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] 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] unsigned32 max_ents, [out] unsigned32 *num_ents, [out, length_is(*num_ents), size_is(max_ents)] ept_entry_t entries[], [out] error_status *status ); #ifdef _CLIENT_PASS_ 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] unsigned32 max_towers, [out] unsigned32 *num_towers, [out,size_is(max_towers),length_is(*num_towers)] TWR_P_T *ITowers, [out] error_status *status ); #elif _SERVER_PASS_ 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] unsigned32 max_towers, [out] unsigned32 *num_towers, [out,size_is(max_towers),length_is(*num_towers)] TWR_P_T *ITowers, [out] error_status *status ); #else #error must define either _CLIENT_PASS_ or _SERVER_PASS_ (for Win95 and NT 3.1 compatibility) #endif 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 ); } // interface epmp // // LOCALEPMP Interface. // #if !defined(MAC) && !defined(MPPC) [ uuid(0b0a6584-9e0f-11cf-a3cf-00805f68cb1b), version(1.1) ] interface localepmp { 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] 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] unsigned32 num_ents, [in, size_is(num_ents)] ept_entry_t entries[], [out] error_status *status ); #if 0 // // We only allocate local processes to register and delete // bindings from the endpoint mapper. The remote version // always fails with access denided. // // The context handle parameter is used to allow the endpoint // mapper to cleanup entries in the endpoint mapper database // when a process dies. // void ept_insert( [in] handle_t hServer, [in] HPROCESS hProcess, [in] 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 hServer, [in] HPROCESS hProcess, [in] unsigned32 num_ents, [in, size_is(num_ents)] ept_entry_t entries[], [out] error_status *status ); #endif } // interface localepmp #endif // !MAC && !MPPC