【WDM】Windows Driver Model相談室【デバドラ】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
2011/01/29(土) 00:46:180931923
2011/01/29(土) 01:19:39>>930
説明不足ですいません。
このスレの趣旨に基づき、質問を絞ります。
- とあるソフトが発する音を横取りするのが最終目的。win全体の音でも構わない
- フックする場所は、ユーザーモードであればどこまでも構わない。
- 目的のために、ハードウェア導入、もしくはハードウェア依存のドライバ導入など、ハードウェアに関する作業は極力避けたい
- そのソフトをollydbgで覗くと、DSOUNDからDeviceIOCOntrolが頻繁にコールされており、恐らくDirectX系が使われている
現状
- ollydbgにて、DeviceIOControlの引数inBufferをちょくちょく弄っても正常に音が鳴っている「ぽい」し、WriteFileもコールされてないので、詰まった
質問
- 上記の目的は、DeviceIOControlのフックにより達成できるか?出来るのであれば、どういう手法、攻め方をすればいいか
- そもそも、何か大きな勘違いをしていないか
waveOut系で音を鳴らすアプリケーションであれば、恐らくなんとかフック・横取りできる程度のスキルは
あるつもりなんですが、DeviceIOControl とか、低級な制御には余り詳しくなく、また適切なスレも無いために、
このスレでさせて頂いた次第です。
どうぞよろしく願いします。
0932デフォルトの名無しさん
2011/01/29(土) 01:22:380934923
2011/01/29(土) 12:45:52>>933
Unlock関数のフックで、スタックからwaveが引き抜けそうです。
COMの解析は初めてでしたが、思ったより簡単で助かりました。
ありがとうございました。
0935デフォルトの名無しさん
2011/02/04(金) 20:35:45KeyboardClassServiceCallback内でZwOpenFile使うとブルースクリーンになってしまうだよな。。
kbdclass内じゃファイルアクセス処理は使えないんけ?
(フィルタドライバ内では使えてたんだけど。。)
0936デフォルトの名無しさん
2011/02/04(金) 20:37:210937935
2011/02/04(金) 21:19:40わかってる。
お手軽にキー入れ替えをやってみたくてね。
ファイルにキー入れ替え情報を設定して、それを読み込んで反映できないかなって。。
(KeyboardClassServiceCallback内って書いたけど、これじゃキーが押されるたびに
ファイルアクセスしてしまうから、ドライバ起動時にやるべきか。もちろん出来ればの話だけど)
0938デフォルトの名無しさん
2011/02/04(金) 22:08:08IRQLと、そのそれぞれのレベルで使える関数の制限について勉強してね
設定を読み出すなら、ふつーにレジストリ経由が無難。
0940935
2011/02/05(土) 02:47:20確かにZwOpenFileはIRQLがPASSIVE_LEVELのときのみ使用可能って書いてあるね。。。
DriverEntry内ではIRQLがPASSIVE_LEVELだったので、ファイルの情報を
DriverEntryで取得して内部変数で保持する方法で今回は逃げてみるよ。
とりあえず今自分のやりたいことは出来そうだけど、こりゃ本腰いれて勉強しないと
難しいね。
参考書買って勉強してきま
>>938
>>939
感謝!
0941デフォルトの名無しさん
2011/03/05(土) 02:30:07.47moufltrを書き換えて使えばいいんですかね?
単純なフィルタ機能だけじゃなくボタンを押してない時にボタンを押したりするのを
アプリからの制御でやろうかと思いまして
moufltrはたぶんPS/2用のフィルタになるんだと思うんですが
hidとは違うフォルダにあるんで勝手にそう思ってるだけなんだけども
USBにもこれは適用出来るんですか?
0942941
2011/03/05(土) 13:55:54.31ドライバ更新でインストールしてアッパーフィルタにmoufiltrが出てるんだけど
DebugViewには何のメッセージも出てきません
どこから手をつけていいかも分からない状態なんで
とりあえず動くものを手にいれたいんですがどうしたらいいんでしょう?
0944デフォルトの名無しさん
2011/03/05(土) 17:15:44.380945デフォルトの名無しさん
2011/03/05(土) 18:39:00.61SetCursorPos(...)やPostMessage(...,WM_LBUTTONxxxx,...)で出来そうに思うが・・・
0946デフォルトの名無しさん
2011/03/05(土) 19:16:20.210947デフォルトの名無しさん
2011/03/05(土) 19:42:58.48入力の生成の部分のことですか?
何か動くものがほしくてmouclassもVMWare上のXP SP3に入れてみて
WPFも解除してデバイス表示で上書き出来てるのは確認しましたが
やっぱりDebugViewにはそれらしいメッセージは出てきません
>>944
VM上ではACIPI\PNP0F13だからPS/2だと思うんですが動いてないから違うんですかね
>>945
今はテスト用にVM上のXPにドライバを入れてますが
普段はVM上で別のOSやアプリを動かしててホストからコントロールするわけですが
なぜかVMはプログラムで生成された入力情報は完全に遮断してしまってるんで
VMの中身が操作出来ないんです
それにドライバの作り方にも興味があるんであえてやってみようかと
checked build
0949デフォルトの名無しさん
2011/03/06(日) 19:16:46.56Inf2catがうまく通らない rramdisk.infをどう修正すればいいやら・・・・
0950デフォルトの名無しさん
2011/03/10(木) 21:42:54.63CatalogFile=toaster.cat
これがあると勝手にやってくれたような記憶があるんだが。
0951デフォルトの名無しさん
2011/03/14(月) 20:33:47.880952デフォルトの名無しさん
2011/03/25(金) 08:47:27.84IOCTLのコードを追加してInputデータを与えようとしてて
サンプルは動くところまで確認して
独自のIOCTLコードを発行しても反応がない
たぶんこの行でインプットがあるせいではじかれてるのかと思い削除してみると
UNREFERENCED_PARAMETER(InputBufferLength);
コールバック関数定義の部分
KbFilter_EvtIoDeviceControlFromRawPdo(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength, *
の一番したの行でc2220エラーが出てコンパイルが通りません
何のことですかね?
C++は熟知してるけど、まるで違う言語を扱ってるくらい動作が違う
0953デフォルトの名無しさん
2011/03/25(金) 09:49:47.02パラメーターを受け取るとこまで出来た
なんじゃこりゃ
0954デフォルトの名無しさん
2011/03/25(金) 14:26:09.93嘘だ。
0955デフォルトの名無しさん
2011/03/25(金) 16:52:49.26次に同じ要領でマウスドライバも作ってますがrawpdoをkbfiltrからコピペしてみて
コンパイルしてインストールしたけどIOCTL用のデバイス名が出てこない
そもそもドライバが動いてなさそうなんですが
問題はEvtDeviceAddで何か失敗してるんだろうけど
マウスドライバは起動時に読み込まれるからDebugViewでメッセージが取れない
起動時のメッセージを見る方法ってどうすればいいんですか?
0956デフォルトの名無しさん
2011/03/25(金) 17:58:57.120957デフォルトの名無しさん
2011/03/25(金) 20:43:20.67他の部分がバグってるっぽいですが
それも問題になるんですか?
0958デフォルトの名無しさん
2011/03/25(金) 20:48:48.91ちゃんとコールバックされてますね
0959デフォルトの名無しさん
2011/03/25(金) 21:04:26.32いずれにしても起動時のデバッグメッセージが拾えるともっと早く解決したんですけどね
0961デフォルトの名無しさん
2011/03/26(土) 00:07:39.88話になんねー
0962デフォルトの名無しさん
2011/03/26(土) 00:17:43.880963デフォルトの名無しさん
2011/03/26(土) 04:18:08.15他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。
あとC++熟知しているなら、
UNREFERENCED_PARAMETERのマクロが何やってるかぐらいは確認すべき。
0964デフォルトの名無しさん
2011/03/26(土) 04:18:51.880965デフォルトの名無しさん
2011/03/26(土) 06:52:08.35情報をありがとうございます。
2台は用意出来ないんですが
それって仮想シリアルポートドライバみたいなのが必要ってことですか?
0966デフォルトの名無しさん
2011/03/26(土) 07:13:27.08ずいぶん前に数度試しただけだから詳細は覚えてないが
VMWareだと仮想PC上の仮想シリアルがパイプになっているので
WinDbg側からはパイプに接続すればよかった。
と思ったがVMWareじゃなくてVirtualPCだったかもしれん。
仮想PCを起動するとパイプが作られるのでそれをWinDbgで開く
みたいな感じだった
先にWinDbgでひらいておこうとするとパイプがないと怒られたはず。
自分はHW固有のドライバ作ってたので
その環境は作ってはみたものの使い道なくてあまり使わなかった。
0967デフォルトの名無しさん
2011/03/26(土) 09:02:16.23パイプですか、よく分かりませんがキーワードで調べれば出てきそうですね。
貴重な情報をありがとうございます。
0968デフォルトの名無しさん
2011/03/29(火) 13:54:19.16ReportDescritorを返すところまでは呼ばれてて
その後びっくりマークになって正常に起動出来ませんでしたとかになる
他のコールバックは呼ばれてる様子もないしDescriptorの問題なんだろうけど
どっかに動くキーボード用のDescriptorってありますか?
とりあえず検索して出てきたのとHut1.1に載ってるサンプルは試したけど駄目でした
0969デフォルトの名無しさん
2011/03/29(火) 14:43:33.510970デフォルトの名無しさん
2011/03/29(火) 15:48:07.14ホストがWin7 64でVMWareがあるけどPs/2だから
対応してるツールがないんです
それとちょっとだけ進展が
キーボードはブートデバイスだから
ブートデバイスIDを指定してやったら認識はしましたが
なぜか8個もキーボードが出てきてしまいました
0971デフォルトの名無しさん
2011/03/29(火) 21:33:22.00マウスとキーボードを動かそうとしてるんですが
マウスを動かすのに7byteのデータ
ReportID, Button, X, Y, WheelをIOCTL_HID_READ_REPORTで渡すとマウスが動く
これは確認しました
でキーボードを9byte
ReportID, Modifier, Reversed, Code[6]を同じように発行すると反応なし
何が間違ってるんでしょう?
0972デフォルトの名無しさん
2011/03/30(水) 08:57:09.17おかげさまでキーボードとマウスの仮想USBドライバが完成しました
0973デフォルトの名無しさん
2011/03/31(木) 19:10:30.77解決方法はありますか?
0974デフォルトの名無しさん
2011/03/31(木) 19:27:29.86関数が定義されていない
急に出た理由までは知らんw
0975デフォルトの名無しさん
2011/03/31(木) 20:05:36.97精度は適当でいいんですが
0976デフォルトの名無しさん
2011/03/31(木) 20:14:20.97わかりました
0977デフォルトの名無しさん
2011/04/02(土) 22:02:10.86cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
0978デフォルトの名無しさん
2011/04/02(土) 22:32:56.010979デフォルトの名無しさん
2011/04/02(土) 22:51:45.33間違いなくついてます。/MT /MD どっちの出力でも駄目です。
__stdcallも駄目です。
0980デフォルトの名無しさん
2011/04/02(土) 23:20:12.910981デフォルトの名無しさん
2011/04/02(土) 23:28:51.000982デフォルトの名無しさん
2011/04/02(土) 23:41:28.46ダミーの関数を作ってみたらいけてstdcallで行けるのを確認しました。
問題は解決してないんですが
なぜかその関数だけがLNK2019で唯一の違いが引数だけです。
ダミーの方がunsigned short エラーの方が構造体のポインタ
構造体の宣言は
#pragma pack(1)
typedef struct _ST {
.....
} ST, *PST;
関数の宣言は
unsigned short Func(PST pst);
です。
宣言をいじったりしてるけど原因が分かりません。
>>981
結局バイナリ化したら元が何から来たかなんて関係なくないですか?
0983デフォルトの名無しさん
2011/04/02(土) 23:50:18.260984デフォルトの名無しさん
2011/04/03(日) 00:01:35.04内部処理で文句を言うのにこのエラーしか出ないとかいうのは許せない
error LNK2019: unresolved external symbol _Func@4 referenced in fution _ParentFunc@16
0985デフォルトの名無しさん
2011/04/03(日) 00:20:58.250986デフォルトの名無しさん
2011/04/03(日) 00:34:50.800987デフォルトの名無しさん
2011/04/03(日) 01:04:34.54http://www.packetizer.com/security/sha1/
これのsha-c.zipの中身はC言語で計算するだけだからこれで完結してるはずなんだけど
ためしにこのsha1.cを直接sourcesに入れて呼び出したらリンクエラーが出る
0988デフォルトの名無しさん
2011/04/03(日) 01:45:52.690989デフォルトの名無しさん
2011/04/03(日) 03:46:09.990991デフォルトの名無しさん
2011/04/03(日) 05:52:48.10DDKのlibの形式はextern "C" + __stdcallです。
両方ともセットしないとうまくリンク出来ません。
0992デフォルトの名無しさん
2011/04/03(日) 08:33:07.49おまい・・・人の話を聞かないタイプだなw。
0993デフォルトの名無しさん
2011/04/03(日) 11:12:55.95DDK/libに関係なく、C⇔C++間で関数呼び出しがある場合は、extern "C" が必ず必要なんだが。
なんか最近、WDM/デバドラ以前にCの基本が解ってない人が多すぎる・・・
0994デフォルトの名無しさん
2011/04/03(日) 14:15:49.210995デフォルトの名無しさん
2011/04/03(日) 15:19:00.25extern "C"がC言語を表すのはしってたけど、__stdcallをつけるのとつけないので
また違いが出てくるとまでは知りませんでした。
0996デフォルトの名無しさん
2011/04/03(日) 19:53:27.11ある。
ふつーにsetで出てくるし。
0998デフォルトの名無しさん
2011/04/04(月) 11:44:57.20setにそんな使い方があるとは、どうもありがとうございます。
レス数が950を超えています。1000を超えると書き込みができなくなります。