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

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條評論
主站蜘蛛池模板: 中文字幕中文字幕中中文 | 久久免费视频99 | 久久久久久久久久久9精品视频 | 欧美又乱又伦观看 | 欧美日本在线一区二区三区 | 国产欧美国产精品第二区 | www成人免费视频 | 美女视频黄视大全视频免费网址 | 一级黄色毛片 | 精品伊人久久久 | 男女一级毛片免费视频看 | 激情五月色播 | 亚洲精品人成网线在线 | 成人夜色视频在线观看网站 | 国产精品亚洲二区在线 | 天天操夜操 | 爱操视频在线观看 | 免费香蕉成视频成人网 | 欧美日韩无线码在线观看 | 琪琪色播| 一区二区在线不卡 | 精品一区二区三区免费视频 | 亚洲国产综合精品 | 伊人色综合琪琪久久社区 | 国产一区二区三区在线观看免费 | 久久99热这里只有精品国产 | 色狠狠婷婷97 | 四虎网站在线播放 | 久草国产精品视频 | 色综合久久天天综线观看 | 激情影院在线观看 | 久久久受www免费人成 | 国产福利91 | 亚洲第一页在线播放 | 午夜人成 | 99在线观看 | 亚洲天码中文字幕第一页 | 欧美成人免费观看的 | 欧美黄色录像 | 欧美激情免费观看 | 超级碰碰青草久热国产 |