討論區快速選單
知識庫快速選單
網路投保旅行平安險 政府補助!學嵌入式+物聯網 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
USB DEVICE的IO問題
更改我的閱讀文章字型大小
作者 : thework(說真的)
[ 貼文 11 | 人氣 7891 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/23 下午 09:12:02
我想問一個問題。

USB的HID標準joystick,可以經由DDK開發驅動程式之後,搭配AP送出ㄧ個讓應用程式絕對接受的鍵盤或是滑鼠指令嗎?

是這樣的,我公司用ㄧ支joystick的HID標準人性化裝置,訂做了一支AP,AP是用來定義每個JOYSTICK上的按鍵的動作用的,而所有的動作都是"標準鍵盤"上的動作,例如我定義了JOYSTICK上的A鍵的動作內容為鍵盤上的F1,按了JOYSTICK上的A鍵後,電腦便會收到A訊號。

結果是很理想的,電腦是接收了這個訊號,但是,某些應用程式不接受!!!!
為了解決這個問題,我們請教過很多高手,回答是類似這樣的,
要丟出近盤的訊號,必須要使用USB鍵盤的版子做,
若要丟出滑鼠的訊號,就必須要使用滑鼠的版子做,
若要ㄧ個硬體可以丟出鍵盤或滑鼠的訊號,要用複合晶片做。
因為取決於應用程式是不是會接受,是firmware的差異。
當板子決定好,用DDK開發新的驅動程式搭配AP讓訊號送到電腦的時候,是僅次於Kernel mode的軟體命令,請問各位,這個說法是合理的嗎?


作者 : dersheng(Dersheng) 人氣指數超過10000點
[ 貼文 62 | 人氣 13301 | 評價 220 | 評價/貼文 3.55 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人thework註記此篇回應為很有道理 2004/11/23 下午 11:11:50
我希望我沒有看錯你的問題, 我的想法如下...

我覺得應用程式(e.g., Excel) 並不知道keyboard or mouse event
是來是usb keyborad/mouse or ps/2 keyboard/mouse

你的問題"好像"是你的AP並沒有成功地把想要模擬的按鍵 or 滑鼠訊息塞到
應用程式的message queue中. 用vc的spyxx監看一下.

為何不成功? 我也不知道.

可否說說看,你的AP是怎樣抓到Joystick的button, 以及如何模擬按鍵嗎?
作者 : thework(說真的)
[ 貼文 11 | 人氣 7891 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/24 上午 02:14:51
Dersheng兄

感謝您。

是這樣的,ㄧ般的應用程式
是絕對可以支援得到,也就是說,可以用我們現有的東西操作
但是在某些會刻意規避的應用程式中,就無法支援,
我們試過用hook或是植入dll的方式都無法成功在這些特殊的程式中使用。

作者 : dersheng(Dersheng) 人氣指數超過10000點
[ 貼文 62 | 人氣 13301 | 評價 220 | 評價/貼文 3.55 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/24 上午 09:22:11
我不知道"刻意規避"的應用程式是哪一個,
他是直接讀特定硬體的資料來做自己專用的鍵盤/滑鼠嗎?

若是一般的鍵盤滑鼠也可以操作該應用程式,
我認為你的AP也應該要做得到,

用vc的spyxx監看一下該應用程式收到什麼message吧!
作者 : thework(說真的)
[ 貼文 11 | 人氣 7891 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2004/11/24 下午 03:07:44
是的是的

ㄧ般的鍵盤滑鼠可以直接做到

舉個例子,我們常會在這個應用程式上執行ctrl+V,用鍵盤可以達到,但是用我們的joystick加上AP所定義的ctrl+V就不成功。但並不是我們的AP有問題,因為我們的AP在別的地方是正常的。

關於這個問題,不是發生在哪一個應用程式不接受,而是我們若單獨使用AP,在某些控制上的層級就不夠高

關於我們的AP,我們目前用過很多種技術,每一套AP都可以正常使用,唯獨碰上幾個應用程式,就失效。所以我們判定要更低階的命令就只能從驅動程式著手。

因為直接可以在標準鍵盤上下指令,若我們要讓這支device不會有問題,就得想辦法讓他從正常的通道送出標準鍵盤的正常訊號,於是我們想投靠驅動程式。
作者 : dersheng(Dersheng) 人氣指數超過10000點
[ 貼文 62 | 人氣 13301 | 評價 220 | 評價/貼文 3.55 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人thework註記此篇回應為很有道理 2004/11/24 下午 05:20:58
我還是覺得 你的AP在模擬keyboard message "不夠標準",
所以遇到一些檢查keyboard message "比較嚴格"的應用程式就失效了

純屬猜測!
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/8 下午 05:43:28
我也遇到相同的問題

在測試上
一般的AP都可以收到自己的實驗品送出的鍵盤訊息

不論是WM_KEYDOWN與WM_KEYUP
還是DirectInput的鍵盤輸入
都可以抓得到鍵盤訊息

偏偏特定的AP就是沒有反應
用SPY++去檢查
真實按鍵在該AP裡有送出WM_KEYDOWN與WM_KEYUP
但是在自己的實驗品送到該 AP按鍵就消失了

所以初步結論
可能還是要寫驅動程式
由Windows底層送出鍵盤訊息

如果這個問題
有人有解出來過的話
請分享一下您的心得好嗎?
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 02:11:16

不如研究一下 那些特定的ap是怎麼避掉的...
是不是有去做來源或其它引數的判斷..

應該你做個能避掉的程式,也許就可以反其道來走他的漏洞。
作者 : thework(說真的)
[ 貼文 11 | 人氣 7891 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 02:19:52
本案已經完成開發
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 02:50:58
>不如研究一下 那些特定的ap是怎麼避掉的...
>是不是有去做來源或其它引數的判斷..
>應該你做個能避掉的程式,也許就可以反其道來走他的漏洞。

我是很想看它是用什麼方式
過濾掉外掛送進去的鍵盤訊息
可是
手邊沒有比較好的工具可以用啊
W32DASM又打不開該AP
所以沒辦法直接去追該AP的防護機制到底是怎麼寫的
(還是你可以推薦一套比較好用的Debug工具?)

我知道有API可以做到清空視窗的訊息佇列
可是他應該有一個檢查機制去判斷
到底什麼時候才要清空視窗的訊息佇列裡的鍵盤訊息
判斷訊息來源的方式
我也有想過
可是除了驅動程式可以透過Windows系統去送訊息以外
其他的方式都會把訊息來源指向送出訊息的特定AP吧? 如果抓得到來源的話

好想拿螺絲起子把搖桿拆了
去看看裡頭的電路有沒有IC的編號
以IC編號去反追他有哪些功能

某個可以對應鍵盤的搖桿
他的驅動程式我正在解
可是目前沒看到他有用到DDK裡跟鍵盤相關的任何函式
他是很像透過驅動程式去處理
可是為什麼該公司出的眾多搖桿中
只有一款搖桿有支援鍵盤對應呢?
難道是該搖桿的電路裡有什麼不同的特別處理嗎?


某.sys用到

HAL.DLL的
KeGetCurrentIrql
KfAcquireSpinLock
KfReleaseSpinLock

NTOSKRNL.EXE的
ExAllocatePoolWithTag
ExFreePool
InterlockedDecrement
InterlockedExchange
InterlockedIncrement
IoAcquireCancelSpinLock
IoAllocateIrp
IoAttachDeviceToDeviceStack
IoCancelIrp
IoCreateDevice
IoCreateSymbolicLink
IoDeleteDevice
IoDeleteSymbolicLink
IoDetachDevice
IofCallDriver
IofCompleteRequest
IoFreeIrp
IoGetDeviceProperty
IoOpenDeviceRegistryKey
IoRegisterDeviceInterface
IoReleaseCancelSpinLock
IoSetDeviceInterfaceState
KeClearEvent
KefAcquireSpinLockAtDpcLevel
KefReleaseSpinLockFromDpcLevel
KeInitializeEvent
KeInitializeMutex
KeInitializeSpinLock
KeReleaseMutex
KeRemoveEntryDeviceQueue
KeSetEvent
KeWaitForSingleObject
memmove
ObfDereferenceObject
PoCallDriver
PoRequestPowerIrp
PoSetPowerState
PoStartNextPowerIrp
RtlAppendUnicodeStringToString
RtlFreeUnicodeString
RtlInitUnicodeString
RtlUnicodeStringToAnsiString
swprintf
ZwClose
ZwCreateKey
ZwOpenKey
ZwQueryValueKey

USBD.SYS的
_USBD_ParseConfigurationDescriptorEx@28

還在想
該怎麼做會比較好?

作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 03:04:34
誰知道
除了硬體有支援以外
以軟體技術可以做到什麼程度?
該進入Windows的rang 0嗎?
還是rang 3的方式寫一般的AP就可以做到?
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 03:18:50
例如

某隻支援對應鍵盤的搖桿
在電腦A上, 裝過官方的驅動程式, 並手動設定了搖桿對應的鍵盤按鍵
經實驗驗證
確定該搖桿在電腦A上可以成功將搖桿訊息轉鍵盤訊息

請問直接把搖桿拔到
未安裝該搖桿驅動程式的電腦B上
實驗後
卻沒有任何鍵盤反應
這代表什麼?

該搖桿的對應鍵盤設定是透過驅動程式達成的?
還是驅動程式只是在插入搖桿時
會自動先做鍵盤對應的初始化設定動作?

我原本以為該搖桿是所謂的復合晶片
在晶片上做到可程式化鍵盤對應功能
可是
有人對我說
如果搖桿拔到電腦B就沒反應
就一定是該鍵盤對應功能是在驅動程式裡實做的
這種說法對嗎?

我有一點迷惑了
以前學單晶片8048/8051的經驗搬到電腦上
不知道還剩多少?

我原本是想寫USB驅動程式
架在硬體模擬層上
以IRQ去觸發相對應的程式碼去透過Windows送出仿鍵盤的訊息
可是不知道這種作法是否繞遠路
有更好的做法嗎?
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 03:30:00
>本案已經完成開發

能不能請您提示一下
您最後到底是選擇哪一種方式?

1.搖桿轉鍵盤的特製AP?
2.驅動程式?
3.還是複合晶片的特定搖桿?

目前1我實驗不出來, 準備晚上去重慶南路找驅動程式的書了
手邊目前先找到 Win 98/2000/XP 這三套DDK了

如果寫驅動程式的話
sys, drv, vxd
那一種比較好?
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 06:20:32

我還是不是很懂
你要的是一隻 看起來像是搖桿的 鍵盤 嗎?

那直接把device裡hid 的 descriptor報成keyboard 然後送keyboard的key 進系統吧
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 06:27:35
我需要
能當鍵盤用的搖桿吧
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 06:31:07
你去找那隻別人做的 可以動的驅動程式的INF POST上來
看看他是加了什麼料

答案也許出乎意料的簡單,想開點
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 06:32:01
1.搖桿轉鍵盤的特製AP?
2.驅動程式?
3.還是複合晶片的特定搖桿? <----這就應該是不用考慮了...搞太大也太貴了
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 06:45:14
我在想說

1找看看有沒有辦法可以把windows message queue裡面正在排隊的訊息拿出來
改一改..改看system like ,讓你的特定程式不會感覺到是假的。

2放一層驅動程式,專門把 搖桿input 移花接木到 鍵盤input

3乾脆報成keyboard,系統上接兩隻usb keyboard應該也是可以用時動。
  mouse就可以喲~

幫你做好了..
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 07:12:53

>我在想說
>
>1找看看有沒有辦法可以把windows message queue裡面正在排隊的訊息拿出來
>改一改..改看system like ,讓你的特定程式不會感覺到是假的。

這個我沒輒
MSDN Library裡關於WM_KEYDOWN 與WM_KEYUP的最後一個參數
根本講不清楚
誰知道lParam裡的 0~15 bits 要填什麼?
而且天曉得Windows還隱藏了什麼?

WM_KEYDOWN

    WPARAM wParam
    LPARAM lParam;
    
wParam
Specifies the virtual-key code of the nonsystem key.

lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.
0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23
Specifies the scan code. The value depends on the OEM.
24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28
Reserved; do not use.
29
Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
31
Specifies the transition state. The value is always zero for a WM_KEYDOWN message.


>
>2放一層驅動程式,專門把 搖桿input 移花接木到 鍵盤input

我原本想的類似你提到的第2個
但是搖桿還要能在一般AP裡當搖桿用
所以能夠1個搖桿, 在驅動程式裡同時建立2個裝置嗎?
1個對應原來的搖桿輸出
另一個以搖桿訊息對應鍵盤輸出(由其他AP來做按鍵對應設定與是否開啟此鍵盤的設定)

>3乾脆報成keyboard,系統上接兩隻usb keyboard應該也是可以用時動。
> mouse就可以喲~
>
>幫你做好了..

多少錢? 可以賒帳嗎? 我這個月很窮喔,
最好能給我原始程式研究用, 搖桿對應鍵盤的設定用AP與其它較小的部份, 我應該可以自己寫
(由於不同搖桿的按鈕順序有可能不一樣, 所以我想自己加上一個對照表去對應驅動程式裡的按鈕與實體搖桿的按鈕順序)
我沒寫過Windows下的驅動程式
要公司出錢外包
我又開不了口
所以如果你願意同意我分期付款的話
請用MSN跟我聯絡 playercd8@hotmail.com
如果沒上線
請用email到msn
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 07:29:28

怎麼做我也不知道你就很快樂的說好噢

先弄個類似的傢伙來看看情況如何

作者 : nouk(Nouk)
[ 貼文 31 | 人氣 1063 | 評價 100 | 評價/貼文 3.23 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/9 下午 08:22:21
DX我是沒研究.
不然其實只要driver模擬就好.
硬體隨便都碼可以...
作者 : johnny6740(牧童哥) VC++優秀好手驅動程式優秀好手Assembly優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 791 | 人氣 24021 | 評價 3770 | 評價/貼文 4.77 | 送出評價 31 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 10:06:48
我也是在做類似的產品,為了這個還跑去新竹上 WDM 的課程。目前也是一知半解,有問題可以互相討論
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 10:25:03
我沒時間了
這週內要實驗得出來
能不能用一般搖桿在特定AP裡送出鍵盤訊息

昨晚在天瓏買了2本驅動程式相關的書與其他的書
店員還問我要不要打統編
(不過算了, 公司報帳應該要事先申請, 而且公文旅行還不知道會等多久)

不過有先拿一些目錄了
如果上頭真的想買書放公司一起看的話

如果萬一
這週還實驗不出來的話
這個題目
我可能會當作自由研究項目
改在業餘時間再慢慢寫了

要一起研究的人
請用MSN與我聯絡
要賣code的人
也請先用MSN報價
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 10:59:50

阿米陀佛..
哪有那麼快滴....

昨天晩上回家的時候想到一問題
DX真是完全不熟
搖桿的input是有Direct input接去的話
還會發給Windows Message Queue嗎?

若會的話就很好處理

若不會的話 要怎麼攔到Direct input裡面
的搖桿按鍵碼?

嗚 我只有用過direct sound.
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 11:18:24
從Application 到硬體有7層

1.Application
2.Win32 API , or User-Mode Client Driver
3.Kernel-Mode Client Driver
4.Filter Driver
5.Class Driver, or Miniclass Driver
6.Port Drvivr , or Miniport Driver
7.Hardware Bus Driver

請問以這種題目而言
是寫第4種的嗎?

那DDK裡的
C:\NTDDK\src\wdm\hid\hclient
C:\NTDDK\src\wdm\hid\hidgame
C:\NTDDK\src\input\kbdclass
C:\NTDDK\src\input\kbfiltr
這些
哪幾個可以拿來利用的?
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 11:41:39
Direct input
他只是把相關的Win32 API打包成COM而已
並沒有明顯看到他有直接跟驅動程式或是硬體直接I/O溝通
所以他應該還是透過Windows原有的API去處理輸入的

經實驗證明
以rang 3的Win32 SDK的方式
送出的鍵盤訊息
可以被DirectInput收到
但是某些AP卻沒反應

DirectX裡DIrectInput的鍵盤範例
每一種模式我都實驗過了
確定都可以收得搖桿送出的鍵盤訊息
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/10 上午 11:48:36

我想的計劃如下
1寫一隻背景ap,拿來抓搖桿的input,然後把input key
  mapping 到keyboard key後轉發到keyboard driver.
2弄一個keyboard filter driver,內含一個小buffer,拿來接第1項發來的
   key。
3 等上層來要的keyboard input key時,就把小buffer裡的data給他。
  待小buffer裡的key被讀完,再讓他向下去執行。
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/11 下午 02:24:46
請問你的AP是如何跟驅動程式溝通的
用CreateFile嗎?
可是我在DDK的kbfiltr的範例裡
只看到他實作了

DriverObject->MajorFunction [IRP_MJ_CREATE] =
DriverObject->MajorFunction [IRP_MJ_CLOSE] = KbFilter_CreateClose;
DriverObject->MajorFunction [IRP_MJ_PNP] = KbFilter_PnP;
DriverObject->MajorFunction [IRP_MJ_POWER] = KbFilter_Power;
DriverObject->MajorFunction [IRP_MJ_INTERNAL_DEVICE_CONTROL] =KbFilter_InternIoCtl;

可是裝置名稱呢?
我沒看到啊
沒裝置名稱
AP要怎麼扔數據資料進去?

如果我要扔按鍵進去
是不是除了要給個裝置名稱與IoCreateSymbolicLink
還要實作
IRP_MJ_DEVICE_CONTROL
或IRP_MJ_WRITE
呢?

作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/11 下午 07:47:20
我沒實驗出來
可是我看到別人成功的案例
確定是可以只透過驅動程式去達到搖桿轉鍵盤了

不過
光就寫WDM就沒什麼把握了

那個成功的案例
竟然是把for 9x與 for nt分開寫2隻驅動程式
(.vxd 與 .sys 再透過一隻 dll 做處理, 與一個exe做設定用的介面)
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 上午 09:51:44


>我沒實驗出來
>可是我看到別人成功的案例
>確定是可以只透過驅動程式去達到搖桿轉鍵盤了
>
>不過
>光就寫WDM就沒什麼把握了
>
>那個成功的案例
>竟然是把for 9x與 for nt分開寫2隻驅動程式
>(.vxd 與 .sys 再透過一隻 dll 做處理, 與一個exe做設定用的介面)

太可惜我的pc現不能裝類似的驅動程式。

噢噢..雖然不太懂
但他好像不是改鍵盤/搖桿的 UpperFilters 也不是改driver

只有將.sys or .vxd裝進系統變成service
他用別的方法來溝通...
或是...............
直接在該驅動中 摧生 WM_的訊息出來....

蠻好玩的內...我去查查看msdn
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 12:06:47
我不知道你為何會認為他是NT服務
但是....

vxd的那個我目前無從解

sys的則確定他有用到

HAL.DLL的
HalBeginSystemInterrupt
HalDisplayString
HalGetBusData
HalGetInterruptVector
HalSetBusData
HalSetBusDataByOffset
HalSetTimeIncrement
HalTranslateBusAddress
KeGetCurrentIrql
KfAcquireSpinLock
KfLowerIrql
KfRaiseIrql
KfReleaseSpinLock
READ_PORT_UCHAR
WRITE_PORT_UCHAR


ntoskrnl.exe 的
_purecall
ExAllocatePoolWithTag
ExFreePool
ExRaiseStatus
IoAllocateMdl
IoBuildSynchronousFsdRequest
IoCreateDevice
IoCreateNotificationEvent
IoCreateSynchronizationEvent
IoCreateUnprotectedSymbolicLink
IoDeleteDevice
IoDeleteSymbolicLink
IofCallDriver
IofCompleteRequest
IoFreeMdl
IoGetDeviceObjectPointer
IoQueryDeviceDescription
IoRaiseInformationalHardError
IoReportResourceUsage
IoSetThreadHardErrorMode
KeBugCheckEx
KeClearEvent
KeDelayExecutionThread
KeDeregisterBugCheckCallback
KefAcquireSpinLockAtDpcLevel
KefReleaseSpinLockFromDpcLevel
KeGetCurrentThread
KeInitializeDpc
KeInitializeEvent
KeInitializeMutex
KeInitializeSpinLock
KeInsertQueueDpc
KeNumberProcessors
KePulseEvent
KeReadStateEvent
KeReadStateMutant
KeRegisterBugCheckCallback
KeReleaseMutex
KeSetEvent
KeSetImportanceDpc
KeSetPriorityThread
KeSetTargetProcessorDpc
KeWaitForSingleObject
memmove
MmAllocateContiguousMemory
MmCreateMdl
MmFreeContiguousMemory
MmGetPhysicalAddress
MmIsAddressValid
MmMapIoSpace
MmMapLockedPages
MmProbeAndLockPages
MmUnlockPages
MmUnmapIoSpace
MmUnmapLockedPages
ObfDereferenceObject
ObOpenObjectByName
ObOpenObjectByPointer
ObReferenceObjectByHandle
PsGetCurrentProcessId
PsGetCurrentThreadId
PsGetVersion
PsIsThreadTerminating
PsLookupThreadByThreadId
READ_REGISTER_UCHAR
RtlAnsiStringToUnicodeString
RtlCompareUnicodeString
RtlConvertLongToLargeInteger
RtlConvertUlongToLargeInteger
RtlFreeAnsiString
RtlFreeUnicodeString
RtlInitAnsiString
RtlInitUnicodeString
RtlUnicodeStringToAnsiString
RtlUnwind
wctomb
WRITE_REGISTER_UCHAR
ZwClose
ZwCreateFile
ZwCreateKey
ZwEnumerateKey
ZwEnumerateValueKey
ZwMapViewOfSection
ZwOpenKey
ZwOpenSection
ZwQueryInformationProcess
ZwQueryKey
ZwQueryObject
ZwQuerySystemInformation
ZwQueryValueKey
ZwReadFile
ZwSetValueKey
ZwUnmapViewOfSection
ZwWriteFile
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 01:42:52

我也不知道耶..猜滴

但是如果他去執行實際的io命令
把原來該沿著joy stick 驅動層 上報的data抓走了

那你想要同時在windows 裡enable keyboard 和joy stick
不覺得很奇怪嗎?

有個會沒反應吧
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 03:04:19
您找的
http://support.microsoft.com/default.aspx?scid=kb;en-us;176417

編譯不起來

JOYFILT.obj : error LNK2019: 無法在外部之程式庫中找到或連結所需之資料型別或函式的符號 ___security_cookie,於函式 _DriverEntry@8 中參考
JOYFILT.obj : error LNK2019: 無法在外部之程式庫中找到或連結所需之資料型別或函式的符號 @__security_check_cookie@4,於函式 _DriverEntry@8 中參考

你知道還要多Link哪些lib嗎?
我手邊沒NT 4的DDK
我用Win 2000的DDK應該沒差吧?
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 04:04:34
DDK裡的所有lib都搜尋過了
沒有___security_cookie 這種東西在Lib裡
反倒是SDK與VC++.Net 2003裡面
卻有一堆Lib有這個

怎麼辦?
SDK與DDK的Lib
能夠混用嗎?
還是我必須放棄Win 2000 DDK去找Win 2003 DDK來試?
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 06:13:08
找到了
那兩個是VC++.Net 2003的 專案設定裡
緩衝區溢位檢查的選項 /GS 所開啟的
關掉它後
就可以正常編譯了
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 06:19:38
還有基礎RunTime檢查也要改成預設

VC++是開Win32 DLL的專案
可是 Include 與 lib 要指向DDK的目錄
Link ntoskrnl.lib hal.lib 這兩個lib

連結時
進入點指定為 DriverEntry@8

作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/12 下午 06:32:17
基礎RunTime檢查

 
在 .c 的檔案裡
加上這行

#pragma runtime_checks( "", off )

不然有的專案設定裡
可能關不掉
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1591 | 人氣 138661 | 評價 2840 | 評價/貼文 1.79 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/8/17 下午 02:12:00
http://support.microsoft.com/default.aspx?scid=kb;en-us;176417

有沒人會寫這個sys的inf檔呢?
我卡在這個sys裝不起來
所以沒辦法實驗下去
作者 : tdtsai(新兵衛) 驅動程式優秀好手貼文超過200則
[ 貼文 362 | 人氣 779 | 評價 1290 | 評價/貼文 3.56 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/3 下午 01:59:30

>我在想說
>
>1找看看有沒有辦法可以把windows message queue裡面正在排隊的訊息拿出來
>改一改..改看system like ,讓你的特定程式不會感覺到是假的。
>
>2放一層驅動程式,專門把 搖桿input 移花接木到 鍵盤input
>
>3乾脆報成keyboard,系統上接兩隻usb keyboard應該也是可以用時動。
> mouse就可以喲~
>
>幫你做好了..

Yes ... 這個方法最簡單 只要在IOCTL_HID_GET_REPORT_DESCRIPTOR 動手就好 ...
不然就要用Hack API 去 Hack System message queue 就像天堂的掛網程式一樣呵呵
作者 : tellme78788(20100410)
[ 貼文 35 | 人氣 0 | 評價 130 | 評價/貼文 3.71 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/1/22 下午 01:51:51
2011/1/22 下午 01:44:44
這邊有我之前在網路上找到的滿多跟嵌入式Linux driver相關的教學影片,應該對你會有幫助~ 加油^^

http://www.powercam.cc/home.php?user=ittraining&f=slide&v=list&fid=5580

或是參考這個Linux驅動程式教學網站http://www.ittraining.com.tw/etd/course/embedded_driver.html?ref=73
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新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.15625