KSPIN 結構 (ks.h)
KSPIN 結構描述具現化的針腳。
語法
typedef struct _KSPIN {
const KSPIN_DESCRIPTOR_EX *Descriptor;
KSOBJECT_BAG Bag;
PVOID Context;
ULONG Id;
KSPIN_COMMUNICATION Communication;
BOOLEAN ConnectionIsExternal;
KSPIN_INTERFACE ConnectionInterface;
KSPIN_MEDIUM ConnectionMedium;
KSPRIORITY ConnectionPriority;
PKSDATAFORMAT ConnectionFormat;
PKSMULTIPLE_ITEM AttributeList;
ULONG StreamHeaderSize;
KSPIN_DATAFLOW DataFlow;
KSSTATE DeviceState;
KSRESET ResetState;
KSSTATE ClientState;
} KSPIN, *PKSPIN;
成員
Descriptor
這個特定針腳之針腳描述項的指標。 如需詳細資訊 ,請參閱KSPIN_DESCRIPTOR_EX 。
Bag
這個成員指定KSOBJECT_BAG (KSOBJECT_BAG結構相當於這個特定針腳實例的類型 PVOID) 。 物件包 是用來將動態記憶體與特定AVStream物件建立關聯的結構。 釘選物件包中的任何專案會在釘選關閉時自動清除。
Context
緩衝區的指標。 用戶端可以使用內容,將 內容 資訊與特定的釘選實例產生關聯。 這通常用於針腳/數據流延伸模組,並配置在針腳分派數據表中提供的建立分派中。 請注意,針對內容資訊配置的任何動態記憶體,都應該使用 KsAddItemToObjectBag 放在釘選實例的物件包中。 內容會在建立釘選時初始化為父 KSFILTER的內容成員值。 請參閱 AVStream物件階層。
Id
這個成員會指定針腳類型標識碼。 這是為指定篩選類型提供的針腳描述元陣列的索引。
Communication
此成員會指定KSPIN_COMMUNICATION_NONE、KSPIN_COMMUNICATION_SINK、KSPIN_COMMUNICATION_SOURCE、KSPIN_COMMUNICATION_BOTH或KSPIN_COMMUNICATION_BRIDGE。 如需每個值的意義,請參閱 KSPROPERTY_PIN_COMMUNICATION 。
ConnectionIsExternal
這個成員會指定布爾值,如果 為 TRUE,表示連接的針腳不支援 AVStream 聯機交握。 如果 為 FALSE,表示連線的針腳支援 AVStream 連線交握。 這是指出此針腳與其連接的針腳是否為兩個AVStream針腳之間的連線。
ConnectionInterface
此成員包含 KSPIN_INTERFACE 結構,可識別用於連線的介面。 建立針腳時,圖形產生器會提供這項資訊。
ConnectionMedium
此成員包含 KSPIN_MEDIUM 結構,可識別此針腳應該使用的連線媒體。 建立針腳時,圖形產生器會提供這項資訊。
ConnectionPriority
此成員包含指定連線優先順序的 KSPRIORITY 結構。 建立針腳時,圖形產生器會提供這項資訊。
ConnectionFormat
指定連接數據格式之 KSDATAFORMAT 結構的指標。 此資訊一開始是由圖形產生器在建立針腳時提供,而且可以透過屬性存取或格式變更插入數據流中的訊息來變更。 篩選控件 Mutex 會同步存取此成員。 用戶端不應該變更此成員。
AttributeList
KSMULTIPLE_ITEM 結構的指標,指定在針腳建立期間提供的屬性清單,以描述連接。 指定此針腳 (KSPIN_DATAFLOW_IN 或KSPIN_DATAFLOW_OUT) 的数据流方向。 這項資訊是釘選的靜態屬性,會出現在針腳描述元中。 此處快取供 IRQL 存取,PASSIVE_LEVEL上方。
StreamHeaderSize
此成員會指出此針腳的每個 KSSTREAM_HEADER 結構位元組大小。 通常用於輸出針腳時,用戶端可以將此值設定為大於 sizeof (KSSTREAM_HEADER) 且配置擴充數據流標頭 (每個數據流標頭將會是 StreamHeaderSize 位元組長) 。 如果客戶端未設定此成員,這表示沒有任何擴充資訊會遵循數據流標頭。 在這種情況下,每個資料流標頭的大小會精確 (KSSTREAM_HEADER) 。 用戶端可以在針腳建立分派中設定此值。
DataFlow
此成員會指定針腳的數據流方向。 可能的 設定KSPIN_DATAFLOW_IN和 KSPIN_DATAFLOW_OUT。 這項資訊是針腳的靜態屬性,並出現在相關的 KSPIN_DESCRIPTOR 結構中。 此處快取供 IRQL 存取,PASSIVE_LEVEL上方。
DeviceState
此成員包含 KSSTATE 類型的列舉,可識別針腳已告知轉換的狀態。 不一定與管道的狀態相同,該管道會透過 AVStrMiniPinSetDeviceState回報。 一開始KSSTATE_STOP,當AVStream收到連線狀態屬性集IOCTL時,就會變更此成員。 存取會使用 篩選控制件 Mutex 進行同步處理。 Minidrivers 不應該變更此成員。 請參閱下方一節中的附註。 另請參閱 ClientState 成員。
ResetState
此成員包含 KSRESET 類型的列舉,可識別針腳的目前重設狀態。 可能的設定KSRESET_BEGIN和KSRESET_END。 此成員一開始會設定為KSRESET_END,並透過屬性存取變更。 篩選控件 Mutex 會同步存取此成員。 用戶端不應該變更此成員。
ClientState
此成員會指定目前設定針腳的 KSSTATE 。 在 呼叫AVStrMiniPinSetDeviceState 之前立即更新。 如果此回呼例程失敗,AVStream 會將 ClientState 回復為其先前的值。 失敗狀態轉換且在處理期間檢查此成員的迷你驅動程式應該注意此事件序列。
備註
有許多方式,針腳是篩選行為的焦點。 這反映在針腳結構具有大量成員的事實中。 許多迷你驅動程式都需要精簡針腳行為,並維護其他與針腳相關聯的內容。 對於具有相當傳統針腳行為的篩選,不需要額外的精簡或內容。 在許多情況下,預設針腳行為已足夠;針腳是使用 篩選中心處理來存取。
為了進行同步處理,此物件的存留期是從呼叫minidriver的 PreCreate 分派函式開始的間隔,並在minidriver的 Close 分派函式傳回時結束,假設函式不會傳回STATUS_PENDING。 如果它確實傳回STATUS_PENDING,當用戶端呼叫 KsCompletePendingRequest 表示關閉要求完成時,物件的存留期就會結束。
如果 minidriver 需要判斷是否已告知它移至特定的 KSSTATE,請將 KSPIN 的 DeviceState 成員值與該狀態相比較不是可靠的方法。 請改為查看 ClientState 成員,或在 SetDeviceState 回呼中建立變數,然後檢查此變數。 SetDeviceState 是 KSPIN_DISPATCH的成員。
另請參閱 物件包。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 可在 Microsoft Windows XP 和更新版本的作業系統和 Microsoft DirectX 8.0 和更新版本中取得。 |
標頭 | ks.h (包含 Ks.h) |