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月2日 星期六

Accessing Higher Privileged Application

在 Vista 或是 Windows 7 中, 如果有開啟 UAC, 而經 UAC 尋問後執行的程式, 會執行於最高的權級, 跟以一般使用者權級執行的程式有所區隔, 以防止在低權級執行的惡意程式控制高權級程式, 如 SendMessage 等, 這稱為 User Interface Privileged Isolation(UIPI).

2011年7月1日 星期五

MinorFunction Changed After IoCompleteRequest()

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

Paged Section

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