Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez le mutex de l'appareil pour synchroniser les objets dans la hiérarchie, de l'appareil aux filtres. Chaque appareil AVStream a un seul mutex associé à l'appareil. La création et la destruction des usines de filtres et des filtres sont synchronisées avec ce mutex. Certaines opérations de plug-and-play et de gestion de l’alimentation sont également synchronisées avec ce mutex. Le minidriver se concentre sur deux problèmes principaux concernant le mutex de l'appareil.
La hiérarchie d’objets est garantie d’être stable uniquement entre l’appareil et les filtres individuels si le mutex de l’appareil est conservé. Par conséquent, le minidriver doit obtenir le mutex de l’appareil avant de créer manuellement des fabriques de filtres en appelant KsCreateFilterFactory. Le minidriver doit également obtenir le mutex de l’appareil avant de parcourir la hiérarchie d’objets en appelant les fonctions KsXxxGetFirstChildXxx et KsXxxGetNextSiblingXxx .
AVStream maintient le mutex de l’appareil pour le minidriver lorsqu’il reçoit les demandes suivantes :
Notifications de mise en veille et de réveil sur les filtres et les épingles. Consultez KsFilterRegisterPowerCallbacks et KsPinRegisterPowerCallbacks.
Il est important de noter que le mutex d’appareil ne peut pas être obtenu de manière récursive. Considérez l'exemple suivant. AVStream reçoit une notification de veille. Comme décrit ci-dessus, il prend le mutex de l’appareil pour le compte du minidriver. Si AVStream appelle ensuite une routine de rappel fournie par un minidriver dans le contexte du thread A, ce minidriver ne doit pas tenter par la suite d’obtenir le mutex du périphérique dans le thread A. Cela entraînerait un blocage du thread A.
AVStream obtient souvent des mutex de contrôle de filtre pendant que le mutex de l’appareil est déjà conservé. Par conséquent, en règle générale, un thread qui a pris un mutex de contrôle de filtre ne doit pas ensuite prendre le mutex du périphérique.
Pour manipuler le mutex d’appareil, utilisez les fonctions suivantes :