2012-07-20 46 views
2

我正面臨一個相當奇怪和非常具體的DCOM相關問題,我希望有人可能遇到過它並解決它。Windows XP和Windows 7之間的DCOM互操作性

我想在Windows 7機器上的EXE服務器上實例化一個COM對象(稱之爲W7)。客戶端駐留在Windows XP機器上(稱之爲WXP)。在WXP上,登錄用戶是域用戶。在W7上,用戶是本地用戶。我(afaik)正確設置了所有DCOM權限,身份驗證和帳戶權限。沒有涉及防火牆。

我得到的只是COM7E服務器進程在W7上啓動,用戶名我期望,但似乎甚至沒有達到它的WinMain函數,並且保持掛起,除非我殺死它,否則永遠不會死亡。我可以附加一個遠程調試器(Visual Studio 2010),它會警告我這個進程可能會死鎖,當我將它分解時,它會停在消息隊列循環(GetMessage/Dispatch)中。

客戶端得到一個(貌似有效的)指針,但是任何嘗試使用它的結果都是E_ACCESSDENIED。

如果上述場景中的任何內容都發生更改,則COM對象的實例化會成功並且對象的行爲正確。

我知道找到答案的機會很小,但任何提示都非常受歡迎。

謝謝。

回答

2

DCOM客戶端和服務器既可以是工作組上的同一本地管理員,也可以是同一個域上的域用戶。

你可以使用這個測試程序來檢查,如果你的兩臺機器的配置是否正確: http://support.microsoft.com/kb/259011 這樣,你確保你的機器的權限和防火牆都正確安裝第一沒有自己的代碼。

+0

感謝您的回覆。我會盡快嘗試併發布結果。 令人困惑的是,相反的情況 - 客戶端在W7上(不在域中),服務器在WXP上(在域中) - 工作正常!它可以與本地WXP憑證(超出域)一起使用,也可以與域憑證一起使用。 – racanu 2012-07-21 06:51:47

+0

我快速瀏覽了這篇文章,並注意到客戶端沒有取得憑證(即用戶名/密碼)。這使我認爲它不提供CoInitializeSecurity中的任何AuthInfo,這意味着它將匿名連接到服務器。我沒有爲我的服務器配置這種情況。爲了實驗的目的,我會這樣做,但我認爲這不會是生產代碼可以接受的解決方案。 – racanu 2012-07-21 07:01:19

+0

我發現這篇文章,我最初錯過了,給了我一些想法,我可能會嘗試:http:// stackoverflow。com/questions/6123301/how-do-impersonation-in-dcom-work – racanu 2012-07-21 07:11:30

1

回答我的問題...

事實證明,在客戶端CoInitializeSecurity沒有它需要畢竟所有憑證......還爲時過早叫,被稱爲憑據之前。

我在實例化的每個組件上使用CoSetProxyBlanket(如此處所述:How does impersonation in DCOM work?)後我發現了這一點。我調用CoSetProxyBlanket的每個組件都正確工作。這引發我去檢查CoInitializeSecurity。

反向連接(從W7到WXP)起作用仍然很奇怪,但這是我需要做的另一項研究。當前的問題可以被關閉。

相關問題