检查 COM 方法调用是本地的还是远程的

Posted

技术标签:

【中文标题】检查 COM 方法调用是本地的还是远程的【英文标题】:Check whether COM-method call is local or remote 【发布时间】:2012-03-02 16:56:49 【问题描述】:

我有一个用 C++ 编写的 COM 服务器,在网络中的某台计算机上运行。客户端可以从其他计算机对其执行远程调用。如果给定的调用是本地(来自同一台计算机)还是远程,如何检查 COM 服务器的方法?

【问题讨论】:

你最好问你真正的问题。你面临什么问题,你认为这个问题的答案会解决? 【参考方案1】:

如果你不使用基于证书的身份验证服务,我建议你看看QueryBlanket

IServerSecurity::QueryBlanket([out] DWORD *pAuthnSvc..., [out] void** pPrivs, ...)

根据实际的身份验证服务,pPrivs 可能表示指向 SEC_WINNT_AUTH_IDENTITY 类型对象的指针。此结构包含客户端的域名。因此,您可以轻松检查它是否与服务器匹配。

要获取服务器安全对象的实例,可以使用以下代码:

HRESULT hr;
CComQIPtr<IServerSecurity> ss;
if(FAILED(hr = ::CoGetCallContext(__uuidof(IServerSecurity), reinterpret_cast<void**>(&ss))))
    throw com_exception(hr, "Unable to retrieve the server security object");

【讨论】:

以上是关于检查 COM 方法调用是本地的还是远程的的主要内容,如果未能解决你的问题,请参考以下文章

新来的美女同事问我如何实现一个RPC框架,我这样回答她......

远程调用方法

每天一点源代码:rpc/dubbo

几张图帮你弄清楚什么是 RPC

RPC核心原理

python调用远程chromedriver.exeselenium抓包方法