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

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

系統(tǒng) 1919 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).運(yùn)行單一線程時再次調(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ù)摹斑\(yùn)行單一線程時嘗試再次調(diào)用 CoInitialize ”更讓人清楚明白!

?

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

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

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

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

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

RunningObjectTable::Register(ROTFLAGS_ALLOWANYCLIENT) 將會返回

CO_E_WRONG_SERVER_IDENTITY ,這樣是為了強(qiáng)制安全,阻止了惡意欺騙。 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)過驗(yàn)證的 COM Session 。這時 COM 需要檢查雙方的安全性。

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

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

?

參考文獻(xiàn):

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元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 最近中文字幕无免费视频 | 97影院九七理论片男女高清 | 亚洲加勒比久久88色综合1 | 欧美日韩一二三区免费视频观看 | 久久永久影院免费 | 亚洲 在线播放 | 欧美α片无限看在线观看免费 | 日本一级特黄aa毛片免费观看 | 日本免费不卡视频一区二区三区 | 97久久影院 | 91手机视频在线 | 国产精品网址你懂的 | 国产精品99久久久久久人 | 久久三级视频 | 91在线 | 亚洲| 免费看曰批女人爽的视频网址 | 亚洲国产精品热久久 | 国产精品视频一区国模私拍 | 日本午夜免费理论片 | 亚洲免费视频一区 | 精品国产免费一区二区 | 久久网页 | 中文字幕精品一区二区精品 | 奇米影视中文字幕 | 自拍亚洲国产 | 国产在线观看一区二区三区四区 | 日日日影院 | 国产精品不卡在线 | 九九热线有精品视频99 | 久久这里 | a久久| 免费一级毛片在线播放不收费 | jiucao视频在线观看 | 中文字幕亚洲色图 | 久久入 | 国产欧美日韩精品综合 | 亚洲一区小说区中文字幕 | 99最新网址 | 丁香狠狠色婷婷久久综合 | 激情影院a | 成人亚欧网站在线观看 |