2011-02-08 55 views
5

我已經構建了一個在內核模式下運行的WFP標註驅動程序。 現在,我試圖弄清楚如何在這個驅動程序和我的GUI應用程序之間進行通信,該應用程序以用戶模式運行。有任何想法嗎?內核模式和用戶模式應用程序之間的通信

正是我想要的是這樣的:

  1. 調出驅動程序可以檢測4444端口的連接進來的(這不是我的問題的一部分)
  2. 驅動程序發送一條消息給用戶模式應用。
  3. 該應用程序向用戶顯示通知,並詢問是否應接受/阻止連接。
  4. 用戶模式應用程序將用戶的響應發回給標註驅動程序。

謝謝!

回答

4

我同意LordDoskias。您需要創建一個設備對象並使其可用於Win32領域。然後你可以使用CreateFile,ReadFile,WriteFile和已經提到的DeviceIoControl來發送請求。

爲了從驅動程序獲得通知給應用程序,您可以使用所謂的inverted call model。你發送一些IRP(通過提到的機制之一),並以異步方式(或在單獨的線程中)執行此操作。然後,驅動程序將它們懸掛起來,直到它必須通知用戶模式組件,然後返回完成的IRP。替代方法是設置一些事件,並且有UM請求,無論駕駛者保持某種隊列......

的主旨在於,沒有直接的方式,駕駛者可以發送一些消息給用戶模式應用。

+1

我讀過一篇關於[Inverted Call Model](http://www.osronline.com/article.cfm?id=94)的優秀文章。也許這有幫助。 – QuangNHb 2014-11-10 07:44:05

2

檢查這個API調用 - DeviceIoControl

從本質上講,你會做什麼是註冊驅動程序中的對象管理器,那麼你的GUI應用程序就可以打開它,併發送不同的命令和數據(有緩衝區做),然後你必須發送一些自定義的IOCTL代碼(請參考WDK手冊)。

相關問題