亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Visual Basic調(diào)試COM+組件遇到的問題

系統(tǒng) 1695 0

Visual Basic 調(diào)試 COM+ 組件遇到的問題

Article last modified on 2002-1-20

--------------------------------------------------------

The information in this article applies to:

? ???? - Microsoft Visual Basic Enterprise Edition for Windows, versions 6.0(SP 5)

--------------------------------------------------------

?

現(xiàn)象

?

Visual Basic 創(chuàng)建的 COM 組件放置到 COM+ 中的某個應(yīng)用下后,在某種情況下調(diào)試時, Visual Basic IDE 會彈出如下對話框:

"System Error &H80004015(-2147467243).運行單一線程時再次調(diào)用ConInitialize."?

重新產(chǎn)生本現(xiàn)象的步驟

?

Visual Basic 版本: 6.0(SP5)

* ????????? Visual Basic 創(chuàng)建一個 Active Dll Class Modules 的名字為 WrongServerID , Project 名字為 Test ;

* ????????? Project 的設(shè)置均按缺省情況;

* ????????? 添加一個方法 Run ,隨便加幾句代碼;

* ????????? Make Test.Dll ;

* ????????? Test.Dll 放置到 COM+ 的一個應(yīng)用中, COM+ 應(yīng)用的標(biāo)識設(shè)置有以下三種情況:

1

標(biāo)識為“交互式用戶 --- 目前已登錄的用戶”!

這時 Visual Basic IDE 可以調(diào)試 Test.Dll ;

2

標(biāo)識為當(dāng)前登錄的用戶名!

Visual Basic IDE 可以調(diào)試 Test.Dll ;

3

標(biāo)識的用戶不是當(dāng)前登錄的用戶名!

這時調(diào)試 Test.Dll ,就會遇到 0x80004015 的錯誤對話框!

?

?

原因

              
                
                  
                    這個錯誤在《
                  
                
                
                  INFO: Translating Automation Errors for VB/VBA (Long)
                
              
              
                Q186063
              
              
                
                  》是這樣定義的:
                
                
                  
                    
                    
                  
                
              
            
              
                
                  -2147467243 (80004015)
                  
                    ??? 
                  
                  The class is configured to run as a security id different from the caller. 
          
                  
                  
                
              
            

?

這個定義顯然要比 VB IDE 報出的語焉不詳?shù)摹斑\行單一線程時嘗試再次調(diào)用 CoInitialize ”更讓人清楚明白!

?

首先,讓我們看一看 VB 是怎么做的:

VB IDE 運行一個 ActiveX Dll 時, IDE 將調(diào)用 CoRegisterClassObject() 。

CoRegisterClassObject() 將會察看要調(diào)用的進程 (COM Server) 的安全標(biāo)識是否匹配這個 Class 注冊的安全標(biāo)識。

對于設(shè)置為運行在“ Interactive User ”標(biāo)識下的 Server CoRegisterClassObject() 將會動態(tài)地確認(rèn)當(dāng)前登錄的交互式用戶的標(biāo)識,以完成這種比較。

但是對于設(shè)置為運行在不同于當(dāng)前登錄用戶的另一個用戶標(biāo)識下的 Server ,

RunningObjectTable::Register(ROTFLAGS_ALLOWANYCLIENT) 將會返回

CO_E_WRONG_SERVER_IDENTITY ,這樣是為了強制安全,阻止了惡意欺騙。 COM 不相信調(diào)用 CoRegisterClassObject() 的代碼,它只相信注冊表 ( 注冊表是一個安全的數(shù)據(jù)庫 ) 。

于是 -2147467243 (80004015)的錯誤就出現(xiàn)了。

?

那么上面所說的 Class 注冊的安全標(biāo)識在哪里查到呢??

我的 Test.WrongServerID CLSID {54BD886F-76CB-49E9-8515-5992B9F9CC50} ,所以在注冊表的

HKEY_CLASSES_ROOT\AppID\{54BD886F-76CB-49E9-8515-5992B9F9CC50} 下:

RunAs ”的值就是。它還可以為“ mydomain\myaccount ”、“ Interactive User ”等值。

?

但是 COM+ 應(yīng)用的標(biāo)識設(shè)置的改變,卻并沒有在這個鍵值上體現(xiàn)出來。所以如果把組件不放入到 COM+ 中,則 Class 注冊的安全標(biāo)識應(yīng)該依賴于這個“ RunAs ”鍵值。那么把組件放入到 COM+ 之后,看哪一個鍵值呢 ?

我猜想這已經(jīng)存入到 COM+ 自己的數(shù)據(jù)庫了,而不再是注冊表。這個有待研究。

?

小結(jié)

當(dāng)一個 client 試圖調(diào)用一個 COM Server ,需要在 client server 之間建立一個經(jīng)過驗證的 COM Session 。這時 COM 需要檢查雙方的安全性。

Server 調(diào)用 CoRegisterClassObject() 注冊它的 Classes 。然后 COM 試圖假冒 client 來調(diào)用該 Server 。

對于我們這種情況, Visual Bsic IDE 用的是當(dāng)前登錄用戶的標(biāo)識,而這個標(biāo)識是通不過 Server 端的驗證的。

?

參考文獻:

1. ?? PRB: System Error Message "&H80004015" Running ActiveX DLL in ID [Q228487]

2. ?? COM Security Frequently Asked Questions [Q158508]

3. ?? FIX: CoRegisterClassObject Fails with CO_E_WRONG_SERVER_IDENTITY [Q170364]

4. ?? INFO: COM Servers Activation and NT Windows Stations [Q169321]

?



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12659


Visual Basic調(diào)試COM+組件遇到的問題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美手机在线 | 天天射天天射 | 26uuu在线视频 | 国产精品99在线观看 | 日本囗交做爰视频欧美 | 久久亚洲美女久久久久 | 亚洲综合网在线 | 高清国产一区 | 久久精品国产免费中文 | 性感毛片 | 四虎影院网 | 久久成人网18网站 | 波多野结衣亚洲一区 | 非常色的视频 | 二区三区视频 | 免费国产一区二区三区 | 久青草中文字幕精品视频 | 国产情精品嫩草影院88av | 国产亚洲精品美女一区二区 | 精品视自拍视频在线观看 | 成人激情在线视频 | 欧美做爰xxxⅹ在线视频hd | 亚洲你我色| 激情宗合网 | 亚洲国产第一区二区香蕉 | 中文字幕一区二区三区四区 | 久草在线资源网 | 国产欧美成人一区二区三区 | 日韩伦理亚洲欧美在线一区 | 国产夜夜操 | 免费高h影片在线观看 | 999热成人精品国产免 | 看全色黄大色黄大片色责看的 | 午夜精品久久久久久久爽 | 亚洲美女视频在线观看 | 欧美精| 亚洲男人的天堂久久香蕉网 | 在线免费观看亚洲视频 | 成人欧美视频在线看免费 | 日本亚州在线播放精品 | 一级毛片成人免费看免费不卡 |