青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

++的博客

你看不見我,你看不見我。。
隨筆 - 22, 文章 - 0, 評論 - 2, 引用 - 0
數據加載中……

用ATL編寫標識為腳本安全的ActiveX控件

一半來說,ActiveX控件在WEB開發的時候要避免使用,如果實在無法避免,則需要注意幾點:
1. ActiveX發布后一定要代碼簽名
2. 編寫的時候要標記為腳本安全

下面是針對VS2005 ATL工程向導生成的工程,加入“腳本安全”的特性

修改生成的.h文件
#pragma?once
#include?
"resource.h"???????//?主符號

#include?
"Launch.h"
#include?
<vector>
#include?
<atlctl.h>


//?CEduTaimentConsole

class?ATL_NO_VTABLE?CEduTaimentConsole?:?
????
public?CComObjectRootEx<CComSingleThreadModel>,
????
public?CComCoClass<CEduTaimentConsole,?&CLSID_EduTaimentConsole>,
????
public?IDispatchImpl<IEduTaimentConsole,?&IID_IEduTaimentConsole,?&LIBID_LaunchLib,?/*wMajor?=*/?1,?/*wMinor?=*/?0>,

????
//?加入IObjectSafetyImpl,實現IObjectSafety
????public?IObjectSafetyImpl<CEduTaimentConsole,?INTERFACESAFE_FOR_UNTRUSTED_CALLER?|?INTERFACESAFE_FOR_UNTRUSTED_DATA>?
{
public:
????CEduTaimentConsole()
????
{
????}


DECLARE_REGISTRY_RESOURCEID(IDR_EDUTAIMENTCONSOLE)


BEGIN_COM_MAP(CEduTaimentConsole)
????
//?實現安全接口
????COM_INTERFACE_ENTRY(IObjectSafety)
????
????COM_INTERFACE_ENTRY(IEduTaimentConsole)
????COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

//?加入到CATID_SafeForScripting?和?CATID_SafeForInitializing?COM分組
BEGIN_CATEGORY_MAP(CEduTaimentConsole)
????IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
????IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()


????DECLARE_PROTECT_FINAL_CONSTRUCT()

????HRESULT?FinalConstruct()
????
{
????????
return?S_OK;
????}

????
????
void?FinalRelease()?
????
{
????}


public:

????STDMETHOD(ShowDesktop)(VARIANT_BOOL?vbShow);
????STDMETHOD(EnableCtrlAltDel)(VARIANT_BOOL?vbEnabled);
????STDMETHOD(EnableHotKey)(VARIANT_BOOL?vbEnabled);
????STDMETHOD(ChangeDisplay)(VARIANT_BOOL?vbChange);

????
//?加入這2個方法
????STDMETHOD(GetInterfaceSafetyOptions)(REFIID?riid,DWORD?*pdwSupportedOptions,DWORD?*pdwEnabledOptions);
????STDMETHOD(SetInterfaceSafetyOptions)(REFIID?riid,DWORD?dwOptionSetMask,DWORD?dwEnabledOptions);

????
static?BOOL?IsDesktopVisible(void);

????
static?BOOL?CALLBACK?__EnumWindowsProc(?HWND?hwnd,?LPARAM?lParam);
????
static?void?__ShowApplications(BOOL?bShow);
????
static?void?__ShowDesktop(BOOL?bShow);
????
static?BOOL?__EnableHotKey(BOOL?bEnabled);
????
static?void?__EnableCtrlAltDel(BOOL?bEnabled);
}
;



OBJECT_ENTRY_AUTO(__uuidof(EduTaimentConsole),?CEduTaimentConsole)

修改.cpp文件,加入的2個方法
STDMETHODIMP?CEduTaimentConsole::GetInterfaceSafetyOptions(REFIID?riid,
?????????????????????????????????????DWORD?
*pdwSupportedOptions,
?????????????????????????????????????DWORD?
*pdwEnabledOptions)
{
????ATLTRACE(_T(
"CObjectSafetyImpl::GetInterfaceSafetyOptions\n"));
????
if?(!pdwSupportedOptions?||?!pdwEnabledOptions)
????????
return?E_FAIL;
????LPUNKNOWN?pUnk;
????
if?(_InternalQueryInterface?(riid,?(void**)&pUnk)?==?E_NOINTERFACE)?{
????????
//?Our?object?doesn't?even?support?this?interface.
????????return?E_NOINTERFACE;
????}
else{
????????
//?Cleanup?after?ourselves.
????????pUnk->Release();
????????pUnk?
=?NULL;
????}

????
if?(riid?==?IID_IDispatch)?{
????????
//?IDispatch?is?an?interface?used?for?scripting.?If?your
????????
//?control?supports?other?IDispatch?or?Dual?interfaces,?you
????????
//?may?decide?to?add?them?here?as?well.?Client?wants?to?know
????????
//?if?object?is?safe?for?scripting.?Only?indicate?safe?for
????????
//?scripting?when?the?interface?is?safe.
????????*pdwSupportedOptions?=?INTERFACESAFE_FOR_UNTRUSTED_CALLER;
????????
*pdwEnabledOptions?=?m_dwCurrentSafety?&
????????????INTERFACESAFE_FOR_UNTRUSTED_CALLER;
????????
return?S_OK;
????}
else?if?((riid?==?IID_IPersistStreamInit)?||
????????(riid?
==?IID_IPersistStorage))?{
????????????
//?IID_IPersistStreamInit?and?IID_IPersistStorage?are
????????????
//?interfaces?used?for?Initialization.?If?your?control
????????????
//?supports?other?Persistence?interfaces,?you?may?decide?to
????????????
//?add?them?here?as?well.?Client?wants?to?know?if?object?is
????????????
//?safe?for?initializing.?Only?indicate?safe?for?initializing
????????????
//?when?the?interface?is?safe.
????????????*pdwSupportedOptions?=?INTERFACESAFE_FOR_UNTRUSTED_DATA;
????????????
*pdwEnabledOptions?=?m_dwCurrentSafety?&
????????????????INTERFACESAFE_FOR_UNTRUSTED_DATA;
????????????
return?S_OK;
????}
else{
????????
//?We?are?saying?that?no?other?interfaces?in?this?control?are
????????
//?safe?for?initializing?or?scripting.
????????*pdwSupportedOptions?=?0;
????????
*pdwEnabledOptions?=?0;
????????
return?E_FAIL;
????}

}


STDMETHODIMP?CEduTaimentConsole::SetInterfaceSafetyOptions(REFIID?riid,
?????????????????????????????????????DWORD?dwOptionSetMask,
?????????????????????????????????????DWORD?dwEnabledOptions)
{
????ATLTRACE(_T(
"CObjectSafetyImpl::SetInterfaceSafetyOptions\n"));
????
if?(!dwOptionSetMask?&&?!dwEnabledOptions)?return?E_FAIL;
????LPUNKNOWN?pUnk;
????
if?(_InternalQueryInterface?(riid,?(void**)&pUnk)?==?E_NOINTERFACE)?{
????????
//?Our?object?doesn't?even?support?this?interface.
????????return?E_NOINTERFACE;
????}
else{
????????
//?Cleanup?after?ourselves.
????????pUnk->Release();
????????pUnk?
=?NULL;
????}

????
//?Store?our?current?safety?level?to?return?in
????
//?GetInterfaceSafetyOptions
????m_dwCurrentSafety?|=?dwEnabledOptions?&?dwOptionSetMask;
????
if?((riid?==?IID_IDispatch)?&&
????????(m_dwCurrentSafety?
&?INTERFACESAFE_FOR_UNTRUSTED_CALLER))?{
????????????
//?Client?wants?us?to?disable?any?functionality?that?would
????????????
//?make?the?control?unsafe?for?scripting.?The?same?applies?to
????????????
//?any?other?IDispatch?or?Dual?interfaces?your?control?may
????????????
//?support.?Because?our?control?is?safe?for?scripting?by
????????????
//?default?we?just?return?S_OK.
????????????return?S_OK;
????}
else?if?(((riid?==?IID_IPersistStreamInit)?||
????????(riid?
==?IID_IPersistStorage))?&&
????????(m_dwCurrentSafety?
&?INTERFACESAFE_FOR_UNTRUSTED_DATA))?{
????????????
//?Client?wants?us?to?make?the?control?safe?for?initializing
????????????
//?from?persistent?data.?For?these?interfaces,?this?control
????????????
//?is?safe?so?we?return?S_OK.?For?Any?interfaces?that?are?not
????????????
//?safe,?we?would?return?E_FAIL.
????????????return?S_OK;
????}
else{
????????
//?This?control?doesn't?allow?Initialization?or?Scripting
????????
//?from?any?other?interfaces?so?return?E_FAIL.
????????return?E_FAIL;
????}

}


posted on 2008-06-19 09:57 Jerry.Wang 閱讀(1648) 評論(0)  編輯 收藏 引用 所屬分類: 開發

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成在线播放网站岛国| 免费亚洲电影| 欧美亚洲专区| 99精品欧美一区二区三区 | 亚洲美女精品一区| 国产一区二区三区高清在线观看 | 久久国产日韩欧美| 久久资源在线| 欧美高清在线一区| 亚洲欧洲日韩在线| 亚洲精品自在久久| 亚洲视屏在线播放| 久久精品盗摄| 欧美国产亚洲另类动漫| 欧美午夜片在线观看| 国产精品综合久久久| 韩日欧美一区二区三区| 亚洲激情小视频| 亚洲天堂激情| 久久久女女女女999久久| 亚洲电影网站| 亚洲视频精品在线| 久久久久久久久一区二区| 欧美精品网站| 韩日欧美一区| 亚洲欧美日韩网| 久久综合网色—综合色88| 亚洲精品一区在线观看| 亚洲免费网址| 欧美国产视频日韩| 国产亚洲aⅴaaaaaa毛片| 99综合电影在线视频| 久久精品国产久精国产思思| 欧美激情影音先锋| 欧美在线观看视频| 欧美四级在线| 亚洲免费精彩视频| 久久不射2019中文字幕| 亚洲韩国日本中文字幕| 欧美一级二区| 国产精品v欧美精品v日韩| 亚洲丶国产丶欧美一区二区三区| 亚洲欧美国产77777| 亚洲国产精品专区久久| 性欧美激情精品| 亚洲黄色免费网站| 久久久综合网| 国产亚洲一区精品| 亚洲欧美国产77777| 亚洲区在线播放| 美女脱光内衣内裤视频久久影院| 国产日产高清欧美一区二区三区| 一区二区三区av| 亚洲国产婷婷香蕉久久久久久| 午夜天堂精品久久久久| 欧美午夜一区二区三区免费大片 | 一区二区三区色| 欧美精品aa| 国产精品护士白丝一区av| 亚洲婷婷综合久久一本伊一区| 欧美成人精品激情在线观看| 久久gogo国模啪啪人体图| 欧美午夜一区二区福利视频| 亚洲特级毛片| 中文av一区特黄| 国产精品九九| 欧美亚洲视频在线观看| 在线亚洲自拍| 国产精品日产欧美久久久久| 亚洲综合成人婷婷小说| 中文无字幕一区二区三区| 国产精品久久久久高潮| 久久一区二区三区四区| 91久久久在线| 久久久91精品国产一区二区三区 | 欧美黑人一区二区三区| 亚洲三级国产| 亚洲黄页视频免费观看| 欧美激情视频给我| 亚洲免费观看在线观看| 99精品国产在热久久| 国产精品美女xx| 久久精品国产69国产精品亚洲| 欧美一区二区三区四区视频| 狠狠综合久久av一区二区小说| 久久亚洲一区二区| 欧美freesex8一10精品| 亚洲图片欧洲图片av| 午夜精品久久久久久久99黑人| 亚洲嫩草精品久久| 亚洲国产精品一区二区久| 亚洲人人精品| 国产精品自拍在线| 蜜桃视频一区| 欧美日韩国产综合视频在线观看中文 | 亚洲午夜一区二区三区| 国产免费成人av| 欧美国产日韩一区| 国产精品久久久一区麻豆最新章节| 久久精品国产精品亚洲综合| 鲁大师影院一区二区三区| 在线中文字幕日韩| 久久激情五月激情| 亚洲一区久久| 久久一区二区三区国产精品| 亚洲香蕉网站| 久久精品欧洲| 亚洲午夜在线视频| 久久久www成人免费精品| 夜夜嗨一区二区三区| 欧美亚洲视频一区二区| 一本色道久久99精品综合| 久久久久久久一区二区| 欧美搞黄网站| 国产在线视频不卡二| 亚洲日韩中文字幕在线播放| 国产一区二区av| 一本色道久久综合| 亚洲人成在线影院| 久久久噜久噜久久综合| 欧美一级淫片播放口| 欧美国产精品劲爆| 老司机成人在线视频| 国产欧美精品在线| 亚洲美女尤物影院| 亚洲黄色尤物视频| 久久久亚洲午夜电影| 欧美一区在线看| 欧美视频中文在线看| 亚洲精品欧美日韩| 亚洲精品免费电影| 老司机久久99久久精品播放免费| 欧美一区二区三区男人的天堂| 欧美日韩妖精视频| 亚洲国产欧美一区| 亚洲精品视频一区| 老牛国产精品一区的观看方式| 久久精品国产精品亚洲精品| 国产精品亚洲精品| 午夜精品福利一区二区三区av| 亚洲免费视频网站| 欧美日韩在线播放三区四区| 亚洲日本激情| 亚洲少妇自拍| 国产精品久久久久久模特| 亚洲人成亚洲人成在线观看图片 | 国产精品性做久久久久久| 亚洲一区日本| 欧美一区二区三区啪啪| 国产欧美韩国高清| 小黄鸭精品密入口导航| 久久久av毛片精品| 狠狠色狠狠色综合日日五| 久久精品国产99国产精品| 久久中文久久字幕| 亚洲国产精品va| 欧美巨乳在线| 一区二区三区.www| 欧美一区二区免费视频| 国语自产精品视频在线看8查询8| 欧美一区二区三区免费视| 久久九九国产精品怡红院| 在线观看的日韩av| 欧美精品成人| 亚洲一区在线播放| 久久免费视频网站| 亚洲国产一成人久久精品| 欧美日韩国产首页| 欧美一级久久久久久久大片| 老司机免费视频一区二区| 亚洲乱码日产精品bd| 国产精品福利久久久| 欧美在线看片| 亚洲激情女人| 销魂美女一区二区三区视频在线| 好吊色欧美一区二区三区视频| 免费精品视频| 亚洲欧美综合v| 亚洲第一成人在线| 欧美在线一二三| 亚洲另类在线视频| 久久久精品五月天| 在线亚洲成人| 国产亚洲成av人在线观看导航 | 亚洲国产欧美日韩另类综合| 性高湖久久久久久久久| 亚洲黄色三级| 国产一区二区三区在线观看免费| 欧美成人福利视频| 久久av资源网站| 宅男噜噜噜66一区二区| 欧美激情一区二区三级高清视频| 午夜精品久久久久久久久久久久| 亚洲大胆视频| 国产在线精品一区二区夜色| 欧美三区不卡| 蜜月aⅴ免费一区二区三区| 午夜国产欧美理论在线播放| 亚洲欧洲精品一区二区三区| 美女尤物久久精品|