Condividi tramite


Blocco e sblocco dei puntatori di flusso

Ogni puntatore di flusso mantiene uno stato di blocco: bloccato o sbloccato.

I puntatori di flusso bloccati sono garantiti per fare riferimento ai dati nella coda. Non è possibile annullare i frame di dati a cui puntano i puntatori di flusso bloccati. Di conseguenza, i minidriver devono ridurre al minimo il tempo trascorso tenendo i puntatori di flusso bloccati.

Un puntatore di flusso sbloccato non è garantito fare riferimento a un frame di dati all'interno della coda. Tenendo premuto un puntatore di flusso sbloccato, un minidriver può conservare un puntatore dati, ma comunque consentire l'annullamento del frame.

È possibile accedere ai dati a cui punta un puntatore di flusso sbloccato. Se la routine CancelCallback fornito in KsStreamPointerClone chiama KsStreamPointerDelete, è necessario sincronizzare CancelCallback e qualsiasi accesso ai dati eseguito. Il minidriver deve assicurarsi che la routine di callback di annullamento non elimina il puntatore di flusso mentre un altro thread lo usa.

Se la routine di callback di annullamento non chiama KsStreamPointerDelete, la sincronizzazione potrebbe non essere necessaria.

Per bloccare un puntatore di flusso, chiamare KsStreamPointerLock. Per sbloccare un puntatore di flusso, chiamare KsStreamPointerUnlock.

Quando viene annullata un'IRP, AVStream chiama i callback di annullamento per tutti i puntatori di flusso sbloccati che puntano ai frame all'interno dell'IRP.

Sbloccare i puntatori di flusso perimetrali iniziali e finali solo quando non sono in uso.