2012-03-02 77 views
2

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

+0

你可能会更好问你的真正的问题。你面临什么问题,你认为这个问题的答案会解决? – 2012-03-02 17:00:17

回答

2

如果不使用基于证书的认证服务,我建议你看一看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"); 
相关问题