Freigeben über


Filtern spezifischer Zuteilungen

Filter, die Zuweisungen für den onboard-Speicher oder andere geräteabhängige Speichermethoden erfordern, können einen bestimmten Zuteilungsgeber bereitstellen, indem sie Allocatoreigenschaften und -methoden unterstützen. Weitere Informationen finden Sie unter KSPROPERTY_STREAM_ALLOCATOR.

Ein Filter empfängt einen IRP_MJ_CREATE vom Typ KSCREATE_REQUEST_ALLOCATOR die Rahmenoptionen für den Zuordnungsgeber angibt. Die Erstellungsroutine des Minidrivers überprüft die Erstellungsanforderung durch Aufrufen von KsValidateAllocatorCreateRequest. Wenn der Aufruf erfolgreich ist, gibt diese Routine einen Zeiger auf die relevante KSALLOCATOR_FRAMING-Struktur zurück.

Wenn der Filter die Rahmenanforderungen nicht erfüllen kann, gibt er als Reaktion auf die IRP einen Fehlercode zurück. Andernfalls fügt der Filter einen Zeiger an eine Struktur an das FsContext-Element des Dateiobjekts an und verarbeitet die resultierenden Zuordnungsanforderungen.

Wenn Puffer, die an die Streamingschnittstelle übergeben werden, vom Filter an Ort und Stelle geändert werden sollen, legt der Client im Benutzermodus das KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER-Flag für die relevante KSALLOCATOR_FRAMING-Struktur fest.

Dem Zuteilungsgeber stehen zwei Schnittstellen zur Verfügung. Zunächst müssen alle Zuteilungen die IRP-basierte KSMETHODSETID_StreamAllocator unterstützen. Allocators, die diesen Mechanismus verwenden, sind auf eine maximale Anzahl von zugeordneten Frames beschränkt. Anforderungen zum Zuweisen von Frames über diesen Grenzwert hinaus werden als ausstehend markiert.

Zweitens kann der Minidriver den Zugriff auf Funktionstabellen unterstützen, wenn der Zuordnungspooltyp auf DISPATCH_LEVEL gewartet werden kann. Die Bereitstellung des Funktionstabellenzugriffs ist optional. Hierzu unterstützen Sie die Eigenschaften in KSPROPSETID_StreamAllocator.

Die DISPATCH_LEVEL-Schnittstelle funktioniert wie folgt:

Wenn eine Zuordnungsanforderung an den Zuteilungsgeber übermittelt wird, gibt der Zuteilungsgeber einen Zeiger auf einen Frame zurück, sofern dieser verfügbar ist. Andernfalls wird sofort NULL zurückgegeben.

Wenn eine kostenlose Anforderung an den Zuteilungsgeber gesendet wird, signalisiert der Allocator das Streamzuteilungsereignis "Free Frame" und benachrichtigt den Client darüber, dass ein freier Frame verfügbar ist. Darüber hinaus muss der Zuordnungsanforderungs-IRPs ein Workerelement planen (wenn der aktuelle IRQL nicht PASSIVE_LEVEL ist) und die Anforderung mit dem freien Frame abschließen.

Es ist möglich, dass sowohl die DISPATCH_LEVEL-Schnittstelle als auch die IRP-basierte Schnittstelle freie Frames erhalten. KS synchronisiert diese Warteschlange mithilfe der Drehsperre abbrechen.