KSIDENTIFIER 結構 (ks.h)
KSIDENTIFIER 結構會指定可唯一識別相關 GUID 集合的 GUID,以及參考該集合內特定成員的索引值。
KSDEGRADE、KSEVENT、KSMETHOD、KSPIN_INTERFACE、KSPIN_MEDIUM和 KSPROPERTY typedefs 是 KSIDENTIFIER 結構的別名。 因此,其定義完全相同。 如需使用方式的詳細資訊,請參閱個別 typedef 主題。
語法
typedef struct {
union {
struct {
GUID Set;
ULONG Id;
ULONG Flags;
} _IDENTIFIER;
struct {
GUID Set;
ULONG Id;
ULONG Flags;
};
LONGLONG Alignment;
};
} KSIDENTIFIER, *PKSIDENTIFIER;
成員
_IDENTIFIER
請參閱下方的備註。
_IDENTIFIER.Set
請參閱下方的備註。
_IDENTIFIER.Id
請參閱下方的備註。
_IDENTIFIER.Flags
請參閱下方的備註。
Set
請參閱下方的備註。
Id
請參閱下方的備註。
Flags
請參閱下方的備註。
Alignment
請參閱下方的備註。
言論
KSIDENTIFIER 成員描述
Set
指定 GUID,識別核心串流屬性、事件、方法、通訊總線集。
KSPIN_INTERFACE 結構描述介面集內的特定介面。
KSDEGRADE 結構包含降低策略的特定專案。 如需詳細資訊,請參閱下方的<
Id
指定屬性、事件、方法集的成員。 針對 KSPIN_MEDIUM,識別總線上的唯一連線。 針對 KSPIN_INTERFACE,指定介面集內這個特定介面的標識碼。 針對 KSDEGRADE,指定集合內專案的集合特定標識碼。
Flags
指定要求類型。 如果您要撰寫數據流類別 minidriver,另請參閱類別特定旗標資訊的 KSPROPERTY_ITEM。 旗標 應該是下表所列的其中一個值。 某些旗標可能會使用位 OR 運算來結合。
如需使用方式的詳細資訊,請參閱 KSDEGRADE、KSEVENT、KSMETHOD、KSPIN_INTERFACE、KSPIN_MEDIUM和 KSPROPERTY typedef 主題。
指定 KSPROPERTY 要求類型。
KSPROPERTY 旗標值 | 描述 |
---|---|
KSPROPERTY_TYPE_GET | 擷取指定之屬性項的值。 |
KSPROPERTY_TYPE_SET | 設定指定之屬性項的值。 |
KSPROPERTY_TYPE_SETSUPPORT | 如果驅動程式支援這個屬性集,則查詢。 |
KSPROPERTY_TYPE_BASICSUPPORT | 查詢驅動程式處理此屬性專案的要求類型。 傳回KSPROPERTY_TYPE_GET或KSPROPERTY_TYPE_SET或兩者。 所有屬性集都必須支援此旗標。 |
KSPROPERTY_TYPE_DEFAULTVALUES | 查詢指定之屬性項目的預設值。 傳回 類型為 KSPROPERTY_VALUES的結構。 |
KSPROPERTY_TYPE_RELATIONS | 查詢具有此屬性目前設定相依性的所有屬性。 指定要傳回屬性關聯清單,或傳回緩衝區為 ULONG 大小時,這類清單所需的緩衝區空間數量。 每個元素都位於FILE_QUAD_ALIGNMENT上,前面加上KSMULTIPLE_ITEM結構。 查詢一般設定之屬性的支援時,這無效。 所有屬性集都必須支援此旗標。 |
KSPROPERTY_TYPE_SERIALIZESET | 使用標準KSPROPERTY_SERIALHDR和KSPROPERTY_SERIAL結構串行化屬性集。 |
KSPROPERTY_TYPE_UNSERIALIZESET | 使用標準 KSPROPERTY_SERIALHDR 和 KSPROPERTY_SERIAL 結構,取消串行化屬性集。 |
KSPROPERTY_TYPE_SERIALIZESIZE | 當串行化為KSPROPERTY_TYPE_SERIALIZESET要求的一部分時,傳回指定屬性數據大小的 ULONG。 零的大小表示屬性不需要串行化。 |
KSPROPERTY_TYPE_SERIALIZERAW | 指定如果屬性集支持處理程式存在,這個集合中的屬性應該串行化。 如果沒有,呼叫會失敗。 串行化格式為私用。 此作業必須是反向KSPROPERTY_TYPE_UNSERIALIZERAW。 |
KSPROPERTY_TYPE_TOPOLOGY | 傳遞的屬性類型為 KSP_NODE,其中 NodeId 表示拓撲節點的數值識別碼。 請勿自行設定此旗標;相反地,或此數據表中有其他旗標。 |
KSPROPERTY_TYPE_UNSERIALIZERAW | 指定提供的緩衝區包含一組屬於這個集合的屬性,如果屬性集支援處理程式存在,該屬性集應取消串行化。 如果沒有,呼叫會失敗。 串行化格式為私用。 此作業必須是反向KSPROPERTY_TYPE_SERIALIZERAW。 |
指定 KSEVENT 要求類型。 此旗標應該是下表所列的其中一個值。
KSEVENT 旗標值 | 描述 |
---|---|
KSEVENT_TYPE_ENABLE | 啟用此事件類型的事件通知。 驅動程式會繼續事件通知,直到客戶端明確停用它為止。 |
KSEVENT_TYPE_ONESHOT | 僅啟用此事件下一次出現的事件通知。 用戶端不需要 (且不應該) 在事件發生后停用事件。 |
KSEVENT_TYPE_SETSUPPORT | 查詢事件集清單,或支援特定事件集。 |
KSEVENT_TYPE_BASICSUPPORT | 查詢以取得特定事件類型的支援。 |
KSEVENT_TYPE_ENABLEBUFFERED | 驅動程式會排入事件通知,而不是通知用戶端。 然後,用戶端會發出第二個IOCTL_KS_ENABLE_EVENT要求,併發出KSEVENT_TYPE_QUERYBUFFER來接收佇列事件通知。 |
KSEVENT_TYPE_TOPOLOGY | 表示傳遞的事件類型為 KSE_NODE,其中 NodeId 表示拓撲節點的數值識別符。 請勿自行設定此旗標;相反地,或此清單中的其他旗標。 |
KSEVENT_TYPE_QUERYBUFFER | 擷取下一個緩衝事件通知。 |
指定 KSMETHOD 要求類型。 此外,請參閱 KSMETHOD_ITEM的KSMETHOD_TYPE_Xxx旗標。 要求可以包含下表所列值的組合。
KSMETHOD 旗標值 | 描述 |
---|---|
KSMETHOD_TYPE_BASICSUPPORT | 指示查詢 minidriver,以判斷它是否支援方法集的指定方法。 |
KSMETHOD_TYPE_SEND | 指出 minidriver 應該執行指定的方法。 客戶端必須知道方法對指定參數的影響,亦即參數是讀取、寫入兩者,或兩者皆非。 minidriver 會使用 KSMETHOD_ITEM 結構來指定方法對參數的影響。 |
KSMETHOD_TYPE_SETSUPPORT | 指示查詢 minidriver,以判斷它是否支援指定的方法集。 |
KSMETHOD_TYPE_TOPOLOGY | 表示指定的方法的類型為 KSM_NODE,其中 NodeId 成員是拓撲節點的標識符。 請勿自行設定此旗標;相反地,或此清單中的其他旗標。 |
針對 KSDEGRADE,指定目前效能降低百分比,以千分之一表示(其中值 1000 代表無降低),或指定介面所指定原生單位的時間量。
Alignment
未使用。 未命名聯集的成員,用來強制未命名結構上的適當對齊方式。
筆記
如需使用方式的詳細資訊,請參閱 KSDEGRADE、KSEVENT、KSMETHOD、KSPIN_INTERFACE、KSPIN_MEDIUM和 KSPROPERTY typedef 主題。
在集合內使用標識碼可讓標識符執行單一大型比較,然後更小型的快速比較(例如,針對集合內的標識碼使用 switch 語句)。 例如,屬性集 是由唯一 GUID 識別碼所參考,而該集合內的屬性則由簡短標識元參考。
方法、事件、介面和 媒體集 可以視為集合的「類別」。
傳遞的輸出緩衝區大小會決定從KSPROPERTY_TYPE_BASICSUPPORT要求傳回的數據。 如果輸出緩衝區是ULONG的大小,則只會傳回存取旗標。 如果輸出緩衝區是 KSPROPERTY_DESCRIPTION 結構的大小,則結構會填入存取旗標、整個值資訊的內含大小、屬性值類型資訊,以及對應至結構的成員清單數目。
針對KSPROPERTY_TYPE_RELATIONS要求,傳回的數據也取決於輸出緩衝區的大小。 如果輸出緩衝區大小為零,傳回相關屬性所需的大小會以 BytesReturned 傳回,且警告狀態為 STATUS_BUFFER_OVERFLOW。 如果緩衝區是 KSMULTIPLE_ITEM 結構的大小,則會傳回位元組大小和關聯計數。 否則,緩衝區應該會足夠長,以傳回KSMULTIPLE_ITEM結構和所有相關屬性標識碼,這會以 KSIDENTIFIER 結構清單的形式傳回。
KSPROPERTY_TYPE_SERIALIZESET和KSPROPERTY_TYPE_UNSERIALIZESET要求允許與來自用戶端的單一呼叫與多個屬性互動。 如果核心串流處理程式正用來處理屬性要求,這些會由 KsPropertyHandler 函式分成多個呼叫。 使用此處理程式時,屬性集定義會控制要串行化的屬性。
針對串行化要求,會檢查 SerializedSize 相關 KSPROPERTY_ITEM 結構的成員是否有非零值,指出屬性的大小,以位元組為單位。 如果 SerializedSize 成員的值是 1,則它是未知的,而且必須查詢(所有未知的屬性都是以可以個別查詢的KSMULTIPLE_ITEM結構開頭)。 若要查詢串行化需要的總大小,用戶端會在呼叫 deviceIoControl 中傳遞零長度緩衝區。 BytesReturned 然後傳回緩衝區必須串行化集的大小,以及STATUS_BUFFER_OVERFLOW的警告狀態。 然後,配置該大小的緩衝區可以填入串行化的數據。
串行化緩衝區的格式是 KSPROPERTY_SERIALHDR,後面接著串行化屬性。 後面每個屬性都包含標頭 (KSPROPERTY_SERIAL),後面接著屬性數據,並在FILE_LONG_ALIGNMENT上每個屬性的開頭。 請注意,序列標頭結構定義在 FILE_LONG_ALIGNMENT 上。
如果屬性項目處理程式存在,則支援KSPROPERTY_TYPE_SERIALIZERAW和KSPROPERTY_TYPE_UNSERIALIZERAW。 KsPropertyHandler 函式會叫用 minidriver 所提供的處理程式。 將零長度緩衝區傳遞至串行化原始要求,也可以查詢串行化所需的緩衝區大小。 因為處理程式會附加至屬性專案,而不是屬性集,因此必須在屬性集內指定屬性集內的特定專案 Property 參數。 此處理程式可能會處理集合內的多個屬性。
Microsoft提供數個系統定義的屬性集 GUID。 Minidrivers 會在 Set 成員中指定下列其中一個 GUID。 核心串流屬性集通常以 KSPROPSETID 或 PROPSETID 前置詞開頭。 核心串流屬性集定義於 ks.h、ksmedia.h、bdamedia.h和其他頭檔。
如需核心串流屬性的詳細資訊,請參閱 KS 屬性、事件和方法。
Microsoft提供數個系統定義的事件集 GUID。 Minidrivers 會在 Set 成員中指定下列其中一個 GUID。 核心串流事件集通常以 KSEVENTSETID 前置詞開頭。 核心串流事件集定義於 ks.h、ksmedia.h、bdamedia.h,以及其他頭檔。
如需核心串流事件的詳細資訊,請參閱 KS 屬性、事件和方法。
Microsoft提供數個系統定義的方法集 GUID。 Minidrivers 會在 Set 成員中指定下列其中一個 GUID。 核心串流方法集通常會以 KSMETHODSETID 前置詞開頭。 核心串流方法集定義於 ks.h、ksmedia.h、bdamedia.h和其他頭檔。
如需核心串流方法的詳細資訊,請參閱 KS 屬性、事件和方法。
用戶端可以使用 IOCTL_KS_METHOD 要求以及 KSMETHOD 結構,在迷你驅動程序處理的核心串流物件上執行方法。 如需詳細資訊,請參閱 KS 方法。
KSPIN_MEDIUM 結構會使用唯一的中型 GUID 和實例標識碼來識別媒體,這是以總線特定方式產生的。 當總線實例不關心時,會使用保留的標識碼值KSMEDIUM_TYPE_ANYINSTANCE。 例如,KSMEDIUMSETID_Standard是指系統總線,其中應該只有一個。 因此,這個實例標識符一律會作為便利使用。
針腳可支持這些媒體上的多個媒體和介面。 描述針腳的方式表示針腳列舉的所有媒體都支援介面清單。 如果這種情況不成立,可能會使用另一個針腳來描述特定媒體的每個介面子集。
媒體也會由核心串流快取,以加速搜尋可能的連線。
您可以在微調器範例中找到使用此結構的範例,其中 KSPIN_MEDIUM 代表微調器、橫條和其他微調器元件之間的唯一連線。
旗標 成員可以根據用戶端採用的訊號降低類型來包含不同的值。 請參閱 品質管理。 如需透過降低訊號質量來解決品質管理問題之不同策略的詳細資訊。
由於 旗標 包含 ULONG 值,因此可能需要多個 Skip 要求來補救品質管理問題。
要求
要求 | 價值 |
---|---|
標頭 | ks.h (包括 Ks.h) |