2009-07-16 51 views
3

如何在Windows中與用戶級的驅動程序進行通信? (Vista,如果這有所作爲。)我可以以及如何與驅動程序站點的服務進行通信?將Windows驅動程序連接到用戶級服務

我其實不是很懶,應該讓我的老闆給我買一本書,但我不知道是哪一本。猜測MSDN的命令和部分會帶來很多緊張和時間,而沒有正確的術語來搜索。有人可以給我一些條款來查找文檔嗎?

回答

3

OSR online是編寫windows驅動程序的好資料。

How to name devices in kernel mode(帶有訪問安全性的鏈接)。

基本路徑是:

名稱與您的命名功能(例如WdfDeviceInitAssignName)一個設備對象。

在服務你這樣做:

hDev = CreateFile(<obj name>, ..., OVERLAPPED) 

DeviceIOControl(hDev, .. , OVERLAPPED); 

while(!end) 
    SleepEx(100, true /*bAltertable*/); 

... 

在驅動程序中,你有一個IRP隊列,在其中從排隊的服務請求。當你想打電話給你的服務時,你完成了一個IRP。

注意:它有點複雜...取決於您正在使用的驅動程序框架/模型。我必須在NDIS過濾器驅動程序中只做一次。再次詢問,是否需要更多信息。

+0

感謝您的快速響應,我正在挖掘答案(測試)。該鏈接需要(又一個)網絡帳戶被創建。 – 2009-07-17 06:24:54

1

我必須這樣做,作爲保留鏈接的答案,而不是作爲對克里斯托弗的評論。

再次感謝。感謝這篇教程,我可以在短時間內添加另一個答案。這是命名例如。通過

IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);

我需要。 (我推薦上面的教程製作容易理解一個複雜的話題)

用戶級程序然後可以通過打開文件句柄與司機溝通:

CreateFile("\\\\.\\Example", 
1

除了什麼上面說,你的問題:「能我,以及如何與司機網站的服務進行溝通?「

這通常是通過他們所稱的「反向呼叫」完成的。您將發送一個IOCTL並阻塞,直到驅動程序用請求的數據填充它。

另外,關於要訂購什麼書,我確實喜歡Greg Hoglund Rootkits的基本驅動程序書(即Hello World驅動程序)。 OSR Online非常棒。一箇舊的,但仍然很棒的是Windows NT設備驅動程序開發。 OSR擁有經典的偉大書籍重印。

確實如此,微軟的WDK附帶的例子可能會回答您的許多問題。

0

的現成的構建與執行WDK sample SIOCTL是你最好的選擇。只有幾百行代碼(主要是註釋和空格)可以讓你快速開始並理解Windows I/O模型,這是用戶的正式方式,即內核通信方法。

每個Windows驅動程序學習者都應該從這一開始。

相關問題