Partager via


Verrouillage et déverrouillage des pointeurs de flux

Chaque pointeur de flux conserve un verrou status : verrouillé ou déverrouillé.

Les pointeurs de flux verrouillés référencent les données dans la file d’attente. Les trames de données pointées par des pointeurs de flux verrouillés ne peuvent pas être annulées. Par conséquent, les minidrivers doivent réduire le temps qu’ils passent à maintenir des pointeurs de flux verrouillés.

Un pointeur de flux déverrouillé n’est pas garanti pour référencer une trame de données dans la file d’attente. En maintenant un pointeur de flux déverrouillé, un minidriver peut conserver un pointeur de données, tout en autorisant l’annulation de l’image.

Il est possible d’accéder aux données pointées par un pointeur de flux déverrouillé. Si la routine CancelCallback que vous fournissez dans KsStreamPointerClone appelle KsStreamPointerDelete, vous devez synchroniser CancelCallback et tout accès aux données qu’il effectue. Le minidriver doit s’assurer que la routine de rappel d’annulation ne supprime pas le pointeur de flux pendant qu’un autre thread l’utilise.

Si la routine de rappel d’annulation n’appelle pas KsStreamPointerDelete, la synchronisation peut ne pas être nécessaire.

Pour verrouiller un pointeur de flux, appelez KsStreamPointerLock. Pour déverrouiller un pointeur de flux, appelez KsStreamPointerUnlock.

Lorsqu’un IRP est annulé, AVStream appelle les rappels d’annulation pour tous les pointeurs de flux déverrouillés qui pointent vers des trames dans l’IRP.

Déverrouillez les pointeurs de flux de bord de début et de fin uniquement lorsqu’ils ne sont pas utilisés.