在 Windows 搜尋中建立篩選處理常式的最佳做法
Microsoft Windows 搜尋會使用篩選來擷取專案的內容,以包含在全文檢索索引中。 您可以藉由撰寫篩選處理常式來擷取內容,以及屬性處理常式來擷取檔案的屬性,以擴充 Windows 搜尋以編制新的或專屬檔案類型的索引。 篩選準則與檔案類型相關聯,如副檔名、MIME 類型或類別識別碼所表示, (CLSID) 。 雖然一個篩選可以處理多個檔案類型,但每個類型只能搭配一個篩選。
本主題包含下列幾節:
機器碼
在 Windows 7 和更新版本中,明確封鎖以 Managed 程式碼撰寫的篩選。 篩選必須以原生程式碼撰寫,因為多個增益集執行的進程可能會發生 CLR 版本控制問題。
Windows 搜尋的安全程式碼做法
以下是撰寫安全應用程式以搭配 Windows 搜尋使用的做法。
針對查詢應用程式:
- 撰寫搜尋用戶端時,您應該選擇在允許使用者最低許可權的安全性內容中執行的 API。 例如,ASP 頁面可以使用以使用者進程身分執行的 IXSSO 查詢物件。
針對 IFilters 和語言資源:
- 如果正在安裝檔案類型的新篩選處理常式做為現有篩選註冊的取代專案,安裝程式應該儲存目前的註冊,並在卸載新的篩選處理常式時還原它。 沒有鏈結篩選的機制。 因此,新的篩選處理常式會負責複寫舊篩選器的任何必要功能。
- Windows 搜尋的 IFilters、斷詞工具和字幹分析器會在本機安全性內容中執行。 它們應該寫入以管理緩衝區,並正確堆疊。 所有字串複本都必須有明確的檢查,才能防範緩衝區溢位。 您應該一律確認緩衝區的配置大小,並針對緩衝區的大小測試資料大小。 緩衝區溢位是惡意探索不會強制執行緩衝區大小限制之程式碼的常見技術。
- IFilter、斷詞工具和字幹分析器元件不應該呼叫 ExitProcess 函 式函式或類似的 API,以終止進程及其所有線程。
- 請勿在 DllMain 進入點中配置或釋放資源。 這可能會導致低資源壓力測試期間失敗。
- 撰寫所有要安全線程的物件程式碼。 Windows 搜尋服務會一次在一個執行緒中呼叫斷詞工具或字幹分析器的任何一個實例,但它可能會在多個執行緒上同時呼叫多個實例。
- 避免建立暫存檔案或寫入登錄。
- 如果您使用 Microsoft Visual C++ 編譯器,請確定您使用/GS選項編譯應用程式。 /GS選項可用來偵測緩衝區溢位。 /GS 選項會將安全性檢查放入編譯的程式碼中。 如需詳細資訊,請參閱 Platform SDK 的 Visual C++ 編譯器選項一節中的DllGetClassObject 函 / 式GS (緩衝區安全性檢查) 。
其他資源
- IFilterSample範例示範如何建立 IFilter 基類來實作IFilter介面。
- 如需編制索引程式的概觀,請參閱 編制索引進程。
- 如需檔案類型的概觀,請參閱 檔案類型。
- 若要查詢檔案類型的檔案關聯屬性,請參閱 PerceivedTypes、SystemFileAssociations 和應用程式註冊。
相關主題