Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Filtry, které vyžadují přidělování paměti na palubě nebo jiné metody úložiště závislé na zařízení, můžou poskytnout konkrétní alokátor podporou vlastností a metod alokátoru. Další informace najdete v tématu KSPROPERTY_STREAM_ALLOCATOR.
Filtr obdrží IRP_MJ_CREATE typu KSCREATE_REQUEST_ALLOCATOR, který určuje možnosti rámování pro alokátor. Rutina vytvoření alokátoru minidriveru ověří požadavek vytvoření voláním KsValidateAllocatorCreateRequest. Pokud je volání úspěšné, vrátí tato rutina ukazatel na příslušnou KSALLOCATOR_FRAMING strukturu.
Pokud filtr nesplňuje požadavky na rámování, vrátí kód selhání v reakci na IRP. Jinak filtr připojí ukazatel ke struktuře do členu FsContext objektu souboru a zpracovává příchozí žádosti alokátoru.
Pokud by měl filtr upravovat vyrovnávací paměti přímo v daném místě při předávání do streamovacího rozhraní, klient v uživatelském režimu nastaví příznak KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER u příslušné struktury KSALLOCATOR_FRAMING.
Pro alokátor jsou k dispozici dvě rozhraní. Za prvé, všechny alokátory musí podporovat KSMETHODSETID_StreamAllocator založené na IRP. Alokátory používající tento mechanismus jsou omezeny na maximální počet přidělených snímků. Požadavky na přidělení rámců nad rámec tohoto limitu se označí jako čekající.
Za druhé může minidriver podporovat přístup k tabulce funkcí, pokud lze typ fondu přidělení obsluhovat v DISPATCH_LEVEL. Poskytnutí přístupu k tabulce funkcí je volitelné. Uděláte to tak, že podporujete vlastnosti v KSPROPSETID_StreamAllocator.
Rozhraní DISPATCH_LEVEL funguje takto:
Při odeslání žádosti o přidělení do alokátoru vrátí alokátor ukazatel na rámec, pokud je k dispozici. Pokud ne, okamžitě vrátí hodnotu NULL.
Když se do alokátoru odešle bezplatná žádost, alokátor signalizuje událost alokátoru streamu "volný rámec", která klientovi oznámí, že je k dispozici volný rámec. Kromě toho platí, že pokud existují žádosti o přidělení, které čekají na dokončení, musí alokátor naplánovat pracovní položku (pokud aktuální irQL není PASSIVE_LEVEL) a dokončit požadavek s volným rámcem.
Je možné, aby o volné rámce bojovalo jak rozhraní DISPATCH_LEVEL, tak rozhraní založené na IRP. KS synchronizuje tuto frontu pomocí zámku zrušení spin locku.