【WDM】Windows Driver Model相談室【デバドラ】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG教えてもいいけど俺に何の利益があるの?
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG一般的にはいくつにしてるの?
0009デフォルトの名無しさん
NGNGUSBのドライバの話?
00108
NGNGそうです。bulkusbベース
00128
NGNG転送速度に影響したんで思いっきり増やしたんですが大き杉ですかねぇ???
00139
NGNGニュースグループ検索でこんなのを見つけました。
http://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&oe=UTF-8&c2coff=1&selm=32391b3b.0304140557.22779591%40posting.google.com
うちでは4kBより増やしてはだめという噂が一時期出回っていました(笑)
昔計ったときは、64kBでも秒間1.1MBぐらいは出てました。
転送するデータ自体が最大で秒間1MBだったので、そこで止めてしまったけど。
00148
NGNGありが�dございまつ。感激(゜ーÅ)ホロリ
0015デフォルトの名無しさん
NGNGプリンタドライバのサンプルで良いのがないかな?
2KDDKにはほとんど情報ないし、NT4DDKは既に公開されてないし
0016デフォルトの名無しさん
NGNG昨日、本屋でみつけたこの本にWinDBGの使い方があった。
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1841-9
0017デフォルトの名無しさん
NGNGWindows98とかのころは、たまに64KBでもダメな場合があったから
カナーリ古いハードまで考慮するなら、4KBが一番安全だったよ。
なので、レジストリで切り分けたりしてたけど。
1MBでも最近はできるんだ。。
0018デフォルトの名無しさん
NGNG買うって外注さんがいるんで見てみて良かったら、うちでも買ってもらいまつ。
001918
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG巨大なソースというかインターフェース定義しなきゃならないんだよね。
なんでこんなことになったんだろう。
WindowsからWDMを廃棄できないものか。
0023デフォルトの名無しさん
NGNG002520
NGNG0026デフォルトの名無しさん
NGNGその、ノートPCのシリアルがCOM2ってことはないよね?
002720
NGNGんなこたーないでつ。
・通常期同時にCOM1で通信確認。
・/debug起動時にデバイスマネージャからCOM1が消滅。でもWinDbgには繋がらない。
こんな感じですた。
0028デフォルトの名無しさん
NGNGMDLを受け取って自分でメモリにRead/Writeするサンプルって無いですかねぇ?
0029デフォルトの名無しさん
NGNGKeWaitForSingleObject(...timeout)とかではCPUは開放されないんでつかねぇ???
(´-`).。oO(もっとバックグラウンドでやんわり動いて欲しいんでつが。。。)
0030デフォルトの名無しさん
NGNGスレッドの最初で KeSetPriorityThread 呼び出してプライオリティ
落としてもダメってことですか?
0031デフォルトの名無しさん
NGNG確認だけど
1) ExQueueWorkItemのWORK_ITEM_ROUTINE内でPsCreateSystemThreadを読んで
スレッドを起動し、そこでポーリングをしている。
2) ExQueueWorkItemのWORK_ITEM_ROUTINE内でポーリングしている。
どっち?
003229
NGNG>30
あんま変わんなかったような。。。
>31
2でつ。PsCreateSystemThread()が必要でつか?
003331
NGNGWORK_ITEM_ROUTINEはとっとと処理を終わらせるように書かなければ
ならなかったはずです。ポーリングやKeWaitForSingleObjectなど
時間がかかる処理はまずいかと思います。
PsCreateSystemThreadでスレッドを作る、
もしくはタイマDPCを使うとかになるかと思います。
003429
NGNGなるほど。スレッド作ってみまつ。
(´-`).。oO(スレッド内でCompleteIrp()するのはアリでつか?)
003529
NGNG(´-`).。oO( 軽くなりましたですー。ありが�dございますた。 )
0037デフォルトの名無しさん
NGNG003829
NGNG(´-`).。oO( 気を付けますです。。。今日見直してみまつ。 )
0039デフォルトの名無しさん
NGNG/ ´_ゝ`)すいません、まだいろいろ作ってるので保守させてもらいますよ
| /
| /| |
// | |
U .U
0040デフォルトの名無しさん
NGNG//MmProbeAndLockPages(mdl,KernelMode,IoWriteAccess);
//va=MmMapLockedPages(mdl,KernelMode);
//pa=MmGetSystemAddressForMdlSafe(mdl,HighPagePriority);
//va=MmGetMdlVirtualAddress(mdl);
004140
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG根本的質問なんだけどもさ
あるPCI PnPデバイスがすでにバスドライバによって物理アドレスマッピングされて動いてるとして
それ用のファンクションドライバを作りたいんだけど,どーすればいいの?w
というのも,カーネルドライバとか作って dll経由アクセスをしようとすると
実行ファイルと同じディレクトリにあれば検索してそれを使ってくれるけど
NT系だと Admin権限ないと駄目じゃないですか。
#サービスコントロールマネージャが Adminじゃないと駄目?
なので,OS起動時にバスドライバとセットで登録しておきたいんだけど
どーすればいいんでしょうか。
書籍としては
WDMデバイスドライバプログラミング完全ガイド上下
Microsoft WDMプログラミング
の2冊を揃えましたがイマイチ判らず
0044デフォルトの名無しさん
NGNG失敗させずにマップさせるにはどうすればいいんでしょうか?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG004745
NGNGInterrupt ReQuest Levelの略。
主に以下のものがある。(優先度の高い順)
DIRQL 優先度の高い割り込み(ハードウェア割り込み?)
DISPATCH_LEVEL(≒APC_LEVEL) 優先度の低い割り込み(ソフトウェア割り込み?)
PASSIVE_LEVEL スレッド
ルーチン毎にどのIRQLで呼ぶことができるのか決まっていて
それはDDKのドキュメントに書かれてある。
あとKeGetCurrentIrql()で、どのIRQLか取得することができる。
004844
NGNG自分でcreateしたMDLを使って、・・・・
スマソ ソース手元に無いんで明日書く鴨。
004944
NGNGMmProbeAndLockPages()が失敗するのは未だ謎。
0050デフォルトの名無しさん
NGNGttp://wdtl.sourceforge.net/
0051デフォルトの名無しさん
NGNG発生して困っています。
○ 前回ReadFileで読み取ったデータの最後の64バイトが、今回読み取ったデータの
先頭の64バイトとダブっている。
○ 読みとったデータの65バイト目から64バイトが、先頭の64バイトとダブっている。
これってBulkUsbの「仕様」でしょうか? ちなみに次の修正はおこなってあります。
http://support.microsoft.com/default.aspx?scid=kb;ja;414526
005251
NGNGまず、>>51で書いた「64バイトダブる」っていうのは私の勘違いでした。
どうもUSBデバイスから送信されたはずのデータが256バイトの倍数で
失われることが時々ある、というのが正しい事実のようです。
それも、ReadFileと次のReadFileの間でデータが失われる、というのでは必ずしもなく
一回のReadFileで読んだデータの中に、256*Nバイトの長さで失われた部分が
発生することがあるようです。
で、どうして256の整数倍でデータが失われるのかを考えたのですが、
256バイトというのはUSBデバイスの送信リングバッファの容量なので
(デバイスのファームは私が書いたものです)恐らくReadFileが完了するのに
異常に時間がかかることが時々あり、そのためにその間にリングバッファが
1(N)周してしまっているのではないかと思うのです。
なにかこの問題に対する対処法をご存知ないでしょうか?
ちなみにデータの転送レートは、だいたい10KByte/sec程度です。
0053デフォルトの名無しさん
NGNGxpDDKのやしとかはどうなの?
0054デフォルトの名無しさん
NGNG>ReadFileが完了するのに異常に時間がかかることが時々あり
どうもここがひっかかりますね。
通常異常に時間がかかるって場合はUSBバス上ではNAKになっていると
考えられますが、そうなのでしょうか。
その場合は、ACKを適切に出せていない可能性がありますけど…。
(ファーム側でACKを出しているつもりが実は出していないて、
データを上書きしてからACK設定を行っているなど)
当方も決して慣れてはいないので、間違ってたらごめんなさいです。
005551
NGNGXPDDKは手に入れてないので解らないです。
本当は試してみたいのですが。。
>>54
レスありがとうございます。
>通常異常に時間がかかるって場合はUSBバス上ではNAKになっていると
>考えられますが、そうなのでしょうか。
デバイスのファームでは、送信するデータがないとき送信要求が来たときは
NAKを返すようにしています。(というか、USBコントローラの石が勝手に
NAKを返します)
これがマズいのでしょうか?USBデバイスでは1msecに約10バイトのデータを
256バイトのリングバッファに書いているので、もしそうだとすると、デバイスから
NAKが返ると最低でも26msec以上ReadFileの処理が固まっている(?)ことに
なりますが、そんなことってあるんでしょうか。(実際には、酷いときには256*3 =
768バイトのデータが抜けることがあります。)
NAKがまずいとするとSTALLを返すか、0パケットを
返すかのどちらかにしないといけないのでしょうか。
>その場合は、ACKを適切に出せていない可能性がありますけど…。
>(ファーム側でACKを出しているつもりが実は出していないて、
>データを上書きしてからACK設定を行っているなど)
ReadFileって実体はバルクINトランザクションなので、デバイスがACKを
返すことはないのではないでしょうか。
005654
NGNG>返すかのどちらかにしないといけないのでしょうか。
それは無いと思います。
NAKが続くこと自体を修正する必要は無い筈です。
お話を伺う限りですが…
デバイス側でACKにする制御を行っていると思いますが、
何らかの理由でACK制御が出来ていない場合がある可能性は
無いでしょうか。
(デバイス側のファームウェアの話です)
ACK制御ができていない状態で、バッファに次のデータを
上書きすると仰るような症状になるのかなぁーと思った次第です。
#あまり自信はありません。間違ってたらごめんなさいです。
005751
NGNG>ACK制御ができていない状態で、バッファに次のデータを
>上書きすると仰るような症状になるのかなぁーと思った次第です。
ホストからのデータ要求(INトランザクション)では、ACKを返すのは
ホストの筈なので最初意味がわからなかったのですが、言わんとされていることは
こういうことでしょうか?
つまり、一旦エンドポイントを送信可能な状態にしたら、ホストからACKが帰るまでは
エンドポイントに書き込みはしないほうがいい、ということでしょうか?
これは、確かにそうみたいです。明らかにエンドポイントがオーバーフローしていない
場合でも、ACKが返る前に書き込みを行なうとデータが失われることがあるようです。
(今私が使っている石がたまたまそうなのかもしれませんが)そのために、直接石の
エンドポイントにデータを書くのではなく、石の外に256バイトのリングバッファを
設けて一旦そこに書いておいて、ホストからACKが返ったら
エンドポイントに転送するようにしています。
ちなみに使っている石はこれです。
http://www.national.com/pf/US/USBN9604.html
なんかデバドラの話じゃなくなってきてすみません。
0058デフォルトの名無しさん
NGNG他社の石はreadyな限りガンガン書き込んで無問題だったけど。
005951
NGNG普通FIFOってそういう物のような気がしますよねえ。
ですが、1KByte/sec程度のデータの送信テストをしてみると、
>>57に書いたように一旦バッファリングしておいてACK確認後FIFOに書き込むと
うまく受信できたのですが、タイミングお構いなしで直にFIFOに書くと時々
データが欠けるんですよ。
まあ、あくまで私が試した限りにおいては、と言うことなので
私の石やBulkUsbの使い方がスットコドッコイな可能性も多いにあります。
006058
NGNGうちが使ったコントローラは2段FIFOだったんで,空いてる方に書き込み可能だったです。。。
あとはFIFO fullだかready処理の確認を入念に行うですかねぇ。。。
0061デフォルトの名無しさん
NGNGっても、WDMの基本構造のみだけど。
MS-DOSからWindowsのハードウェアサポートの歴史を書いて、
筆者が使ってるというWDMの雛形を示して、
それを使った単純なドライバと単純なアプリケーションを
IOCTLで連携させる、みたいな感じ。
入門者向けですね。 ドライバ書籍を買う金はない、
DDKドキュメントじゃ基本構造部分からしてよくわからん、
DDKに付いてるようなやつじゃなく、とってもプレーンなサンプルが欲しい。
そんな人は買っても良いかも。
MPEG4、USBit、暗号の歴史などなど、盛りだくさんの¥1,200(税込)
さあ、お申し込みはこち(以下略
0062デフォルトの名無しさん
NGNG>APIから知るWindowsの仕組み 第20回
>デバイスドライバとプラグ・アンド・プレイの仕組みを学ぶ
今回は概略とプラグ&プレイ、次回でサンプルドライバを
作るとかいう内容だったよ。
■ このスレッドは過去ログ倉庫に格納されています