共用方式為


篩選特定分配器

需要板載記憶體或其他裝置相依儲存方法配置器的篩選條件,可以透過支援配置器 屬性方法來提供特定的配置器。 如需詳細資訊,請參閱 KSPROPERTY_STREAM_ALLOCATOR

篩選會接收類型為 KSCREATE_REQUEST_ALLOCATOR 的IRP_MJ_CREATE,以指定配置器的框架選項。 迷你驅動程式的配置器建立常式會呼叫 KsValidateAllocatorCreateRequest 來驗證建立要求。 如果呼叫成功,此常式會傳回相關 KSALLOCATOR_FRAMING 結構的指標。

如果篩選無法滿足框架需求,它會傳回失敗碼以回應 IRP。 否則,過濾器會將結構的指標附加至檔案物件的 FsContext 成員,並響應由此產生的配置器要求。

如果要讓傳遞至串流介面的緩衝區由篩選器就地修改,使用者模式用戶端會在相關的 KSALLOCATOR_FRAMING 結構上設定 KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER 旗標。

分配器有兩個介面可用。 首先,所有配置者都必須支援 IRP 型 KSMETHODSETID_StreamAllocator。 使用此機制的配置器,配置的框架數量受到上限限制。 若要求配置超過此限制的幀,該要求將被標示為擱置中。

其次,如果分配池類型可以在DISPATCH_LEVEL提供服務,迷你驅動程式可以支援函式表存取。 提供函數表存取是選擇性的。 透過支援 KSPROPSETID_StreamAllocator中的屬性來執行此操作。

DISPATCH_LEVEL介面的運作方式如下:

將配置要求提交至配置器時,配置器會傳回框架的指標(如果有的話)。 如果沒有,它會立即傳回 NULL。

當釋放請求提交至配置器時,配置器會向流配置器發出「釋放框架」事件的訊號,通知用戶端有可用的釋放框架。 此外,如果有分配要求的 IRP 正在等待完成,分配器必須排程工作項目(如果當前的 IRQL 並非 PASSIVE_LEVEL),並使用可用框架完成該要求。

DISPATCH_LEVEL介面和 IRP 型介面都可以爭用可用幀。 KS 會使用取消旋轉鎖來同步處理此佇列。