HID協定

HID協定,全稱Human Interface Device,中文譯為人機接口設備,是一套用於規範人機接口設備與主機間通信的標準。該協定最初為USB設計,由USB-IF於1996年批准了USB上的HID規範,其核心是通過“報告描述符”定義數據格式,並以“報告”的形式在設備和主機間交換輸入、輸出及功能數據。HID協定設計為與匯流排無關,最初用於支持鍵盤、滑鼠等設備,後擴展至藍牙、IC等多種傳輸方式。該協定支持低延遲、低頻寬的數據交換,作業系統通常提供通用驅動,使得符合規範的設備能夠實現即插即用。

基本介紹

  • 中文名:HID協定
  • 外文名:Human Interface Device
  • 別名:人機接口設備、人體學接口設備
基本概念,發展歷史,協定框架與規格,套用與實現,安全與相關問題,開發工具,

基本概念

HID全稱為Human Interface Device,中文譯為人機接口設備或人體學接口設備,是一套與匯流排無關的通用設備類定義,用於支持人與計算機進行互動的設備。HID協定包含兩個核心概念:“報告”和“報告描述符”。報告是在設備和軟體客戶端之間交換的實際數據。報告描述符則用於描述設備支持數據的格式和含義,其由一系列條目組成,每個條目包含類型(bType)、數據位元組數量(bSize)和功能(bTag)。報告分為三種類型:輸入報告是從HID設備傳送到應用程式的數據,輸出報告是從應用程式傳送到HID設備的數據,功能報告則是用於配置信息、可以手動讀取和寫入的數據。HID設備的數據傳輸主要使用中斷傳輸和控制傳輸兩種方式。中斷傳輸用於低延遲數據如按鍵或滑鼠移動,而控制傳輸用於對時延要求不高的數據如鍵盤LED狀態。典型的HID設備包括鍵盤、滑鼠、遊戲控制器、條形碼閱讀器、觸控螢幕、感測器等。

發展歷史

1996年,USB-IF批准了USB匯流排上的人機接口設備(HID)規範。HID最初為USB設計,但協定本身設計為與匯流排無關。隨著Windows 2000作業系統集成HID驅動程式,實現了鍵盤、滑鼠等標準設備的即插即用,推動了該協定的普及。此後,HID協定擴展支持了藍牙、藍牙LE、IC等多種傳輸方式,以適應更廣泛的設備連線需求。

協定框架與規格

HID協定框架基於“用法表”(Usage Table)和“用法頁”(Usage Page)來標準化設備功能的描述。用法表由USB-IF工作組發布,是描述報告描述符的組成部分,其中包含描述特定項預期含義的說明。用法表分為多個稱為“用法頁”的命名空間,每個用法頁描述一組相關的用法。用法和用法頁的組合定義了唯一標識特定用法的使用情況ID。
HID設備主要使用控制傳輸(Control Transfer)和中斷傳輸(Interrupt Transfer)兩種方式與主機通信。中斷傳輸主要用於低時延場合,如按鍵或滑鼠移動;控制傳輸則用於對時延要求不高的場合,如控制鍵盤LED狀態。HID設備必須要有默認的控制管道和一個中斷輸入端點,中斷輸出端點是可選的。
報告描述符通過一系列“條目”(Item)定義數據包的具體格式。條目由一個位元組的前綴(Prefix)和可選的數據位元組組成。前綴由bType(條目類型)、bSize(數據位元組數量)和bTag(條目功能)三段數據組成。報告分為三種類型:輸入報告(Input Report,從設備到主機)、輸出報告(Output Report,從主機到設備)和功能報告(Feature Report,用於配置信息)。在報告描述符中,Input用0x81 0xXX表示,Output用0x91 0xXX表示,Feature用0xB1 0xXX表示。
為了被識別為HID類設備,設備必須定義HID描述符和報告描述符,物理描述符不是必需的。HID描述符關聯於接口而非端點。對傳輸速度和數據包大小有明確限制:低速設備每筆事務最大8位元組,最高速度800 B/s;全速設備每筆最大64位元組,最高速度64 KB/s;高速設備每筆最大1024位元組,最高速度24.576 MB/s。
除了標準USB請求外,HID設備還需要支持六種類特定請求:Get_Report(主機從設備接收數據)、Set_Report(設備接收主機數據)、Get_Idle(讀取空閒速率)、Set_Idle(設定閒置狀態)、Get_Protocol(獲取當前活動協定)和Set_Protocol(在引導協定和報告協定間切換)。其中,Get_Report是所有HID設備必須支持的。

套用與實現

主流作業系統為開發者提供了訪問HID設備的原生API。Windows提供了Windows.Devices.HumanInterfaceDevice API,允許Windows套用商店套用訪問支持HID協定的設備。HarmonyOS則提供了HID DDK(Driver Development Kit),支持開發者在套用層為非標USB HID設備開發驅動。
Windows等作業系統內置了HID類驅動程式及針對不同匯流排的微型連線埠驅動程式,例如HIDUSB、HID BTH、HIDI2C、HIDSPI。對於使用這些標準匯流排的HID設備(如鍵盤、滑鼠、觸控板、觸控螢幕),通常無需設備製造商開發額外的驅動程式即可被系統識別和使用。
通用桌面應用程式訪問HID設備通常需經過枚舉設備、打開連線、讀寫報告等步驟。在Windows平台,可以使用HidDevice.GetDeviceSelector和HidDevice.FromIdAsync等方法枚舉並打開設備連線,之後通過讀寫輸入/輸出報告(Report)與設備進行數據交換。為了提高效率,可採用異步讀寫方式。
對於Windows套用商店套用,必須在應用程式包清單(Package.appxmanifest)的節點中,通過特定的聲明要訪問的HID設備。該聲明需指定設備標識符(如供應商ID和產品ID的組合,或使用“any”)以及設備功能(通過HID用法頁和用法ID定義)。這是套用獲得設備訪問許可權的前提。
HID協定被用於定義精密輸入設備的標準化通信方式。例如,Windows精確式觸控螢幕和觸控板設備都有基於HID協定的詳細實現規範。設備製造商只需在固件中按照規範報告特定的HID描述符和用法,Windows系統便能利用其內置驅動為設備啟用完整的觸控、手勢等功能,無需開發第三方驅動程式。

安全與相關問題

HID外掛利用HID協定模擬鍵盤、滑鼠等輸入設備的操作,通常由支持HID協定的硬體如Arduino或ESP32和腳本軟體構成,用於在社交套用或遊戲中實現自動化操作、批量引流或作弊,並因其通過硬體協定與作業系統互動而具有較高的隱蔽性。
HID外掛的技術局限性包括其操作依賴OCR識別,與真人操作存在差異,且存在無法直接輸入中文字元等缺陷。
HID協定本身存在安全風險,例如CVE-2023-45866等高危藍牙HID協定漏洞可導致擊鍵注入攻擊。

開發工具

HID DDK是為開發者提供的HID設備驅動程式開發套件,支持開發者基於用戶態,在套用層開發HID設備驅動。它適用於採用USB匯流排並通過HID協定傳輸數據的非標設備,或通過擴展外設驅動創建虛擬設備以實現與非標設備信息互動的場景。
該套件提供了一系列API,支持創建和銷毀HID設備、向設備傳送事件、讀寫報告、獲取設備報告描述符以及獲取設備原始信息等操作。
使用HID DDK進行驅動開發的基本步驟包括初始化DDK、創建設備、進行報文通信(如寫入或傳送報告、讀取報告)以及關閉設備、釋放DDK資源。

相關詞條

熱門詞條

聯絡我們