Einführung in Streamzeiger
Im älteren Streamklassenmodell ist der Minidriver für die Verwaltung eigener SRB-Warteschlangen (Data Stream Request Block) verantwortlich. AVStream stellt diese Funktionalität durch Streamzeiger-Abstraktion bereit. Ein Streamzeiger ist ein Verweis auf einen bestimmten AVStream-Datenrahmen.
Minidriver, die pinzentrierte Verarbeitung (die meisten Hardwaretreiber) verwenden, verwenden Streamzeiger, um Pinwarteschlangen zu verwalten. Jeder Pin verfügt über eine unabhängige Warteschlange mit Datenpuffern. Wenn ein Datenpaket an der Pin eingeht (entweder eine Lese- oder Schreibanforderung), fügt AVStream das Paket der Warteschlange hinzu und ruft möglicherweise den Prozessversand der Pin auf.
Minidriver, die filterorientierte Verarbeitung verwenden, sollten Streamzeiger nicht direkt verwenden. Weitere Informationen finden Sie unter Filterzentrische Verarbeitung .
Standardmäßig verfügt jede Warteschlange über einen führenden Streamzeiger. Optional kann es einen nachgestellten Edgestreamzeiger haben, wenn das nachfolgende Edgeflaggen angegeben ist. Der Minidriver kann neue Streamzeiger erstellen, indem KsStreamPointerClone aufgerufen wird.
Sie können einen Streamzeiger nur in eine Richtung verschieben: in einen neueren Frame. Dies wird als Voranschreiten des Streamzeigers bezeichnet.
Weiterentwicklung eines Streamzeigers
Wenn Sie einen Streamzeiger voranbringen, verschieben Sie ihn in einen neueren Frame oder verschieben ihn um eine gewisse Anzahl von Bytes innerhalb des aktuellen Frames. Für instance kann der Minidriver einen Streamzeiger von der ersten Frameeinkunft bis zum zweiten Frame-Eingang voranbringen.
Um einen Streamzeiger voranzutreiben, kann ein pinzentrischer Filter entweder KsStreamPointerAdvance oder KsStreamPointerUnlock aufrufen, wobei der Eject-Parameter auf TRUE festgelegt ist.
Frameverweisanzahl
Frames mit Streamzeigern, die auf sie verweisen, werden ebenso gezählt wie Frames, die sich im Fenster zwischen dem führenden und dem nachfolgenden Rand befinden.
Wenn ein Minidriver mit einem Streamzeiger fertig ist, kann er optional KsStreamPointerSetStatusCode aufrufen, um einen Fehlercode anzugeben, mit dem das angegebene E/A-Anforderungspaket (IRP) abgeschlossen werden soll. Der Minidriver muss dann KsStreamPointerDelete aufrufen. AVStream dekrementiert dann die Verweisanzahl für den Frame, auf den der gelöschte Streamzeiger zuvor verwiesen hat. Die führenden und nachfolgenden Streamzeiger können nicht gelöscht werden.