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
表示 minidriver 要求進程分派在 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
只有當 minidriver 明確呼叫 KsXxxAttemptProcessing時,AVStream 才會呼叫處理分派。 適用於想要直接輪詢佇列的用戶端,例如 DPC 時間將數據傳輸至硬體。
KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
表示每次數據框架到達佇列時,應該進行處理。 如果未指定此旗標,則只會在數據抵達先前空白佇列時呼叫進程分派。
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
表示此針腳上不需要框架,才能開始處理。 即使佇列中沒有任何框架存在,狀態變更現在也足以讓AVStream呼叫處理分派。 此旗標僅適用於篩選中心篩選。 如果篩選條件沒有可用的畫面格,則不會指定此旗標延遲處理的針腳。 指定此旗標的釘選不會以這種方式延遲處理。 如果針腳指定此旗標,它就會成為程式分派的責任,以檢查可用的畫面格。
KSPIN_FLAG_ENFORCE_FIFO
指定此旗標會導致佇列強制以先出方式處理 IRP。 如果在稍早傳送的 IRP 之前,迷你驅動程式已完成一個 IRP,則直到 Minidriver 已完成先前的 IRP 之前,AVStream 才會完成稍後的 IRP。
KSPIN_FLAG_GENERATE_MAPPINGS
指定此旗標會導致AVStream在迷你驅動程式鎖定參考該畫面的數據流指標時,自動產生佇列框架的散佈/收集對應。 想要使用此功能的客戶端必須透過 KsDeviceRegisterAdapterObject 函式向 AVStream 註冊其 DMA 配接器物件。 如需此旗標對KSSTREAM_HEADER結構的影響,請參閱 KSSTREAM_HEADER 的 DataUsed 成員。 請參閱 KSSTREAM_POINTER_OFFSET。
KSPIN_FLAG_DISTINCT_TRAILING_EDGE
表示與針腳相關聯的佇列應該有尾端邊緣數據流指標。 尾端邊緣指標是一個特殊的數據流指標,除非複製指標存在於較舊的數據上,否則會指向佇列中最舊的數據。 前置和尾端邊緣串流指標之間的任何數據框架,都會被視為至少有一個參考計數,而且在它們移出視窗之前不會完成,方法是使用 KsPinGet 來推進尾端邊緣TrailingEdgeStreamPointer 和其中一個 KsStreamPointerAdvanceXxx 或 KsStreamPointerUnlock 函式。 未指定此旗標的釘選沒有尾端邊緣數據流指標。
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
指出AVStream應該只在釘選位於 KSSTATE_RUN時呼叫這個釘選來處理。 將最小處理狀態從暫停變更為執行。 AVStream 會在 告訴它進入執行狀態之後,呼叫此釘選來處理
KSPIN_FLAG_SPLITTER
表示這個針腳 (輸出針腳) 是分割器。 指定此旗標的釘選應該指出一些可能大於一個的實例。 建立此針腳的第二個實例時,AVStream 會自動設定分割器,以便傳送至原始針腳的畫面複製到新的針腳。 請注意,此複製是由AVStream自動完成。 用戶端通常 可以忽略具有非NULLDelegateBranch 和 CopySource 指標的進程釘選。 這些成員表示針腳是分割器分支的一部分,並由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,手動設定 OR 閘道作為針腳的每個實例的框架閘道,並將此 OR 閘道附加至篩選的 AND 閘道來取得。
使用此旗標時,minidrivers 無法在相關聯的釘選實例上呼叫 KsPinAttachAndGate 或 KsPinAttachOrGate。 (旗標有效地為您做為簡單的 OR 案例。請參閱 Filter-Centric 處理。
KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
在 篩選中心 針腳上指定時,表示當一或多個已標示為旗標的針腳實例處於執行狀態時,可能會進行處理。 所有未停止的針腳仍必須至少處於暫停狀態,才能處理數據。 如果對應的針腳是輸出針腳,而且此針腳牽涉到就地轉換,請勿使用此旗標。
KSPIN_FLAG_DENY_USERMODE_ACCESS
此旗標可防止使用者模式存取此特定針腳。
KSPIN_FLAG_IMPLEMENT_CLOCK
指出這個針腳會公開圖形管理員可以選取的時鐘作為主要時鐘。 另請參閱
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,則 pin 會使用規範處理數據範圍的數據交集查詢KSDATAFORMAT_SPECIFIER_NONE。 交集處理程式函式會從查詢接收單一數據範圍,並從數據範圍的針腳清單接收單一數據範圍。 這些範圍的型別、子類型和規範 GUID 保證相符,但有些可能是通配符。 函式表示數據範圍不相符,或在兩個數據範圍的交集中產生最佳數據格式。 如需詳細資訊,請參閱AVStream 中的
言論
如果 InstancesNecessary KSPIN_DESCRIPTOR_EX 成員設定為零,AMCap 和 Blink 可能無法在 AVStream 驅動程式上找到微調器和橫條介面。 若要修正此問題,請將此針腳的實例 設定為一個。
請注意,即使配置器框架指定對齊或大小絕對需要為特定值,仍可能會忽略針腳的配置器框架需求。 如果您的內核模式驅動程式已連線到為它配置的上游使用者模式篩選,且特定上游篩選的配置器不瞭解框架需求,就會發生這種情況(目前的特定範例包括 MPEG-2 分隔器)。
此外,如果您指定 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING,而針腳會使用標準傳輸機制,則必須有處理物件。 這表示必須提供一些進程分派(無論是在篩選層級或針腳層級):即使從未呼叫此函式,也必須在此情況下提供它。
AVStream 和 AVStream 分隔器中的數據範圍交集。
要求
要求 | 價值 |
---|---|
標頭 | ks.h (包括 Ks.h) |