トップページ⇒tech
998コメント379KB

【WDM】Windows Driver Model相談室【デバドラ】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0960 ◆0uxK91AxII 2011/03/25(金) 21:45:19.97
これはひどい。
0961デフォルトの名無しさん2011/03/26(土) 00:07:39.88
デバッガも使わんでデバッグメッセージが拾えんとか言ってんだろ。
話になんねー
0962デフォルトの名無しさん2011/03/26(土) 00:17:43.88
自称「C++は熟知」のコピペグラマだからな
0963デフォルトの名無しさん2011/03/26(土) 04:18:08.15
>>959
他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。

あとC++熟知しているなら、
UNREFERENCED_PARAMETERのマクロが何やってるかぐらいは確認すべき。
0964デフォルトの名無しさん2011/03/26(土) 04:18:51.88
あ、PCもう一台って書いたけどVMWareとか使って仮想PCでもできるよ。
0965デフォルトの名無しさん2011/03/26(土) 06:52:08.35
>>964
情報をありがとうございます。
2台は用意出来ないんですが
それって仮想シリアルポートドライバみたいなのが必要ってことですか?
0966デフォルトの名無しさん2011/03/26(土) 07:13:27.08
>>965
ずいぶん前に数度試しただけだから詳細は覚えてないが
VMWareだと仮想PC上の仮想シリアルがパイプになっているので
WinDbg側からはパイプに接続すればよかった。
と思ったがVMWareじゃなくてVirtualPCだったかもしれん。

仮想PCを起動するとパイプが作られるのでそれをWinDbgで開く
みたいな感じだった
先にWinDbgでひらいておこうとするとパイプがないと怒られたはず。

自分はHW固有のドライバ作ってたので
その環境は作ってはみたものの使い道なくてあまり使わなかった。
0967デフォルトの名無しさん2011/03/26(土) 09:02:16.23
>>966
パイプですか、よく分かりませんがキーワードで調べれば出てきそうですね。
貴重な情報をありがとうございます。
0968デフォルトの名無しさん2011/03/29(火) 13:54:19.16
hidusbfx2をキーボードに置き換えてみたるんだけど
ReportDescritorを返すところまでは呼ばれてて
その後びっくりマークになって正常に起動出来ませんでしたとかになる
他のコールバックは呼ばれてる様子もないしDescriptorの問題なんだろうけど
どっかに動くキーボード用のDescriptorってありますか?
とりあえず検索して出てきたのとHut1.1に載ってるサンプルは試したけど駄目でした
0969デフォルトの名無しさん2011/03/29(火) 14:43:33.51
USBキーボード挿してデスクリプタ見ればいいんじゃね?
0970デフォルトの名無しさん2011/03/29(火) 15:48:07.14
>>969
ホストがWin7 64でVMWareがあるけどPs/2だから
対応してるツールがないんです

それとちょっとだけ進展が
キーボードはブートデバイスだから
ブートデバイスIDを指定してやったら認識はしましたが
なぜか8個もキーボードが出てきてしまいました
0971デフォルトの名無しさん2011/03/29(火) 21:33:22.00
実体は1個みたいなんでとりあえず先に進めて
マウスとキーボードを動かそうとしてるんですが

マウスを動かすのに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
急にundefined; assuming extern returning intと出てビルドできなくなりました
解決方法はありますか?
0974デフォルトの名無しさん2011/03/31(木) 19:27:29.86
>>973
関数が定義されていない
急に出た理由までは知らんw
0975デフォルトの名無しさん2011/03/31(木) 20:05:36.97
カーネルモードで使えるGetTickCountに相当する関数って何なんですか?
精度は適当でいいんですが
0976デフォルトの名無しさん2011/03/31(木) 20:14:20.97
KeQueryTickCount
わかりました
0977デフォルトの名無しさん2011/04/02(土) 22:02:10.86
完全に標準関数のみで完結させればドライバに普通のC++で作ったlibを合成出来るかと思ったんですが
cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
0978デフォルトの名無しさん2011/04/02(土) 22:32:56.01
extern "C" を付け忘れてるとかじゃなくて?
0979デフォルトの名無しさん2011/04/02(土) 22:51:45.33
>>978
間違いなくついてます。/MT /MD どっちの出力でも駄目です。
__stdcallも駄目です。
0980デフォルトの名無しさん2011/04/02(土) 23:20:12.91
ドライバの場合、デフォルトの呼び出し規約が__stdcallだけど
0981デフォルトの名無しさん2011/04/02(土) 23:28:51.00
標準関数が使えると思ってるのが間違い
0982デフォルトの名無しさん2011/04/02(土) 23:41:28.46
>>980
ダミーの関数を作ってみたらいけて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.26
ここまでエラーメッセージなし
0984デフォルトの名無しさん2011/04/03(日) 00:01:35.04
とりあえず引数を消してみて、ライブラリをDDK側でコンパイルするようにしてみたけど変わらず
内部処理で文句を言うのにこのエラーしか出ないとかいうのは許せない
error LNK2019: unresolved external symbol _Func@4 referenced in fution _ParentFunc@16

0985デフォルトの名無しさん2011/04/03(日) 00:20:58.25
全部コード晒してみ
0986デフォルトの名無しさん2011/04/03(日) 00:34:50.80
C++側をコンパイルしてできた.objファイルの中に_Func@4の文字がちゃんとあるかい?
0987デフォルトの名無しさん2011/04/03(日) 01:04:34.54
つきつめたらこれがリンク出来ないみたい
http://www.packetizer.com/security/sha1/
これのsha-c.zipの中身はC言語で計算するだけだからこれで完結してるはずなんだけど
ためしにこのsha1.cを直接sourcesに入れて呼び出したらリンクエラーが出る
0988デフォルトの名無しさん2011/04/03(日) 01:45:52.69
情報小出しでウザすぎる
0989デフォルトの名無しさん2011/04/03(日) 03:46:09.99
変なことやろうとしてるのに小出しとかクソですな
0990 ◆0uxK91AxII 2011/04/03(日) 05:40:10.27
手っ取り早く
・*.cppではなく*.cにする
・build -cZ
0991デフォルトの名無しさん2011/04/03(日) 05:52:48.10
とりあえず原因は分かりました。
DDKのlibの形式はextern "C" + __stdcallです。
両方ともセットしないとうまくリンク出来ません。
0992デフォルトの名無しさん2011/04/03(日) 08:33:07.49
>>991
おまい・・・人の話を聞かないタイプだなw。
0993デフォルトの名無しさん2011/04/03(日) 11:12:55.95
>>991
DDK/libに関係なく、C⇔C++間で関数呼び出しがある場合は、extern "C" が必ず必要なんだが。
なんか最近、WDM/デバドラ以前にCの基本が解ってない人が多すぎる・・・
0994デフォルトの名無しさん2011/04/03(日) 14:15:49.21
情報を小出しにするような奴はろくでもないといういい例だった
0995デフォルトの名無しさん2011/04/03(日) 15:19:00.25
>>993
extern "C"がC言語を表すのはしってたけど、__stdcallをつけるのとつけないので
また違いが出てくるとまでは知りませんでした。
0996デフォルトの名無しさん2011/04/03(日) 19:53:27.11
batファイルなんですがobjfre_wxp_x86とかi386とかを取得出来る変数ってありますか?
0997 ◆0uxK91AxII 2011/04/04(月) 00:48:47.67
>>996
ある。
ふつーにsetで出てくるし。
0998デフォルトの名無しさん2011/04/04(月) 11:44:57.20
>>997
setにそんな使い方があるとは、どうもありがとうございます。
レス数が950を超えています。1000を超えると書き込みができなくなります。