跳到主要內容 已不再支援此瀏覽器。 Show 請升級至 Microsoft Edge,以利用最新功能、安全性更新和技術支援。 鍵盤和滑鼠 HID 用戶端驅動程式
本文內容本主題討論鍵盤和滑鼠 HID 用戶端驅動程式。 鍵盤和滑鼠代表在 HID 使用量資料表中標準化的第一組 HID 用戶端,並在Windows作業系統中實作。 鍵盤和滑鼠 HID 用戶端驅動程式會以 HID 對應程式驅動程式的形式實作。 HID 對應程式驅動程式是核心模式 WDM 篩選驅動程式,可為非 HID 類別驅動程式與 HID 類別驅動程式之間的 I/O 要求提供雙向介面。 mapper 驅動程式會將其中一個的 I/O 要求和資料通訊協定對應到另一個要求。 Windows為 HID 鍵盤和 HID 滑鼠裝置提供系統提供的 HID 對應程式驅動程式。 架構和概觀下圖說明 USB 鍵盤、滑鼠和觸控板裝置的系統提供驅動程式堆疊。 上圖包含下列元件:
系統會建置驅動程式堆疊,如下所示:
重要事項:
驅動程式指引Microsoft 針對撰寫驅動程式的 IHD 提供下列指引:
鍵盤配置鍵盤配置完整描述 Microsoft Windows 2000 和更新版本的鍵盤輸入特性。 例如,鍵盤配置會指定語言、鍵盤類型和版本、修飾詞、掃描碼等等。 如需鍵盤配置的相關資訊,請參閱下列內容:
若要視覺化特定鍵盤的配置,請參閱Windows鍵盤版面配置。 如需鍵盤配置的其他詳細資料,請流覽 主控台\Clock、Language 和 Region\Language。 滑鼠上支援的按鈕和方向盤下表識別Windows作業系統不同用戶端版本支援的功能。
在 PS/2 滑鼠上啟用按鈕 4-5 和滾輪Windows用來啟用新 45 & 按鈕 + 滾輪模式的方法,是用來在 IntelliMouse 相容滑鼠中啟動第三個按鈕和滾輪的方法延伸:
請注意,這僅適用于 PS/2 滑鼠,不適用於 HID 滑鼠 (HID 滑鼠必須報告其報表描述元) 中的精確使用量。 標準 PS/2 相容的滑鼠資料封包格式, (2 個按鈕)
注意 Windows滑鼠驅動程式不會檢查溢位。 如果溢位,滑鼠應該只會傳送最大帶正負號的位移值。 標準 PS/2 相容的滑鼠資料封包格式 (3 個按鈕 + VerticalWheel)
標準 PS/2 相容滑鼠資料封包格式 (5 個按鈕 + VerticalWheel)
重要 請注意,5 鍵滾輪滑鼠的 Z/wheel 資料已縮減為四位,而不是 IntelliMouse 相容 3 按鈕滾輪模式中使用的 8 位。 因為輪子通常無法在任何指定的中斷期間內產生超出範圍 +7/-8 的值,所以可以減少此減少。 Windows滑鼠驅動程式會在滑鼠處於 5 按鈕滾輪模式時,簽署四個 Z/wheel 資料位,並在滑鼠以 3 鍵滾輪模式運作時,完整 Z/滾輪資料位元組。 上的按鈕 4 & 5 會對應至WM_APPCOMMAND訊息,並對應至App_Back和App_Forward。 不需要廠商驅動程式的裝置下列裝置不需要廠商驅動程式:
Kbfiltr 範例Kbfiltr 的設計目的是要與 Kbdclass、鍵盤裝置的系統類別驅動程式和 I8042prt 搭配使用,這是 PS/2 樣式鍵盤的函式驅動程式。 Kbfiltr 示範如何篩選 I/O 要求,以及如何新增回呼常式,以修改 Kbdclass 和 I8042prt 的作業。 如需 Kbfiltr 作業的詳細資訊,請參閱下列內容:
Kbfiltr IOCTLsIOCTL_INTERNAL_I8042_HOOK_KEYBOARDIOCTL_INTERNAL_I8042_HOOK_KEYBOARD要求會執行下列動作:
初始化和 ISR 回呼是選擇性的,由 PS/2 樣式鍵盤裝置的頂層篩選驅動程式提供。 在 I8042prt 收到 IOCTL_INTERNAL_KEYBOARD_CONNECT 要求之後,它會將同步 IOCTL_INTERNAL_I8042_HOOK_KEYBOARD 要求傳送至鍵盤裝置堆疊頂端。 在 Kbfiltr 收到攔截式鍵盤要求之後,Kbfiltr 會以下列方式篩選要求:
IOCTL_INTERNAL_KEYBOARD_CONNECTIOCTL_INTERNAL_KEYBOARD_CONNECT要求會將 Kbdclass 服務連線到鍵盤裝置。 Kbdclass 會在開啟鍵盤裝置之前,將此要求向下傳送到鍵盤裝置堆疊。 在 Kbfiltr 收到鍵盤連線要求之後,Kbfiltr 會以下列方式篩選連接要求:
如果要求不成功,Kbfiltr 會以適當的錯誤狀態完成要求。 Kbfiltr 提供篩選服務回呼常式的範本,可補充 KeyboardClassServiceCallback的作業,也就是 Kbdclass 類別服務回呼常式。 篩選服務回呼可以篩選從裝置輸入緩衝區傳輸到類別資料佇列的輸入資料。 IOCTL_INTERNAL_KEYBOARD_DISCONNECTIOCTL_INTERNAL_KEYBOARD_DISCONNECT要求已完成,狀態為 STATUS_NOT_IMPLEMENTED。 請注意,隨插即用管理員可以新增或移除隨插即用鍵盤。 對於所有其他裝置控制要求,Kbfiltr 會略過目前的 IRP 堆疊,並將要求向下傳送到裝置堆疊,而不需進一步處理。 Kbfiltr 所實作的回呼常式KbFilter_InitializationRoutine請參閱 PI8042_KEYBOARD_INITIALIZATION_ROUTINE 如果鍵盤的 I8042prt 預設初始化已足夠,則不需要 KbFilter_InitializationRoutine 。 I8042prt 會在初始化鍵盤時 呼叫KbFilter_InitializationRoutine 。 預設鍵盤初始化包含下列作業:
KbFilter_IsrHook請參閱 PI8042_KEYBOARD_ISR。 如果 I8042prt 的預設作業已足夠,就不需要此回呼。 I8042prt 鍵盤 ISR 會在驗證中斷並讀取掃描碼之後 呼叫KbFilter_IsrHook 。 KbFilter_IsrHook 會在 I8042prt 鍵盤的 IRQL 核心模式中執行。
KbFilter_ServiceCallback請參閱 PSERVICE_CALLBACK_ROUTINE。 函式驅動程式的 ISR 分派完成常式 會呼叫 KbFilter_ServiceCallback,然後呼叫鍵盤類別驅動程式的 PSERVICE_CALLBACK_ROUTINE實作。 廠商可以實作篩選服務回呼,以修改從裝置的輸入緩衝區傳輸到類別資料佇列的輸入資料。 例如,回呼可以刪除、轉換或插入資料。
活頁簿範例一般檔篩選器的設計目的是要搭配使用,適用于Windows 2000 版及更新版本之滑鼠裝置的系統類別驅動程式,以及 I8042prt,這是與 Windows 2000 和更新版本搭配使用之 PS/2 樣式滑鼠的函式驅動程式。 群組篩選會示範如何篩選 I/O 要求,並新增回呼常式,以修改「叢集」和「I8042prt」的作業。 如需有關「集區篩選」作業的詳細資訊,請參閱下列各項:
通訊組控制程式代碼IOCTL_INTERNAL_I8042_HOOK_MOUSEIOCTL_INTERNAL_I8042_HOOK_MOUSE要求會將 ISR 回呼常式新增至 I8042prt 滑鼠 ISR。 ISR 回呼是選擇性的,由高階滑鼠篩選驅動程式提供。 I8042prt 會在收到 IOCTL_INTERNAL_MOUSE_CONNECT 要求之後傳送此要求。 I8042prt 會將同步 IOCTL_INTERNAL_I8042_HOOK_MOUSE 要求傳送至滑鼠裝置堆疊頂端。 在「檔案篩選」收到攔截滑鼠要求之後,它會以下列方式篩選要求:
圖文篩選回呼常式IOCTL_INTERNAL_MOUSE_CONNECTIOCTL_INTERNAL_MOUSE_CONNECT要求會將一個 AzureClass 服務連線到滑鼠裝置。 IOCTL_INTERNAL_MOUSE_DISCONNECTIOCTL_INTERNAL_MOUSE_DISCONNECT要求是由一個錯誤狀態為 STATUS_NOT_IMPLEMENTED 的STATUS_NOT_IMPLEMENTED完成。 針對所有其他要求,「通訊協定篩選」會略過目前的 IRP 堆疊,並將要求傳送至裝置堆疊,而不需進一步處理。 回呼常式MouFilter_IsrHook請參閱 PI8042_MOUSE_ISR。
如果 I8042prt 的預設作業已足夠,則不需要 MouFilter_IsrHook 回呼。 I8042prt 滑鼠 ISR 會在驗證中斷之後 呼叫MouFilter_IsrHook 。 若要重設滑鼠,I8042prt 會經歷一連串的作業子狀態,每個子狀態都是由MOUSE_RESET_SUBSTATE列舉值所識別。 如需 I8042prt 如何重設滑鼠和對應的滑鼠重設子狀態的詳細資訊,請參閱 ntdd8042.h 中MOUSE_RESET_SUBSTATE的檔。 MouFilter_IsrHook 在 I8042prt 滑鼠 ISR 的 IRQL 中以核心模式執行。 MouFilter_ServiceCallback請參閱 PSERVICE_CALLBACK_ROUTINE
I8042prt 的 ISR DPC 會呼叫 MouFilter_ServiceCallback,然後呼叫 MouseClassServiceCallback。 篩選服務回呼可以設定為修改從裝置的輸入緩衝區傳輸到類別資料佇列的輸入資料。 例如,回呼可以刪除、轉換或插入資料。 其他資源 |