كيفيه وضع علامة أمنه للبرمجة النصية والتهيئة


الملخص


بشكل افتراضي ، لم يتم وضع علامة علي عناصر تحكم MFC ActiveX كامنه للبرمجة النصية وأمنه للتهيئة. يصبح هذا الأمر ظاهرا عند تشغيل عنصر التحكم في Internet Explorer مع تعيين مستوي الأمان إلى متوسط أو مرتفع. في اي من الحالتين التاليتين ، قد يتم عرض التحذيرات بان بيانات عنصر التحكم غير أمنه أو ان عنصر التحكم قد لا يكون أمنا للبرامج النصية التي يجب استخدامها. هناك طريقتان يمكن ان يستخدمها عنصر تحكم لأزاله هذه الأخطاء. يتضمن الأول عنصر التحكم الذي يقوم بتطبيق واجهه إيوبجيكتسافيتي وهو مفيد لعناصر التحكم التي ترغب في تغيير سلوكها وتصبح "أمنه" إذا كانت تعمل في سياق مستعرض الإنترنت. تشمل الثانية تعديل الدالة دلريجيستيرسيرفير لعنصر التحكم لوضع علامة علي عنصر التحكم "الأمان" في السجل. تتناول هذه المقالة الثانية من هذه الطرق. تتم تغطيه الأسلوب الأول ، الذي يطبق واجهه إيوبجيكتسافيتي ، في SDK عميل الإنترنت. يرجى الانتباه إلى انه يجب وضع علامة علي عنصر التحكم كامن إذا كان كذلك ، في الواقع. يرجى مراجعه وثائق SDK لعميل الإنترنت للحصول علي وصف لهذه العملية. راجع "التهيئة الامنه لعناصر تحكم ActiveX والبرمجة النصية" ضمن قسم تطوير المكون.ملاحظة يتم إصدار Acrobat Reader من قِبل شركة Adobe Systems Inc.‎. لا تتناول هذه المقالة كيفيه وضع علامة علي عنصر تحكم أمن للتنزيل. للحصول علي مزيد من المعلومات حول تنزيل التعليمات البرمجية وتوقيع التعليمات البرمجية ، يرجى الرجوع إلى SDK عميل الإنترنت.

مزيد من المعلومات


اتبع هذه الخطوات لوضع علامة علي عنصر تحكم MFC ActiveX باعتباره أمنا للبرمجة النصية وأمنه للتهيئة:
  1. تطبيق وظائف المساعد كرياتيكومبونينتكاتيجوري و ريجيستيركلسيدينكاتيجوري عن طريق أضافه الملفين كاثيلب و كاثيلب التاليين إلى مشروعك.

    Cathelp.h

          #include "comcat.h"      // Helper function to create a component category and associated      // description      HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription);      // Helper function to register a CLSID as belonging to a component      // category      HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid);

    Cathelp.cpp

          #include "comcat.h"      // Helper function to create a component category and associated      // description      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         // Make sure the provided description is not too long.         // Only copy the first 127 characters if it is         int len = wcslen(catDescription);         if (len>127)            len = 127;         wcsncpy(catinfo.szDescription, catDescription, len);         // Make sure the description is null terminated         catinfo.szDescription[len] = '\0';         hr = pcr->RegisterCategories(1, &catinfo);         pcr->Release();         return hr;      }      // Helper function to register a CLSID as belonging to a component      // category      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;      }
  2. عدل دلريجيستيرسيرفير لوضع علامة علي عنصر التحكم كامن. حدد موقع تطبيق دلريجيستيرسيرفير في ملف .cpp في مشروعك. ستحتاج إلى أضافه العديد من الأمور إلى ملف .cpp هذا. تضمين الملف الذي يطبق كرياتيكومبونينتكاتيجوري و ريجيستيركلسيدينكاتيجوري:
          #include "CatHelp.h"
    حدد GUID المقترن بفئات مكون الأمان:
          const CATID CATID_SafeForScripting     =      {0x7dd95801,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};      const CATID CATID_SafeForInitializing  =      {0x7dd95802,0x9882,0x11cf,{0x9f,0xa9,0x00,0xaa,0x00,0x6c,0x42,0xc4}};
    تعرف GUID المقترن بعنصر التحكم الخاص بك. بالنسبة إلى بساطه ، يمكنك اقتراض المعرف الفريد العمومي من الماكرو الIMPLEMENT_OLECREATE_EX في ملف .cpp لعنصر التحكم. اضبط التنسيق قليلا بحيث يبدو كما يلي:
          const GUID CDECL BASED_CODE _ctlid =      { 0x43bd9e45, 0x328f, 0x11d0,              { 0xa6, 0xb9, 0x0, 0xaa, 0x0, 0xa7, 0xf, 0xc2 } };
    لوضع علامة علي عنصر التحكم كامن للبرمجة النصية والتهيئة ، عدل الدالة دلريجيستيرسيرفير كما يلي:
          STDAPI DllRegisterServer(void)      {          AFX_MANAGE_STATE(_afxModuleAddrThis);          if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))              return ResultFromScode(SELFREG_E_TYPELIB);          if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))              return ResultFromScode(SELFREG_E_CLASS);          if (FAILED( CreateComponentCategory(                  CATID_SafeForScripting,                  L"Controls that are safely scriptable") ))                return ResultFromScode(SELFREG_E_CLASS);          if (FAILED( CreateComponentCategory(                  CATID_SafeForInitializing,                  L"Controls safely initializable from persistent data") ))                return ResultFromScode(SELFREG_E_CLASS);          if (FAILED( RegisterCLSIDInCategory(                  _ctlid, CATID_SafeForScripting) ))                return ResultFromScode(SELFREG_E_CLASS);          if (FAILED( RegisterCLSIDInCategory(                  _ctlid, CATID_SafeForInitializing) ))                return ResultFromScode(SELFREG_E_CLASS);          return NOERROR;      }
لن تقوم عاده بتعديل الدالة دلونريجيستيرسيرفير للسببين التاليين:
  • لا تريد أزاله فئة مكون لان عناصر التحكم الأخرى قد تستخدمها.
  • علي الرغم من ان هناك داله أونريجيستيركلسيدينكاتيجوري معرفه ، فان الخيار الافتراضي دلونريجيستيرسيرفير يزيل إدخال عنصر التحكم من السجل بالبالكامل. لذلك ، تؤدي أزاله الفئة من تسجيل عنصر التحكم إلى قليله الاستخدام.
بعد التحويل البرمجي لعنصر التحكم وتسجيله ، يجب العثور علي الإدخالات التالية في السجل:
   HKEY_CLASSES_ROOT\Component   Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}   HKEY_CLASSES_ROOT\Component   Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}   HKEY_CLASSES_ROOT\CLSID\{"your controls GUID"}\Implemented   Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}   HKEY_CLASSES_ROOT\CLSID\{"your controls GUID"}\Implemented   Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4} 

المراجع


SDK لعميل الإنترنت-التهيئة الامنه لتطوير المكونات والبرمجة النصية لعناصر تحكم ActiveX