Übersicht über das Eigenschaftensystem

Das Windows-Eigenschaftensystem ist ein erweiterbares Lese-/Schreibsystem von Datendefinitionen, das eine einheitliche Möglichkeit zum Ausdrücken von Metadaten zu Shellelementen bietet. Mit dem Windows-Eigenschaftensystem in Windows Vista und höher können Sie Metadaten für Shellelemente speichern und abrufen. Ein Shellelement ist ein beliebiger einzelner Inhalt, z. B. eine Datei, ein Ordner, eine E-Mail oder ein Kontakt. Eine Eigenschaft ist ein einzelner Metadatenabschnitt, der einem Shellelement zugeordnet ist. Eigenschaftswerte werden als PROPVARIANT-Struktur ausgedrückt.

Dieses Thema ist wie folgt organisiert:

Einführung

Eigenschaften werden eindeutig durch ihren kanonischen Namen (z System.Document.LastAuthor. B. ) und den Eigenschaftenschlüssel (z PKEY_Document_LastAuthor. B. ) identifiziert. Ein Eigenschaftenschlüssel (PKEY) ist der Namensteil eines Name-Wert-Paars, das aus einem PKEY/PROPVARIANT oder einer Zeichenfolge/PROPVARIANT besteht, wobei die Zeichenfolge der kanonische Name des PKEY ist (z System.Document.LastAuthor. B. ). Ein PKEY ist eine Definition, die dem Eigenschaftensystem alles mitteilt, was es über die Eigenschaft wissen muss, während der Wert ein tatsächlicher instance der Eigenschaft ist. Ein PKEY enthält intern eine formatID und propID.

Eine einzelne Eigenschaft besteht aus den folgenden drei Teilen:

  • Ein kanonischer Name, z System.Music.Artist. B. .
  • Eine Schemabeschreibung, die im PROPDESC-XML-Dateiformat angegeben und programmgesteuert über IPropertyDescription ausgedrückt wird.
  • Ein -Wert, z. B. der Name eines Sängers.

Die Schemabeschreibung besteht aus Informationen zur Eigenschaft, z. B. Eigenschaftenname, Datentyp, Einschränkungen, Informationen darüber, wie die Eigenschaft mit Ansichten und dem Suchsystem interagiert usw. Der Name und die Schemabeschreibung sind global definiert und für alle Elemente und Typen identisch. Ein Wert ist spezifisch für ein einzelnes Element. Das heißt, die System.Music.Artist Eigenschaft wird immer als mehrwertige Zeichenfolge definiert, kann aber für jedes Element einen anderen Wert (oder gar keinen Wert) aufweisen.

Ein Eigenschaftenhandler übersetzt in einer Datei gespeicherte Daten in ein strukturiertes Schema, das von Windows Explorer, Windows Search und anderen Anwendungen erkannt wird und darauf zugreifen kann. Diese Systeme können dann mit dem Eigenschaftenhandler interagieren, um Eigenschaften in und aus der Datei zu schreiben und zu lesen. Die übersetzten Daten werden programmgesteuert verfügbar gemacht und dem Benutzer über Windows Explorer in einer Vielzahl von Kontexten angezeigt, einschließlich Detailansicht, Infotips, Detailbereich, Eigenschaftenseiten usw. Jeder Eigenschaftenhandler ist einem bestimmten Dateityp zugeordnet, der durch die Dateinamenerweiterung identifiziert wird. Entwickler sollten einen Eigenschaftenhandler implementieren, der das native Format ihres Dateityps erzeugt und nutzt, z. B. .jpg oder .png, oder den In-Memory Eigenschaftenspeicher verwenden, der das Ms-PROPSTORE-Binärformat erzeugt und verwendet.

Das Windows-Eigenschaftensystem erstellt ein abstraktes Datenmodell, das eine Abstraktionsebene aus einzelnen Dateiformaten bereitstellt. Das vom Windows-Eigenschaftensystem bereitgestellte abstrakte Datenmodell ist eine Methode zum Lesen und Schreiben eines erweiterbaren Satzes benannter Werte, die einem Shellelement zugeordnet sind. Der Wertausdruck ist flexibel, unterstützt viele Datentypen und ist erweiterbar, sodass beliebige Daten (VT_BLOB) und Objekte als Wert ausgedrückt werden können.

Aufgrund der Abstraktion können Sie die Attribute oder Metadaten eines beliebigen Elements abfragen. Beispiele für Elemente, die abstrahiert werden können, sind Microsoft Office-Dokumente, ID3-Tags und AutoCAD und andere proprietäre Software von Drittanbietern. Wenn Sie über eine JPEG-Datei verfügen, können Sie die JPEG- und EXIF-Codecs verwenden, um die Bytes der Datei zu lesen, um die Abmessungen des Bilds zu ermitteln. Wenn Sie stattdessen über eine .png-Datei verfügen, benötigen Sie einen anderen Codec und anderen Code. Die Verwendung des Windows-Eigenschaftensystems vermeidet diese Art von Problem. Wenn Sie einen neuen Dateityp implementieren, haben Sie die Möglichkeit, die vom Windows-Eigenschaftensystem angebotene einheitliche Abstraktion einzufügen und anzugeben, wie Ihre Metadaten nutzbar werden sollen. Aus diesen Gründen ist es immer besser, die vom Windows-Eigenschaftensystem bereitgestellte gemeinsame Plattform zu verwenden.

Entwicklungsszenarien

Eigenschaften werden von Produzenten und Consumern ausgedrückt. In diesem Kontext sind Producer die Erfinder von Eigenschaften im Windows-Eigenschaftensystem, und Consumer sind Anwendungen (und deren Entwickler), die Eigenschafteninformationen aus diesem System nutzen. In der folgenden Tabelle sind die Verwendungen und Teilnehmer im Windows-Eigenschaftensystem aufgeführt.

Verwendung des Windows-Eigenschaftensystems Teilnehmer
Ein Baustein, der eine erweiterbare Registrierung von Eigenschaftenbeschreibungen, eine In-Memory-Eigenschaftsspeicherimplementierung und Dienste für die Bindung an Eigenschaftshandler, Konvertierungstypen und Serialisierung von Eigenschaftsspeichern bereitstellt. Consumer
Anwendungen, die Eigenschaften auf abstrakte Weise lesen und schreiben möchten. Consumer
Eigenschaftenerfinder, die neue Eigenschaften für das Eigenschaftensystem definieren, indem sie benutzerdefinierte Eigenschaftenschemas definieren und eigene Eigenschaftenhandler entwickeln. Producer
Dateiformatbesitzer, die den Zugriff auf die eigenschaften aktivieren möchten, die in ihren benutzerdefinierten Dateiformaten gespeichert sind. Producer

 

Consumer nutzen vorhandene Eigenschaften, Schemas und Eigenschaftenhandler. Zu den zur Nutzung verfügbaren Eigenschaften gehören Lese-/Schreibeigenschaften von Eigenschaftenhandlern für unterstützte Dateitypen und können auch einige benutzerdefinierte Eigenschaften enthalten. Zu den verfügbaren Schemas gehören mindestens das Systemschema und manchmal auch andere. Ein Consumer kann eine Anwendung erstellen, um Metadaten zu nutzen und eine Ansicht basierend auf dem Künstler zu erstellen, unabhängig davon, in welchen Ordnern die Elemente gespeichert sind. Die Dateiordnerhierarchie ist irrelevant. Beispielsweise können Sie alle Songelemente eines bestimmten Sängers angeben, ohne sich Gedanken über den Speicherort solcher Elemente machen zu müssen. Dieses komplexe End-to-End-Szenario ist nicht auf das Windows-Eigenschaftensystem beschränkt, sondern umfasst mehrere verschiedene Komponenten, z. B. die Indizierungs- und Suchordner.

Eigenschaftenerfinder oder Entwickler von Drittanbietern sind Produzenten im Windows-Eigenschaftensystem. Überprüfen Sie bei der Vorbereitung der Definition einer neuen Eigenschaft zunächst den Satz von Eigenschaften, den Windows definiert. Wenn Sie eine finden, die Ihren Anforderungen entspricht, des Typs und der Semantik, die Ihrer erforderlichen Verwendung entspricht, verwenden Sie diese Eigenschaft, und erfinden Sie keine neue Eigenschaft. Wenn Sie eine neue benutzerdefinierte Eigenschaft definieren, versuchen Sie, eine Vereinbarung mit anderen Entwicklern zu erhalten, die sie möglicherweise verwenden möchten, und veröffentlichen Sie das Ergebnis dieser Vereinbarung, damit sie der Community der Benutzer dieser Eigenschaft beitreten können.

Produzenten können die Funktionen von Windows Explorer nutzen. Wenn Sie beispielsweise ein neues Bildformat schreiben und einen Eigenschaftenhandler implementieren, wird Das neue Dateiformat in Windows Explorer verfügbar. Benutzer können dann ihre Fotos markieren und ihre Sammlung von Fotos basierend auf einer beliebigen Eigenschaft im Windows-Eigenschaftensystem pivotieren. In der Tat können Entwickler von Drittanbietern alles, was Shell mit Eigenschaften macht, in ihren eigenen Anwendungen tun. Dies umfasst das Gruppieren, Sortieren, Abfragen und Anzeigen vollständiger Eigenschaften. Die Benutzererfahrung, die Windows Explorer bietet, kann größtenteils von Drittanbietern mit öffentlich verfügbaren APIs implementiert werden. Windows Explorer kann mithilfe dieser APIs ersetzt oder erweitert werden.

Aus Sicht einer Anwendung, die das Shell-Datenmodell verwendet, gibt es eine Vielzahl von Szenarien, die die Verwendung des Windows-Eigenschaftensystems beinhalten. Medienverwaltungsanwendungen sind ein prominentes Beispiel. Zu den wichtigsten Eigenschaftensystemszenarien gehören Szenarien wie das Lesen der Schlüsselwort (keyword) Eigenschaft eines Fotos oder das Festlegen der datetaken-Eigenschaft. Beispiele für End-to-End-Integrationsszenarien, die das Windows-Eigenschaftensystem ermöglicht, aber mehrere andere Komponenten erfordern, z. B. das Anzeigen aller Bilder oder das Suchen eines Dokuments, das eine Schlüsselwort (keyword) enthält.

Eigenschaften dienen sowohl Produzenten als auch Consumern, wenn sie mit Windows Search und Indizierung zusammenarbeiten. Windows Search verfügt über einen Cache mit Eigenschaftswerten, die in der Implementierung des Windows Search-Diensts (WSS) verwendet werden. Diese Eigenschaftswerte können programmgesteuert mithilfe des OLE DB-Anbieters für Windows Search oder über ISearchFolderItemFactory abgefragt werden, das Elemente in Suchergebnissen und abfragebasierten Sichten darstellt. Windows Search sammelt und speichert dann Eigenschaften, die von Filterhandlern oder Eigenschaftenhandlern ausgegeben werden, wenn ein Element wie ein Word Dokument indiziert wird. Dieser Speicher wird verworfen und neu erstellt, wenn der Index neu erstellt wird.

Hinweis

Beachten Sie, dass Änderungen, die an Attributen zuvor definierter Eigenschaften vorgenommen wurden, beim erneuten Registrieren eines Schemas möglicherweise nicht vom Indexer berücksichtigt werden. Die Lösung besteht entweder darin, den Index neu zu erstellen oder neue Eigenschaften einzuführen, die die Änderungen widerspiegeln, anstatt alte zu aktualisieren (nicht empfohlen). Weitere Informationen finden Sie unter Hinweis zu Implementern weiter unten in diesem Thema.

 

Beispielsweise möchte ein Entwickler, der eine Medienanwendung erstellt, Benutzern der Anwendung alle verfügbaren Musik eines bestimmten Künstlers anzeigen. Die Anwendung stellt dem Benutzer eine Liste der verfügbaren Künstler zur Verfügung und generiert dann eine Liste aller verfügbaren Musik des Künstlers, den der Benutzer auswählt. Oder ein Endbenutzer möchte eine Abfrage für ?artist:Beethoven? ausführen und im Laufe seiner Suche der vollständigen Liste der verfügbaren Eigenschaften zur Verfügung gestellt werden. Dieses Beispiel umfasst die Verwendung des Shell-Namespace, der Eigenschaftenhandler und/oder das Abfragen des Index über eine der folgenden Optionen:

  • Eine Shell-Datenquelle.
  • Ein OLE DB-Anbieter.
  • Eine gespeicherte Suchdatei (.search-ms), die verwendet wird, um eine Abfrage durch Navigieren zur Suchdatei in Windows Explorer oder programmgesteuerte Bindung an IShellFolder zu initiieren.

Hinweis

Obwohl die System.Kind Eigenschaft nicht an diesem Medienanwendungsszenario teilnimmt, kann sie zum Erstellen einer Abfrage verwendet werden, die alle SEARCH-MS-Dateien in einem bestimmten Bereich zurückgibt.

 

Die bevorzugte Methode für den Zugriff auf die Such-APIs und das Erstellen von Windows Search-Anwendungen ist eine Shell-Datenquelle. ISearchFolderItemFactory ist eine Komponente, die Instanzen der Datenquelle des Suchordners erstellen kann. Dabei handelt es sich um eine Art "virtuelle" Datenquelle, die von der Shell bereitgestellt wird und Abfragen über andere Datenquellen im Shell-Namespace ausführen und Ergebnisse auflisten kann. Dies kann entweder mithilfe des Indexers oder durch manuelles Auflisten und Überprüfen von Elementen in den angegebenen Bereichen durchgeführt werden.

Drittanbieterentwickler können Anwendungen erstellen, die die Daten im Index über programmgesteuerte Abfragen nutzen, und die Daten im Index für benutzerdefinierte Datei- und Elementtypen erweitern, die von Windows Search indiziert werden. Wenn Sie Abfrageergebnisse in Windows Explorer anzeigen möchten, müssen Sie eine Shell-Datenquelle implementieren, bevor Sie einen Protokollhandler zum Erweitern des Indexes erstellen können. Wenn jedoch alle Abfragen programmgesteuert sind (z. B. über OLE DB) und vom Code der Anwendung anstelle der Shell interpretiert werden, ist ein Shell-Namespace weiterhin bevorzugt, aber nicht erforderlich. Ein Protokollhandler ist erforderlich, damit Windows Informationen zu Dateiinhalten abrufen kann, z. B. Elemente in Datenbanken oder benutzerdefinierte Dateitypen. Während Windows Search den Namen und die Eigenschaften der Datei indizieren kann, hat Windows keine Informationen über den Inhalt der Datei. Daher können solche Elemente nicht in der Windows-Shell indiziert oder verfügbar gemacht werden. Wenn Sie einen benutzerdefinierten Protokollhandler implementieren, können Sie diese Elemente verfügbar machen. Eine Liste der Handler, die vom Entwicklerszenario identifiziert werden, das Sie erreichen möchten, finden Sie unter "Übersicht über Handler" in Windows Search als Entwicklungsplattform.

Hinweis

Eine Shell-Datenquelle wird manchmal als Shellnamespaceerweiterung bezeichnet. Ein Handler wird manchmal als Shellerweiterung oder Shellerweiterungshandler bezeichnet.

 

Hinweis für Implementierer

Aufgrund potenzieller Schwierigkeiten, die der Indexer beim Verwenden des Schemas des Eigenschaftensystems haben kann, ist es wichtig, dass Sie Attribute für die erste Version des Schemas sorgfältig und strategisch definieren. Alle Änderungen an Attributen (Typ, Spaltenbreite, ob indexierbar) werden nach der Registrierung eines Schemas nicht mehr in der Datenbank widerspiegelt. Die einzige Möglichkeit, diese Änderungen erkennen zu lassen, nachdem das Schema einmal in einem System registriert wurde, wäre entweder, den Index neu zu erstellen und dann das neue Schema zu registrieren, oder das Schema zu registrieren und dann eine neue Eigenschaft für jede nachfolgende Version zu erstellen. z. B PKEY_GroupName_PropertyNameV2. , PKEY_GroupName_PropertyNameV3usw. Es wird nicht empfohlen, neue Eigenschaften auf diese Weise zu erstellen, da sich mehrere zusätzliche Spalten auf die Systemleistung auswirken können.

Dokumentation zum Windows-Eigenschaftensystem

Der Rest dieser Dokumentation enthält die folgenden Abschnitte:

Zusätzliche Ressourcen

Entwicklerhandbuch für Windows-Eigenschaftensysteme

Eigenschaftensystemreferenz

Eigenschaftensystem-Codebeispiele