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

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條評論
主站蜘蛛池模板: 亚洲一区成人 | 国产欧美精品一区aⅴ影院 国产欧美精品一区二区 | 新久草视频 | 欧美精品一区二区三区在线播放 | 国产不卡福利 | 亚洲人xxx日本人18 | 青青青视频精品中文字幕 | 大尺度毛片 | 综合亚洲欧美 | 九九视频在线观看视频23 | jizzjiz熟丰满老妇日本 | 日本一本一道久久香蕉免费 | 亚洲美女亚洲精品久久久久 | 99性视频| 久久精品免费一区二区三区 | 日韩在线看片 | 免费黄a | 四虎影视最新网站在线播放 | 成人欧美精品大91在线 | 欧美亚洲国产成人综合在线 | 欧美在线播放一区二区 | 狠狠噜噜 | 国产大片91精品免费观看不卡 | 国产日韩高清一区二区三区 | 亚洲第一页在线播放 | 国产区成人综合色在线 | 欧美一级亚洲一级 | 草草国产成人免费视频 | 天天干天天操天天透 | 免费性视频 | 在线播放日本爽快片 | 韩国色三级伦不卡高清在线观看 | 老司机精品久久 | 天海翼一区二区三区免费 | 国产一区二区三区久久精品小说 | 天天射日日干 | 国产中文字幕视频在线观看 | 国模极品一区二区三区 | 午夜久久久精品 | 四虎精品在线观看 | 亚洲国产成人久久午夜 |