我已經構建了一個在內核模式下運行的WFP標註驅動程序。 現在,我試圖弄清楚如何在這個驅動程序和我的GUI應用程序之間進行通信,該應用程序以用戶模式運行。有任何想法嗎?內核模式和用戶模式應用程序之間的通信
正是我想要的是這樣的:
- 調出驅動程序可以檢測4444端口的連接進來的(這不是我的問題的一部分)
- 驅動程序發送一條消息給用戶模式應用。
- 該應用程序向用戶顯示通知,並詢問是否應接受/阻止連接。
- 用戶模式應用程序將用戶的響應發回給標註驅動程序。
謝謝!
我已經構建了一個在內核模式下運行的WFP標註驅動程序。 現在,我試圖弄清楚如何在這個驅動程序和我的GUI應用程序之間進行通信,該應用程序以用戶模式運行。有任何想法嗎?內核模式和用戶模式應用程序之間的通信
正是我想要的是這樣的:
謝謝!
我同意LordDoskias。您需要創建一個設備對象並使其可用於Win32領域。然後你可以使用CreateFile
,ReadFile
,WriteFile
和已經提到的DeviceIoControl
來發送請求。
爲了從驅動程序獲得通知給應用程序,您可以使用所謂的inverted call model。你發送一些IRP(通過提到的機制之一),並以異步方式(或在單獨的線程中)執行此操作。然後,驅動程序將它們懸掛起來,直到它必須通知用戶模式組件,然後返回完成的IRP。替代方法是設置一些事件,並且有UM請求,無論駕駛者保持某種隊列......
的主旨在於,沒有直接的方式,駕駛者可以發送一些消息給用戶模式應用。
檢查這個API調用 - DeviceIoControl
從本質上講,你會做什麼是註冊驅動程序中的對象管理器,那麼你的GUI應用程序就可以打開它,併發送不同的命令和數據(有緩衝區做),然後你必須發送一些自定義的IOCTL代碼(請參考WDK手冊)。
我讀過一篇關於[Inverted Call Model](http://www.osronline.com/article.cfm?id=94)的優秀文章。也許這有幫助。 – QuangNHb 2014-11-10 07:44:05