Erweiterungseinheit Plug-In Architektur
Der USB-Videoklassentreiber macht Erweiterungseinheiten als Knoten im USB Video KS-Proxyfilter verfügbar. Die Erweiterungseinheit-Steuerelemente werden im Benutzermodus als Eigenschaft auf dem Knoten vom Typ KSNODETYPE_DEV_SPECIFIC verfügbar gemacht. Die GUID des Eigenschaftensatzes entspricht der GUID des Deskriptors für die Erweiterungseinheit.
Die einzelnen Erweiterungseinheit-Steuerelemente sollten kontinuierlich von 1 bis zu einem Höchstwert n nummeriert werden. Diese Steuerelemente werden direkt Eigenschaftenbezeichnern (IDs) im Eigenschaftensatz der Erweiterungseinheit zugeordnet, und auf sie kann mithilfe von KSPROPERTY-Standardanforderungen über IKsControl zugegriffen werden.
Als Reaktion auf Eigenschaftenanforderungen von Anwendungen gibt der UVC-Treiber Eigenschaftswerte zurück, für die das MemberFlags-Element der KSPROPERTY_MEMBERSHEADER-Struktur ausschließlich auf KSPROPERTY_MEMBER_RANGES festgelegt ist. UVC unterstützt keine Abgestuften Bereiche oder Standardwerte der Erweiterungseinheit von beliebiger Länge.
Um Eigenschaften der Erweiterungseinheit für eine Anwendung verfügbar zu machen, können Sie eine Plug-In-DLL im Benutzermodus schreiben, die eine COM-API verfügbar macht. Sie können diese API implementieren, indem Sie Anforderungen an die KS-Eigenschaft festlegen, indem Sie die IKsControl-Schnittstelle verwenden. Vidcap.ax lädt das Knotenschnittstellen-Plug-In basierend auf bestimmten Registrierungseinträgen automatisch. Eine Anwendung kann mithilfe von IKsTopologyInfo::CreateNodeInstance auf die Schnittstelle zugreifen, gefolgt von einem Aufruf von QueryInterface für das Knotenobjekt, um die erforderliche COM-API abzurufen.
Die folgenden Elemente sind erforderlich, um ein Erweiterungseinheit-Plug-In zu schreiben und zu verwenden:
Eine Header- und cpp-Datei, die die Erweiterungseinheiten-API und eine Schnittstelle mit dem Namen IKsNodeControl implementiert. Vidcap.ax verwendet die IKsNodeControl-Schnittstelle, um das Plug-In über den Erweiterungsknotenbezeichner zu informieren und eine instance von IKsControl bereitzustellen. Beispielcode für diese Dateien finden Sie unter Beispielerweiterungseinheit-Plug-In-DLL.
Eine rgs-Datei , die die Knotenschnittstellen und Klassen-IDs (CLSIDs) unter dem Registrierungsunterschlüssel HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID registriert. Die Einträge in diesem Registrierungsunterschlüssel enthalten die Binärwerte für die Schnittstellen-ID (IID) und CLSID. Weitere Informationen finden Sie unter Beispielregistrierungseintrag für UVC-Erweiterungseinheiten.
Eine Anwendung, die diese Schnittstelle aufruft. Die Anwendung erstellt zunächst mithilfe von IKsTopologyInfo::CreateNodeInstance einen Knoten instance mit der richtigen Knoten-ID. Die Anwendung ruft dann QueryInterface auf dem Knoten auf, instance, um die erforderliche Erweiterungseinheit-Schnittstelle abzurufen. Weitere Informationen finden Sie unter Beispielanwendung für UVC-Erweiterungseinheiten und Unterstützen von Autoupdateereignissen mit Erweiterungseinheiten.
Die Codebeispiele in diesem Abschnitt veranschaulichen all diese Elemente. Informationen zum Erstellen des Beispielsteuerelements für die Erweiterungseinheit finden Sie unter Erstellen des Beispiel-Plug-Ins und des zugehörigen Beispielanwendungscodes.
Nachdem die Plug-In-DLL registriert wurde und die oben beschriebenen Registrierungseinträge bereitgestellt wurden, lädt Vidcap.ax automatisch die relevanten Knotenschnittstellen, wenn der Knoten instance erstellt wird.
Hinweis Ab Windows XP SP2 wird der Erweiterungseinheitseigenschaftssatz nur auf dem Knoten und nicht für den Filter unterstützt.
Überlegungen zur Registrierung
Um die IID- und CLSID der vom Plug-In exportierten Schnittstelle zu registrieren, können Sie die DLL-Registrierung oder eine gerätespezifische Setupinformationsdatei (INF) verwenden.
Eine rgs-Beispieldatei, die die erforderlichen Werte für die Registrierungseinträge anzeigt, finden Sie unter Beispielregistrierungseintrag für UVC-Erweiterungseinheiten. In diesem Thema wird außerdem veranschaulicht, wie Sie eine gerätespezifische INF-Datei schreiben, um ein USB-Videogerät zu installieren und die Plug-In-DLL zu registrieren. Sie können entweder eine DLL-Registrierung oder eine gerätespezifische INF-Datei auswählen, basierend auf Ihren spezifischen Anforderungen.
Schaltschema
Das folgende schematische Diagramm zeigt die Beziehungen zwischen den verschiedenen Modulen, die am Schreiben und Verwenden eines Erweiterungseinheit-Plug-Ins beteiligt sind. Insbesondere verfolgt es die Verbindung von der Anwendung über die Plug-In-DLL bis zum Treiber und schließlich zur Erweiterungseinheit auf dem Gerät selbst. Das Schema veranschaulicht auch die verschiedenen beteiligten GUIDs; identische Werte werden durch die Verwendung einer übereinstimmenden Farbe hervorgehoben.
Ereignismechanismen
Die USB-Videoklasse unterstützt Automatische Aktualisierungsereignisse, bei denen das Gerät den Hosttreiber über Änderungen an seinen Steuerelementen benachrichtigt. Der Microsoft USB Video Class-Treiber unterstützt dieses Konzept, indem Anwendungen sich für Ereignisse mit automatischen Updates registrieren lassen. Der Prozess zum Abrufen von Updates umfasst drei Schritte:
Registrieren für Updateereignisse mithilfe von KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE
Lauschen auf Ereignisse im Benachrichtigungsereignishandle
Abbrechen der Benachrichtigung nach Abschluss