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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0196デフォルトの名無しさんNGNG
>>195
いや、分からないのです。出来ればVC、VBアプリからやりたいです。
0197デフォルトの名無しさんNGNG
>>196
エラーセクタのリトライってソフトでやってるのかね。
0198デフォルトの名無しさんNGNG
自作機器からWinへデータを送りたいのでZMODEMしたいのですが、
ZMODEMの時代が終わったっぽいので、USBに切り替えたいんでつ。

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

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

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

はつみみです。
0203198NGNG
わりきって、普通にWDMでファイル転送プログラムを作った方が楽かな。
0204デフォルトの名無しさんNGNG
WDMってサウンドかと思った
0205デフォルトの名無しさんNGNG
>>201
もしかして、
USB⇔シリアル変換モジュール
でつか?

確かに見た目USBだから良サゲ。
0206デフォルトの名無しさんNGNG
みんな志が低いね
0207デフォルトの名無しさんNGNG
WDM/USBを作るのは簡単でつか?

さらに、Linux版も同時開発できまつか?
0208デフォルトの名無しさんNGNG
でつ厨には無理でつ。
0209デフォルトの名無しさんNGNG
>>207
BULK転送でデータを送受信するくらいのものなら、
DDKのbulkusbをほとんどそのまま使える

linuxの方は、ここだとスレ違いだが、WDM書くより簡単に思えた
0210デフォルトの名無しさんNGNG
>linuxの方は、ここだとスレ違い

そんなことないYO!

WDMとLinuxと同時開発方法とか教えてYO!
0211デフォルトの名無しさんNGNG
>>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/
0212198NGNG
ちょっとスレ違いなんですが、普段ドライバ作られてる方の意見を聞きたくて。。。

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

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

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

と、独り言ですた。
0213デフォルトの名無しさんNGNG
シリアル <-> Ether 変換器使えば?
0214198NGNG
>>213
やっぱIP設定があるのでUSBにします。

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

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

出来上がりはバリバリのUSBが良いけど、中の人がZMODEMであれば開発楽だなー、と。
0218デフォルトの名無しさんNGNG
USBとRS-232Cとプロトコルがごっちゃになってそうだ
0219デフォルトの名無しさんNGNG
ZMODEMってどんなモデム?
0220デフォルトの名無しさんNGNG
Driver Verifier使ってる?
0221デフォルトの名無しさんNGNG
本体のUSB1.1コネクタに直結すると問題ないのだが、
ハブを経由するとデータが落ちてしまうことがある。
これってハブが悪いって断言していいのだろうか?
装置側が悪いってこともあるの?
0222デフォルトの名無しさんNGNG
>221
他の機器が動くなら、御社に難あり。
0223デフォルトの名無しさんNGNG
意外にWDM/USBって難?
0224デフォルトの名無しさんNGNG
>>223
難しいのを意外だと思う奴がいることが意外。
0225デフォルトの名無しさんNGNG
USBマスストレージドライバについて、DDKのサンプルソースの中で
実際にSCSIコマンドを作成して、コマンド転送している部分が載ってる
ソースはありますか?

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

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

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

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

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

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

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

0229デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/ASIN/4774116661/
0230デフォルトの名無しさんNGNG
>>228
ext3ifsってのがあるよ
0231デフォルトの名無しさんNGNG
ごめんext2ifsね
0232デフォルトの名無しさんNGNG
>>228
フィルタドライバならDDKだけでいけるよ。
Filemonのソースを見れ。
0233デフォルトの名無しさんNGNG
KeFlushSingleTb()の引数と戻り値の内容を知りたいのですが
ご存知の方、教えてください。
0234デフォルトの名無しさんNGNG
>>229
フィルタドライバ実践の書籍は手元にあるので,読んでいるところです.

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

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


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

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

どなたか、宜しくお願い致します
0236235NGNG
すいません、情報不足でした。

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

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

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

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

0239235NGNG
>237さん
はい、Mass Storageの話で、紹介頂いた仕様書も
一応目を通しています。

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

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

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

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

長文の上、説明下手で申し訳ありません。
0240デフォルトの名無しさんNGNG
ファイルシステムの更新もPC側でする必要があるはず
0241デフォルトの名無しさんNGNG
0242デフォルトの名無しさんNGNG
return STATUS_UNSUCCESSFUL;
0243デフォルトの名無しさんNGNG
>>235
そもそも「ファイルシステム」とは何か、ということを調べるといいと思う。
ちゃんと。
0244デフォルトの名無しさんNGNG
「USBハード&ソフト開発のすべて 」に付属しているUSBのサンプルのドライバは有益でつか?
それか、m$が配布してるバルクUSBサンプルの方が良いで塚?
0245デフォルトの名無しさんNGNG
うちは最新DDKのBulkUsbを使った。
0246デフォルトの名無しさんNGNG
詳細キボンニュ>>245

ちょっと処理足すだけでOKなんでつか?
0247デフォルトの名無しさんNGNG
>246
転送単位が256B単位になっててHi-speedで使えんかったから増やしてみた。
あとは、もうちょっと速くするための工夫を挿れてみたとか。。。
0248デフォルトの名無しさんNGNG
サンクス>247
本読んでみたら、Bulkてのが基本的なパケット通信みたいね。
とりあえず、BulkUsbのソース印刷してみまつ。
0249デフォルトの名無しさんNGNG
DDKをインストールしたのに、BULKUSB(というフォルダやファイル)がありません。
どうしたことでしょう。
0250デフォルトの名無しさんNGNG
>>249
インストールのチェックで抜かしたんじゃない?
0251デフォルトの名無しさんNGNG
サンクス>>250
インストールし直して入りますた。
0252デフォルトの名無しさんNGNG
微妙にスレ違い&FAQかもしれませんがここで質問します。
WindowsNT/XPで、LPT1をCreateFileしてDeviceIoControlしたいのですが、
なにをやってもロジアナに反応しません。入り口でつまづいてます。
標準ドライバとかBIOSとか、その辺の設定に問題があるのでしょうか?
0253デフォルトの名無しさんNGNG
ドライバ作るのに勉強になるサイトってある?(日本語のページ)
サンプル位しかないのかなぁ
0254デフォルトの名無しさんNGNG
>>253
これぐらいしか知らない
http://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi?
0255デフォルトの名無しさんNGNG
>>254
情報交換系ですか
勉強するためのサイトがよかったですが、掲示板でも見ていれば勉強になりますね
ありがとうございます
0256デフォルトの名無しさんNGNG
保守システム起動
0257デフォルトの名無しさんNGNG
WindowsXPでプリンタドライバを作ろうと思ったのですが、サンプルからつまずいてます
印刷結果を画像出力したいのですが、どのサンプルを見ればよいのか教えてください
XP_DDKの内容でお願いします。
0258デフォルトの名無しさんNGNG
DDKはこのへんからゲトしる
ftp://ftp.atfile.com/download/WindowsDDK/
http://club.shelek.com/viewfiles.php?id=2
0259デフォルトの名無しさんNGNG
>>258
2003DDKはないようですね
0260デフォルトの名無しさんNGNG
そういやそうだな。
それは注文するしかないってことか。
探せばありそうだが。
0261デフォルトの名無しさん05/01/28 11:46:16
USB通信のサンプルは無いでつか?
0262デフォルトの名無しさん05/01/28 14:50:20
>>261
質問が漠然としすぎです
0263デフォルトの名無しさん05/01/30 17:37:26
Win32のKe386SetIoAccessMap()、Ke386QueryIoAccessMap()、
Ke386IoSetAccessProcess()

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

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

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

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

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

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

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

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

ドつぼにはまってます。

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

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

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


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

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

俺はあまり詳しくないから、断言できないが・・・。
0278デフォルトの名無しさん05/03/05 18:22:28
SCMじゃダメなのか
0279デフォルトの名無しさん05/03/06 16:06:33
Filemonは、infファイル使ってないよ。
自力でドライブのオブジェクトを取得して、アタッチしてる。
028027905/03/06 16:10:26
どーぞ
ttp://web.archive.org/web/20021216072140/http://www.sysinternals.com/files/FILESRC.ZIP
028127205/03/07 13:56:49
>>279
ありがとうございます!

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

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

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

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

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

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

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

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

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

1回インストールすれば、別のポートに挿しても自動的に認識してくれればいいんだけど・・・
0294デフォルトの名無しさん05/03/11 22:33:05
infファイル内にオプションがある
詳細は忘れたけどDDKのドキュメントに書いてある
0295デフォルトの名無しさん05/03/12 06:57:46
>>294
レスありがとうございます。
もっぺん、ドキュメントとにらめっこしてみます
■ このスレッドは過去ログ倉庫に格納されています