以下方法是DCOM服務器方法。 COM客戶端和服務器在不同的WinXP計算機上運行。 COM客戶端調用RegisterClient
方法來註冊回調接口。問題是QueryInterface
方法失敗,錯誤代碼爲E_ACCESSDENIED
。這個問題的原因是什麼?QueryInterface失敗,E_ACCESSDENIED
STDMETHODIMP CGEMExtension::RegisterClient(IUnknown** ppGEMExtensionEvents, int* nClientId, int* nResult)
{
HRESULT hRes = (*ppGEMExtensionEvents)->QueryInterface(IID_IGEMExtension,(void**)&pUnknown);
return hRes;
}
+1非常好的答案,我會建議使用alt。1,同時讓所有的東西都能正常工作,並且在一切正常運行時使用dcomcnfg進行配置,還可以使用dcom api中包含的安全功能來獲取正確的權限。 – daramarak
我們有兩個DCOM服務器。 QueryInterface方法對DCOM服務器A正常工作。在這種情況下,客戶端對象是使用CoCreateInstance方法創建的。在失敗的情況下,該對象是使用CComObject :: CreateInstance(&pExtensionSink)創建的。這將是原因 –
Maanu
@Maanu我不知道。一切都一樣嗎?我認爲問題出在服務器端,但我可能會錯過一些東西。我不確定這是否適合您的情況,但在調用QueryInterface之前嘗試[在ppGEMExtensionEvents上設置安全毯](http://msdn.microsoft.com/zh-cn/library/ms692692.aspx)。首先在客戶端硬編碼本地管理員的一些用戶名和密碼,如果有效,請通過一種真正靈活的解決方案。 – eran