顯示具有 Windows Driver 標籤的文章。 顯示所有文章
顯示具有 Windows Driver 標籤的文章。 顯示所有文章

2012年4月12日 星期四

HID over I2C

HID over I2C 即 HID protocol 在 I2C 通訊介面上的實作, 以觸控板裝置為例, 在 Windows 8 中的驅動程式堆疊如下:

2012年3月11日 星期日

Event Shared Between Kernel and User Modes

要避免應用程式沒效率地監看驅動程式的事件, 我們會很直覺地想到使用 event, 但一般只有在 user mode 或是 kernel mode 各別使用, 如果要在 user mode 及 kernel mode 使用同一個 event, 要怎麼做呢?

2012年2月22日 星期三

Certificate Chain: Intermediate CA Certificates

每次還原系統後都忘記要再安裝 Intermediate CA Certificates, 而浪費時間在解決數位簽章不能做 code signing 的問題, 這次又溫習了一次, 趕緊記下來.

2012年2月3日 星期五

Copy and Rename Files in INF

我們的驅動程式安裝包內有 32-bit 及 64-bit 的版本::
package\bt32.dll
package\bt64.dll

2011年12月27日 星期二

Using C RTL in Windows Driver


某一天在寫驅動程式時, 需要取字串, 比對字串, 及 parse 16進位字串, 沒想太多, 就用了 C 的 run-time library 中的 strlen(), strnicmp() 及 sscanf_s(), 也編出了 32/64-bit 的 WinXP 及 Win7 版本, 接著自己在 Win7 上測試都也都沒問題.

2011年12月21日 星期三

Removing Driver From DriverStore

如果驅動程式安裝/反安裝沒做好, 有可能在多次安裝新舊版驅動程式後, 發生一些詭異的問題, 譬如已經移除了驅動程式, 卻又在下次開機自動裝了起來. 這是因為 Windows 在驅動程式安裝時, 會複製一份到系統中的 DriverStore (如 C:\Windows\System32\DriverStore\FileRepository), 如果驅動程式已經被移除了, 卻還在 DriverStore 中看到, 那我們可以利用 Windows 7 內建的工具 pnputil, 將安裝包移除.

2011年9月10日 星期六

DebugView Log Boot Fails

在 Vista 以後的 Windows 系統中, 預設是不輸出所有種類的裝置驅動程式, 以 DbgPrint(Ex) 丟出的訊息的, 這使得我們用 DebugView 的 Log Boot 後, 依然無法看到訊息, 解決辦法就是設定 Debug Print Filter.

2011年8月24日 星期三

Free and Checked Build

WDK 提供兩種編譯環境, 編出 driver:

Free build (Retail build):
  • DBG 被定義為 0, 或是無定義.

2011年7月19日 星期二

Remove Lock

假設應用程式正在對我們的 driver 進行 I/O 要求, 有一個要求已經被分發處理, 還有許多要求正在佇列中等著, 此時 driver 也收到了 PnP manager 傳來的 surprise remove 或是 remove device 的要求, 準備移除 device object. 針對這樣的情況, 我們一定會想到要將佇列中的要求清除, 並且暫停接受任合要求(WdfIoQueuePurge), 我們也一定會想到要盡快完成那個正在處理中的要求, 但怎麼做呢?

2011年7月16日 星期六

IRQL and Page Fault

寫 Windows driver 常會看到 IRQL(IRQ Level), 它其實是對應於 CPU 提供的硬體中斷, 不同架構的 CPU 提供不等的硬體中斷數目, IRQL 愈高, 優先權就愈高, 可插斷正在低優先權中執行的工作.

2011年7月15日 星期五

PS/2 Mouse Filter Driver and Hook Procedure

PS/2 mouse driver 的 stack 如下:

    Mouclass (mouse class filter driver)
    (Optional mouse filter driver)
    I8042prt (function driver)
    ACPI (bus driver)
    -----------
    Device

2011年7月9日 星期六

Applying DTM Filters

在作 Driver Test Manager(DTM) 測試中, 我們可能會在 Job Monitor 中看到測試失敗(紅X)的工作項目, 通常我們就是重跑該測試項目, 再次確認. 但如果測試還是失敗呢? 那也別急著改程式, 說不定這是 Microsoft 自家的問題.

2011年7月1日 星期五

MinorFunction Changed After IoCompleteRequest()

最近在寫 driver 時, 遇到一個未曾注意過的問題.

Paged Section

將 code/data 設定為 pageable, 可縮減 driver image 在 kernel memory 中的 size. 當 pageable code/data 沒用到時, 就可以將他們晾在一邊, 而有需要用到時, 才將該 paged section 取出來使用.