c++ - 检查 COM 方法调用是本地还是远程

标签 c++ com dcom

我有一个用 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/

相关文章:

c++ - 3D 空间中的体素唯一 ID

javascript - 在 WebAssembly 中将数组作为参数传递时的线程安全性? [Emscripten]

c++ - 在 C++ 中获取大于或等于 double 的最小 float (以及小于或等于的最大 float )

c++ - 我应该使用全局常量 vector 还是每次调用时返回该 vector 的函数

c++ - 如何获取 IShellFolder 的 PIDL

c++ - DCOM CoCreateInstanceEx E_ACCESSDENIED

c++ - DLL注册返回码0x80029c4a

c# - 为什么以及何时应该让我的程序集对 Com Components 可见?

powershell - 通过 PowerShell 的 DCOM 机器级访问和启动权限

c++ - 我们应该用什么来代替 DCOM 通信?