このページの本文へ

Windows Info 第251回

WindowsサーチのIndexerで使われるIFilterを調べる

2020年11月22日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windowsサーチには、検索処理を高速化するIndex Serviceがある。これは、ファイルの属性やファイルの中に含まれるキーワードなどをインデックス化するものだ。このIndex Seviceは、Indexer、もしくは最初の製品から「Index Server」などと呼ばれることもある。Windowsサーチについてはこれまで何回か解説したので、以下の記事も合わせて参照していただきたい。

●進化しているWindowsサーチ、そしてインデックス作成が重いときの対処法
 https://ascii.jp/elem/000/004/024/4024057/
●Windows標準のサーチ機能を活用する
 https://ascii.jp/elem/000/000/942/942736/
●Windowsの検索機能で用いられるサーチインデックスを制御する
 https://ascii.jp/elem/000/000/938/938533/

Windows SearchのエラーはIndexerで起きやすい。場合によっては、これによりインデックス作成を繰り返すことがある

WindowsのIndexerは
メタデータとコンテンツデータの両方を扱う

 WindowsのIndexerは、Windowsのファイルを扱うことを想定して作られているため、一般的な検索インデクサーとは違い、ファイル内のデータから取り出した「キーワード」と、ファイル名や更新日時、種類といったメタデータ(ファイルの中には記録されていないデータ)を扱う。

 メタデータは、エクスプローラーなどが利用する「プロパティ・システム」を使っている。これはエクスプローラーの「カラム」表示のためのもので、更新日時など基本的なカラムに関しては、Windowsに組み込みのプロパティシステムが扱い、アプリケーション独自、ファイル形式独自のプロパティハンドラーを作ることで、独自のデータに対応できる。

 Windowsは代表的なファイル形式(画像ファイルなど)のプロパティハンドラーを持っている。たとえば、Exifに対しては、撮影日時などの情報を取り出すことができる。ただし、Exifの全情報を取り出すわけではなく、主要なもののみに限られるなど制限はある。

 これに対して、ファイル内からキーワードを取り出すためには、フィルターハンドラー(COMインターフェースの名称からIFilterと呼ばれることもある)を使う。これはファイル形式ごとに必要となる。Windowsはテキストファイル用のフィルターハンドラーを標準で搭載し、Officeには文書ファイル用のフィルターハンドラーがある。フィルターハンドラーは、原則としてアプリケーションが提供する。ただし、中身がテキストになっているファイルであれば、Windowsが持つフィルターハンドラーと拡張子を登録することで、Indexerはキーワードを抽出してインデックス化できる。

拡張子とIFilterの関係

 拡張子とIFilterの関係は「コントロールパネル」→「インデックスのオプション」→「詳細設定ボタン」→「詳細オプション」→「ファイルの種類タブ」で見ることができる。

IFilterと拡張子の対応を見るには、「コンロールパネル」→「インデックスのオプション」→「詳細設定ボタン」を押して詳細オプションダイアログボックスを開き、ファイルの種類タブを使う

 ここには拡張子とフィルターのリストがある。「フィルターの説明」に「ファイルプロパティのフィルター」としか書いていない拡張子は、IFilterのないファイル形式である。ここは、下の「このファイルのインデックスの作成方法」とリンクしていて、「プロパティのみインデックスを作成する」が選択されているとフィルターが「ファイルプロパティのフィルター」になる。

 「プロパティとファイルのコンテンツのインデックスを作成する」が選択されているとIFilterの説明が表示される。そのためには、すでにレジストリにIFilterが登録されている必要がある。設定としては、IFilterを持つ拡張子であっても、ファイルコンテンツのインデックスを作成させないこともできる。ここで「プロパティのみのインデックスを作成する」を選ぶ。

 現在のExcelのファイルはXMLベースになっているため、中身を解釈することは可能だが、Excelのテンプレートファイル(xltx)は、プロパティのみのインデックスが指定されている。これを中身を含めてインデックス化することは可能なのだが、インデックスのオプションの詳細オプションダイアログは簡易なものであるため、「プロパティとファイルのコンテンツのインデックスを作成する」を選択すると、テキストファイルのIFilter「プレーンテキストフィルター」が指定されてしまう。これを適切なものに変更するには、レジストリの操作が必要だ。

 ファイル形式とIFilterは、ファイルの拡張子をベースに組み合わせられる。これは文書ファイルと編集アプリの関係を決める「関連付け」と同じ仕組みで、レジストリの「HKLM¥Software¥Classes」キーを使う(以下HKEY_LOCAL_MACHINEの省略形としてHKLMを使う)。この下に拡張子(ピリオドを含む)を示すキー項目がある。

 確実に存在するIFilterで登録の状態を見てみることにしよう。そこで「プレーンテキストフィルター」が必ず指定してある「.txt」を探す。その下に「PersistentHandler」キーがあるはずだ。

レジストリエディタでHKLM¥Software¥Classesを開き、その下からIFilterを探したい拡張子を探す。「.txt」には、「PersistentHandler」キーがあり、そこにGUID{5e941d80-bf96-11cd-b579-08002b30bfeb}が定義されていた

 その既定値にあるGUIDをキーとしてさらにレジストリから検索します。筆者の環境では、ここに「{5e941d80-bf96-11cd-b579-08002b30bfeb}」が定義されていた。

HKLM¥SOFTWARE¥Classes¥CLSID¥{5e941d80-bf96-11cd-b579-08002b30bfeb}

というキーには、「PersistentAddinsRegistered」キーの下に「{89BCB740-6119-101A-BCB7-00DD010655AF}」というキーがある。このキーは、IFilterを示すGUIDである。その既定値には、「{c1243ca0-bf96-11cd-b579-08002b30bfeb}」が定義されている。

{5e941d80-bf96-11cd-b579-08002b30bfeb}キーには、「PersistentAddinsRegistered」サブキーがあり、そこには、GUID {c1243ca0-bf96-11cd-b579-08002b30bfeb}が記録されている

 さらにこのGUIDをキーとしてレジストリから探すと

HKLM¥SOFTWARE¥Classes¥CLSID¥{c1243ca0-bf96-11cd-b579-08002b30bfeb}

が見つかる。

{c1243ca0-bf96-11cd-b579-08002b30bfeb}キーを見ると既定値に「Plain Text filter」と記述があり、InprocServer32サブキーにIFilterとなるDLLへのパス“%systemroot%¥system32¥query.dll”かある。このquery.dllがテキストファイルのIFilterである

 その既定値には「Plain Text Filter」と書いてある。前述のダイアログに表示される日本語の「プレーンテキストフィルター」を得たいなら、query.dllから文字列リソースを取り出す必要があるのだが、面倒(プログラムを書く必要がある)なのでここまでとする。

 このように拡張子のキーからPersistentHandlerにあるGUIDを追っていけばいいのだが、IFilterの登録方法にはもう1つあって、CLSID(COMのクラスID)を使う方法だ。こちらは、拡張子の下に「CLSID」というキーがあるので、そのキーを追っていく。同様にIFilterを表す「{89BCB740-6119-101A-BCB7-00DD010655AF}」が出てくるので、その既定値を探す。

 これを簡単にするためには、以下の3つのキーを探せばいい。

{89BCB740-6119-101A-BCB7-00DD010655AF}
PersistentHandler
PersistentAddinsRegistered

Windows SDKがインストールしてあれば
IFilter開発用ツールが利用できる

 なお、Windows SDKがインストールしてあるなら、IFilter開発用のサポートツールが利用できる。そのうちの1つ「Filtreg.exe」を使うことで登録されているIFilterを出力できる。ただし、このツールではIFilterのパスは表示できるが、対応するすべての拡張子を表示してくれるわけではない。

Windows SDKに含まれるFiltreg.exeを使うと、登録されているIFilterを列挙できるが、拡張子はすべては表示されない

 対象も場合によってはGUIDでのみしか表示されないので、レジストリでの検索が必要だ。ちなみにGUIDは、ユニークな値で重複がないため、レジストリの中では常に同じ意味を持つ。単純にレジストリ内をGUIDで検索すれば、IFilterの情報を定義してあるキーが見つかる。同じキーが複数の場所に記録されていることもある。

 IFilterは、ファイルのコンテンツをインデックス化するのに必要なのだが、サードパーティアプリの一部は、標準のIFilterを置き換えることがある。Indexerのエラーが多発するような場合、IFilterのエラーを疑う必要がある。IFilterを実行するSearchFilterHost.exeのエラーは、ファイルのエラーもしくは、IFilterのエラーであることが多い。

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
2
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,273
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥660
4
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,080
5
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,680
6
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
7
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
8
KIOXIA(キオクシア)【日本製】SDカード 32GB SDHC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA032G
KIOXIA(キオクシア)【日本製】SDカード 32GB SDHC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA032G
¥1,061
9
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,359
10
【Amazon.co.jp限定】 ロジクール ワイヤレスマウス 無線 マウス M185CG 小型 電池寿命最大12ケ月 M185 グレー 国内正規品
【Amazon.co.jp限定】 ロジクール ワイヤレスマウス 無線 マウス M185CG 小型 電池寿命最大12ケ月 M185 グレー 国内正規品
¥999

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン