Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A protokollkezelő telepítésekor a DLL-eket a Program Files könyvtár megfelelő helyére kell másolni, majd regisztrálni kell a protokollkezelőt a beállításjegyzéken keresztül. A telepítőalkalmazás keresési gyökér- és hatókörszabályokat is hozzáadhat a Shell-adatforrás alapértelmezett bejárási hatókörének meghatározásához.
Ez a témakör a következőképpen van rendszerezve:
- Az URL-címek
- Protokollkezelő felületek implementálása
- Tárolók szűrőkezelőinek implementálása
-
Protokollkezelő telepítése és regisztrálása
- protokollkezelő regisztrálásának irányelvei
- Protokollkezelő regisztrálása
- A protokollkezelő fájltípus-kezelőjének regisztrálása
- Annak biztosítása, hogy az elemeid indexelve legyenek
- Kapcsolódó témakörök
Tudnivalók az URL-címekről
A Windows Search URL-címekkel azonosítja a Shell-adatforrás hierarchiájában lévő elemeket. A hierarchia első csomópontjának URL-címét keresési gyökér-nek nevezzük. A Windows Search az indexelést a keresési gyökérnél kezdi, és kéri, hogy a protokollkezelő sorolja fel az egyes URL-címek gyermekhivatkozásait.
A tipikus URL-struktúra a következő:
<protocol>:// [{user SID}/] <localhost>/<path>/[<ItemID>]
Az URL-szintaxist az alábbi táblázat ismerteti.
| Szintaxis | Leírás |
|---|---|
| <protokoll> | Meghatározza, hogy melyik protokollkezelőt kell meghívni az URL-címhez. |
| {user SID} | Azonosítja azt a felhasználói biztonsági környezetet, amely alatt a protokollkezelőt meghívják. Ha nincs azonosítva felhasználói biztonsági azonosító (SID), a rendszer meghívja a protokollkezelőt a rendszerszolgáltatás biztonsági környezetében. |
| <elérési út> | Meghatározza az áruház hierarchiáját, ahol minden perjel ('/') egy elválasztó a mappanevek között. |
| <Tételazonosító> | A gyermekelemet (például a fájlnevet) azonosító egyedi karakterláncot jelöli. |
A Windows Search Indexer levágja a végleges perjelet az URL-címekről. Ennek eredményeképpen nem támaszkodhat arra, hogy a könyvtár és az elem azonosításához van-e záró perjel. A protokollkezelőnek képesnek kell lennie kezelni ezt az URL-szintaxist. Győződjön meg arról, hogy a Shell-adatforrás azonosításához kiválasztott protokollnév nem ütközik az aktuálisakkal. Ezt az elnevezési konvenciót javasoljuk: companyName.scheme.
További információ a Shell-adatforrások létrehozásáról: Az alapszintű mappaobjektum-felületek implementálása.
Protokollkezelő felületek implementálása
A protokollkezelő létrehozásához a következő három felület implementálása szükséges:
- ISearchProtocol urlAccessor-objektumok kezeléséhez.
- IUrlAccessor a tulajdonságok felfedéséhez és a Shell-adatforrás elemeinek megfelelő szűrőinek azonosításához.
- IFilter a védett fájlok szűréséhez, illetve a hierarchikusan tárolt fájlok számbavételéhez és szűréséhez.
A felsorolt három kötelező interfészen kívül a többi interfész nem kötelező, és ön szabadon implementálhatja, hogy melyik választható interfész a legmegfelelőbb a feladathoz.
ISearchProtocol és ISearchProtocol2
A SearchProtocol-felületek inicializálják és kezelik a protokollkezelő URLAccessor-objektumait. Az ISearchProtocol2 felület a ISearchProtocolopcionális bővítménye, és egy további módszert is tartalmaz a felhasználóra és az elemre vonatkozó további információk megadásához.
Iurlaccessor, iurlaccessor2, iurlaccessor3 és IUrlAccessor4
Az IUrlAccessor interfészeket az alábbi táblázat ismerteti.
| Interfész | Leírás |
|---|---|
| IUrlAccessor | Megadott URL-cím esetén az IUrlAccessor felület hozzáférést biztosít az URL-címben közzétett elem tulajdonságaihoz. Ezeket a tulajdonságokat egy protokollkezelő-specifikus szűrőhöz (vagyis a fájlnévhez társított szűrőn kívüli szűrőhöz) is kötheti. |
| IUrlAccessor2 (nem kötelező) | Az IUrlAccessor2 felület kibővíti IUrlAccessor olyan metódusokkal, amelyek kódlapot kapnak az elem tulajdonságaihoz és megjelenítési URL-címéhez, és amelyek lekérik az URL-címben (dokumentum vagy könyvtár) található elem típusát. |
| IUrlAccessor3 (nem kötelező) | Az IUrlAccessor3 felület kibővíti az IUrlAccessor2 egy olyan módszerrel, amely egy felhasználói SID-ek tömböt ad vissza, lehetővé téve, hogy a keresési protokoll gazdagépe megszemélyesítse ezeket a felhasználókat az elem indexeléséhez. |
| IUrlAccessor4 (nem kötelező) | Az IUrlAccessor4 felület kibővíti az IUrlAccessor3 felület funkcióit egy olyan módszerrel, amely meghatározza, hogy az elem tartalmát indexelni kell-e. |
Az UrlAccessor objektumot egy SearchProtocol-objektum példányosít és inicializálja. Az IUrlAccessor felületek az alábbi táblázatban ismertetett módszerekkel biztosítják a fontos információkhoz való hozzáférést.
| Módszer | Leírás |
|---|---|
| IUrlAccessor::GetLastModified | Azt az időpontot adja vissza, amikor az URL-címet legutóbb módosították. Ha ez az idő újabb, mint az indexelő legutóbb feldolgozta ezt az URL-címet, a rendszer meghívja a szűrőkezelőket (a IFilter felület implementációit) az adott elem módosított adatainak kinyerésére. A címtárak módosított időpontjai figyelmen kívül lesznek hagyva. |
| IUrlAccessor::IsDirectory | Meghatározza, hogy az URL-cím gyermek URL-címeket tartalmazó mappát jelöl-e. |
| IUrlAccessor::BindToStream | Egy IStream-felülethez kapcsolódik, amely egy egyéni adattárban lévő fájl adatait jelöli. |
| IUrlAccessor::BindToFilter | Egy protokollkezelő-specifikus IFilter--hoz kapcsolódik, amely elérhetővé teheti az elem tulajdonságait. |
| IUrlAccessor4::ShouldIndexItemContent | Meghatározza, hogy az elem tartalmát indexelni kell-e. |
IProtocolHandlerSite
Az IProtocolHandlerSite felület egy izolált folyamat által üzemeltetett szűrőkezelő példányosítására szolgál. A rendszer beszerezi a megfelelő szűrőkezelőt egy megadott állandó osztályazonosítóhoz (CLSID), dokumentumtárolási osztályhoz vagy fájlnévkiterjesztéshez. Az az előnye, ha a gazdafolyamatot kérjük meg az iFilterkötésére, hogy a gazdafolyamat felügyelheti a megfelelő szűrőkezelő megkeresésének folyamatát, és szabályozhatja a kezelő meghívásának biztonságát.
Szűrőkezelők implementálása tárolókhoz
Ha hierarchikus protokollkezelőt implementál, akkor egy szűrőkezelőt kell implementálnia egy olyan tárolóhoz, amely számba adja a gyermek URL-címeket. A szűrőkezelő az IFilter felület implementációja. Az enumerálási folyamat az IFilter::GetChunk és IFilter::GetValue metódusai köré szervezett ciklus az IFilter felületen keresztül; minden gyermek URL-cím a tulajdonság értékeként jelenik meg.
IFilter::GetChunk a tároló tulajdonságait adja vissza. A gyermek URL-címek számbavételéhez IFilter::GetChunk az alábbiak egyikét adja vissza:
-
Az elem URL-címe az utolsó módosítás időpontja nélkül. IFilter::GetValue a gyermek URL-címét tartalmazó PROPVARIANT értéket ad vissza.
PKEY_Search_UrlToIndexWithModificationTime:
Az URL-cím és az utolsó módosítás időpontja. IFilter::GetValue a gyermek URL-címének vektorát és az utolsó módosított időpontot tartalmazó PROPVARIANT értéket adja vissza.
A PKEY_Search_UrlToIndexWithModificationTime visszaadása hatékonyabb, mert az indexelő azonnal megállapíthatja, hogy az elemet indexelni kell-e az ISearchProtocol::CreateAccessor és IUrlAccessor::GetLastModified metódus meghívása nélkül.
Az alábbi példakód bemutatja, hogyan lehet visszaadni a PKEY_Search_UrlToIndexWithModificationTime tulajdonságot.
Fontos
Copyright (c) Microsoft Corporation. Minden jog fenntartva.
// 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;
}
Jegyzet
Egy tárolónak IFilter összetevőnek mindig számba kell adnia az összes gyermek URL-címet, még akkor is, ha a gyermek URL-címei nem változtak, mert az indexelő az enumerálási folyamat során észleli a törléseket. Ha egy PKEY_Search_UrlToIndexWithModificationTime dátumkimenete azt jelzi, hogy az adatok nem változtak, az indexelő nem frissíti az adott URL-cím adatait.
Protokollkezelő telepítése és regisztrálása
A protokollkezelők telepítésével a DLL-eket a Program Files könyvtár megfelelő helyére kell másolni, majd regisztrálni kell a DLL-eket. A protokollkezelőknek önregisztrációt kell implementálniuk a telepítéshez. A telepítőalkalmazás keresési gyökér- és hatókörszabályokat is hozzáadhat a Shell-adatforrás alapértelmezett bejárási hatókörének meghatározásához, amelyről a témakör végén Az elemek indexelésének biztosítása című témakörben olvashat.
Protokollkezelő regisztrálásának irányelvei
Protokollkezelő regisztrálásakor kövesse az alábbi irányelveket:
- A telepítőnek EXE vagy MSI telepítőt kell használnia.
- A kibocsátási megjegyzéseket meg kell adni.
- Minden telepített bővítményhez létre kell hozni egy Programok hozzáadása/eltávolítása bejegyzést.
- A telepítőnek át kell vennie az aktuális bővítmény által megismert fájltípus vagy -tároló beállításjegyzék-beállításait.
- Ha felülír egy korábbi bővítményt, a telepítőnek értesítenie kell a felhasználót.
- Ha egy újabb bővítmény felülírta az előző bővítményt, képesnek kell lennie visszaállítani az előző bővítmény funkcióit, és ismét az adott fájltípus alapértelmezett bővítményének kell lennie.
- A telepítőnek meg kell határoznia az indexelő alapértelmezett bejárási hatókörét egy keresési gyökér és hatókörszabályok hozzáadásával a Bejárási hatókörkezelő (CSM) használatával.
Protokollkezelő regisztrálása
A protokollkezelő összetevő regisztrálásához tizennélyes bejegyzést kell létrehoznia a beállításjegyzékben, ahol:
- Ver_Ind_ProgID a protokollkezelő implementáció verziófüggetlen ProgID azonosítója.
- Ver_Dep_ProgID a protokollkezelő implementáció verziófüggő ProgID azonosítója.
- CLSID_1 a protokollkezelő implementáció CLSID azonosítója.
Protokollkezelő regisztrálása:
Regisztrálja a verziófüggetlen ProgID-t a következő kulcsokkal és értékekkel:
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>Regisztrálja a verziófüggő ProgID-t a következő kulcsokkal és értékekkel:
HKEY_CLASSES_ROOT <Ver_Dep_ProgID> (Default) = <Protocol Handler Class Description>HKEY_CLASSES_ROOT <Ver_Dep_ProgID> CLSID (Default) = {CLSID_1}Regisztrálja a protokollkezelő CLSID azonosítóját a következő kulcsokkal és értékekkel:
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>Regisztrálja a protokollkezelőt a Windows Search szolgáltatásban. Az alábbi példában <protokollnév> maga a protokoll neve, például fájl, mapi stb.:
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 előtt:
HKEY_CURRENT_USER SOFTWARE Microsoft Windows Desktop Search DS Index ProtocolHandlers <Protocol Name> HasRequirements = dword:00000000 HasStartPage = dword:00000000
A protokollkezelő fájltípus-kezelőjének regisztrálása
A protokollkezelő fájltípus-kezelőjének (más néven Shell-bővítménynek) regisztrálásához két bejegyzést kell létrehoznia a beállításjegyzékben.
-
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>
Az elemek indexelésének biztosítása
A protokollkezelő implementálása után meg kell adnia, hogy a protokollkezelő mely Shell-elemeket indexelje. A Catalog Managerrel újraindexelést kezdeményezhet (további információ: A Catalog Managerhasználata). A bejárási hatókör-kezelővel (CSM) is beállíthatja az indexelő által bejárni kívánt URL-címeket jelző alapértelmezett szabályokat (további információ: A bejárási hatókör-kezelő és Hatókörszabályok kezelése). Keresési gyökereket is hozzáadhat (további információ: Keresési gyökerek kezelése). Egy másik lehetőség az, hogy kövesse az eljárást a ReIndex mintában Windows keresési kódminták.
Az ISearchCrawlScopeManager felület olyan metódusokat biztosít, amelyek értesítik a keresőmotort a bejárásra és/vagy megtekintésre szolgáló tárolókról, valamint a tárolók alatti elemekről, amelyeket bejárás vagy figyelés során belefoglalnak vagy kizárnak. Windows 7 és újabb verziókban ISearchCrawlScopeManager2 kibővíti ISearchCrawlScopeManager a ISearchCrawlScopeManager2::GetVersion metódussal, amely lekéri a verziót, amely tájékoztatja az ügyfeleket arról, hogy megváltozott-e a CSM állapota.
Kapcsolódó témakörök
-
Koncepcionális
-
Protokollkezelők ismertetése