討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 網路投保旅行平安險 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
請教驅動程式控制的基礎問題
更改我的閱讀文章字型大小
作者 : truehero(真虛弱) 人氣指數超過10000點
[ 貼文 188 | 人氣 11797 | 評價 850 | 評價/貼文 4.52 | 送出評價 23 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 上午 11:32:19
請教各位先進 ,小弟目前手上拿到一個filter driver
其說明檔只提到 "請應用程式執行時hook該driver"
但根據小弟的理解 ,AP想與DRIVER溝通, 多透過DeviceIOControl 此API
且必須知道DRIVER 中宣告的 IO Control code,

莫非是小弟的理解有誤 ?,或是有其他方法可以得知driver中所宣告的Control code?
作者 : johnny6740(牧童哥) VC++優秀好手驅動程式優秀好手Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 791 | 人氣 24021 | 評價 3770 | 評價/貼文 4.77 | 送出評價 31 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人truehero註記此篇回應為很有道理 2005/8/12 上午 11:55:05
沒錯啊,若不曉得 Symbolic Name (or GUID),根本無法透過 CreateFile 開啟 Driver;若無 IOCTL Code 也無法透過 DeviceIOCTL 跟 Driver 溝通 (除非你用的是標準的 IOCTL code),所以要有 Driver Release 出來的相關 Header file 才能使用吧
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 01:39:52

>請教各位先進 ,小弟目前手上拿到一個filter driver
>其說明檔只提到 '請應用程式執行時hook該driver'

Hook?
我不太能理解你所說的?
Hook大多應用在1個AP對於另1個AP
做攔截處理
大多透過DLL檔

驅動程式裡的Hook
有那種AP 去Hook住驅動程式的機制嗎?
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 01:44:41
請爬文"hook"
作者 : 126(turn)
[ 貼文 91 | 人氣 5253 | 評價 350 | 評價/貼文 3.85 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/15 下午 06:21:07
就算有拿到driver的一些source code header可以做io control
也最好不要用DeviceIOControl方式
因為....很容易會造成系統不穩定,不是直接當機,就是藍天白雲
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/15 下午 07:55:12

>就算有拿到driver的一些source code header可以做io control
>也最好不要用DeviceIOControl方式
>因為....很容易會造成系統不穩定,不是直接當機,就是藍天白雲
>

你說的
會不會同時間重複進入驅動程式
所造成的
如果是的話
把同步鎖的機制寫進去
強迫他等待上一次的進入做完
作者 : truehero(真虛弱) 人氣指數超過10000點
[ 貼文 188 | 人氣 11797 | 評價 850 | 評價/貼文 4.52 | 送出評價 23 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/16 上午 01:39:08

>就算有拿到driver的一些source code header可以做io control
>也最好不要用DeviceIOControl方式
>因為....很容易會造成系統不穩定,不是直接當機,就是藍天白雲
>
請教一下,如果不用DeviceIOControl/ReadFile/WriteFile這些API
還有甚麼方法可以讓user mode的ap和driver溝通呢?
作者 : 126(turn)
[ 貼文 91 | 人氣 5253 | 評價 350 | 評價/貼文 3.85 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/16 上午 11:43:44
在AP堨咢sProperty
然後把driver堛歉roperty在AP source code埵A定義一次
這樣子就可以對driver做io control的動作了

至於,最好在PA堣ㄜn用DeviceIoControl的原因是...
如果,你的device是一張pci card...那或許還好
因為...你不會有事沒事在電腦還沒關機,加上ap正在執行時,把那張pci card拔起來

如果今天換成是一個usb device呢???
AP用DeivceIoControl,AP正在執行,然後把usb device拔起來....保證當機
先吧AP關掉,然後把usb deivce拔起來....保證沒事

為什麼呢???
各位大大想一下就會知道理由了 ^^|||
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/22 下午 03:07:50

想提一下..
DeviceIOControl使用時,把device拔起來會藍天白雲確實和driver有關。
但是應該說是driver對這個處理不夠好。
因為你把device拔起來的時候,驅動程式會碰到幾個情況,而這幾個情況
如果沒有處理好的話,就可能會藍天白雲,或更嚴重的,自已reboot去了。

1 下層返回未完成的device io control irp,應做適當的錯誤/失敗處理。
2 IO manager將會發來PNP_MN_SUPPRISE_REMOVE,應作適當處理。
    PNP_MN_SUPPRISE_REMOVE時一併考慮是否取消或完成其它正在
    進行或等待進行的irp。
3 上層若不知道底層device以經被未預期的移除,而不呼叫CloseHandle(...)
   則此時PNP_MN_REMOVE_DEVICE是發不下來的。
    (PS.AP結束時會對沒有close掉的handle發一個irp_close)。
4 IRP_REMOVE_DEVICE應做正確的回應。

我想,使用DeviceIOControl時拔除device應該要不造成藍天白雲,或reboot
才是一個正常的處理。

不過WHQL也不知道有沒有驗到這一條。
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/22 下午 03:22:30

可否點解指導一下KsProperty是啥東東
好神奇好有趣說..

什麼情況?什麼原理?怎麼用?
因為我去msdn查文件只有看到DX項下有這個..
可以請你教一下嗎?



作者 : 126(turn)
[ 貼文 91 | 人氣 5253 | 評價 350 | 評價/貼文 3.85 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/23 下午 06:20:04
>>我想,使用DeviceIOControl時拔除device應該要不造成藍天白雲,或reboot
>>才是一個正常的處理。
也許就像北極熊大大您說的,還要在Driver埵A做些處理,然而
這些處理的手續應該會很不好搞定,或者是...最後自己被Driver被搞定
再加上...我也沒處理過,所以才建議不要使用這個command

>>不過WHQL也不知道有沒有驗到這一條。
嗯....不知也,因為我是用KsProeryt

>>可否點解指導一下KsProperty是啥東東
>>好神奇好有趣說..
>>什麼情況?什麼原理?怎麼用?
>>因為我去msdn查文件只有看到DX項下有這個..
>>可以請你教一下嗎?
北極熊大大,不要那麼客氣啦
其實都是用COM物件,在AP與Driver之間溝通
用這個方法有一個好處,就是Device不會一直被DeviceIOControl給handle住
而且也可以正常的下I2C Command給Device
所以,就算即時的插拔,Driver沒有做一些例外的處理,也不會導致系統不正常
只是,您要有Driver的Source Code,才能夠把這些Propety加進去
留下您的e-mail,我把資料寄給您 ^^|||
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/4 下午 07:14:39

>>>我想,使用DeviceIOControl時拔除device應該要不造成藍天白雲,或reboot
>>>才是一個正常的處理。
>也許就像北極熊大大您說的,還要在Driver埵A做些處理,然而
>這些處理的手續應該會很不好搞定,或者是...最後自己被Driver被搞定
>再加上...我也沒處理過,所以才建議不要使用這個command
>
>>>不過WHQL也不知道有沒有驗到這一條。
>嗯....不知也,因為我是用KsProeryt
>
>>>可否點解指導一下KsProperty是啥東東
>>>好神奇好有趣說..
>>>什麼情況?什麼原理?怎麼用?
>>>因為我去msdn查文件只有看到DX項下有這個..
>>>可以請你教一下嗎?
>北極熊大大,不要那麼客氣啦
>其實都是用COM物件,在AP與Driver之間溝通
>用這個方法有一個好處,就是Device不會一直被DeviceIOControl給handle住
>而且也可以正常的下I2C Command給Device
>所以,就算即時的插拔,Driver沒有做一些例外的處理,也不會導致系統不正常
>只是,您要有Driver的Source Code,才能夠把這些Propety加進去
>留下您的e-mail,我把資料寄給您 ^^|||

喲.你好好噢.. 一般我都只有接觸到API和driver中間的東西
DirectX那邊一直都不清楚到底是怎樣

非常高興您提供線索給我 我會用功爬它的...
chingwen823@gmail.com

感恩噢~
作者 : eboytw2002(eBoy) 驅動程式優秀好手貼文超過200則人氣指數超過70000點
[ 貼文 338 | 人氣 70186 | 評價 2000 | 評價/貼文 5.92 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/15 下午 02:13:30
HI,

>> "請應用程式執行時hook該driver"
==>

Hook 的意思, 其實是用來與作業系統掛勾,
進而攔截並處理某些訊息之用 , 一般是使用 Process
封鎖某個 Event 或 message 用, 至於文件說的 Application
用來 Hook Driver , 可能是希望你用 Hook Event 來得知目
前 Application 的動作, 可以導致 Driver 內那一種 Function 被
Triggle , 並試著猜想應該對應到 Driver 內那一個動作, 並不是
真的可以抓到 IOCTL 去 callback driver function.

其實, 大部分寫hook都是為了攔截整個系統的訊息或是假裝
訊息給別人,這時常必須把hook寫在dll裡了

因為當你的程式啟動dll 裡的hook 後, 因為 DLL 的 Process 特性,
可以將 DLL 載入到其它的 process 行程裡,所以就可以利用她去
偷竊別人的 Event / message 或是假傳聖旨


>> 就算有拿到driver的一些source code header可以做io control
>> 也最好不要用DeviceIOControl方式, 因為....很容易會造成系統
>> 不穩定,不是直接當機,就是藍天白雲

==>
venny(北極熊) 說的對, 其實 IRP 是對應了所有的 State machines ,
所以應該不會有 Blue screen 的發生, 但若 Driver 中某個 State 沒有寫
好, 讓 CPU 或 OS 誤認為 Unknown exception , 就會有 Blue screen 的發
生, 這就是 Driver designer 的功力問題了....

例如 , 你沒處理 D3 的 Power state , 當 D3 發生時, 就看到藍藍的天了....
當然每個 Callback 都被規範對 OS 的影響程度, 有些不 CARE , 有些會
照成 crash


>> 我想,使用DeviceIOControl時拔除device應該要不造成藍天白雲,或reboot
>> 才是一個正常的處理。不過WHQL也不知道有沒有驗到這一條。

==>
Cancel IRP 和 PnP 會處理掉..... Code 要正確就行了, WHQL 是有測這一項 !!


>> KsProperty

==> KsProperty 是 Kernel stream 的 Property , 就是" 核心資料流的保管處理點"
好難翻......... 一般指的就是對於 streaming 的資料處理 , ( 就是對 Audio / Video
這些 Multimedia data 的處理方式 )

因為這些 Multimedia 的 data 有時間性, 所以會開闢一條 " 快速通關" 的 IRP 和 DATA
道路給 Multimedia 用. 因為 Microsoft OS kernel 不是專對 Multimedia streaming 處理的 OS ,
所以這些年來一直修改 WDM specification , 目前新的是 WDM 1.4b 版 on Multimedia

但 Property 對於 IRP 的傳法, 和正常的 I/O IRP 方法一樣, 但傳遞的手段, 退回到未包裝
的 Component Object model ( COM ) 了..........

Streaming 想成是水流一樣, 也就是說, 對於已經流過的 Data , 可以置之不理, 這蠻輔合
Audio / Video 的資料, 還有一點, 就是資料量大, 且不能夠 Delay ( 講是這樣講, 還是有
Delay )

想想看, 一條河流, 當要由上游的湖池中 , 流到你家, 要經過什麼呢 ?

上游的湖池當成是 Multimedia 的 Server ( 放影片的電腦公司 ) , 經過 水資源的處理站 (自
來水公司 , 可以想像成將 Data 做轉換/壓縮/加字幕/打馬賽克.... ) , 然後透過 已經鋪設好
的網路 ( 可能中間經過的路逕會不同, 但終點是一樣的 ) 傳到 HUB , 然後進入你的電腦,
再經過你電腦中的 Player 撥放器去 Decode ( 解開壓縮/ 還原字幕.... ) 去撥放................

以上整個過程, 叫作 Topology , 就是想成是 "地圖" 啦 !! 它規範了 data 怎麼流經的路徑,
和路徑上每個處理 Data 的點, ( 這些點就是 Property ) ,

所以 Property 是使用 COM 為基礎的設計 ( 因為要對 Data 作不同的處理, 並可重覆使用和
連接用 ) ,

Property 要怎麼處理 Data ( Stream 水流 ) 呢 ? 首先須要有 "引水道" 的管子, 和 "送水流" 的管
子, 這些管子叫作 PIN , 用來 Input / output streaming 用, 然後引入的水須要一個蓄水池來存水
作處理, 可能是沉澱, 過慮消毒... 等, 這個經蓄水池處理的過程就是 Filter 的意思........( 過濾器),

所以........
當你看到一個 KsProperty 有 Mpeg2 pin ( TS Pin ) , 和 Audio 或 Video 的 Pin 就是說這個 property
是用來輸入 Mpeg2 stream , 然後解成 Audio 和 Video 兩個不同的 Output 輸出

當然在一個 Property 可能有很多的 "小池" 用來處理資料, 也就是說 這個輸入的 Stream , 要經過
很多小處理 才能被輸出 , 這些小處理 ( 小池 ) , 叫作 Node , 在 Node 間也有引道 ( connection ) ,
..................

[eBoy]
好累............ 不打字了, 不會用再用 Skype call 我吧.......................... 好累
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/9/15 下午 03:02:58

挖挖挖 真是好玩

扣謝eBoy的詳細 導覽
不遠的將來會常常用到他..得快點k書囉~~~
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125