示例#1
0
        private static RpcEndpoint CreateEndpoint(SafeRpcBindingHandle binding_handle, RPC_IF_ID if_id)
        {
            var endpoints = QueryEndpoints(binding_handle.ToString(), RpcEndpointInquiryFlag.Interface,
                                           if_id, RpcEndPointVersionOption.Exact, null, false).ToArray();
            RpcEndpoint ret = endpoints.Where(ep => ep.BindingString.Equals(binding_handle.ToString(), StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            return(ret ?? new RpcEndpoint(if_id, new UUID(), null, binding_handle, false));
        }
        internal RpcEndpoint(RPC_IF_ID if_id, UUID uuid, SafeRpcStringHandle annotation, SafeRpcBindingHandle binding)
        {
            InterfaceId      = if_id.Uuid;
            InterfaceVersion = new Version(if_id.VersMajor, if_id.VersMinor);
            ObjectUuid       = uuid.Uuid;
            Annotation       = annotation.ToString();
            BindingString    = binding.ToString();
            var cracked = new CrackedBindingString(BindingString);

            Protseq        = cracked.Protseq;
            NetworkAddr    = cracked.NetworkAddr;
            Endpoint       = cracked.Endpoint;
            NetworkOptions = cracked.NetworkOptions;
            if (Protseq.Equals("ncalrpc", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Endpoint))
            {
                EndpointPath = $@"\RPC Control\{Endpoint}";
            }
            else if (Protseq.Equals("ncacn_np", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Endpoint))
            {
                EndpointPath = $@"\??{Endpoint}";
            }
            else
            {
                EndpointPath = string.Empty;
            }
        }
示例#3
0
 internal RpcEndpoint(RPC_IF_ID if_id, UUID uuid, SafeRpcStringHandle annotation, SafeRpcBindingHandle binding, bool registered)
 {
     InterfaceId      = if_id.Uuid;
     InterfaceVersion = new Version(if_id.VersMajor, if_id.VersMinor);
     ObjectUuid       = uuid.Uuid;
     Annotation       = annotation?.ToString() ?? string.Empty;
     BindingString    = binding.ToString();
     ProtocolSequence = binding.Protseq;
     NetworkAddress   = binding.NetworkAddr;
     Endpoint         = binding.Endpoint;
     NetworkOptions   = binding.NetworkOptions;
     if (ProtocolSequence.Equals("ncalrpc", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Endpoint))
     {
         if (Endpoint.Contains(@"\"))
         {
             EndpointPath = Endpoint;
         }
         else
         {
             EndpointPath = $@"\RPC Control\{Endpoint}";
         }
     }
     else if (ProtocolSequence.Equals("ncacn_np", StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(Endpoint))
     {
         EndpointPath = $@"\??{Endpoint}";
     }
     else
     {
         EndpointPath = string.Empty;
     }
     Registered = registered;
 }
 internal RpcEndpoint(RPC_IF_ID if_id, UUID uuid, SafeRpcStringHandle annotation, SafeRpcBindingHandle binding, bool registered)
     : this(if_id.Uuid, new Version(if_id.VersMajor, if_id.VersMinor), annotation?.ToString(), binding.ToString(), registered)
 {
 }