SpbCx 物件控制碼

本主題描述針對 spbCx) 程式庫 (SPB 架構延伸模組所定義的物件控制碼。

此外,SerCx2 DDI 會使用由 Kernel-Mode Driver Framework (KMDF) 定義的兩個泛型物件控制碼類型 WDFDEVICE 和 WDFREQUEST。 如需架構控制碼類型的詳細資訊,請參閱 Framework 物件的摘要

本主題描述下列物件控制碼:

標頭:Spbcx.h

SPBREQUEST 物件控制碼

SPBREQUEST物件控制碼代表對匯流排上目標裝置發出的 I/O 要求。

DECLARE_HANDLE(SPBREQUEST)

SPBREQUEST物件類別衍生自WDFREQUEST物件類別,代表由 I/O 管理員分派的 I/O 要求。 因此,採用 WDFREQUEST控制碼值做為參數的WdfRequestXxx方法接受SPBREQUEST控制碼值作為有效的參數值。 如需這些方法的詳細資訊,請參閱 Framework Request Objects

不過,某些 SpbCx 方法和回呼函式特別需要 SPBREQUEST 控制碼做為參數。 針對這類參數,替代不是SPBREQUEST控制碼的WDFREQUEST控制碼是錯誤。

例如, SpbRequestGetTransferParameters 方法會採用 SPBREQUEST 控制碼做為參數。 為了提供此參數,不是SPBREQUEST控制碼的WDFREQUEST控制碼是錯誤。 這項需求的原因是 SPBREQUEST 物件必須儲存額外的 SPB 特定狀態資訊,以支援 I/O 傳輸序列WDFREQUEST基底物件類別不提供這項支援。

在裝置初始化期間,SPB 控制器驅動程式可以藉由呼叫SpbControllerSetRequestAttributes方法,將個別要求內容指派給SPBREQUEST控制碼。

SPBTARGET 物件控制碼

SPBTARGET物件控制碼會識別從用戶端 (周邊驅動程式) 到匯流排上可定址埠或周邊裝置的邏輯連線。

DECLARE_HANDLE(SPBTARGET)

針對 I2C 匯流排, SPBTARGET 控制碼會對應至特定的裝置位址。
針對 SPI 匯流排, SPBTARGET 控制碼會對應至裝置選取行。

一般而言, SPBTARGET 物件會從 EvtSpbTargetConnect 事件回呼的開頭到對應的 EvtSpbTargetDisconnect 事件回呼結尾存在。 不過,如果 SPB 控制器驅動程式對 SPBTARGET 物件採取額外的參考,以防止物件在處理目標的 I/O 要求期間意外消失, SPBTARGET 物件的存留期可能會超出第二個回呼。

SPB 控制器驅動程式會針對 SPB 控制器裝置執行所有硬體特定作業。 當用戶端傳送 IRP_MJ_CREATE 要求以開啟與匯流排上目標的連接時,SPB 架構擴充功能會 (SpbCx) ,以管理控制器驅動程式的 I/O 佇列,藉由呼叫此驅動程式的 EvtSpbTargetConnect 回呼函式,將此要求傳遞至 SPB 控制器驅動程式。 此函式的這個 Target 參數是 SPBTARGET 控制碼。 此函式可以使用這個控制碼來擷取連線特定資源資訊 (,例如,從 PnP 管理員擷取裝置位址) 。 當用戶端傳送 IRP_MJ_CLOSE 要求以關閉連線時,SpbCx 會將此要求傳遞給 SPB 控制器驅動程式的 EvtSpbTargetDisconnect 回 呼函式,以釋放這些資源。

Exclusive-Mode Access

用戶端具有獨佔模式來存取目標裝置。 一次只能有一個用戶端與特定目標裝置的連線。 SpbCx 可確保匯流排上的目標裝置位址只有一個 SPBTARGET 控制碼存在。 這是必要的限制,因為 SpbCx 不支援由兩個或多個用戶端傳送至目標裝置的 I/O 要求交錯。 如果目標裝置必須能夠接收來自數個用戶端的要求,此裝置需要與控制器驅動程式分開的 MUX 驅動程式,以便正確地交錯所要求的作業。

與 KMDF 的互通性

SpbCx 所定義的 SerCx2 驅動程式支援方法和SpbCx 事件回呼函式 會使用 SPBTARGET 控制碼來代表匯流排上目標裝置的開啟連線。 不過,控制器驅動程式通常必須呼叫需要 WDFFILEOBJECT 控制碼而非 SPBTARGET 控制碼的 KMDF 方法,以指定目標裝置。

SPBTARGET物件類似于 WDFFILEOBJECT 物件。 不過, SPBTARGET 物件包含額外的 SPB 特定資訊。 例如,在處理 IOCTL_SPB_EXECUTE_SEQUENCE I/O 控制要求期間,目標裝置的 SPBTARGET 物件會追蹤 I/O 傳輸順序中的傳輸狀態。

若要取得目標的 WDFFILEOBJECT 控制碼,SPB 控制器驅動程式會呼叫 SpbTargetGetFileObject 方法。 這個方法接受作為輸入參數的 SPBTARGET 控制碼給開啟的目標裝置,並將對應的 WDFFILEOBJECT 控制碼傳回給這個目標。

根據 KMDF 慣例,SPB 控制器驅動程式可以將自己的內容附加至目標裝置的 SPBTARGET 物件,而且此內容可以包含相關聯的 EvtCleanupCallbackEvtDestroyCallback 回 呼函式。 SPB 控制器驅動程式會使用此內容來追蹤控制器驅動程式和目標裝置特有的資訊。 此外,此驅動程式可以建立 SPBTARGET 物件的子物件,例如計時器、DPC,或視需要建立 I/O 要求和 I/O 佇列。