【WDM】Windows Driver Model相談室【デバドラ】
WINDOWS7 X64でGavotteRamdisk使うために自分でデジタル署名して使おうとしてるが
Inf2catがうまく通らない rramdisk.infをどう修正すればいいやら・・・・
サンプルの.catとかの拡張子がある一行を書けばいいだけでは?
CatalogFile=toaster.cat
これがあると勝手にやってくれたような記憶があるんだが。
951 :
デフォルトの名無しさん:2011/03/14(月) 20:33:47.88
へえ
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++は熟知してるけど、まるで違う言語を扱ってるくらい動作が違う
UNREFERENCED_PARAMETERは全然関係なく
パラメーターを受け取るとこまで出来た
なんじゃこりゃ
> C++は熟知してるけど
嘘だ。
キーボードドライバは完成しました
次に同じ要領でマウスドライバも作ってますがrawpdoをkbfiltrからコピペしてみて
コンパイルしてインストールしたけどIOCTL用のデバイス名が出てこない
そもそもドライバが動いてなさそうなんですが
問題はEvtDeviceAddで何か失敗してるんだろうけど
マウスドライバは起動時に読み込まれるからDebugViewでメッセージが取れない
起動時のメッセージを見る方法ってどうすればいいんですか?
VMでやっているならVMware toolsをアンインストールしてみよう。
アンインストールしたけど何も変わりませんよ
他の部分がバグってるっぽいですが
それも問題になるんですか?
試しにVMwareToolsを入れた状態で上からmoufiltr未改造をかぶせてみたら
ちゃんとコールバックされてますね
原因判明、完全にコピペしたつもりが1行抜けてました
いずれにしても起動時のデバッグメッセージが拾えるともっと早く解決したんですけどね
これはひどい。
デバッガも使わんでデバッグメッセージが拾えんとか言ってんだろ。
話になんねー
自称「C++は熟知」のコピペグラマだからな
>>959 他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。
あとC++熟知しているなら、
UNREFERENCED_PARAMETERのマクロが何やってるかぐらいは確認すべき。
あ、PCもう一台って書いたけどVMWareとか使って仮想PCでもできるよ。
>>964 情報をありがとうございます。
2台は用意出来ないんですが
それって仮想シリアルポートドライバみたいなのが必要ってことですか?
>>965 ずいぶん前に数度試しただけだから詳細は覚えてないが
VMWareだと仮想PC上の仮想シリアルがパイプになっているので
WinDbg側からはパイプに接続すればよかった。
と思ったがVMWareじゃなくてVirtualPCだったかもしれん。
仮想PCを起動するとパイプが作られるのでそれをWinDbgで開く
みたいな感じだった
先にWinDbgでひらいておこうとするとパイプがないと怒られたはず。
自分はHW固有のドライバ作ってたので
その環境は作ってはみたものの使い道なくてあまり使わなかった。
>>966 パイプですか、よく分かりませんがキーワードで調べれば出てきそうですね。
貴重な情報をありがとうございます。
hidusbfx2をキーボードに置き換えてみたるんだけど
ReportDescritorを返すところまでは呼ばれてて
その後びっくりマークになって正常に起動出来ませんでしたとかになる
他のコールバックは呼ばれてる様子もないしDescriptorの問題なんだろうけど
どっかに動くキーボード用のDescriptorってありますか?
とりあえず検索して出てきたのとHut1.1に載ってるサンプルは試したけど駄目でした
USBキーボード挿してデスクリプタ見ればいいんじゃね?
>>969 ホストがWin7 64でVMWareがあるけどPs/2だから
対応してるツールがないんです
それとちょっとだけ進展が
キーボードはブートデバイスだから
ブートデバイスIDを指定してやったら認識はしましたが
なぜか8個もキーボードが出てきてしまいました
実体は1個みたいなんでとりあえず先に進めて
マウスとキーボードを動かそうとしてるんですが
マウスを動かすのに7byteのデータ
ReportID, Button, X, Y, WheelをIOCTL_HID_READ_REPORTで渡すとマウスが動く
これは確認しました
でキーボードを9byte
ReportID, Modifier, Reversed, Code[6]を同じように発行すると反応なし
何が間違ってるんでしょう?
すみません。単にバグってただけでした。
おかげさまでキーボードとマウスの仮想USBドライバが完成しました
急にundefined; assuming extern returning intと出てビルドできなくなりました
解決方法はありますか?
>>973 関数が定義されていない
急に出た理由までは知らんw
カーネルモードで使えるGetTickCountに相当する関数って何なんですか?
精度は適当でいいんですが
KeQueryTickCount
わかりました
完全に標準関数のみで完結させればドライバに普通のC++で作ったlibを合成出来るかと思ったんですが
cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
extern "C" を付け忘れてるとかじゃなくて?
>>978 間違いなくついてます。/MT /MD どっちの出力でも駄目です。
__stdcallも駄目です。
ドライバの場合、デフォルトの呼び出し規約が__stdcallだけど
標準関数が使えると思ってるのが間違い
>>980 ダミーの関数を作ってみたらいけてstdcallで行けるのを確認しました。
問題は解決してないんですが
なぜかその関数だけがLNK2019で唯一の違いが引数だけです。
ダミーの方がunsigned short エラーの方が構造体のポインタ
構造体の宣言は
#pragma pack(1)
typedef struct _ST {
.....
} ST, *PST;
関数の宣言は
unsigned short Func(PST pst);
です。
宣言をいじったりしてるけど原因が分かりません。
>>981 結局バイナリ化したら元が何から来たかなんて関係なくないですか?
ここまでエラーメッセージなし
とりあえず引数を消してみて、ライブラリをDDK側でコンパイルするようにしてみたけど変わらず
内部処理で文句を言うのにこのエラーしか出ないとかいうのは許せない
error LNK2019: unresolved external symbol _Func@4 referenced in fution _ParentFunc@16
全部コード晒してみ
C++側をコンパイルしてできた.objファイルの中に_Func@4の文字がちゃんとあるかい?
情報小出しでウザすぎる
変なことやろうとしてるのに小出しとかクソですな
手っ取り早く
・*.cppではなく*.cにする
・build -cZ
とりあえず原因は分かりました。
DDKのlibの形式はextern "C" + __stdcallです。
両方ともセットしないとうまくリンク出来ません。
>>991 おまい・・・人の話を聞かないタイプだなw。
>>991 DDK/libに関係なく、C⇔C++間で関数呼び出しがある場合は、extern "C" が必ず必要なんだが。
なんか最近、WDM/デバドラ以前にCの基本が解ってない人が多すぎる・・・
情報を小出しにするような奴はろくでもないといういい例だった
>>993 extern "C"がC言語を表すのはしってたけど、__stdcallをつけるのとつけないので
また違いが出てくるとまでは知りませんでした。
batファイルなんですがobjfre_wxp_x86とかi386とかを取得出来る変数ってありますか?
>>997 setにそんな使い方があるとは、どうもありがとうございます。