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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0463デフォルトの名無しさん2007/07/08(日) 14:14:45
Filemonのソースを解析したいんですが、ソースの内容がわからないです(´・ω・`)


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

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

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

いずれ全てのドライバが署名必要となるのか・・・orz。
04704682007/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参照。
他に知りたいことがあれば、具体的に書いてもらえば可能な範囲で答えるが・・・・
04714692007/08/02(木) 17:45:32
>>470
>方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?
やめるという情報はないでつ。むしろ、32bitとかも求められるとなると、
いずれSP3辺りでXPなんかもそうなるのかなと・・・。XPのサポートが
延びてるしまだまだ使われるはずなので。

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

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

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

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

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

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

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

(1)は説明不要でしょう。
(2)は私がでは無く客先の担当者が苦労したのですが、でかい会社のため、法務・
総務・購買などに(1)が必要だったようで、電子証明書を購入だけで2ヶ月か
かりました。
04744682007/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がお勧めです。


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

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

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

どなたかご教授いただければ幸いです。
0477デフォルトの名無しさん2007/08/14(火) 09:29:51
ブロックしたらだめ。完了ルーチンなり割り込みなりを設定して
「まだ読み出すべきデータがない」と言ってすぐに戻る。
0478デフォルトの名無しさん2007/08/14(火) 11:35:50
読むべきデータがないならSTATUS_PENDINGでいったん返しておいて、
データができたときに割り込みがあるなら、それをトリガにしてIRPを完了かなぁ。
割り込みなくてポーリングでしかわからないなら、ワーカースレッドを起動して
スレッド内でデータができたらIRP完了するのかな。
0479デフォルトの名無しさん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
入門書としては少し難しいが、実装上のノウハウがひととおり書かれている。
04804762007/08/14(火) 13:59:27
>>477
>>478
>>479
ご回答ありがとうございます!
一応Linux上でのドライバ開発の経験はあるもので、
Linuxだとディスパッチルーチンに相当する部分でスリープしてしまって良く、
それと同じようなことをしようとあがいてました。
もっとWindowsでの事情をちゃんと考慮すべきでした・・・

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

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

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

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

キャッシュマネジャがすごくイヤな感じだった。
04874812007/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、ユーザーが意識していないタイミングで、リクエストがばんばん発生するので
地道に解析しながらやるしかなさそうです。
0488デフォルトの名無しさん2007/09/05(水) 18:13:06
UndocumentedつーかIFSKITはDDKとは別に購入しなければならなかったんじゃないかな?

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

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

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

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

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

XPDM,WDDMは共存できない。ってことらしいんだが、WDDMの情報がまったくでてこない。
参考になりそうなサイトしっている方いたら教えてくれませんか?
0496デフォルトの名無しさん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...のようになるはずなんじゃないかと。
0497デフォルトの名無しさん2007/09/28(金) 04:13:06
bulkusbと書いてあるからと言って、
中身がDDKのbulkusbそのまんまとは限らないと思う・・・

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

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

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

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

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

ここまでが下準備で

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

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

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

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

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

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


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

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

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

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

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

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



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

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

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

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

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

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

Virtual Audio Cableのようなソフトウェアオンリーの仮想オーディオドライバを作ろうと思うですけれども
ユーザモードのアプリからカーネルモードのPortCls KSフィルタの中のミニポートのインスタンスを見つけ出して
直接通信するにはどんな方法を使ったらよいですか?
0522デフォルトの名無しさん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のサンプルとドキュメント見て
やるしかないと思うが、他にいい文献など知ってたら教えて欲しいぐらいです。
0523ゆ? ◆RmDQN/V/.. 2007/11/07(水) 16:57:08
|;∵) うをををッ為になりますッ!てゆうかレス早ッ

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

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

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

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

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

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

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

まずは自分で貼ったURLのサイトを100回読むことだ。
0531チラシ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
0532デフォルトの名無しさん2007/12/30(日) 01:39:29
ISRの処理の中から、IoRequestDpcでDPC呼んでるんですけど、
それから500msくらい後から、DPCの処理がされています。
漠然とした質問ですが、原因をご教授ねがえないでしょうか?

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

音声でメッセージを伝えよう
http://recwav.dip.jp/M_RECWAV_Media.asp?Speech=1221925210420080106131222
0535デフォルトの名無しさん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コントローラがなくても可能なものでしょうか?

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




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

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

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

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

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

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

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

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

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

過疎杉
0559デフォルトの名無しさん2008/02/02(土) 18:48:07
既にフリーのものがあるのにご苦労なことです
0560デフォルトの名無しさん2008/02/02(土) 18:57:37
あるなら教えて下さい
05615562008/02/02(土) 19:05:40
2chにただ>>559とだけ書かれるとあるなら探さないといけないし
実は嘘で無いかもしれないから困る
0562デフォルトの名無しさん2008/02/02(土) 20:18:06
信じずに探さなければいいじゃない
■ このスレッドは過去ログ倉庫に格納されています