Delen via


StreamPointers vergrendelen en ontgrendelen

Elke streampointer behoudt een vergrendelingsstatus: vergrendeld of ontgrendeld.

Vergrendelde stroomaanwijzers garanderen een verwijzing naar gegevens in de wachtrij. Gegevensframes waarnaar door vergrendelde streamaanwijzers wordt verwezen, kunnen niet worden geannuleerd. Daarom moeten minidrivers de tijd minimaliseren die ze besteden aan vergrendelde stroompointers.

Een ontgrendelde streamaanwijzer verwijst niet gegarandeerd naar een gegevensframe in de wachtrij. Door een ontgrendelde stroomaanwijzer vast te houden, kan een minidriver een gegevensaanwijzer behouden, maar kan het frame nog steeds worden geannuleerd.

Het is mogelijk om toegang te krijgen tot gegevens waarnaar wordt verwezen door een ontgrendelde streamaanwijzer. Als de CancelCallback-routine die u opgeeft in KsStreamPointerCloneKsStreamPointerDelete aanroept, moet u CancelCallback en alle gegevenstoegang synchroniseren die wordt uitgevoerd. De minidriver moet ervoor zorgen dat de terugbelroutine voor annulering de streamaanwijzer niet verwijdert terwijl een andere thread deze gebruikt.

Als de terugbelroutine voor annulering geen KsStreamPointerDelete aanroept, is synchronisatie mogelijk niet nodig.

Als u een streampointer wilt vergrendelen, roept u KsStreamPointerLock aan. Als u een streampointer wilt ontgrendelen, roept u KsStreamPointerUnlock aan.

Wanneer een IRP wordt geannuleerd, roept AVStream de annuleringsaanroepbacks aan voor alle ontgrendelde streamaanwijzers die verwijzen naar frames binnen de IRP.

Ontgrendel de aanwijsers voor de voor- en achterrand van de stroom alleen wanneer ze niet in gebruik zijn.