Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Filter, die Allokatoren für On-Board-Speicher oder andere geräteabhängige Speichermethoden erfordern, können einen bestimmten Allokator bereitstellen, indem allocator-Eigenschaften und Methoden unterstützt werden. Weitere Informationen finden Sie unter KSPROPERTY_STREAM_ALLOCATOR.
Ein Filter empfängt eine IRP_MJ_CREATE vom Typ KSCREATE_REQUEST_ALLOCATOR, der die Rahmenoptionen für den Allocator angibt. Die Allocator-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, wird als Reaktion auf das IRP ein Fehlercode zurückgegeben. Andernfalls fügt der Filter einen Zeiger auf eine Struktur zum FsContext-Element des Dateiobjekts hinzu und bearbeitet die daraus resultierenden Allocator-Anforderungen.
Wenn der Filter die an die Streamingschnittstelle übergebenen Puffer in-place ändern soll, setzt der Benutzermodus-Client das KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER-Flag in der relevanten KSALLOCATOR_FRAMING-Struktur.
Für den Allocator stehen zwei Schnittstellen zur Verfügung. Zunächst müssen alle Allokatoren die IRP-basierte KSMETHODSETID_StreamAllocator unterstützen. Allocatoren, die diesen Mechanismus verwenden, sind auf eine maximale Anzahl zugewiesener Frames beschränkt. Anfragen zum Zuweisen von Frames über diesen Grenzwert hinaus werden als ausstehend markiert.
Zweitens kann der Minidriver den Zugriff auf die Funktionstabellen unterstützen, wenn der Zuordnungspool-Typ auf der DISPATCH_LEVEL bedient werden kann. Das Bereitstellen des Funktionstabellenzugriffs ist optional. Unterstützen Sie dazu die Eigenschaften in KSPROPSETID_StreamAllocator.
Die DISPATCH_LEVEL-Schnittstelle funktioniert wie folgt:
Wenn eine Zuordnungsanforderung an den Allocator übermittelt wird, gibt der Allocator einen Zeiger auf einen Frame zurück, wenn eins verfügbar ist. Falls nicht, wird sofort NULL zurückgegeben.
Wenn eine kostenlose Anforderung an den Allocator übermittelt wird, signalisiert der Allocator das Stream-Allocator-Ereignis "free frame", das den Client darüber informiert, dass ein kostenloser Frame verfügbar ist. Zusätzlich, wenn Zuweisungsanfrage-IRPs auf ihre Bearbeitung warten, muss der Allocator ein Arbeitselement planen (wenn der aktuelle IRQL nicht PASSIVE_LEVEL ist) und die Anforderung mit dem freien Frame abschließen.
Es ist sowohl für die DISPATCH_LEVEL-Schnittstelle als auch für die IRP-basierte Schnittstelle möglich, freie Frames zu fordern. KS synchronisiert diese Warteschlange mithilfe des Abbruch-Spinlocks.