检查COM方法调用是本地调用还是远程调用
Check whether COM-method call is local or remote
我有一个用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++ DLL 的内部类,而无需导出类
- 非静态成员失败的线程调用函数
- 线程调用的函数对对象删除是否安全?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 通过 Qt 中的线程调用 Rust 库
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 由并发无序映射查找线程调用的函数是否安全?
- C++协程:调用不带co_await的协程函数
- 如何在C++中从另一个协程调用协程?
- QCoreApplication::processEvents-为什么必须仅从主线程调用它
- 如何从另一个线程调用颤振引擎方法
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 从多个线程调用 std::shuffle
- std::thread::join() 可以从非父线程调用吗?
- 如何使用 Win32 API 从 Excel VBA 中的非"Single-Threaded Apartment"线程调用 InternetGetProxyInfo
- 带参数的线程调用库函数
- 如何在本机C++中跨线程调用(在主线程上回调)
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 优雅断言函数不是从多个线程调用的