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

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            ActiveX 安全問題

            轉(zhuǎn)載自:http://blog.csdn.net/bwmwm/article/details/4536217

            工作中寫了一個(gè)MFC ActiveX,測(cè)試的時(shí)候,發(fā)現(xiàn)IE6和IE8修改了安全設(shè)置后能夠正常運(yùn)行,IE7和別的瀏覽器則始終無法正常運(yùn)行,經(jīng)過多方查找,發(fā)現(xiàn)缺少一些安全信息注冊(cè),添加下列代碼后能夠正常運(yùn)行了。

             首先定義三個(gè)函數(shù):

            HRESULT CreateComponentCategory(CATID catid, WCHAR *catDescription)  
            {  
                ICatRegister 
            *pcr = NULL ;  
                HRESULT hr 
            = S_OK ;  
                hr 
            = CoCreateInstance(CLSID_StdComponentCategoriesMgr,   
                    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (
            void**)&pcr);  
                
            if (FAILED(hr))  
                    
            return hr;  
                
            // Make sure the HKCR/Component Categories/{..catid}  
                
            // key is registered.  
                CATEGORYINFO catinfo;  
                catinfo.catid 
            = catid;  
                catinfo.lcid 
            = 0x0409 ; // english  
                size_t len;  
                
            // Make sure the provided description is not too long.  
                
            // Only copy the first 127 characters if it is.  
                
            // The second parameter of StringCchLength is the maximum  
                
            // number of characters that may be read into catDescription.  
                
            // There must be room for a NULL-terminator. The third parameter  
                
            // contains the number of characters excluding the NULL-terminator.  
                hr = StringCchLength(catDescription, STRSAFE_MAX_CCH, &len);  
                
            if (SUCCEEDED(hr))  
                
            {  
                    
            if (len>127)  
                    
            {  
                        len 
            = 127;  
                    }
              
                }
                 
                
            else  
                
            {  
                    
            // TODO: Write an error handler;  
                }
              
                
            // The second parameter of StringCchCopy is 128 because you need   
                
            // room for a NULL-terminator.  
                hr = StringCchCopy(catinfo.szDescription, len + 1, catDescription);  
                
            // Make sure the description is null terminated.  
                catinfo.szDescription[len + 1= '/0';  
                hr 
            = pcr->RegisterCategories(1&catinfo);  
                pcr
            ->Release();  
                
            return hr;  
            }
              

             

            HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
            {
                
            // Register your component categories information.
                ICatRegister *pcr = NULL ;
                HRESULT hr 
            = S_OK ;
                hr 
            = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
                    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (
            void**)&pcr);
                
            if (SUCCEEDED(hr))
                
            {
                    
            // Register this category as being "implemented" by the class.
                    CATID rgcatid[1] ;
                    rgcatid[
            0= catid;
                    hr 
            = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
                }

                
            if (pcr != NULL)
                    pcr
            ->Release();
                
            return hr;
            }

             

            HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
            {
                ICatRegister 
            *pcr = NULL ;
                HRESULT hr 
            = S_OK ;
                hr 
            = CoCreateInstance(CLSID_StdComponentCategoriesMgr, 
                    NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (
            void**)&pcr);
                
            if (SUCCEEDED(hr))
                
            {
                    
            // Unregister this category as being "implemented" by the class.
                    CATID rgcatid[1] ;
                    rgcatid[
            0= catid;
                    hr 
            = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
                }

                
            if (pcr != NULL)
                    pcr
            ->Release();
                
            return hr;
            }

             

            然后在STDAPI DllRegisterServer(void)和STDAPI DllUnregisterServer(void)中添加下列代碼:

            STDAPI DllRegisterServer(void)中:

                HRESULT hr;
                hr 
            = CreateComponentCategory(CATID_SafeForInitializing, 
                    L
            "Controls safely initializable from persistent data!");
                
            if (FAILED(hr))
                    
            return hr;
                hr 
            = RegisterCLSIDInCategory(CLSID_SafeItem, 
                    CATID_SafeForInitializing);
                
            if (FAILED(hr))
                    
            return hr;
                
            // Mark the control as safe for scripting.
                hr = CreateComponentCategory(CATID_SafeForScripting, 
                    L
            "Controls safely  scriptable!");
                
            if (FAILED(hr))
                    
            return hr;
                hr 
            = RegisterCLSIDInCategory(CLSID_SafeItem, 
                    CATID_SafeForScripting);
                
            if (FAILED(hr))
                    
            return hr;

             

            STDAPI DllUnregisterServer(void)中:

                HRESULT hr;
                hr
            =UnRegisterCLSIDInCategory(CLSID_SafeItem, 
                    CATID_SafeForInitializing);
                
            if (FAILED(hr))
                    
            return hr;
                hr
            =UnRegisterCLSIDInCategory(CLSID_SafeItem, 
                    CATID_SafeForScripting);
                
            if (FAILED(hr))
                    
            return hr;

             

            其中CLSID_SafeItem就是就是瀏覽器中使用的clsid。

            posted on 2012-09-04 23:11 楊粼波 閱讀(620) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++

            天堂久久天堂AV色综合| 免费精品99久久国产综合精品 | 囯产精品久久久久久久久蜜桃| 99精品国产综合久久久久五月天| 亚洲色大成网站www久久九| 好久久免费视频高清| 久久久精品久久久久影院| 99国产欧美精品久久久蜜芽| 亚洲国产成人久久精品99| 久久99国产综合精品| 午夜精品久久久久9999高清| 久久青草国产手机看片福利盒子| 香蕉aa三级久久毛片| 9999国产精品欧美久久久久久| 久久伊人五月丁香狠狠色| AA级片免费看视频久久| 91精品国产色综合久久| 亚洲va久久久噜噜噜久久| 色欲综合久久躁天天躁| 狠狠精品久久久无码中文字幕| 无码国内精品久久人妻蜜桃| 色播久久人人爽人人爽人人片aV| 久久福利青草精品资源站| 久久久久久久亚洲Av无码| 亚洲中文久久精品无码| 久久天天躁狠狠躁夜夜2020一| 久久久久人妻一区精品果冻| 久久96国产精品久久久| 精品乱码久久久久久久| 精品熟女少妇a∨免费久久| AV色综合久久天堂AV色综合在| 99精品国产综合久久久久五月天 | 亚洲国产精品一区二区久久hs| 久久经典免费视频| 精品熟女少妇AV免费久久| 久久经典免费视频| 色婷婷综合久久久久中文一区二区| 亚洲精品乱码久久久久久蜜桃不卡 | 久久久久综合中文字幕| 久久影院午夜理论片无码| 久久综合一区二区无码|