我有一个用 C++ 编写的 COM 服务器,在网络中的某台计算机上运行。客户端可以从其他计算机对其执行远程调用。如何检查 COM 服务器的方法内部给定的调用是本地(来自同一台计算机)还是远程?
最佳答案
如果您不使用基于证书的身份验证服务,我建议您查看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");
关于c++ - 检查 COM 方法调用是本地还是远程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537258/