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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0164デフォルトの名無しさんNGNG
>>162
MmAllocateContiguousMemory()ってまずくね?
とにかくマップするだけの関数だったような。
0165デフォルトの名無しさんNGNG
PFNいじるしかない
0166156NGNG
皆さん、レスどうもです。

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

FILE_FLAG_OVERLAPPEDで開いて、非同期通信して
タイムアウトしたら、CancelIo発行
0173170NGNG
>>172
ありが�d。試してみます。
0174170NGNG
>>172
うまくいきました。どーもです。
0175デフォルトの名無しさんNGNG
皆様よろしくお願い致します。
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 ファイルが壊れているのか?とも考えました。
初歩的質問ですがご存知の方ご教授ねがいます。
0176デフォルトの名無しさんNGNG
>>175
Build Enviromentsのメニュー下にあるコマンドプロント使ってる?
BUILDで全部通ったけど
0177175NGNG
>>176
レスありがとう御座います。
Win2k FreeBuildでビルドしています。
javaSDKとか影響していたりするのでしょうか…
原因不明です。
特定のディレクトリのサンプルだけです。
DDKをアンインストールして再インストール後もこの症状が消えません。
sourceファイルもDirsも変更していないのですが…
0178デフォルトの名無しさんNGNG
>>177
>Win2k FreeBuild
でやってみると、確かにエラーが出るね。
XPだと問題茄子
0179175NGNG
本当ですか!
XPで開発環境整えればいいんですね。
ありがとう御座いました。
こんなことでずっと悩んでないで、早く聞けばよかったです。
難解な課題山積みですがすこしがんばってみます。
0180デフォルトの名無しさんNGNG
>>179
違う、違う、Build EnviromentsのXP FreeBuildのコマンドプロンプトだよ。
誤解を招くような書き方をしてすまぬ
0181デフォルトの名無しさんNGNG
エラーからするとint/ddk/wxpにはあるけど
inc/ddk/w2kにはないヘッダーがあるからっぽいね
プログラマなら定義がないとかそんなのはエラーみてなんとかしんさい。
0182175NGNG
>>181
そうですね、これくらいは自己解決レベルですね。
どうも思い込むと発想の転換が下手でして…
コマンドプロンプトがXPなんですか…
0183デフォルトの名無しさんNGNG
WDMデバイスドライバー完全ガイド(上)(下)を
某書店(埼玉県)で見つけて慌てて両方買った俺はヴァカですか?

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

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

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

割り込み関数に入ってくる割り込みが必ずそのPCIボードの割り込みであれば
それで問題はないのですが、仮に共有しているデバイスの割り込みも入ってしまう場合
入ってきた割り込みがどのデバイスが引き起こしたものなのかを判断する方法がわかりません。
どのような方法でそれを判断するのでしょうか?
0189デフォルトの名無しさんNGNG
ここらへんで質問しなされ
http://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi?
0190デフォルトの名無しさんNGNG
>>188
ISRの中で自分のデバイスに訊いてみれば?
0191デフォルトの名無しさんNGNG
>188
PCIボード自体から割り込みの他に「割り込み要因」をフラグかなんかでもらわないとダメでしょ。
要因が無ければ他のデバイスとか。
0192デフォルトの名無しさんNGNG
セットアップクラスを作りますか?
コインストーラを作りますか?
0193デフォルトの名無しさんNGNG
それとも、ア・タ・シ?
0194デフォルトの名無しさんNGNG
すれ違いかもしれないけど、ここの人が分かりそうなので質問します。
エラーセクタのリトライを止めたいのですけど、
どこを設定したらよいですか。

DeviceIOControlくらいは使えます。ドライバか、IDEやSCSIパススルー
なんかでやるんだと思いますけどどこを見ればいいのか見つけられません。
0195デフォルトの名無しさんNGNG
>>194
何がやりたいのかわからないけど、
それはドライバでやりたいの?
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にありますか?
■ このスレッドは過去ログ倉庫に格納されています