プロパティ システムの概要

Windows プロパティ システムは、シェル項目に関するメタデータを統一的に表現するデータ定義の拡張可能な読み取り/書き込みシステムです。 Windows Vista 以降の Windows プロパティ システムを使用すると、シェル項目のメタデータを格納および取得できます。 シェル アイテムは、ファイル、フォルダー、電子メール、連絡先など、1 つのコンテンツです。 プロパティは、シェル項目に関連付けられているメタデータの個々の部分です。 プロパティ値は PROPVARIANT 構造体として表されます。

このトピックは次のように整理されています。

はじめに

プロパティは、正規名 (など System.Document.LastAuthor) とプロパティ キー (など PKEY_Document_LastAuthor) によって一意に識別されます。 プロパティ キー (PKEY) は、PKEY/PROPVARIANT または文字列/PROPVARIANT で構成される名前と値のペアの名前部分です。ここで、文字列は PKEY の正規名 (など System.Document.LastAuthor) です。 PKEY は、プロパティについて知る必要があるすべてをプロパティ システムに伝える定義ですが、値はプロパティの実際のインスタンスです。 PKEY には、内部的に formatID と propID が含まれています。

個々のプロパティは、次の 3 つの要素で構成されます。

  • 正規名 (例: System.Music.Artist)。
  • スキーマの説明。.propdesc XML ファイル形式で指定され、 IPropertyDescription を使用してプログラムで表されます。
  • 歌手の名前などの値。

スキーマの説明は、プロパティ名、データ型、制約、プロパティがビューや検索システムと対話する方法に関する情報など、プロパティに関する情報で構成されます。 名前とスキーマの説明はグローバルに定義され、すべてのアイテムと型で同じです。 値は個々のアイテムに固有です。 つまり、 System.Music.Artist プロパティは常に複数値の文字列として定義されますが、アイテムごとに異なる値 (または値がまったくない) 可能性があります。

プロパティ ハンドラーは、ファイルに格納されているデータを、Windows エクスプローラー、Windows Search、およびその他のアプリケーションによって認識され、アクセスできる構造化スキーマに変換します。 これらのシステムは、プロパティ ハンドラーと対話して、ファイルとの間でプロパティの書き込みと読み取りを行うことができます。 翻訳されたデータはプログラムによって公開され、詳細ビュー、ヒント、詳細ウィンドウ、プロパティ ページなど、さまざまなコンテキストで Windows エクスプローラーを介してユーザーに表示されます。 各プロパティ ハンドラーは、ファイル名拡張子で識別される特定のファイルの種類に関連付けられます。 開発者は、.jpgや.pngなどのファイルの種類のネイティブ形式を生成して使用するプロパティ ハンドラーを実装するか、MS-PROPSTORE バイナリ形式を生成して使用する In-Memory Property Store を使用する必要があります。

Windows プロパティ システムは、個々のファイル形式からの抽象化レベルを提供する抽象データ モデルを作成します。 Windows プロパティ システムによって提供される抽象データ モデルは、シェル項目に関連付けられている名前付き値の拡張可能なセットを読み書きするためのメソッドです。 値式は柔軟性があり、多くのデータ型をサポートし、拡張可能であり、任意のデータ (VT_BLOB) とオブジェクトを値として表現できます。

抽象化により、任意の項目の属性またはメタデータに対してクエリを実行できます。 抽象化できるアイテムの例としては、Microsoft Office ドキュメント、ID3 タグ、AutoCADおよびその他のサードパーティ製の独自ソフトウェアがあります。 同様に、.jpeg ファイルがある場合は、.jpeg コーデックと EXIF コーデックを使用してファイルのバイトを読み取り、画像のサイズを検出できます。 代わりに.png ファイルがある場合は、別のコーデックと異なるコードが必要です。 Windows プロパティ システムを使用すると、この種の問題を回避できます。 新しいファイルの種類を実装する場合は、Windows プロパティ システムによって提供される均一な抽象化にプラグインし、メタデータを使用できるようにする方法を指定するオプションがあります。 これらの理由から、Windows プロパティ システムによって提供される共通プラットフォームを常に使用することをお勧めします。

開発シナリオ

プロパティは、プロデューサーとコンシューマーによって表されます。 このコンテキストでは、プロデューサーは Windows プロパティ システムのプロパティの発明者であり、コンシューマーは、このシステムのプロパティ情報を使用するアプリケーション (およびその開発者) です。 Windows プロパティ システムでの および 参加者の使用方法を次の表に示します。

Windows プロパティ システムの使用 参加者
プロパティの説明の拡張可能なレジストリ、メモリ内プロパティ ストアの実装、およびプロパティ ハンドラーへのバインド、型の変換、およびプロパティ ストアのシリアル化のためのサービスを提供する構成要素。 コンシューマー
抽象的な方法でプロパティの読み取りと書き込みを行うアプリケーション。 コンシューマー
カスタム プロパティ スキーマを定義し、独自のプロパティ ハンドラーを開発することで、プロパティ システムの新しいプロパティを定義するプロパティ発明者。 Producer
カスタム ファイル形式で格納されているプロパティへのアクセスを有効にするファイル形式の所有者。 Producer

 

コンシューマーは、既存のプロパティ、スキーマ、およびプロパティ ハンドラーを使用します。 使用できるプロパティには、サポートされているファイルの種類のプロパティ ハンドラーからの読み取り/書き込みプロパティが含まれます。また、いくつかのカスタム プロパティを含めることもできます。 使用可能なスキーマには、少なくともシステム スキーマと、場合によっては他のスキーマも含まれます。 コンシューマーは、メタデータを使用するアプリケーションを作成し、アイテムが格納されているフォルダーに関係なく、アーティストに基づいてビューを作成できます。 ファイル フォルダー階層は関係ありません。 たとえば、特定の歌手が、そのような項目の場所を気にすることなく、すべての曲項目を指定できます。 この複雑なエンドツーエンドのシナリオは、Windows プロパティ システムに限定されるのではなく、インデックス作成フォルダーや検索フォルダーなど、いくつかの異なるコンポーネントを含みます。

プロパティの発明者またはサードパーティの開発者は、Windows プロパティ システムのプロデューサーです。 新しいプロパティを定義する準備をする場合は、まず、Windows で定義されているプロパティのセットを調べます。 必要な用途に一致する型とセマンティクスのニーズを満たすプロパティが見つかる場合は、そのプロパティを使用し、新しいプロパティを作成しないでください。 新しいカスタム プロパティを定義する場合は、そのプロパティを使用する他の開発者との契約を取得し、その契約の結果を公開して、そのプロパティのユーザーのコミュニティに参加できるようにします。

プロデューサーは、Windows エクスプローラー機能を利用できます。 たとえば、新しいイメージ形式を記述し、プロパティ ハンドラーを実装する場合、新しいファイル形式は Windows エクスプローラーで使用できるようになります。 その後、ユーザーは写真にタグを付け、Windows プロパティ システムの任意のプロパティに基づいて写真のコレクションをピボットできます。 実際、シェルがプロパティで行うことは何でも、サードパーティの開発者は独自のアプリケーションで行うことができます。 これには、グループ化、並べ替え、クエリ、および完全なプロパティの表示が含まれます。 Windows エクスプローラーが提供するユーザー エクスペリエンスは、公開されている API を持つ第三者によって主に実装できます。 Windows エクスプローラーは、これらの API を使用して置き換えたり拡張したりできます。

シェル データ モデルを使用するアプリケーションの観点からは、Windows プロパティ システムの使用を伴うさまざまなシナリオがあります。 メディア管理アプリケーションは、顕著な例です。 コア プロパティ システムのシナリオには、写真の キーワード (keyword) プロパティの読み取りや datetaken プロパティの設定などのシナリオが含まれます。 Windows プロパティ システムが可能にするが、他のいくつかのコンポーネントを機能させる必要があるエンド ツー エンドの統合シナリオの例には、すべての画像の表示、キーワード (keyword)を含むドキュメントの検索などがあります。

プロパティは、Windows Search とインデックス作成とインターフェイスするときに、プロデューサーとコンシューマーの両方にサービスを提供します。 Windows Search には、Windows Search Service (WSS) の実装で使用されるプロパティ値のキャッシュがあります。 これらのプロパティ値は、Windows Search OLE DB プロバイダーを使用するか、検索結果とクエリベースのビューのアイテムを表す ISearchFolderItemFactory を使用してプログラムでクエリを実行できます。 Windows Search では、Word ドキュメントなどの項目のインデックスが作成されたときに、フィルター ハンドラーまたはプロパティ ハンドラーによって出力されるプロパティを収集して格納します。 このストアは、インデックスの再構築時に破棄され、再構築されます。

注意

スキーマを再登録するときに、以前に定義されたプロパティの属性に加えられた変更がインデクサーによって考慮されないことに注意してください。 この解決策は、インデックスを再構築するか、古いプロパティを更新するのではなく、変更を反映する新しいプロパティを導入することです (推奨されません)。 詳細については、このトピックで後述 する「実装者へのメモ 」を参照してください。

 

たとえば、メディア アプリケーションを作成する開発者は、特定のアーティストが利用できるすべての音楽をアプリケーションのユーザーに表示したいと考えています。 アプリケーションは、使用可能なアーティストのリストをユーザーに提供し、ユーザーが選択したアーティストが利用可能なすべての音楽の一覧を生成します。 または、エンド ユーザーが ?artist:Beethoven?のクエリを実行し、検索の過程で使用可能なプロパティの完全な一覧に公開したい場合があります。 この例では、シェル名前空間、プロパティ ハンドラーの使用、または次のいずれかを使用してインデックスのクエリを実行します。

  • シェル データ ソース。
  • OLE DB プロバイダー。
  • Windows エクスプローラーの検索ファイルに移動するか、プログラムで IShellFolder にバインドすることによってクエリを開始するために使用される保存済み検索ファイル (.search-ms)。

注意

プロパティはこの System.Kind メディア アプリケーション シナリオには含まれませんが、特定のスコープ内のすべての .search-ms ファイルを返すクエリを作成するために使用できます。

 

検索 API にアクセスし、Windows Search アプリケーションを作成する推奨される方法は、シェル データ ソースを使用することです。 ISearchFolderItemFactory は、Search フォルダー データ ソースのインスタンスを作成できるコンポーネントです。これは、シェル名前空間内の他のデータ ソースに対してクエリを実行し、結果を列挙できる、シェルによって提供される一種の "仮想" データ ソースです。 これを行うには、インデクサーを使用するか、指定したスコープ内の項目を手動で列挙して検査します。

サード パーティの開発者は、プログラムによるクエリを使用してインデックス内のデータを使用するアプリケーションを作成し、Windows Search でインデックスを作成するカスタム ファイルとアイテムの種類のインデックス内のデータを拡張できます。 Windows エクスプローラーでクエリ結果を表示する場合は、インデックスを拡張するプロトコル ハンドラーを作成する前にシェル データ ソースを実装する必要があります。 ただし、すべてのクエリがプログラム (OLE DB など) で、シェルではなくアプリケーションのコードによって解釈される場合は、シェル名前空間が引き続き推奨されますが、必須ではありません。 Windows がデータベース内の項目やカスタム ファイルの種類など、ファイルの内容に関する情報を取得するには、プロトコル ハンドラーが必要です。 Windows Search ではファイルの名前とプロパティのインデックスを作成できますが、Windows にはファイルの内容に関する情報はありません。 その結果、このような項目のインデックスを作成したり、Windows シェルで公開したりすることはできません。 カスタム プロトコル ハンドラーを実装することで、これらの項目を公開できます。 実現しようとしている開発者シナリオで識別されるハンドラーの一覧については、「 開発プラットフォームとしての Windows Search のハンドラーの概要」を参照してください。

注意

シェル データ ソースは、シェル名前空間拡張機能と呼ばれることもあります。 ハンドラーは、シェル拡張機能またはシェル拡張機能ハンドラーと呼ばれることもあります。

 

実装者への注意

プロパティ システムのスキーマを使用する際にインデクサーに問題が生じる可能性があるため、スキーマの最初のリリースでは属性を慎重かつ戦略的に定義することが重要です。 属性 (型、列幅、インデックス可能かどうか) に対する変更は、スキーマの登録後にデータベースに反映されません。 スキーマがシステムに 1 回登録された後にこれらの変更を認識する唯一の方法は、インデックスを再構築してから新しいスキーマを登録するか、スキーマを登録して以降のリリースごとに新しいプロパティを作成することです。たとえば PKEY_GroupName_PropertyNameV2PKEY_GroupName_PropertyNameV3、、などです。 複数の余分な列がシステム パフォーマンスに影響を与える可能性があるため、この方法で新しいプロパティを作成することはお勧めしません。

Windows プロパティ システムのドキュメント

このドキュメントの残りの部分には、次のセクションが含まれています。

その他のリソース

Windows プロパティ システム開発者ガイド

プロパティ システムリファレンス

プロパティ システムのコード サンプル