Partager via


Broches KS

Le minidriver fournit une structure KSPIN_DESCRIPTOR pour chaque type de broche à instancier. Une structure de descripteur de broche est appelée fabrique de broches. Chaque fabrique de broches peut instancier une ou plusieurs instances de broches d’un type particulier. Une fabrique de broches contient plusieurs tableaux qui décrivent le type de broche que ce descripteur instancie.

Le minidriver spécifie une ou plusieurs catégories KS auxquelles appartiennent les broches créées par ce descripteur dans le membre Categories de KSPIN_DESCRIPTOR. KS utilise des catégories pour connecter des instances de broche lorsqu’il génère un graphe de filtre. La propriété KSPROPERTY_TOPOLOGY_CATEGORIES requêtes pour le tableau de catégories fonctionnelles prises en charge par un pilote.

Un minidriver fournit un fichier INF qui enregistre un ou plusieurs noms d’appareils pin. Lors de l’installation, le système d’exploitation charge les noms et les catégories correspondantes dans le registre système. Les clients peuvent ensuite effectuer des appels de fichier de création avec ces noms d’appareil pour instancier des épingles.

Les clients en mode utilisateur appellent la fonction Win32 CreateFile avec le nom de l’appareil. Par exemple, « \\.\filters\audio\default renderer » peut être un lien vers le périphérique audio qui a été configuré pour la sortie par défaut. Les clients en mode noyau appellent ZwCreateFile à partir du mode noyau. Une fois que la routine de création de fichier retourne un handle de fichier, les clients KS communiquent avec les instances de broche via KS Properties.

Dans les structures de descripteur de broche, le minidriver présente des tableaux de structures KSPIN_INTERFACE et KSPIN_MEDIUM structures qui spécifient les interfaces et les supports pris en charge par cette fabrique de broches . KSPIN_DESCRIPTOR est également l’endroit où le minidriver spécifie les plages de données valides pour les broches créées par cette fabrique. Pour ce faire, il fournit un pointeur vers un tableau de structures KSDATARANGE . Le minidriver spécifie également les directions des données et du flux de communication pour les nouvelles broches créées par cette fabrique de broches.

Un minidriver permet la découverte au moment de l’exécution des fabriques de broches en prenant en charge l’ensemble de propriétés KSPROPSETID_Pin .

Pour créer une connexion de broche, appelez la routine KsCreatePin . Dans cet appel, le minidriver passe un pointeur vers une structure de type KSPIN_CONNECT qui décrit la connexion demandée. Lorsqu’une broche est créée, le filtre voit la nouvelle broche comme un objet de fichier subordonné à l’objet de fichier pour ce filtre.

Le minidriver appelle KsValidateConnectRequest avec les structures de descripteurs fournies dans le IRP_MJ_CREATE résultant. Cette routine valide ces structures et retourne un pointeur vers la structure de connexion et l’objet de fichier racine.

Les minidrivers utilisent les membres DataFlow et Communication des structures KSPIN_DESCRIPTOR pour définir les spécificités de broche suivantes :

  • Broche source IRP par rapport à la broche du récepteur IRP

    Une broche source IRP émet des IRPs ; une broche de récepteur IRP les reçoit. Un client en mode utilisateur envoie les demandes d’E/S directement à une broche de récepteur IRP via le handle de fichier approprié. Les clients utilisent KSPROPERTY_PIN_COMMUNICATION pour case activée si les données circulent dans ou hors d’un type de broche.

  • Broche de source de données par rapport à la broche du récepteur de données

    Une broche de source de données est une broche de sortie sur un filtre ; une broche de récepteur de données est une broche d’entrée. La propriété d’être une source de données ou un récepteur est indépendante d’être une source ou un récepteur IRP. Par exemple, le client peut connecter une source de données, une broche de récepteur IRP à un récepteur de données, une broche source IRP. Les clients utilisent KSPROPERTY_PIN_DATAFLOW pour case activée si les données circulent dans ou hors d’un type de broche.

Lors de l’arrêt d’une connexion, le handle de la broche source doit être fermé avant que l’objet de fichier sous-jacent soit détruit. Si la broche source s’appuie sur des ressources fournies par la broche du récepteur, il est de la responsabilité de la broche récepteur d’avertir la source lorsque la connexion est terminée.

Un client interagit avec une broche de diffusion en continu du noyau en appelant la routine DeviceIoControl (décrite dans la documentation Microsoft Windows SDK) avec IRP_MJ_DEVICE_CONTROL. L’appelant identifie sa demande par le code de contrôle d’E/S qu’il place dans Parameters.DeviceIoControl.IoControlCode dans la structure d’emplacement de la pile d’E/S.

Pour prendre en charge les demandes, le minidriver fournit un pointeur vers une structure KSDISPATCH_TABLE dans un appel à KsAllocateObjectHeader.

Les demandes d’écriture contiennent un pointeur vers un tableau de structures KSSTREAM_HEADER qui à leur tour contiennent des pointeurs pour diffuser des données. Les demandes de lecture contiennent un pointeur vers un tableau de structures d’en-tête vides où les données de lecture doivent être retournées.