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

このエントリーをはてなブックマークに追加
156デフォルトの名無しさん
物理アドレスと仮想アドレスが合うようにマッピングしてメモリを確保する
関数、もしくは方法はありませんか?
物理アド==仮想アド ってこと???


仮想からマップさせて物理アド取得するんじゃダメなの?
158156:04/06/17 00:52
>>157
そうです。

一旦ページング機能を切りたいのです。
ページング機能を切るコードは物理アド=仮想アドなメモリ上に置く必要があると
思うのですが。
>>156
OS管理外領域つかうってのは?
>156
IoGetDmaAdapter()で得たハンドルを使ってAllocateCommonBuffer()するってのはどぉ?
>>156
http://tech.millto.net/~morry/vwin32/PhysMap/
これを煮るなり焼くなりはどうか?
>156
1)ユーザーモードでアドレスを指定してVirtualAlloc()を呼び仮想空間を確保。
2)そのアドレス値をカーネルモードに渡し、MmAllocateContiguousMemory()で物理空間を確保。
  確保できなかったら1)に戻る。
3)CR3レジスタから確保した仮想アドレスのテーブルを探す。そのテーブルを書き直し
  確保した物理アドレスにマップする。物理→仮想アドレス変換はMmGetVirtualForPhysical()を使う。

試していないけど
163デフォルトの名無しさん:04/06/18 13:34
>>155
うぷキボン
>>162
MmAllocateContiguousMemory()ってまずくね?
とにかくマップするだけの関数だったような。
PFNいじるしかない
166156:04/06/21 18:50
皆さん、レスどうもです。

基本的に>>162をベースに作りました。
ただ、物理メモリの空きを探すのにMmAllocateContiguousMemory()を使うのは
まずいようなので、PFNデータベースを参照しました。
(WinNT系のPFNの資料がほとんど見当たらなかったので、怪しいかも)
167デフォルトの名無しさん:04/06/22 21:46
WinXP SP2のシンボルファイル、まだー?
168155:04/06/22 23:00
169デフォルトの名無しさん:04/06/24 02:13
>>167
Windbgのシンボルサーバにはアップされているみたい。
XPのSP2 RC2でもコマンドが使えるようになった。
170デフォルトの名無しさん:04/07/04 19:24
USBのBulk転送をタイムアウト中断させるにはどうしたらいいの?
171デフォルトの名無しさん:04/07/04 22:23
>>167
http://WindowsBeta.microsoft.com
にあがってたよ。
ベータアカウント持ってる人に頼んでみたら。
>>170
ドライバは、bulkusbのままでいいんでない?

FILE_FLAG_OVERLAPPEDで開いて、非同期通信して
タイムアウトしたら、CancelIo発行
173170:04/07/06 22:41
>>172
ありがd。試してみます。
174170:04/07/07 11:42
>>172
うまくいきました。どーもです。
175デフォルトの名無しさん:04/07/23 15:36
皆様よろしくお願い致します。
DDKの勉強はじめたんですが、DDK付属のサンプルが
コンパイルできなくて困っています。

DDK_XPの \WINDDK\2600\src\network\ndis ディレクトリ内の
サンプルがすべてコンパイルでエラーを排出します。

エラーの内容
driver\passthrou.h(318) : error C2146: syntax error : missing ')'
before identifier 'DevicePnPEvent'
など多数のエラーが出ます。

環境:Win2k、DDK_XP(ネットに落ちてたもの)

setenv.batで環境変数は登録しています。
他のサンプルはしっかりコンパイルできるんですが、ndisディレクトリ以下が
コンパイルできません。

ndis.h か ndis.lib ファイルが壊れているのか?とも考えました。
初歩的質問ですがご存知の方ご教授ねがいます。
>>175
Build Enviromentsのメニュー下にあるコマンドプロント使ってる?
BUILDで全部通ったけど
177175:04/07/24 06:13
>>176
レスありがとう御座います。
Win2k FreeBuildでビルドしています。
javaSDKとか影響していたりするのでしょうか…
原因不明です。
特定のディレクトリのサンプルだけです。
DDKをアンインストールして再インストール後もこの症状が消えません。
sourceファイルもDirsも変更していないのですが…
>>177
>Win2k FreeBuild
でやってみると、確かにエラーが出るね。
XPだと問題茄子
179175:04/07/24 18:37
本当ですか!
XPで開発環境整えればいいんですね。
ありがとう御座いました。
こんなことでずっと悩んでないで、早く聞けばよかったです。
難解な課題山積みですがすこしがんばってみます。
>>179
違う、違う、Build EnviromentsのXP FreeBuildのコマンドプロンプトだよ。
誤解を招くような書き方をしてすまぬ
エラーからするとint/ddk/wxpにはあるけど
inc/ddk/w2kにはないヘッダーがあるからっぽいね
プログラマなら定義がないとかそんなのはエラーみてなんとかしんさい。
182175:04/07/24 21:09
>>181
そうですね、これくらいは自己解決レベルですね。
どうも思い込むと発想の転換が下手でして…
コマンドプロンプトがXPなんですか…
183デフォルトの名無しさん:04/07/25 12:13
WDMデバイスドライバー完全ガイド(上)(下)を
某書店(埼玉県)で見つけて慌てて両方買った俺はヴァカですか?

探すと以外に見つからないんだよね、アレ。
>>183
貴重だからもっとけ
185デフォルトの名無しさん:04/07/28 09:16
ドライバのソースコードだけは、なぜか綺麗なのは俺だけ?
186デフォルトの名無しさん:04/07/30 09:32
NT/2000 ネイティブAPIリファレンス買ってしまった・・・・
ちょっと後悔。
187デフォルトの名無しさん:04/08/09 13:03
デバドラってドキュメント化されてない関数多すぎ。
もっと解説本を出版汁!!
188デフォルトの名無しさん:04/08/10 23:06
あるPCIボード用のドライバを作成していて、わからない点があるのでどなたか教えてください。
(OSはWinXP SP1、DDKはXP SP1 DDKです)

IoConnectInterrupt関数で割り込み関数を登録したのですが、登録した割り込み関数に
入ってくる割り込みは、必ずそのPCIボードの割り込みなのでしょうか?

デバイスマネージャでIRQを確認すると、そのPCIボードには16番が割り当てられており、
USBホストコントローラとマザーボードのグラフィックコントローラのIRQと共有しています。

割り込み関数に入ってくる割り込みが必ずそのPCIボードの割り込みであれば
それで問題はないのですが、仮に共有しているデバイスの割り込みも入ってしまう場合
入ってきた割り込みがどのデバイスが引き起こしたものなのかを判断する方法がわかりません。
どのような方法でそれを判断するのでしょうか?
189デフォルトの名無しさん:04/08/13 11:08
>>188
ISRの中で自分のデバイスに訊いてみれば?
>188
PCIボード自体から割り込みの他に「割り込み要因」をフラグかなんかでもらわないとダメでしょ。
要因が無ければ他のデバイスとか。
192デフォルトの名無しさん:04/08/29 17:12
セットアップクラスを作りますか?
コインストーラを作りますか?
それとも、ア・タ・シ?
194デフォルトの名無しさん:04/09/16 12:32:13
すれ違いかもしれないけど、ここの人が分かりそうなので質問します。
エラーセクタのリトライを止めたいのですけど、
どこを設定したらよいですか。

DeviceIOControlくらいは使えます。ドライバか、IDEやSCSIパススルー
なんかでやるんだと思いますけどどこを見ればいいのか見つけられません。
195デフォルトの名無しさん:04/10/06 11:45:37
>>194
何がやりたいのかわからないけど、
それはドライバでやりたいの?
196デフォルトの名無しさん:04/10/08 22:32:12
>>195
いや、分からないのです。出来ればVC、VBアプリからやりたいです。
197デフォルトの名無しさん:04/10/09 02:19:15
>>196
エラーセクタのリトライってソフトでやってるのかね。
198デフォルトの名無しさん:04/11/08 14:35:43
自作機器からWinへデータを送りたいのでZMODEMしたいのですが、
ZMODEMの時代が終わったっぽいので、USBに切り替えたいんでつ。

でもWDM難しそうだし、何よりUSBホストのドライバ作ったら他OS(PC Linuxとか)でも同じ動作するドライバを作る必要がありそうな...

じゃあ、ドライバ作らずに、アプリとUSBに標準で付いてるドライバを組み合わせる形を思いつきましたが、そんなことは可能でしょうか?
USB-ZMODEMドライバなんて有るわけ無いよな...
199デフォルトの名無しさん:04/11/08 14:38:27
単にそこらにあるUSBシリアルの上にZMODEM流すだけで
いいんじゃねーかつーきがするが。
200デフォルトの名無しさん:04/11/08 14:43:11
>>199
やりたいことはまさにそれなんですが、機器側の端子をUSBだけにしたいんでつ。

USBシリアルじゃ、ニセモノっぽくて...
201デフォルトの名無しさん:04/11/08 14:46:07
>>200
少しは調べろ。USB<>シリアル変換アダプタじゃないぞ
202デフォルトの名無しさん:04/11/08 16:01:17
>>201
「USB<>シリアル変換アダプタじゃない」ドライバか何かが存在する、と?

はつみみです。
203198:04/11/08 16:17:34
わりきって、普通にWDMでファイル転送プログラムを作った方が楽かな。
204デフォルトの名無しさん:04/11/08 16:21:03
WDMってサウンドかと思った
205デフォルトの名無しさん:04/11/08 16:53:23
>>201
もしかして、
USB⇔シリアル変換モジュール
でつか?

確かに見た目USBだから良サゲ。
206デフォルトの名無しさん:04/11/08 21:34:28
みんな志が低いね
207デフォルトの名無しさん:04/11/09 08:42:51
WDM/USBを作るのは簡単でつか?

さらに、Linux版も同時開発できまつか?
208デフォルトの名無しさん:04/11/09 08:50:40
でつ厨には無理でつ。
209デフォルトの名無しさん:04/11/09 09:00:05
>>207
BULK転送でデータを送受信するくらいのものなら、
DDKのbulkusbをほとんどそのまま使える

linuxの方は、ここだとスレ違いだが、WDM書くより簡単に思えた
210デフォルトの名無しさん:04/11/09 09:07:18
>linuxの方は、ここだとスレ違い

そんなことないYO!

WDMとLinuxと同時開発方法とか教えてYO!
211デフォルトの名無しさん:04/11/09 09:21:40
>>210
windowsの方は、DDKにサンプルあるし、
linuxの方は、あちこちにソースあるだろうから、そう苦労しないと思うけど

とりあえず、参考資料

WindowsXPデバイスドライバプログラミング 入門と実践
http://www.amazon.co.jp/exec/obidos/ASIN/4774118419/

詳解Linuxカーネル
http://www.amazon.co.jp/exec/obidos/ASIN/4873111331/

LINUXデバイスドライバ 第2版
http://www.amazon.co.jp/exec/obidos/ASIN/4873110815/
212198:04/11/09 09:36:46
ちょっとスレ違いなんですが、普段ドライバ作られてる方の意見を聞きたくて。。。

別スレで、Win32の中の人がCLI/WinFXになるから、CLIがネイティブになると盛んに言われてます。
(ドライバなんかもマネージドになっちゃうんだろうか?)
今までのドライバの動作が遅くなって、ドライバもCLIで作れ!なんてことは発生しえるのでしょうか?

ドライバはOSの命とまでは言わなくても、それなしでは機器を制御出来ないわけですが、
VBを丸々捨てたM$ですから、今までのドライバを丸々捨てられることはあながち無いとも言い切れないような。

と考えると、データ転送ならUSBドライバ作るよりLANポートと標準ドライバの方が良いのかな???
でも、機器側のIPとかネットに入るの大変なんだよな。

と、独り言ですた。
213デフォルトの名無しさん:04/11/09 10:00:49
シリアル <-> Ether 変換器使えば?
214198:04/11/09 10:09:17
>>213
やっぱIP設定があるのでUSBにします。

シリアル <-> USB 変換器
はどうなのか教えて下さい。
215198:04/11/09 10:12:20
USBの標準ドライバにZMODEMがあれば何ら困らないんですが、
m$もLinuxもそういうことはしてくれませんか。
216デフォルトの名無しさん:04/11/09 10:44:42
>>198
おまえさー、
>ZMODEMの時代が終わったっぽいので、USBに切り替えたいんでつ。
って自分で言っておいて何でUSB側をZMODEMにせなあかんねん。
217198:04/11/09 10:56:23
>>216
確かに自己矛盾してますた。

開発なんて矛盾があるところの調整みたいなもんだし、、、

出来上がりはバリバリのUSBが良いけど、中の人がZMODEMであれば開発楽だなー、と。
218デフォルトの名無しさん:04/11/09 11:09:51
USBとRS-232Cとプロトコルがごっちゃになってそうだ
219デフォルトの名無しさん:04/11/09 11:25:55
ZMODEMってどんなモデム?
220デフォルトの名無しさん:04/11/09 14:38:25
Driver Verifier使ってる?
221デフォルトの名無しさん:04/11/13 21:29:03
本体のUSB1.1コネクタに直結すると問題ないのだが、
ハブを経由するとデータが落ちてしまうことがある。
これってハブが悪いって断言していいのだろうか?
装置側が悪いってこともあるの?
222デフォルトの名無しさん:04/11/14 09:21:58
>221
他の機器が動くなら、御社に難あり。
223デフォルトの名無しさん:04/11/15 11:28:16
意外にWDM/USBって難?
224デフォルトの名無しさん:04/11/15 21:56:15
>>223
難しいのを意外だと思う奴がいることが意外。
225デフォルトの名無しさん:04/11/17 15:55:34
USBマスストレージドライバについて、DDKのサンプルソースの中で
実際にSCSIコマンドを作成して、コマンド転送している部分が載ってる
ソースはありますか?

bulkusbなんて、バルクオンリーでSCSIコマンド転送してそうな感じが
したんですけど、IoCallDriverかなにかで全部丸投げしていて、肝心
のCBWを作成してる所や実際に転送してる所が判りませんでした。

CBW == SRB
CBWCB == CDB
という認識は間違って無いですよね?
226デフォルトの名無しさん:04/11/17 16:12:23
>>225
bulkusbは、バルク転送でデータを送るだけ

SCSIコマンド云々は自分で実装しる

>>211で出てる
>WindowsXPデバイスドライバプログラミング 入門と実践
http://www.amazon.co.jp/exec/obidos/ASIN/4774118419/
で、CDのストレージデバイスクラスを作成してるサンプルがあるから、参考になるかも
227225:04/11/17 16:27:20
>>226
ありがとうございます。
紹介してもらった書籍はあるので、これからは書籍ベースで解析してみます。

とは言うものの、Win32アプリからI/Oに送ったWriteFile()等のメッセージがIRPに
詰められて送られて来るとは思うのですが、そこからSCSIコマンドに直すところが
どうにも不明なところで、実際にやってるソースは無いかなと思ったのです。
228デフォルトの名無しさん:04/11/17 21:57:10
ファイルがどのAPから呼び出されいるか知りたいので,
ファイルシステムフィルタドライバを作ろうと思ってます.
そこで,マイクロソフトのIFSキットでいるのでしょうか?

フリーのIFSキットあると聞いたんですけど,よくわかりません.
OSRのFSDKはダウンロード先が書いてないような・・・・

どなたか知っていたらお願いします.

229デフォルトの名無しさん:04/11/18 03:57:13
230デフォルトの名無しさん:04/11/18 08:14:10
>>228
ext3ifsってのがあるよ
231デフォルトの名無しさん:04/11/18 08:14:44
ごめんext2ifsね
232デフォルトの名無しさん:04/11/18 12:31:20
>>228
フィルタドライバならDDKだけでいけるよ。
Filemonのソースを見れ。
233デフォルトの名無しさん:04/11/19 00:00:02
KeFlushSingleTb()の引数と戻り値の内容を知りたいのですが
ご存知の方、教えてください。
234デフォルトの名無しさん:04/11/19 00:45:13
>>229
フィルタドライバ実践の書籍は手元にあるので,読んでいるところです.

>>230
有難うございます
ソースをダウンロードして読んでみようと思います
これはIFSキットとは別でファイルシステムドライバそのものなのかな?

>>232
ご指摘有難うございます
サンプルを読んでみます


235デフォルトの名無しさん:04/11/19 13:13:22
USBモニターを使い、USBにWriteされる情報を監視していたのですが、
ファイル一つ送るだけなのに、全部で30個のコマンド(コマンド転送、
データ転送、ステータス転送が一括りとして10個のコマンド)を送って
いて少し驚いています。

そこで質問なのですが、実際に書き込みたいデータ
(Write10のコマンド転送、実データ転送、ステータス転送)
を送っている所は、1個所しかなく、他の部分で行われ
ている処理も、SCSIコマンドを読み解くとWrite10のコマンド転送、
データ転送(何を転送?)、ステータス転送しています。
USBに書き込みたいファイルの中身を転送している場所以外のWrite10
コマンドは、何をしている所なのでしょうか?

どなたか、宜しくお願い致します
236235:04/11/19 13:20:59
すいません、情報不足でした。

その上記の知りたい部分のByte配列で読みとれる部分には、
MSDOS5.0
NO NAME
FAT16
等の記述がありました。

USBの情報を取得しているなら、この部分のコマンド転送部の
CBWCBにはReadが来ると思うのですが、これもWriteなのです。
237デフォルトの名無しさん:04/11/19 13:59:16
>>235-236
Mass Storage デバイスの話しだよな?

http://www.usb.org/developers/devclass_docs
↑からマスストレージクラスの仕様書落として、読んでみたら?
どっちかというとWindowsのファイルシステムの問題だと思われ。

よくわからんが、ファイルを書き込むならFAT領域なども当然更新
書き込みされる。で、それ以外の場所に何故か書き込むとかそういう話?

239235:04/11/21 13:25:39
>237さん
はい、Mass Storageの話で、紹介頂いた仕様書も
一応目を通しています。

>238さん
>よくわからんが、ファイルを書き込むならFAT領域なども当然更新
>書き込みされる。で、それ以外の場所に何故か書き込むとかそういう話?
それ以外の場所に、と言うよりは、書き込みたい内容の分(ファイルの実データ)
だけWriteすれば良いものだと思っていました。

それがUSBモニタで、ファイルをUSBメモリに書き込んだ全パケットを監視すると、
書き込みたいファイルの転送の前に、前処理の様にwriteが走っており、さらに
書き込みたいファイル転送の後には、後処理の様にwriteが走っています。

前処理部分で読みとれるのは>236で書いたとおりで、後処理では良く読みとると
(>236を書いてから気が付いたのですが)ファイル名らしき物がデータ転送部に
ありました。

その、此処で便宜上に言った前処理と後処理(それも含めてファイル転送なので
しょうが)について、そこで何が行われているのか教えて頂きたいのです。
たぶん前処理は、>238さんの仰るFAT領域などの更新処理なのかと思っています。

長文の上、説明下手で申し訳ありません。
240デフォルトの名無しさん:04/11/22 03:28:56
ファイルシステムの更新もPC側でする必要があるはず
241デフォルトの名無しさん:04/11/22 09:53:27
242デフォルトの名無しさん:04/11/22 13:58:53
return STATUS_UNSUCCESSFUL;
243デフォルトの名無しさん:04/11/22 16:13:42
>>235
そもそも「ファイルシステム」とは何か、ということを調べるといいと思う。
ちゃんと。
244デフォルトの名無しさん:04/11/25 08:58:02
「USBハード&ソフト開発のすべて 」に付属しているUSBのサンプルのドライバは有益でつか?
それか、m$が配布してるバルクUSBサンプルの方が良いで塚?
245デフォルトの名無しさん:04/11/25 12:33:57
うちは最新DDKのBulkUsbを使った。
246デフォルトの名無しさん:04/11/25 13:21:49
詳細キボンニュ>>245

ちょっと処理足すだけでOKなんでつか?
247デフォルトの名無しさん:04/11/25 15:10:55
>246
転送単位が256B単位になっててHi-speedで使えんかったから増やしてみた。
あとは、もうちょっと速くするための工夫を挿れてみたとか。。。
248デフォルトの名無しさん:04/11/26 16:59:01
サンクス>247
本読んでみたら、Bulkてのが基本的なパケット通信みたいね。
とりあえず、BulkUsbのソース印刷してみまつ。
249デフォルトの名無しさん:04/11/26 17:06:45
DDKをインストールしたのに、BULKUSB(というフォルダやファイル)がありません。
どうしたことでしょう。
250デフォルトの名無しさん:04/11/26 17:16:53
>>249
インストールのチェックで抜かしたんじゃない?
251デフォルトの名無しさん:04/11/26 17:32:52
サンクス>>250
インストールし直して入りますた。
252デフォルトの名無しさん:04/11/30 19:33:11
微妙にスレ違い&FAQかもしれませんがここで質問します。
WindowsNT/XPで、LPT1をCreateFileしてDeviceIoControlしたいのですが、
なにをやってもロジアナに反応しません。入り口でつまづいてます。
標準ドライバとかBIOSとか、その辺の設定に問題があるのでしょうか?
253デフォルトの名無しさん:04/12/01 21:29:16
ドライバ作るのに勉強になるサイトってある?(日本語のページ)
サンプル位しかないのかなぁ
254デフォルトの名無しさん:04/12/02 11:29:18
255デフォルトの名無しさん:04/12/02 13:59:29
>>254
情報交換系ですか
勉強するためのサイトがよかったですが、掲示板でも見ていれば勉強になりますね
ありがとうございます
256デフォルトの名無しさん:04/12/21 14:05:41
保守システム起動
257デフォルトの名無しさん:05/01/10 19:26:49
WindowsXPでプリンタドライバを作ろうと思ったのですが、サンプルからつまずいてます
印刷結果を画像出力したいのですが、どのサンプルを見ればよいのか教えてください
XP_DDKの内容でお願いします。
258デフォルトの名無しさん:05/01/11 19:21:00
259デフォルトの名無しさん:05/01/12 09:41:50
>>258
2003DDKはないようですね
260デフォルトの名無しさん:05/01/13 17:36:20
そういやそうだな。
それは注文するしかないってことか。
探せばありそうだが。
261デフォルトの名無しさん:05/01/28 11:46:16
USB通信のサンプルは無いでつか?
262デフォルトの名無しさん:05/01/28 14:50:20
>>261
質問が漠然としすぎです
263デフォルトの名無しさん:05/01/30 17:37:26
Win32のKe386SetIoAccessMap()、Ke386QueryIoAccessMap()、
Ke386IoSetAccessProcess()

と同じような関数ってx86-64にありますか?
264デフォルトの名無しさん:05/02/03 20:28:32
>>264
ドライバ上でI/O使えばいいじゃんかよ
265デフォルトの名無しさん:05/02/11 03:09:29
すみませんが教えてください
XP checkedをインストールして /debug /debugport=COM1 /baudrate=115200としたのですが
いざ再起動させてみると COM1は相変わらずデバイスマネージャに存在し
当然ホスト側からも接続出来ませんでした

/debugport=COM1を付けたのにもかかわらず
COM1が普通に鎮座している事についての理由が判りません
ささいな事で構いませんので何か教えて頂けるとありがたいです
266265:05/02/11 09:35:01
とりあえず判ったこと

1. 現在ターゲット用に使っているPC以外は /debugport指定によりCOMが占有される
2. ターゲット用PCにはCOMポートが一つしか存在しない
3. 他PCにはCOMが二つついている

>>20氏とはデバイスマネージャにCOMが鎮座しているかどうかの差があるけど
おそらくCOMが1ポートかどうかで COMをデバッグ用に使えるかどうかが決まる?
この推測が正しいかどうかは知りませんが情報が無いよりましかと思い postします
267デフォルトの名無しさん:05/02/11 17:18:27
>265
ターゲットは一般的なマザーボード使ったデスクトップPCだよね?とりあえず試しに通信速度sageてみたら?
268265:05/02/12 08:13:16
>>267
845Gチップセットをつかった microATXな一般的マザーです
ただしCOMが1ポートしかありませんが・・・・

通信速度は 19200〜115200まですべて試しました
HyperTerminalで相互通信確認も行いましたです
/debugport指定したのに COMが占有されないのが今回の問題かなと
269デフォルトの名無しさん:05/02/13 19:02:02
>268
デバマネでCOM1のI/Oポートアドレスって確認できる?他のPCと一緒かな?
/debugmodeのターゲットPCは直接I/Oポートいじってると思うんだけど。。。タブン
27020:05/02/15 00:02:00
件のノートPCのリソース情報はI/Oポートアドレスは忘れましたが、普通のデスクトップPCと同じI/Oポート、IRQでした。
COMが1ポートだとダメなのかな?ノートPCもCOMが1ポートしか無いです。
271265:05/02/16 06:16:56
>>269
一般的なCOMポートアドレスとIRQですた
BIOSで4つ選択できるので全部試しましたが結果同じ
272デフォルトの名無しさん:05/03/03 16:38:32
Ntfsのドライバのアッパーにフィルタリングして、
Ntfsに渡されているメジャーファンクションとIOを見張る
フィルタドライバを作りたいのですが、
(動きとしてみれば、Filemonみたいに、DeleteやCreateなどをフックしたい)

正直な話、インストールの方法(infファイルの書式)がわかりません。
GUIDやClassの部分が肝になってる気がするのですが…。

当然インストールができないため、ドライバ自体も作ってはみたものの、
動いてるかどうかの確認ができない状況にあります。

filemonの作者様がソースを後悔していれば、即時解決なきがするのですが、
filemonはなぜかソースが後悔されていません…。

ドつぼにはまってます。

誰か情報をお持ちのかた、どんな情報でもかまわないので、
馬鹿な私に知恵を与えてください。

よろしくお願いします。
273デフォルトの名無しさん:05/03/03 16:46:32
>>272
> filemonの作者様がソースを後悔していれば、即時解決なきがするのですが、
> filemonはなぜかソースが後悔されていません…。

ああいうのはソース公開して欲しいよねぇ。


ということでお前。解決したらソース公開しるw
274272:05/03/03 16:52:54
>>273
もちろん、解決しだい、過程と結果は報告させていただくつもりです!

ですから、解決の糸口を与えてください・・・(;´Д`)
275デフォルトの名無しさん:05/03/03 19:55:45
FileMonて昔ソース公開してたよ。しばらく前はWaybackすればソースも取得できたけど、今は無理かな?
276デフォルトの名無しさん:05/03/03 19:59:28
とりあえずテストするだけならレジストリ直接いじれば動かせるでしょ
277デフォルトの名無しさん:05/03/04 09:03:46
>>276
InfのClassやGUIDがわかんねーって書いてるってことは、
レジストリの直接いじる部分もわかんねーってことじゃないの?

俺はあまり詳しくないから、断言できないが・・・。
278デフォルトの名無しさん:05/03/05 18:22:28
SCMじゃダメなのか
279デフォルトの名無しさん:05/03/06 16:06:33
Filemonは、infファイル使ってないよ。
自力でドライブのオブジェクトを取得して、アタッチしてる。
280279:05/03/06 16:10:26
281272:05/03/07 13:56:49
>>279
ありがとうございます!

FilemonはアプリからCreateDeviceしてるんですね・・・。

なんとかBoot時に読み込むようにできないかなぁ・・・。

っていうかそれ以前に、Filemonのソース、XPじゃ動かない・・・_| ̄|○
282デフォルトの名無しさん:05/03/08 00:36:54
>>281
NT系はService関連のAPIを使う。
9xは知らん。
283デフォルトの名無しさん:05/03/08 04:05:40
boot時に起動するようにしたいけど infワカランっていうんであれば
直接レジストリいじってservice登録すればいいと思うけどどうかな?

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services
このへんにSERVICE_AUTO_START属性つけて加えておけばいいかと
284デフォルトの名無しさん:05/03/08 04:06:26
あ ControlSetの後の数字は環境によって変わるはずなのでそのへんは便宜
285デフォルトの名無しさん:05/03/08 07:41:50
CurrentControlSetじゃなくて?
286デフォルトの名無しさん:05/03/08 13:46:10
いやだから環境で変わると
287デフォルトの名無しさん:05/03/08 21:02:45
だからこそ CurrentControlSet なんだろ
288デフォルトの名無しさん:05/03/10 03:50:54
>>287
やっぱり通常は CurrentControlSetを見てるんだよねぇ

うちの手元の環境がおかしいのかどうか判らないけど
そこを触っても変化してくれなくて ControlSet00xとかの方じゃないと
設定が反映されなかったから直接それを触ってた。
289デフォルトの名無しさん:05/03/10 18:17:03
すいません、ちょっとお聞きしたいのですが、
ドライバのソースの中に、プリコンパイラを仕込み、

#IF DEBUG
#DEFINE DbgPrint(X) DbgPrint x
#ENDIF

のように、DEBUGを指定したときだけデバッグ情報を出力したいのですが、
DDKの標準のBuildではどこにプリコンパイラの定義を記入すれば
よろしいのでしょうか?

馬鹿な質問かもしれませんが、よろしくお願いします。
290デフォルトの名無しさん:05/03/10 22:55:33
checkのときは、デバッグ情報hが出る
freeのときは出ないように元からなっているような気がするんだが
291デフォルトの名無しさん:05/03/11 08:57:06
標準で出力されるデバッグ情報と、
任意に入れたデバッグプリントじゃ出力するものが違うんじゃない?
292デフォルトの名無しさん:05/03/11 11:09:08
なんにしろ、俺はプリコンパイラのスイッチ自体知らん。
が、俺も知りたい!

詳細(ヽ゚д)キボンヌ
293デフォルトの名無しさん:05/03/11 20:36:29
マスストレージクラスやHIDデバイスクラスなどのドライバのように、
ダイアログを出さずに、
USBデバイスドライバをインストールするにはどうしたらいいんでしょう?

1回インストールすれば、別のポートに挿しても自動的に認識してくれればいいんだけど・・・
294デフォルトの名無しさん:05/03/11 22:33:05
infファイル内にオプションがある
詳細は忘れたけどDDKのドキュメントに書いてある
295デフォルトの名無しさん:05/03/12 06:57:46
>>294
レスありがとうございます。
もっぺん、ドキュメントとにらめっこしてみます
296デフォルトの名無しさん:05/03/13 12:45:30
>>294-295
「ダイアログを出さずに、 USBデバイスドライバをインストール」という問題と、
「1回インストールすれば、別のポートに挿しても自動的に認識してくれればいい」
という問題は全然別の問題だと思う。

前者については、ドライバとinfファイルをシステムフォルダの\driversと\infに
放り込んだ後、レジストリのどっかにキーを追加するアプリを作ればよかったと思う。
サイプレスのEZ-USBの開発ツールなんかはこれだ。

後者は、基本的にはUSBデバイス側の問題(というかWin2kとxpの仕様)だったはず。
http://support.microsoft.com/default.aspx?scid=kb;ja;818542
ただ、Win2Kに関しては確かにinfファイルを小細工して解決する方法が
あったと思う。
297デフォルトの名無しさん:05/03/13 19:36:59
どっちも同じことだよ。
違いは、最初の一回をWinのデバイスドライバウィザードに任せるか、自アプリで先にやってしまうかの違い。
298デフォルトの名無しさん:05/03/13 20:03:58
>>297
こんな短い内容を読んで理解できないのかな?

ドライバがどんな方法でインストールされようが、USBデバイスが
Winの仕様を満たしてなければ、(といってもストリングディスクリプタの
シリアルナンバーを持っていればいいだけなんだけど)やはり挿すポートを変えたり
ハブをかましたりする度にドライバを要求される。

論より証拠自分でやって確認してみて、それから物を言えといいたい。
299294:05/03/14 10:32:26
>>296
有用な情報ありがとうございます。

試しにシリアルナンバーを付けたところ、希望する挙動を得られました。
どうしてもPC側で解決できなかったら、これで行きたいと思います。

DDKドキュメントには、
infのCotrolFlagsセクションにInteractiveInstallを追加すればいいようなことが書いてありましたが
電子署名を必要とするらしく、残念ながら試せませんでした
300293=299:05/03/14 10:33:13
299の名前欄間違えました。ごめんなさい
301デフォルトの名無しさん:05/03/14 11:11:35
>>289 です。
デバッグスイッチですが自己解決したので、
一応自分が調べた内容を書かせていただきます。

どうもSOURCESファイルに一文記入すればいいだけみたいです。

NTDEBUG=ntsd

これでDBGがONになるっぽいです。

逆にOFFにするには

NTDEBUG=ntsdnodebug

みたいです。
302289:05/03/14 11:13:40
それから、プリコンパイラを指定するには

C_DEFINES=/DBG

みたいなのをSOURCESに追加すればいいみたいです。
でもこれだと/DBGのみの指定になっちゃうんで、

C_DEFINES=$(C_DEFINES)/DBG

みたいにすると追加になるみたいです。
303デフォルトの名無しさん:05/03/14 21:23:15
そうそう、デフォの設定では最適化設定がサイズ優先になってる。
304デフォルトの名無しさん:2005/03/28(月) 18:58:55
USBのGUIDってぶっちゃけ何に使われるんでつか?
305デフォルトの名無しさん:2005/03/29(火) 17:54:45
USBのHOSTの汎用アプリが欲しい、
なんて無茶な話でつか?

Targetの動作テストに使います。
エンドポイント0にコマンド送るのと、Bulk転送出来れば良いかなぁ。

でも、PictBridgeとかUSBクラスがテスト出来るようであればもっとうれしい。
306デフォルトの名無しさん:2005/04/12(火) 22:33:17
新しいターゲットマシンに、Intel 純正 M/B D915PGN を用意したんだけど、
なんか WinDbg との接続が異常に遅くなった。
ホストおよびターゲットは、Win2k SP4 および WinXP SP2 を、マトリックスで
すべて試した。
早いときでも 1 分くらい、酷いときは、5分くらい経ってからやっと繋がる。

始めは、ありえないと思いつつも、シリアルの同期がとれないのかと思い、
baudrate を 19200 程度まで下げてみたり、ホストマシンを変えて試して
みたが変わらず。
シンボルサーバが重くなってて、それに引っ張られてるのかと思い、
シンボルサーバの記述を削除してみたが、それでも変わらず。

少し変化があるか?と思えるのが、/fastdetect=com2 を追加したとき。
だが、この M/B はシリアルが 1 つしかないので、なんか釈然としない。
BIOS で COM の IRQ、I/O を変えると、少し変化があるような気もするが、
多分気のせいだろう。

結局だましだまし繋がるまで待ってデバッグしてるが、効率悪いことこの上ない。

私以外にも、接続で 1 分以上かかってる人います?
307デフォルトの名無しさん:2005/06/19(日) 02:51:41
WDM
308デフォルトの名無しさん:2005/07/09(土) 05:41:19
ドライバを書こうと思ってるんですが、DDKがでかすぎてとても落とせません(アナログ電話)。
なるべく軽いサンプルソースや、フォーマットを落とせる場所、あるいはそういうものが書いてあるWebページを紹介して下さい。MASMを使ってます。
309デフォルトの名無しさん:2005/07/09(土) 07:32:25
普通に郵送してもらえばいいだけ
310308:2005/07/16(土) 07:43:34
なるべく安くしたいんですが・・・
311デフォルトの名無しさん:2005/07/17(日) 00:53:10
送料だけ。ダイヤルアップで落とすより確実に安いぞ
312308:2005/07/23(土) 06:04:01
どうもすみません、「落とせない」というのは電話代がかかる、という意味も含んでいます。
大体100〜200円くらいで済ませたいのですが・・・
313デフォルトの名無しさん:2005/07/23(土) 08:15:01 BE:15528724-##
>>312
サンプルソースがあればDDKが無くてもドライバが書けると思ってるの?
314デフォルトの名無しさん:2005/07/23(土) 15:42:39
>>308
そもそもDDKはいまダウンロード公開はしてないが、どこから拾う気?

CDの送料も払えないような貧乏人にはドライバ書くなんて無理無理。
勉強本だけでいくらかかるやら。
315デフォルトの名無しさん:2005/07/23(土) 23:46:38
調べ方さえ分かってればDDKのドキュメントとサンプル、それと他でソース公開されてるやつだけでもドライバ書けるけどな。
316デフォルトの名無しさん:2005/07/24(日) 06:15:56
> 調べ方さえ分かってれば
308にそれが期待できると思うか?
317デフォルトの名無しさん:2005/07/24(日) 10:52:22
無理だね
318デフォルトの名無しさん:2005/07/24(日) 12:18:57
DDKをダウンロード出来ると言うことは、当然、CDも送られて来てると思うんだが。
319デフォルトの名無しさん:2005/07/24(日) 16:42:30
そんな金払ってるわけないだろ
320デフォルトの名無しさん:2005/07/24(日) 20:50:35
>>314
ここらから拾うつもりです
http://club.shelek.com/viewfiles.php?id=2
321デフォルトの名無しさん:2005/07/24(日) 21:15:33
テレホ時間にダウンローダつかって
レジュームしながらおとせばえーやない。
1週間もかからんだろ
322312:2005/08/27(土) 06:37:36
みなさんどうもありがとうございます。

とりあえず、Win98も動かしているのでVXDでも作ってみたいと思うのですが・・・
VXDを作るにはVMM.INCさえあればとりあえずプログラミングできるらしいのですが・・・
もしよければ、VMM.INCのサイズ、および、VMM.INCがさらにインクルードしているファイルの名前とサイズを教えてください。友達にメールで送ってもらえるかもしれないので・・・
323デフォルトの名無しさん:2005/08/27(土) 09:31:01
Win98DDKならまだ本家から落とせるな。
http://download.microsoft.com/download/win98SE/Install/Gold/W98/EN-US/98DDK.EXE

つーか、友達にRにでも焼いてもらえよ。
324デフォルトの名無しさん:2005/09/20(火) 16:43:07
保守…する必要あるのか?
325デフォルトの名無しさん:2005/09/20(火) 17:24:20
64bitやWindows Vista対応を考えると泣きそうになる俺ガイル
なので、とりあえず保守
326デフォルトの名無しさん:2005/09/21(水) 11:46:07
ドライバ作成3日目です。

ドライバからマウスイベントを発生させるにはどうすれば良いんでしょうか?
SendInput とか mouse_event とか使えるのでしょうか?
327デフォルトの名無しさん:2005/09/21(水) 11:52:36
そもそも、なんのドライバを作ってるのやら・・・

ユーザモードで書いてるなら、使えるんじゃね?
328326:2005/09/21(水) 12:07:34
USB機器用のデバイスドライバです。

そのデバイスからデータを取得し(これはできました)、そのデータに応じて
マウスカーソルを動かしたいのですが、データは取れてもそのデータを
どうすればマウスを動かす事ができるのか、さっぱりわかりません。

時間はありますので方向性だけでも教えていただけないでしょうか?
329デフォルトの名無しさん:2005/09/21(水) 12:15:34
カーネルモードとユーザモードに分ければええんでね?
330326:2005/09/21(水) 13:50:16
すみません、恥を忍んでお聞きします。
「ユーザーモード」ドライバを作るって事ですか?

ユーザーモードで動くドライバを作って、カーネルモードで動く
ドライバと連携させるって事でしょうか?。というか、ユーザー
モードで動くドライバってどうやって作るんでしょうか・・・。

根本的な事が全くわかってないので勉強中なのですが、
ゴールまでの過程というか方向性が見えていないので
非常に効率が悪いです・・・。
331デフォルトの名無しさん:2005/09/21(水) 13:50:37
USBマウスドライバを書きたいってことかな・・・?

デバイス側を変えられるなら、
デバイスをHIDマウスに準拠させて、ドライバを不要にすると良い

と、少し方向違いのレスを付けてみる
332デフォルトの名無しさん:2005/09/21(水) 14:09:18
ヒント:Mouclass
333326:2005/09/21(水) 17:30:28
>>331
本当はそうするのが一番良いんですが・・・。

>>332
DDKサンプルにあるやつですね。
Mouclassを絡めて調査&勉強してみます。

ありがとうございました。
334デフォルトの名無しさん:2005/09/21(水) 19:34:47
デバイス側を変えられないのなら、ドライバ側をHIDミニドライバにするという方法もある
HidRegisterMinidriver
335326:2005/09/22(木) 11:48:40
>>334
ドライバでHIDクラスを装うわけですね。
うーむ、奥が深い・・・。
336デフォルトの名無しさん:2005/11/09(水) 18:05:25
うーむ困った解りません、教えてください。
「ハードウェアの追加」から手動で infを経由して自前ドライバのインストールは可能なんですが、
これをセットアッププログラムから楽チンにインストールさせるミッションを課せられており試行
錯誤中です。

Infを見ると、自前の "Class" 、"ClassGuid" が定義されていて正常にインストールされている環境
を見るとドライバはその配下に入りインストールされています。 "\Root\xxxxxx\0000"

CreateServiceでドライバをインストールすると登録はできました。
しかし変なデバイスインスタンスIDにマップされています。しかも動きません。
もちろん、原因はこちらが正しいデバイスインスタンスの登録と指定をしていないからだと思うので
すが、これをWin32APIから行う方法はあるのでしょうか?

無理やりレジストリにデバイスインスタンスを書き込んでリブートしちゃおうかとも思いましたが、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum ってSYSTEMアカウントからしか書けないように
なっているんですね。

よろしくお願いします。
337デフォルトの名無しさん:2005/11/09(水) 19:15:47
「INFファイルを使わないドライバインストーラ」でググッたら
それらしい方法が書いてあるらしい本が引っかかったよ。
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-1666-1

なんかinfファイルにダミーのinf放り込んで細工することでも出来た記憶があるけど
これは正当な方法じゃないんだろうな。。
338デフォルトの名無しさん:2005/11/09(水) 19:16:44
× infファイル ⇒ ○ infフォルダ
339デフォルトの名無しさん:2005/11/09(水) 20:41:24
俺はさっぱり分かってないが、
http://members.at.infoseek.co.jp/x1resource/xilinx/giveio/giveio.htm
は参考にならんだろうか。
340デフォルトの名無しさん:2005/11/09(水) 21:20:54
dpinstとか使えば。
341336:2005/11/10(木) 11:30:13
>>337
情報どうもです。本チェックしてみます。
setup API を使うと INF経由でインストールできそうな気配がありますね。

>>339
情報どうもです。早速ダウンロードしてみましたが単に CreateService
しているだけでした。残念。

>>340
情報どうもです。Driver Install Frameworks Tools 2.0 ですね。
チェックしていますが、まだ未調査です。

SYSTEMアカウントじゃないと触れないレジストリがあるので、ダミーのサービス
を登録しドライバ関連のレジストリ(デバイスインスタンス)をいじった後に
ダミーサービスを削除し、リブートといった臭い方法で逃げるかなぁ・・・
342デフォルトの名無しさん:2005/11/10(木) 11:46:52
>>341
>>337の本、持ってるけどCreateServiceしてるだけだにゃー
343デフォルトの名無しさん:2005/11/11(金) 06:12:04
ExAllocatePoolWithTag()でNonPagedPoolを指定してメモリを
確保したいのですが、うちだと16MB以上は確保できません。(Win32、x64ともに同じです)
コレは仕様ですか? 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
\Session Manager\Memory Management
のレジストリキーをいじれば何とかなりそうな気がしたのですが
うまくいきませんでした。
344デフォルトの名無しさん:2005/11/16(水) 18:53:04
>>343
こちらは128M程度確保できました。
利用可能メモリとの兼ね合い なんでしょうかね。
たんまり取るにはどうすればいいのでしょうね。
NonPagedPool あたりの引数??
345デフォルトの名無しさん:2005/11/16(水) 18:53:29
>>343
こちらは128M程度確保できました。
利用可能メモリとの兼ね合い なんでしょうかね。
たんまり取るにはどうすればいいのでしょうね。
NonPagedPool あたりの引数??
346344:2005/11/16(水) 18:54:34
2回書いちゃった。リロードミスです。すみません。<m(__)m>
347デフォルトの名無しさん:2005/11/22(火) 11:19:14
どこかで読んでうろ覚えなのだけど

NonPagedPool 総容量はシステム毎に限りがあったと思う。
ひとつのサービスが確保しすぎると他にしわ寄せが行くと思われ。
348デフォルトの名無しさん:2005/11/22(火) 11:22:14
NonPagedPool limitation でぐぐってみたら
参考になりそうな検索結果が出たけど
深く調べる気力がないので神の降臨を待とう。
349デフォルトの名無しさん:2005/11/22(火) 21:44:34
神じゃないけど。
NonPagedPoolの初期量と最大量は起動時に(多分物理メモリ総量から)算出されて、
最大量の範囲内で必要に応じて増減するぽい。
物理メモリ1Gで最大200MBくらいって例があるから、>>343の実装メモリが少ないんじゃ?
350デフォルトの名無しさん:2005/11/22(火) 22:35:01
それより前に、NonPagedPoolが本当にそんなに必要なのかを検討し直した方がいい
351デフォルトの名無しさん:2005/12/02(金) 03:20:47
Win2k3DDKSP1って落ちてないかな?
x64対応なのってこれだけなんだよね・・・。
けど、俺クレカ持って無いから送ってもらうやつ出来ないし・・・orz

何故かこれだけネット上探しても落ちてない。
散々商業ソフトとかヤバ目のは落ちまくってるくせに、こういう時に限ってないんだよね。
MSも何で落とせるようにしないんでしょ・・・。
352デフォルトの名無しさん:2005/12/02(金) 08:31:34
353デフォルトの名無しさん:2005/12/02(金) 09:08:48
送料分をカードで支払ったけど、着払いも出来るの?
354デフォルトの名無しさん:2005/12/02(金) 09:31:15
クレジットカードくらい作ればいいのに
355351:2005/12/02(金) 13:24:27
14歳なんですけど、クレカって作れるんでしょうか?
356デフォルトの名無しさん:2005/12/02(金) 13:36:46
学校いってる?
357351:2005/12/02(金) 14:09:46
今日は創立記念日です。
部活はあるので、そろそろ行かないといけません。
358デフォルトの名無しさん:2005/12/02(金) 16:28:42
>>351
XPのアクチに見られるようにXP以降のM$はシブチンだね
それ以前はDDKもフリーでDLできた
なので転がってるのはそれらばかりだね

(´-`).。oO(そういやアクチってサポート期間過ぎたら期間限定でしか使えないOSになるのか?)
359デフォルトの名無しさん:2005/12/02(金) 16:51:41
>>358
その通り。
実はMSのアクチの狙いは割れ対策なんかじゃなくて
OSを買い換えてもらう為のものだったりするんじゃないかと思うんだが・・・。

この前、OSの利用調査でいつまでたってもWin98使いが消えなかったのでMSが頭を抱えてた。
そういうのも確実に戦略としてある気がする。
360デフォルトの名無しさん:2005/12/02(金) 17:16:05
>>359
米国の消費者はサポート期間過ぎたら期間限定になるというのは猛反発しそうだな

結局、アクチ管理の鯖管理維持費で苦しくなるだけなのにな…
361デフォルトの名無しさん:2005/12/02(金) 17:28:30
ほとんどの素人にとっては乗り換えるメリットが分からないから
362デフォルトの名無しさん:2005/12/02(金) 17:41:48
>>358
サポート期限が切れたらアクティベーションが不要になるパッチを出すという話を聞いたことがあるが。
363デフォルトの名無しさん:2005/12/02(金) 17:42:16
乗り換えるメリットが判っても今のOSで十分と判断しちゃうでしょ
動画処理とかじゃ不十分な性能だけど日本独自のコピワンデジタル放送じゃ
意味無いし…
364デフォルトの名無しさん:2005/12/02(金) 19:19:17
DDK2003はtorrentに流れてるよ。結構新しいやつ
開発キットを無償提供しないのは今時意味分かんないなぁ
365デフォルトの名無しさん:2005/12/02(金) 20:20:47
>>364
どこのサイトにあります?
自分が知ってる所は、XPまででした・・・orz
366デフォルトの名無しさん:2005/12/02(金) 22:02:53
torrentはP2Pだろ
367デフォルトの名無しさん:2005/12/02(金) 22:08:10
あれ?
自分のbit torrentの事ですよね?
落としたいファイルのtorrentファイルをどこかのサイトから落とさないといけないような・・・
368デフォルトの名無しさん:2005/12/02(金) 22:09:35
自分の
と言うのは消し忘れです。
369デフォルトの名無しさん:2005/12/02(金) 23:18:34
isohunt.com
370デフォルトの名無しさん:2005/12/02(金) 23:37:44
THXです。
マジタスカタ
371デフォルトの名無しさん:2005/12/03(土) 16:10:08
XPのDDKは、購入しないといけないですか?それとも無料配布されてますか?
372デフォルトの名無しさん:2005/12/03(土) 17:39:19
$199.00です。
373デフォルトの名無しさん:2005/12/07(水) 21:30:08
>>343
神じゃないし、カメレスだが最低でも256Mは取れる筈
↓この辺参照
http://support.microsoft.com/default.aspx?scid=kb;ja;312362
http://support.microsoft.com/default.aspx?scid=kb;ja;126402
374デフォルトの名無しさん:2005/12/07(水) 21:33:43
コールされた命令のログを表示するだけのサウンドカードデバイスのドライバを書きたいのですが
サウンドカードのドライバを実装する際のエントリポイントなどの情報が書かれてる資料はありませんか?
WDMドライバの本の上巻下巻にも書いてなく、DDK2003のソースにも無いので困ってます。
当然MSDNにもないし・・・。
375デフォルトの名無しさん:2005/12/12(月) 14:29:02
今品川でWindows64bitDriversWorkshop受けている訳だが、
376デフォルトの名無しさん:2005/12/16(金) 18:58:46
XP_DDK.iso落ちてるとこ無いですか?
またはどこかに上げてもらうこと出来ませんか?
一応ログ見て、shelekは項目はあれど落とせない(TOPに戻る)
ssarangは、403でページが見られない。

"DDK_XP.ISO"でぐぐって、****.szipc.comって所にあることはあったけど重い。
Irvineで1〜2kしか落とせず、42時間なんて待てないッス。

よろしくお願いします。
377デフォルトの名無しさん:2005/12/16(金) 19:55:36
うpに時間かかる
メアド晒したら送っちゃる
378デフォルトの名無しさん:2005/12/16(金) 20:11:58
379376:2005/12/16(金) 20:57:58
>377
メアドでも、うpに時間掛かるんじゃ・・・

>378
ありがとう。今落としてます。
380デフォルトの名無しさん:2006/01/21(土) 23:21:43
ROLANDのMIDIデバイスをインストールしたのですが
http://www.roland.co.jp/cs/faq/faq.cfm?ln=jp&Dst=0&Faq=JP05-10655&dsp=1
この問題で使用ができません

「Windows XP/2000 において、MIDIやオーディオ・デバイスのインストール可能台数には上限があります。」
「Windows の制限であり、ドライバの問題ではありません」

別のハードウェア・オーディオデバイスをPCIに追加しても全然普通に動きました。

私にはROLANDのコメントが事実だとは思えません。
どなたかこの辺りの実情について情報を頂けないでしょうか。

381デフォルトの名無しさん:2006/01/28(土) 00:29:57
USBのバルク転送を行うドライバを作成しています。

IoCallDriver を呼ぶ前に IoSetCompletionRoutine でデータの受信
処理をタイムアウト可能にしています。タイムアウト処理は正常に
行われるのですが、例えばタ受信完了間際にタイムアウトになった
場合、それまで受信していた(?)データが欠落するといった事は
ありえるのでしょうか?

感覚的な疑問なので根本的に間違っているかもしれませんが
ご存知の方、ご教授願います。
382デフォルトの名無しさん:2006/02/12(日) 05:44:49
WDF 関連の話題もここでいいですか?
DDK って一応無料で手にはいるんですね。
383デフォルトの名無しさん:2006/02/13(月) 10:28:43
>>382
WindowsDDK各種についてのスレ
http://pc8.2ch.net/test/read.cgi/tech/1049116134/325-327

漏れは試してないが、いちおう無料で手に入るようだ
384デフォルトの名無しさん:2006/02/20(月) 10:47:02
USBミニポートドライバ作ってるんですが、
Win2Kに同じデバイスを2つ挿すと片方は
正常に認識されるもののもう片方が常に
ドライバのインストールを促され、再起動を
要求されてしまいます。
WinXPでは問題ないのですが・・・。

考えられる原因は何でしょうか?
385デフォルトの名無しさん:2006/02/22(水) 00:24:10
どうもはじめまして。
ほとほと困り果てています。どなたかお力添えをお願いしたいのですが。
windows updateをしようとすると以下のメッセージが出て
ウインドウが強制終了されてしまいます。updateができない状態です。
IEXPLORE のページ違反です。
モジュール : RPCRT4.DLL、アドレス : 017f:70140894
Registers:
EAX=02df06db CS=017f EIP=70140894 EFLGS=00010216
EBX=02dec5a0 SS=0187 ESP=02dec3c0 EBP=02dec5b0
ECX=770eee58 DS=0187 ESI=00000484 FS=117f
EDX=bff768d5 ES=0187 EDI=770eef6e GS=0000
Bytes at CS:EIP:
ff 30 ff 75 d4 8d 85 1c fe ff ff 50 e8 cb 0b 00
Stack dump:
02dec8bc 00000000 00000000 02dec508 0061002e 00000000 00000000 000d002f 00000000 0062000a 0064006f 00000001 00000000 00000000 0061006e 00000000

どうか宜しくお願い致します。
386デフォルトの名無しさん:2006/02/22(水) 00:26:15
>>385
板違い
387デフォルトの名無しさん:2006/02/24(金) 02:09:23
SCSIのプロセッサーにコマンド出したいんですがどうしたらいいでしょうか?

SCSI_PASS_THROUGHでCDBにWRITE(0x3B)のコマンドを入れてDeviceIoControlしたんですが、
DeviceIoControlは1で正常終了しても、SCSI StatusがCHECK CONDITIONになって、WRITEできていません。

SENSE見ると、INVALID REQUESTのINVALID FIELD in CDBってなります。

CreateFile(\\.\scsi0:でREADとWRITEを指定するだけじゃ駄目ですか?)
388デフォルトの名無しさん:2006/03/03(金) 08:57:58
>SENSE見ると、INVALID REQUESTのINVALID FIELD in CDBってなります。
これが理由じゃないのか?
つーかこれってドライバの質問?
389デフォルトの名無しさん:2006/04/20(木) 15:12:16
ドライバ自体の作成は完了し、インストーラーを作成しているのですが、
ハードウェアの検出ウィザードを使用しないインストールってどうすれば
いいのでしょうか?

DPInst を使用しましたが、inf の選択が無くなるだけで、ウィザード自体は
ユーザーが操作を行わなければいけません。ドライバをインストールし
USBデバイスを繋いだらすぐ使えるようにしたいのです。

参考になるサイトなどありましたら教えてください。
390デフォルトの名無しさん:2006/04/20(木) 15:34:02
漏れも知りたいw

結局、わかんなくてデバイスのファームをHID準拠に作り直しちゃった・・・
391デフォルトの名無しさん:2006/05/17(水) 01:17:35
なんかあべし童貞の臭いがぷんぷんする擦れだな
392デフォルトの名無しさん:2006/05/17(水) 07:10:26
>>391
はいはい、昨日筆おろしに行ったんですね、うまくいった?
393デフォルトの名無しさん:2006/05/17(水) 07:20:25
オマエら筆おろしは素人?それとも風俗?
俺は風俗。それ以来ずっと風俗。
394デフォルトの名無しさん:2006/06/01(木) 00:07:28
Mass Storage ClassのUSBのポータブルHDDに対して
SCSIコマンドの送受信を行いたいんですがドライバを差し替えないで、
usbstore.sysのままで行えないでしょうか?

395デフォルトの名無しさん:2006/06/01(木) 04:07:41
玉袋の裏かゆくなりませんか?
396デフォルトの名無しさん:2006/06/01(木) 21:19:47
>>394
SPTIじゃアカンの?
397394:2006/06/01(木) 23:58:17
>>396

情報ありがとうございます。
こんな便利なものがあるのですね。

とりあえず、やりたいことができるか調べてみたいと思います。
398デフォルトの名無しさん:2006/06/04(日) 14:37:21
アプリケーションからReadFileを同期処理として呼び出したときに、
Device側が送るべきデータを持っていなければ、
ずっとReadFileを抜けずに待ち状態になってしまいます。

ReadFile自体はアプリケーションとは別スレッドで行っているとした場合、
任意のタイミング(キャンセルボタン押下)でReadFileを止めさせる場合には、
どのような方法が良いでしょうか?
399デフォルトの名無しさん:2006/06/04(日) 17:12:50
アプリを非同期で書いた方が良いと思うけど・・・

やるとしたら、
データ待ちうけ部分をKeWaitForMultipleObjecとかで待って
中断イベントも待つようにして、DeviceIoControlでイベント発行・・・かな
400デフォルトの名無しさん:2006/06/05(月) 00:34:25
仮想LANドライバ書きたいのですが
今までLinuxやUnixでの開発しか経験ないので
資料集めから始めたいのですがどの資料はみなさん
どんなの読んでいますか?
401デフォルトの名無しさん:2006/06/20(火) 12:21:50
winpcap のそーす?
402 ◆0uxK91AxII :2006/06/20(火) 13:17:54
>>400
winvpn_1.zip
403デフォルトの名無しさん:2006/07/18(火) 20:16:22
UsbBuildVendorRequest(URB_FUNCTION_CLASS_INTERFACE)で
デバイスが返答しない場合にタイムアウトさせるにはどうすれば良かですか?
404デフォルトの名無しさん:2006/07/18(火) 22:22:39
WDMであるデバイス用のドライバが書ければ、Linux用の
ドライバを書く力もつくと考えていいのでしょうか?
405デフォルトの名無しさん:2006/07/18(火) 22:43:10
全然違うよ
406デフォルトの名無しさん:2006/07/19(水) 03:16:35
ハードに直接アクセスする部分が書けるなら
それなりになんでも出来るでしょう

あとはルールを知ってるか知らないかだけ
407デフォルトの名無しさん:2006/07/19(水) 06:14:58
>>403
WorkQueueで待ってイベントがタイムアウトしたらキャンセルとか。

>>404
そんな考えはダメ。
408デフォルトの名無しさん:2006/07/19(水) 08:33:42
>>403
UsbBuildVendorRequestは単なるマクロで、urbに必要な情報を代入するだけ
urbを下のドライバに渡すときに使ってる関数のリファレンスを読めば載ってるかと
409403:2006/07/19(水) 20:38:20
>>407
>>408
ありがdございます。>>381あたりと同じでいいんですかね?もちょっとがんばってみます。
410デフォルトの名無しさん:2006/07/27(木) 14:39:39
あげ
411デフォルトの名無しさん:2006/07/27(木) 14:40:28
ある特殊なデバイスを作りました。
HIDマウスなんだけど、特殊なベンダーリクエストが来ると
LEDが光ります。(フィードバック)
これは普通にPCに挿すと、普通のHIDマウスとしか認識しないんだけど
専用デバイスドライバをインストールすると、(HIDドライバーをすげ替える)
LEDによるフィードバックが味わえるようになるという。

とりあえずwindows2000/xpで動作確認した所、okだったんだけど、
ドライバーのインストールで気になる事が。
windows2000では普通にインストールできるのに、
windowsXPにインストールすると、その時挿していたusbポート以外では、
HIDマウスとして認識してしまうという不具合が出ました。
(手動で一つ一つ、ドライバーの更新という作業が必要)
どうしてこんな事が起きるのか・・・・orz
412デフォルトの名無しさん:2006/07/27(木) 14:46:27
インストーラーは、installshield 11.5 のウイザードのみ使用。

ドライバー
INFファイル
インストーラー、

どれが悪いのか・・・。

親切心で、デバイスにリポートディスクリプターなんか載せたのが
悪かったのかな。
単純に、hidマウスデライバのプライオリティが下げられれば
良いだけな気がするんだが、方法がわからん。
413デフォルトの名無しさん:2006/07/27(木) 15:03:21
>>411-412
↓じゃ回避できないか?
既存の USB デバイスが新規デバイスとして認識される
http://support.microsoft.com/default.aspx?scid=kb;ja;818542
414デフォルトの名無しさん:2006/08/04(金) 15:35:58
いつの間にかDDKがダウンロードできるんだが
ttp://www.microsoft.com/whdc/devtools/ddk/default.mspx

Download the Windows Server 2003 SP1 DDK [236 MB ISO file]
Note: To download and use the DDK, you must burn the ISO file to a CD or DVD.
415デフォルトの名無しさん:2006/08/04(金) 23:05:37
>>414
情報dクス
早速DLしますた。
416デフォルトの名無しさん:2006/09/04(月) 22:50:02
他のスレからこちらに来ました.

「どのプロセス」が「どのファイル」を作成,変更したかを
リアルタイム取得する方法を探しているのですが,
デバイスドライバーを自作する必要があると聞いてこちらに来ました.
Filemonのように高度なものでなく,ReadDirectoryChangesWで取得できる
情報が「どのプロセス」によってもたらされたものかを知りたいのですが,
サンプルコードや参考書などがあればご教授お願いします.
417デフォルトの名無しさん:2006/09/05(火) 04:05:31
filemonのソース。
ntinternalではもう公開してないが、ぐぐれば見つかる。
418416:2006/09/07(木) 12:57:02
>>417
ありがとうございます.>>280にあったv4.34のソースをおとして
\FILESRC\exe内のプロジェクトをビルドしようとしたのですが,
以下のようなエラーが出てコンパイルが通りません;;

○VC++ 2005 Express Edition
Filemon.dspを開いて,プロジェクトの変換
→コンパイルすると
 filemon.c(185) : error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。
 と出るため,/WX を指定せずにコンパイル
→ビルドすると
 1>CVTRES : fatal error CVT1100: 重複するリソースです。type:MANIFEST, name:1, language:0x0409
 1>LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。
と出て失敗する.

○VC++ 6
filemon.c(1988) : error C2220: 警告をエラーとして扱いました。オブジェクト ファイルは生成されません。
filemon.c(1988) : warning C4013: 関数 'SetWindowLongPtr' は定義されていません。int 型の値を返す外部関数と見なします。
filemon.c(1989) : error C2065: 'GWLP_WNDPROC' : 定義されていない識別子です。
filemon.c(1990) : error C2065: 'LONG_PTR' : 定義されていない識別子です。
filemon.c(1990) : error C2146: 構文エラー : ')' が、識別子 'ListViewSubclass' の前に必要です。
filemon.c(1990) : error C2059: 構文エラー : ')'

デバイスドライバどころか,C++もサンプルコードをいじる程度しかできない初心者なのですが,
どなたか教えていただけませんか
419デフォルトの名無しさん:2006/09/07(木) 13:18:01
>>418
・・・悪いことは言わん、アキラメロ

XPのコマンドプロンプトでopenfiles使った方が幸せになれるぞw
420 ◆0uxK91AxII :2006/09/07(木) 14:08:59
>>418
方法を知りたいなら、buildを通す必要は無いし、
Filemonのような事をしたいなら、FILEM.SYSを使えば良いだけだから、
やはり、FILEM.SYSのbuildは不要。

十年早いと言うか、諦めた方が良いね。
421 ◆0uxK91AxII :2006/09/07(木) 14:10:41
x やはり、FILEM.SYSのbuildは不要。
o やはり、FILEMON.EXEのbuildは不要。
422デフォルトの名無しさん:2006/09/07(木) 19:09:02
こんばんは、ボクfilemonです
423416:2006/09/07(木) 22:40:10
>>418-421
ありがとうございます.
とりあえず,ビルドだけはできたのですが皆様のおっしゃるとおり
理解するのはほぼ不可能なのであきらめます.
424デフォルトの名無しさん:2006/09/11(月) 12:52:15
net files
425デフォルトの名無しさん:2006/09/13(水) 11:42:11
意欲があっても能力が足りない典型例

能力があっても意欲が無いのとどっちが会社的には良いのだろうか? 藁

漏れは両方無いけど 核爆
426デフォルトの名無しさん:2006/09/14(木) 05:05:10
能力があって意欲が無いのも
意欲があって能力が無いのも
どっちも社会的に有害

まあ漏れもなんだが

                   ,'⌒,ー、           _ ,,..  X
                 〈∨⌒ /\__,,..  -‐ '' " _,,. ‐''´
          〈\   _,,r'" 〉 // //     . ‐''"
           ,ゝ `く/ /  〉 /  ∧_,. r ''"
- - - -_,,.. ‐''" _,.〉 / /  . {'⌒) ∠二二> -  - - - - - -
  _,.. ‐''"  _,,,.. -{(⌒)、  r'`ー''‐‐^‐'ヾ{} +
 '-‐ '' "  _,,. ‐''"`ー‐ヘj^‐'   ;;    ‐ -‐   _- ちょっくら逝ってくる
 - ‐_+      ;'"  ,;'' ,''   ,;゙ ‐-  ー_- ‐
______,''___,;;"_;;__,,___________
///////////////////////
427デフォルトの名無しさん:2006/10/06(金) 15:06:55
自分で書いたドライバをインストールすると、
日付: 利用できません
バージョン: 0.0.0.1
のように、バージョンは表示されますが日付が表示されません。
INFにDriverVer=mm/dd/yyyy,versionは書いてありますが、
もしかしてデジタル署名しないと日付は表示されないんでしょうか?
428デフォルトの名無しさん:2006/10/06(金) 15:17:22
>>427
デジタル署名は関係ない

そのINF使って、再インストールしてみたら?
429デフォルトの名無しさん:2006/10/06(金) 21:17:37
>>428
どもです。
ttp://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign_perOS.mspx

Windows 2000でやってたんですが、2000だと無署名のドライバの日付は無視されるみたいで
(削除 → 再起動 → インストールとかもしてみました)
XPだとOKでした。(署名してないという警告はもちろん出ますが)

430デフォルトの名無しさん:2006/10/09(月) 11:11:17
もうちょっとそちらの状況を晒してほしい
431デフォルトの名無しさん:2006/10/17(火) 01:58:39
はじめまして。WinXPのWDMを開発しています。
WRTIE_PORT_UCHAR等の正しい使い方をご教授願います。
WDMの下記コードで、プリンタポートに0x55を出力しようとしましたが、
プリンタポートに0x55の電圧パタンが出てきません。

--------------------------------------------------------
.
.
.

switch(irpStack->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_HELLO:
// パラレルポートに0x55を出力
WRITE_PORT_UCHAR((PUCHAR)0x378,(UCHAR)0x55);
KdPrint(("0x55 output to parallel port\n"));

Irp->IoStatus.Information = 0;

status = STATUS_SUCCESS;
break;
.
.
.
---------------------------------------------------------

物理<->仮想アドレス変換が必要なのは、メモリ空間だけであって、
I/Oポート空間は不要だと認識しているのですが、正しいでしょうか。

よろしくお願いします。
432デフォルトの名無しさん:2006/10/17(火) 03:27:26
ポートが0x378じゃないというオチ
433427:2006/10/18(水) 01:13:27
>>430
>>429 に対して、ですか?
こんな感じです。

[Version]
Signature = $CHICAGO$
Class = USB
ClassGUID = {36FC9E60-C465-11CF-8056-444553540000}
Provider = %MFGNAME%
DriverVer = 10/18/2006,0.0.0.1
Catalogfile = TestDriver.cat

これをWindows 2000にインストールすると、最初はOK。二回目以降は、
「既知の...」から「ディスク使用」を選ばないと更新できない。
DriverVerを更新しても、「デバイスに最適なドライバを検索する」を指定した
場合は、「現在のドライバよりさらに適切な...」で、現在のものが使われてしまうの
だけど、署名されてないから日付が認識されず、新しいと判定されないからだ、
と予想してます。困ってはいないんですが、こういうもんなのかなと。
XPだと警告は出るものの、日付が認識されて、更新もできます。
434デフォルトの名無しさん:2006/10/21(土) 09:46:36
XP SP2 DDKを使っています。
atapi.sysを使うためのカーネルレベル関数を教えていただけないでしょうか。

PCIIDEのソース例はありますが、atapi.sysよりもハード側のレイヤの
バスドライバであって、参考になりません。

PCに付属のIDEポートを直接駆動してATAPIコマンドを入力したいのです。
よろしくおねがいします。
435デフォルトの名無しさん:2006/10/21(土) 17:20:40
atapi.sysを使ってport直叩きなんてできんぞ。

pass throughじゃ駄目なのか?
436デフォルトの名無しさん:2006/12/07(木) 21:45:38
スレ違いだけど、俺用メモ
tp://ftp.heise.de/pub/ct/listings/0207-218.zip
ttp://cpbotha.net/files/hdstandby/hdstandby-20050226.zip
ttp://www.ouk.jp/ogawa/treecrsdx/index.cgi?m=look&bnum=147
437デフォルトの名無しさん:2007/01/19(金) 15:51:17
Vista-x64以降は署名の無いドライバは使えない事に対して、
(既にWHQL取ってるような大メーカーさんは別にして)皆さんどのように
対応します?
438デフォルトの名無しさん:2007/01/19(金) 21:57:40
普通に署名を付加します。
439デフォルトの名無しさん:2007/01/22(月) 12:20:54
テスト署名して、
Bcdedit.exe -set TESTSIGNING ON
でOK。
440デフォルトの名無しさん:2007/01/24(水) 21:05:26
Bcdedit.exe -set TESTSIGNING ON
すると、(セーフモードみたいに)画面の四隅に「テストモード」って出るんだな。
インストーラでこっそりTESTSIGNING ONしようと思ったけどだめだは・・・・
441デフォルトの名無しさん:2007/01/25(木) 00:23:33
デジタルコンテンツの暗号化とかのために、
カーネルでは信頼するものしか動かせなくする
という話だが。
442デフォルトの名無しさん:2007/01/25(木) 18:58:21
初歩的な質問かもしれないのですが、

ttp://hp.vector.co.jp/authors/VA000363/release/index.htm

のVer2.20ソースを参考に
RAMDISKを作ろうと思っています。
このソース自体がうまくビルドできないのですが、
Windows Server 2003 SP1 DDKでは
ビルドできないんでしょうか?

443デフォルトの名無しさん:2007/01/26(金) 08:48:23
ドキュメントにビルドする環境くらい書いてあるだろ

それと違う環境でビルドするなら、ソース直すくらいはしなきゃならんこともあるだろ

444デフォルトの名無しさん:2007/02/18(日) 22:04:56
仮想空間アドレスがどの物理メモリに割り当てられているか知る術がありますか。
445デフォルトの名無しさん:2007/02/18(日) 23:01:31
>>444
ない。
446デフォルトの名無しさん:2007/02/18(日) 23:13:18
>>445
カーネルだけが知っているということですか?
447デフォルトの名無しさん:2007/02/19(月) 00:35:49
>>446
そう。内部用のAPIじゃないとわからん。
448デフォルトの名無しさん:2007/02/19(月) 03:48:58
WDMでも使えたかどうかは知らないけどNT用のDDIにあったような
449デフォルトの名無しさん:2007/02/19(月) 05:50:09
厨房スレだな。
MmGetPhysicalAddress
450444:2007/02/19(月) 06:56:51
>>449
ありがとうございます。
451デフォルトの名無しさん:2007/02/19(月) 08:54:25
>>449
マルチにマジレスカコイイ!
452sage:2007/03/07(水) 02:25:36
WinIo.dllでRTCを弄りたいのですが
皆さんどうやっています?
453デフォルトの名無しさん:2007/03/19(月) 02:58:29
WinDbgを使ったKernel Debugにおいて、
ターゲットマシンが全く応答してくれず、2日無駄にしました。

このスレの
>>21, >>25, >>27

を読んでいれば、もっと早く気づけたのに・・・。

ちなみに、ターゲットマシンは、ThinkPadで
ドッキングステーションに載ってるCOMポートにつないでやろうとしました。
454デフォルトの名無しさん:2007/03/19(月) 07:49:33
wdmってddkよりめんどい?
455デフォルトの名無しさん:2007/03/19(月) 08:25:40
え゛?
456デフォルトの名無しさん:2007/03/19(月) 09:35:24
wdf
457デフォルトの名無しさん:2007/03/19(月) 11:28:22
もう、春だからなぁ・・・
458デフォルトの名無しさん:2007/03/19(月) 14:44:30
あと、少しで終わるよなー
459デフォルトの名無しさん:2007/05/28(月) 12:45:02
ドライバのインストールでお教えください。

専用ハード/専用デバイスドライバを必要とするアプリがあり、これまでは、
アプリのインストーラでinfファイル/sysファイルを%WINDOWS%\infおよび
%WINDOWS%\system32\driversにあらかじめコピーしておくことで、ユーザー
がドライバインストール時に在り処を指定しなくても済むようにしていまし
た。(WHQL未取得なので警告は出ますが・・・)

Vista-x64及びLonghorn対応のためドライバ署名のためのcatファイルが必要に
なりますが、この場合も上記同様、ユーザーがドライバの在り処を指定しなく
てもインストールできるようにすることは可能でしょうか?
catファイルを%WINDOWS%\system32\CatRootにコピーする等、試行錯誤してみ
ましたがだめでした。

アドバイスいただけたら幸いです。
460デフォルトの名無しさん:2007/05/30(水) 01:49:27
DIFxフレームワーク使ってセットアップかければいいじゃん。
461459:2007/05/30(水) 06:52:04
>>460
ありがとうございます。 こんなものがあるのを知りませんでした。
大変助かりました。
462デフォルトの名無しさん:2007/06/04(月) 18:14:17
memcard.sys ねぇ・・・orz
463デフォルトの名無しさん:2007/07/08(日) 14:14:45
Filemonのソースを解析したいんですが、ソースの内容がわからないです(´・ω・`)


まず何を勉強したほうがいいのでしょうか?

ドライバプログラミングの入門書から勉強しようかなと思ってるんですが(´・ω・`)

ハードの知識はちょびっとあります。Windowsの知識はあんまりないです(´・ω・`)
464 ◆0uxK91AxII :2007/07/09(月) 05:40:20
465デフォルトの名無しさん:2007/07/09(月) 21:31:10
>>464
ありがとうございます。わかりやすいです(´・ω・`)
466デフォルトの名無しさん:2007/07/10(火) 00:53:47
Filemonの読みはファイルモン?
ホリエモンみたいは暑苦しい姿を彷彿とさせる名前だな
467デフォルトの名無しさん:2007/07/10(火) 08:21:28
フィレモンって呼んでもいいぞ
468デフォルトの名無しさん:2007/07/23(月) 23:52:23
ハ〜〜〜〜〜〜 やっとKMCS対応終わった〜〜〜〜〜
こんなに手間取ると思わなんだ・・・・・
以上、チラシの裏でした
469デフォルトの名無しさん:2007/08/02(木) 09:32:19
>>468
そのチラ裏が妙〜〜に気になった。
ターゲットOSは、Vista 64bit版でつか?
MS社の方針変更の可能性濃厚なんで
おおまかな手続きの流れをよければ語って
もらえマイカ。

いずれ全てのドライバが署名必要となるのか・・・orz。
470468:2007/08/02(木) 14:20:49
>>469
とりあえずVista64bit対応のためでつ。
WindowsServer2008以降32bit版もKMCS必要なことは知ってますよね。(Server2008x86-CTP版で必要なことを確認済み)
>MS社の方針変更の可能性濃厚なんで
方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?

>おおまかな手続きの流れをよければ語って
>もらえマイカ。
手順等は
http://www.microsoft.com/japan/whdc/winlogo/drvsign/kmcs_walkthrough.mspx
の画面右のdoc参照。
他に知りたいことがあれば、具体的に書いてもらえば可能な範囲で答えるが・・・・
471469:2007/08/02(木) 17:45:32
>>470
>方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?
やめるという情報はないでつ。むしろ、32bitとかも求められるとなると、
いずれSP3辺りでXPなんかもそうなるのかなと・・・。XPのサポートが
延びてるしまだまだ使われるはずなので。

手順docのリンクとんくすでつ。
認証ツールいくつかあるみたいだけれど、おすすめとかありますか?

後、対応化にあたって苦労した話なんか聞かせてもらえるとこれから
認証手続きする人に役立つと思いまつ。

あ、SDK+WDK(withDDK)辺りはインスト済み前提で話してもらっていいでつ。
472デフォルトの名無しさん:2007/08/02(木) 21:23:37
>いずれSP3辺りでXPなんかもそうなるのかなと・・・。XPのサポートが

んな事したら発狂する顧客が随分出そうな気配。
473468:2007/08/02(木) 22:24:17
>>471
>いずれSP3辺りでXPなんかもそうなるのかなと・・
私も>>472と同じくこれは無いと思います。

>認証ツールいくつかあるみたいだけれど、おすすめとかありますか?
認証ツールとは?

>後、対応化にあたって苦労した話なんか聞かせてもらえるとこれから
>認証手続きする人に役立つと思いまつ。
自分で(Verisign等から)電子証明書を購入し、自分の作ったドライバに自分で
電子署名するなら、特に難しい点は無いと思います。
(KMCS_Walkthrough.docの手順をそのとおり辿るだけ)

私の場合、お客からの請負で作成した(アプリに含む)ドライバにお客の会社の
電子証明書でお客に電子署名してもらわなければならない故に以下で手間取り
ました。
(1) 電子署名とは何か、なぜ必要なのかを理解してもらう。
(2) 電子証明書を購入してもらう。
(3) 電子署名をしてもらう。

(1)は説明不要でしょう。
(2)は私がでは無く客先の担当者が苦労したのですが、でかい会社のため、法務・
総務・購買などに(1)が必要だったようで、電子証明書を購入だけで2ヶ月か
かりました。
474468:2007/08/02(木) 22:25:03
一番の難関は(3)です。電子証明書(の秘密鍵)の管理は「DOSプロンプトって何?」
ていうような事務屋さんが仕切っているわけですから、WDKのインストールを含め、
KMCS_Walkthrough.docの手順をやってもらうなど、まず不可能。
で、仕方が無いので、公開鍵・秘密鍵ファイルのありかとパスワードを入力する
ための専用ダイアログアプリとそこから一連の手順を自動実行するバッチ(+α)
を作成し、WDKの中で必要なツール等と合わせてお客に渡し、署名してもらい
ました。
KMCS_Walkthrough.docを見てもらえばわかりますが、Cross-Certificateの関
連で、テスト用電子証明書で署名する手順と本物の電子証明書で署名する手順
が異なるため、上記バッチの確認が(本物の電子証明書がない)自分のところで
できず、苦労しました。

参考:
catファイルの作成にMakeCat/Signability/Inf2Catの3つの選択肢がありますが、
* MakeCatは面倒
* Signablityはファイルをコピーしただけでは使えない(COMの登録が必要)
なので、Inf2Catがお勧めです。


以上、ご参考まで
475469:2007/08/03(金) 00:44:14
>>473->>474
実際の流れに沿った詳細な解説ありがとうございます。
おそらく、実際に対応してみないと見えてこないことが多々あると思われ、
>>468さんの情報は今後実施する多くの方に貴重な内容だったと思われまつ。

結果として、お客様自身に電子証明書手続きしてもらうことが
一番大変だったということでつね。PCの事をよくわからない事務屋さんに
ドライバの署名してもらう為のバッチ処理、作るのかなり難易度高そうでつ・・・。

476デフォルトの名無しさん:2007/08/13(月) 23:51:32
IRP_MJ_READにセットしたディスパッチルーチンの中で、
ユーザが読むべきデータがまだ無い場合はブロッキングしたいのですが、
どのような機能を使えば良いのでしょうか?
初歩的っぽい質問で申し訳ないのですが、探しても中々でてこないので・・・

どなたかご教授いただければ幸いです。
477デフォルトの名無しさん:2007/08/14(火) 09:29:51
ブロックしたらだめ。完了ルーチンなり割り込みなりを設定して
「まだ読み出すべきデータがない」と言ってすぐに戻る。
478デフォルトの名無しさん:2007/08/14(火) 11:35:50
読むべきデータがないならSTATUS_PENDINGでいったん返しておいて、
データができたときに割り込みがあるなら、それをトリガにしてIRPを完了かなぁ。
割り込みなくてポーリングでしかわからないなら、ワーカースレッドを起動して
スレッド内でデータができたらIRP完了するのかな。
479デフォルトの名無しさん:2007/08/14(火) 13:52:12
>>476
>>477が書いているようにディスパッチルーチンの中で時間のかかる処理の完了を待ってはならない。
>>478のようにディスパッチルーチンではSTATUS_PENDINGを返しておき、割り込みなりポーリング
なりで処理の完了を確認した時点で、IoCompleteRequest()で呼び出し側に完了を伝える。
ドライバ側で上記の実装をしておけば、アプリ側は
同期IO:ReadFile()は処理の完了まで抜けてこない
非同期IO(Overlapped-I/O):ReadFile()は処理の完了を待たない
のどちらでも実装できる。

>>476の質問の書き込みから見て、これらの説明だけではチンプンカンプンでしょう。
何か本を買って一通りの勉強をすることを強く勧める。
例: http://www.ascii.co.jp/books/books/detail/4-7561-3913-2.shtml
入門書としては少し難しいが、実装上のノウハウがひととおり書かれている。
480476:2007/08/14(火) 13:59:27
>>477
>>478
>>479
ご回答ありがとうございます!
一応Linux上でのドライバ開発の経験はあるもので、
Linuxだとディスパッチルーチンに相当する部分でスリープしてしまって良く、
それと同じようなことをしようとあがいてました。
もっとWindowsでの事情をちゃんと考慮すべきでした・・・

おぼろげながらどうやればいいかわかってきた気がするので、
またがんばってみようと思います。
ありがとうございました
481デフォルトの名無しさん:2007/08/22(水) 19:11:19
ファイルシステムのドライバを作ってるページありませんか?
482デフォルトの名無しさん:2007/08/22(水) 19:54:19
オープンソース系のファイルシステム実装とかReactOSとかもちろんDDKのサンプルとか
あとここの本
http://www.osr.com/fsinternals.shtml
日本語の情報はほとんどない

しかしMSのサンプルソースは読みにくい気がするのは俺だけ?
483 ◆0uxK91AxII :2007/08/22(水) 19:56:39
484デフォルトの名無しさん:2007/08/25(土) 19:04:45
はじめまして.デバイスドライバに関しては全くの素人なのですが,
FILEM.SYSを利用して,ファイルがどのプロセスから読み書きされているか
調べるツールを作成しようと考えています.

このスレで上げられているFilemonのソース見て,
DeviceIoControlでアプリ側からフィルタドライバ側へアクセスしているだろう
ということは分かったのですが,フィルタドライバ側からのデータは
どのようにして受信するのでしょうか?

初歩的な質問で申し訳ございませんがよろしくお願いします.
485デフォルトの名無しさん:2007/08/26(日) 00:59:56
定期的に共有メモリを覗く
486デフォルトの名無しさん:2007/09/04(火) 21:51:37
>>482
亀レスだが、邦訳出てる。
Windows NTファイルシステム詳解
NT4基本に書かれてるけど、大筋はかわってないとオモ。
あと、 ttp://www.acc.umu.se/~bosse/

キャッシュマネジャがすごくイヤな感じだった。
487481:2007/09/05(水) 14:41:25
はまってて質問したこと忘れてました・・・

>>482
DDKサンプル、OSRは大体見てます。
NTファイルシステム詳細は会社にはあるのですが
個人でも買いたいと思ってます。(が売ってません・・・)

>>483
とりあえずDLはしておきました。

>>486
ファイルシステムの場合、OSからのリクエストが
Undocumentedな上に、SPが当たったりすると、動作が変わるのが嫌らしいです。

キャッシュマネージャを利用しようとすると、IRP_MJ_READ/IRP_MJ_WRITEに対して
2回コールされます。
最初はキャッシュフラグOnでOS側から。このときにキャッシュマネージャーのファンクションをコールします(CcCopyRead)
するとキャッシュマネージャ、VMMを経て、またIRP_MJ_READが呼ばれますが、このときはフラグがありません。
で、キャッシュなしということで、ディスクから読み込んで〜
という風になりますが、マルチスレッドを考慮して適切に排他/共有ロックをかけないといけないですし

さらに、先読み、遅延書き込み、によって通常の読み書きより優先度の高い処理が別スレッドで発生したり
Explorerや、AntiVirus、ユーザーが意識していないタイミングで、リクエストがばんばん発生するので
地道に解析しながらやるしかなさそうです。
488デフォルトの名無しさん:2007/09/05(水) 18:13:06
UndocumentedつーかIFSKITはDDKとは別に購入しなければならなかったんじゃないかな?

まず動かすんだったらキャッシュマネージャを無視して処理してもいいんじゃ?
489481:2007/09/05(水) 18:43:08
>>488
IFSKitはすでにあります。
しかし、添付のドキュメントはほぼフィルタドライバについてだったりして
期待するようなことはあまり書いてないです。

新しくでたVistaのDDKだと、FileSystemのソースもDDKに入るようになったので
IFSKIT自体無くなるのか?

いろいろ見た結果FAT32のサンプルとNTファイルシステム詳細みながら
やるのがよさそうなのでそれでがんばります。
490デフォルトの名無しさん:2007/09/05(水) 20:17:24
ファイルシステム詳細は絶版だから紹介しなかったんだけど
IFSはDDKと統合されてWDKっていう扱いになったんじゃなかったか?
MSはころころ名前変えてくれるよな
491デフォルトの名無しさん:2007/09/06(木) 04:32:54
>>488
WDKに統合されて誰でもタダで入手できるようになった
492デフォルトの名無しさん:2007/09/15(土) 14:07:06
Vista発売前に、
「Vistaではドライバ未対応のため使えないデバイスが出てくる」
と言われてた気がするんだけど、
具体的にドライバの何が問題?
32bit-Vistaなら、XPのWDMドライバもそのまま使える?
493デフォルトの名無しさん:2007/09/15(土) 15:03:52
Vistaで構造が大きく変わったドライバモデルがある。その筆頭がビデオ関連。
一応これまでのドライバモデルも動くらしいが、当然Aeroは動かないっぽい。
Vista は持ってないので、実際に試したことがないので詳しくはわからないです。
ファイルシステムとかプリンタあたりはどうなんだろう。
ここは専門外なのでわかりません。
あとは、電源関連あたりの処理が変わっているらしいので、サスペンドレジューム休止状態などで
不具合が出てしまうデバイスがあるかもしれません。

上記の注意点の条件に当てはまらなければ、原理的にはXPのドライバでも動くはずです。
なにか忘れてることがあるかもしれませんが、そんな感じです。
494デフォルトの名無しさん:2007/09/18(火) 23:16:57
ありがとうです。
Microsoftからも情報出てましたね。
http://www.microsoft.com/japan/whdc/devtools/WDK/DrvCompat_Vista.mspx

電源周りに変更ありですか。。。
XPの時もあまり関わりたくないのに
結構複雑で困ったんだよな。
495デフォルトの名無しさん:2007/09/22(土) 11:57:46
ちょっと質問。
Vista-x86にて動作する仮想ディスプレイドライバ作っているんだけど、
WDKのmirrorドライバのソースと下記URLを参考したらコード43エラーでて認識してくれん。
http://www.codeproject.com/system/driverdev6asp.asp

XPDM,WDDMは共存できない。ってことらしいんだが、WDDMの情報がまったくでてこない。
参考になりそうなサイトしっている方いたら教えてくれませんか?
496デフォルトの名無しさん:2007/09/28(金) 02:18:34
HELP DDKのサンプルで製品版と互換にする方法教えてもらえませんか。
おそらくGUIDをそろえるんだと思います。
NECのスキャナのドライバでブルースクリーンになるので調べたら、
内部名がbulkusbでDDKのサンプルらしく、KB調べたらバグありらしいので
ドライバの供給はもう終わっているので、自分で修正しようとしています。
bulidしてリネームしてDiriversにコピーしたけどだめでした。

ソースだと、
// {6068EB61-98E7-4c98-9E20-1F068295909A}
DEFINE_GUID(GUID_CLASS_I82930_BULK,
0x873fdf, 0x61a8, 0x11d1, 0xaa, 0x5e, 0x0, 0xc0, 0x4f, 0xb1, 0x72, 0x8b);
ここのところがわかりません。0x6060eb,0x61...のようになるはずなんじゃないかと。
497デフォルトの名無しさん:2007/09/28(金) 04:13:06
bulkusbと書いてあるからと言って、
中身がDDKのbulkusbそのまんまとは限らないと思う・・・

仮に、中身がほぼ同一だとしたら、
GUIDは、オマイの使ってるデバイスにあわせる必要がある
498デフォルトの名無しさん:2007/09/28(金) 12:04:46
>>497
ありがとう。
デバイスとは、製品版のSYSファイルから取り出せますか?
INFにはimageのクラスGUIDと、USDClassというのしかなかったです。
上位と下位みたいだからこれ以外みたいですが。
TWAIN用のDLLとかワンプッシュボタン用のEXEから知ることもできるでしょうか。
現状で動作させると、組み込みはできますが、データソースはデバイスが見つからないというエラーです。
499デフォルトの名無しさん:2007/09/28(金) 12:34:14
>>498
まー、その辺のファイルのどっかに書いてあるでそ
逆アセすりゃ、分かるんでない?
500デフォルトの名無しさん:2007/09/28(金) 23:56:10
簡単にさくっとは無理ですか。
SYSの逆汗したことないです
dumpbinでも分かりませんでした
GUIDだけ合わせてもだめ?
501デフォルトの名無しさん:2007/09/29(土) 09:59:56
そのGUIDをファイルの中から探せって話しだぞ
どこのGUIDを合わせなきゃいけないか理解してる?

分かってないなら、
bulkusbと一緒に付いてるサンプルの実行ファイルのソース読め

あと、逆汗ムリつーなら、CreateFileにフックかけて引数調べるとかでも良いかと
502デフォルトの名無しさん:2007/09/30(日) 03:08:00
>>501
理解していません。。
infには2箇所ありました。だけど、SYSには依存していないっぽいのでinfは無関係みたい。
製品版のSYSからとってソースに書くという事実は分かります。
場所は、496の場所かと。
mofにもなんからしいのがある気がします。
APIをフックするのも分かりません。やったことないです。

とりあえずソース見て、そしてフックも勉強します。
EXEなりのCreateFileのところの引数を調べるってことですよね、多分。
W32dsmで見てみます。
503デフォルトの名無しさん:2007/10/01(月) 13:32:45
USBのバルク転送を実装するのにBULKUSBをベースに作ったってだけで
どんなデータのやり取りをしているかは自分で調べないとだめでしょ

んで、GUIDは単にデバイスインターフェイス登録しているだけだから
無くてもかまわない。
元のドライバのSYSと入れ替えれば、OSがロードしてくれるはず

ここまでが下準備で

OSやアプリケーションからどんなリクエストが来るか
デバイスにどんなリクエストを出しているか

はフィルタドライバ作るなりして調べないといけない。

まあ、スキャナをコントロールするのにEXEやプロパティページ拡張のDLLみたいなのは
入ってると思うから、そういうの経由でどのボタン押すとどういうリクエスト来るか
ぐらいは調べられると、楽かもね

まったく動かないのであれば、正直お手上げだと思うけど
多少なりとも動くのなら、落ちる部分だけフィルタドライバでオーバーライドするのが
早い気もするんだけど。
504デフォルトの名無しさん:2007/10/01(月) 14:44:54
みんなありがとう。

バージョンリソースがそのままなのでてっきり同じかと思っていました。
いろいろやらないとだめなんですね。今のレベルだとちょっとお手上げです。
bulidしてSYSをコピーするとか、infをちょっと書き換え程度しかできません。

DLLの中身とかを見ていて、別な会社名を見つけたので、そこのWebに行って
ドライバ取ってきたら、とりあえずそのドライバで1回は動きました。
これでバグが出なければ解決だと思います。だめならまた考えます。
ドライバはNECより新しくてUIはもっと良くなっていました。
505:デフォルトの名無しさん:2007/10/13(土) 02:47:54
PCI基板を新規におこしてそれ用のドライバを作ってます。
とりあえずWinXP環境からバスをチェックして、
ベンダ情報があっているデバイス番号とか機能番号は確認しました。
そこでPCIとPCとの共有メモリの情報を見たいのですが、
どうすればいいのでしょうか?


506デフォルトの名無しさん:2007/10/13(土) 09:03:41
507:デフォルトの名無しさん:2007/10/15(月) 00:06:36
ドライバで基板の物理メモリを仮想メモリにマップして、
その先頭アドレス取得、Winアプリからそのアドレスのデータを読むことはできました。
(意味不明なデータですが、初期化されてないからと思ってます)
ただ、デバイスマネージャのメモリ一欄にその基板用に取得した
アドレスが表示されてません。
ドライバ上で仮想アドレスの先頭を取得するだけではダメなんでしょうか?
アドレス取得後、デバイスマネージャに教える関数とかあるんですか?
WDMがよくわからなくて、XP環境でNTのドライバの本見ながら作ってます、、
508デフォルトの名無しさん:2007/10/15(月) 02:04:03
普通、そういう領域はPCI config spaceのBARを使ってOSにアレンジしてもらう。
それがPCI device。そうじゃないとP2P bridgeとかで問題がでるはず。
509.:2007/10/15(月) 20:13:34
そもそも「このデバイスは正常に動作しています。」かどうかも
書かれていないわけだが・・・
510デフォルトの名無しさん:2007/10/16(火) 05:33:07
>>507
WDMかWDFを勉強しなよw PnPに対応しないと、やりたい事はできないよ。
511デフォルトの名無しさん:2007/10/18(木) 11:35:57
508みたいなこともあるわけだし
通常のPCIデバイスとしてBIOS/OSが認識して初めてWDMの話が出てくるわけだから
デバドラ開発以前の問題に思えるんだが。

そもそもそのWinアプリって何?って話なんだが。

基盤ってあたりで、XilinxとかでPCIデバイス開発したいような気もするんだけど
それなら本読めば書いてあるし、ここで聞いてる理由もわからんな
512509:2007/10/19(金) 12:38:20
作ったデバイス専用のドライバではなくて
レガシードライバで強引に物理リソースに
アクセスしていると思うんだが・・・

リソース割り当て&コンフィギュレーションは
されているが、専用ドライバがインストール
されていないからデバイスマネージャ上で
リソース確認できないんじゃないか?

Winアプリとは前述レガシードライバ経由で
メモリ、I/O、コンフィギュレーションスペースに
アクセスするアプリとみた。

ってここでエスパーしてもしょうがないな。
513デフォルトの名無しさん:2007/10/19(金) 15:42:35
いっぱいコメントついてるのに、経過報告はおろか、礼すら無いようだから、
もう本人は見てないんじゃない?
514:デフォルトの名無しさん:2007/10/19(金) 22:27:36
507です。
みなさん参考になるコメントたくさんありがとうございます。
経過報告ですが、なんとか試験的に動作できるものは作れてました。
結局、WDM的な作り方ではなく、NT用のデバイスドライバを元にして作りました。
WDMでは裏でしていることが多いようで、自分には不向きなようでした。
NT的な方法でなんでもソースに書いてとりあえず動いてます。
はじめてドライバを触るし、ゼロから作るため、いろいろ思考錯誤しましたが、
これから、それをWDM的に変更していくつもりです。
あと質問ですが、DMAをするには基板側にそういった仕様、機能がないとできないのでしょうか?
ドライバでソースを書くだけでなんとかなるものなのでしょうか?



515デフォルトの名無しさん:2007/10/20(土) 00:51:04
>>514

ソースだけで何とかしているだけでDMAでないと思うが…
汎用的に使用可能なDMAって組み込まれてたっけ?
PCIはDMA転送のモードがあるからボードの受け側が対応しているならできるとおもうけど

DMA : Direct Memory Access
メモリ<>メモリもしくはデバイス<>メモリ のデータ転送で
CPUを通さずにデータを転送させる機能
516デフォルトの名無しさん:2007/10/20(土) 01:04:26
>>514
趣味で作ってるならいいんだが、そうじゃないなら最初からWDMで書いたほうが良いよ。
PnPとパワーマネージメントはWDMじゃないと、きちんと対応することは難しい。
PnPなんて抜き差ししないから関係ないとか思ってると、後で困る事が多いよ。
517デフォルトの名無しさん:2007/10/20(土) 09:27:53
PCIに関する知識が決定的に不足している。
極端な表現をすればデバイスも偶然動いているだけ。

PCIデバイスのDMAとはデバイスがバスマスタになってトランザクションを
発行しなければならないのでデバイスが対応していなければならない。
518:デフォルトの名無しさん:2007/11/02(金) 01:30:04
>>515-517
返事遅れました。すみません。
趣味というか、興味本位ではじめたドライバの勉強でしたが、
PCI基板を2つPCにさして動かすことはできました。
多少は勉強になったようですが、所詮学生の勉強レベルですね。
就職前にデバイスドライバの勉強でもしようと思いましたが、
修論に専念します。
先生がドライバを簡単に作れるツールがあれば、買ってくれるようなことを
言われたので探してるとこでした。
いろいろありがとうございました。

519デフォルトの名無しさん:2007/11/04(日) 02:41:06
相談ってわけじゃないけど翻訳ドキュメント(日本語的な何か)があんまり圧巻なので
http://mtbeta.msdn.microsoft.com/ja-jp/library/ms310243.aspx?altlang=ja-jp
520デフォルトの名無しさん:2007/11/06(火) 01:30:41
> 身体のアクセシビリティ
ハァハァ

でも機械翻訳もずいぶんと遠い道のりを経てここまできたんだな。
521デフォルトの名無しさん:2007/11/07(水) 13:32:11
|∵)ノ カーネルモードの初心者ですけれども先生質問です。

Virtual Audio Cableのようなソフトウェアオンリーの仮想オーディオドライバを作ろうと思うですけれども
ユーザモードのアプリからカーネルモードのPortCls KSフィルタの中のミニポートのインスタンスを見つけ出して
直接通信するにはどんな方法を使ったらよいですか?
522デフォルトの名無しさん:2007/11/07(水) 14:43:46
>>521
普通のWDMドライバであれば
CreateDeviceInterfaceだったかSymbolicだったかを呼び出し
それをユーザーモードドライバでCreateFileしてやって
DeviceIoControlを呼び出すと、IRP_MJ_DEVICE_CONTROL経由で
データが飛んでくるのでそれでやり取りできる。

が、オーディオやキャプチャデバイスの場合はミニポートドライバなので
特殊なインターフェイスしか無い
(WDMドライバ本などの基礎的な部分は役に立つが、完全ではない)

DirectShowデバイスの場合はDirectShow経由で行い、
汎用セッティングについては、GUIDでやるのが作法になっているので(KSPROPERTYあたり)
そのデバイスについての固有な命令については、自分でGUIDを定義して
やり取りするのが普通だと思う。

詳細は忘れてしまったので、AC97のProppageサンプル見てみたが
SetupDiでデバイスインターフェイスを探して、そのハンドル経由でIOCTL_KS_PROPERTYで
設定を流し込んでるみたい。

そのデバイスインターフェイスは誰が作ってるかということなんだが
通常だったら自分で作らないと存在しないが、身にポートドライバなので
MSが用意してくれているかもしれない、が名前がどうなってるかまではわからないので
ツールとか使って調べてください。

デバイス固有の作法については、本が無いので、DDKのサンプルとドキュメント見て
やるしかないと思うが、他にいい文献など知ってたら教えて欲しいぐらいです。
523ゆ? ◆RmDQN/V/.. :2007/11/07(水) 16:57:08
|;∵) うをををッ為になりますッ!てゆうかレス早ッ

取り敢えずは早速IOCTL_KS_PROPERTYを試してみるです。有り難うございます。
524521:2007/11/07(水) 16:59:44
>>523>>521ですけれどもうっかり他板で使ってるコテが出ちゃって恥ずかすぃ(汗
525デフォルトの名無しさん:2007/11/17(土) 06:05:03
質問です。

なんとか、VS2005でコンパイル -> VMWare上のXPでデバッグ という流れを
作りたくて、いろいろいじっています。ドライバに関してはほとんど初心者です。

vsprintf という関数を使うと、"外部参照が未解決"となるので、VSの設定で、
"すべての規定のライブラリの無視"を "はい" に変更していたのを "いいえ" に
戻して、コンパイル、インストールしてみたのですが、インストールに失敗します。

インストールは、以下のサイトの、"DIP.zip"てのを使っていてエラーは "Error: 3" と
だけしか出ません。
ttp://ruffnex.oc.to/kenji/windriver/

vsprintf をコメントアウトすると、正常に動くので、原因はこいつで間違いないと思うの
ですが、なぜインストール出来なくなるのかがわかりません。

よろしければ、こうなる理由を教えてください。よろしくお願いします。
526 ◆0uxK91AxII :2007/11/17(土) 11:33:53
>>525
>よろしければ、こうなる理由を教えてください。よろしくお願いします。
よろしくないから、教えない。
527デフォルトの名無しさん:2007/11/17(土) 11:43:49
ヒドス (^^;

一つだけ。ユーザモードとカーネルモードでは基本的に使えるライブラリもAPIセットも違います。
528デフォルトの名無しさん:2007/11/17(土) 12:27:08
>>525
あなたには、ドライバ開発は5年早い。
529デフォルトの名無しさん:2007/11/17(土) 13:13:40
>>527
根本的に勘違いしていました。ありがとうございました。
530デフォルトの名無しさん:2007/11/17(土) 23:40:07
>525

まずは自分で貼ったURLのサイトを100回読むことだ。
531チラシ:2007/12/27(木) 13:46:15
usbd.sys 6.0.6000.16553って動き怪しくないか?
_URB_CONTROL_VENDOR_OR_CLASS_REQUESTを
IOCTL_INTERNAL_USB_SUBMIT_URBでIoCallDriverすると
成功と失敗を交互に繰り返すんだが・・・
失敗時、バスにはパケット流れないのにURBヘッダの
ステータスはUSBD_STATUS_DEV_NOT_RESPONDING・・・orz
532デフォルトの名無しさん:2007/12/30(日) 01:39:29
ISRの処理の中から、IoRequestDpcでDPC呼んでるんですけど、
それから500msくらい後から、DPCの処理がされています。
漠然とした質問ですが、原因をご教授ねがえないでしょうか?

533デフォルトの名無しさん:2007/12/31(月) 00:13:19
>>532
他のデバイスの割り込み処理が入ってるんじゃね?
もしくは自分のデバイスがさらに割り込んでるとか。
534デフォルトの名無しさん:2008/01/06(日) 13:19:56
れこーどうえーぶ
http://recwav.dip.jp/

音声でメッセージを伝えよう
http://recwav.dip.jp/M_RECWAV_Media.asp?Speech=1221925210420080106131222
535デフォルトの名無しさん:2008/01/06(日) 22:46:36
PCI用のドライバ開発でデータ転送で困ってます。
1 Winアプリ側でReadFile
2 いろいろ処理され、PCI基板のメモリにデータセット(基板側で処理されます)
3 基板が割り込み発生
4 DPCの中で、RtlCopyMemoryでPCI基板のメモリからReadFileのバッファにコピー

データは、200KB〜300KBですが、
4のRtlCopyMemoryに100msくらいかかります。
何かの設定で、バスの速度を早くするとかあるのでしょうか?
それとも、DMA処理とか使って、データのコピー方法を検討する必要があるのでしょうか?
ちなみにその場合、基板内にDMAコントローラがなくても可能なものでしょうか?

詳しいかたお願いします。
536デフォルトの名無しさん:2008/01/06(日) 23:11:44
>>535
507か?
I/Oで3MB/sだから、ありえる数値じゃないの。
性能が欲しいならバスマスタでしょ。
もちろんデバイスが対応していないと無理だけど。
537デフォルトの名無しさん:2008/01/06(日) 23:32:37
早速の回答ありがとうございます。
(ちなみに507です。就職決まったので悪あがき再開してます。)
I/Oで3MB/sというのは、PCIの仕様なのでしょうか。
参考になるURLとかご存知ですか?
バスマスタDMA可能にするには、どういった機能が基板に必要なのでしょうか。
システムDMAというのがあるらしいですが、これはPC既存のもの??
でも遅いようですね。




538デフォルトの名無しさん:2008/01/07(月) 01:41:39
>>537
そこそこ行儀が良いと仮定してもread cycleで4byte毎にバストランザクション発生させてんだろ。
1回のトランザクションに何サイクル必要か仕様見て実際に計算すれば予想できるじゃないか。

できるところまで突っ走るのも良いけど、ちゃんと基礎も勉強しないと役に立たない知識になるぞ。
539デフォルトの名無しさん:2008/01/07(月) 22:46:41
デバイスのローカル側が遅いだけじゃないの?
非バスマスタならFIFO乗っけるなりして
性能あげるしかないと思うけど・・・
540デフォルトの名無しさん:2008/01/10(木) 21:10:23
”気軽に「こんなソフトありませんか?」 ”スレから移動してきました。

Windows 2000/XP/Vista(32bit)でドライバをロード/アンロードできるCUIのツールがあれば教えてください
>hogehoge.exe c:\fugagufa\foo.sys

スレ違いなのは承知していますが、プログラマ以外では使わないツールだろうと考えていますので、
こちらで質問させていただきました。よろしくお願いします
541デフォルトの名無しさん:2008/01/10(木) 21:47:40
CodeProjectで見たような気がするが
ツールとしては見たこと無い
というか、自分も欲しいw
542デフォルトの名無しさん:2008/01/10(木) 21:53:26
543デフォルトの名無しさん:2008/01/10(木) 21:56:45
>>540
WDK(ドライバ開発キット)に入っているサンプルのdevconツールなんてどうでしょう。
devconは、CUIアプリケーションで指定デバイスを有効/無効できます。
ドライバの有効/無効でロード/アンロードと同じ動作が出来るのではないかと思います。
他にもインストール/アンインストール等もできます。

WDKの入手方法
http://www.microsoft.com/japan/whdc/DevTools/WDK/WDKpkg.mspx
544デフォルトの名無しさん:2008/01/10(木) 22:23:09
>>542-543
ありがとう。
devconはデバイスの管理のようですね。
私の場合は542さんが示していただいているように純粋なアンロード・ロード機能があるもので、
もうすこし汎用的なツールがどこかしらにあるだろうと期待して質問してみました

ちょっとなさそうであれば、チープな実装で片手間に書きます(絶対あると思ってたので。。。
545デフォルトの名無しさん:2008/01/12(土) 18:33:37
>>540
CUIってところが問題なのか。
自分でちゃっちゃと書くか、driverloaderあたりをwshで叩くかかな?
546540:2008/01/13(日) 17:31:06
ttp://www.hsjp.net/upload/src/up9293.zip
とりあえずかいたのでよければどうぞー 
547デフォルトの名無しさん:2008/01/13(日) 19:39:01
>546
乙andありがとう
548デフォルトの名無しさん:2008/01/19(土) 01:46:52
logicoolのWebカメラ l2台をUSBで接続したいのですが、
VFW-WDMラッパーの問題で片方ずつしか使用できません。
VFW経由では2台同時使用は出来ないのでしょうか?
例えば、USBポート拡張PCカードを使うなど、何らかの方法でVFW経由の使用が可能でしょうか?
549デフォルトの名無しさん:2008/01/21(月) 10:00:04
>>548
自分でドライバを書く気が無いならスレ違い

もし書く気があるなら、そのラッパーの問題とやらをkwsk
550デフォルトの名無しさん:2008/01/25(金) 22:57:17
デバイスと関係のないカーネル空間一般の質問になります。

ユーザモードだとVirtualAllocで確保した空間に実行コードを書き込み、
VirtualProtectで実行可能属性を与えることで実行することができます。
これをカーネル空間で行いたいと考え、
ExAllocatePoolで確保した空間に同じようにコードを書き込みますが、特に保護属性を変更せずに実行できるように見えます。
(プログラム自体はバグっているので自信が無いのですが)これは私のCPUだから、ということではなく、
カーネル空間には保護属性はないと考えて間違ってませんでしょうか?
551デフォルトの名無しさん:2008/01/26(土) 00:36:26
> カーネル空間には保護属性はないと考えて間違ってませんでしょうか?
間違っているよ。poolは実行可能領域になるだけでスタック領域は実行不可能になっている。
!pteで簡単に見れるんだからちゃんと調べようよ。
552デフォルトの名無しさん:2008/01/26(土) 01:00:31
ありがとう。!pte知りませんでしたorz  とても勉強になります。
やっぱりgoogleとtry&errorなデバッグだけじゃ十分な知識が揃いにくいですね
553548:2008/01/26(土) 09:57:41
PCカードではないが、PCIボードでUSBポートを増設して自己解決。
レスくれた人どうも。
554ぱーぷりん:2008/02/01(金) 10:01:51
WDFDRIVERやWDFDEVICE等の定義ヘッダーは何処のなんと言うファイル名か、
ご存知の方教えてください。DDK内を検索しても見つかりませんでした。
555デフォルトの名無しさん:2008/02/01(金) 10:48:21
wdf\kmdf\10\wdftypes.h
556デフォルトの名無しさん:2008/02/02(土) 16:34:22
デバイスドライバは作った事が無くて、
今wav等のHDD上のオーディオファイルをオーディオ入力に渡すというアプリを作るために
仮想オーディオ入力ドライバを作りたいんだけど、
ドライバの情報がWEB上探してもあまり見つからなくて難航してます。
参考になりそうなサイトとか知ってたら教えて下さい。

ちなみに、これを実現するにはオーディオファイルを開くアプリと、
アプリからの入力を受け付ける仮想オーディオ入力ドライバがあれば良くて、
同時にマイク等からのオーディオ入力も行うにはフィルタドライバにすれば良いと思ってるんだけど合ってます?
557556:2008/02/02(土) 16:55:37
あれ勘違い?フィルタドライバ(=中間ドライバ?)だとアプリからの要求を直接受けられないから
上位ドライバとして作って、他の上位ドライバへ転送するような処理をさせればいいのかな?
558556:2008/02/02(土) 18:27:02
ループバックデバイス使えば良さそう

過疎杉
559デフォルトの名無しさん:2008/02/02(土) 18:48:07
既にフリーのものがあるのにご苦労なことです
560デフォルトの名無しさん:2008/02/02(土) 18:57:37
あるなら教えて下さい
561556:2008/02/02(土) 19:05:40
2chにただ>>559とだけ書かれるとあるなら探さないといけないし
実は嘘で無いかもしれないから困る
562デフォルトの名無しさん:2008/02/02(土) 20:18:06
信じずに探さなければいいじゃない
563デフォルトの名無しさん:2008/02/03(日) 03:24:29
何がしたいかが問題だな
このスレで質問する人の大半が
目的とやりたいことがあってない
564デフォルトの名無しさん:2008/02/08(金) 15:37:36
スレ違いかも知れませんが、もし分かる方がいらっしゃいましたら教えてください。

BIOSの設定を、Windowsから変更することできませんか?
WDM(デバイスドライバ)経由でできたりしないのでしょうか?

BIOSの時計は、Windowsから同期(変更)しているみたいだから、
できそうな気がするのですが・・・

565デフォルトの名無しさん:2008/02/08(金) 20:18:50
BIOSはメーカーによってまったく違う物だけど、そこはどうする気だ?
566デフォルトの名無しさん:2008/02/08(金) 22:29:51
結論から言うと無理
567デフォルトの名無しさん:2008/02/09(土) 00:05:09
デバイス依存で直接IOポート叩く覚悟ならば全くできないことはないんぢゃないかと思いますけれども
568デフォルトの名無しさん:2008/02/10(日) 15:54:56
できますよ
569 ◆0uxK91AxII :2008/02/10(日) 16:54:50
>>564
設定方法次第。
I/O経由なら可能だろうけど、
保存場所がメモリアドレスに出てきていたら、不可能な場合もある。
570デフォルトの名無しさん:2008/02/10(日) 20:11:16
今でもBIOSの設定情報がCMOS RAMに存在すると仮定した話。

CMOSのI/O portのlockはHALが持っているから勝手にアクセスすると
トラブルの原因になる。
DDKではobsoleteと書かれているがHalGetBusDataの引数に
BUS_DATA_TYPEでCmosがあるからそれを使えばアクセス可能だと
思われる。
571デフォルトの名無しさん:2008/02/10(日) 21:34:09
デバイスドライバ関係の良い書籍とかサイトがあったら教えて下さい。
目標は各種ループバックデバイスが作れるレベルです。
572デフォルトの名無しさん:2008/02/10(日) 21:59:43
>>571
お前に言いたい事は、

目的によって実装が全然異なるのに「各種」なんてあるわけない。
その程度の事がわかるぐらいになってからドライバを書け。

そもそもDRM対策で個人ドライバ開発者が厳しい状況に置かれている
事を理解しろ。
573デフォルトの名無しさん:2008/02/11(月) 00:42:06
>>571
DDK落としてtoasterで心行くまで遊べばいいと思う。

実際より書籍が好きなら忘れてくれ。
574デフォルトの名無しさん:2008/02/17(日) 21:47:25
質問です。
複数の異なるアドレスからデータを非同期に読みたいのです。
例えば4つのスレッドからドライバにアクセス(ReadFie、IO_CTRL_・・・等)する場合に、
複写元にデータが入ったタイミングで割り込みきて、
DPCで複写先(スレッド毎に異なる場所)にコピーするとき、
ISR、DPCでどのスレッドからのReadFileがきたのかを
判断する基準てあるのでしょうか?
ISRには独自データを追加する場所もないようです。
ISR、DPCを複数用意する手段があるのでしょうか?











575デフォルトの名無しさん:2008/02/18(月) 08:23:37
>>574
リクエスト元のスレッドなんて意識するような作りをしちゃいかんだろ。
何の為のIRPだ。
576 ◆0uxK91AxII :2008/02/18(月) 10:19:11
>>574
readに対する応答処理として、それは誤っている。
故に、死ね。
577デフォルトの名無しさん:2008/02/18(月) 12:38:07
>574
複数のアドレスとring3のスレッドが一対一対応しているなら
アドレスの数だけ新しいデバイスオブジェクトを作っちまったら
どうだ?

どうしてもダメなら
・プロセスID、スレッドID等の情報をドライバに登録する
 DeviceControlをつくり、読み書きの前にスレッド情報を
 登録しておく。
・ReadFileはやめて
 DeviceIoContro(
     ハンドル,
     スレッド識別読み取りコード,
     上記情報バッファのアドレス,
     上記情報バイト数,
     読み取りデータ格納バッファアドレス,
     読み取るバイト数,
     ...
     );
・WriteFileはやめて
 DeviceIoContro(
     ハンドル,
     スレッド識別書き込みコード,
     上記情報に書き込みデータを付加したバッファのアドレス,
     上記情報 + 書き込むバイト数,
     NULL,
     0UL,
     ...
     );
実装としては果てしなくダサいな・・・
578デフォルトの名無しさん:2008/02/18(月) 17:23:47
574は本質的な間違いを犯している。よって終了。
579デフォルトの名無しさん:2008/02/19(火) 21:27:42
>>574
WDMで書くのをやめる。
580デフォルトの名無しさん:2008/02/20(水) 12:33:39
>>574
まずドライバに持たせたバッファにコピーするだろw
581デフォルトの名無しさん:2008/02/22(金) 01:51:29
WindowsXP環境でUSBAudioドライバを作成しています。
解決できない問題があり質問させていただきます。

ドライバはKS(KernelStream)のMiniDriverとしてつくっており、
Filter1つに、Pinが WaveとMidi用のCapture/RenderPinの計4本の構成です。
あと、各ピン用のBridge Pinを用意しています。

PinのCreateまでは成功しているのですが、
その後、Pinステートの変更、PCMストリームデータのRead/Writeをしようとすると
KSから MiniDriverの
・PinSetDeviceState ルーチン
・PinProcess ルーチン
がコールされなく、原因を探しています。

原因の手掛かりになりそうなことでもいいので
わかる方がいましたら教えていただけないでしょうか?
( KSPropertyでサポートしないといけないものがある、
KSディスクリプタの設定内容に怪しい箇所がある、 など)

ドライバの動作確認には、WDKの付属ツール
KSStudioを使っています。 WDKは Ver6001です。

ちなみに、
 PinCreate ルーチン
 PinClose ルーチン
 PinSetDataFormat ルーチン
 IntersectHandler ルーチン
はKSから問題なくコールされています。
各ルーチンは、KSPINディスクリプタに登録しています。
宜しくお願いします。
582デフォルトの名無しさん:2008/02/25(月) 00:14:32
>>581
自己レスです。Pinのルーチンが呼ばれない件、解決しました。
Pinの接続設定とPinディスクリプタの設定値に不備があったのが原因でした。
失礼しました。
583デフォルトの名無しさん:2008/03/03(月) 16:23:26
USBデバイスのファンクションドライバの上層に挿入する、ごく普通のフィルタドライバ
を作ろうとしていますが、インストールで詰まっています。
参考書:滝口著「フィルタドライバプログラミング」では、最も一般的な方法として
DDKのサンプルにある「addfilter.exe」をビルドして使えといっており、たしかに配賦
のためインストーラーが必要になりコマンドラインベースの方法が良いので納得です。
しかし説明に乏しく引数の指定方法がよくわかりません。
usage:
addfilter [/listdevices] [/device device_name] [/add filter] [/remove filter] [/lower]

とありますが、 [/device device_name] というときdevice_nameはどんな指定のしかたをするのでしょうか?
XXXX.sysといったことなのか、それとも何かレジストリキーのようなものなのか。
[/add filter]も同様で何を指定するのか判然としません。

どなたかご存知のかた、教えていただけませんか?
宜しくお願いします。

584デフォルトの名無しさん:2008/03/03(月) 17:42:21
>>583
正直あの本の方法は特殊だと思う。
一般的に特定のデバイスで動作させるには、
そのドライバにインストールできるようなInfファイルを書けば良くて
サンプルはDDKについてるから、それとヘルプ参照しながらで
簡単に作れたと思う。

585デフォルトの名無しさん:2008/03/06(木) 12:34:34
>583
ざっとソースを眺めたところ、
device_nameは/listdevicesの出力結果、
filterはHKLM\SYSTEM\CurrentControlSet\Servicesにぶら下がってるキー名
に見えた。
586デフォルトの名無しさん:2008/03/14(金) 03:44:23
ドライバ作ってみたいんだけど環境は何が必要?
Visual Studio 2005 なら正式版あるけどテンプレにドライバなかった
587デフォルトの名無しさん:2008/03/14(金) 05:52:54
DDK
Visual Studioに統合もできたはず
588デフォルトの名無しさん:2008/03/14(金) 11:39:05
DDKWizard
589デフォルトの名無しさん:2008/03/14(金) 17:24:31
Vistaリリースに伴いDriver Development Kit (DDK) はWindows Driver Kit (WDK)になったッ
本家WHDCサイトも見ておけッ
http://www.microsoft.com/japan/whdc/DevTools/default.mspx
590デフォルトの名無しさん:2008/03/14(金) 21:03:48
>>587-588
ありがとう。探してみるわ

>>589
サー!イエスサー!!
591デフォルトの名無しさん:2008/03/20(木) 16:36:37
UMDFは一般のDLLで開発できるということで手を出してみたのですが、
wudfddi.hをインクルードすると
構文エラー : 識別子 '_in'
というエラーが出てしまいます。
確か、VS2002や2003で最近のSDKやWDKをコンパイルとすると
この手のエラーが出たような記憶があるのですが、
何とか突破する方法はないでしょうか。
WDKとダウンロードインクルードパスの追加は完了しています。
592デフォルトの名無しさん:2008/03/23(日) 21:49:58
>>591
止む無くVC2008をインストールして解決することにしました。
593デフォルトの名無しさん:2008/05/09(金) 21:00:21
>>591
それは最近のVC++の/analyzeオプション用の注釈だと思う。
単純に/D__inとかで空に置換してコンパイルできない?
594デフォルトの名無しさん:2008/05/11(日) 10:33:31
ちがうと思う。

VCに最初から入っているPlatformSDKに相当するものとの相性があって
最新のもの同士なら大抵うまくいくが、片方のバージョンが違うと
インクルードがうまくいかないことが多い。
WDKは最近出たものだから余計そうじゃないかと。

逆にPlatformSDK入れてパス通せばうまくいくんじゃないかと。
すでに動いているだろうから余計なことする必要は無いけどね。
595デフォルトの名無しさん:2008/05/26(月) 21:52:05
ドライバから、レジストリって読みに行けますか?
windows.hがインクルード出来なくて、RegOpenKeyEx()が使えないです。
なにかヒントください。
VC6+XPSP1DDKです。
596デフォルトの名無しさん:2008/05/26(月) 22:32:31
RtlQueryRegistryValuesかな?
Windows起動中にロードするドライバだとレジストリの場所によっては読めないところもあるので、
注意してくださいね。
597デフォルトの名無しさん:2008/05/26(月) 22:33:02
Zw系の関数にある

Windows.hはユーザーモードアプリケーション用であって
ドライバのカーネルモードはntddk.hとかになる。
サンプルをインストールしてよく見てみるべし。
598デフォルトの名無しさん:2008/05/26(月) 22:36:20
あ、Rtlか スマソ
599デフォルトの名無しさん:2008/05/28(水) 22:58:32
RAMディスクみたいな仮想ディスクのドライバを作成した場合、
ハードウェアが存在しないのでバスドライバがハードウェアの追加を「検出」することも
ないと思うのですが、実際にはAddDeviceがちゃんと呼び出されるみたいです。
なぜ呼び出されるのでしょうか? MSのサンプルRAMディスクのソースを見ても
特別なことをしているようには見えません。
600デフォルトの名無しさん:2008/05/29(木) 20:27:50
>>596-598
RtlQueryRegistryValuesで読めました。
引数悩んだけど、なんとかなりました。
thx
601デフォルトの名無しさん:2008/05/30(金) 22:14:07
>599
.inf(inx)
602デフォルトの名無しさん:2008/05/31(土) 09:38:22
まず、カーネルモードドライバといっても実際にはサービスのようなものがある
デバイスマネージャで非表示デバイスの表示をやると出てくるやつがそれだ。

そこに登録されているものは、すべてのデバイスの列挙が終わってから
DriverEntryが呼ばれる。

DriverEntryでの処理が適切であれば、AddDeviceがすぐに呼ばれるはず
AddDevice内で正式に処理を行う。

で、普通のドライバかカーネルモードサービス(という表現を他のところで見たが
これの正式な言い方は知らない)をどこで区別してるかというと
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
が本体のエントリポイント。

だから手順を知っていればInfすらいらないはず
まあ、Inf使ったほうが確実だとは思うけどね。
603デフォルトの名無しさん:2008/06/02(月) 10:54:45
>>601-602
トンクス。(599じゃないけど

自分で追ってみたんだけど、Servicesセクションの、AddServicesディレクティブで指定したセクション内で、
 StartType = 3 ; SERVICE_DEMAND_START, bulkusbの場合…PnPで検出する場合はこちら
と指定するか、
 StartType = 0 ; SERVICE_BOOT_START, ramdiskの場合…OS起動時に必要なデバイスはこちら
の違いだと、思ってるんですが、、あってます?

あとお聴きしたいんですが、
ramdisk(StartType=0?)の場合、AddDeviceに渡されるPDOって何なんでしょうか?
他のデバイスの場合は、バスドライバが作成した何かだと思うんですが…

604603:2008/06/03(火) 00:13:00
StartTypeはなんか違いますね。
modelsセクションのhw-id, ramdiskサンプルでいうと以下のRamdiskのところ(普通のバスならベンダIDやプロダクトIDが入る)に、
テキトーなIDを書いておけば、デバイスの有無に関わらず、AddDeviceが呼ばれるようになるのかな?

[Manufacturer]
%MSFT% = DiskDevice,NTx86

; For Win2K
[DiskDevice]
%DiskDevDesc% = DiskInstall, Ramdisk

; For XP and later
[DiskDevice.NTx86]
%DiskDevDesc% = DiskInstall, Ramdisk

このhw-idは、PnPデバイスならデバイスが接続されたときのinfファイルの探索に用いられるのか。
605603:2008/06/03(火) 01:14:27
「ハードウェアの追加と削除」でRamdisk (WDF版)をインストールしたところ、
Walter本(15章)でいうHardware (instance) keyが、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\UNKNOWN\0000 として
登録された。
(USBだと HKLM\SYSTEM\CurrentControlSet\Enum\USB 以下にHardware keyが来る。デバイス1つごとに。)

察するに、Ramdiskのような非PnPデバイスは、OSの起動時なりにこのEnum\Root以下のキーがすべて対応するドライバにPDOとしてAddDeviceされるんかな?
ご意見かポインタきぼんぬ。

606603:2008/06/03(火) 01:34:37
walter本の2章に書いてあるわ…<root bus。
ちゃんと読まなきゃダメだな。スレ汚しスマソ
607デフォルトの名無しさん:2008/06/05(木) 17:31:44
WinDBGの使い方について教えてください。

プリンタドライバ開発を始めようというところで、ソースコードデバッグがしたいのですが、
ブレークポイントの設定ができずに悩んでます。

1.サンプルをServer 2003 Checked x86 でビルドし、インストール・実行はできた。
2.そこでできた.pdbと.dllとソース類をまとめて解析用マシンにコピーし、Symbol Path、SrcPath, Image Pathに追加。
3.src*c:\test*http://msdl.microsoft.com/download/symbolsとやって、何やらダウンロードはできている模様。

4.解析用マシンからBreakし、F9などでブレークポイントを入れても、その行の色が変わらない。
5.Edit - BreakPointダイアログを見てみると、ブレークポイントが追加されているみたいだが、
     「0 eu      0001 (0001) .....」となっており、「unresolved」らしい。

C.印刷実行中にメッセージボックスを出し、そこで解析用マシンからBreak。
D.Step実行をすると、アセンブラが表示されて1行ずつ実行されているような雰囲気。


どうもシンボルが読み込めていない気がするのですが、どうすれば良いでしょうか?
608デフォルトの名無しさん:2008/06/05(木) 22:36:09
>>607
4の時点でだめだね
使ってるモジュールがリリース版になってるなどして
ロードしてるモジュールとシンボルが一致して無い。

ロードしてからコンパイルしなおしてるとか
ちゃんとファイルがコピーされているから
日付、サイズをちゃんと確認すべし。
609デフォルトの名無しさん:2008/06/06(金) 06:14:49
src*
610デフォルトの名無しさん:2008/06/06(金) 10:20:16
>>608
レスありがとうございます!

1.実行用マシンの Server 2003 Checked x86 でリビルドし、プリンタインストール。
2.すぐに解析用マシンにソースとpdbファイルなどをコピー。
3.実行用マシン再起動

としてみましたが、結果変わりませんでした。
何か基本的な手順を抜かしていたりしませんか?

あと基本的な質問なのですが、
実行用マシンで印刷が実行されると、それに必要なモジュールが解析用マシンにロードされるのでしょうか?
そしてモジュールがロードされた後に、pdbなどのシンボルを探してロードするのですか?


>>609
すみません、タイプミスでした。
実際は srv にしていたので、そこは大丈夫かと思います。
611デフォルトの名無しさん:2008/06/07(土) 00:46:11
ああ、ごめん、プリンタドライバってユーザーモードで動いてるっぽいね
(DLLって言われた時点で気がつくべきだった)
カーネルデバッグできるのはカーネルモードだけだった気がする

だから、VisualStudioか、WinDbgで、起動してるプロセスにアタッチするように
するしか無いんじゃないかな
612デフォルトの名無しさん:2008/06/07(土) 09:53:37
じゃあ根本的に違うことやってたんですね・・・orz
プロセスにアタッチって1台のマシンでやるわけですか?
613デフォルトの名無しさん:2008/06/07(土) 16:58:49
デバッガから印刷しなければ1台で問題なし
614デフォルトの名無しさん:2008/06/08(日) 12:05:37
デバイスドライバインストール時に、EXEを実行したいんだけど、
INFファイルから起動かけるのって無理かな?
逆に、EXEからINF実行って仕組みが一般的?
615デフォルトの名無しさん:2008/06/08(日) 14:27:19
>>612
デバッグするマシンにWinDbgいれれば1台でできるし
開発マシンから見たければ、リモート設定すればできる。

ただ、どっちにしろ、パスだのログインだのアクセス権だの
結構めんどくさい&ひっかかるので注意。

>>614
ExeからInfならSetupDi系関数なら簡単じゃなかったかな
ドライバインストール時に呼ばれる個別設定はCoInstallerDLLだったような・・・

616デフォルトの名無しさん:2008/06/09(月) 00:42:13
>>613
デバッガから印刷しなければ1台で問題なし

そもそもWinDbg自体から「プリント」はできないはずでは?
WinDbgを入れて、スプーラにアタッチして
それから、メモ帳などを開いて、印刷実行

これでマシンは1台でOKですよね?

ブレークポイントがうまくつけられない orz
617610:2008/06/09(月) 13:33:11
レスしてくれた方ありがとうございました!

プロセスにアタッチして、とうとうデバッグができました・・・(;*´∀`*)
「ファイルに出力」ってのを選ぶとプリントプロセッサが動かないらしく、
何もつながってないポートを選んで印刷したらブレークポイント設定できました。

VisualStudioでもデバッグできたので、ビルドもできれば楽になりそう・・・
618デフォルトの名無しさん:2008/06/12(木) 20:52:15
プリンタドライバのCOREソースコード中に
CreateFile(filename〜)を指定して、ファイルを作り出そうとしているんですが
うまくいきません 無論fpt=fopen("log.txt","w") などしても
無駄です。
OUTPUTとしては「印刷物(中間ファイル)」と「コード中に外部ファイルに
書き込んだファイル」
を考えているのですが、、、、ドライブのソースコード中に何を
書いたら外部ファイルをつくりだすこともできるんでしょうか?

要するにコンソールでいえば、fopenして外部ファイルに書き込んで
チェックする作業をドライバでもやりたいのです。
619デフォルトの名無しさん:2008/06/12(木) 23:16:25
>>618
コンパイルエラーとかはないの?
デバッグでステップ実行してみたら?

俺は印刷データをビットマップファイルに保存するのに成功してるから、
普通のログファイル作成も問題ないはず。
620sage:2008/06/12(木) 23:27:10
MIDIストリームについて教えてください。

AVStreamのMiniDriverとしてUSBAudioドライバを作っているのですが、
MIDIのストリーム転送機能で、KS(KernelStream)から送られてくる
MIDIデータに不明なデータがあります。

KSから送られてくるMIDIデータは、

不明データ(4バイト)+MIDIメッセージ長(4バイト)+MIDIメッセージ(可変長)

の形式で繰り返し送られてきます。

不明データと書いた最初の4バイトが何を指すものか
知っている方がいたら教えてください。

USBAudioドライバからデバイスには、USBMIDIフォーマットで
転送するため、MIDIメッセージ以外のデータを送る事はないのですが、
制御かなにかで必要となるデータなのでしょうか?

宜しくお願いします。
621デフォルトの名無しさん:2008/06/12(木) 23:39:29
>>620
sageさん、思いっきりAGEてるんですけど><
622デフォルトの名無しさん:2008/06/13(金) 17:26:45
老師!
WDKをVSに統合したいんですけどどうすればいいんですか?
アプリみたいにVS上でIDEを使って開発したいんです。
WDK: Server 2008
VS: VS2008Pro
623デフォルトの名無しさん:2008/06/14(土) 01:46:17
>>618
APIつかってエラー出たならGetLastErrorが基本。

>>620
KS系はPinで定義してあるデータを送るものだから
Pinの定義を調べてみては?

>>622
ddkbuild.cmd
624デフォルトの名無しさん:2008/06/14(土) 13:49:08
>>623
老師、感謝
今からGoogle先生を訪問します
625デフォルトの名無しさん:2008/06/14(土) 19:19:24
>>623
ありがとうございます。
PINの定義としては、
DataRange.MajorFormat = STATICGUIDOF(KSDATAFORMAT_TYPE_MUSIC);
DataRange.SubFormat = STATICGUIDOF(KSDATAFORMAT_SUBTYPE_MIDI);
DataRange.Specifier = STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE);
Technology = STATICGUIDOF(KSMUSIC_TECHNOLOGY_PORT);
を設定しています。
WDKドキュメントで、KSから送られるMIDIデータのフォーマットを
探しているのですが、見つけられないでいます。
626デフォルトの名無しさん:2008/06/14(土) 20:52:39
むむ
タイムスタンプぢゃないのかしらん
627デフォルトの名無しさん:2008/06/14(土) 23:20:24
>>623
定石をありがとう。感謝します。

CreateFile関数はどうやらプリンタドライバ中では使えない様
なんですが、、ZwCreateFileという関数があるのですが
それならプリンタドライバ中でも使えるのか今確認していますが
何か情報をお持ちの方は情報をお願いします。

最悪、スプーラに書き込みを行えばWinDbgなしでもDebug作業が
できることはわかりました。
628デフォルトの名無しさん:2008/06/15(日) 10:35:18
>>627
ちょっと聞きたいんだが、仕事でプリンタドライバ作ってるの?

お遊びなら、色々試行錯誤して楽しむのもいいけど、お仕事ならきちんと基礎を身に付けてから
でないと、ユーザーに大きな迷惑をかけることになるよ。
周りにドライバを作り慣れた先輩とかいないの?
629デフォルトの名無しさん:2008/06/15(日) 10:54:56
>>627ではないが、ドライバのことを知ってる先輩はいない職場で、
勉強しつつがんばってくれ、みたいな感じで始まった。
仕事はいろいろともらっている2年生。

嫌ではないが、進んでやりたくはないという状況だなー。
だって全然わからんのだよ・・・orz


>>627
ソースがいま手元になくて分からんけど、
CreateFileWって関数かも?
Unicodeじゃないとだめって制限があるらしいので。
630デフォルトの名無しさん:2008/06/15(日) 15:15:31
余計なお世話かも知れんが・・・

>>627の書き込みからカーネルモードのドライバを作っていると想像するが、「ユーザーモードのアプリや
サービスから使用できる関数と、カーネルモードのドライバから使用できる関数は全くの別物」とうことは
デバイスドライバを作る上で一番最初に知るべき基礎の基礎ですよね。
CreateFileWもユーザーモード用のWindowsAPIです。
基礎を知らずに作るととりあえず自分のパソコンでは動いても他の環境では動かない物が出来上がる、
というのはアプリでもドライバでも同じだけど、ドライバの場合はたいていOSもろとも落ちるからねえ。

周りに聞ける人がいないなら、書籍ですかね。
お奨めは、
http://www.ascii.co.jp/books/books/detail/4-7561-3913-2.shtml
これで難しいと感じるなら、その前の入門書として
http://seshop.com/detail.asp?pid=1005
ですかね。(どちらも古い本だから、今はもっといいのがあるかも)
後は、自分の担当するデバイスに一番似通ったDDKサンプルを実際に動かしてみる(必要なら対象機器を
勉強用に会社に買ってもらう)のが良いんでは。

ドライバもだんだんユーザーモードで作れるようになってきてるみたいだけどね・・・
631デフォルトの名無しさん:2008/06/15(日) 15:37:49
いや、プリンタドライバだからユーザーモードだろう
>>611にも書いてるけど
632デフォルトの名無しさん:2008/06/15(日) 16:31:30
ドライバって個別に常識があるから、一般的な話って本当にごく基礎的な話しかできなくて
そういうのは定番の本で足りちゃうんだよね。

で、ドライバに関してはさらに特殊でカーネルモードですらないっていう
これはMSDN、ぐぐる、サンプルソース見るしかない。

ユーザーモードについては一般的なプログラミング知識があればできると思うけど
GetLastErrorを試してないあたりに、その知識も少ないと感じる。

セキュリティ的な面でユーザーモードといえども使えない関数があるかもしれないから
最低でもGetLastErrorで調べてみろってことなんだが。

とにかくがんばれとしか言いようが無いな。
633デフォルトの名無しさん:2008/06/18(水) 19:16:34
WINUSBを使うDLLをX86とx64向けに両刀で書いてるんですが、
86用には普通にビルドできるんですが、64用にビルドすると
外部参照エラーになってしまいます。WinUsb_Initialize()とかの
関数が軒並みアウトです。

普通にリンカーの餌に、SDKのLib/x64ディレクトリにあるsetupapi.lib
を与えてるんですけど。WINSUB.libなんてのも有りそうで無いみたいだし。

だれかわかる人がいたら教えてください。
環境はVC++2008 / Microsoft SDKs v 6.0A / WinDDK 6000です。
634デフォルトの名無しさん:2008/06/18(水) 19:19:55
WINSUB 誤
WINUSB 正
635デフォルトの名無しさん:2008/06/19(木) 09:47:14
>>633
どこを見てるんだ?
普通に DDK の lib 探したら winusb.lib が見つかるわけだが。
winusb.dll 使ううえにダイナミックリンクじゃないんだから lib ファイルがあるに決まってるだろ。
636デフォルトの名無しさん:2008/06/19(木) 15:04:48
>>635
そんなに怒らないで。
>>633の彼はドライバ開発したのとがないんだ。
だから、winusb.libも普通にVC2008やPSDKにあると思っている。
さすがに、setupapi.libを与えたには、ぽかーーーんとした
637デフォルトの名無しさん:2008/06/19(木) 22:12:08
あの、先生方、WDKににmfc42ってlibやincがあるんですけど
これ、ひょっとしてWDKでMFC4.2アプリ開発できるってことですか?

あと、先生方はWDKをVSに統合して、IDE上でドライバプログラム書いているんですか?
638デフォルトの名無しさん:2008/06/19(木) 22:51:17
それはコントロールパネルアプレットとかのドライバ付属の小物を開発するために
付いているのだとMSの中の人がどこかのMLで言ってた
639デフォルトの名無しさん:2008/06/19(木) 22:56:49
俺の場合はVSと統合なんて無駄だな。使い慣れたgvimがあればいい。
640デフォルトの名無しさん:2008/06/19(木) 23:06:08
>>633
それってドライバの話じゃなくてさ
ターゲット環境が変わったら、ライブラリも変えろって話でしょ?
そこらへんはC言語の基礎的な話なので、
どっかでちゃんと理解しといたほうがいいんじゃない?

>>637
できると思うよ。ただ、本来の機能全部入っているかはわからない。
Ioctlなどでドライバを操作したいユーザーモードアプリケーションを作ろうとした場合のためにあると思われる。
カーネルモードのヘッダと一緒にすると不具合が出る部分を出ないようにしたりしてるんじゃないかね
と、嘘かもしれないことを言ってみる。

開発環境は人による。秀丸にこだわってる人も居るだろうし、人それぞれ。
641デフォルトの名無しさん:2008/06/20(金) 00:20:08
>>638-640 先生方すばやいレスありがとうございます。

自分が使っているVC2005expressでMFC使えないから、ひょっとしたら
WDKと連動してやるとMFCアプリのコンパイル(他人のソースを)できるようになるのかなと
思ったんです。小物のcplを作る程度の物しかそろってないですかね。あと、PrefastもVC2005express
で使えたら良いなと思ったり...

自分みたいなへたれですと、インテリセンスないとどうしようもない
何のtypedefなのか、構造体のメンバなんかがさっぱりなんでIDE必須なんですよね
で、WDKインストールしてもVSに統合されないから、他の人は自分で統合してるのかな
と思ったしだいです。ドライバー職人ぐらいになると、インテリセンス鬱陶しいし、
使い慣れたエディタの方がVSでやるより良いとなるんですか!
642デフォルトの名無しさん:2008/06/20(金) 00:43:40
>>641
適当なプロジェクトを作って、ソースファイルを登録して
ヘッダーへのパスを通せば、インテリセンスも使える
エディタとしてならIDE使えるよ。

buildは、それぞれのコマンドプロンプトからだけど。
643デフォルトの名無しさん:2008/06/20(金) 02:04:37
適切なコンパイル・リンクオプション渡してやればIDEでもできるだろ
644デフォルトの名無しさん:2008/06/20(金) 05:53:31
エディタとビルドにしか使わないのにIDEと呼ぶのは抵抗がある。
645デフォルトの名無しさん:2008/06/20(金) 21:28:28
おまんことおっぱいしか使わないのにデリヘルと呼ぶのは抵抗がある。
646デフォルトの名無しさん:2008/06/20(金) 23:57:36
>>620
解決したのかな?たぶんKSMUSICFORMAT::TimeDeltaMsだよ。
647デフォルトの名無しさん:2008/06/22(日) 23:44:13
staticdv使ってる?出てからずいぶん経つけど日本語の記事って無いもんだね
648デフォルトの名無しさん:2008/06/23(月) 22:04:46
GDIINFO構造体で「余白」を制御できると聞いたのですが
どのメンバで制御すればよいのでしょうか?。
それらしきものが見当たらないのですが・・。ちなみにプリンタドライバの
開発になります。
649デフォルトの名無しさん:2008/06/23(月) 22:29:36
プリンタドライバはやってんのか
650デフォルトの名無しさん:2008/06/24(火) 21:11:28
最近某企業が求人広告出しまくってたから
その影響では?

651デフォルトの名無しさん:2008/06/29(日) 18:34:56
自分のくっついているデバイスのデバイス名とかデバイスIDなどを知る方法ってあるのでしょうか?
652デフォルトの名無しさん:2008/06/30(月) 09:45:27
Descriptor解析しろ。
653デフォルトの名無しさん:2008/06/30(月) 12:00:23
>>651
「自分のくっついているデバイス」? 自分をEnumerateしたバスドライバのこと?
「デバイスID」? デバイスインスタンスIDのこと?

質問の意味不明。エスパー登場求む!
654デフォルトの名無しさん:2008/06/30(月) 13:37:39
Windowsなら、デバイスマネージャから見れるんじゃね?
655デフォルトの名無しさん:2008/06/30(月) 18:29:31
656651:2008/06/30(月) 21:48:59
わかりづらくてすみません。
例えば、Microsoft ACPI-COmpliant Embedded Controllerをデバイスマネージャのプロパティで見ると、
(少なくとも私の環境はですが)「一致するデバイスID」は*pnp0c09となっています。
これをドライバ内部から調べる方法がないかなと探しています。

もちろんコード中に文字列として"*pnp0c09"を持っていれば良い話なのですが、
そうではなくて、APIなどで、自分がフィルタドライバとしてくっついているデバイスの
「一致するデバイスID」やその他、プロパティの詳細タブで見れるような情報を
取得するような方法をご存知ないでしょうか?
657デフォルトの名無しさん:2008/06/30(月) 22:03:20
>>656
IoGetDeviceProperty()や
IoOpenDeviceRegistryKey()からレジストリ読み取りで揃うんじゃね?
658デフォルトの名無しさん:2008/07/05(土) 00:14:18
ユーザーモードのプリンタドライバをデバッグしようとしていますが
WinDbgは使えないのでしょうか?。
そもそもWinDbgはカーネルモードの(プリンタ)ドライバですよね?。
ご意見お願いします。
659デフォルトの名無しさん:2008/07/05(土) 08:55:53
>>650
某企業ってどこ?
そこのプリンタは買わな・・・・(以下自粛)
660デフォルトの名無しさん:2008/07/05(土) 10:03:32
キャノンだよ こないだあんあんからスカウトメールきた無視したけど
661デフォルトの名無しさん:2008/07/05(土) 13:33:54
観音なら...当然超優秀な正社員がたくさんいるだろうから、ここで聞くよりそいつらにでも聞けば良いのにな。
662デフォルトの名無しさん:2008/07/07(月) 09:46:04
なんだかんだいってもソフト部分は外注多いよ。
663デフォルトの名無しさん:2008/07/09(水) 12:20:12
キャノソくらいだとハードも外注だと思ってた
664デフォルトの名無しさん:2008/07/16(水) 12:39:52
WinDriverって使い勝手いいですか?
665デフォルトの名無しさん:2008/07/28(月) 00:39:17
オマンコ臭いスイーツは開発すんなよ
666デフォルトの名無しさん:2008/08/12(火) 22:58:01
PS2マウス(だけ)に連射機能とかつけようと思い、
フィルタドライバのっけて座標やボタンの状態を取得できるところまできたんですが、
連射させるところで行き詰まってしまいました。

ボタンを押したら Read が発生するんですが、次に離すまでRead がこないので
ボタン状態を変更しようにもできません。
なんとかしてボタンを押したことにしたり離したりしたことにできないでしょうか?

できるものなら何かヒントをお願いします。
667デフォルトの名無しさん:2008/08/12(火) 23:18:07
>>666
フィルタかけるところが違うんじゃないか?
668666:2008/08/13(水) 12:29:51
そんな気がしてきました
そこらへん調べてみます
ありがとうございました
669デフォルトの名無しさん:2008/08/14(木) 03:07:29
>>666
もしかしてIRP_MJ_READにデバッグ出力を入れただけだとしたら
下位のドライバがpendingにしてるから次のreadが来ないのでは。
670デフォルトの名無しさん:2008/08/19(火) 20:26:36
>>669
どうもです。恥ずかしながら私がアタッチしてたのはリモートデスクトップ用の
マウスクラス(?)のようで、ACPI のほうにアタッチしたら今度はREADそのものが
こない状況になりました。

DDK サンプルの mouclass やら moufiltr を見ると根本的に間違っていた気がします。
とは言え、moufiltr は USB マウスにアタッチしても Read 処理ではなく
MouFiltr_ServiceCallback() で処理するようになっていますが、GPAF のソースを
見ると(ゲームパッドとは言え)、Read で Hid 処理をしてたりするのでゲームパッドと
マウスの構造は同じ Hid でも違うのかなぁ、なんて思ったり。

結局、PS/2やUSBの選択、どの上位フィルタとして作るのが良いのかわからない状況に
なってしまいました。
今は本買って基礎からお勉強中です。フィルタドライバにまで関して言及してある
書籍って少ないですねぇ。
671デフォルトの名無しさん:2008/08/20(水) 10:33:44
>>670
ボタンに連射を付けるだけなら普通にmoufiltrで十分だとは思うけど。

連射発行タイミングをチェックするスレッドで
必要に応じてServiceCallback風の動作をすることと、
次の要求が来たときに下位ドライバにコマンドを発行せずに
スルー処理を追加する必要があるはず。
672デフォルトの名無しさん:2008/08/20(水) 23:01:18
>>671
どうもです。その ServiceCallback 風の動作をするというのがなかなか敷居が高そうで・・・
海外掲示板とか覗いていたら
「WRITE 時に mouclass の ServiceCallback をコールしたらBSOD になったけどどうすれば良い?」
みたいな内容のスレッドがあって結局未解決のようでした。
とりあえず、そのせんで行ってみて色々試して見ます。
673672:2008/08/21(木) 22:26:24
KTimer と KDPC 使って ServiceCallback 呼び出したら難なくいけました。
ありがとうございました。

ところでフィルタドライバは動的にアンロードできないと聞いたんですがXP や VISTAでも無理なんでしょうか?
SCManager 使ってドライバを停止および削除して、SetupDIでフィルタ対象デバイスを再起動させると
フィルタはされなくなるんですが、ドライバそのものはアンロード処理されずにロードされっぱなしになってるようで…
単なるつくりの問題ですか?
674デフォルトの名無しさん:2008/08/22(金) 02:13:24
ん?
普通にデバイスいなくなったら元ドライバとセットでアンロードされると思うんだけど。
それでアンロードされてない、ってことは終了処理にミスがあるんじゃね?
スレッド終了うまくいってないとか。
675673:2008/08/22(金) 23:21:10
そうなんですか。。。
もっと調べてみます。どもでした。
676デフォルトの名無しさん:2008/08/23(土) 08:42:14
>>673-674
フィルタドライバがWDMならデバイスを抜くとフィルタドライバも開放されるんだけど
私がHIDでやったときは、WDMだとうまくいかなかったのでNTドライバにしました。
そうするとデバイスを抜いただけではアンロードされないですが、SetupDI系の関数で
アンロードさせることはできます。
677デフォルトの名無しさん:2008/08/23(土) 09:17:20
自分もWDMのフィルタドライバではまってる。
USBデバイスのフィルタドライバを書き、そのデバイスに対し
SetupDiSetClassInstallParamsでDIF_PROPERTYCHANGE/DICS_PROPCHANGE指定して
SetupDiCallClassInstallerを呼び出しいる。

で、無視できない確率でドライバアンロードに失敗する。
自前ドライバの処理でIRP_MN_QUERY_REMOVE_DEVICEに対し
STATUS_SUCCESSを持たせて下位ドライバを呼び出しているのに、
IRP_MN_CANCEL_REMOVE_DEVICEが飛んでくる。

これって、下位ドライバがリムーブを拒否してるんだと思うが
何が原因かわからん。

何か思いつく事があったら教えてください、皆の衆。
678デフォルトの名無しさん:2008/08/23(土) 21:22:52
>>676
ありがとうございます。
アンロードされずに残ったドライバを、DriverWalker などでアンロードさせようとしても失敗しちゃうんですよね。
何か解放してないんでしょうねorz
679デフォルトの名無しさん:2008/08/24(日) 17:21:54
Lowerに要求を投げるだけのなにもしないフィルタドライバ書いて
動きを見てみればいいんでない?
680デフォルトの名無しさん:2008/08/25(月) 23:32:13
WinRing0という,CrystalCPUIDの作者で有名な(?)ひよひよさんのドライバらしいのですが
これでCPUのクロック数を変化させることってできますか?

WinRing0
ttp://openlibsys.org/index-ja.html
681デフォルトの名無しさん:2008/08/25(月) 23:38:07
作者に聞け
682まつせ:2008/08/25(月) 23:49:32
ありがとうございましたm(_ _)m
683デフォルトの名無しさん:2008/08/26(火) 21:59:10
WinDbgの1394接続のカーネルデバッグについて質問です。
Host:Vista or XP、Target:Vistaの構成で1394接続って可能ですかね?
手順通りにやってもうまくいきません。
684デフォルトの名無しさん:2008/08/26(火) 22:20:55
>>683
Host XP Target Vistaで普通にできてる。
だが、使っている1394アダプタによっては動かないことがある。
VIAの古いチップではだめだった。

外人でも似たような人はいるが具体的な話はまだ見たことが無い。
ホスト側はTIのチップつんだやつにしとけ ぐらいしか書いてないが
今時はTIのチップ積んでることなんてあまりないので難しいかも。
手順に問題が無いのであれば
とりあえずホスト側の1394の交換をしてみることをオススメする。

685693:2008/08/27(水) 22:37:11
>>684
ケーブルを疑って新しいケーブルに交換したらうまく動きました。
別のマシンでは動いていたんで、まさかとは思ったんですが・・・

Vistaは1394ネットアダプタがないんで通信できてるのかよくわかんないですね。
ともかくありがとうございました。
686デフォルトの名無しさん:2008/08/28(木) 23:17:50
質問させてください。

C言語は多少経験ありますが、ドライバ開発はまったくないので手探り状態で勉強してます。
ディスプレイ関連の操作をしたいのでサンプルソースのvideo\displays\mirror\miniを参考に
下記コードにてビルドをしようとしたのですが、DriverEntryの定義エラーがでました。
そこでntddk.hをインクルードしてみたのですが、今度はminiport.hで再定義エラー(C2011)が出てしまいます。
インクルードする順番など変えてみたのですがエラーが出まくりの状態です。

#include "dderror.h"
#include "devioctl.h"
#include "miniport.h"
#include "ntddvdeo.h"
#include "video.h"

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{
NTSTATUS ntStatus = STATUS_SUCCESS;

return ntStatus;
}


付属のサンプル等は問題なくビルドできています。

どうすればビルドできるか教えていただけないでしょうか。
よろしくお願いします。

環境:WDK6001.18001 Windows XP x86 Checked Build
   Windows XP SP2
687デフォルトの名無しさん:2008/08/28(木) 23:22:39
同じ環境だが、普通に何もせず build できたが?
688686:2008/08/28(木) 23:27:46
>>687
まじですか・・・
ntddk.hインクルードしない下記のようなエラーが出てしまいます
c:\winddk\test\main.c(31) : error C2061: syntax error : identifier 'DriverEntry'
c:\winddk\test\main.c(31) : error C2059: syntax error : ';'
c:\winddk\test\main.c(31) : error C2146: syntax error : missing ')' before identifier 'pDriverObject'
c:\winddk\test\main.c(31) : error C2061: syntax error : identifier 'pDriverObject'
c:\winddk\test\main.c(31) : error C2059: syntax error : ','
c:\winddk\test\main.c(31) : error C2059: syntax error : ')'

ntddk.hインクルードすると上のエラーはなくなりますが代わりに再定義エラーが100個以上・・・
VS.NET2003インストールしてあるのは関係ないですよね・・・?
689デフォルトの名無しさん:2008/08/28(木) 23:27:51
video\displays\mirror\ で build してエラーでるとか言ってないだろうな
690デフォルトの名無しさん:2008/08/28(木) 23:29:47
って、ごめん、自分で作ったやつか。
SOURCE とか makefile はちゃんとコピーした?
691686:2008/08/28(木) 23:30:26
>>689
フォルダ別に作ってMAKEFILEとSOURCESをコピーして
SORCESの"TARGETNAME"と"SOURCES"だけ編集してビルドしてます。
692デフォルトの名無しさん:2008/08/28(木) 23:42:52
とりあえず、

#include <wdm.h>
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) 

NTSTATUS ntStatus = STATUS_SUCCESS; 

return ntStatus; 


だとどうよ?
693686:2008/08/28(木) 23:46:16
>>692
レスどうもです
これだと問題なくビルドできます
video.hをインクルードすると無理ですが・・・
694デフォルトの名無しさん:2008/08/29(金) 00:03:06
サンプルのほう見ると PDRIVER_OBJECT ではなく PVOID で宣言してるね。
video.h とか使う場合は wdm.h とかの include 無理なんかな。
695686:2008/08/29(金) 00:08:35
>>694
そうなんですよね
サンプルのようにDriverEntryの戻り値型と引数型を変更すると
ビルドできるんですが、DriverEntryってどこ調べてもNTSTATUSと
PDRIVER_OBJECT、PUNICODE_STRINGで定義されてるので・・・
696デフォルトの名無しさん:2008/08/29(金) 01:47:15
WindowsのMiniportドライバはWDMではない。
これはドライバ開発をする人が誰もがはまる。

WDMドライバを開発=フィルタドライバorクラスドライバ
だが、ある程度共通化できるルーチンが多い場合に備えて
クラスドライバをMSが用意し、そこからリクエストをするのがminiportドライバ
miniportでは専用のライブラリ関数が用意されていて
それら以外の関数は使ってはいけない。

したがってntddk.hをインクルードできないし、してはいけないし
MSは共存させるつもりもない。

それでも無理やりやるのは完全にハックになり
サービスパックやパッチが当たっただけで動かなくなる可能性がある。

697デフォルトの名無しさん:2008/08/29(金) 21:07:59
SCSIミニポートドライバなんてカーネルがロードされる前に呼び出される可能性すらある
698デフォルトの名無しさん:2008/08/29(金) 22:32:28
それはSCSIミニポートだからではなくレジストリの設定で決まる。
ServicesレジストリのStartキーが0ならブートローダーのときに呼ばれる。
起動ディスクを読み込むのに必要なデバイスのStartキーはすべて0になっていないと0x7Bが出る。

OSインストール時にIDEデバイスとか登録されてはいるが
カーネルメモリ節約のために必要の無いデバイスはStartが4になっている。
そのためディスクを付け替えたりすると起動しないことがある。
699デフォルトの名無しさん:2008/08/30(土) 08:39:30
質問があります。

minispy、filespyサンプルの処理内容を理解するのに役立つ書籍や入門サイトがあったら教えていただきたいです

目的は、ファイルの上書きやコピーなど高レベルなファイルI/O監視ドライバを作成することです(フックではなくドライバで行いたいです)

サンプルでは低レベルなIO情報まで監視されてしまうため、これを改造できないかなと考えてます

自分は、ドライバ開発経験はなしです。キーボードのフィルタドライバサンプルは、日本語の書籍で勉強し、軽くは理解しています。

…ソースコードが少ないminispyを理解したいんですが、ミニドライバの資料ってあまりみたことないです
700デフォルトの名無しさん:2008/08/30(土) 13:00:02
>>699
違ったらよいんだが、

Windows XP フィルタドライバプログラミング [入門と実践]

を読んで「軽くは理解しています。」と思っているなら認識改めたほうがいい。
あれで得た知識(見たサンプル)は全く役にたたない。
701デフォルトの名無しさん:2008/08/30(土) 16:18:14
>699
素朴な疑問だが上書きやコピーといった監視だったら、ドライバつかわんでも
FindFirstChangeNotification()という手もある。
これじゃあなんかまずい理由あるの?
702デフォルトの名無しさん:2008/08/30(土) 19:59:59
>>700
フィルタドライバプログラミングではないです。それは参考にしてないです。

API徹底理解っていうムックと。Cマガのバックナンバーです。

「ダミー関数はこんな感じで作って」、「でもPnPのダミー関数は別」ってことくらいしか理解してないです。

filespyを見ても、「なんでこのファンクションを監視するんだ?」って疑問しかわかないんです。かと言って、USBドライバを最終目標にしてる書籍はfilespyの世界とは畑違いな気がして


>>701
あのAPIの詳細は知らないんですが、ファイルを操作したユーザー名やアプリケーション名が取得できるならやってみたいです。

ただ、ローカルだけでなく、リムーバブルやサーバーやネットワークPCも監視が条件なので
703デフォルトの名無しさん:2008/08/30(土) 21:43:59
ファイルシステムの監視ならminifilterでフィルタドライバ書けばいいよ
ローカルならPIDが入ってくるからそこからユーザートークンに変換すればいい

でもネットワークドライブはまた別の話になるよ
リモートのPIDなんか分かってもしょうがないしね
そもそもSMBのリダイレクタのPIDしか入ってこないだろうし
704デフォルトの名無しさん:2008/08/31(日) 00:32:13
というか、ファイルを開くとか、そこから読むとか、書くとかは判るけど、

それが上書きなのかコピーなのかというような意図?は、カーネルレベルでは
失われているような気がするんだけど。
705デフォルトの名無しさん:2008/08/31(日) 01:03:30
ソースと関数リファレンス見ても分からんって事はOSの知識が足りないんじゃねーのか?
まずはWindows Internals(和訳名インサイドWindows?)読んでみたらどうだ。
706デフォルトの名無しさん:2008/08/31(日) 07:19:19
>>704
フィルタドライバで分かるのは削除と同じボリューム内の移動だけだね
というかやりたいこと具体的に言わんと
707702:2008/08/31(日) 10:10:41
>>703
minifilterで作っていきたいと思います。ネットワークからリモートログインしてきたユーザーの監視はしません。自分がリモートで操作したファイルは監視します。

>>705
ドライバ系のAPI知識はゼロに近くて、ファイルシステムのフの字も知らないです。インサイドウィンドウズの購入してみます。…でも金がないので会社から借ります

>>706
やりたいのは、フックベースで実現できていたファイル監視をドライバに移植することです。

>>704
コピーや上書きは、フックベースでも追いきれないとこがあったんで「ReadFileで処理したアドレスがWriteFileで処理されたらコピー扱い」みたいなマージをしており、ドライバでもマージしようかなと考えてます

長い旅路になりそうです。ありがとうございました
708デフォルトの名無しさん:2008/09/02(火) 01:37:50
WDMのドライバをリモートからデバッグしようと思い、
シリアルクロスケーブルを購入したのですが、
どちらのPCにもシリアルポートがないようなのです。
調べてみたところ、USB シリアル変換機というのを利用すれば、
それを経由してシリアル通信ができそうなのですが、
この変換機はPC1台につき1個、つまり2個必要であると考えて問題
ないでしょうか。
また、クロスケーブルではなく、ストレートのシリアルケーブルでは、
デバッグはできないものなのでしょうか。
709デフォルトの名無しさん:2008/09/02(火) 06:40:14
HOST側はUSB-Serial変換でいいけど、TARGET側では無理。
710デフォルトの名無しさん:2008/09/02(火) 14:19:43
そうでしたか。
つまり、シリアルポートがない場合は、
リモートからのデバッグはできないと。
デバッグといっても、DbgPrintの結果を確認したいだけなので、
ローカルでDebugViewを使う方法でもよいのですが、
リモートの方法も気になるところです。
711デフォルトの名無しさん:2008/09/02(火) 14:59:28
>>708
>また、クロスケーブルではなく、ストレートのシリアルケーブルでは、
>デバッグはできないものなのでしょうか。

時代が変わって、232cなんて使わなくなってきたのは分かるが・・・
712デフォルトの名無しさん:2008/09/02(火) 20:03:23
XPはFireWireとかでも使えなかったっけ?
713デフォルトの名無しさん:2008/09/02(火) 22:29:21
Windows用USBデバイスのインストーラ及びアンインストーラをVCで
作ってます。
汎用性を持たせるためにinf及びdelファイルを書き換えるだけで
インストーラ、アンインストーラは再コンパイル不要とした作りに
したいと思っています。
そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を
抜き出して行うような方式としたいとおもうのですがなにか
方法(Win32 API)は無いでしょうか。

714デフォルトの名無しさん:2008/09/03(水) 00:10:22
インストールアンインストールだけだったらDPINST使えばいいとおもうがどうか。
INFが適切なら実行するだけでインストールしてくれる
あと、DPINSTをAPI化したDIFとかいうやつもある。
715713:2008/09/03(水) 21:16:14
>>714
たしかにINFのみでインストールだけなら可能なのですが、
コマンド等でカスタマイズも考えているので...


で、自ら調べた結果、GetPrivateProfileStringが
INIだけでなくINFにも使えそうなので、これを組み
合わせて作ろうと思うのですが他に何かいいアイディアは
ありますか?
716デフォルトの名無しさん:2008/09/03(水) 22:35:58
いまいち何がしたいのかよくわからんが dpinst を自作したいなら DriverPackageInstall 使う
717713:2008/09/10(水) 13:20:32
GetPrivateProfileString及びGetPrivateProfileStringで
何とかできそうです。
ありがとうございました。
718デフォルトの名無しさん:2008/09/15(月) 22:45:22
DDK サンプルの kbfiltr を x86 VISTA 上で PS/2 キーボードのフィルタドライバとして
インストールしたのですが、なんだかロードされてない感じがします。
(KdPrintなどのデバッグメッセージが表示されない)

起動時に読み込まれるドライバには署名が必須という条件にひっかかかっているのかと思い

Bcdedit.exe /set nointegritychecks ON

を実行してみましたが何も変わりませんでした。
VISTA にインストールするにはどうしたらよいのでしょうか?
ちなみに XP だと問題なく動作しました。
719デフォルトの名無しさん:2008/09/15(月) 23:36:24
>>718
フィルタされてるのでは。
KdPrintExかDbgPrintEx使ってみたらどう?
720デフォルトの名無しさん:2008/09/16(火) 00:28:46
テスト用の署名はしたん?
721デフォルトの名無しさん:2008/09/16(火) 01:03:02
x86はまだ署名はいらんと思うが
722718:2008/09/16(火) 10:32:18
>>719
使用してみましたが、結果変わらずでした。フィルタされてないようです。

>>720
してないです。署名はどのような設定だろうと必要なんでしょうか?
テスト用の署名では公開できないと思うので、公開しようと思ったら
リリース用の署名をとらないと駄目ってことでしょうか?

>>721
http://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign.mspx

では x86 も「ロード時に読み込まれるドライバには埋め込み署名が含まれている必要が
あります」とあります。
723デフォルトの名無しさん:2008/09/16(火) 10:52:05
>>722
公開前提ならテスト署名で動作確認後にリリース署名確保でいいと思う。
デバイス固有でいいならkbfilter使うよりクラスでHIDミニドライバ作ることも検討した方が楽だろうけど。


http://www.microsoft.com/japan/whdc/winlogo/drvsign/kmcs_walkthrough.mspx

の右からダウンロードできる、

http://download.microsoft.com/download/c/f/6/cf670671-64aa-4eb2-abbf-bb33dc4ac834/KMCS_Walkthrough_jpn.doc

これを見るとそのオプションは製品版VISTAでは存在しないことになってる。
テスト署名であれば

bcdedit.exe /set TESTSIGNING ON

でロードできるようだが。
724718:2008/09/16(火) 22:13:50
>>723
存在しないことになってたんですねorz

テスト署名してみたところ、無事ロードされるようになりました。
でも HD DVD とか Bluray とか再生できなくなるのかな・・・?

みなさん、ありがとうございました。
725デフォルトの名無しさん:2008/09/17(水) 09:26:14
x64じゃダメだろーけど、x86なら自分で署名して、それを信頼する発行元とかに突っ込めばなんとかならんもんかね
726デフォルトの名無しさん:2008/10/04(土) 02:38:08
現在、各ドライブ(C:, D:, ...)のフィルタドライバを作成しています。
そこで、事始めに IoAttachDeviceToDeviceStack で Attach だけして
全 IPR をそのまま下位デバイスへ渡すドライバを作ってみました。

ディスパッチルーチンは、Toaster の filter.c を参考にして、
以下のように記述して、全 IRP_MAJOR_FUNCTION に適用しています。

NTSTATUS dispatch_pass(IN PDEVICE_OBJECT device, IN PIRP irp) {
PDEVICE_EXTENSION ext = NULL;
NTSTATUS status = STATUS_SUCCESS;

PAGED_CODE();

ext = reinterpret_cast<PDEVICE_EXTENSION>(device->DeviceExtension);
status = IoAcquireRemoveLock(&ext->lock, irp);
if (status != STATUS_SUCCESS) { ... }

IoSkipCurrentIrpStackLocation(irp);
status = IoCallDriver(ext->target, irp);
IoReleaseRemoveLock(&ext->lock, irp);
return status;
}

これでテストしたところ IRP_MJ_READ や IRP_MJ_WRITE を受信したときに、
頻繁にブルースクリーンが発生します。ファイルサイズが小さな場合は成功するときもあるのですが・・・

スレッド間での排他処理を記述しなければならないのかなとも思いましたが、単にリクエストを下位デバイスに渡すだけでも
そういった処理は記述する必要なのでしょうか?
727デフォルトの名無しさん:2008/10/05(日) 10:00:09
>>726
その問題のソースをどこかにアップして、ブルースクリーンの内容を全部書けば
すぐ解決するのになんで答えを省くかな
728デフォルトの名無しさん:2008/10/07(火) 08:13:49
フィルタドライバのサンプルminispyで日本語ファイル名が取得でっきん(´・ω・`)

サンプルでは、ドライバ側のFltGetFileInfomationでファイル名取得しとんがやけどその時点てとれるんかな。今日デバッガ準備して確認するけど。暇な人、教えてください(´・ω・`)
729デフォルトの名無しさん:2008/10/09(木) 20:56:20
ウニコードからアンシーに変換してデバッグプリントしたらちゃんと日本語名格納されてました。ごめんなさい(´・ω・`)
730デフォルトの名無しさん:2008/10/12(日) 19:20:53
>>726
ブルースクリーンの内容を書かないと何もいえない。
まずはBSODへの対処の仕方を
MSDNでよく読んで実践してみることをお勧めする。

ただ、フィルタードライバーのR/Wでそういうことが起きているということなら
バッファの取り扱いが適切で無いと推測する。
ファイルシステムの場合、R/Wへのアクセスが3種類ぐらい来るので
それらを適切に扱わないとすぐ問題がでたはず。

>>729
%sではなく%wsとするとちょっといいことがあるかも。
731デフォルトの名無しさん:2008/10/14(火) 08:04:50
>>730
ありがとうございます.指摘の通りバッファの扱いが不適切なのかもしれません.
まず,BSODのメッセージとWinDbgの結果を添付します.
*** STOP: 0x0000008E (0xC0000005, 0x80576D6F, 0xECE8CC14, 0x00000000)

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"
FAULTING_IP:
nt!NtWriteFile+321
80576d6f ff530c call dword ptr [ebx+0Ch]
TRAP_FRAME: ece8cc14 -- (.trap 0xffffffffece8cc14)
ErrCode = 00000000
...
nt!NtWriteFile+0x321:
80576d6f ff530c call dword ptr [ebx+0Ch] ds:0023:0000000c=????????
Resetting default scope

DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0x8E
PROCESS_NAME: explorer.exe
LAST_CONTROL_TRANSFER: from 8051f8ad to 8053580e

STACK_TEXT:
ece8c7dc 8051f8ad 0000008e c0000005 80576d6f nt!KeBugCheckEx+0x1b
ece8cba4 804e1235 ece8cbc0 00000000 ece8cc14 nt!KiDispatchException+0x3b1
ece8cc0c 804e11e6 ece8cd38 80576d6f badb0d00 nt!CommonDispatchException+0x4d
ece8cc3c 80566ba5 00000000 00000023 00000023 nt!KiExceptionExit+0x18a
ece8cd38 804e07ec 00000924 00000000 00000000 nt!ExMapHandleToPointerEx+0x21
ece8cd38 7c94e4f4 00000924 00000000 00000000 nt!KiFastCallEntry+0xf8
046ae084 7c94df6c 7c810e86 00000924 00000000 ntdll!KiFastSystemCallRet
046ae088 7c810e86 00000924 00000000 00000000 ntdll!ZwWriteFile+0xc
046ae0e8 7c8283dc 00000924 04590000 0000b29c kernel32!WriteFile+0xf7
732デフォルトの名無しさん:2008/10/14(火) 08:16:13
続き.以下のようなコードで,フィルタドライバをattachしました.

PDEVICD_OBJECT self;
status = IoCreateDevice(...);

PFILE_OBJECT obj = NULL;
PDEVICE_OBJECT target = NULL;
UNICODE_STRING name;
RtlInitUnicodeString(L"\\Device\\HarddiskVolume1");
NTSTATUS status = IoGetDeviceObjectPointer(name.data(), GENERIC_READ, &obj, &target);

DbgPrint("flag %0x%08x\r\n", target->Flags);

target = IoAttachDeviceToDeviceStack(self, target);
self->Flags |= target->Flags & (DO_BUFFERED_IO | DO_DIRECT_IO);
self->DeviceType = target->DeviceType;
self->Characteristics = target->Characteristics;
if (self->AlignmentRequirement < target->AlignmentRequirement) {
  self->AlignmentRequirement = target->AlignmentRequirement;
}

このとき,Flags の値を確認すると 0x00000000 でした(ちなみに,
self->Flags の値も 0x00000000 でした).
すなわち,DO_BUFFERED_IO でも DO_DIRECT_IO でもない状態となります.
Microsoft WDM プログラミングを読むと,この状態のときは
Irp->UserBuffer にユーザモード仮想アドレスが設定されるらしいのですが,
IRP_MJ_READ が呼ばれたときのディスパッチルーチンで確認すると
Irp->UserBuffer は NULL でした.
Irp->MdlAddress には何らかの値が格納されているようなのですが,
フィルタドライバ内で,ここから Irp->UserBuffer に値を設定するということでしょうか?
733 ◆0uxK91AxII :2008/10/14(火) 08:57:07
とりあえず、FastIoDispatchを埋めてみるとか。
734727:2008/10/14(火) 13:30:12
>>731
733さんが正解。

NtWriteFile内のIoGetRelatedDeviceObject()でトップレベル
(あなたのドライバ)のDriverObjectを手に入れて
DriverObject->DriverObject->FastIoDispath->FastIoWrite()でクラッシュしてる。
ebxがFastIoDispathでこれがNULLだから[ebx+0C]にあたる
FastIoWriteをコールするときにds:0023:0000000Cを参照。
735デフォルトの名無しさん:2008/10/16(木) 08:39:40
>>733,734
本当にありがとうございます.
FastIO 部分をサンプルの filesys\filter\sfilter を参考に修正したところ,
ブルースクリーンが表示されることなく,うまく動作するようになりました.

もう1点だけ質問があります(何度も申し訳ありません).

上記のフィルタドライバは,あるディレクトリを別のディレクトリにリダイレクトする
(C:\xxx -> C:\yyy など)ものを作成しており,リダイレクト部分は以下の URL
を参考に作成しました. http://support.microsoft.com/kb/319447/
この方法を使うと,explorer 上で操作しているときはうまく機能する
(C:\xxx へ移動すると C:\yyy の中のファイルが表示される)のですが,
そこに存在するファイルを別のアプリケーションで開こうとすると,
アプリケーションによってはうまくいきませんでした.

具体的には,.pdf(Acrobat), .jpg(イメージビューア),.wmv(メディアプレイヤー),
.zip(フリーの解凍ソフト(Lhaplus)) はうまく機能しました.

一方で,.txt(メモ帳)とオフィス系(.doc, .xls, .ppt)は,リダイレクト前の
パス(C:\xxx\xxxyyy.doc など)と“ファイルが見つかりません”
のメッセージが表示されうまく行きませんでした.

後者のファイルもうまく開くようにするための良い方法はありますでしょうか?

質問ばかりで申し訳ありません・・・
何か良い方法などがありましたらお願いします
736デフォルトの名無しさん:2008/10/16(木) 10:38:44
x86 の XP/VISTA で makecert でテスト用の証明書を作り、

 signtool sign /v /s my /n testca test.sys

でドライバファイルに埋め込み署名したところ、ファイルのプロパティの
デジタル署名タブでは「問題ありません」になるのに、CreateService()
で登録してデバイスマネージャのドライバの詳細で確認すると
「デジタル署名されていません。」になってしまいます。

これはテスト証明書だからでしょうか?それとも何か手順が漏れているのでしょうか?
737デフォルトの名無しさん:2008/10/16(木) 11:17:10
>>736
テスト証明書だからですね。

テスト証明書を「(あなたが)信頼する発行元」として登録したので、”ファイル”のプロパティーでは「問題ありません」になります。
が、テスト署名の手順ではその証明書(のルートの証明書)へのマイクロソフトのCross-Certificateができないため、
その署名はカーネルモジュールへの署名としては「”マイクロソフトからは”信頼されない証明書による署名」になります。
738 ◆0uxK91AxII :2008/10/16(木) 11:50:44
>>735
redirect先に、ファイルを作る。
739デフォルトの名無しさん:2008/10/16(木) 23:16:23
>>737
ありがとうございます。
ということは正式な証明書をとれば大丈夫そうですね。
しかし、日本で頼むと6万とか9万超とかなんであんなに高いんだろう。
740デフォルトの名無しさん:2008/10/19(日) 18:37:59
ご相談です。
WinXP環境でドライバ設計中に、PAGE_FAULT_IN_NONPAGED_AREA(0x00000050)
という文字を吐くブルースクリーンが頻度は小さいですが出ます。
通常、ドライバの問題であれば、設計中のドライバの名前が表示される
ブルースクリーンが表示されると思うのですが、原因を検討中です。
どういった原因が考えられるか同じような問題に出くわした方がいらしたら
ご教授願います。
ちなみにドライバが画像処理ボード用です。
741 ◆0uxK91AxII :2008/10/19(日) 20:54:36
>>740
失せろ。
742デフォルトの名無しさん:2008/10/19(日) 23:42:27
事情も知らずに失せろは如何なものか
日本に来て勉強しながら頑張ってるのかもしれないぢゃないか
743デフォルトの名無しさん:2008/10/19(日) 23:55:58
たとえそうであっても、来るなと言うよ。
744デフォルトの名無しさん:2008/10/20(月) 01:33:53
とりあえず自国民に聞けでFAじゃなかろうか
745デフォルトの名無しさん:2008/10/23(木) 23:45:13
指定のドライブを読み取り専用にしてしまうフィルタドライバを作りたいんですが

そういうのってminispyサンプルを改造すれば実装できるでしょうか?


試しにドライバ側のソースを下記のようにいじってみたんですが読み取り専用にはできませんでした

PreOperationコールバック関数内で

PFLT_CALLBACK_DATA->Iopb->MajorFunctionがIRP_MJ_CREATEのときに

FLT_CALLBACK_DATA->Iopb->MajorFunction->Paramamters.Create.SecurityContext->DesirendAccessにGENERIC_WRITEを代入


アタッチしたドライブのIRPを読み取り専用に書き換えるっていうイメージだったんですが、正常に読み書きできましたorz
746 ◆0uxK91AxII :2008/10/24(金) 09:32:26
読取のcallbackが着たら、テキトーに弾く。
でも、開くときに弾く方が、OSの挙動として正しいと思う。
747デフォルトの名無しさん:2008/10/27(月) 20:18:44
今カーネルモードのデバイスドライバから
CPUのプロセッサ数(コア数?)を取得する方法を探してるんだけど誰かおせーてー

というかデバイスドライバはサンプルとか入門ページとか数なくてホントワケワカメ。
なんで、それ探すために
「WDMデバイスドライバプログラミング完全ガイド下巻」の購入を検討しているんだけど
関数リファレンスとかどこぞで公開されてないんでしょーか?
748デフォルトの名無しさん:2008/10/27(月) 20:36:43
OpenLibSys参考にハードにアクセスして
詳細情報を自前で取りに行ったら?
749デフォルトの名無しさん:2008/10/27(月) 21:48:06
>>747
とりあえず、
>「WDMデバイスドライバプログラミング完全ガイド下巻」の購入
は止めとけ。
ほとんどがNTドライバの話(WDMでもこの知識は必要だが)で、WDMについては下巻の後半のみ
750 ◆0uxK91AxII :2008/10/27(月) 22:43:37
>>747
KeNumberProcessors
751デフォルトの名無しさん:2008/10/28(火) 05:46:35
>>748-750
うおー
ありがとー


リファレンス英語版のMSDNにはあるんだね
特にデバイス制御が目的じゃなくて
APIフックの為にカーネルモードで走らせれる環境が必要で
デバドラ作ってるんだけどガイド本はどうしようかな
しかしほんとに毎日BlueScreen何回見てることやら・・・
752デフォルトの名無しさん:2008/10/31(金) 12:34:47
DeviceIoControl()のlpInBufferって参照渡しにできる?
753デフォルトの名無しさん:2008/10/31(金) 14:55:53
>>752
参照渡しってDirect-IO(MDL渡し)のことか?
754デフォルトの名無しさん:2008/10/31(金) 15:37:35
>>753
MDLはよくわからんが、多分そんな感じ
ドライバがIrp->AssociatedIrp.SystemBufferで取得したparamに値を代入した場合
アプリ側でその値は取得できるのかな?っみたいな。。
755デフォルトの名無しさん:2008/10/31(金) 16:30:36
lpInBufferの方は、どっちに指定しても読み取り専用のバッファIO扱いだったはず

ttp://www.sciencepark.co.jp/community/report/report27.html
756 ◆0uxK91AxII :2008/10/31(金) 20:30:39
>>754
METHOD_BUFFEREDにして、lpOutBufferで読むとか。
757デフォルトの名無しさん:2008/10/31(金) 23:15:55
>>752が何をやりたいのかワカラン
ドライバ→アプリのデータを、アプリが用意したバッファにドライバがコピーするのでなく、
ドライバの持ってるバッファのアドレスをアプリに渡したいのか??(それは無理)
MDLを知らないってことは基礎知識が全く無いってことだよな、やめとけ

>>756
なぜにlpOutBuffer?
METHOD_BUFFEREDではドライバ側ではIN/OUT同一のバッファだけど、ドライバでバッファにセット
したデータは、lpInBuffer側にしかコピーされないよ
758デフォルトの名無しさん:2008/10/31(金) 23:51:39
データ設定してDeviceIoControlするのが面倒だからポインタで渡して
ドライバとアプリで同時に読み書きしたいとかそんなところ?
排他制御やら面倒そうだが名前つきのFileMappingで出来るんじゃないかな。

それはともかくWDK SP1が出たね。
759デフォルトの名無しさん:2008/11/04(火) 13:34:27
複数ボタン同時押しで、別のボタン押下イベントが発生する、ゲームパッド用フィルタドライバを作ろうと思っているのですが、
ドライバ側で、パッドに実装されているボタン以外のイベント(17~32あたり)を発生させることは可能でしょうか?
760 ◆0uxK91AxII :2008/11/04(火) 14:13:24
>>759
やりたい事は、可能だと思う。
事前に、適当なreportDescriptorを返すとかで。
761 ◆8eAmylDLLs :2008/11/04(火) 15:09:22
>>759
元からそのパッドに存在しないボタンに振り替えするのは
760が書いてるようにReportDescriptorをでっちあげる必要がある。
もちろんボタン数が増えてデータサイズが増えたら
Reportもそれに併せて手を入れないといけない。

やる気になればマウスだろうがキーボードだろうがHIDの機能なら全部振り替えできなくもない。
つーか箱○改造版ではキーボード振り替えやってる。

独自ドライバ使ってるデバイスの場合、フィルタでやっても
動作しない可能性があるので、独自にドライバ起こす方が無難。
762デフォルトの名無しさん:2008/11/04(火) 15:14:22
CHの3点セット の造りみたいだな

USBでぶっさした機器は直接 HID機器ではない扱いで
HIDドライバが 4アナログ 32点 提供 それのマッピングは任意にできるぜ
763759:2008/11/05(水) 10:56:55
>>760-762 ありがと
とりあえずreportDescriptorでググってみたが、ezusbやpicのマイコン関連しか出てこない。。
もしかしてこれってWDMより外のはなし?
764デフォルトの名無しさん:2008/11/05(水) 11:04:12
>>763
HIDの話しだからWDMの外と言われればそーかもな
765 ◆8eAmylDLLs :2008/11/05(水) 11:58:51
>>763
USB.org行ってHIDのドキュメント漁ってくるのが確実。
あとは公開されてるゲームパッドドライバのソースを見る。

HID部分についてはWDM以外のLinuxとかでも同じなので
そっち系のソースを見る方が分かりやすいかもね。
「USAGE_PAGE」でググるとソースが見つかりやすい。


>>762
質問者は既存のゲームパッドの動作改造目的なんだから
「マッピング部分を差し替える=ReportDescriptorを差し替える」部分をやらなきゃいけないわけだ。
その方法論について聞かれているわけで、視点がちょっと違うんでない?
766759:2008/11/06(木) 12:24:36
>>764-765 ありがと
ググってみたが、 ttp://www.tamanegi.org/prog/vtchid/くらいしか見つけられんかった
とりあえず参考にしてみようと思うが、ソースが複雑過ぎる><
767デフォルトの名無しさん:2008/11/07(金) 08:12:26
ボタンの番号分かってんなら難しくないんでないの?
ゲームパッドのレポートなんてあっても16バイト程度だろうし、
数回分のデータを見れば(アナログでも)データの配置も分かりそう。
768 ◆8eAmylDLLs :2008/11/07(金) 09:58:40
>>766
あとはX360Cでググ。
フィルタならLowerでIOCTL_HID_READ_REPORTと
IOCTL_HID_GET_REPORT_DESCRIPTOR差し替えれば
動くような気はするけど。

>>767
上でも書かれているがレポートだけではなく、レポートディスクリプタを変更しないと
ボタンを増やすことはできないよ。
データの配置だけではなく、データの配置の定義を変えないといけない。
769767:2008/11/07(金) 18:10:58
>>768
そうか新たにボタンを定義するんでしたな。

レポートディスクリプタって何度PDF読んでも完全に理解出来んかったな…。
あれだけ複雑すぐる。
結局既存のモノをパクって終わらせた思い出。
770759:2008/11/12(水) 17:02:44
>>767-768 ありがと
つまりデフォルトのreportDescriptorのUsage Maximumを32に書き換えたものを、
IOCTL_HID_GET_REPORT_DESCRIPTORとIOCTL_HID_READ_REPORTで読み込ませればよいということでしょうか。
でもデフォルトのreportDescriptorってどこから取得すればよいのだろう。。。
771 ◆8eAmylDLLs :2008/11/12(水) 17:55:06
>>770
そーいや標準HIDドライバへの登録で使う前に書き換えないといけないから
IOCTL_INTERNAL_USB_SUBMIT_URB
あたりで抑えておかないとダメか。

768で書いたのは無し、lowerでこっちだけ見て戻りデータも捕まえなきゃ無理か。


フィルタでやるよりソースのある既存ドライバいじって
独自ドライバ仕立てるほうが楽に見えるんだよなぁ。
772デフォルトの名無しさん:2008/11/25(火) 03:03:43
デバイスドライバの開発の話ではないけれど・・・
あるドライバ(サウンドドライバ)があって、Windows起動時に
それが読み込まれると、Windowsが落ちます。

だからセーフモードで無効しました。そしたら当たり前ですが、
普通に起動しても正常に起動できます。
正常に起動してからデバイスマネージャからドライバを
有効にしても落ちません。しかも正常に動いているようです。
(もしこの時点で何か思い当たること、試してみるべきことがあったら教えてください)

そこで、Windows起動時はドライバを無効にしておき、起動してから有効にする方法を
とりたいと思っていますが、有効にしてから再起動すると次回起動時は(有効なので)
Windowsが落ちます。

そこで、Windows起動時にautoexec.batのような感じでドライバを強制的に無効にしてから
起動する方法は無いでしょうか? OSは2000ですがXPの方法でもかまいません。
773デフォルトの名無しさん:2008/11/25(火) 03:08:01
馬鹿は消えろ
774デフォルトの名無しさん:2008/11/25(火) 03:08:40
>>772
ドライバの起動順を適当に変更してみる。
順位を手動にしておけば再起動してもドライバはロードされない。
devcon.exe。
775デフォルトの名無しさん:2008/11/25(火) 03:27:55
>>774
ありがとうございます。

devcon.exeは入れていたのですが、順位変更なんてできたんですね。
IDのことでしょうか? まあやってみます。
776デフォルトの名無しさん:2008/11/29(土) 18:59:31
WindowsDDK内で,整数の型はどのようなものがあるのでしょうか?
UNIX環境で言うstdint.h見たいな者を探しています
777デフォルトの名無しさん:2008/12/01(月) 13:26:04
あるWindows用PCIデバイス&ドライバを解析して
Linuxドライバとして移植しようかと思っているんですけど、
デバイスドライバに関してはまったくの無知なんですよね。

そこで簡単なPCIボードをあつかうWindows用デバイスドライバを
作ってみようかと思うんですけど、何か良いサンプル無いですかね?
PCIボードが簡単に手に入って、ドライバのソースも公開されていて、あまり複雑でないもの。
778デフォルトの名無しさん:2008/12/01(月) 22:07:28
( ´-`).。oO(PT1がターゲットかな…)
779デフォルトの名無しさん:2008/12/02(火) 19:39:39
フィルタードライバー作ってるのですが
DO_POWER_PAGEABLEプラグってどういった意味があるのでしょう
とりあえず立てて電源周りの処理もサンプルみながら実装できましたが
わからないと気持ち悪くて
780デフォルトの名無しさん:2008/12/02(火) 20:13:53
>>777
それなりの出費をする気があるなら
http://www.adtek.co.jp/seihin/apic/index.html

>>779
DO_POWER_PAGEABLEをセットすると、IRP_MJ_POWERの処理は、PASSIV_LEVELで呼ばれる。
セットされてなければ、DISPATCH_LEVELで呼ばれる(こともある)。
フィルタドライバなら、デバイススタックの他のドライバと同じにする必要あり。
781デフォルトの名無しさん:2008/12/02(火) 22:02:41
>>780
thx
それを踏まえてヘルプとか読みあさったらなんとなく理解できました
782デフォルトの名無しさん:2008/12/04(木) 06:11:17
VistaSP1でipfltdrv.sysが動作しないんですが、
これを無理やり動作させる方法ってないですか?
(WinObjではちゃんと表示されているのですが、動作していない様子です、、、)

ndis使うしかないのでしょうか?
783デフォルトの名無しさん:2008/12/07(日) 11:56:14
buildコマンドで別途インクルードパスを指定したいのですが
どうすればよいのでしょう?
784でるたん:2008/12/17(水) 15:57:41
USBドライバを作成しています。

バッファが少なく、 転送の間隔があいてしまうと、
バッファがあふれデータが喪失してしまうデバイスがターゲットです。

ReadFileを同期的に呼び出すと前のReadFileの完了の処理をしてから
次のReadFileを呼び出すまでの間にデータが喪失してしまいました。

ReadFileを非同期的に複数回呼び出し
完了したものを処理して再びReadFileを呼び出すようにしたところ、
ReadFileの呼び出しの間にデータが喪失する現象は解決しました。

ところが、数時間動作させるとReadFileが
要求したサイズを受信したわけでもなく、
ショートパケットを受信したわけでもないのに早まって完了してしまうことがあります。

ReadFileを1回しか呼ばない場合はこの現象は今のところ確認できていないのですが、
前述のようにデータが喪失してしまいます。

作成したドライバでは特にキュー等は作成しておらず(作成方法もわからないのですが)、
単に下位のドライバに要求を投げています。

ReadFileを複数回呼び出すのはいけないことなのでしょうか?
よろしくお願いいたします。
785デフォルトの名無しさん:2008/12/18(木) 01:04:14
>>783
sourcesファイルにINCLUDEセクションってなかったか?

>>784
非同期ってオーバーラップ使ったんだよね?
あれはリクエストが終わったらリクエストが来るまでの
待ち時間に別の処理するためだけにあると思ったほうがいいのではないか。

複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
デバイスドライバの中で適切に処理できているのか確認してみた?

ReadFileってアプリか何かでやってるんだよね?
単にファイルに書けばいいだけだったら、データ受信した瞬間
構造体作ってキューに溜め込んで別のスレッドでファイルに書き出すような処理を
ドライバに入れちゃったほうが早いかもしれない。
786でるたん:2008/12/19(金) 19:24:07

>>785
返信ありがとうございます。


> 複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
> デバイスドライバの中で適切に処理できているのか確認してみた?

そのままUSBバスのドライバに渡されているので
その先でどうなっているのかはわからないです。

何か調べる方法はあるのでしょうか?

大抵は期待したとおりに動いているのですが、
たまたまうまくいっただけなのでしょうか?

デバイスはカメラで映像データが垂れ流しで送られてきています。
ファイルには保存しておらず、単にメモリへ取得できればよいのですが。
787 ◆0uxK91AxII :2008/12/19(金) 19:58:45
垂れ流しなら、多少消えたところで、問題は無いね。
788デフォルトの名無しさん:2008/12/19(金) 22:31:15
USBドライバ作成って書いてあったから
カーネルモードだと思ってたんだが違うのかな。

私の返事はカーネルモードドライバ+アプリだと
思って書いたので違うかなー。

単純に速度を一度調べたほうがいいと思うよ。
取りこぼしが出たときにタイミングが異常にずれることがあるかとか。
789デフォルトの名無しさん:2008/12/23(火) 11:48:41
http://msdn.microsoft.com/ja-jp/library/ewd38ezs(VS.80).aspx
ここに乗っている__readcr0を使いたいのですが
ここに書いてあるintrin.hをインクルードしてもそんなものは無いと
いわれてしまいます.

どうやったら使えるようになるのでしょう?
790デフォルトの名無しさん:2008/12/29(月) 19:30:17
WDMデバイスドライバプログラミング完全ガイド上下買ってしまった、、
理由は、買えなくなる前にかっておこうかと、、
宝くじ買ったほうが良かったかな。
791 ◆0uxK91AxII :2008/12/29(月) 19:37:25
>>789
作ればok。
792デフォルトの名無しさん:2009/01/03(土) 20:22:46
>>790
個人的にはオレンジのウォルターオニーさんのほうがオススメ。
基本的な概念はそれで、あとはWDKのドキュメント、サンプルとにらめっこ。
793デフォルトの名無しさん:2009/01/04(日) 21:19:31
Vista以降、署名の問題で個人のドライバ作成が事実上アウトに
されたのが痛いな。
794デフォルトの名無しさん:2009/01/05(月) 02:59:36
32bitは警告が出るだけでいいんだけどね。
64bitは署名必須になっちゃったし
次のOSでは32bitも必須になるだろうし
もうドライバ趣味で作ったりとかできないね。
ので、Linux勉強している自分がいる。
795デフォルトの名無しさん:2009/01/05(月) 06:27:28
796デフォルトの名無しさん:2009/01/05(月) 23:11:45
>>794
これからはデバイスドライバの類はユーザーモードで動くようになっていくんでしょう。
趣味で作るだけなら署名無効にすればいいのだしね。
ブートやその他カーネルモードドライバを公開しにくいのは残念だけど
それらのドライバがWindowsの不安定さの一員でもあったのだからしょうがないよ
797デフォルトの名無しさん:2009/01/07(水) 20:54:21
アホか?

署名無効にできないから問題なんだよ。
毎回F8なんてやってらんね。

それに署名付きが高品質とは限らんし。
798デフォルトの名無しさん:2009/01/07(水) 21:03:44
799デフォルトの名無しさん:2009/01/07(水) 22:48:27
時間のかかる計算ってドライバの中でやるのと
外で計算してからdeviceiocontrolとかでドライバに結果渡すのとで速さに違いある?
800 ◆0uxK91AxII :2009/01/07(水) 23:53:23
>>799
>時間のかかる計算ってドライバの中でやるのと
するな。
801デフォルトの名無しさん:2009/01/08(木) 20:37:17
IRQL = PASSIVE_LEVELなら問題なし。
802デフォルトの名無しさん:2009/01/08(木) 22:38:56
>>797
落ちる落ちないみたいな品質面もあるけどセキュリティ面もでかい。
また、ウェブサイトが乗っ取られるようなことがあって擦り返られても平気になる。

803 ◆0uxK91AxII :2009/01/09(金) 01:04:05
>>801
そんな気はする。
804デフォルトの名無しさん:2009/01/09(金) 23:21:16
>>802
でかくねーよ。
ドライバロードさせられる権限あればドライバ使わんでもOS乗っ取れる。
805デフォルトの名無しさん:2009/01/10(土) 10:46:47
>>804
単にPC乗っ取ったり、破壊するだけならそうだね。
806デフォルトの名無しさん:2009/01/26(月) 01:00:02
C++でドライバってどうよ?
どうよ?
807デフォルトの名無しさん:2009/01/26(月) 02:36:45
別に
808デフォルトの名無しさん:2009/01/30(金) 14:16:03
ゲーム用にキーボード入力をアプリケーション側で操作するソフト作りたいんだけど,
とりあえずWindowsXP用のデバイスドライバをプログラミングする良い入門書とかある?
809デフォルトの名無しさん:2009/01/30(金) 20:39:30
アプリでやらない理由を教えてくれ。
810デフォルトの名無しさん:2009/01/30(金) 21:04:05
ネトゲのBOTかマクロを作ろうとしてユーザモードからだと弾かれるからだろ
811デフォルトの名無しさん:2009/01/31(土) 01:26:21
うんそうです.
812デフォルトの名無しさん:2009/01/31(土) 10:13:47
>>808
USBチップ積んだ回路にPICとか使ってキーボードやゲームパッドを直接制御した方が簡単だよ
813デフォルトの名無しさん:2009/01/31(土) 14:19:32
マイコンとか更に知識なくて大変そうだ
とりあえずVMにXP突っ込んで試してみるお
814デフォルトの名無しさん:2009/02/02(月) 04:42:35
>>808
入り口から聞く様じゃ作れないな
俺もその用途でドライバ作ったが、結局なんかあったら聞こうと思って開いてたこのスレで
改めて聞くことなんか何も無かった
本も要らない
ググれば全ての必要な情報が揃う
815デフォルトの名無しさん:2009/02/02(月) 10:31:13
箱○ドライバのソースと、仮想HIDドライバのソース組み合わせれば可能だしな。
816デフォルトの名無しさん:2009/02/07(土) 19:18:22
ネットワークのパケットキャプチャのように、
USBのデバイスとのやりとりのデータをキャプチャするソフトはありますでしょうか。
817デフォルトの名無しさん:2009/02/07(土) 19:34:14
SniffUsb
818デフォルトの名無しさん:2009/02/08(日) 00:40:03
>>817
ありがとうございました!
819デフォルトの名無しさん:2009/02/08(日) 08:05:23
6001.18002に変えたら2 Warningsとか出るようになったお……
ignoreされてんのかwrnに出ないし、動作するけど気持ち悪いんだお(´;ω;`)
820デフォルトの名無しさん:2009/02/12(木) 09:35:18
DISPATCH_LEVELで使える関数リストくれくれ
821デフォルトの名無しさん:2009/02/12(木) 16:33:17
>>820
WDMデバイスドライバ プログラミング完全ガイド (アスキー)
822デフォルトの名無しさん:2009/02/19(木) 10:58:17
お力お貸しください。

現在PCIデバイスドライバをWDMで作成しているのですが、IoAttachDeviceToDeviceStack
関数で必ずブルースクリーンになってしまいます。
ためしにWDMに付属していたサンプルのPCIデバイスドライバ(PCIDRV.sys)を
インストールしてみたのですが、同じようにIoAttachDeviceToDeviceStack
でブルースクリーンです。
IoCreateDeviceが成功していることは確認しています。
こういった場合、何が原因なのでしょうか?(ハードウェア?)
823デフォルトの名無しさん:2009/03/11(水) 22:52:52
フィルタドライバでATAPIの流れているコマンドを盗めないか検討している。出来るのか?
824デフォルトの名無しさん:2009/03/12(木) 09:39:43
できないよ
825デフォルトの名無しさん:2009/03/13(金) 21:40:30
>>823
盗みは犯罪、イクナイ
826デフォルトの名無しさん:2009/03/16(月) 09:39:19
>>823
USBならusbstorの上で取れる。
IDEはシラネ。
827 ◆0uxK91AxII :2009/03/16(月) 13:15:34
busDriverのfilterでも書けばいけるとか、何処かで見た気がするする、
828デフォルトの名無しさん:2009/03/18(水) 19:35:39
質問です。
カーネル空間とユーザー空間とでMutexで同期を取りたいのですが
どちらかで作成した Mutex をもう片方に告知する方法ってありませんか?
829 ◆0uxK91AxII :2009/03/18(水) 20:06:46
>カーネル空間とユーザー空間とでMutexで同期を取りたい
おい、やめろ馬鹿
このスレは早くも終了ですね


とりあえず、キレイな方法は無い。
830チン顧問 ◆RitalinnSs :2009/03/31(火) 19:22:06 BE:382423853-DIA(144556)
今のWDKのセットアップから
親切に説明してくれてる書籍ってあるんでしょうか

831デフォルトの名無しさん:2009/04/01(水) 09:00:22
この辺
「Windows Vista カーネルソフトウェア開発技法」
「Windows Vistaデバイスドライバプログラミング」
832チン顧問 ◆RitalinnSs :2009/04/01(水) 13:29:53 BE:917816966-DIA(144556)
ありがとうございます

とりあえずフリーのWDKのインストールまではできたのですが
wdm.hとntddk.hがコンパイラバージョンが合わないとかで
サンプルがビルドできないorz
とりあえず本待ちだ
833チン顧問 ◆RitalinnSs :2009/04/01(水) 15:04:03 BE:688363439-DIA(144556)
とりあえず原因はわかった
もってるVCがバージョン6だからだ
とりあえず7以降のがほしいってことで
834デフォルトの名無しさん:2009/04/01(水) 15:13:52
どやって、ビルドしようとしてんだ・・・?
835デフォルトの名無しさん:2009/04/01(水) 15:17:14
いきなりVCでWDK動かそうとするなよ。
基本CUIだぞ。

>>834
パス通したり設定さえやってればVCで動くプロジェクトも作れる。
WDKサンプルのままmakefileとか使った方が手っ取り早いが。
836チン顧問 ◆RitalinnSs :2009/04/01(水) 15:39:30 BE:509898645-DIA(144556)
いちおうVS6はあって
2000用のは作ったことがあるのですよ

なのでだいじょうぶかなぁと
837デフォルトの名無しさん:2009/04/01(水) 22:39:55
VC9EE+WDK+DDKWizardでIDE依存症のあなたも幸せ
838デフォルトの名無しさん:2009/04/02(木) 16:10:48
最近知った言葉:UMDF、KMDF、WDF
Limuxのカーネル関係勉強してからWindowsをさわろうと思う。
839デフォルトの名無しさん:2009/04/02(木) 22:56:47
ビルド環境ってOSごとにあるけど違いとかある?
どれでビルドしても2000でもXPでもvistaでも使えるようだけど、
各osのビルド環境で別々に作ったドライバを使ったほうがいいの?
840デフォルトの名無しさん:2009/04/09(木) 14:32:04
ねーよw
841デフォルトの名無しさん:2009/04/09(木) 16:04:15
>>839
どのOSにも存在する機能を使ってるぶんには同じ。
XPとかVistaにしかない関数を使うんなら、OS毎にビルドするなり
ダイナミックロードするなりすればよろし。
842デフォルトの名無しさん:2009/04/09(木) 19:14:22
ターゲットじゃねえぞ
843デフォルトの名無しさん:2009/04/27(月) 23:19:49
教えてください。
IDEの設定についてです。

WinDDK\6001.18002\inc配下に
api
atl21
atl30
crt
ddk
mfc42
wdf
というフォルダがそれぞれありますが、

Visual Studio 2008の
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ
にてインクルードディレクトリを設定しようと考えているのですが、
設定する対象フォルダは「ddk」のみで大丈夫でしょうか?
※インテリセンス機能を使いたいので。。。


宜しくお願いします。
844デフォルトの名無しさん:2009/04/30(木) 22:21:56
シャットダウン再起動休止状態スタンバイスリープなどを
ドライバ内で検出する方法があれば教えてください
845デフォルトの名無しさん:2009/05/04(月) 23:57:22
>>843
ソースによると思うけれども
手元では、inc\api と inc\ddk をインクルードファイルの設定に入れてる。

>>844
MajorFunction[IRP_MJ_POWER] の中で
IRP_MN_SET_POWERやIRP_MN_QUERY_POWER で引っ掛けて
Parameters.Power.ShutdownType や powerState.SystemState を
見れば、ある程度、判るよ。

というか、普通実装してあるはずだけど。
846843:2009/05/09(土) 16:04:32
>>845
ありがとうございます
実はあの後色々錯誤してapiとddkのみ
インクルードファイルに設定することにしました。


再確認できてよかったです。
847デフォルトの名無しさん:2009/05/10(日) 23:18:12
ドライバ初心者です。
あるデバイスに対して、I/Oの入出力と
割り込みのハンドリングを行うだけの
簡単なドライバを作りたいのですが、
簡単なサンプルソースはどこかに無いでしょうか?
(ソースファイル1つ、ヘッダファイル1つくらいのもの)
DDKのサンプルは少々複雑で・・・。
よろしくお願いします。
848デフォルトの名無しさん:2009/05/16(土) 05:26:19
下記8つの同じようなエラーがとれず困っています。何かヒントでも良いので頂けないでしょうか?

1>c:\winddk\3790.1830\inc\wxp\usbioctl.h(449) : error C2220: warning treated as
error - no object file generated
1>c:\winddk\3790.1830\inc\wxp\usbioctl.h(449) : error C4200: nonstandard extensi
on used : zero-sized array in struct/union
1>c:\winddk\3790.1830\inc\wxp\usbioctl.h(472) : error C4200: nonstandard extensi
on used : zero-sized array in struct/union
1>c:\winddk\3790.1830\inc\wxp\usbioctl.h(528) : error C4200: nonstandard extensi
on used : zero-sized array in struct/union
100>c:\winddk\3790.1830\inc\wxp\usbioctl.h(449) : error C2220: warning treated a
s error - no object file generated
100>c:\winddk\3790.1830\inc\wxp\usbioctl.h(449) : error C4200: nonstandard exten
sion used : zero-sized array in struct/union
100>c:\winddk\3790.1830\inc\wxp\usbioctl.h(472) : error C4200: nonstandard exten
sion used : zero-sized array in struct/union
100>c:\winddk\3790.1830\inc\wxp\usbioctl.h(528) : error C4200: nonstandard exten
sion used : zero-sized array in struct/union

宜しくお願いします。
849 ◆0uxK91AxII :2009/05/16(土) 11:00:05
>>848
Cで書けばOK。
850デフォルトの名無しさん:2009/05/16(土) 14:58:58
>>849
build通りました!ありがとうございました!
851デフォルトの名無しさん:2009/05/19(火) 01:01:24
最近のDDK(WDK)ってgeninf.exeは付属していないのでしょうか?
infファイルは自分で書くしかないのでしょうか?
852デフォルトの名無しさん:2009/05/23(土) 14:34:46
VS2010ベータ出るな
MSDN会員だけ先行して公開されてる
853デフォルトの名無しさん:2009/06/02(火) 00:16:09
ドライバでWindowsロゴテスト受けてないと、リリース署名つけても
デバイスマネージャ→ドライバの詳細上のデジタル署名者欄で
署名なしとされてしまう模様。
リリース署名したがVista x64でのこれがどうも気になる。

やっぱロゴテスト合格しないとここは署名なしのままなのかな。
854デフォルトの名無しさん:2009/06/02(火) 01:06:11
そりゃカタログファイルが無いからな。
855デフォルトの名無しさん:2009/06/10(水) 05:12:17
http://www.dhs-tools.at/products_finisar_busdoctor_eng.htm
高卒だけど怪しいのみつけた、一応はあらゆるプロトコルの解析ができるみたい
すれ違いだったらすまん
856デフォルトの名無しさん:2009/09/06(日) 18:21:59
IRPをキャプチャするフィルタを好きなところ、あるいは、全部の
UPPERなりLOWERなりにSetupDIで突っ込むんだろうね。
アプリが大変だね。CDB・CBW・タスクファイル・・・
857デフォルトの名無しさん:2009/10/22(木) 15:24:45
ネイティブAPIのZwCreateProcess()にフックをかけるドライバを作成しています。
フック時に起動させるモジュールの対象パスを取得、コマンド引数を取得したいと思っています。

モジュールの対象パスは取得することは成功したのですが、コマンド引数の文字列の取得を行うことができません。

NTSTATUS NtCreateProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );

これら引数からアプリ起動時のコマンド引数の文字列を取得する方法をご存知の方をご存知の方がいましたら、
教えていただけないでしょうか。よろしくお願いいたします。
858デフォルトの名無しさん:2009/11/17(火) 00:07:07
まぁーPCやってることが2chやってることと同義だって考えてる人にとっちゃ
PCやってるなんておhるかもしれんのう。
859デフォルトの名無しさん:2009/11/17(火) 00:07:24
誤爆ですw
860デフォルトの名無しさん:2009/11/17(火) 02:30:38
おhる
861デフォルトの名無しさん:2009/12/10(木) 15:08:06
ndisフィルタでパケットフィルタ作りたいんだが
サンプル見てもコンパイルの仕方すら分からない状況ですが
まあそれは調べたらあったのでいいとして
アプリケーションとどうやって通信するのかとか、ドライバ自体をどうやってシステムに登録するのかとか
ほとんど何も分からないし調べても出てこないんですが
サンプルコードでもあれば教えてください
862デフォルトの名無しさん:2009/12/10(木) 15:46:58
WDK7のサンプルソースみれば一発だろ。
まずはWDDFの書籍買って一から勉強しろ。
863デフォルトの名無しさん:2009/12/10(木) 21:30:27
いや一発じゃないだろう、お前は超能力者か何かか?
geekなサイトにもぐりこんでだいたいやり方は分かった
864862:2009/12/10(木) 22:49:39
>>863
いや、アフォでなければ分かる。
WDKあるならドキュメント読めば全部きっちり載ってる。
英語が面倒で見てすらいないんだろ。

大体、

> サンプルコードでもあれば教えてください

って、network\ndis\filterにndisのlowerfilterがあるわけだが。
ろくに探しもしてないことが明白。
865デフォルトの名無しさん:2009/12/13(日) 23:04:15
痛々しい863age
866デフォルトの名無しさん:2009/12/23(水) 16:54:59
http://msdn.microsoft.com/en-us/library/aa490588.aspx
これ見るとIoIsWdmVersionAvailableの引数が
Vistaと7で同じになってるんだけど誤記じゃないの?
RtlIsNtDdiVersionAvailableのほうを使うべきと書いてあるのはこの問題があるから?
でもこの関数をXP以前のOSで使おうとしてもライブラリのリンクができない。
867デフォルトの名無しさん:2010/01/05(火) 12:43:34
WinDriverってカーネルコード書かないでドライバ作れるけど
いったいどういう仕組みなんだろ?
ユーザーランドのコードを対応するものに変換してくれるとか?
868デフォルトの名無しさん:2010/02/17(水) 06:46:43
DDKで、DuplicateHandleの代わりになるものってある?





869デフォルトの名無しさん:2010/02/18(木) 08:09:49
ZwDuplicateObject かな?
870 ◆0uxK91AxII :2010/02/18(木) 09:40:09
ObReferenceObject みたいなモノってある?
871デフォルトの名無しさん:2010/02/18(木) 16:45:20
>>869
ありがとうございます。
助かりました。
872デフォルトの名無しさん:2010/02/22(月) 09:51:03
自作ドライバにインタフェース作成してユーザからCreateFileすると、
GetLastErrorでアクセス拒否が返されるんですが、何が悪いですか。

ドライバ側:
(1) AddDeviceで IoRegisterDeviceInterface(PDO, &GUID, NULL, &IfName);
(2) IoSetDeviceInterfaceState(&IfName, TRUE);

ユーザプログラム側:
(1) SetupDiGetClassDevs
(2) SetupDiEnumDeviceInterfaces
(3) SetupDiGetDeviceInterfaceDetail(サイズ取得用)
(4) SetupDiGetDeviceInterfaceDetail(ifName取得用)
(5) CreateFile(ifDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
ここで-1が返され、失敗。
GetLastError で FormatMessage すると「アクセスが拒否されました」

何が原因と考えられるんでしょうか。
ドライバ側では正常に返ってるし、ユーザ側も(5)以外は正常、
GUIDもドライバとユーザで一致してます。
infが悪い・・・?
873デフォルトの名無しさん:2010/02/22(月) 09:52:56
環境忘れてた。
開発、動作とも WinXP で CheckBuild(6001.18002) で動作させてます。
874 ◆0uxK91AxII :2010/02/22(月) 10:23:48
IRP_MJ_CREATEのhandlerで、STATUS_SUCCESSを返していないとか。
875872:2010/02/22(月) 10:59:39
返答どうもです。IRP_MJ_CREATE のルーチンでは、

return CompleteIrp(Irp,STATUS_SUCCESS,0);

で記述してますが、その前のDebugPrintExが表示されないので
そもそもIRP_MJ_CREATE前の I/Oマネージャによるアクセス権限チェックで
弾かれてるような印象です。
876デフォルトの名無しさん:2010/02/22(月) 22:56:35
FILE_SHARE_READ | FILE_SHARE_WRITE を0にしてみたら?
877872:2010/02/23(火) 08:29:56
>>876

CreateFile( ifDetail->DevicePath,
GENERIC_READ,
0,
NULL, OPEN_EXISTING, 0, NULL);

にしてみましたが、ダメでした。
WinDDKサンプルの Toaster Bus だとうまく I/O できるので、
その辺の差異を見ないといけない・・・にしてもよくわからない。
878872:2010/02/23(火) 08:34:14
SECURE_OPEN は必須ですか?
Toaster Bus だと inf で Registry にアクセス権の設定をして、
IoCreateDevice で FILE_DEVICE_SECURE_OPEN を指定してますが・・・
879デフォルトの名無しさん:2010/02/23(火) 19:28:27
制限ユーザでCreateFileしてる・・・ワケないよな
880デフォルトの名無しさん:2010/02/23(火) 21:56:34
>>878
単純にCreateFileするユーザーのアクセス権限で
Administrators指定して開けばいける気がする。

881872:2010/02/24(水) 11:13:23
実行ユーザは Administrators のグループに追加されてます・・・

あと CUI なプログラムなので、
(1) DOS窓開始ユーザを Administrator で実行して実行してみたり、
(2) Explorerから実行ファイル右クリックで別ユーザ→Administrator指定して実行してみたり
でも変わらずです。

Class が UNKNOWN なドライバだけどUpper や Lower がいるはずもないし・・・
うちのマシン環境が腐ってる・・・?OS入れ直ししてみた方がいいんでしょうか。
882872:2010/02/24(水) 16:20:44
色んな所のサンプルをあさって比較しながら色々試してみたところ、
CreateFile の 第1引数のパスの末尾に"\\" を追加するとうまくいきました
・・・が、そういう仕様ですか?

MSDN みてますが、第1引数 lpFileName の指定で特筆無いし・・・
本当に正しいのか良く分からないです。
883デフォルトの名無しさん:2010/02/24(水) 19:52:08
それはないなー
てかなんで\\を追加とかいう不可思議な発想に至ったのか
884872:2010/02/24(水) 21:41:20
>>883
Windows Vista デバイスドライバプログラミングの書籍にあるサンプルプログラムに
Detail で DevicePath を取得したあと \\hoge を追加したパスで
CreateFile してて、それだとうまくいきました。

んで、色々パスを試したら \\ を追加すれば
動くって所に(たまたま)行き着いた、ってトコです。
885デフォルトの名無しさん:2010/02/25(木) 06:31:06
メモリ壊してるだけだろwww
886872:2010/02/25(木) 11:28:06
>>885
どういう仕組みでメモリ破壊になってるんでしょう。
887デフォルトの名無しさん:2010/02/25(木) 13:57:17
お前のソースをここに貼ったら教えてやらんでもない
888872:2010/02/25(木) 14:28:58
違うPCでやると、>>882 関係なしにうまくいくので、
結局今のPCの環境がおかしい・・・何が違うんだorz

OS入れなおしてみるか・・・。お騒がせ(?)しました。
889872:2010/02/25(木) 14:42:18
>>887
転載OKなんかな。

http://www.sbcr.jp/books/download/art.asp?newsid=2095

からダウンロードして展開できたソース 1-8\open_close_final\VistaSample2
をまんま使用。

どういう仕組みでメモリ破壊してるんでしょう??
890デフォルトの名無しさん:2010/02/25(木) 14:49:33
同じ登録のドライバが先にいるんじゃね?
891872:2010/02/25(木) 14:54:20
以下、openの関数です

HANDLE CreateDevice(GUID *pGuid, CHAR* filename) {
HDEVINFO deviceInformationHandle;
SP_INTERFACE_DEVICE_DATA interfaceDeviceData;
PSP_INTERFACE_DEVICE_DETAIL_DATA interfaceDeviceDetail;
DWORD sizeOfSymbolicName;
HANDLE deviceHandle=NULL;
UCHAR devicePath[DEVICE_PATH_LENGTH];

interfaceDeviceDetail = NULL;
memset(&devicePath,0,DEVICE_PATH_LENGTH);
// GUIDからHDEVINFOを取得
deviceInformationHandle =
SetupDiGetClassDevs(pGuid,
NULL, NULL,
DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(deviceInformationHandle==INVALID_HANDLE_VALUE)
return NULL;
// HDEVINFOからSP_INTERFACE_DEVICE_DATAを取得
interfaceDeviceData.cbSize = sizeof(interfaceDeviceData);
SetupDiEnumDeviceInterfaces(
deviceInformationHandle,
NULL, pGuid, 0, &interfaceDeviceData);
// SP_INTERFACE_DEVICE_DATAからSP_INTERFACE_DEVICE_DETAIL_DATA取得
// その1:とりあえず長さを取得
SetupDiGetDeviceInterfaceDetail(
deviceInformationHandle,&interfaceDeviceData,
NULL, 0, &sizeOfSymbolicName, NULL);
892872:2010/02/25(木) 14:55:21
つづき

// SP_INTERFACE_DEVICE_DATAからSP_INTERFACE_DEVICE_DETAIL_DATA取得
// その2:データそのものを取得
interfaceDeviceDetail =
(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(sizeOfSymbolicName);
interfaceDeviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
SetupDiGetDeviceInterfaceDetail(
deviceInformationHandle,
&interfaceDeviceData, interfaceDeviceDetail,
sizeOfSymbolicName, NULL, NULL);
// interfaceDeviceDetail->DevicePathがドライバアクセスへの
// 名前として使える。ここでは更に引数のファイル名を追加する。
strcpy((CHAR *)devicePath,
interfaceDeviceDetail->DevicePath);
printf("CreateDevice [%s] \n",(PCHAR)interfaceDeviceDetail->DevicePath);
strcat ((CHAR *)devicePath,"\\");
strcat ((CHAR *)devicePath,filename);
// デバイスドライバへのアクセス許可を求める
deviceHandle = CreateFile(
(CHAR *)devicePath,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,OPEN_EXISTING,0,NULL);
// 確保したリソースを破棄する
if (interfaceDeviceDetail)
free(interfaceDeviceDetail);
SetupDiDestroyDeviceInfoList(deviceInformationHandle);
return deviceHandle;
}
893872:2010/02/25(木) 15:00:56
>>890
1-8\open_close_final\VistaSample1 が対応するドライバで、
inf の クラスとGUIDを Unknown に変更して使ってみてます。

ってそういう意味じゃない?
894デフォルトの名無しさん:2010/02/25(木) 16:53:48
パス名の最後の文字が「表」とか「申」とか「能」で終わってる
895デフォルトの名無しさん:2010/02/25(木) 19:06:21
strcpyとかstrcatとか使ってる時点で読む気をなくす('A`)
896デフォルトの名無しさん:2010/02/25(木) 20:05:18
最初から改造したやついれた?
アンインストールをちゃんとやらないでドライバだけいれたから
レジストリがおかしくなってるか、ドライバが実は古いままとか
そういうのはないかな。別のPCでも大丈夫なあたり。
できれば仮想環境とかですぐに元に戻せる環境を使って
最初から今のドライバでうまくいくか試したほうが速いと思う。
今の自分のドライバのGUIDに変なエントリがないか調べてみるのもあり。

あと、正直勉強不足だった。
\\つけた後にオプションとかやるんだな。
ただ列挙したデバイスインターフェイスのGUID+4桁の数字

ちなみに俺はおっさんなので、SetupDi使うのがめんどくさくて
CreateDeviceの固定された名前でどうにかしてしまうことが多い。
897デフォルトの名無しさん:2010/02/25(木) 20:06:59
>>896
消しすぎた。

デバイスインターフェイスのGUID+4桁の数字
でアクセスできるのが普通だと思うから
サンプルがそれでちゃんと動くかどうか確認してみたほうがよい

と書くつもりだった。
898 ◆0uxK91AxII :2010/02/25(木) 22:50:42
割とどうでも良い事だけど。

>SetupDiEnumDeviceInterfaces(
>deviceInformationHandle,
>NULL, pGuid, 0, &interfaceDeviceData);

0決め打ちはマズイと書いてみる。
899デフォルトの名無しさん:2010/02/28(日) 09:37:30
Windows Driver Kit Version 7.1.0
File Name: GRMWDK_EN_7600_1.ISO
Version: 7.1.0
Date Published: 2/26/2010
Language: English
Download Size: 619.8 MB
http://www.microsoft.com/downloads/details.aspx?FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff&DisplayLang=en
http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO
900デフォルトの名無しさん:2010/04/20(火) 23:53:44
WinUSB使ってデバドラ作ってるんだけども、ベンダーリクエストがどうにも通らない……
WinUsb_ControlTransfer()使うんだ、と言うところまでは理解した……つもりなのだが、
いざ実行してみるとFALSEが返ってGetLastError()はERROR_GEN_FAILUREになる。

 ReadPipeとWritePipeはうまく行ってるので、WINUSB_INTERFACE_HANDLEがとれてないという
ことは無いと思うのだけど、ドコのナニに問題があるのか全然分からない。

 同じところで詰まった人、ヒントで良いんでおしえてくだちいorz
901デフォルトの名無しさん:2010/08/07(土) 04:07:36
どなたかご教授ください。

ComPortのドライバを作っていまして、
ドライバの割り込み待ち中に、通信先のWin32アプリがフリーズする点で躓いています。

Win32アプリ(フリーのシリアル通信ソフト)からIOCTL_SERIAL_WAIT_ON_MASKという
I/O Controlコードをドライバが受け取ったとき、
ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
待っている間、Win32のアプリの方がフリーズしてしまいます。
割り込み待ちの処理には KeWaitForSingleObject を
NotificationEvent, Executive, KernelMode、タイムアウトなしで使用しています。

一般に出回っているComPortのドライバに
自作のWin32アプリからIOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
その送信時点でWin32アプリの処理が止まり、 (DeviceIoControl関数から抜けなくなり)
ドライバがシリアルデータを受信したときにアプリは処理を開始していました。

これから、ComPortのドライバはIOCTL_SERIAL_WAIT_ON_MASKを受信した段階で
シリアルデータの受信割り込みがあるまで待ち続けることが分かるのですが、
僕の待ち方(KeWaitForSingleObject)が悪いためか、
自作のドライバではフリーのシリアル通信ソフトはフリーズしてしまうようです。

どなたか、正しい割り込み待ちの仕方をご教授いただけないでしょうか?

WDMの勉強はごく最近始めたもので、
知識不足な点が多いとは思いますが、宜しくお願いいたします。
902デフォルトの名無しさん:2010/08/07(土) 05:30:44
ソースうp
903 ◆0uxK91AxII :2010/08/07(土) 11:26:55
>>901
>ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
常識的に考えて、ソレはアリエナイ。
queueにでも突っ込んでおいて、STATUS_PENDINGを返して、
指定の状態変化が起きたらcompleteする感じで良いハズ。
904901 ソース 1/2:2010/08/07(土) 11:51:57
ソースは次のようになっています。
やはりKeWaitForSingleObjectの使い方が間違っているのでしょうか。
待ちに入った場合でもWin32アプリの方がフリーズしない方法をご存じでしたら
ぜひ教えてほしいです。

NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{
  //デバイス作成
  NTSTATUS NtStatus1;
  PDEVICE_OBJECT pDeviceObject_Port1 = NULL;
  UNICODE_STRING usDriverName_Port1, usDosDeviceName_Port1;
  RtlInitUnicodeString(&usDriverName_Port1, L"\\Device\\vserial1");
  RtlInitUnicodeString(&usDosDeviceName_Port1, L"\\DosDevices\\COM5");
  NtStatus1 = IoCreateDevice(pDriverObject, 0, &usDriverName_Port1, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &pDeviceObject_Port1);

  //メジャーファンクション登録
  for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
    pDriverObject->MajorFunction[i] = COM_UnSupportedFunction;

  pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = COM_IoControl;

  IoCreateSymbolicLink(&usDosDeviceName_Port1, &usDriverName_Port1);
  return STATUS_SUCCESS;
}

---2/2へ続きます----
905901 ソース 2/2:2010/08/07(土) 11:54:56
---1/2の続き----
NTSTATUS COM_IoControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  NTSTATUS NtStatus = STATUS_NOT_SUPPORTED;
  KEVENT event;
  PIO_STACK_LOCATION pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);

  // バッファポインタ取得
  PCHAR pInputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer;
  PCHAR pOutputBuffer = (PCHAR)Irp->AssociatedIrp.SystemBuffer;

  // バッファサイズ取得
  int InSize = pIoStackIrp->Parameters.DeviceIoControl.InputBufferLength;
  int OutSize = pIoStackIrp->Parameters.DeviceIoControl.OutputBufferLength;
  int dwDataRead = InSize, dwDataWritten = 0, debugstr_i = 0;

  switch (pIoStackIrp->Parameters.DeviceIoControl.IoControlCode) {
  case IOCTL_SERIAL_WAIT_ON_MASK:
  {
    //待ちに入る
    KeInitializeEvent(&event, NotificationEvent, FALSE);
    NtStatus = KeWaitForSingleObject(&event, UserRequest, UserMode, FALSE, NULL);
    KeClearEvent(&event);
  }
  Irp->IoStatus.Information = dwDataWritten;
  Irp->IoStatus.Status = NtStatus;
  IoCompleteRequest(Irp, IO_NO_INCREMENT);
  return NtStatus;
}

簡略化しましたがこれが全貌です。
以上、お時間のある方いらっしゃいましたらお相手していただけると嬉しいです。
906901:2010/08/08(日) 01:04:22
>>903 レスありがとうございます。

KeWaitForSingleObjectでタイムアウトを設定し、
STATUS_PENDINGを返すようにしました。

しかし、自作のWin32アプリからドライバへ、DeviceIoControl関数により
IOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
すぐにDeviceIoControl関数から抜けて次の処理を行ってしまい、
一般に出回っているComPortのドライバと同じふるまい(DeviceIoControl関数から抜けなくなる)
をさせることができませんでした。
907デフォルトの名無しさん:2010/08/08(日) 04:13:26
つーか問題にしてるのは何?
他のシリアルドライバとの違いなのか、
シリアルドライバとして正しい振る舞いがわからないのか。

手っ取り早いのはMS標準シリアルドライバでどう動くのか確認して、同じように実装すること。
挙動を見る限り、その比較対象のドライバはPENDING抜けしてないでしょ。

フリーズする/しないはアプリ側の作りの違いだと思うから、そこは気にしなくてもよさそうじゃね?
908デフォルトの名無しさん:2010/08/08(日) 19:32:35
確かに何を問題にしてるかよくわからんな

KeWaitForで固まるのが困るときはタイムアウト設定したり
スレッド別に用意したりすると思うが、別にドライバに限った話じゃないし

話を聞いた感じだと、
アプリ側でスレッドつくるべきなんじゃないかと思うけどね。

909デフォルトの名無しさん:2010/08/09(月) 21:14:21
返信ありがとうございます。

ドライバと通信を行うWin32アプリは、一般に出回っているシリアル通信ソフトを考えています。
また、参考にしていたシリアルドライバはMS標準のものです。

整理しますと、自作のシリアルドライバとMS標準のものでは次の違いが発生しています。

自作のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
  Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
  アプリ側の処理がそこから先に進まないうえ、
  Win32アプリ(のGUI)がフリーズする

MS標準のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
  Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
  アプリ側の処理がそこから先に進まなくなるにも関わらず、
  Win32アプリ(のGUI)はフリーズしない


これらから、MS標準のシリアルドライバと同じ挙動をさせるには
Win32アプリをDeviceIoControl関数から抜けなくさせ、
なおかつアプリのGUIが固まらないようにしなければならないと解釈しています。

どなたかお時間のある方いらっしゃいましたら
ヒントを頂けると嬉しいです。
910デフォルトの名無しさん:2010/08/10(火) 04:02:52
同じアプリを使っている前提で話すけど

アプリがフリーズしているように見えるかどうかはWindowsから送られてくる
メッセージ処理をしているかどうかで決まる。
だからDeviceIoControlで止まっていたらアプリは必ずフリーズする。

だから>>908のように、「固まって困る場合=メッセージ処理したい場合」として
スレッドやタイムアウトをするべきであると書いた。

よって、MS標準のドライバの場合はOKで、
自作のはフリーズするというのは理にかなっていない。

もう一度アプリ側の調査をよくよくやってみることをおすすめする。
911デフォルトの名無しさん:2010/08/10(火) 14:50:45
WAIT_ON_MASK以外の応答が違っているとか。
受信通知条件が違っているとその辺の処理の扱いが変わってくるからな。
912デフォルトの名無しさん:2010/10/06(水) 20:08:19
USBカメラの解像度設定とかを横取りして、常にある値を指定するような
方法ってありますか。
解像度の変更が出来ないソフトがあって困ってます。
913デフォルトの名無しさん:2010/10/07(木) 10:14:42
フィルタドライバ書けばできるだろうけど
特定ソフトだけの問題ならアプリ側のアクセスをどうにかするほうが楽そう
914デフォルトの名無しさん:2010/10/21(木) 20:54:35
WDK付属のMSVADみたいな仮想デバイスドライバのインストーラを書いてるんだが

非PnPなのでDPInstは諦めてdevconのソースを流用しているんだが、
これだとデバイスを削除した後にドライバ・パッケージがシステム内に残ったままになる
(devconのremoveコマンドとdp_deleteコマンドの中身を組み合わせてる)

誰か、ドライバ・パッケージまで削除できる良い方法を知らない?
DIFxAPIと組み合わせれば何とかなるのかな?
915デフォルトの名無しさん:2010/10/23(土) 00:02:11
誰も返事しないから嘘を承知で。

・\RootのなんとかにするとDPInstでもインストールできなかったっけ?
 と思ってToasterみてたらよくわからんGUIDだった。
 とにかく、Inf/Inxをちゃんと書けばDPInstが使えると思う
・どうしても無理ならDIFxなんとかを改造すれば使える
 DPInstのコアAPIなのでこっちならパッケージのインストール、アンインストールができるはず。

多分DIFxPkgsあたりだろうけど、できるかどうかはわからん。
916sage:2010/10/27(水) 18:12:47
>>914
自己レス
DIFxLIB(DIFxAPI)と組み合わせるたら、Windows XPでそこそこいい感じになった

インストール:
・デバイスを手動で登録する(非PnPなので)
 devconのcmdInstall()のソースを移植、但しcmdUpdate()の呼び出しは削除
※既にデバイスが存在する場合は、この処理はスルーすること
・で、DriverPackageInstall()でドライバをインストール

アンインストール:
・デバイスを削除する。devconのcmdRemove()とRemoveCallback()あたりを参照
 あとEnumerateDevices()あたりも
・で、DriverPackageUninstall()でドライバを削除。

Windows XPだとDriverPackageUninstall()がそこそこいい感じにファイルを削除してくれる
C:\Windows\System32\drivers以下にコピーされたファイルも削除してくれる
(Windows 7以降では削除されないけど、DriverPackageUninstall()の仕様なので)

ただ新しいドライバに更新した後にアンインストールすると、
ドライバ・ストアから最新のドライバ・パッケージは削除されるけど、
古い世代のドライバ・パッケージは全バージョン残ったままになってしまう
DIFxAPIの仕様なんだろうか?
917デフォルトの名無しさん:2010/10/27(水) 21:02:04
>>916
それはDPInstもそうなってるので、仕様だと思う。
DPInstでインストールするとドライバの日付やバージョンで管理するらしく
複数残ったままになる。ただ、アプリケーションの追加と削除に項目として残るので
普通に全部アンインストールすれば問題ない。
918デフォルトの名無しさん:2010/12/12(日) 19:39:33
お願いっ!
windows7上で、magicmouseを動かしたいんで、
ドライバを、書いてくれっ!
現状だと、スワイプが使えないんだ!
919デフォルトの名無しさん:2010/12/12(日) 23:17:36
そういうスレじゃねーから
920デフォルトの名無しさん:2010/12/12(日) 23:19:54
>>919
すまない、
誘導してくれないか。
921デフォルトの名無しさん:2010/12/13(月) 10:49:51
◆こんなソフトウェアつくってください〜Part15〜◆
http://hibari.2ch.net/test/read.cgi/software/127868739

この辺か?
922デフォルトの名無しさん:2010/12/13(月) 18:22:15
>>918
>windows7上で、magicmouseを動かしたいんで、

ドライバ署名の問題もあるから自分で書けばいいじゃんw。
923デフォルトの名無しさん:2011/01/28(金) 22:05:12
スレ違いだったらごめんなさう、質問させてください。

とあるアプリケーションの音を、劣化なしに録音したいのですが、
録音デバイスはマイクとライン入力程度で、まともな手段で録音出来ません。

とりあえず、ollydbgで見てみたら、waveOutWriteは呼ばれず、DSoundから
直接DeviceIOControlが呼ばれており、DirectX系から、ハードウェアが
直接制御されているようです。あと、WriteFileはコールされていませんでした。

ここで、DeviceIOControl 関数の引数inBuffをじゃっかん弄っても、音に変化が
なさそう(?)でした。この関数でバッファ転送してると思ってたので、行き詰まって
しまいました。

なんか勘違いとかしてるんでしょうか?
もしくは、上記の目的のために、別の手段はありませんでしょうか?
924デフォルトの名無しさん:2011/01/28(金) 22:12:29
そういう場合、普通はDirectSoundをフックする
925デフォルトの名無しさん:2011/01/28(金) 23:10:07
>>923
大抵は、サウンドチップの製造元のドライバ入れれば、
ステレオミキサーから録音できるようになる。
926デフォルトの名無しさん:2011/01/28(金) 23:56:41
劣化防止が目的ならばASIOなどで鳴らして光OUTを光INで受けるしか信用ならない
927923:2011/01/29(土) 00:00:14
>>924
COMで実装されてるぽい(たぶん)ので、上手いことフック出来ません。
そもそもCOMもDirectSound詳しくないのですが、COMあたりから
攻めた方が賢いでしょうか?

>>925
そうなんですか!ちょい調べてみます。
納入先にそれを要求するのは厳しいかもしれませんが、検討してみます。
928923:2011/01/29(土) 00:02:31
>>926
確かにそうなんですが、ハード的な制約や導入は出来るだけ押さえたいです。
929デフォルトの名無しさん:2011/01/29(土) 00:28:41
条件の後出しなんて最低だと思いませんか
930デフォルトの名無しさん:2011/01/29(土) 00:46:18
つまりどういうことです?
931923:2011/01/29(土) 01:19:39
>>929
>>930
説明不足ですいません。
このスレの趣旨に基づき、質問を絞ります。

- とあるソフトが発する音を横取りするのが最終目的。win全体の音でも構わない
- フックする場所は、ユーザーモードであればどこまでも構わない。
- 目的のために、ハードウェア導入、もしくはハードウェア依存のドライバ導入など、ハードウェアに関する作業は極力避けたい
- そのソフトをollydbgで覗くと、DSOUNDからDeviceIOCOntrolが頻繁にコールされており、恐らくDirectX系が使われている

現状
- ollydbgにて、DeviceIOControlの引数inBufferをちょくちょく弄っても正常に音が鳴っている「ぽい」し、WriteFileもコールされてないので、詰まった

質問
- 上記の目的は、DeviceIOControlのフックにより達成できるか?出来るのであれば、どういう手法、攻め方をすればいいか
- そもそも、何か大きな勘違いをしていないか

waveOut系で音を鳴らすアプリケーションであれば、恐らくなんとかフック・横取りできる程度のスキルは
あるつもりなんですが、DeviceIOControl とか、低級な制御には余り詳しくなく、また適切なスレも無いために、
このスレでさせて頂いた次第です。

どうぞよろしく願いします。
932デフォルトの名無しさん:2011/01/29(土) 01:22:38
大きな勘違いをしている
933 ◆0uxK91AxII :2011/01/29(土) 02:42:05
dsoundをhookして、実際のunlock呼出前に読み出せば大抵はOK。
934923:2011/01/29(土) 12:45:52
>>924
>>933

Unlock関数のフックで、スタックからwaveが引き抜けそうです。
COMの解析は初めてでしたが、思ったより簡単で助かりました。

ありがとうございました。
935デフォルトの名無しさん:2011/02/04(金) 20:35:45
DDKのサンプルについてるkbdclass改造して、キー入れ替えやりたいんだけどさあ
KeyboardClassServiceCallback内でZwOpenFile使うとブルースクリーンになってしまうだよな。。

kbdclass内じゃファイルアクセス処理は使えないんけ?
(フィルタドライバ内では使えてたんだけど。。)
936デフォルトの名無しさん:2011/02/04(金) 20:37:21
発想が変
937935:2011/02/04(金) 21:19:40
>発想が変
わかってる。

お手軽にキー入れ替えをやってみたくてね。
ファイルにキー入れ替え情報を設定して、それを読み込んで反映できないかなって。。

(KeyboardClassServiceCallback内って書いたけど、これじゃキーが押されるたびに
ファイルアクセスしてしまうから、ドライバ起動時にやるべきか。もちろん出来ればの話だけど)


938デフォルトの名無しさん:2011/02/04(金) 22:08:08
>>935
IRQLと、そのそれぞれのレベルで使える関数の制限について勉強してね
939 ◆0uxK91AxII :2011/02/05(土) 00:24:18
>>937
設定を読み出すなら、ふつーにレジストリ経由が無難。
940935:2011/02/05(土) 02:47:20
IRQLの概念無視してた。
確かにZwOpenFileはIRQLがPASSIVE_LEVELのときのみ使用可能って書いてあるね。。。
DriverEntry内ではIRQLがPASSIVE_LEVELだったので、ファイルの情報を
DriverEntryで取得して内部変数で保持する方法で今回は逃げてみるよ。

とりあえず今自分のやりたいことは出来そうだけど、こりゃ本腰いれて勉強しないと
難しいね。
参考書買って勉強してきま

>>938
>>939
感謝!
941デフォルトの名無しさん:2011/03/05(土) 02:30:07.47
まったくの度素人なんですが、ドライバレベルでマウスを動かしたいんですが
moufltrを書き換えて使えばいいんですかね?
単純なフィルタ機能だけじゃなくボタンを押してない時にボタンを押したりするのを
アプリからの制御でやろうかと思いまして
moufltrはたぶんPS/2用のフィルタになるんだと思うんですが
hidとは違うフォルダにあるんで勝手にそう思ってるだけなんだけども
USBにもこれは適用出来るんですか?
942941:2011/03/05(土) 13:55:54.31
VMwareにXPをインストールしてmoufiltrをそのままコンパイルして
ドライバ更新でインストールしてアッパーフィルタにmoufiltrが出てるんだけど
DebugViewには何のメッセージも出てきません
どこから手をつけていいかも分からない状態なんで
とりあえず動くものを手にいれたいんですがどうしたらいいんでしょう?
943 ◆0uxK91AxII :2011/03/05(土) 15:42:20.92
mouclassのIRP_MJ_READで返すとか。
944デフォルトの名無しさん:2011/03/05(土) 17:15:44.38
添付のhtmみれば、PS/2以外では動きそうもないんだが・・・
945デフォルトの名無しさん:2011/03/05(土) 18:39:00.61
何がやりたいのか良くわからんが、フィルタドライバなんて使わなくても
SetCursorPos(...)やPostMessage(...,WM_LBUTTONxxxx,...)で出来そうに思うが・・・
946デフォルトの名無しさん:2011/03/05(土) 19:16:20.21
俺予想ではMMORPGの自動操縦マクロ
947デフォルトの名無しさん:2011/03/05(土) 19:42:58.48
>>943
入力の生成の部分のことですか?
何か動くものがほしくてmouclassもVMWare上のXP SP3に入れてみて
WPFも解除してデバイス表示で上書き出来てるのは確認しましたが
やっぱりDebugViewにはそれらしいメッセージは出てきません

>>944
VM上ではACIPI\PNP0F13だからPS/2だと思うんですが動いてないから違うんですかね

>>945
今はテスト用にVM上のXPにドライバを入れてますが
普段はVM上で別のOSやアプリを動かしててホストからコントロールするわけですが
なぜかVMはプログラムで生成された入力情報は完全に遮断してしまってるんで
VMの中身が操作出来ないんです
それにドライバの作り方にも興味があるんであえてやってみようかと
948 ◆0uxK91AxII :2011/03/05(土) 20:46:01.07
>>947
checked build
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にそんな使い方があるとは、どうもありがとうございます。