internal static extern int RpcMgmtEpEltInqNext( SafeRpcInquiryHandle InquiryContext, [Out] RPC_IF_ID IfId, out SafeRpcBindingHandle Binding, [Out] UUID ObjectUuid, out SafeRpcStringHandle Annotation );
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; } }
public CrackedBindingString(string string_binding) { SafeRpcStringHandle objuuid = null; SafeRpcStringHandle protseq = null; SafeRpcStringHandle endpoint = null; SafeRpcStringHandle networkaddr = null; SafeRpcStringHandle networkoptions = null; try { int status = Win32NativeMethods.RpcStringBindingParse(string_binding, out objuuid, out protseq, out networkaddr, out endpoint, out networkoptions); if (status == 0) { ObjUuid = objuuid.ToString(); Protseq = protseq.ToString(); Endpoint = endpoint.ToString(); NetworkAddr = networkaddr.ToString(); NetworkOptions = networkoptions.ToString(); } else { ObjUuid = string.Empty; Protseq = string.Empty; Endpoint = string.Empty; NetworkAddr = string.Empty; NetworkOptions = string.Empty; } } finally { objuuid?.Dispose(); protseq?.Dispose(); endpoint?.Dispose(); networkaddr?.Dispose(); networkoptions?.Dispose(); } }
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 static extern int RpcStringBindingCompose( string ObjUuid, string ProtSeq, string NetworkAddr, string Endpoint, string Options, out SafeRpcStringHandle StringBinding );
internal static extern int RpcStringBindingParse( string StringBinding, out SafeRpcStringHandle ObjUuid, out SafeRpcStringHandle Protseq, out SafeRpcStringHandle NetworkAddr, out SafeRpcStringHandle Endpoint, out SafeRpcStringHandle NetworkOptions );
internal static extern int RpcBindingToStringBinding( IntPtr Binding, out SafeRpcStringHandle StringBinding );
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) { }