




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、我們編寫一個 ActiveX 控件在 IE 中運行,一般會彈出一個安全提示,如何避免這種情況?下面是我在參考前人的文章后,總結(jié)出“在瀏覽器中執(zhí)行時不彈出警告的 ActiveX 控件”的兩種編寫方法,予以備忘。注意,這里不會彈出警告是說在執(zhí)行時不會彈出,也就是說已經(jīng)安裝了這個 ActiveX 控件。如果要下載安裝這個 ActiveX 控件時不會彈出安全警告,恐怕就得去買數(shù)字證書了。不過即使有數(shù)字證書,還是得用戶同意后才會下載安裝。以下兩種方法在 WINXP-SP2+VC6 通過。方法 1:修改注冊表可能你在看完下面的過程后會發(fā)現(xiàn),程序沒有一個地方對注冊表操作過。其實不然,這里所謂的修改注冊表的方
2、法就是使用組件類型管理器(ComponentCategoriesManager)創(chuàng)建一個正確的入口到系統(tǒng)注冊表。IE 通過檢測注冊表判斷一個控件是否可以安全地初始化和腳本操作。IE 會通過調(diào)用 ICatInformation:IsClassOfCategories 方法確定控件是否支持給出的安全性分組。其中對注冊表的操作都已經(jīng)封裝起來,隱藏在底層了,所以看不到。必須包括兩個頭文件#include#includeconstGUIDCDECLCLSID_SafeItem=0 xD321B11E,0 x8E79,0 x4829,0 xAB,0 x80,0 x9E,0 x59,0 x92,0 x06,
3、0 xAB,0 xB7;/用你的控件類 GUID 替換/注冊組件種類為安全HRESULTAddCategorySafty(CATIDcatid,TCHAR*catDescription)ICatRegister*pcr=NULL;HRESULThr=S_OK;hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void*)&pcr);if(FAILED(hr)returnhr;CATEGORYINFOcatinfo;catinfo.catid=ca
4、tid;catinfo.lcid=0 x0409;/英語語言/最長只拷貝 127 個字符。intlen=lstrlen(catDescription);if(len127)len=127;)lstrcpyn(TCHAR*)(catinfo.szDescription),catDescription,len+1);hr=pcr-RegisterCategories(1,&catinfo);pcr-Release();returnhr;)/移除已經(jīng)注冊為安全的組件種類HRESULTRemoveCategorySafty(CATIDcatid)ICatRegister*pcr=NULL;HR
5、ESULThr=S_OK;hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void*)&pcr);if(FAILED(hr)returnhr;hr=pcr-UnRegisterCategories(1,&catid);pcr-Release();returnhr;)/把你的控件注冊到已經(jīng)注冊為安全的組件種類HRESULTRegisterCLSIDInCategory(REFCLSIDclsid,CATIDcatid)ICatRegist
6、er*pcr=NULL;HRESULThr=S_OK;hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void*)&pcr);if(SUCCEEDED(hr)CATIDrgcatid1;rgcatid0=catid;hr=pcr-RegisterClassImplCategories(clsid,1,rgcatid);)if(pcr!=NULL)pcr-Release();returnhr;/把你的控件從安全組件種類移除HRESULTUnReg
7、isterCLSIDInCategory(REFCLSIDclsid,CATIDcatid)(ICatRegister*pcr=NULL;HRESULThr=S_OK;hr=CoCreateInstance(CLSID_StdComponentCategoriesMgr,NULL,CLSCTX_INPROC_SERVER,IID_ICatRegister,(void*)&pcr);if(SUCCEEDED(hr)(/Unregisterthiscategoryasbeingimplementedbytheclass.CATIDrgcatid1;rgcatid0=catid;hr=pcr
8、-UnRegisterClassImplCategories(clsid,1,rgcatid);if(pcr!=NULL)pcr-Release();returnhr;/使你的控件不彈出警告地執(zhí)行HRESULTMakeActiveXSafty(REFCLSIDclsid)(HRESULThr;hr=AddCategorySafty(CATID_SafeForInitializing,_T(Controlssafelyinitializable!);if(FAILED(hr)returnhr;hr=RegisterCLSIDInCategory(clsid,CATID_SafeForInitia
9、lizing);if(FAILED(hr)returnhr;hr=AddCategorySafty(CATID_SafeForScripting,_T(Controlssafelyscriptable!);if(FAILED(hr)returnhr;hr=RegisterCLSIDInCategory(clsid,CATID_SafeForScripting);returnhr;/去除控件的安全執(zhí)行性HRESULTUnMakeActiveXSafty(REFCLSIDclsid)(HRESULThr;hr=UnRegisterCLSIDInCategory(clsid,CATID_SafeFo
10、rInitializing);if(FAILED(hr)returnhr;hr=UnRegisterCLSIDInCategory(clsid,CATID_SafeForScripting);if(FAILED(hr)returnhr;/下面的代碼是把安全組件種類去掉。去掉的話,如果有其他的控件注冊為這兩個種類/那么其他的控件執(zhí)行時就會彈出警告。需不需要下面的代碼就見仁見智,看實際情況了hr=RemoveCategorySafty(CATID_SafeForInitializing);if(FAILED(hr)returnhr;hr=RemoveCategorySafty(CATID_Safe
11、ForScripting);returnhr;然后在 DllRegisterServer 函數(shù)的“returnNOERROR:前添加如下代碼:HRESULThr=MakeActiveXSafty(CLSID_SafeItem);if(FAILED(hr)returnhr;在 DllUnregisterServer 函數(shù)的AFX_MANAGE_STATE(_afxModuleAddrThis);后添加如下代碼:HRESULThr=UnMakeActiveXSafty(CLSID_SafeItem);if(FAILED(hr)OutputDebugString(_T(去除控件的安全執(zhí)行性時出錯!)
12、;方法 2:實現(xiàn) ObjectSafe 接口我創(chuàng)建了一個 MFCActiveXControlWizard 的工程,工程為 TestAX,它的控件類是 CTestAXCtrl,下面所有的代碼和操作都是在這個類的頭文件和實現(xiàn)文件中進(jìn)行。紅色的部分是為了實現(xiàn)ObjectSafe 接口而增加的代碼。在頭文件中:#if!defined(AFX_TESTAXCTL_H_C2084528_F93E_42D8_A13D_7E38775A0481_INCLUDED_)#defineAFX_TESTAXCTL_H_C2084528_F93E_42D8_A13D_7E38775A0481_INCLUDED_#if_
13、MSC_VER1000#pragmaonce#endif/_MSC_VER1000/#include#include/增加這個頭文件/TestAXCtl.h:DeclarationoftheCTestAXCtrlActiveXControlclass./CTestAXCtrl:SeeTestAXCtl.cppforimplementation.classCTestAXCtrl:publicCOleControlDECLARE_DYNCREATE(CTestAXCtrl)/Constructorpublic:CTestAXCtrl();/增加如下代碼:DECLARE_INTERFACE_MAP(
14、)BEGIN_INTERFACE_PART(MyObjSafe,IObjectSafety)STDMETHOD_(HRESULT,GetInterfaceSafetyOptions)(REFIIDriid,DWORD_RPC_FAR*pdwSupportedOptions,DWORD_RPC_FAR*pdwEnabledOptions);STDMETHOD_(HRESULT,SetInterfaceSafetyOptions)(REFIIDriid,DWORDdwOptionSetMask,DWORDdwEnabledOptions);END_INTERFACE_PART(MyObjSafe)
15、;0000c)o在實現(xiàn)文件中:/TestAXCtl.cpp:ImplementationoftheCTestAXCtrlActiveXControlclass.#includestdafx.h#includetestAX.h#includeTestAXCtl.h#includeTestAXPpg.h#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE 口=_FILE#endifIMPLEMENT_DYNCREATE(CTestAXCtrl,COleControl)/接口映射BEGIN_INTERFACE_MAP(CT
16、estAXCtrl,COleControl)INTERFACE_PART(CTestAXCtrl,IID_IObjectSafety,MyObjSafe)END_INTERFACE_MAP()oooooo(其他代碼省略)/接口的函數(shù)實現(xiàn)ULONGFAREXPORTCTestAXCtrl:XMyObjSafe:AddRef()METHOD_PROLOGUE(CTestAXCtrl,MyObjSafe)returnpThis-ExternalAddRef();ULONGFAREXPORTCTestAXCtrl:XMyObjSafe 二 Release。METHOD_PROLOGUE(CTestAX
17、Ctrl,MyObjSafe)returnpThis-ExternalRelease();HRESULTFAREXPORTCTestAXCtrl:XMyObjSafe:QueryInterface(REFIIDiid,voidFAR*FAR*ppvObj)METHOD_PROLOGUE(CTestAXCtrl,MyObjSafe)return(HRESULT)pThis-ExternalQueryInterface(&iid,ppvObj);/調(diào)用方法與數(shù)據(jù)是否可信任,設(shè)置這兩個標(biāo)志位就可以了constDWORDg_dwSupportedBits=INTERFACESAFE_FOR_U
18、NTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA;constDWORDg_dwNotSupportedBits=g_dwSupportedBits;HRESULTFAREXPORTCTestAXCtrl:XMyObjSafe 二GetInterfaceSafetyOptions(REFIIDriid,DWORD_RPC_FAR*pdwSupportedOptions,DWORD_RPC_FAR*pdwEnabledOptions)METHOD_PROLOGUE(CTestAXCtrl,MyObjSafe)*pdwSupportedOptions=*pdwEnabledOptions=g_dwSupportedBits;returnS_OK;.HRESULTFAREXPORTCTestAXCtrl:XMyObjSafe:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年產(chǎn)品開發(fā)計劃書6
- 耳鼻喉科藥物行業(yè)跨境出海項目商業(yè)計劃書
- 書房墻面書架創(chuàng)意設(shè)計創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 人教版九年級英語自主學(xué)習(xí)推進(jìn)計劃
- 傳動部件高效電池技術(shù)創(chuàng)新創(chuàng)業(yè)項目商業(yè)計劃書
- 雪地雪橇野餐行業(yè)跨境出海項目商業(yè)計劃書
- 藥品及健康產(chǎn)品互聯(lián)網(wǎng)批發(fā)AI智能設(shè)備行業(yè)跨境出海項目商業(yè)計劃書
- 機場綠化養(yǎng)護(hù)人員專項安排計劃
- 西師版四年級數(shù)學(xué)上冊學(xué)期總結(jié)計劃
- 鄉(xiāng)鎮(zhèn)中學(xué)2025年心理健康教育工作計劃
- 網(wǎng)絡(luò)輿情監(jiān)控管理制度
- 2024-2025學(xué)年人教版(2024)初中英語七年級下冊教學(xué)工作總結(jié)(共4套)
- Unit 1 Happy Holiday 第5課時(Section B 2a-3c) 2025-2026學(xué)年人教版英語八年級下冊
- 機器試用擔(dān)保協(xié)議書范本
- 小學(xué)生預(yù)防拐騙教育課件
- 醫(yī)學(xué)影像分析-洞察及研究
- 2025至2030中國無線通訊檢測行業(yè)市場發(fā)展分析及競爭格局與投資機會報告
- 2025年廣東高考物理試卷真題及答案詳解(精校打印版)
- 2025年上海徐匯區(qū)高一(下)信息技術(shù)合格考試題及答案
- 2025至2030年中國鐵電存儲器行業(yè)市場深度評估及投資機會預(yù)測報告
- 國家開放大學(xué)《理工英語1》期末機考題庫
評論
0/150
提交評論