• <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>

            yehao's Blog

            VC++開發的ActiveX如何加入安全機制,避免IE中提示“在此頁上的ActiveX控件和本頁上的其他部分的交互可能不安全,你想允許這種交互嗎?”

            轉自http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html

            在EOS6的項目中,如果采用VC++開發的ActiveX,那么第一次運行的時候,IE中就會提示,“在此頁上的ActiveX控件和本頁上的其他部分的交互可能不安全,你想允許這種交互嗎?”在網上找了很多資料,原理介紹的多,但是真正如何做,介紹的比較少,因此這里把實際的步驟一步一步的記錄下來了,供大家參考。

             

            1.1 去除ActiveX訪問時的安全提示

            ActiveX第一次被訪問時,會出現如下提示框:


             

            這是IE瀏覽器的安全機制造成的,我們可以采用下面的步驟來去除這個提示信息:

            1.1.1 CDemoCtl的頭文件.h中增加對objsave的引用

            #include <objsafe.h> 

            1.1.2 在其protected聲明區增加如下內容
             1//去掉安全警告 BEGIN
             2
             3DECLARE_INTERFACE_MAP()
             4
             5BEGIN_INTERFACE_PART(ObjectSafety, IObjectSafety)
             6
             7STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions);
             8
             9STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);
            10
            11END_INTERFACE_PART(ObjectSafety)
            12
            13//去掉安全警告 END


            1.1.3 
            CDemoCtl的實現類.cppIMPLEMENT_DYNCREATE(CActivexFirstCtrl, COleControl)這一行后增加如下內容:
              1//去掉安全警告 BEGIN
              2BEGIN_INTERFACE_MAP(CAudioCommunicationCtrl, COleControl)
              3
              4    INTERFACE_PART(CAudioCommunicationCtrl, IID_IObjectSafety, ObjectSafety)
              5
              6END_INTERFACE_MAP()
              7
              8// Implementation of IObjectSafety
              9
             10STDMETHODIMP CAudioCommunicationCtrl::XObjectSafety::GetInterfaceSafetyOptions(
             11
             12    REFIID riid,
             13
             14    DWORD __RPC_FAR *pdwSupportedOptions,
             15
             16    DWORD __RPC_FAR *pdwEnabledOptions)
             17
             18{
             19
             20    METHOD_PROLOGUE_EX(CAudioCommunicationCtrl, ObjectSafety)
             21
             22        if (!pdwSupportedOptions || !pdwEnabledOptions)
             23
             24        {
             25
             26            return E_POINTER;
             27
             28        }

             29
             30        *pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
             31
             32        *pdwEnabledOptions = 0;
             33
             34        if (NULL == pThis->GetInterface(&riid))
             35
             36        {
             37
             38            TRACE("Requested interface is not supported.\n");
             39
             40            return E_NOINTERFACE;
             41
             42        }

             43
             44        // What interface is being checked out anyhow?
             45
             46        OLECHAR szGUID[39];
             47
             48        int i = StringFromGUID2(riid, szGUID, 39);
             49
             50        if (riid == IID_IDispatch)
             51
             52        {
             53
             54            // Client wants to know if object is safe for scripting
             55
             56            *pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
             57
             58            return S_OK;
             59
             60        }

             61
             62        else if (riid == IID_IPersistPropertyBag
             63
             64            || riid == IID_IPersistStreamInit
             65
             66            || riid == IID_IPersistStorage
             67
             68            || riid == IID_IPersistMemory)
             69
             70        {
             71
             72            // Those are the persistence interfaces COleControl derived controls support
             73
             74            // as indicated in AFXCTL.H
             75
             76            // Client wants to know if object is safe for initializing from persistent data
             77
             78            *pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
             79
             80            return S_OK;
             81
             82        }

             83
             84        else
             85
             86        {
             87
             88            // Find out what interface this is, and decide what options to enable
             89
             90            TRACE("We didn't account for the safety of this interface, and it's one we support\n");
             91
             92            return E_NOINTERFACE;
             93
             94        }

             95
             96}

             97
             98STDMETHODIMP CAudioCommunicationCtrl::XObjectSafety::SetInterfaceSafetyOptions(
             99
            100    REFIID riid,
            101
            102    DWORD dwOptionSetMask,
            103
            104    DWORD dwEnabledOptions)
            105
            106{
            107
            108    METHOD_PROLOGUE_EX(CAudioCommunicationCtrl, ObjectSafety)
            109
            110        OLECHAR szGUID[39];
            111
            112    // What is this interface anyway?
            113
            114    // We can do a quick lookup in the registry under HKEY_CLASSES_ROOT\Interface
            115
            116    int i = StringFromGUID2(riid, szGUID, 39);
            117
            118    if (0 == dwOptionSetMask && 0 == dwEnabledOptions)
            119
            120    {
            121
            122        // the control certainly supports NO requests through the specified interface
            123
            124        // so it"s safe to return S_OK even if the interface isn"t supported.
            125
            126        return S_OK;
            127
            128    }

            129
            130    // Do we support the specified interface?
            131
            132    if (NULL == pThis->GetInterface(&riid))
            133
            134    {
            135
            136        TRACE1("%s is not support.\n", szGUID);
            137
            138        return E_FAIL;
            139
            140    }

            141
            142    if (riid == IID_IDispatch)
            143
            144    {
            145
            146        TRACE("Client asking if it's safe to call through IDispatch.\n");
            147
            148            TRACE("In other words, is the control safe for scripting?\n");
            149
            150        if (INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions)
            151
            152        {
            153
            154            return S_OK;
            155
            156        }

            157
            158        else
            159
            160        {
            161
            162            return E_FAIL;
            163
            164        }

            165
            166    }

            167
            168    else if (riid == IID_IPersistPropertyBag
            169
            170        || riid == IID_IPersistStreamInit
            171
            172        || riid == IID_IPersistStorage
            173
            174        || riid == IID_IPersistMemory)
            175
            176    {
            177
            178        TRACE("Client asking if it's safe to call through IPersist*.\n");
            179
            180            TRACE("In other words, is the control safe for initializing from persistent data?\n");
            181
            182        if (INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask && INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions)
            183
            184        {
            185
            186            return NOERROR;
            187
            188        }

            189
            190        else
            191
            192        {
            193
            194            return E_FAIL;
            195
            196        }

            197
            198    }

            199
            200    else
            201
            202    {
            203
            204        TRACE1("We didn"t account for the safety of %s, and it"s one we support\n", szGUID);
            205
            206        return E_FAIL;
            207
            208    }

            209
            210}

            211
            212STDMETHODIMP_(ULONG) CAudioCommunicationCtrl::XObjectSafety::AddRef()
            213
            214{
            215
            216    METHOD_PROLOGUE_EX_(CAudioCommunicationCtrl, ObjectSafety)
            217
            218        return (ULONG)pThis->ExternalAddRef();
            219
            220}

            221
            222STDMETHODIMP_(ULONG) CAudioCommunicationCtrl::XObjectSafety::Release()
            223
            224{
            225
            226    METHOD_PROLOGUE_EX_(CAudioCommunicationCtrl, ObjectSafety)
            227
            228        return (ULONG)pThis->ExternalRelease();
            229
            230}

            231
            232STDMETHODIMP CAudioCommunicationCtrl::XObjectSafety::QueryInterface(
            233
            234    REFIID iid, LPVOID* ppvObj)
            235
            236{
            237
            238    METHOD_PROLOGUE_EX_(CAudioCommunicationCtrl, ObjectSafety)
            239
            240        return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
            241
            242}

            243
            244//去掉安全警告 END


            posted on 2011-07-04 11:33 厚積薄發 閱讀(4210) 評論(1)  編輯 收藏 引用 所屬分類: Windows編程

            評論

            # re: VC++開發的ActiveX如何加入安全機制,避免IE中提示“在此頁上的ActiveX控件和本頁上的其他部分的交互可能不安全,你想允許這種交互嗎?” 2012-09-17 22:46 王小亮

            不錯的 。。

            正是 想要 的  回復  更多評論   

            導航

            <2012年9月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            統計

            常用鏈接

            留言簿

            隨筆分類

            文章分類

            文章檔案

            搜索

            最新評論

            久久精品国产91久久综合麻豆自制| 国产欧美久久久精品| 亚洲精品乱码久久久久久按摩| 无码人妻少妇久久中文字幕蜜桃| 99久久99久久精品国产片| 精品人妻伦一二三区久久| 久久久久久免费视频| 色婷婷综合久久久久中文| 99久久免费只有精品国产| 国产午夜久久影院| 国产成人精品久久二区二区| 狠狠人妻久久久久久综合| 99久久精品免费观看国产| 久久久久久狠狠丁香| 精品久久久无码人妻中文字幕| 国产精品天天影视久久综合网| 成人免费网站久久久| 久久国产乱子精品免费女| 狠狠精品久久久无码中文字幕 | 国内精品伊人久久久久影院对白| 欧美综合天天夜夜久久| 久久综合九色综合久99 | 久久伊人精品青青草原日本| 久久精品人人做人人爽电影蜜月 | 亚洲欧美另类日本久久国产真实乱对白| 国产成人久久精品一区二区三区| 亚洲精品国产成人99久久| 久久国产免费| 久久99国产一区二区三区| 久久久久久精品免费看SSS| 国产午夜福利精品久久2021| 亚洲va久久久噜噜噜久久天堂| 99久久国产热无码精品免费| 国产AⅤ精品一区二区三区久久| 69久久精品无码一区二区| 久久青青草原精品国产不卡| 亚洲人成伊人成综合网久久久| 草草久久久无码国产专区| 久久精品中文无码资源站| 久久天天躁狠狠躁夜夜av浪潮 | 国产香蕉久久精品综合网|