home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / netds / rpc / interop / dceport.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  33.3 KB  |  785 lines

  1. /*++
  2.  
  3. Copyright (c) 1993-1997 Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     dceport.h
  8.  
  9. Abstract:
  10.  
  11.     Include file defining types and macros which map DCE RPC APIs to
  12.     Microsoft RPC APIs.  Useful when porting DCE RPC applications to MS RPC.
  13.  
  14. --*/
  15.  
  16. #ifndef DCEPORT_H
  17. #define DCEPORT_H
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. /*
  24. ** Define various idl types
  25. */
  26. #define idl_char                unsigned char
  27. #define idl_boolean             unsigned char
  28. #define idl_byte                unsigned char
  29. #define idl_small_int           char
  30. #define idl_usmall_int          unsigned char
  31. #define idl_short_int           signed short
  32. #define idl_ushort_int          unsigned short
  33. #define idl_long_int            long
  34. #define idl_ulong_int           unsigned long
  35. #define boolean32               unsigned long
  36. #define unsigned32              unsigned long
  37. #define unsigned16              unsigned short
  38. #define idl_true                1
  39. #define idl_false               0
  40. #define unsigned_char_t         unsigned char
  41. typedef unsigned char __RPC_FAR *unsigned_char_p_t;
  42. typedef void __RPC_FAR          *idl_void_p_t;
  43.  
  44. #ifndef _ERROR_STATUS_T_DEFINED
  45. typedef unsigned long error_status_t;
  46. #define _ERROR_STATUS_T_DEFINED
  47. #endif
  48.  
  49. /*
  50. ** Define various DCE RPC types
  51. */
  52. #define rpc_if_handle_t             RPC_IF_HANDLE
  53. #define rpc_ns_handle_t             RPC_NS_HANDLE
  54. #define rpc_authz_handle_t          RPC_AUTHZ_HANDLE
  55. #define rpc_auth_identity_handle_t  RPC_AUTH_IDENTITY_HANDLE
  56. #define rpc_sm_thread_handle_t      RPC_SS_THREAD_HANDLE
  57. #define rpc_mgr_epv_t               RPC_MGR_EPV __RPC_FAR *
  58. #define rpc_object_inq_fn_t         RPC_OBJECT_INQ_FN __RPC_FAR *
  59. #define rpc_auth_key_retrieval_fn_t RPC_AUTH_KEY_RETRIEVAL_FN
  60. #define rpc_mgmt_authorization_fn_t RPC_MGMT_AUTHORIZATION_FN
  61.  
  62. /*
  63. ** Define rpc_binding_vector_t to match DCE
  64. */
  65. #ifdef rpc_binding_vector_t
  66. #undef rpc_binding_vector_t
  67. #endif
  68.  
  69. typedef struct
  70. {
  71.      unsigned long           count;
  72.      handle_t                binding_h[1];
  73. } rpc_binding_vector_t, __RPC_FAR *rpc_binding_vector_p_t;
  74.  
  75. /*
  76. ** Define rpc_protseq_vector_t to match DCE
  77. */
  78.  
  79. typedef struct
  80. {
  81.     unsigned long           count;
  82.     unsigned char *         protseq[1];
  83. } rpc_protseq_vector_t, __RPC_FAR *rpc_protseq_vector_p_t;
  84.  
  85. /*
  86. ** Define rpc_stats_vector_t to match DCE
  87. */
  88.  
  89. typedef struct
  90. {
  91.     unsigned long           count;
  92.     unsigned long           stats[1];
  93. } rpc_stats_vector_t, __RPC_FAR *rpc_stats_vector_p_t;
  94.  
  95. /*
  96. ** Define uuid_t to match DCE
  97. */
  98. #ifdef uuid_t
  99. #undef uuid_t
  100. #endif
  101.  
  102. typedef struct
  103. {
  104.     unsigned long            time_low;
  105.     unsigned short           time_mid;
  106.     unsigned short           time_hi_and_version;
  107.     unsigned char            clock_seq_hi_and_reserved;
  108.     unsigned char            clock_seq_low;
  109.     unsigned char            node[6];
  110. } uuid_t, __RPC_FAR *uuid_p_t;
  111.  
  112. /*
  113. ** Define uuid_vector_t to match DCE
  114. */
  115. #ifdef uuid_vector_t
  116. #undef uuid_vector_t
  117. #endif
  118.  
  119. typedef struct
  120. {
  121.      unsigned long           count;
  122.      uuid_p_t                uuid[1];
  123. } uuid_vector_t, __RPC_FAR *uuid_vector_p_t;
  124.  
  125. /*
  126. ** Define rpc_if_id_t and rpc_if_id_p_t to match DCE
  127. */
  128.  
  129. typedef struct
  130. {
  131.     uuid_t                   uuid;
  132.     unsigned short           vers_major;
  133.     unsigned short           vers_minor;
  134. } rpc_if_id_t, __RPC_FAR *rpc_if_id_p_t;
  135.  
  136. /*
  137. ** Define rpc_if_id_vector_t to match DCE
  138. */
  139.  
  140. typedef struct
  141. {
  142.     unsigned long           count;
  143.     rpc_if_id_p_t           if_id[1];
  144. } rpc_if_id_vector_t, __RPC_FAR *rpc_if_id_vector_p_t;
  145.  
  146. /*
  147. ** The MinThreads parameters to RpcServerListen()
  148. ** is not part of the DCE API rpc_server_listen().
  149. ** This is the default value.
  150. */
  151.  
  152. #define rpc_c_listen_min_threads_default 1
  153.  
  154. /*
  155. ** Define various constants
  156. */
  157. #define rpc_c_ns_syntax_default            RPC_C_NS_SYNTAX_DEFAULT
  158. #define rpc_c_ns_syntax_dce                RPC_C_SYNTAX_DCE
  159. #define rpc_c_ns_default_exp_age           RPC_C_DEFAULT_EXP_AGE
  160. #define rpc_c_protseq_max_reqs_default     RPC_C_PROTSEQ_MAX_REQS_DEFAULT
  161. #define rpc_c_protseq_max_calls_default    RPC_C_PROTSEQ_MAX_REQS_DEFAULT
  162. #define rpc_c_listen_max_calls_default     RPC_C_LISTEN_MAX_CALLS_DEFAULT
  163. #define rpc_c_ep_all_elts                  RPC_C_EP_ALL_ELTS
  164. #define rpc_c_ep_match_by_if               RPC_C_EP_MATCH_BY_IF
  165. #define rpc_c_ep_match_by_obj              RPC_C_EP_MATCH_BY_OBJ
  166. #define rpc_c_ep_match_by_both             RPC_C_EP_MATCH_BY_BOTH
  167. #define rpc_c_vers_all                     RPC_C_VERS_ALL
  168. #define rpc_c_vers_compatible              RPC_C_VERS_COMPATIBLE
  169. #define rpc_c_vers_exact                   RPC_C_VERS_EXACT
  170. #define rpc_c_vers_major_only              RPC_C_VERS_MAJOR_ONLY
  171. #define rpc_c_vers_upto                    RPC_C_VERS_UPTO
  172. #define rpc_c_profile_default_elt          RPC_C_PROFILE_DEFAULT_ELT
  173. #define rpc_c_profile_all_elts             RPC_C_PROFILE_ALL_ELTS
  174. #define rpc_c_profile_match_by_if          RPC_C_PROFILE_MATCH_BY_IF
  175. #define rpc_c_profile_match_by_mbr         RPC_C_PROFILE_MATCH_BY_MBR
  176. #define rpc_c_profile_match_by_both        RPC_C_PROFILE_MATCH_BY_BOTH
  177. #define rpc_c_binding_min_timeout          RPC_C_BINDING_MIN_TIMEOUT
  178. #define rpc_c_binding_default_timeout      RPC_C_BINDING_DEFAULT_TIMEOUT
  179. #define rpc_c_binding_max_timeout          RPC_C_BINDING_MAX_TIMEOUT
  180. #define rpc_c_binding_infinite_timeout     RPC_C_BINDING_INFINITE_TIMEOUT
  181. #define rpc_c_stats_calls_in               RPC_C_STATS_CALLS_IN
  182. #define rpc_c_stats_calls_out              RPC_C_STATS_CALLS_OUT
  183. #define rpc_c_stats_pkts_in                RPC_C_STATS_PKTS_IN
  184. #define rpc_c_stats_pkts_out               RPC_C_STATS_PKTS_OUT
  185. #define rpc_c_mgmt_inq_if_ids              RPC_C_MGMT_INQ_IF_IDS
  186. #define rpc_c_mgmt_inq_princ_name          RPC_C_MGMT_INQ_PRINC_NAME
  187. #define rpc_c_mgmt_inq_stats               RPC_C_MGMT_INQ_STATS
  188. #define rpc_c_mgmt_inq_server_listen       RPC_C_MGMT_INQ_SERVER_LISTEN
  189. #define rpc_c_mgmt_stop_server_listen      RPC_C_MGMT_STOP_SERVER_LISTEN
  190. #define rpc_c_mgmt_cancel_infinite_timeout RPC_C_CANCEL_INFINITE_TIMEOUT
  191.  
  192. /*
  193. ** Define DCE API equivalents
  194. */
  195. #define rpc_binding_copy(source,dest,status) \
  196.                 *(status) = RpcBindingCopy(source,dest)
  197.  
  198. #define rpc_binding_free(binding,status) *(status) = RpcBindingFree(binding)
  199.  
  200. #define rpc_binding_from_string_binding(string_binding,binding,status) \
  201.                 *(status) = RpcBindingFromStringBinding(string_binding,binding)
  202.  
  203. #define rpc_binding_inq_auth_client(binding,privs,princ_name,protect_level, \
  204.                 authn_svc,authz_svc,status) \
  205.                 *(status) = RpcBindingInqAuthClient(binding,privs,princ_name, \
  206.                 protect_level,authn_svc,authz_svc)
  207.  
  208. #define rpc_binding_inq_auth_info(binding,princ_name,protect_level,\
  209.                 authn_svc,auth_identity,authz_svc,status) \
  210.                 *(status) = RpcBindingInqAuthInfo(binding,princ_name, \
  211.                 protect_level,authn_svc,auth_identity,authz_svc)
  212.  
  213. #define rpc_binding_inq_object(binding,object_uuid,status) \
  214.                 *(status) = RpcBindingInqObject(binding,\
  215.                 (UUID __RPC_FAR *)object_uuid)
  216.  
  217. #define rpc_binding_reset(binding,status) *(status) = RpcBindingReset(binding)
  218.  
  219. #define rpc_binding_server_from_client(cbinding,sbinding,status) \
  220.                 *(status) = RpcBindingServerFromClient(cbinding,sbinding)
  221.  
  222. #define rpc_binding_set_auth_info(binding,princ_name,protect_level,\
  223.                 authn_svc,auth_identity,authz_svc,status) \
  224.                 *(status) = RpcBindingSetAuthInfo(binding,princ_name,\
  225.                 protect_level,authn_svc,auth_identity,authz_svc)
  226.  
  227. #define rpc_binding_set_object(binding,object_uuid,status) \
  228.                 *(status) = RpcBindingSetObject(binding,\
  229.                 (UUID __RPC_FAR *)object_uuid)
  230.  
  231. #define rpc_binding_to_string_binding(binding,string_binding,status) \
  232.                 *(status) = RpcBindingToStringBinding(binding,string_binding)
  233.  
  234. #define rpc_binding_vector_free(binding_vector,status) \
  235.                 *(status) = RpcBindingVectorFree(\
  236.                 (RPC_BINDING_VECTOR __RPC_FAR * __RPC_FAR *)binding_vector)
  237.  
  238. #define rpc_ep_register(if_spec,binding_vec,object_uuid_vec,annotation,\
  239.                 status)\
  240.                 *(status) = RpcEpRegister(if_spec,\
  241.                 (RPC_BINDING_VECTOR __RPC_FAR *)binding_vec, \
  242.                 (UUID_VECTOR __RPC_FAR *)object_uuid_vec, annotation)
  243.  
  244. #define rpc_ep_register_no_replace(if_spec,binding_vec,object_uuid_vec,\
  245.                 annotation,status) \
  246.                 *(status) = RpcEpRegisterNoReplace(if_spec,\
  247.                 (RPC_BINDING_VECTOR __RPC_FAR *)binding_vec,\
  248.                 (UUID_VECTOR __RPC_FAR *)object_uuid_vec,annotation)
  249.  
  250. #define rpc_ep_resolve_binding(binding_h,if_spec,status) \
  251.                 *(status) = RpcEpResolveBinding(binding_h,if_spec)
  252.  
  253. #define rpc_ep_unregister(if_spec,binding_vec,object_uuid_vec,status) \
  254.                 *(status) = RpcEpUnregister(if_spec,\
  255.                 (RPC_BINDING_VECTOR __RPC_FAR *)binding_vec,\
  256.                 (UUID_VECTOR __RPC_FAR *)object_uuid_vec)
  257.  
  258. #define rpc_if_id_vector_free(if_id_vector,status) \
  259.                 *(status) = RpcIfIdVectorFree(\
  260.                 (RPC_IF_ID_VECTOR __RPC_FAR * __RPC_FAR *)if_id_vector)
  261.  
  262. #define rpc_if_inq_id(if_spec,if_id,status) \
  263.                 *(status) = RpcIfInqId(if_spec,(RPC_IF_ID __RPC_FAR *)if_id)
  264.  
  265. #define rpc_if_register_auth_info(if_spec,princ_name,protect_level,\
  266.                 authn_svc,auth_identity,authz_svc,status) \
  267.                 *(status) = RpcIfRegisterAuthInfo(if_spec,princ_name,\
  268.                 protect_level,authn_svc,auth_identity,authz_svc)
  269.  
  270. #define rpc_mgmt_ep_elt_inq_begin(ep_binding,inquiry_type,if_id,vers_option,\
  271.                 object_uuid,inquiry_context,status) \
  272.                 *(status) = RpcMgmtEpEltInqBegin(ep_binding,inquiry_type,if_id,\
  273.                 vers_option,object_uuid,inquiry_context)
  274.  
  275. #define rpc_mgmt_ep_elt_inq_done(inquiry_context,status) \
  276.                 *(status) = RpcMgmtEpEltInqDone(inquiry_context)
  277.  
  278. #define rpc_mgmt_ep_elt_inq_next(inquiry_context,if_id,binding,object_uuid,\
  279.                 annotation,status) \
  280.                 *(status) = RpcMgmtEpEltInqNext(inquiry_context,if_id,binding,\
  281.                 object_uuid,annotation)
  282.  
  283. #define rpc_mgmt_ep_unregister(ep_binding,if_id,binding,object_uuid,status) \
  284.                 *(status) = RpcMgmtEpUnregister(ep_binding,if_id,binding,\
  285.                 object_uuid)
  286.  
  287. #define rpc_mgmt_inq_com_timeout(binding,timeout,status) \
  288.                 *(status) = RpcMgmtInqComTimeout(binding,timeout)
  289.  
  290. #define rpc_mgmt_inq_dflt_protect_level(authn_svc,level,status) \
  291.                 *(status) = RpcMgmtInqDefaultProtectLevel(authn_svc,level)
  292.  
  293. #define rpc_mgmt_inq_if_ids(binding,if_id_vector,status) \
  294.                 *(status) = RpcMgmtInqIfIds((bindings),\
  295.                 (RPC_IF_ID_VECTOR __RPC_FAR * __RPC_FAR *)(if_id_vector))
  296.  
  297. #define rpc_mgmt_inq_server_princ_name(binding,authn_svc,princ_name,status) \
  298.                 *(status) = RpcMgmtInqServerPrincName(binding,authn_svc,\
  299.                 princ_name)
  300.  
  301. #define rpc_mgmt_inq_stats(binding,statistics,status) \
  302.                 *(status) = RpcMgmtInqStats(binding,\
  303.                 (RPC_STATS_VECTOR __RPC_FAR * __RPC_FAR *)statistics)
  304.  
  305. #define rpc_mgmt_is_server_listening(binding,status) \
  306.                 ( ((*(status) = RpcMgmtIsServerListening(binding)) == RPC_S_OK) \
  307.                 ? (1) : (*(status) == RPC_S_NOT_LISTENING) \
  308.                 ? (*(status) = RPS_S_OK, 0) : (0) )
  309.  
  310. #define rpc_mgmt_set_authorization_fn(authz_fn,status) \
  311.                 *(status) = RpcMgmtSetAuthorizathionFn(authz_fn)
  312.  
  313. #define rpc_mgmt_set_cancel_timeout(seconds,status) \
  314.                 *(status) = RpcMgmtSetCancelTimeout(seconds)
  315.  
  316. #define rpc_mgmt_set_com_timeout(binding,timeout,status) \
  317.                 *(status) = RpcMgmtSetComTimeout(binding,timeout)
  318.  
  319. #define rpc_mgmt_set_server_stack_size(size,status) \
  320.                 *(status) = RpcMgmtSetServerStackSize(size)
  321.  
  322. #define rpc_mgmt_stats_vector_free(stats,status) \
  323.                 *(status) = RpcMgmtStatsVectorFree(\
  324.                 (RPC_STATS_VECTOR __RPC_FAR * __RPC_FAR *)stats)
  325.  
  326. #define rpc_mgmt_stop_server_listening(binding,status) \
  327.                 *(status) = RpcMgmtStopServerListening(binding)
  328.  
  329. #define rpc_network_inq_protseqs(prots,status) \
  330.                 *(status) = RpcNetworkInqProtseqs(\
  331.                 (RPC_PROTSEQ_VECTOR __RPC_FAR * __RPC_FAR *)prots)
  332.  
  333. #define rpc_network_is_protseq_valid(protseq,status) \
  334.                 *(status) = RpcNetworkIsProtseqValid(protseq)
  335.  
  336. /*
  337. ** Define NSI equivalents
  338. */
  339. #define rpc_ns_binding_export(name_syntax,entry_name,if_spec,\
  340.                 binding_vector, uuid_vector,status) \
  341.                 *(status) = RpcNsBindingExport(name_syntax,entry_name,\
  342.                 if_spec, (RPC_BINDING_VECTOR *)binding_vector,\
  343.                 (UUID_VECTOR __RPC_FAR *)uuid_vector)
  344.  
  345. #define rpc_ns_binding_import_begin(name_syntax,entry_name,if_spec,\
  346.                 object_uuid,import_context,status) \
  347.                 *(status) = RpcNsBindingImportBegin(name_syntax,entry_name,\
  348.                 if_spec,(UUID __RPC_FAR *)object_uuid,import_context)
  349.  
  350. #define rpc_ns_binding_import_done(import_context,status) \
  351.                 *(status) = RpcNsBindingImportDone(import_context)
  352.  
  353. #define rpc_ns_binding_import_next(import_context,binding,status) \
  354.                 *(status) = RpcNsBindingImportNext(import_context,binding)
  355.  
  356. #define rpc_ns_binding_inq_entry_name(binding,name_syntax,entry_name,status)\
  357.                 *(status) = RpcNsBindingInqEntryName(binding,name_syntax,\
  358.                 entry_name)
  359.  
  360. #define rpc_ns_binding_lookup_begin(name_syntax,entry_name,if_spec,\
  361.                 object_uuid,max_count,lookup_context,status) \
  362.                 *(status) = RpcNsBindingLookupBegin(name_syntax,entry_name,\
  363.                 if_spec,(UUID __RPC_FAR *)object_uuid,max_count,lookup_context)
  364.  
  365. #define rpc_ns_binding_lookup_done(lookup_context,status) \
  366.                 *(status) = RpcNsBindingLookupDone(lookup_context)
  367.  
  368. #define rpc_ns_binding_lookup_next(lookup_context,binding_vector,status) \
  369.                 *(status) = RpcNsBindingLookupNext(lookup_context, \
  370.                 (RPC_BINDING_VECTOR __RPC_FAR * __RPC_FAR *)binding_vector)
  371.  
  372. #define rpc_ns_binding_select(binding_vector,binding,status) \
  373.                 *(status) = RpcNsBindingSelect(\
  374.                 (RPC_BINDING_VECTOR __RPC_FAR *)binding_vector,binding)
  375.  
  376. #define rpc_ns_binding_unexport(name_syntax,entry_name,if_spec,\
  377.                 uuid_vector,status) \
  378.                 *(status) = RpcNsBindingUnexport(name_syntax,entry_name,\
  379.                 if_spec, (UUID_VECTOR __RPC_FAR *)uuid_vector)
  380.  
  381. #define rpc_ns_entry_expand_name(name_syntax,entry_name,expanded_name,\
  382.                 status)\
  383.                 *(status) = RpcNsEntryExpandName(name_syntax,entry_name,\
  384.                 expanded_name)
  385.  
  386. #define rpc_ns_entry_object_inq_begin(name_syntax,entry_name,\
  387.                 inquiry_context,status)\
  388.                 *(status) = RpcNsEntryObjectInqBegin(name_syntax,\
  389.                 entry_name,inquiry_context)
  390.  
  391. #define rpc_ns_entry_object_inq_done(inquiry_context,status) \
  392.                 *(status) = RpcNsEntryObjectInqDone(inquiry_context)
  393.  
  394. #define rpc_ns_entry_object_inq_next(inquiry_context,object_uuid,status) \
  395.                 *(status) = RpcNsEntryObjectInqNext(inquiry_context,\
  396.                 (UUID __RPC_FAR *)object_uuid)
  397.  
  398. #define rpc_ns_group_delete(name_syntax,group_name,status) \
  399.                 *(status) = RpcNsGroupDelete(name_syntax,group_name)
  400.  
  401. #define rpc_ns_group_mbr_add(name_syntax,group_name,member_name_syntax,\
  402.                 member_name,status) \
  403.                 *(status) = RpcNsGroupMbrAdd(name_syntax,group_name,\
  404.                 member_name_syntax,member_name)
  405.  
  406. #define rpc_ns_group_mbr_inq_begin(name_syntax,group_name,member_name_syntax,\
  407.                 inquiry_context,status) \
  408.                 *(status) = RpcNsGroupMbrInqBegin(name_syntax,group_name,\
  409.                 member_name_syntax,inquiry_context)
  410.  
  411. #define rpc_ns_group_mbr_inq_done(inquiry_context,status) \
  412.                 *(status) = RpcNsGroupMbrInqDone(inquiry_context)
  413.  
  414. #define rpc_ns_group_mbr_inq_next(inquiry_context,member_name,status) \
  415.                 *(status) = RpcNsGroupMbrInqNext(inquiry_context,member_name)
  416.  
  417. #define rpc_ns_group_mbr_remove(name_syntax,group_name,member_name_syntax,\
  418.                 member_name,status) \
  419.                 *(status) = RpcNsGroupMbrRemove(name_syntax,group_name,\
  420.                 member_name_syntax,member_name)
  421.  
  422. #define rpc_ns_mgmt_binding_unexport(name_syntax,entry_name,if_id,vers_option,\
  423.                 uuid_vector,status) \
  424.                 *(status) = RpcNsMgmtBindingUnexport(name_syntax,entry_name,\
  425.                 (RPC_IF_ID __RPC_FAR *)if_id,vers_option,\
  426.                 (UUID_VECTOR __RPC_FAR *)uuid_vector)
  427.  
  428. #define rpc_ns_mgmt_entry_create(name_syntax,entry_name,status) \
  429.                 *(status) = RpcNsMgmtEntryCreate(name_syntax,entry_name)
  430.  
  431. #define rpc_ns_mgmt_entry_delete(name_syntax,entry_name,status) \
  432.                 *(status) = RpcNsMgmtEntryDelete(name_syntax,entry_name)
  433.  
  434. #define rpc_ns_mgmt_entry_inq_if_ids(name_syntax,entry_name,if_id_vector,\
  435.                 status) \
  436.                 *(status) = RpcNsMgmtEntryInqIfIds(name_syntax,entry_name,\
  437.                 (RPC_IF_ID_VECTOR __RPC_FAR * __RPC_FAR *)if_id_vector)
  438.  
  439. #define rpc_ns_mgmt_handle_set_exp_age(ns_handle,expiration_age,status) \
  440.                 *(status) = RpcNsMgmtHandleSetExpAge(ns_handle,expiration_age)
  441.  
  442. #define rpc_ns_mgmt_inq_exp_age(expiration_age,status) \
  443.                 *(status) = RpcNsMgmtInqExpAge(expiration_age)
  444.  
  445. #define rpc_ns_mgmt_set_exp_age(expiration_age,status) \
  446.                 *(status) = RpcNsMgmtSetExpAge(expiration_age)
  447.  
  448. #define rpc_ns_profile_delete(name_syntax,profile_name,status) \
  449.                 *(status) = RpcNsProfileDelete(name_syntax,profile_name)
  450.  
  451. #define rpc_ns_profile_elt_add(name_syntax,profile_name,if_id,\
  452.                 member_name_syntax,member_name,priority,annotation,status) \
  453.                 *(status) = RpcNsProfileEltAdd(name_syntax,profile_name,\
  454.                 (RPC_IF_ID __RPC_FAR *)if_id,member_name_syntax,member_name,\
  455.                 priority,annotation)
  456.  
  457. #define rpc_ns_profile_elt_inq_begin(name_syntax,profile_name,inquiry_type,\
  458.                 if_id,if_vers_option,member_name_syntax,\
  459.                 member_name,inquiry_context,status) \
  460.                 *(status) = RpcNsProfileEltInqBegin(name_syntax,profile_name,\
  461.                 inquiry_type,(RPC_IF_ID __RPC_FAR *)if_id,if_vers_option,\
  462.                 member_name_syntax,member_name,inquiry_context)
  463.  
  464. #define rpc_ns_profile_elt_inq_done(inquiry_context,status) \
  465.                 *(status) = RpcNsProfileEltInqDone(inquiry_context)
  466.  
  467. #define rpc_ns_profile_elt_inq_next(inquiry_context,if_id,member_name,\
  468.                 priority,annotation,status) \
  469.                 *(status) = RpcNsProfileEltInqNext(inquiry_context,\
  470.                 (RPC_IF_ID __RPC_FAR *)if_id,member_name,priority,annotation)
  471.  
  472. #define rpc_ns_profile_elt_remove(name_syntax,profile_name,if_id,\
  473.                 member_name_syntax,member_name,status) \
  474.                 *(status) = RpcNsProfileEltRemove(name_syntax,profile_name,\
  475.                 (RPC_IF_ID __RPC_FAR *)if_id,member_name_syntax,member_name)
  476.  
  477. #define rpc_object_inq_type(object_uuid,type_uuid,status) \
  478.                 *(status) = RpcObjectInqType((UUID __RPC_FAR *)object_uuid,\
  479.                 (UUID __RPC_FAR *)type_uuid)
  480.  
  481. #define rpc_object_set_inq_fn(inq_fn,status) \
  482.                 *(status) = RpcObjectSetInqFn(inq_fn)
  483.  
  484. #define rpc_object_set_type(object_uuid,type_uuid,status) \
  485.                 *(status) = RpcObjectSetType((UUID __RPC_FAR *)object_uuid,\
  486.                 (UUID __RPC_FAR *)type_uuid)
  487.  
  488. #define rpc_protseq_vector_free(protseq_vector,status) \
  489.                 *(status) = RpcProtseqVectorFree( \
  490.                 (RPC_PROTSEQ_VECTOR __RPC_FAR * __RPC_FAR *)protseq_vector)
  491.  
  492. #define rpc_server_inq_bindings(binding_vector,status) \
  493.                 *(status) = RpcServerInqBindings(\
  494.                 (RPC_BINDING_VECTOR __RPC_FAR * __RPC_FAR *)binding_vector)
  495.  
  496. #define rpc_server_inq_if(if_spec,type_uuid,mgr_epv,status) \
  497.                 *(status) = RpcServerInqIf(if_spec,(UUID __RPC_FAR *)type_uuid,\
  498.                 (RPC_MGR_EPV __RPC_FAR *)mgr_epv)
  499.  
  500. #define rpc_server_listen(max_calls,status) \
  501.                 *(status) = RpcServerListen(rpc_c_listen_min_threads_default,\
  502.                 max_calls,0)
  503.  
  504. #define rpc_server_register_auth_info(princ_name,auth_svc,get_key_func,arg,\
  505.                 status) \
  506.                 *(status) = RpcServerRegisterAuthInfo(princ_name,auth_svc,\
  507.                 get_key_func,arg)
  508.  
  509. #define rpc_server_register_if(if_spec,type_uuid,mgr_epv,status) \
  510.                 *(status) = RpcServerRegisterIf(if_spec,\
  511.                 (UUID __RPC_FAR *)type_uuid,(RPC_MGR_EPV __RPC_FAR *)mgr_epv)
  512.  
  513. #define rpc_server_unregister_if(if_spec,type_uuid,status) \
  514.                 *(status) = RpcServerUnregisterIf(if_spec,(UUID *)type_uuid,0)
  515.  
  516. #define rpc_server_use_all_protseqs(max_call_requests,status) \
  517.                 *(status) = RpcServerUseAllProtseqs(max_call_requests,0)
  518.  
  519. #define rpc_server_use_all_protseqs_if(max_call_requests,if_spec,status) \
  520.                 *(status) = RpcServerUseAllProtseqsIf(max_call_requests,\
  521.                 if_spec,0)
  522.  
  523. #define rpc_server_use_protseq(protseq,max_call_requests,status) \
  524.                 *(status) = RpcServerUseProtseq(protseq,max_call_requests,0)
  525.  
  526. #define rpc_server_use_protseq_ep(protseq,max_call_requests,endpoint,status)\
  527.                 *(status) = RpcServerUseProtseqEp(protseq,max_call_requests,\
  528.                 endpoint,0)
  529.  
  530. #define rpc_server_use_protseq_if(protseq,max_call_requests,if_spec,status) \
  531.                 *(status) = RpcServerUseProtseqIf(protseq,max_call_requests,\
  532.                 if_spec,0)
  533.  
  534. #define rpc_sm_alloce(size,status) *(status) = RpcSmAllocate(size)
  535.  
  536. #define rpc_sm_client_free(ptr,status) *(status) = RpcSmClientFree(ptr)
  537.  
  538. #define rpc_sm_destroy_client_context(context,status) \
  539.                 *(status) = RpcSmDestroyClientContext(context)
  540.  
  541. #define rpc_sm_disable_allocate(status) *(status) = RpcSmDisableAllocate()
  542.  
  543. #define rpc_sm_enable_allocate(status) *(status) = RpcSmEnableAllocate()
  544.  
  545. #define rpc_sm_free(ptr,status) *(status) = RpcSmFree(ptr)
  546.  
  547. #define rpc_sm_get_thread_handle(status) RpcSmGetThreadHandle(status)
  548.  
  549. #define rpc_sm_set_client_alloc_free(alloc,free,status) \
  550.                 *(status) = RpcSmSetClientAllocFree(alloc,free)
  551.  
  552. #define rpc_sm_set_thread_handle(id,status) \
  553.                 *(status) = RpcSmSetThreadHandle(id)
  554.  
  555. #define rpc_sm_swap_client_alloc_free(alloc,free,old_alloc,old_free,status) \
  556.                 *(status) = RpcSmSwapClientAllocFree(alloc,free \
  557.                 old_alloc, old_free)
  558.  
  559. #define rpc_string_binding_compose(object_uuid,protseq,netaddr,endpoint,\
  560.                 options,binding,status) \
  561.                 *(status) = RpcStringBindingCompose(object_uuid,protseq,\
  562.                 netaddr,endpoint,options,binding)
  563.  
  564. #define rpc_string_binding_parse(string_binding,object_uuid,protseq,netaddr,\
  565.                 endpoint,options,status) \
  566.                 *(status) = RpcStringBindingParse(string_binding,\
  567.                 object_uuid,protseq,netaddr,endpoint,options)
  568.  
  569. #define rpc_string_free(string,status) *(status) = RpcStringFree(string)
  570.  
  571. #define uuid_compare(uuid1,uuid2,status) \
  572.                 UuidCompare((UUID __RPC_FAR *)(uuid1),\
  573.                             (UUID __RPC_FAR *)(uuid2),(status))
  574.  
  575. #define uuid_create(uuid,status) \
  576.                 *(status) = UuidCreate((UUID __RPC_FAR *)uuid)
  577.  
  578. #define uuid_create_nil(uuid,status) \
  579.                 *(status) = UuidCreateNil((UUID __RPC_FAR *)uuid)
  580.  
  581. #define uuid_equal(uuid1,uuid2,status) \
  582.                 UuidEqual((UUID __RPC_FAR *)(uuid1), \
  583.                           (UUID __RPC_FAR *)(uuid2), (status))
  584.  
  585. #define uuid_from_string(string,uuid,status) \
  586.                 *(status) = UuidFromString(string,(UUID __RPC_FAR *)uuid)
  587.  
  588. #define uuid_hash(uuid,status) \
  589.                 UuidHash((UUID __RPC_FAR *)(uuid),(status))
  590.  
  591. #define uuid_is_nil(uuid,status) \
  592.                 UuidIsNil((UUID __RPC_FAR *)(uuid), (status))
  593.  
  594. #define uuid_to_string(uuid,string,status)\
  595.                 *(status) = UuidToString((UUID __RPC_FAR *)uuid,string)
  596.  
  597.  
  598. #define true  1
  599. #define false 0
  600.  
  601. /*
  602. ** Define exception handling equivalents
  603. **
  604. */
  605. #if defined (__RPC_WIN16__) || defined (__RPC_DOS__)
  606.  
  607. #define TRY                                       \
  608.     {                                                \
  609.     int _exception_mode_finally;                     \
  610.     int _exception_code;                             \
  611.     ExceptionBuff exception;                         \
  612.     _exception_code = RpcSetException(&exception);   \
  613.     if (!_exception_code)                            \
  614.     {
  615.  
  616. #define CATCH_ALL                                 \
  617.         _exception_mode_finally = false;             \
  618.         RpcLeaveException();                         \
  619.         }                                            \
  620.         else                                         \
  621.         {
  622. /*
  623.  * #define CATCH(X)                               \
  624.  *   }else if ((unsigned long)RpcExceptionCode()==(unsigned long)X) {
  625.  */
  626. #define FINALLY                                   \
  627.         _exception_mode_finally = true;              \
  628.         RpcLeaveException();                         \
  629.         } {
  630. #define ENDTRY                                    \
  631.           }                                               \
  632.         if (_exception_mode_finally && _exception_code)  \
  633.             RpcRaiseException(_exception_code);           \
  634.         }
  635.  
  636. #endif /* WIN16 or DOS */
  637.  
  638.  
  639. #if defined (__RPC_WIN32__)
  640. #define TRY             try {
  641. /*
  642.  * #define CATCH(X)        \
  643.  *                      } except (GetExceptionCode() == X ? \
  644.  *                        EXCEPTION_EXECUTE_HANDLER : \
  645.  *                        EXCEPTION_CONTINUE_SEARCH) {
  646.  */
  647. #define CATCH_ALL       } except (EXCEPTION_EXECUTE_HANDLER) {
  648. #define FINALLY         } finally {
  649. #define ENDTRY          }
  650. #endif /* WIN32 */
  651.  
  652. #define RAISE(v)   RpcRaiseException(v)
  653. #define RERAISE    RpcRaiseException(RpcExceptionCode())
  654. #define THIS_CATCH RpcExceptionCode()
  655.  
  656. /*
  657. ** DCE Status code mappings
  658. */
  659. #ifndef rpc_s_ok
  660. #define rpc_s_ok                        RPC_S_OK
  661. #endif
  662. #ifndef error_status_ok
  663. #define error_status_ok                 RPC_S_OK
  664. #endif
  665. #define ept_s_cant_perform_op           EPT_S_CANT_PERFORM_OP
  666. #define ept_s_invalid_entry             EPT_S_INVALID_ENTRY
  667. #define ept_s_not_registered            EPT_S_NOT_REGISTERED
  668. #define rpc_s_already_listening         RPC_S_ALREADY_LISTENING
  669. #define rpc_s_already_registered        RPC_S_ALREADY_REGISTERED
  670. #define rpc_s_binding_has_no_auth       RPC_S_BINDING_HAS_NO_AUTH
  671. #define rpc_s_binding_imcomplete        RPC_S_BINDING_IMCOMPLETE
  672. #define rpc_s_call_cancelled            RPC_S_CALL_CANCELLED
  673. #define rpc_s_call_failed               RPC_S_CALL_FAILED
  674. #define rpc_s_cant_bind_socket          RPC_S_CANNOT_BIND
  675. #define rpc_s_cant_create_socket        RPC_S_CANT_CREATE_ENDPOINT
  676. #define rpc_s_comm_failure              RPC_S_COMM_FAILURE
  677. #define rpc_s_connect_no_resources      RPC_S_OUT_OF_RESOURCES
  678. #define rpc_s_cthread_create_failed     RPC_S_OUT_OF_THREADS
  679. #define rpc_s_endpoint_not_found        RPC_S_NO_ENDPOINT_FOUND
  680. #define rpc_s_entry_already_exists      RPC_S_ENTRY_ALREADY_EXISTS
  681. #define rpc_s_entry_not_found           RPC_S_ENTRY_NOT_FOUND
  682. #define rpc_s_fault_addr_error          RPC_S_ADDRESS_ERROR
  683. #define rpc_s_fault_fp_div_by_zero      RPC_S_FP_DIV_ZERO
  684. #define rpc_s_fault_fp_overflow         RPC_S_FP_OVERFLOW
  685. #define rpc_s_fault_fp_underflow        RPC_S_FP_UNDERFLOW
  686. #define rpc_s_fault_int_div_by_zero     RPC_S_ZERO_DIVIDE
  687. #define rpc_s_fault_invalid_bound       RPC_S_INVALID_BOUND
  688. #define rpc_s_fault_invalid_tag         RPC_S_INVALID_TAG
  689. #define rpc_s_fault_remote_no_memory    RPC_S_SERVER_OUT_OF_MEMORY
  690. #define rpc_s_fault_unspec              RPC_S_CALL_FAILED
  691. #define rpc_s_incomplete_name           RPC_S_INCOMPLETE_NAME
  692. #define rpc_s_interface_not_found       RPC_S_INTERFACE_NOT_FOUND
  693. #define rpc_s_internal_error            RPC_S_INTERNAL_ERROR
  694. #define rpc_s_inval_net_addr            RPC_S_INVALID_NET_ADDR
  695. #define rpc_s_invalid_arg               RPC_S_INVALID_ARG
  696. #define rpc_s_invalid_binding           RPC_S_INVALID_BINDING
  697. #define rpc_s_invalid_endpoint_format   RPC_S_INVALID_ENDPOINT_FORMAT
  698. #define rpc_s_invalid_naf_id            RPC_S_INVALID_NAF_IF
  699. #define rpc_s_invalid_name_syntax       RPC_S_INVALID_NAME_SYNTAX
  700. #define rpc_s_invalid_rpc_protseq       RPC_S_INVALID_RPC_PROTSEQ
  701. #define rpc_s_invalid_string_binding    RPC_S_INVALID_STRING_BINDING
  702. #define rpc_s_invalid_timeout           RPC_S_INVALID_TIMEOUT
  703. #define rpc_s_invalid_vers_option       RPC_S_INVALID_VERS_OPTION
  704. #define rpc_s_max_calls_too_small       RPC_S_MAX_CALLS_TOO_SMALL
  705. #define rpc_s_mgmt_op_disallowed        RPC_S_ACCESS_DENIED
  706. #define rpc_s_name_service_unavailable  RPC_S_NAME_SERVICE_UNAVAILABLE
  707. #define rpc_s_no_bindings               RPC_S_NO_BINDINGS
  708. #define rpc_s_no_entry_name             RPC_S_NO_ENTRY_NAME
  709. #define rpc_s_no_interfaces             RPC_S_NO_INTERFACES
  710. #define rpc_s_no_interfaces_exported    RPC_S_NO_INTERFACES_EXPORTED
  711. #define rpc_s_no_memory                 RPC_S_OUT_OF_MEMORY
  712. #define rpc_s_no_more_elements          RPC_X_NO_MORE_ENTRIES
  713. #define rpc_s_no_more_bindings          RPC_S_NO_MORE_BINDINGS
  714. #define rpc_s_no_more_members           RPC_S_NO_MORE_MEMBERS
  715. #define rpc_s_no_ns_permission          RPC_S_ACCESS_DENIED
  716. #define rpc_s_no_princ_name             RPC_S_NO_PRINC_NAME
  717. #define rpc_s_no_protseqs               RPC_S_NO_PROTSEQS
  718. #define rpc_s_no_protseqs_registered    RPC_S_NO_PROTSEQS_REGISTERED
  719. #define rpc_s_not_rpc_tower             RPC_S_CANNOT_SUPPORT
  720. #define rpc_s_not_supported             RPC_S_CANNOT_SUPPORT
  721. #define rpc_s_not_authorized            RPC_S_ACCESS_DENIED
  722. #define rpc_s_nothing_to_unexport       RPC_S_NOTHING_TO_UNEXPORT
  723. #define rpc_s_object_not_found          RPC_S_OBJECT_NOT_FOUND
  724. #define rpc_s_protocol_error            RPC_S_PROTOCOL_ERROR
  725. #define rpc_s_protseq_not_supported     RPC_S_PROTSEQ_NOT_SUPPORTED
  726. #define rpc_s_server_too_busy           RPC_S_SERVER_TOO_BUSY
  727. #define rpc_s_string_too_long           RPC_S_STRING_TOO_LONG
  728. #define rpc_s_type_already_registered   RPC_S_TYPE_ALREADY_REGISTERED
  729. #define rpc_s_unknown_authn_service     RPC_S_UNKNOWN_AUTHN_SERVICE
  730. #define rpc_s_unknown_authz_service     RPC_S_UNKNOWN_AUTHZ_SERVICE
  731. #define rpc_s_unknown_if                RPC_S_UNKNOWN_IF
  732. #define rpc_s_unknown_mgr_type          RPC_S_UNKNOWN_MGR_TYPE
  733. #define rpc_s_unknown_reject            RPC_S_CALL_FAILED_DNE
  734. #define rpc_s_unsupported_name_syntax   RPC_S_UNSUPPORTED_NAME_SYNTAX
  735. #define rpc_s_unsupported_type          RPC_S_UNSUPPORTED_TYPE
  736. #define rpc_s_wrong_boot_time           RPC_S_CALL_FAILED_DNE
  737. #define rpc_s_wrong_kind_of_binding     RPC_S_WRONG_KIND_OF_BINDING
  738. #define uuid_s_ok                       RPC_S_OK
  739. #define uuid_s_internal_error           RPC_S_INTERNAL_ERROR
  740. #define uuid_s_invalid_string_uuid      RPC_S_INVALID_STRING_UUID
  741. #define uuid_s_no_address               RPC_S_UUID_NO_ADDRESS
  742.  
  743. /*
  744. ** DCE Exception mappings
  745. */
  746.  
  747. #define rpc_x_comm_failure              RPC_S_COMM_FAILURE
  748. #define rpc_x_connect_no_resources      RPC_S_OUT_OF_RESOURCES
  749. #define rpc_x_entry_not_found           RPC_S_ENTRY_NOT_FOUND
  750. #define rpc_x_incomplete_name           RPC_S_INCOMPLETE_NAME
  751. #define rpc_x_invalid_arg               RPC_S_INVALID_ARG
  752. #define rpc_x_invalid_binding           RPC_S_INVALID_BINDING
  753. #define rpc_x_invalid_bound             RPC_X_INVALID_BOUND
  754. #define rpc_x_invalid_endpoint_format   RPC_S_INVALID_ENDPOINT_FORMAT
  755. #define rpc_x_invalid_naf_id            RPC_S_INVALID_NAF_IF
  756. #define rpc_x_invalid_name_syntax       RPC_S_INVALID_NAME_SYNTAX
  757. #define rpc_x_invalid_rpc_protseq       RPC_S_INVALID_RPC_PROTSEQ
  758. #define rpc_x_invalid_tag               RPC_X_INVALID_TAG
  759. #define rpc_x_invalid_timeout           RPC_S_INVALID_TIMEOUT
  760. #define rpc_x_no_memory                 RPC_X_NO_MEMORY
  761. #define rpc_x_object_not_found          RPC_S_OBJECT_NOT_FOUND
  762. #define rpc_x_protocol_error            RPC_S_PROTOCOL_ERROR
  763. #define rpc_x_protseq_not_supported     RPC_S_PROTSEQ_NOT_SUPPORTED
  764. #define rpc_x_server_too_busy           RPC_S_SERVER_TOO_BUSY
  765. #define rpc_x_ss_char_trans_open_fail   RPC_X_SS_CHAR_TRANS_OPEN_FAIL
  766. #define rpc_x_ss_char_trans_short_file  RPC_X_SS_CHAR_TRANS_SHORT_FILE
  767. #define rpc_x_ss_context_damaged        RPC_X_SS_CONTEXT_DAMAGED
  768. #define rpc_x_ss_context_mismatch       RPC_X_SS_CONTEXT_MISMATCH
  769. #define rpc_x_ss_in_null_context        RPC_X_SS_IN_NULL_CONTEXT
  770. #define rpc_x_string_too_long           RPC_S_STRING_TOO_LONG
  771. #define rpc_x_unknown_if                RPC_S_UNKNOWN_IF
  772. #define rpc_x_unknown_mgr_type          RPC_S_UNKNOWN_MGR_TYPE
  773. #define rpc_x_unsupported_name_syntax   RPC_S_UNSUPPORTED_NAME_SYNTAX
  774. #define rpc_x_unsupported_type          RPC_S_UNSUPPORTED_TYPE
  775. #define rpc_x_wrong_boot_time           RPC_S_CALL_FAILED_DNE
  776. #define rpc_x_wrong_kind_of_binding     RPC_S_WRONG_KIND_OF_BINDING
  777. #define uuid_x_internal_error           RPC_S_INTERNAL_ERROR
  778.  
  779. #ifdef __cplusplus
  780. }
  781. #endif
  782.  
  783. #endif /* DCEPORT_H */
  784.  
  785.