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

このエントリーをはてなブックマークに追加
949デフォルトの名無しさん:2011/03/06(日) 19:16:46.56
WINDOWS7 X64でGavotteRamdisk使うために自分でデジタル署名して使おうとしてるが
Inf2catがうまく通らない rramdisk.infをどう修正すればいいやら・・・・
950デフォルトの名無しさん:2011/03/10(木) 21:42:54.63
サンプルの.catとかの拡張子がある一行を書けばいいだけでは?

CatalogFile=toaster.cat

これがあると勝手にやってくれたような記憶があるんだが。
951デフォルトの名無しさん:2011/03/14(月) 20:33:47.88
へえ
952デフォルトの名無しさん:2011/03/25(金) 08:47:27.84
kbfiltrをいじってるんですが
IOCTLのコードを追加してInputデータを与えようとしてて
サンプルは動くところまで確認して
独自のIOCTLコードを発行しても反応がない
たぶんこの行でインプットがあるせいではじかれてるのかと思い削除してみると
UNREFERENCED_PARAMETER(InputBufferLength);
コールバック関数定義の部分
KbFilter_EvtIoDeviceControlFromRawPdo(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength, *
の一番したの行でc2220エラーが出てコンパイルが通りません
何のことですかね?
C++は熟知してるけど、まるで違う言語を扱ってるくらい動作が違う
953デフォルトの名無しさん:2011/03/25(金) 09:49:47.02
UNREFERENCED_PARAMETERは全然関係なく
パラメーターを受け取るとこまで出来た
なんじゃこりゃ
954デフォルトの名無しさん:2011/03/25(金) 14:26:09.93
> C++は熟知してるけど

嘘だ。
955デフォルトの名無しさん:2011/03/25(金) 16:52:49.26
キーボードドライバは完成しました
次に同じ要領でマウスドライバも作ってますがrawpdoをkbfiltrからコピペしてみて
コンパイルしてインストールしたけどIOCTL用のデバイス名が出てこない
そもそもドライバが動いてなさそうなんですが
問題はEvtDeviceAddで何か失敗してるんだろうけど
マウスドライバは起動時に読み込まれるからDebugViewでメッセージが取れない
起動時のメッセージを見る方法ってどうすればいいんですか?
956デフォルトの名無しさん:2011/03/25(金) 17:58:57.12
VMでやっているならVMware toolsをアンインストールしてみよう。
957デフォルトの名無しさん:2011/03/25(金) 20:43:20.67
アンインストールしたけど何も変わりませんよ
他の部分がバグってるっぽいですが
それも問題になるんですか?
958デフォルトの名無しさん:2011/03/25(金) 20:48:48.91
試しにVMwareToolsを入れた状態で上からmoufiltr未改造をかぶせてみたら
ちゃんとコールバックされてますね
959デフォルトの名無しさん:2011/03/25(金) 21:04:26.32
原因判明、完全にコピペしたつもりが1行抜けてました
いずれにしても起動時のデバッグメッセージが拾えるともっと早く解決したんですけどね
960 ◆0uxK91AxII :2011/03/25(金) 21:45:19.97
これはひどい。
961デフォルトの名無しさん:2011/03/26(土) 00:07:39.88
デバッガも使わんでデバッグメッセージが拾えんとか言ってんだろ。
話になんねー
962デフォルトの名無しさん:2011/03/26(土) 00:17:43.88
自称「C++は熟知」のコピペグラマだからな
963デフォルトの名無しさん:2011/03/26(土) 04:18:08.15
>>959
他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。

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

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

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

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

マウスを動かすのに7byteのデータ
ReportID, Button, X, Y, WheelをIOCTL_HID_READ_REPORTで渡すとマウスが動く
これは確認しました
でキーボードを9byte
ReportID, Modifier, Reversed, Code[6]を同じように発行すると反応なし
何が間違ってるんでしょう?
972デフォルトの名無しさん:2011/03/30(水) 08:57:09.17
すみません。単にバグってただけでした。
おかげさまでキーボードとマウスの仮想USBドライバが完成しました
973デフォルトの名無しさん:2011/03/31(木) 19:10:30.77
急にundefined; assuming extern returning intと出てビルドできなくなりました
解決方法はありますか?
974デフォルトの名無しさん:2011/03/31(木) 19:27:29.86
>>973
関数が定義されていない
急に出た理由までは知らんw
975デフォルトの名無しさん:2011/03/31(木) 20:05:36.97
カーネルモードで使えるGetTickCountに相当する関数って何なんですか?
精度は適当でいいんですが
976デフォルトの名無しさん:2011/03/31(木) 20:14:20.97
KeQueryTickCount
わかりました
977デフォルトの名無しさん:2011/04/02(土) 22:02:10.86
完全に標準関数のみで完結させればドライバに普通のC++で作ったlibを合成出来るかと思ったんですが
cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
978デフォルトの名無しさん:2011/04/02(土) 22:32:56.01
extern "C" を付け忘れてるとかじゃなくて?
979デフォルトの名無しさん:2011/04/02(土) 22:51:45.33
>>978
間違いなくついてます。/MT /MD どっちの出力でも駄目です。
__stdcallも駄目です。
980デフォルトの名無しさん:2011/04/02(土) 23:20:12.91
ドライバの場合、デフォルトの呼び出し規約が__stdcallだけど
981デフォルトの名無しさん:2011/04/02(土) 23:28:51.00
標準関数が使えると思ってるのが間違い
982デフォルトの名無しさん: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
結局バイナリ化したら元が何から来たかなんて関係なくないですか?

983デフォルトの名無しさん:2011/04/02(土) 23:50:18.26
ここまでエラーメッセージなし
984デフォルトの名無しさん:2011/04/03(日) 00:01:35.04
とりあえず引数を消してみて、ライブラリをDDK側でコンパイルするようにしてみたけど変わらず
内部処理で文句を言うのにこのエラーしか出ないとかいうのは許せない
error LNK2019: unresolved external symbol _Func@4 referenced in fution _ParentFunc@16

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