黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 2084 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+ 中的某個(gè)應(yīng)用下后,在某種情況下調(diào)試時(shí), Visual Basic IDE 會(huì)彈出如下對(duì)話框:

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

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

?

Visual Basic 版本: 6.0(SP5)

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

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

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

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

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

1

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

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

2

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

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

3

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

這時(shí)調(diào)試 Test.Dll ,就會(huì)遇到 0x80004015 的錯(cuò)誤對(duì)話框!

?

?

原因

              
                
                  
                    這個(gè)錯(cuò)誤在《
                  
                
                
                  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. 
          
                  
                  
                
              
            

?

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

?

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

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

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

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

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

RunningObjectTable::Register(ROTFLAGS_ALLOWANYCLIENT) 將會(huì)返回

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

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

?

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

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

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

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

?

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

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

?

小結(jié)

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

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

對(duì)于我們這種情況, Visual Bsic IDE 用的是當(dāng)前登錄用戶的標(biāo)識(shí),而這個(gè)標(biāo)識(shí)是通不過 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號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論