Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Protokol işleyicisi yüklemek, DLL'leri Program Files dizininde uygun bir konuma kopyalamayı ve ardından protokol işleyicisini kayıt defteri aracılığıyla kaydetmeyi içerir. Yükleme uygulaması, Kabuk veri kaynağı için varsayılan gezinme kapsamını tanımlamak üzere bir arama kökü ve kapsam kuralları da ekleyebilir.
Bu konu aşağıdaki gibi düzenlenmiştir:
- URL'ler hakkında
- Protokol İşleyicisi Arabirimlerini Uygulama
- Kapsayıcılar için Filtre İşleyicilerini Gerçekleştirme
- Protokol İşleyicisini Yükleme ve Kaydetme
- Öğelerinizin Dizine Alınmasını sağlama
- İlgili konular
URL'ler hakkında
Windows Search, Kabuk veri kaynağınızın hiyerarşisindeki öğeleri benzersiz olarak tanımlamak için URL'leri kullanır. Hiyerarşideki ilk düğüm olan URL,arama kökolarak adlandırılır; Windows Search, arama kökünde dizin oluşturma işlemine başlar ve protokol işleyicisinin her URL için alt bağlantıları listelemesini isteyebilir.
Tipik URL yapısı şöyledir:
<protocol>:// [{user SID}/] <localhost>/<path>/[<ItemID>]
URL söz dizimi aşağıdaki tabloda açıklanmıştır.
| Sözdizimi | Açıklama |
|---|---|
| <protokol> | URL için çağrılacak protokol işleyicisini tanımlar. |
| {user SID} | Protokol işleyicisinin çağrıldığı kullanıcı güvenlik bağlamını tanımlar. Kullanıcı güvenlik tanımlayıcısı (SID) tanımlanmazsa, protokol işleyicisi sistem hizmetinin güvenlik bağlamında çağrılır. |
| <yol> | Mağaza hiyerarşisini, her bir eğik çizginin ('/') klasör adları arasında ayraç olarak kullanıldığı şekilde tanımlar. |
| <Öğe Kimliği> | Alt öğeyi (örneğin, dosya adı) tanımlayan benzersiz bir dizeyi temsil eder. |
Windows Search Dizin Oluşturucu, URL'lerden son eğik çizgiyi kırpır. Sonuç olarak, bir dizini veya öğeyi ayırt etmek için son eğik çizginin varlığına güvenemezsiniz. Protokol işleyicinizin bu URL söz dizimini işleyebilmesi gerekir. Shell veri kaynağınızı tanımlamak için seçtiğiniz protokol adının geçerli adlarla çakışmadığından emin olun. Şu adlandırma kuralını öneririz: companyName.scheme.
Daha fazla bilgi için, bir Shell veri kaynağı oluşturma hakkında (bkz. Temel Klasör Nesne Arabirimlerini Uygulama).
Protokol işleyici arabirimlerini uygulama
Protokol işleyicisi oluşturmak için aşağıdaki üç arabirimin uygulanması gerekir:
- ISearchProtocol UrlAccessor nesnelerini yönetmek için.
- IUrlAccessor, Kabuk veri kaynağındaki öğeler için özellikleri kullanıma sunmak ve uygun filtreleri belirlemek amacıyla.
- IFilterözel dosyaları filtrelemek veya hiyerarşik olarak depolanan dosyaları listelemek ve filtrelemek için.
Listelenen üç zorunlu arabirim dışında, diğer arabirimler isteğe bağlıdır ve elinizdeki görev için en uygun olan isteğe bağlı arabirimleri uygulama özgürlüğüne sahipsiniz.
ISearchProtocol ve ISearchProtocol2
SearchProtocol arabirimleri, protokol işleyici urlAccessor nesnelerinizi başlatır ve yönetir. ISearchProtocol2 arabirimi, ISearchProtocolisteğe bağlı bir uzantısıdır ve kullanıcı ve öğe hakkında daha fazla bilgi belirtmek için ek bir yöntem içerir.
Iurlaccessor, iurlaccessor2, iurlaccessor3 ve IUrlAccessor4
IUrlAccessor arabirimleri aşağıdaki tabloda açıklanmıştır.
| Arayüz | Açıklama |
|---|---|
| IUrlAccessor | Belirtilen URL için IUrlAccessor arabirimi, URL'de gösterilen öğenin özelliklerine erişim sağlar. Ayrıca bu özellikleri protokol işleyicisine özgü bir filtreye (dosya adıyla ilişkilendirilmiş filtre dışında bir filtre) bağlayabilir. |
| IUrlAccessor2 (isteğe bağlı) | IUrlAccessor2 arabirimi, öğenin özellikleri ve görüntüleme URL'si için bir kod sayfası elde eden ve URL'deki öğenin türünü (belge veya dizin) belirleyen yöntemlerle IUrlAccessor genişletir. |
| IUrlAccessor3 (isteğe bağlı) | IUrlAccessor3 arabirimi, IUrlAccessor2kullanıcı SID'leri dizisi alan bir yöntemle genişletir ve arama protokolü ana bilgisayarının bu kullanıcıların kimliğine bürünerek öğeyi dizine almasını sağlar. |
| IUrlAccessor4 (isteğe bağlı) | IUrlAccessor4 arabirimi, IUrlAccessor3 arabiriminin işlevselliğini, öğenin içeriğinin dizine alınıp alınmayacağını tanımlayan bir yöntemle genişletir. |
UrlAccessor nesnesi, bir SearchProtocol nesnesi tarafından örneklenir ve başlatılır. IUrlAccessor arabirimleri, aşağıdaki tabloda açıklanan yöntemler aracılığıyla önemli bilgilere erişim sağlar.
| Yöntem | Açıklama |
|---|---|
| IUrlAccessor::GetLastModified | URL'nin en son değiştirildiği saati döndürür. Bu süre, dizin oluşturucunun bu URL'yi son işlediğinden daha yeniyse, filtre işleyicileri (IFilter arabiriminin uygulamaları) bu öğenin değiştirilmiş verilerini ayıklamak için çağrılır. Dizinler için değiştirilen saatler yoksayılır. |
| IUrlAccessor::IsDirectory | URL'nin alt URL'leri içeren bir klasörü temsil edip etmediğini tanımlar. |
| IUrlAccessor::BindToStream | Özel veri deposundaki bir dosyanın verilerini temsil eden bir IStream arabirimine bağlar. |
| IUrlAccessor::BindToFilter | protokol işleyicisine özgü IFilter, öğenin özelliklerini kullanıma sunan bir bağlayandır. |
| IUrlAccessor4::ShouldIndexItemContent | Öğenin içeriğinin dizine alınıp alınmayacağını tanımlar. |
IProtocolHandlerSite
IProtocolHandlerSite arabirimi, yalıtılmış bir işlemde barındırılan bir filtre işleyicisinin örneğini oluşturmak için kullanılır. Belirtilen kalıcı sınıf tanımlayıcısı (CLSID), belge depolama sınıfı veya dosya adı uzantısı için uygun filtre işleyicisi alınır. Konak işleminin IFilter bağlanmasını istemenin faydası, konak işleminin uygun bir filtre işleyicisi bulma sürecini yönetebilmesi ve işleyiciyi çağırmada yer alan güvenliği kontrol edebilmesidir.
Kapsayıcılar için filtre işleyicileri uygulama
Hiyerarşik protokol işleyicisi uyguluyorsanız, alt URL'leri numaralandıran bir kapsayıcı için filtre işleyicisi uygulamanız gerekir. Filtre işleyicisi, IFilter arabiriminin bir uygulamasıdır. Numaralandırma süreci, IFilter arabiriminin IFilter::GetChunk ve IFilter::GetValue yöntemlerini içeren bir döngüdür; her alt URL, özelliğin değeri olarak gösterilir.
IFilter::GetChunk kapsayıcının özelliklerini döndürür. Alt URL'leri listelemek için IFilter::GetChunk aşağıdakilerden birini döndürür:
-
Son değiştirme zamanı olmayan öğenin URL'si. IFilter::GetValue, alt URL'yi içeren bir PROPVARIANT döndürür.
PKEY_Search_UrlToIndexWithModificationTime:
URL ve son değiştirme zamanı. IFilter::GetValue, bir çocuk URL'si ve son değiştirme zamanını içeren bir vektör bulunduran PROPVARIANT'ı döndürür.
PKEY_Search_UrlToIndexWithModificationTime döndürülmesi daha verimlidir çünkü dizin oluşturucu, ISearchProtocol::CreateAccessor ve IUrlAccessor::GetLastModifiedyöntemlerini çağırmadan öğenin dizine alınması gerekip gerekmediğini hemen belirleyebilir.
Aşağıdaki örnek kod, PKEY_Search_UrlToIndexWithModificationTime özelliğinin nasıl döndürüleceği gösterilmektedir.
Önemli
Telif Hakkı (c) Microsoft Corporation. Tüm hakları saklıdır.
// Parameters are assumed to be valid
HRESULT GetPropVariantForUrlAndTime
(PCWSTR pszUrl, const FILETIME &ftLastModified, PROPVARIANT **ppPropValue)
{
*ppPropValue = NULL;
// Allocate the propvariant pointer.
size_t const cbAlloc = sizeof(**ppPropValue);
*ppPropValue = (PROPVARIANT *)CoTaskMemAlloc(cbAlloc));
HRESULT hr = *ppPropValue ? S_OK : E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
PropVariantInit(*ppPropValue); // Zero init the value
// Now allocate enough memory for 2 nested PropVariants.
// PKEY_Search_UrlToIndexWithModificationTime is an array of two PROPVARIANTs.
PROPVARIANT *pVector = (PROPVARIANT *)CoTaskMemAlloc(sizeof(*pVector) * 2);
hr = pVector ? S_OK : E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
// Set the container PROPVARIANT to be a vector of two PROPVARIANTS.
(*ppPropValue)->vt = VT_VARIANT | VT_VECTOR;
(*ppPropValue)->capropvar.cElems = 2;
(*ppPropValue)->capropvar.pElems = pVector;
PWSTR pszUrlAlloc;
hr = SHStrDup(pszUrl, &pszUrlAlloc);
if (SUCCEEDED(hr))
{
// Now fill the array of PROPVARIANTS.
// Put the pointer to the URL into the vector.
(*ppPropValue)->capropvar.pElems[0].vt = VT_LPWSTR;
(*ppPropValue)->capropvar.pElems[0].pwszVal = pszUrlAlloc;
// Put the FILETIME into vector.
(*ppPropValue)->capropvar.pElems[1].vt = VT_FILETIME;
(*ppPropValue)->capropvar.pElems[1].filetime = ftLastModified;
}
else
{
CoTaskMemFree(pVector);
}
}
if (FAILED(hr))
{
CoTaskMemFree(*ppPropValue);
*ppPropValue = NULL;
}
}
return S_OK;
}
Not
IFilterbileşenikapsayıcı, alt URL'ler değişmemiş olsa bile her zaman tüm alt URL'leri numaralandırmalıdır çünkü dizin oluşturucu numaralandırma işlemi aracılığıyla silmeleri algılar. bir PKEY_Search_UrlToIndexWithModificationTime tarih çıkışı verilerin değişmediğini gösteriyorsa, dizin oluşturucu bu URL'nin verilerini güncelleştirmez.
Protokol işleyicisini yükleme ve kaydetme
Protokol işleyicilerinin yüklenmesi, DLL'lerin Program Files dizininde uygun bir konuma kopyalanmasını ve ardından DLL'lerin kaydedilmesini içerir. Protokol işleyicileri, yükleme için kendi kendine kayıt uygulamalıdır. Yükleme uygulaması ayrıca Kabuk veri kaynağı için varsayılan tarama kapsamını tanımlamak amacıyla bir arama kökü ve kapsam kuralları ekleyebilir. Bu konu başlığının sonunda Öğelerinizin Dizinlendiğinden Emin Olmak kısmında bu konu ele alınmaktadır.
Protokol işleyicisini kaydetme yönergeleri
Protokol işleyicisini kaydederken şu yönergeleri izlemeniz gerekir:
- Yükleyici exe veya MSI yükleyicisi kullanmalıdır.
- Sürüm notları sağlanmalıdır.
- Yüklenen her eklenti için Program Ekle/Kaldır girdisi oluşturulmalıdır.
- Yükleyici, geçerli eklentinin anladığı belirli bir dosya türü veya deposu için tüm kayıt defteri ayarlarını devralmalıdır.
- Önceki bir eklentinin üzerine yazılıyorsa yükleyicinin kullanıcıya bildirmesi gerekir.
- Daha yeni bir eklenti önceki eklentinin üzerine yazdıysa, önceki eklentinin işlevselliğini geri yükleme ve bu dosya türü için yeniden varsayılan eklenti yapma özelliği olmalıdır.
- Yükleyici, Gezinme Kapsamı Yöneticisi'ni (CSM) kullanarak bir arama kökü ve kapsam kuralları ekleyerek dizin oluşturucu için varsayılan gezinme kapsamını tanımlamalıdır.
Protokol işleyicisini kaydetme
Protokol işleyici bileşenini kaydetmek için kayıt defterinde on dört girdi oluşturmanız gerekir; burada:
- Ver_Ind_ProgID, protokol işleyicisi uygulamasının sürümden bağımsız ProgID değeridir.
- Ver_Dep_ProgID, protokol işleyicisi uygulamasının sürüme bağımlı ProgID'dir.
- CLSID_1, protokol işleyicisi uygulamasının CLSID değeridir.
Protokol işleyicisini kaydetmek için:
Sürümden bağımsız ProgID'yi aşağıdaki anahtarlar ve değerlerle kaydedin:
HKEY_CLASSES_ROOT <Ver_Ind_ProgID> (Default) = <Protocol Handler Class Description>HKEY_CLASSES_ROOT <Ver_Ind_ProgID> CLSID (Default) = {CLSID_1}HKEY_CLASSES_ROOT <Ver_Ind_ProgID> CurVer (Default) = <Ver_Dep_ProgID>Sürüme bağımlı ProgID'yi aşağıdaki anahtarlar ve değerlerle kaydedin:
HKEY_CLASSES_ROOT <Ver_Dep_ProgID> (Default) = <Protocol Handler Class Description>HKEY_CLASSES_ROOT <Ver_Dep_ProgID> CLSID (Default) = {CLSID_1}Protokol işleyicisinin CLSID'sini aşağıdaki anahtarlar ve değerlerle kaydedin:
HKEY_CLASSES_ROOT {CLSID_1} (Default) = <Protocol Handler Class Description>HKEY_CLASSES_ROOT {CLSID_1} {InprocServer32} (Default) = <DLL Install Path> Threading Model = BothHKEY_CLASSES_ROOT {CLSID_1} <ProgID> (Default) = <Ver_Dep_ProgID>HKEY_CLASSES_ROOT {CLSID_1} <ShellFolder> Attributes = dword:a0180000HKEY_CLASSES_ROOT {CLSID_1} TypeLib (Default) = {LIBID of PH Component}HKEY_CLASSES_ROOT {CLSID_1} VersionIndependentProgID (Default) = <Ver_Ind_ProgID>Protokol işleyicisini Windows Search'e kaydedin. Aşağıdaki örnekte, <Protokol Adı>, dosya, mapi ve benzeri gibi protokole verilen isimdir:
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows Search ProtocolHandlers <Protocol Name> = <Ver_Dep_ProgID>HKEY_CURRENT_USER SOFTWARE Microsoft Windows Search ProtocolHandlers <Protocol Name> = <Ver_Dep_ProgID>Windows Vista'nın öncesinde:
HKEY_CURRENT_USER SOFTWARE Microsoft Windows Desktop Search DS Index ProtocolHandlers <Protocol Name> HasRequirements = dword:00000000 HasStartPage = dword:00000000
Protokol işleyicisinin dosya türü işleyicisini kaydetme
Protokol işleyicisinin dosya türü işleyicisini (Kabuk uzantısı olarak da bilinir) kaydetmek için kayıt defterinde iki giriş yapmanız gerekir.
-
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer Desktop NameSpace {CLSID of PH Implementation} (Default) = <Shell Implementation Description> -
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer Shell Extensions Approved {CLSID of PH Implementation} = <Shell Implementation Description>
Öğelerinizin dizine alınmasını sağlama
Protokol işleyicinizi uyguladıktan sonra, protokol işleyicinizin dizine eklenecek Windows Kabuk öğelerini belirlemeniz gerekir. Yeniden dizin oluşturmayı başlatmak için Katalog Yöneticisi'ni kullanabilirsiniz (daha fazla bilgi için bkz. Katalog Yöneticisi'ni kullanma). İsterseniz, dizin oluşturucunun gezinmesini istediğiniz URL'leri belirten varsayılan kuralları ayarlamak için Gezinme Kapsamı Yöneticisi'ni (CSM) de kullanabilirsiniz (daha fazla bilgi için bkz. Gezinme Kapsamı Yöneticisi kullanma ve Kapsam Kurallarını Yönetme). Ayrıca bir arama kökü de ekleyebilirsiniz (daha fazla bilgi için bkz. Arama Köklerini Yönetme). Kullanabileceğiniz bir diğer seçenek de Windows Arama Kodu Örnekleriiçindeki ReIndex örneğindeki yordamı izlemektir.
ISearchCrawlScopeManager arabirimi, arama motoruna taranacak ve/veya izlenecek kapsayıcıları ve bu kapsayıcıların altındaki dahil edilecek veya hariç tutulacak öğeleri bildiren yöntemler sağlar. Windows 7 ve sonraki sürümlerde ISearchCrawlScopeManager2, ISearchCrawlScopeManager'yi ISearchCrawlScopeManager2::GetVersion yöntemi ile genişleterek, istemcilere CSM durumunun değişip değişmediğini bildirir.
İlgili konular
-
kavramsal