Épingler les fabriques
Les fabriques de code pin d’un filtre audio décrivent tous les codes confidentiels que le filtre peut instancier. Comme mentionné précédemment, un pilote de miniport audio stocke les informations de code confidentiel dans un tableau de structures PCPIN_DESCRIPTOR . Chaque structure spécifie une fabrique de code confidentiel et une fabrique de code confidentiel est identifiée par son index dans le tableau. Cet index est fréquemment appelé ID PIN.
Une structure PCPIN_DESCRIPTOR contient un tableau Automation et une structure KSPIN_DESCRIPTOR .
La structure KSPIN_DESCRIPTOR contient les informations suivantes sur les codes confidentiels dans la fabrique de code confidentiel :
Sens du filtre relatif au filtre de données
direction relative au filtre du workflow de communication (dans toutes les versions Windows actuelles, les filtres KS utilisent les paquets irp pour la communication.)
Catégorie de code confidentiel
Nom convivial
Fonctionnalités d’instance
Fonctionnalités de format de données
Les membres Category et Name de la structure spécifient la catégorie pin et le nom convivial de la fabrique. Pour chaque fabrique de code confidentiel dans le filtre, le pilote de miniport spécifie une combinaison de GUID de catégorie et de nom qui, ensemble, identifient de façon unique la fabrique de code confidentiel. Si au moins deux usines de code confidentiel partagent la même valeur de catégorie , chaque fabrique de code confidentiel a une valeur de nom qui la distingue des autres. Si une seule fabrique de code confidentiel a une valeur de catégorie particulière, cette valeur suffit pour identifier la fabrique de code confidentiel, et la valeur de nom de cette fabrique de code confidentiel peut être définie sur null. Pour obtenir un exemple de code, consultez exposition de la topologie de filtre. Pour plus d’informations sur les catégories de code confidentiel, consultez pin Category Property.
Une fabrique de code confidentiel spécifie la plage de formats de données qu’elle prend en charge en tant que tableau de structures KSDATARANGE étendues :
Une fabrique de code qui prend en charge une plage de formats de données Wave ou DirectSound pour son flux d’entrée ou de sortie spécifie un tableau de structures KSDATARANGE_AUDIO .
Une fabrique de code qui prend en charge une plage de formats de données MIDI ou DirectMusic pour son flux d’entrée ou de sortie spécifie un tableau de structures de KSDATARANGE_MUSIC .
KSDATARANGE_AUDIO et KSDATARANGE_MUSIC sont des versions étendues de KSDATARANGE. Pour obtenir des exemples de ces deux types de plages de données, consultez formats de données audio et plages de données.
Avant de connecter une broche de récepteur sur un filtre à un code PIN source sur un autre filtre, un générateur de graphiques (par exemple, le pilote système SysAudio) peut rechercher dans les plages de données un format compatible. Le générateur de graphiques appelle généralement le Gestionnaire d’intersection de donnéesdu filtre, ce qui permet au filtre de choisir un format compatible.
Un filtre peut avoir plusieurs fabriques de code confidentiel, et une fabrique de code confidentiel peut prendre en charge plusieurs instances de code confidentiel.
Avoir plusieurs fabriques de codes confidentiels sur un filtre est utile pour distinguer les chemins de données distincts pour les différents types de données qui transitent par le filtre. Par exemple, une fabrique de codes confidentiels peut prendre en charge les flux de données PCM, et une autre fabrique de code confidentiel peut prendre en charge les flux AC-3.
Un filtre unique peut prendre en charge le rendu et la capture des flux simultanément. Les chemins d’accès de rendu et de capture ont des ensembles distincts de fabriques de filtres.
Le fait de disposer de plusieurs instances de code confidentiel sur une fabrique de code confidentiel implique souvent la combinaison, auquel cas le filtre contient un nœud de somme (KSNODETYPE_SUM).
Comme les filtres, les codes confidentiels sont des objets de noyau et sont identifiés par des handles de noyau. Le descripteur d’une instance de code confidentiel est créé en appelant KsCreatePin. En tant qu’objet de noyau, un code confidentiel peut être spécifié comme cible d’un IRP. Un client du pilote spécifie le handle de code confidentiel lors de l’envoi d’une demande IOCTL à un code confidentiel.
Lors de la création d’un graphique de filtre audio, SysAudio lie un filtre à un autre en connectant leurs codes confidentiels. Une broche source d’un filtre peut être connectée à la broche de récepteur d’un autre filtre. Les données et les IRP de la broche source sont acheminés vers le code pin du récepteur via cette connexion. Pour établir la connexion, un générateur de graphiques (généralement SysAudio) crée d’abord le code PIN source en appelant KsCreatePin , puis crée le code confidentiel du récepteur en appelant de nouveau KsCreatePin . Toutefois, dans le deuxième appel, le client spécifie que le nouveau code pin du récepteur doit être connecté au code PIN source qui a été créé lors du premier appel.