2012-03-02 23 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"); 
相關問題