KSPIN_DESCRIPTOR_EX 結構 (ks.h)

KSPIN_DESCRIPTOR_EX結構描述指定篩選類型上的針腳類型特性。

語法

typedef struct _KSPIN_DESCRIPTOR_EX {
  const KSPIN_DISPATCH         *Dispatch;
  const KSAUTOMATION_TABLE     *AutomationTable;
  KSPIN_DESCRIPTOR             PinDescriptor;
  ULONG                        Flags;
  ULONG                        InstancesPossible;
  ULONG                        InstancesNecessary;
  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
  PFNKSINTERSECTHANDLEREX      IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;

成員

Dispatch

這個針腳 KSPIN_DISPATCH 結構的指標。 此指標是選擇性的,而且應該只由想要接收通知的用戶端提供。 需要執行以針腳為中心的處理 (篩選條件的用戶端,與數據路由相關,換句話說,硬體驅動程式) 必須提供此分派數據表和進程分派。 如需詳細資訊 ,請參閱KSPIN_DISPATCH

AutomationTable

這個針腳 KSAUTOMATION_TABLE 結構的指標。 自動化數據表包含針腳所支援的屬性、方法和事件。 此自動化數據表會與AVStream針對所有針腳所提供的自動化數據表合併。 如果用戶端提供任何已由AVStream提供的屬性、事件或方法處理程式,則客戶端的實作會取代AVStream的實作。

PinDescriptor

這個成員會指定類型 為 KSPIN_DESCRIPTOR的結構。

Flags

指定 ULONG 類型的值。 這可以是下列清單中所列之旗標的任意組合。 使用位 OR 指定旗標,但有下列例外狀況:KSPIN_FLAG_CRITICAL_PROCESSING和KSPIN_FLAG_HYPERCRITICAL_PROCESSING互斥。 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING和KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL互斥。 KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING和KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING互斥。 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY和KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE互斥。

KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING

表示迷你驅動程式要求進程分派在 IRQL DISPATCH_LEVEL 而不是PASSIVE_LEVEL。

KSPIN_FLAG_CRITICAL_PROCESSING

如果已指定異步處理,或系統在PASSIVE_LEVEL執行,且進程呼叫會在DISPATCH_LEVEL傳入,則會在佇列的工作專案中完成處理。 此旗標表示工作項目應該放在關鍵工作佇列上,而不是延遲的工作佇列。

KSPIN_FLAG_HYPERCRITICAL_PROCESSING

如果已指定異步處理,或系統在PASSIVE_LEVEL執行,且進程呼叫會在DISPATCH_LEVEL傳入,則會在佇列的工作專案中完成處理。 此旗標表示工作項目應該放在超關鍵工作佇列上,而不是延遲的工作佇列或關鍵工作佇列。

KSPIN_FLAG_ASYNCHRONOUS_PROCESSING

表示針腳應該以異步方式處理數據。 如果設定此旗標,AVStream 不會等待呼叫一個進程分派,再繼續進行其他畫面。

KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING

只有在迷你驅動程序明確呼叫 KsXxxAttemptProcessing 時,AVStream 才會呼叫處理分派。 適用於想要直接輪詢佇列的用戶端,例如 DPC 時間將數據傳輸至硬體。

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

表示每次數據框架抵達佇列時,都應該進行處理。 如果未指定此旗標,則只有在數據抵達先前空白的佇列時,才會呼叫進程分派。

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

表示此針腳上不需要畫面格,才能開始處理。 即使佇列中沒有任何畫面格存在,狀態變更現在仍足以讓AVStream呼叫處理分派。 此旗標只適用於篩選中心篩選條件。 如果沒有可用的畫面格,則不會在篩選上指定此旗標延遲處理的釘選。 指定此旗標的釘選不會以這種方式延遲處理。 如果釘選指定此旗標,它就會成為程式分派的責任,以檢查是否有可用的畫面。

KSPIN_FLAG_ENFORCE_FIFO

指定此旗標會導致佇列強制以先出方式處理 IRP。 如果在稍早傳送的 IRP 之前,minidriver 已完成一個 IRP,則在 minidriver 完成之前,AVStream 不會完成稍後的 IRP。

KSPIN_FLAG_GENERATE_MAPPINGS

指定此旗標會導致AVStream在迷你驅動程式鎖定參考該畫面的數據流指標時,自動產生佇列框架的散佈/收集對應。 想要使用此功能的客戶端必須透過 KsDeviceRegisterAdapterObject 函式向 AVStream 註冊其 DMA 配接器物件。 如需此旗標對KSSTREAM_HEADER結構的影響,請參閱 KSSTREAM_HEADERDataUsed 成員。 另請參閱 KSSTREAM_POINTER_OFFSET

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

表示與針腳相關聯的佇列應該有尾端邊緣數據流指標。 尾端邊緣指標是特殊的數據流指標,指向佇列中最舊的數據,除非複製指標存在於較舊的數據上。 在開頭和尾端邊緣數據流指標之間的視窗中,任何數據框架都會視為至少有一個參考計數,而且在移出視窗之前,會使用 KsPinGetTrailingEdgeStreamPointer 和其中一個 KsStreamPointerAdvanceXxxKsStreamPointerUnlock 函式前進到視窗外,否則不會完成。 未指定此旗標的釘選沒有尾端邊緣數據流指標。

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

表示AVStream應該只在針腳位於 KSSTATE_RUN時呼叫這個釘選來處理。 將最小處理狀態從暫停變更為執行。 AVStream 會在告知它進入執行狀態 之後 呼叫此釘選來處理,即使畫面送達也一樣。 任何指定此旗標且為篩選中心篩選條件的一部分,如果指定的針腳不在KSSTATE_RUN,則不會處理篩選。

KSPIN_FLAG_SPLITTER

表示此針腳 (輸出針腳) 為分隔器。 指定此旗標的釘選應該會指出一些可能大於 1 的實例。 建立此針腳的第二個實例時,AVStream 會自動設定分隔器,以便將傳送至原始針腳的畫面複製到新的針腳。 請注意,AVStream 會自動完成此複製。 用戶端 通常 可以忽略具有非 NULLDelegateBranchCopySource 指標的進程針腳。 這些成員表示針腳是分割器分支的一部分,而且由AVStream自動處理。 在 DirectX 8.0 後版本中,此旗標適用於篩選中心和針腳中心篩選器上的針腳。 較舊的版本僅針對篩選中心篩選上的針腳支援此旗標。

KSPIN_FLAG_USE_STANDARD_TRANSPORT

此旗標會強制針腳使用標準傳輸機制。 它會覆寫針腳上的所有其他檢查 (通訊類型、中型類型、介面類型 ) 等。 指定此旗標和KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT會導致使用標準傳輸。 此旗標會覆寫所有其他檢查。

KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT

表示針腳不使用標準傳輸機制。 不使用標準傳輸機制的針腳不會屬於管道區段,而且不會有相關聯的佇列。

KSPIN_FLAG_FIXED_FORMAT

表示此針腳使用固定數據格式。 任何設定數據格式的嘗試都傳回STATUS_INVALID_DEVICE_REQUEST。

KSPIN_FLAG_GENERATE_EOS_EVENTS

表示這個針腳會處理連線事件支援要求。

KSPIN_FLAG_RENDERER

指定此釘選能夠轉譯畫面格。

KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING

在以篩選為中心的篩選釘選上指定時,表示有問題的一或多個針腳類型實例必須有可用的畫面格,才能處理數據。 與KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING互斥。

請注意,透過 KsPinAttachOrGate 可以透過 KsPinAttachOrGate 來取得此行為,方法是手動設定 OR 閘道做為針腳的每個實例的框架閘道,並將此 OR 閘道附加至篩選的 AND 閘道。

使用此旗標時,minidrivers 無法在相關聯的釘選實例上呼叫 KsPinAttachAndGateKsPinAttachOrGate 。 (旗標可有效地為您執行此動作。) 另請參閱 以篩選為中心的處理

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

篩選中心 針腳上指定時,表示當一或多個針腳實例標示為處於執行狀態時,可能會進行處理。 所有未停止的針腳仍然必須至少處於暫停狀態,才能處理數據。 如果對應的針腳是輸出釘選,而且此針腳涉及就地轉換,請勿使用此旗標。

KSPIN_FLAG_DENY_USERMODE_ACCESS

此旗標可防止使用者模式存取此特定釘選。

KSPIN_FLAG_IMPLEMENT_CLOCK

表示這個針腳會公開圖形管理員可以選取的時鐘做為主時鐘。 另請參閱 AVStream 時鐘

InstancesPossible

指定 ULONG 類型的值,其中包含此針腳可能實例數目上限的計數。 任何嘗試具現化指定的類型針腳數目都失敗。 設定為 KSINSTANCE_INDETERMINATE 具現化針腳數目沒有限制。

InstancesNecessary

指定ULONG類型的值,其中包含指定針腳類型的最小針腳數目,這些針腳必須處於或高於最低處理層級,才能正常運作篩選條件。 根據預設,最小處理層級是KSSTATE_PAUSE,雖然迷你驅動程式可以藉由將此結構的 Flags 成員設定為 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 或 KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 來修改預設行為。 任何變更沒有此類型針腳實例之篩選狀態的嘗試都失敗。 請參閱一節中的其他資訊。

AllocatorFraming

包含這個針腳類型配置器框架需求的 KSALLOCATOR_FRAMING_EX 結構的指標。 配置器框架會指定記憶體對齊需求、最大畫面大小和最小畫面大小等專案。 這個成員可以是 NULL,表示這個針腳不支援配置器框架屬性。

IntersectHandler

驅動程式定義 KStrIntersectHandlerEx 函式的指標,可處理數據交集。 如果這個成員為 NULL,則針腳會使用規範處理數據範圍的數據交集查詢KSDATAFORMAT_SPECIFIER_NONE。 交集處理程式函式會從查詢接收單一數據範圍,並從數據範圍的針腳清單接收單一數據範圍。 這些範圍的型別、子類型和規範 GUID 保證相符,但有些可能是通配符。 函式表示數據範圍不相符,或在兩個數據範圍的交集中產生最佳數據格式。 如需詳細資訊,請參閱 AVStream中的數據範圍交集

備註

如果 KSPIN_DESCRIPTOR_EX 的 InstancesNecessary 成員設定為零,AMCap 和 Blink 可能無法在 AVStream 驅動程式上找到微調器和交叉線介面。 若要修正此問題,請將此針腳的 InstancesNecessary 設定為一個。

請注意,即使配置器框架指定對齊或大小絕對必須是特定值,仍可能會忽略針腳的配置器框架需求。 如果您的內核模式驅動程式已連線到為上游使用者模式篩選條件配置,而特定上游篩選的配置器無法瞭解框架需求,則可能發生此情況 (目前的特定範例包括 MPEG-2 分割器) 。

此外,如果您指定KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING,而針腳會使用標準傳輸機制,則必須有處理物件。 這表示必須在篩選層級或針腳層級) 提供一些進程分派 (;即使從未呼叫此函式,也必須在此情況下提供。

AVStream 和AVStream分割器中的數據範圍交集

規格需求

需求
標頭 ks.h (包含 Ks.h)

另請參閱

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject