2
我有一個在網絡中某些計算機上運行的C++編寫的COM服務器。客戶端可以從其他計算機執行遠程調用。如果給定的調用是本地的(來自同一臺計算機)還是遠程的,如何在COM服務器的內部檢查方法?檢查COM方法調用是本地還是遠程
我有一個在網絡中某些計算機上運行的C++編寫的COM服務器。客戶端可以從其他計算機執行遠程調用。如果給定的調用是本地的(來自同一臺計算機)還是遠程的,如何在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");
你可能會更好問你的真正的問題。你面臨什麼問題,你認爲這個問題的答案會解決? – 2012-03-02 17:00:17