1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of Apple Inc. ("Apple") nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 30 * Portions of this software have been released under the following terms: 31 * 32 * (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC. 33 * (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY 34 * (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION 35 * 36 * To anyone who acknowledges that this file is provided "AS IS" 37 * without any express or implied warranty: 38 * permission to use, copy, modify, and distribute this file for any 39 * purpose is hereby granted without fee, provided that the above 40 * copyright notices and this notice appears in all source code copies, 41 * and that none of the names of Open Software Foundation, Inc., Hewlett- 42 * Packard Company or Digital Equipment Corporation be used 43 * in advertising or publicity pertaining to distribution of the software 44 * without specific, written prior permission. Neither Open Software 45 * Foundation, Inc., Hewlett-Packard Company nor Digital 46 * Equipment Corporation makes any representations about the suitability 47 * of this software for any purpose. 48 * 49 * Copyright (c) 2007, Novell, Inc. All rights reserved. 50 * Redistribution and use in source and binary forms, with or without 51 * modification, are permitted provided that the following conditions 52 * are met: 53 * 54 * 1. Redistributions of source code must retain the above copyright 55 * notice, this list of conditions and the following disclaimer. 56 * 2. Redistributions in binary form must reproduce the above copyright 57 * notice, this list of conditions and the following disclaimer in the 58 * documentation and/or other materials provided with the distribution. 59 * 3. Neither the name of Novell Inc. nor the names of its contributors 60 * may be used to endorse or promote products derived from this 61 * this software without specific prior written permission. 62 * 63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 64 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 65 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 66 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY 67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 68 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 69 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 70 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 71 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 72 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 73 * 74 * @APPLE_LICENSE_HEADER_END@ 75 */ 76 77/* ex: set shiftwidth=4 softtabstop=4 expandtab: */ 78#include "compat/mswrappers.h" 79#include "compat/winerror.h" 80#include <stdlib.h> 81#include <errno.h> 82 83#include <config.h> 84 85#if HAVE_WC16STR_H 86#include <wc16str.h> 87#elif HAVE_COREFOUNDATION_CFSTRINGENCODINGCONVERTER_H 88#include "wc16str.h" 89#endif 90 91RPC_STATUS WideChar16ToMultiByte(PWSTR input, idl_char **output); 92RPC_STATUS MultiByteToWideChar16(idl_char *input, PWSTR *output); 93RPC_STATUS RpcCompatReturnLastCode(void); 94extern idl_char *awc16stombs(PWSTR input); 95extern PWSTR ambstowc16s(idl_char *input); 96 97RPC_STATUS WideChar16ToMultiByte(PWSTR input, idl_char **output) 98{ 99 if (input == NULL) 100 { 101 *output = NULL; 102 } 103 else 104 { 105 *output = awc16stombs(input); 106 if(*output == NULL) 107 { 108 if(errno == ENOMEM) 109 return rpc_s_no_memory; 110 return rpc_s_invalid_arg; 111 } 112 } 113 return rpc_s_ok; 114} 115 116RPC_STATUS MultiByteToWideChar16(idl_char *input, PWSTR *output) 117{ 118 *output = ambstowc16s(input); 119 if(*output == NULL) 120 { 121 if(errno == ENOMEM) 122 return rpc_s_no_memory; 123 return rpc_s_invalid_arg; 124 } 125 return rpc_s_ok; 126} 127 128#define CONVERT_INPUTSTR(var) \ 129 idl_char *converted_##var = NULL; \ 130 if(status == rpc_s_ok) \ 131 status = WideChar16ToMultiByte((var), &converted_##var); 132 133#define DECLARE_OUTPUTSTR(var) \ 134 idl_char *temp_##var = NULL; \ 135 *(var) = NULL; 136 137#define CONVERT_OUTPUTSTR(var) \ 138 if(temp_##var != NULL) \ 139 { \ 140 RPC_STATUS unused_status; \ 141 if(status == rpc_s_ok) \ 142 status = MultiByteToWideChar16(temp_##var, (var)); \ 143 rpc_string_free(&temp_##var, &unused_status); \ 144 } 145 146#define OUTPUTSTR(var) &temp_##var 147#define INPUTSTR(var) converted_##var 148 149#define FREE_INPUTSTR(var) \ 150 if(converted_##var != NULL) \ 151 { \ 152 free(converted_##var); \ 153 converted_##var = NULL; \ 154 } 155 156RPC_STATUS RpcCompatExceptionToCode(dcethread_exc *exc) 157{ 158 RPC_STATUS status; 159 if((status = dcethread_exc_getstatus(exc)) == (RPC_STATUS)-1) 160 return RPC_S_INTERNAL_ERROR; 161 return LwMapDCEStatusToWinerror(status); 162} 163 164RPC_STATUS g_lastcode = 0; 165RPC_STATUS RpcCompatReturnLastCode(void) 166{ 167 return g_lastcode; 168} 169 170RpcCompatReturnCodeFuncPtr RpcCompatReturnLater(RPC_STATUS value) 171{ 172 g_lastcode = value; 173 return RpcCompatReturnLastCode; 174} 175 176RPC_STATUS RpcStringBindingComposeA( 177 /* [in] */ UCHAR *string_object_uuid, 178 /* [in] */ UCHAR *string_protseq, 179 /* [in] */ UCHAR *string_netaddr, 180 /* [in] */ UCHAR *string_endpoint, 181 /* [in] */ UCHAR *string_options, 182 /* [out] */ UCHAR **string_binding 183) 184{ 185 RPC_STATUS status; 186 rpc_string_binding_compose((idl_char *)string_object_uuid, (idl_char *)string_protseq, (idl_char *)string_netaddr, (idl_char *)string_endpoint, (idl_char *)string_options, (idl_char **)string_binding, &status); 187 return LwMapDCEStatusToWinerror(status); 188} 189 190RPC_STATUS RpcStringBindingComposeW( 191 /* [in] */ PWSTR string_object_uuid, 192 /* [in] */ PWSTR string_protseq, 193 /* [in] */ PWSTR string_netaddr, 194 /* [in] */ PWSTR string_endpoint, 195 /* [in] */ PWSTR string_options, 196 /* [out] */ PWSTR *string_binding 197) 198{ 199 RPC_STATUS status = rpc_s_ok; 200 CONVERT_INPUTSTR(string_object_uuid); 201 CONVERT_INPUTSTR(string_protseq); 202 CONVERT_INPUTSTR(string_netaddr); 203 CONVERT_INPUTSTR(string_endpoint); 204 CONVERT_INPUTSTR(string_options); 205 DECLARE_OUTPUTSTR(string_binding); 206 207 if(status == rpc_s_ok) 208 { 209 rpc_string_binding_compose(INPUTSTR(string_object_uuid), 210 INPUTSTR(string_protseq), 211 INPUTSTR(string_netaddr), 212 INPUTSTR(string_endpoint), 213 INPUTSTR(string_options), 214 OUTPUTSTR(string_binding), 215 &status); 216 } 217 218 FREE_INPUTSTR(string_object_uuid); 219 FREE_INPUTSTR(string_protseq); 220 FREE_INPUTSTR(string_netaddr); 221 FREE_INPUTSTR(string_endpoint); 222 FREE_INPUTSTR(string_options); 223 CONVERT_OUTPUTSTR(string_binding); 224 225 return LwMapDCEStatusToWinerror(status); 226} 227 228RPC_STATUS RpcBindingFromStringBindingA( 229 /* [in] */ UCHAR *string_binding, 230 /* [out] */ RPC_BINDING_HANDLE *binding_handle 231) 232{ 233 RPC_STATUS status; 234 rpc_binding_from_string_binding((idl_char *)string_binding, binding_handle, &status); 235 return LwMapDCEStatusToWinerror(status); 236} 237 238RPC_STATUS RpcBindingFromStringBindingW( 239 /* [in] */ PWSTR string_binding, 240 /* [out] */ RPC_BINDING_HANDLE *binding_handle 241) 242{ 243 RPC_STATUS status = rpc_s_ok; 244 CONVERT_INPUTSTR(string_binding); 245 246 if(status == rpc_s_ok) 247 { 248 rpc_binding_from_string_binding( 249 INPUTSTR(string_binding), 250 binding_handle, 251 &status); 252 } 253 254 FREE_INPUTSTR(string_binding); 255 256 return LwMapDCEStatusToWinerror(status); 257} 258 259RPC_STATUS RpcBindingSetAuthInfoA( 260 /* [in] */ RPC_BINDING_HANDLE binding_h, 261 /* [in] */ UCHAR* server_princ_name, 262 /* [in] */ DWORD authn_level, 263 /* [in] */ DWORD authn_protocol, 264 /* [in] */ RPC_AUTH_IDENTITY_HANDLE auth_identity, 265 /* [in] */ DWORD authz_protocol 266) 267{ 268 RPC_STATUS status; 269 rpc_binding_set_auth_info( 270 binding_h, 271 (unsigned_char_p_t)server_princ_name, 272 authn_level, 273 authn_protocol, 274 auth_identity, 275 authz_protocol, 276 &status); 277 return LwMapDCEStatusToWinerror(status); 278} 279 280RPC_STATUS RpcBindingSetAuthInfoW( 281 /* [in] */ RPC_BINDING_HANDLE binding_h, 282 /* [in] */ PWSTR server_princ_name, 283 /* [in] */ DWORD authn_level, 284 /* [in] */ DWORD authn_protocol, 285 /* [in] */ RPC_AUTH_IDENTITY_HANDLE auth_identity, 286 /* [in] */ DWORD authz_protocol 287) 288{ 289 RPC_STATUS status = rpc_s_ok; 290 CONVERT_INPUTSTR(server_princ_name); 291 292 if (status == rpc_s_ok) 293 { 294 rpc_binding_set_auth_info( 295 binding_h, 296 INPUTSTR(server_princ_name), 297 authn_level, 298 authn_protocol, 299 auth_identity, 300 authz_protocol, 301 &status); 302 } 303 304 FREE_INPUTSTR(server_princ_name); 305 306 return LwMapDCEStatusToWinerror(status); 307} 308 309RPC_STATUS RpcStringFreeA( 310 /* [in, out] */ PUCHAR *string 311) 312{ 313 RPC_STATUS status = rpc_s_ok; 314 rpc_string_free((idl_char **)string, &status); 315 return LwMapDCEStatusToWinerror(status); 316} 317 318RPC_STATUS RpcStringFreeW( 319 /* [in, out] */ PWSTR *string 320) 321{ 322 //We allocated this string, not dce rpc 323 if(*string != NULL) 324 { 325 free(*string); 326 *string = NULL; 327 } 328 return ERROR_SUCCESS; 329} 330 331RPC_STATUS RpcBindingFree( 332 /* [in, out] */ RPC_BINDING_HANDLE *binding_handle 333) 334{ 335 RPC_STATUS status = rpc_s_ok; 336 rpc_binding_free(binding_handle, &status); 337 return LwMapDCEStatusToWinerror(status); 338} 339 340RPC_STATUS RpcServerUseProtseqEpA( 341 /* [in] */ PUCHAR protseq, 342 /* [in] */ unsigned int max_call_requests, 343 /* [in] */ PUCHAR endpoint, 344 void *security ATTRIBUTE_UNUSED 345) 346{ 347 RPC_STATUS status = rpc_s_ok; 348 rpc_server_use_protseq_ep((idl_char *)protseq, max_call_requests, (idl_char *)endpoint, &status); 349 return LwMapDCEStatusToWinerror(status); 350} 351 352RPC_STATUS RpcServerUseProtseqEpW( 353 /* [in] */ PWSTR protseq, 354 /* [in] */ unsigned int max_call_requests, 355 /* [in] */ PWSTR endpoint, 356 void *security ATTRIBUTE_UNUSED 357) 358{ 359 RPC_STATUS status = rpc_s_ok; 360 CONVERT_INPUTSTR(protseq); 361 CONVERT_INPUTSTR(endpoint); 362 363 if(status == rpc_s_ok) 364 { 365 rpc_server_use_protseq_ep(INPUTSTR(protseq), 366 max_call_requests, 367 INPUTSTR(endpoint), 368 &status); 369 } 370 371 FREE_INPUTSTR(protseq); 372 FREE_INPUTSTR(endpoint); 373 374 return LwMapDCEStatusToWinerror(status); 375} 376 377RPC_STATUS RpcServerRegisterIf( 378 /* [in] */ RPC_IF_HANDLE if_spec, 379 /* [in] */ UUID *mgr_type_uuid, 380 /* [in] */ RPC_MGR_EPV *mgr_epv 381) 382{ 383 RPC_STATUS status = rpc_s_ok; 384 rpc_server_register_if(if_spec, mgr_type_uuid, mgr_epv, &status); 385 return LwMapDCEStatusToWinerror(status); 386} 387 388RPC_STATUS RpcServerListen( 389 unsigned32 minimum_call_threads ATTRIBUTE_UNUSED, 390 /* [in] */ unsigned32 max_calls_exec, 391 unsigned32 dont_wait ATTRIBUTE_UNUSED 392) 393{ 394 RPC_STATUS status = rpc_s_ok; 395 rpc_server_listen(max_calls_exec, &status); 396 return LwMapDCEStatusToWinerror(status); 397} 398 399RPC_STATUS LwMapDCEStatusToWinerror( 400 RPC_STATUS dceStatus 401) 402{ 403 switch(dceStatus) 404 { 405 case rpc_s_ok: 406 return RPC_S_OK; 407 case rpc_s_op_rng_error: 408 return RPC_S_PROCNUM_OUT_OF_RANGE; 409 case rpc_s_not_in_call: 410 return RPC_S_NO_CALL_ACTIVE; 411 case rpc_s_no_port: 412 return RPC_S_OUT_OF_RESOURCES; 413 case rpc_s_invalid_string_binding: 414 return RPC_S_INVALID_STRING_BINDING; 415 case rpc_s_wrong_kind_of_binding: 416 return RPC_S_WRONG_KIND_OF_BINDING; 417 case rpc_s_invalid_binding: 418 return RPC_S_INVALID_BINDING; 419 case rpc_s_protseq_not_supported: 420 return RPC_S_PROTSEQ_NOT_SUPPORTED; 421 case rpc_s_invalid_rpc_protseq: 422 return RPC_S_INVALID_RPC_PROTSEQ; 423 case uuid_s_invalid_string_uuid: 424 return RPC_S_INVALID_STRING_UUID; 425 case rpc_s_invalid_endpoint_format: 426 return RPC_S_INVALID_ENDPOINT_FORMAT; 427 case rpc_s_inval_net_addr: 428 return RPC_S_INVALID_NET_ADDR; 429 case rpc_s_endpoint_not_found: 430 return RPC_S_NO_ENDPOINT_FOUND; 431 case rpc_s_invalid_timeout: 432 return RPC_S_INVALID_TIMEOUT; 433 case rpc_s_object_not_found: 434 return RPC_S_OBJECT_NOT_FOUND; 435 case rpc_s_already_registered: 436 return RPC_S_ALREADY_REGISTERED; 437 case rpc_s_type_already_registered: 438 return RPC_S_TYPE_ALREADY_REGISTERED; 439 case rpc_s_already_listening: 440 return RPC_S_ALREADY_LISTENING; 441 case rpc_s_no_protseqs_registered: 442 return RPC_S_NO_PROTSEQS_REGISTERED; 443 case rpc_s_not_listening: 444 return RPC_S_NOT_LISTENING; 445 case rpc_s_unknown_mgr_type: 446 return RPC_S_UNKNOWN_MGR_TYPE; 447 case rpc_s_unknown_if: 448 return RPC_S_UNKNOWN_IF; 449 case rpc_s_no_bindings: 450 return RPC_S_NO_BINDINGS; 451 case rpc_s_no_protseqs: 452 return RPC_S_NO_PROTSEQS; 453 case rpc_s_no_rem_endpoint: 454 return RPC_S_CANT_CREATE_ENDPOINT; 455 case rpc_s_connect_no_resources: 456 return RPC_S_OUT_OF_RESOURCES; 457 case ept_s_server_unavailable: 458 return RPC_S_SERVER_UNAVAILABLE; 459 case rpc_s_server_too_busy: 460 return RPC_S_SERVER_TOO_BUSY; 461 case rpc_s_invalid_call_opt: 462 return RPC_S_INVALID_NETWORK_OPTIONS; 463 case rpc_s_call_failed: 464 return RPC_S_CALL_FAILED; 465 case rpc_s_call_faulted: 466 return RPC_S_CALL_FAILED_DNE; 467 case rpc_s_protocol_error: 468 return RPC_S_PROTOCOL_ERROR; 469 case rpc_s_tsyntaxes_unsupported: 470 return RPC_S_UNSUPPORTED_TRANS_SYN; 471 case rpc_s_unsupported_type: 472 return RPC_S_UNSUPPORTED_TYPE; 473 case rpc_s_fault_invalid_tag: 474 return RPC_S_INVALID_TAG; 475 case rpc_s_fault_invalid_bound: 476 return RPC_S_INVALID_BOUND; 477 case rpc_s_no_entry_name: 478 return RPC_S_NO_ENTRY_NAME; 479 case rpc_s_invalid_name_syntax: 480 return RPC_S_INVALID_NAME_SYNTAX; 481 case rpc_s_unsupported_name_syntax: 482 return RPC_S_UNSUPPORTED_NAME_SYNTAX; 483 case uuid_s_no_address: 484 return RPC_S_UUID_NO_ADDRESS; 485 case ept_s_cant_access: 486 return RPC_S_DUPLICATE_ENDPOINT; 487 case rpc_s_unsupported_auth_subtype: 488 return RPC_S_UNKNOWN_AUTHN_TYPE; 489 case rpc_s_max_calls_too_small: 490 return RPC_S_MAX_CALLS_TOO_SMALL; 491 case rpc_s_string_too_long: 492 return RPC_S_STRING_TOO_LONG; 493 case rpc_s_binding_has_no_auth: 494 return RPC_S_BINDING_HAS_NO_AUTH; 495 case rpc_s_unknown_authn_service: 496 return RPC_S_UNKNOWN_AUTHN_SERVICE; 497 case rpc_s_authn_authz_mismatch: 498 return RPC_S_UNKNOWN_AUTHZ_SERVICE; 499 case rpc_s_nothing_to_export: 500 return RPC_S_NOTHING_TO_EXPORT; 501 case rpc_s_incomplete_name: 502 return RPC_S_INCOMPLETE_NAME; 503 case rpc_s_invalid_vers_option: 504 return RPC_S_INVALID_VERS_OPTION; 505 case rpc_s_no_more_members: 506 return RPC_S_NO_MORE_MEMBERS; 507 case rpc_s_not_all_objs_unexported: 508 return RPC_S_NOT_ALL_OBJS_UNEXPORTED; 509 case rpc_s_interface_not_found: 510 return RPC_S_INTERFACE_NOT_FOUND; 511 case rpc_s_entry_already_exists: 512 return RPC_S_ENTRY_ALREADY_EXISTS; 513 case rpc_s_entry_not_found: 514 return RPC_S_ENTRY_NOT_FOUND; 515 case rpc_s_name_service_unavailable: 516 return RPC_S_NAME_SERVICE_UNAVAILABLE; 517 case rpc_s_invalid_naf_id: 518 return RPC_S_INVALID_NAF_ID; 519 case rpc_s_not_supported: 520 return RPC_S_CANNOT_SUPPORT; 521 case rpc_s_context_id_not_found: 522 return RPC_S_NO_CONTEXT_AVAILABLE; 523 case uuid_s_internal_error: 524 return RPC_S_INTERNAL_ERROR; 525 case rpc_s_fault_int_div_by_zero: 526 return RPC_S_ZERO_DIVIDE; 527 case rpc_s_cant_bind_socket: 528 return RPC_S_ADDRESS_ERROR; 529 case rpc_s_fault_fp_div_by_zero: 530 return RPC_S_FP_DIV_ZERO; 531 case rpc_s_fault_fp_underflow: 532 return RPC_S_FP_UNDERFLOW; 533 case rpc_s_fault_fp_overflow: 534 return RPC_S_FP_OVERFLOW; 535 case rpc_s_call_queued: 536 return RPC_S_CALL_IN_PROGRESS; 537 case rpc_s_no_more_bindings: 538 return RPC_S_NO_MORE_BINDINGS; 539 case rpc_s_no_interfaces: 540 return RPC_S_NO_INTERFACES; 541 case rpc_s_call_cancelled: 542 return RPC_S_CALL_CANCELLED; 543 case rpc_s_binding_incomplete: 544 return RPC_S_BINDING_INCOMPLETE; 545 case rpc_s_comm_failure: 546 return RPC_S_COMM_FAILURE; 547 case rpc_s_auth_method: 548 return RPC_S_INVALID_AUTH_IDENTITY; 549 case rpc_s_unsupported_authn_level: 550 return RPC_S_UNSUPPORTED_AUTHN_LEVEL; 551 case rpc_s_invalid_credentials: 552 return RPC_S_NO_PRINC_NAME; 553 case rpc_s_unknown_error: 554 return RPC_S_NOT_RPC_ERROR; 555 case rpc_m_cant_create_uuid: 556 return RPC_S_UUID_LOCAL_ONLY; 557 case rpc_s_cancel_timeout: 558 return RPC_S_NOT_CANCELLED; 559 case rpc_s_group_member_not_found: 560 return RPC_S_GROUP_MEMBER_NOT_FOUND; 561 case rpc_s_invalid_object: 562 return RPC_S_INVALID_OBJECT; 563 case rpc_s_wrong_pickle_type: 564 return RPC_S_ENTRY_TYPE_MISMATCH; 565 case rpc_s_no_interfaces_exported: 566 return RPC_S_INTERFACE_NOT_EXPORTED; 567 case rpc_s_profile_not_found: 568 return RPC_S_PROFILE_NOT_ADDED; 569 570 case ept_s_invalid_entry: 571 return EPT_S_INVALID_ENTRY; 572 case ept_s_cant_perform_op: 573 return EPT_S_CANT_PERFORM_OP; 574 case ept_s_not_registered: 575 return EPT_S_NOT_REGISTERED; 576 case ept_s_cant_create: 577 return EPT_S_CANT_CREATE; 578 579 case uuid_s_no_memory: 580 case rpc_s_no_memory: 581 case ept_s_no_memory: 582 case dce_cs_c_cannot_allocate_memory: 583 return ERROR_OUTOFMEMORY; 584 585 case rpc_s_rpcd_comm_failure: 586 case rpc_s_cannot_connect: 587 return ERROR_CONNECTION_REFUSED; 588 case rpc_s_connection_aborted: 589 return ERROR_CONNECTION_ABORTED; 590 case rpc_s_connection_closed: 591 return ERROR_GRACEFUL_DISCONNECT; 592 case rpc_s_connect_timed_out: 593 return WSAETIMEDOUT; 594 case rpc_s_connect_rejected: 595 return ERROR_CONNECTION_REFUSED; 596 case rpc_s_connect_closed_by_rem: 597 return WSAEDISCON; 598 case rpc_s_cant_create_socket: 599 return ERROR_CANNOT_MAKE; 600 601 case rpc_s_invalid_arg: 602 return RPC_S_INVALID_ARG; 603 604 default: 605 return RPC_S_INTERNAL_ERROR; 606 } 607} 608 609#ifdef __cplusplus 610} //extern C 611#endif 612