如何在Windows中與用戶級的驅動程序進行通信? (Vista,如果這有所作爲。)我可以以及如何與驅動程序站點的服務進行通信?將Windows驅動程序連接到用戶級服務
我其實不是很懶,應該讓我的老闆給我買一本書,但我不知道是哪一本。猜測MSDN的命令和部分會帶來很多緊張和時間,而沒有正確的術語來搜索。有人可以給我一些條款來查找文檔嗎?
如何在Windows中與用戶級的驅動程序進行通信? (Vista,如果這有所作爲。)我可以以及如何與驅動程序站點的服務進行通信?將Windows驅動程序連接到用戶級服務
我其實不是很懶,應該讓我的老闆給我買一本書,但我不知道是哪一本。猜測MSDN的命令和部分會帶來很多緊張和時間,而沒有正確的術語來搜索。有人可以給我一些條款來查找文檔嗎?
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過濾器驅動程序中只做一次。再次詢問,是否需要更多信息。
我必須這樣做,作爲保留鏈接的答案,而不是作爲對克里斯托弗的評論。
再次感謝。感謝這篇教程,我可以在短時間內添加另一個答案。這是命名例如。通過
IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);
我需要。 (我推薦上面的教程製作容易理解一個複雜的話題)
用戶級程序然後可以通過打開文件句柄與司機溝通:
CreateFile("\\\\.\\Example",
除了什麼上面說,你的問題:「能我,以及如何與司機網站的服務進行溝通?「
這通常是通過他們所稱的「反向呼叫」完成的。您將發送一個IOCTL並阻塞,直到驅動程序用請求的數據填充它。
另外,關於要訂購什麼書,我確實喜歡Greg Hoglund Rootkits的基本驅動程序書(即Hello World驅動程序)。 OSR Online非常棒。一箇舊的,但仍然很棒的是Windows NT設備驅動程序開發。 OSR擁有經典的偉大書籍重印。
確實如此,微軟的WDK附帶的例子可能會回答您的許多問題。
在書:「發展與Windows驅動程序基礎驅動程序」已recommendet在回答learning to program drivers
的現成的構建與執行WDK sample SIOCTL是你最好的選擇。只有幾百行代碼(主要是註釋和空格)可以讓你快速開始並理解Windows I/O模型,這是用戶的正式方式,即內核通信方法。
每個Windows驅動程序學習者都應該從這一開始。
感謝您的快速響應,我正在挖掘答案(測試)。該鏈接需要(又一個)網絡帳戶被創建。 – 2009-07-17 06:24:54