Sperren und Entsperren von Streamzeigern
Jeder Streamzeiger verwaltet eine Sperre status: entweder gesperrt oder entsperrt.
Gesperrte Streamzeiger verweisen garantiert auf Daten in der Warteschlange. Datenframes, auf die von gesperrten Datenstromzeigern verwiesen wird, können nicht abgebrochen werden. Daher sollten Minidriver die Zeit minimieren, die sie mit gesperrten Streamzeigern verbringen.
Ein entsperrter Datenstromzeiger verweist nicht garantiert auf einen Datenrahmen innerhalb der Warteschlange. Durch Halten eines entsperrten Datenstromzeigers kann ein Minidriver einen Datenzeiger beibehalten, aber trotzdem zulassen, dass der Frame abgebrochen wird.
Es ist möglich, auf Daten zuzugreifen, auf die durch einen entsperrten Streamzeiger verwiesen wird. Wenn die CancelCallback-Routine , die Sie in KsStreamPointerClone bereitstellen, KsStreamPointerDelete aufruft, sollten Sie CancelCallback und alle datenzugriffe synchronisieren, die er ausführt. Der Minitreiber muss sicherstellen, dass der Streamzeiger nicht von der Abbruchrückrufroutine gelöscht wird, während er von einem anderen Thread verwendet wird.
Wenn die Abbruchrückrufroutine KsStreamPointerDelete nicht aufruft, ist die Synchronisierung möglicherweise nicht erforderlich.
Rufen Sie KsStreamPointerLock auf, um einen Streamzeiger zu sperren. Rufen Sie KsStreamPointerUnlock auf, um einen Streamzeiger zu entsperren.
Wenn ein IRP abgebrochen wird, ruft AVStream die Abbruchrückrufe für alle entsperrten Datenstromzeiger auf, die auf Frames innerhalb des IRP verweisen.
Entsperren Sie die führenden und nachgestellten Edgestreamzeiger nur, wenn sie nicht verwendet werden.