共用方式為


使用SPB I/O要求介面

從 Windows 8 開始,SPB 架構延伸模組 (SpbCx) 是支援 SPB I/O 要求介面的系統提供元件。 SPB 周邊設備驅動器會使用此介面,將 I/O 要求傳送至連線到 I IoC、SPI 和其他 簡單周邊總線 (SPB) 的 裝置。 SpbCx 透過透過各種總線類型提供標準化的 I/O 要求介面,簡化跨各種硬體平臺和不同硬體廠商 SPB 控制器系列周邊裝置的驅動程序支援工作。

如果符合下列條件,SPB 連線周邊裝置的硬體廠商可以開發一個可跨多個總線類型的設備驅動器:

  • 周邊裝置必須與這些總線硬體相容。
  • 驅動程式可以在所有這些總線類型之間使用相同的裝置控制通訊協定。

透過排除周邊驅動程式的總線特定程序代碼,SPB 架構延伸可縮短這些驅動程式的開發時間,並確保支援總線類型之間的行為更加一致。

連線到SPB的周邊裝置不會與記憶體對應,而且這些裝置的驅動程式無法直接存取這些裝置的硬體緩存器。 相反地,SPB 周邊設備驅動器必須依賴SPB控制器,以序列方式在裝置往返傳輸數據。 若要要求這類傳輸,驅動程式必須將 I/O 要求傳送至裝置。 此 I/O 要求會傳送至由 SpbCx 管理的佇列。

SpbCx 會與SPB控制器驅動程式合作,以處理來自驅動程式的I/O要求。 SPB 控制器的硬體廠商會提供SPB控制器驅動程式,以執行控制器硬體特有的工作。

只有驅動程式可以將 I/O 要求傳送至 SPB 控制器的 I/O 要求介面。 應用程式無法直接將 I/O 要求傳送至 SPB 控制器。 相反地,應用程式可以將I/O要求傳送至SPB連線周邊裝置的驅動程式,然後依賴驅動程式傳送SPB控制器,傳送任何可能需要將數據傳送至裝置或從裝置傳送數據的要求。

驅動程式必須先開啟裝置的邏輯連線,驅動程式才能將I/O要求傳送至SPB連接的周邊裝置。 若要開啟此連線,驅動程式會使用它從 隨插即用 管理員接收作為硬體資源的連線標識碼。 如需詳細資訊,請參閱SPB周邊裝置 連線標識碼。

SpbCx 和SPB控制器驅動程式會共同處理SPB連線周邊裝置的讀取和寫入要求。 為了回應 IRP_MJ_READ 要求,SPB 控制器會將指定的位元元組數目從周邊裝置傳輸到驅動程式提供的緩衝區。 為了回應 IRP_MJ_WRITE 要求,SPB 控制器會將指定的位元元組數目從驅動程式提供的緩衝區傳輸到周邊裝置。

對於傳送零個字節的IRP_MJ_READIRP_MJ_WRITE要求,SpbCx 會以STATUS_SUCCESS狀態代碼完成要求,但不會執行任何作業。

SpbCx 和 SPB 控制器驅動程式也會處理這些 SPB 特定的 I/O 控制碼 (IOCTLs):

SPB 周邊驅動程式會使用這些 IOCTL 來執行 I/O 傳輸序列。 I/O 傳輸順序是一組已排序的總線傳輸(讀取和寫入作業),以單一不可部分完成的總線作業執行。 如需這些 IOCTL 的詳細資訊,請參閱 I/O 傳輸序列

特定SPB控制器的SPB控制器驅動程式可能支援執行硬體特定功能的自定義IOCTL。 這些是SpbCx無法處理的IOCTLs,而且SPB控制器的硬體廠商支援SPB周邊設備驅動器的優點,這些設備驅動器需要執行硬體特定作業。 如果SPB周邊設備驅動器傳送IOCTL,SpbCx和SPB控制器驅動程式都無法辨識,則不會執行任何作業,且I/O要求已完成,且錯誤狀態值為 STATUS_NOT_SUPPORTED。

SPB 連線周邊裝置的驅動程式通常是 使用者模式驅動程序架構 (UMDF) 驅動程式或 內核模式驅動程序架構 (KMDF) 驅動程式。 若要將讀取、寫入或 IOCTL 要求傳送至 SPB 連接的周邊裝置,UMDF 驅動程式會呼叫 IWDFIoRequest::Send方法。 KMDF 驅動程式會呼叫 WdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfIoTargetSendIoctlSynchronously方法。

如需示範如何將 I/O 要求傳送至 SPB 連線周邊裝置的程式代碼範例,請參閱下列主題:

使用者模式SPB周邊驅動程式的硬體資源

核心模式SPB周邊驅動程式的硬體資源