Ajánlott eljárások szűrőkezelők létrehozásához a Windows Searchben
A Microsoft Windows Search szűrőkkel kinyeri az elemek tartalmát a teljes szöveges indexbe való felvételhez. A Windows Search kiterjeszthető új vagy védett fájltípusok indexelésére úgy, hogy szűrőkezelőket ír a tartalom kinyeréséhez, a tulajdonságkezelőket pedig a fájlok tulajdonságainak kinyeréséhez. A szűrők fájltípusokhoz vannak társítva, fájlnévkiterjesztések, MIME-típusok vagy osztályazonosítók (CLSID-k) szerint. Bár egy szűrő több fájltípust is képes kezelni, minden típus csak egy szűrővel működik.
Ez a témakör a következő szakaszokat tartalmazza:
Natív kód
A Windows 7-ben és újabb verziókban a felügyelt kódban írt szűrők kifejezetten le vannak tiltva. A szűrőket natív kódban kell írni a folyamatban futó több bővítményt érintő CLR-verziózásbeli problémák miatt.
A Windows Search biztonságos kódokkal kapcsolatos eljárásai
Az alábbiakban a Windows Search szolgáltatással használható biztonságos alkalmazások írására vonatkozó eljárásokat követjük.
Lekérdezési alkalmazásokhoz:
- Keresési ügyfelek írásakor olyan biztonsági környezetben futó API-t kell választania, amely a felhasználó számára a legkisebb jogosultságot teszi lehetővé. Az ASP-lapok például használhatják az IXSSO lekérdezési objektumot, amely felhasználói folyamatként fut.
IFilters és nyelvi erőforrások esetén:
- Ha egy meglévő szűrőregisztráció helyett egy fájltípus új szűrőkezelője van telepítve, a telepítőnek mentenie kell az aktuális regisztrációt, és vissza kell állítania, ha az új szűrőkezelőt eltávolítják. Nincs mechanizmus a szűrők láncolására. Ezért az új szűrőkezelő felelős a régi szűrő szükséges funkcióinak replikálásáért.
- Az IFilters, a word breakers és a stemmers for Windows Search a Local Security környezetben fut. Ezeket a pufferek kezelésére és a helyes veremkezeléshez kell írni. Minden sztringpéldánynak explicit ellenőrzésekkel kell rendelkeznie a puffertúllépések elleni védelemhez. Mindig ellenőrizze a puffer lefoglalt méretét, és tesztelje az adatok méretét a puffer méretével. A puffertúlcsordulások gyakran olyan kód kihasználására szolgálnak, amely nem kényszeríti ki a pufferméret korlátozásait.
- IFilter, szóhatároló és szótőelemző összetevőknek soha nem szabad hívják meg a ExitProcess függvényt vagy más hasonló API-t, amely megszakítja a folyamatot és annak összes szálát.
- Ne foglald le és ne szabadítsd fel az erőforrásokat a DllMain belépési pontban. Ez az alacsony erőforrásigényű stressztesztek során hibákhoz vezethet.
- Az összes objektum kódolása a szálbiztosság érdekében. A Windows Search egyszerre meghívja egy szóhatároló vagy -szár bármelyik példányát egy szálon, de egyszerre több példányt is meghívhat több szálon.
- Kerülje az ideiglenes fájlok létrehozását vagy a beállításjegyzékbe való írást.
- Ha a Microsoft Visual C++ fordítót használja, győződjön meg arról, hogy az alkalmazást a /GS lehetőséggel fordítja le. A /GS beállítással észlelheti a puffertúllépéseket. A /GS beállítás biztonsági ellenőrzéseket helyez a lefordított kódba. További információ: DllGetClassObject függvény /GS (Puffer biztonsági ellenőrzése) a Platform SDK Visual C++ Fordító beállításai szakaszában.
További erőforrások
- Az IFilterSample minta bemutatja, hogyan hozhat létre IFilter alaposztályt az IFilter interfész implementálásához.
- Az indexelési folyamat áttekintését az Az indexelési folyamatcímű cikkben tekintheti meg.
- A fájltípusok áttekintését a fájltípusokcímű témakörben talál.
- A fájltípus fájltársítási attribútumainak lekérdezéséhez lásd: Észlelttípusok, SystemFileAssociations és Alkalmazás Regisztráció.
Kapcsolódó témakörök
-
A Windows Search szűrőkezelőiről