USB 序列驅動程式 (Usbser.sys)
重要
本主題適用於程式設計人員。 如果您是客戶遇到 USB 問題,請參閱 修正 Windows 中的 USB-C 問題
使用Microsoft提供的USB驅動程式 (Usbser.sys) 來進行通訊和 CDC 控制裝置。 Microsoft鼓勵盡可能使用 Windows 隨附的驅動程式。
支援的版本
- Windows 11
- Windows 10
適用於
- CDC 控制裝置的裝置製造商
在 Windows 10 中,驅動程式已使用 內核模式驅動程式架構重寫,以改善驅動程式的整體穩定性。
- 已改善驅動程式 隨插即用和電源管理。
- 已新增電源管理功能,例如 USB選擇性暫停。
此外,UWP 應用程式現在可以使用 Windows.Devices.SerialCommunication 命名空間所提供的 API,讓應用程式能夠與這些裝置通訊。
Usbser.sys安裝
載入您通訊和 CDC 控制裝置的Microsoft內建驅動程式 (Usbser.sys)。
注意
如果您嘗試安裝 Windows 中包含的 USB 裝置類別驅動程式,則不需要下載驅動程式。 系統會自動安裝它們。 如果未自動安裝它們,請連絡裝置製造商。 如需 Windows 中包含的 USB 裝置類別驅動程式清單,請參閱 Windows 中包含的 USB 裝置類別驅動程式。
從 Windows 10 開始,Usbser.inf 已新增至 %Systemroot%\INF 目錄,它會將Usbser.sys載入為裝置堆疊中的功能裝置物件 (FDO)。 如果您的裝置屬於通訊和 CDC 控制裝置類別, 則會自動載入Usbser.sys 。 您不需要撰寫自己的 INF 來參考驅動程式。 驅動程式會根據與 Windows 中包含的其他 USB 裝置類別驅動程式類似的相容識別碼來載入。
USB\Class_02
USB\Class_02&SubClass_02
如果您想要自動載入Usbser.sys,請將類別代碼設定為02,並將裝置描述元中的子類別代碼設定為02。 使用此方法時,您不需要發佈裝置的 INF 檔案,因為系統使用 Usbser.inf。 如需詳細資訊,請參閱 通訊裝置 1.2 的類別定義。
如果您的裝置指定類別代碼 02,但 02 以外的子類別代碼值, 則不會自動載入Usbser.sys 。 隨插即用 管理員會嘗試尋找驅動程式。 如果找不到合適的驅動程式,裝置可能未載入驅動程式。 您可能必須載入自己的驅動程式,或撰寫參考另一個內建驅動程式的 INF。
如果您的裝置將類別和子類別代碼指定為 02,而且您要載入另一個驅動程式, 而不是Usbser.sys,您必須撰寫 INF 來指定要安裝之裝置的硬體識別碼和驅動程式。 如需範例,請查看範例驅動程式隨附的 INF 檔案,並尋找類似您裝置的裝置。 如需 INF 區段的相關信息,請參閱 INF 檔案概觀。
設定Usbser.sys的選擇性暫停
從 Windows 10 開始, Usbser.sys 支援 USB 選擇性暫停。 它可讓連接的 USB 到序列裝置在不使用時進入低電源狀態,而系統仍處於 S0 狀態。 當與裝置的通訊繼續時,裝置可以離開暫停狀態並繼續工作狀態。 此功能預設為停用,而且可以透過 設定此登錄機碼下的IdleUsbSelectiveSuspendPolicy 專案來啟用和設定:
HKEY\LOCAL\MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<hardware id>\<instance id>\Device Parameters
若要設定Usbser.sys的電源管理功能,您可以將IdleUsbSelectiveSuspendPolicy 設定為:
“0x00000001”:在閑置時輸入選擇性暫停,也就是說,當裝置沒有作用中數據傳輸或從裝置傳送時。
“0x00000000”:只有在裝置沒有開啟句柄時,才會輸入選擇性暫停。
您可以透過下列兩種方式之一新增該專案:
撰寫參考安裝 INF 的 INF,並在 HW 中 新增登錄專案。AddReg 區段。
描述擴充屬性OS功能描述元中的登錄專案。 新增自定義屬性區段,將 bPropertyName 字段設定為 Unicode 字串串 “IdleUsbSelectiveSuspendPolicy” 和 wPropertyNameLength 為 62 個字節。 將 bPropertyData 字段設定為 「0x00000001」 或 「0x00000000」。 屬性值會儲存為小端 32 位整數。
如需詳細資訊,請參閱 Microsoft OS 描述元。
開發 USB CDC 裝置的 Windows 應用程式
從 Windows 10 開始,Windows 應用程式可以使用 Windows.Devices.SerialCommunication 命名空間,將要求傳送至Usbser.sys。 它會定義 Windows 執行階段 類別,這些類別可用來透過序列埠或序列埠的一些抽象概念與 USB CDC 裝置通訊。 類別提供功能來探索這類序列裝置、讀取和寫入數據,以及控制流程控制之序列特定屬性,例如設定包速率、訊號狀態。