【WDM】Windows Driver Model相談室【デバドラ】
レス数が950を超えています。1000を超えると書き込みができなくなります。
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回
>デバイスドライバとプラグ・アンド・プレイの仕組みを学ぶ
今回は概略とプラグ&プレイ、次回でサンプルドライバを
作るとかいう内容だったよ。
0063デフォルトの名無しさん
NGNGなんで流行ってるんだろ。
スレ違いだけど、その日経の連載は結構良いな。
単行本化して欲しい。
0064デフォルトの名無しさん
NGNGちょっと見たけど、ほんのちょっと表面かすった程度のことしか書いてないじゃん。
あの程度の情報はwebですぐ手に入るよ。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG「ようこそBlueScreenへはワラタw
0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGの939で質問したのですが、まともなレスを頂けませんでしたので
こちらで再度質問させて頂きます。
メモリ上に決まったサイズの領域を確保して、それをドライブの
ように扱う(RAMディスク)を作るにはDDKを使用するのが一番楽なので
しょうか。
0072デフォルトの名無しさん
NGNGリンク先のような物を自分で作ってみたいと考えております。
このような物を作る場合、DDKを使うのが楽なのでしょうか。
0073デフォルトの名無しさん
NGNGDDK 「でも」楽に作れます。
世界中に存在する全ての Windows 用ドライバ開発環境を知っているわけではないので、
「一番楽」かどうかはわかりません。
0074デフォルトの名無しさん
NGNG007570
NGNGMSDNがあるので、DDKでやってみようと思います。
やはりドライバを書いて、あたかも「ドライブが在るように見せる」
という感じになるのですよね?
私はWeb系の開発ばかりなので、正直ドライバを作るような高度な
事は避けたいと考えていましたが、そうもいかないですよね。
作ろうと思ったのは、仕事絡みでは無いので時間が在るのがいいです。
0076デフォルトの名無しさん
NGNGミ・д・ミ <ほっしゅほっしゅ!
"''''''"
0077デフォルトの名無しさん
NGNGNT4.0DDKにRAMDISKのサンプルあるよ
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG利用規定みたのなかった?
0082デフォルトの名無しさん
NGNGあったの?
じゃぁ探してみようかな。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGネットに落ちてるのはこれぐらいかな
98DDK
http://download.microsoft.com/download/win98SE/Install/Gold/W98/EN-US/98DDK.EXE
NT4DDK
ftp://ftp.atfile.com/download/WindowsDDK/WinNT/nt4ddk.zip
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNGありがとう。NT4DDKはダウンできなかったです。
2000とかはMSDNに入らないとだめなんですね。
0088デフォルトの名無しさん
NGNGスレ一覧をDDKで検索
0089デフォルトの名無しさん
NGNGこれだな
WindowsDDK各種についてのスレ
http://pc2.2ch.net/test/read.cgi/tech/1049116134/
NT4DDK
http://download.microsoft.com/download/winntwks40/Install/1998/NT4/EN-US/nt4ddk.zip
XPDDK
http://shelek.org.ru/ddk/DDK_XP.ISO
http://windriver.ssarang.net/pds/DDK_XP.ISO
0090デフォルトの名無しさん
NGNGありがとう。
これで W*lter On*y を超えられます。
0091デフォルトの名無しさん
NGNG以降、DDKはWEBで公開するのかと思っていたんだけど、なんで方針転換したのだろう。
ところでXPDDKって円盤自体はタダで送料のみ掛かるってことみたいだけど、
DDKだけ送ってもらうとどのぐらいかかるんでしょう?
0092デフォルトの名無しさん
NGNG青くならないようにいつも祈ってる。
0093デフォルトの名無しさん
NGNGそもそも住所の書き方からしてわからないんだよな。
http://www.microsoft.com/whdc/ddk/ordernetddkcd.mspx
0094デフォルトの名無しさん
NGNGドライバのプログラミングの本とかにwindbgの大体の使い方が載ってる。
できるなら、開発用とデバッグ用にパソコンが2台あったほうがいい。
デバッグ用はVmwareでも代用できる。
windbgの最新バージョンは
http://www.microsoft.com/whdc/ddk/debugging/installx86.mspx
あとシンボルが必要だから
http://www.microsoft.com/whdc/ddk/debugging/symbols.mspx
自分のドライバのシンボルも作っておくことが必要。
0095デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1049116134/1 によると $25
0096デフォルトの名無しさん
NGNG日本MSから送ればいいのに。
0097デフォルトの名無しさん
NGNGDDKSuite3が199ドル+送料で入手可能。
1月中旬に頼んで2月頭に届きました。
0098デフォルトの名無しさん
NGNGWindows Server 2003 DDKは送料だけじゃないの?
0099デフォルトの名無しさん
NGNG$25
>>92
いたるところにDbgPrintを埋め込むしか・・・
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNGドライバ:誰でも作れるというわけでもないし、作る奴も限られる → 何か不便なまま
だったりして。
>>92に関することで
青画面になるような例外って、
__try {
}
__except(){
}
でカバーできなないんかな?
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG>>16
DbgPrintを簡単に見たいなら、
ローカルとLAN対応なDbgPrintビューア
http://www.sysinternals.com/ntw2k/freeware/debugview.shtml
あと、青画面は例外ハンドラで防げるようですね。
//何も無いドライバ
#include <ntddk.h>
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
__try {
DbgPrint("in try\n");
//クラッシュ
IoDeleteDevice(NULL);
}
__except(EXCEPTION_EXECUTE_HANDLER) {
//例外が発生した
DbgPrint("in except\n");
}
DbgPrint("end\n");
return STATUS_SUCCESS;
}
0104デフォルトの名無しさん
NGNG他の関数でも使えるのかな?
0105デフォルトの名無しさん
NGNGhttp://www.osr.com/ddk/kmarch/other_23zb.htm
0106デフォルトの名無しさん
NGNGSoftEtherの作者は4冊のようだが。
http://www.softether.com/jp/journal/pic/IMG_1855.jpg
おれも、この4冊持ってるけど。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGペーパーでゴールドな漏れには関係なさそうだな
0109デフォルトの名無しさん
NGNGぜんぜん関係ねーだろw
0110デフォルトの名無しさん
NGNGそのくせやたら高かったりするから自費で買おうとは思わない。
自分にはサンプルソースを基点にリファレンス辿ってった方が遥かに理解しやすい。
0111デフォルトの名無しさん
NGNG月刊ドライバーのことかー!!!
0113デフォルトの名無しさん
NGNGもちろん、「月刊ドライバー」以外で。
「トランジスタ技術」は内容によっては出ることもあるみたいだが。
0114デフォルトの名無しさん
NGNG0115デフォルトの名無しさん
NGNG>>61- みたいに単発記事は極稀にあるけど、大抵は概要をかする程度
需要もほとんど無いし
0116デフォルトの名無しさん
NGNGところでWMDがどういう言いまわしの頭文字か気になるな。
普通に考えたらMDWのような気がするんだけど。Weaponが先頭に来るのか?
0117デフォルトの名無しさん
NGNGWeapons of Mass Destruction
0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG肝心の内容はどうだったんだ?
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGWindows/System32 にブチこんで、
レジストリに登録して
リブートして、というのはやり方がわかるんですが、
/Program Files/Foo/Foo.exe をダブルクリックすると
/Program Files/Foo/foo.sys を実行する、
という風にしたいんですけど。
0122デフォルトの名無しさん
NGNGつまり、/Program Files/Foo/Foo.sys をレジストリに登録して、
なんかのAPIをコールして、、、というのではなく、
Err = WinNT_Load_SYS_Driver( char *path);
みたいなのがほしいんですけど、可能ですかね。
0123デフォルトの名無しさん
NGNGドライバのインストール、アンインストールできるけど。
レジストリの追加、削除は勝手にやってくれるよ。
0124デフォルトの名無しさん
NGNG変更されてしまうんですかね。
たとえば、ドライバ立ち上げ → 青画面即死 → OS再起動、
という手順を踏んだとき、レジストリには前のドライバの残滓が残っていそうで、
それがいやなんですよね。
とにかく、レジストリってトラブルの巣窟(2chではスクツですか?)なんで、
極力いじりたくないんですよ。
0125デフォルトの名無しさん
NGNG> 青画面即死
それはバグがあるだけ
> レジストリってトラブルの巣窟
それは理解が足りてないだけ
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG青画面がでれば、レジストリは残りますね。
でも、青画面を出しそうなコードをDriverEntry()に置かなければ
再起動時にインストールされても問題はないでしょ。
0129デフォルトの名無しさん
NGNGXPでAureal3D機能が制限されてしまったサウンドチップ「Vortex2」の
ドライバを操作して、XPでもAurealを使えるようにしようと思ったけど、
動作が不安定になったので、挫折しました・・・・(涙
上手い人なら動作不安定にならないドライバが作れるんですかね・・・?
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNGプリンタドライバのプロパティで「紙サイズ」をユーザ指定にしたいんですが、
ヘルプファイルのサンプル通りにカスタマイズ指定の紙サイズエントリーだけをGPDに書くと、
「ユーザ指定サイズ」と表示されないんです。
数値を入れた定型サイズ指定のエントリーを加えると、
プロパティで「ユーザ指定サイズ」が選択出来るようになるんですが、
これで良いのでしょうか?ユーザ指定でなく入れた数値のサイズになってしまう様子なのですが・・・。
どなたかご教授願います。
0133デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/ASIN/4756133959/
アマゾンにエントリしてます。
どなたか、お売りください m(_ _"m)
0134デフォルトの名無しさん
NGNG外注さんがうちに持ち込んでるけどいい本だよ。
自分も購入依頼出したけど買えんかった。
0135デフォルトの名無しさん
NGNG(;´Д⊂)泣けてきたyo
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNGこれってWriteFile()側の仕様でつか?63MBは無問題でした。
0138デフォルトの名無しさん
NGNGこういうのこそ電子書籍で復活してほしいねー
技術書って案外需要あるんじゃないだろうか。紙っぽい利便性を持ちつつ検索出来ればかなり便利なんだけど
0139デフォルトの名無しさん
NGNGこれの原書って
http://www.amazon.co.jp/exec/obidos/ASIN/0201695901/
これ?
0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG逆にCQから出ているWindows2000デバイスドライバ入門は手っ取り早く理解するには良かったよ。
なので完全ガイド上下が本棚で眠っていて開きもしないけど,
そのうち必要になるかもしれないなぁと手放す気にはなれない。
技術書ってそうだよね。今はいらないと思っても将来必要になったり。
見つけたときに押さえておくが基本ですね。。。
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNGhttp://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi?
0145デフォルトの名無しさん
NGNG>技術書ってそうだよね。今はいらないと思っても将来必要になったり。
>見つけたときに押さえておくが基本ですね。。。
積ん読に体のいい理由を付けるんじゃない
0146デフォルトの名無しさん
NGNGサイエンスパークは8080のせいで会社から見れん。
もいっこのはヲチしてみますょ。
0147デフォルトの名無しさん
NGNGこのてのは必要な時に引く辞書みたいなもんだろ
普段から読んでるやついるのか?
0148デフォルトの名無しさん
NGNG(゚Д゚)?
0149デフォルトの名無しさん
NGNGhttp://wannabe.fam.cx/service/esexy/esexy.cgi?eSexyUrl=http%3A%2F%2Fwww.sciencepark.co.jp%3A8080%2Fbbs1%2Fwwwboard.html
0150デフォルトの名無しさん
NGNG見れたょ。�dクス
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGntdev
ntfsd
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGむずかしいね
そう、むずかしんだよ
サンプルまねても動きゃ-しない
0156デフォルトの名無しさん
NGNG関数、もしくは方法はありませんか?
0157デフォルトの名無しさん
NGNG仮想からマップさせて物理アド取得するんじゃダメなの?
0159デフォルトの名無しさん
NGNGOS管理外領域つかうってのは?
0160デフォルトの名無しさん
NGNGIoGetDmaAdapter()で得たハンドルを使ってAllocateCommonBuffer()するってのはどぉ?
0161デフォルトの名無しさん
NGNGhttp://tech.millto.net/~morry/vwin32/PhysMap/
これを煮るなり焼くなりはどうか?
0162デフォルトの名無しさん
NGNG1)ユーザーモードでアドレスを指定してVirtualAlloc()を呼び仮想空間を確保。
2)そのアドレス値をカーネルモードに渡し、MmAllocateContiguousMemory()で物理空間を確保。
確保できなかったら1)に戻る。
3)CR3レジスタから確保した仮想アドレスのテーブルを探す。そのテーブルを書き直し
確保した物理アドレスにマップする。物理→仮想アドレス変換はMmGetVirtualForPhysical()を使う。
試していないけど
0163デフォルトの名無しさん
NGNGうぷキボン
0164デフォルトの名無しさん
NGNGMmAllocateContiguousMemory()ってまずくね?
とにかくマップするだけの関数だったような。
0165デフォルトの名無しさん
NGNG0166156
NGNG基本的に>>162をベースに作りました。
ただ、物理メモリの空きを探すのにMmAllocateContiguousMemory()を使うのは
まずいようなので、PFNデータベースを参照しました。
(WinNT系のPFNの資料がほとんど見当たらなかったので、怪しいかも)
0167デフォルトの名無しさん
NGNG0168155
NGNG参考にしたサイト
http://www.codeproject.com/internet/drvfltip.asp
0169デフォルトの名無しさん
NGNGWindbgのシンボルサーバにはアップされているみたい。
XPのSP2 RC2でもコマンドが使えるようになった。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGhttp://WindowsBeta.microsoft.com
にあがってたよ。
ベータアカウント持ってる人に頼んでみたら。
0172デフォルトの名無しさん
NGNGドライバは、bulkusbのままでいいんでない?
FILE_FLAG_OVERLAPPEDで開いて、非同期通信して
タイムアウトしたら、CancelIo発行
0175デフォルトの名無しさん
NGNGDDKの勉強はじめたんですが、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デフォルトの名無しさん
NGNGBuild Enviromentsのメニュー下にあるコマンドプロント使ってる?
BUILDで全部通ったけど
0177175
NGNGレスありがとう御座います。
Win2k FreeBuildでビルドしています。
javaSDKとか影響していたりするのでしょうか…
原因不明です。
特定のディレクトリのサンプルだけです。
DDKをアンインストールして再インストール後もこの症状が消えません。
sourceファイルもDirsも変更していないのですが…
0178デフォルトの名無しさん
NGNG>Win2k FreeBuild
でやってみると、確かにエラーが出るね。
XPだと問題茄子
0179175
NGNGXPで開発環境整えればいいんですね。
ありがとう御座いました。
こんなことでずっと悩んでないで、早く聞けばよかったです。
難解な課題山積みですがすこしがんばってみます。
0180デフォルトの名無しさん
NGNG違う、違う、Build EnviromentsのXP FreeBuildのコマンドプロンプトだよ。
誤解を招くような書き方をしてすまぬ
0181デフォルトの名無しさん
NGNGinc/ddk/w2kにはないヘッダーがあるからっぽいね
プログラマなら定義がないとかそんなのはエラーみてなんとかしんさい。
0182175
NGNGそうですね、これくらいは自己解決レベルですね。
どうも思い込むと発想の転換が下手でして…
コマンドプロンプトがXPなんですか…
0183デフォルトの名無しさん
NGNG某書店(埼玉県)で見つけて慌てて両方買った俺はヴァカですか?
探すと以外に見つからないんだよね、アレ。
0184デフォルトの名無しさん
NGNG貴重だからもっとけ
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNGちょっと後悔。
0187デフォルトの名無しさん
NGNGもっと解説本を出版汁!!
0188デフォルトの名無しさん
NGNG(OSはWinXP SP1、DDKはXP SP1 DDKです)
IoConnectInterrupt関数で割り込み関数を登録したのですが、登録した割り込み関数に
入ってくる割り込みは、必ずそのPCIボードの割り込みなのでしょうか?
デバイスマネージャでIRQを確認すると、そのPCIボードには16番が割り当てられており、
USBホストコントローラとマザーボードのグラフィックコントローラのIRQと共有しています。
割り込み関数に入ってくる割り込みが必ずそのPCIボードの割り込みであれば
それで問題はないのですが、仮に共有しているデバイスの割り込みも入ってしまう場合
入ってきた割り込みがどのデバイスが引き起こしたものなのかを判断する方法がわかりません。
どのような方法でそれを判断するのでしょうか?
0189デフォルトの名無しさん
NGNGhttp://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi?
0190デフォルトの名無しさん
NGNGISRの中で自分のデバイスに訊いてみれば?
0191デフォルトの名無しさん
NGNGPCIボード自体から割り込みの他に「割り込み要因」をフラグかなんかでもらわないとダメでしょ。
要因が無ければ他のデバイスとか。
0192デフォルトの名無しさん
NGNGコインストーラを作りますか?
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGエラーセクタのリトライを止めたいのですけど、
どこを設定したらよいですか。
DeviceIOControlくらいは使えます。ドライバか、IDEやSCSIパススルー
なんかでやるんだと思いますけどどこを見ればいいのか見つけられません。
0195デフォルトの名無しさん
NGNG何がやりたいのかわからないけど、
それはドライバでやりたいの?
0196デフォルトの名無しさん
NGNGいや、分からないのです。出来ればVC、VBアプリからやりたいです。
0197デフォルトの名無しさん
NGNGエラーセクタのリトライってソフトでやってるのかね。
0198デフォルトの名無しさん
NGNGZMODEMの時代が終わったっぽいので、USBに切り替えたいんでつ。
でもWDM難しそうだし、何よりUSBホストのドライバ作ったら他OS(PC Linuxとか)でも同じ動作するドライバを作る必要がありそうな...
じゃあ、ドライバ作らずに、アプリとUSBに標準で付いてるドライバを組み合わせる形を思いつきましたが、そんなことは可能でしょうか?
USB-ZMODEMドライバなんて有るわけ無いよな...
0199デフォルトの名無しさん
NGNGいいんじゃねーかつーきがするが。
0200デフォルトの名無しさん
NGNGやりたいことはまさにそれなんですが、機器側の端子をUSBだけにしたいんでつ。
USBシリアルじゃ、ニセモノっぽくて...
0201デフォルトの名無しさん
NGNG少しは調べろ。USB<>シリアル変換アダプタじゃないぞ
0202デフォルトの名無しさん
NGNG「USB<>シリアル変換アダプタじゃない」ドライバか何かが存在する、と?
はつみみです。
0203198
NGNG0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGもしかして、
USB⇔シリアル変換モジュール
でつか?
確かに見た目USBだから良サゲ。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGさらに、Linux版も同時開発できまつか?
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGBULK転送でデータを送受信するくらいのものなら、
DDKのbulkusbをほとんどそのまま使える
linuxの方は、ここだとスレ違いだが、WDM書くより簡単に思えた
0210デフォルトの名無しさん
NGNGそんなことないYO!
WDMとLinuxと同時開発方法とか教えてYO!
0211デフォルトの名無しさん
NGNGwindowsの方は、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/
0212198
NGNG別スレで、Win32の中の人がCLI/WinFXになるから、CLIがネイティブになると盛んに言われてます。
(ドライバなんかもマネージドになっちゃうんだろうか?)
今までのドライバの動作が遅くなって、ドライバもCLIで作れ!なんてことは発生しえるのでしょうか?
ドライバはOSの命とまでは言わなくても、それなしでは機器を制御出来ないわけですが、
VBを丸々捨てたM$ですから、今までのドライバを丸々捨てられることはあながち無いとも言い切れないような。
と考えると、データ転送ならUSBドライバ作るよりLANポートと標準ドライバの方が良いのかな???
でも、機器側のIPとかネットに入るの大変なんだよな。
と、独り言ですた。
0213デフォルトの名無しさん
NGNG0214198
NGNGやっぱIP設定があるのでUSBにします。
シリアル <-> USB 変換器
はどうなのか教えて下さい。
0215198
NGNGm$もLinuxもそういうことはしてくれませんか。
0216デフォルトの名無しさん
NGNGおまえさー、
>ZMODEMの時代が終わったっぽいので、USBに切り替えたいんでつ。
って自分で言っておいて何でUSB側をZMODEMにせなあかんねん。
0217198
NGNG確かに自己矛盾してますた。
開発なんて矛盾があるところの調整みたいなもんだし、、、
出来上がりはバリバリのUSBが良いけど、中の人がZMODEMであれば開発楽だなー、と。
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGハブを経由するとデータが落ちてしまうことがある。
これってハブが悪いって断言していいのだろうか?
装置側が悪いってこともあるの?
0222デフォルトの名無しさん
NGNG他の機器が動くなら、御社に難あり。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG難しいのを意外だと思う奴がいることが意外。
0225デフォルトの名無しさん
NGNG実際にSCSIコマンドを作成して、コマンド転送している部分が載ってる
ソースはありますか?
bulkusbなんて、バルクオンリーでSCSIコマンド転送してそうな感じが
したんですけど、IoCallDriverかなにかで全部丸投げしていて、肝心
のCBWを作成してる所や実際に転送してる所が判りませんでした。
CBW == SRB
CBWCB == CDB
という認識は間違って無いですよね?
0226デフォルトの名無しさん
NGNGbulkusbは、バルク転送でデータを送るだけ
SCSIコマンド云々は自分で実装しる
>>211で出てる
>WindowsXPデバイスドライバプログラミング 入門と実践
>http://www.amazon.co.jp/exec/obidos/ASIN/4774118419/
で、CDのストレージデバイスクラスを作成してるサンプルがあるから、参考になるかも
0227225
NGNGありがとうございます。
紹介してもらった書籍はあるので、これからは書籍ベースで解析してみます。
とは言うものの、Win32アプリからI/Oに送ったWriteFile()等のメッセージがIRPに
詰められて送られて来るとは思うのですが、そこからSCSIコマンドに直すところが
どうにも不明なところで、実際にやってるソースは無いかなと思ったのです。
0228デフォルトの名無しさん
NGNGファイルシステムフィルタドライバを作ろうと思ってます.
そこで,マイクロソフトのIFSキットでいるのでしょうか?
フリーのIFSキットあると聞いたんですけど,よくわかりません.
OSRのFSDKはダウンロード先が書いてないような・・・・
どなたか知っていたらお願いします.
0230デフォルトの名無しさん
NGNGext3ifsってのがあるよ
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGフィルタドライバならDDKだけでいけるよ。
Filemonのソースを見れ。
0233デフォルトの名無しさん
NGNGご存知の方、教えてください。
0234デフォルトの名無しさん
NGNGフィルタドライバ実践の書籍は手元にあるので,読んでいるところです.
>>230
有難うございます
ソースをダウンロードして読んでみようと思います
これはIFSキットとは別でファイルシステムドライバそのものなのかな?
>>232
ご指摘有難うございます
サンプルを読んでみます
0235デフォルトの名無しさん
NGNGファイル一つ送るだけなのに、全部で30個のコマンド(コマンド転送、
データ転送、ステータス転送が一括りとして10個のコマンド)を送って
いて少し驚いています。
そこで質問なのですが、実際に書き込みたいデータ
(Write10のコマンド転送、実データ転送、ステータス転送)
を送っている所は、1個所しかなく、他の部分で行われ
ている処理も、SCSIコマンドを読み解くとWrite10のコマンド転送、
データ転送(何を転送?)、ステータス転送しています。
USBに書き込みたいファイルの中身を転送している場所以外のWrite10
コマンドは、何をしている所なのでしょうか?
どなたか、宜しくお願い致します
0236235
NGNGその上記の知りたい部分のByte配列で読みとれる部分には、
MSDOS5.0
NO NAME
FAT16
等の記述がありました。
USBの情報を取得しているなら、この部分のコマンド転送部の
CBWCBにはReadが来ると思うのですが、これもWriteなのです。
0237デフォルトの名無しさん
NGNGMass Storage デバイスの話しだよな?
http://www.usb.org/developers/devclass_docs
↑からマスストレージクラスの仕様書落として、読んでみたら?
0238デフォルトの名無しさん
NGNGよくわからんが、ファイルを書き込むならFAT領域なども当然更新
書き込みされる。で、それ以外の場所に何故か書き込むとかそういう話?
0239235
NGNGはい、Mass Storageの話で、紹介頂いた仕様書も
一応目を通しています。
>238さん
>よくわからんが、ファイルを書き込むならFAT領域なども当然更新
>書き込みされる。で、それ以外の場所に何故か書き込むとかそういう話?
それ以外の場所に、と言うよりは、書き込みたい内容の分(ファイルの実データ)
だけWriteすれば良いものだと思っていました。
それがUSBモニタで、ファイルをUSBメモリに書き込んだ全パケットを監視すると、
書き込みたいファイルの転送の前に、前処理の様にwriteが走っており、さらに
書き込みたいファイル転送の後には、後処理の様にwriteが走っています。
前処理部分で読みとれるのは>236で書いたとおりで、後処理では良く読みとると
(>236を書いてから気が付いたのですが)ファイル名らしき物がデータ転送部に
ありました。
その、此処で便宜上に言った前処理と後処理(それも含めてファイル転送なので
しょうが)について、そこで何が行われているのか教えて頂きたいのです。
たぶん前処理は、>238さんの仰るFAT領域などの更新処理なのかと思っています。
長文の上、説明下手で申し訳ありません。
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGそもそも「ファイルシステム」とは何か、ということを調べるといいと思う。
ちゃんと。
0244デフォルトの名無しさん
NGNGそれか、m$が配布してるバルクUSBサンプルの方が良いで塚?
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGちょっと処理足すだけでOKなんでつか?
0247デフォルトの名無しさん
NGNG転送単位が256B単位になっててHi-speedで使えんかったから増やしてみた。
あとは、もうちょっと速くするための工夫を挿れてみたとか。。。
0248デフォルトの名無しさん
NGNG本読んでみたら、Bulkてのが基本的なパケット通信みたいね。
とりあえず、BulkUsbのソース印刷してみまつ。
0249デフォルトの名無しさん
NGNGどうしたことでしょう。
0250デフォルトの名無しさん
NGNGインストールのチェックで抜かしたんじゃない?
0251デフォルトの名無しさん
NGNGインストールし直して入りますた。
0252デフォルトの名無しさん
NGNGWindowsNT/XPで、LPT1をCreateFileしてDeviceIoControlしたいのですが、
なにをやってもロジアナに反応しません。入り口でつまづいてます。
標準ドライバとかBIOSとか、その辺の設定に問題があるのでしょうか?
0253デフォルトの名無しさん
NGNGサンプル位しかないのかなぁ
0254デフォルトの名無しさん
NGNGこれぐらいしか知らない
http://www.sciencepark.co.jp:8080/bbs1/wwwboard.html
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi?
0255デフォルトの名無しさん
NGNG情報交換系ですか
勉強するためのサイトがよかったですが、掲示板でも見ていれば勉強になりますね
ありがとうございます
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG印刷結果を画像出力したいのですが、どのサンプルを見ればよいのか教えてください
XP_DDKの内容でお願いします。
0258デフォルトの名無しさん
NGNGftp://ftp.atfile.com/download/WindowsDDK/
http://club.shelek.com/viewfiles.php?id=2
0259デフォルトの名無しさん
NGNG2003DDKはないようですね
0260デフォルトの名無しさん
NGNGそれは注文するしかないってことか。
探せばありそうだが。
0261デフォルトの名無しさん
05/01/28 11:46:160262デフォルトの名無しさん
05/01/28 14:50:20質問が漠然としすぎです
0263デフォルトの名無しさん
05/01/30 17:37:26Ke386IoSetAccessProcess()
と同じような関数ってx86-64にありますか?
0264デフォルトの名無しさん
05/02/03 20:28:32ドライバ上でI/O使えばいいじゃんかよ
0265デフォルトの名無しさん
05/02/11 03:09:29XP checkedをインストールして /debug /debugport=COM1 /baudrate=115200としたのですが
いざ再起動させてみると COM1は相変わらずデバイスマネージャに存在し
当然ホスト側からも接続出来ませんでした
/debugport=COM1を付けたのにもかかわらず
COM1が普通に鎮座している事についての理由が判りません
ささいな事で構いませんので何か教えて頂けるとありがたいです
0266265
05/02/11 09:35:011. 現在ターゲット用に使っているPC以外は /debugport指定によりCOMが占有される
2. ターゲット用PCにはCOMポートが一つしか存在しない
3. 他PCにはCOMが二つついている
>>20氏とはデバイスマネージャにCOMが鎮座しているかどうかの差があるけど
おそらくCOMが1ポートかどうかで COMをデバッグ用に使えるかどうかが決まる?
この推測が正しいかどうかは知りませんが情報が無いよりましかと思い postします
0267デフォルトの名無しさん
05/02/11 17:18:27ターゲットは一般的なマザーボード使ったデスクトップPCだよね?とりあえず試しに通信速度sageてみたら?
0268265
05/02/12 08:13:16845Gチップセットをつかった microATXな一般的マザーです
ただしCOMが1ポートしかありませんが・・・・
通信速度は 19200〜115200まですべて試しました
HyperTerminalで相互通信確認も行いましたです
/debugport指定したのに COMが占有されないのが今回の問題かなと
0269デフォルトの名無しさん
05/02/13 19:02:02デバマネでCOM1のI/Oポートアドレスって確認できる?他のPCと一緒かな?
/debugmodeのターゲットPCは直接I/Oポートいじってると思うんだけど。。。タブン
027020
05/02/15 00:02:00COMが1ポートだとダメなのかな?ノートPCもCOMが1ポートしか無いです。
0272デフォルトの名無しさん
05/03/03 16:38:32Ntfsに渡されているメジャーファンクションとIOを見張る
フィルタドライバを作りたいのですが、
(動きとしてみれば、Filemonみたいに、DeleteやCreateなどをフックしたい)
正直な話、インストールの方法(infファイルの書式)がわかりません。
GUIDやClassの部分が肝になってる気がするのですが…。
当然インストールができないため、ドライバ自体も作ってはみたものの、
動いてるかどうかの確認ができない状況にあります。
filemonの作者様がソースを後悔していれば、即時解決なきがするのですが、
filemonはなぜかソースが後悔されていません…。
ドつぼにはまってます。
誰か情報をお持ちのかた、どんな情報でもかまわないので、
馬鹿な私に知恵を与えてください。
よろしくお願いします。
0273デフォルトの名無しさん
05/03/03 16:46:32> filemonの作者様がソースを後悔していれば、即時解決なきがするのですが、
> filemonはなぜかソースが後悔されていません…。
ああいうのはソース公開して欲しいよねぇ。
ということでお前。解決したらソース公開しるw
0275デフォルトの名無しさん
05/03/03 19:55:450276デフォルトの名無しさん
05/03/03 19:59:280277デフォルトの名無しさん
05/03/04 09:03:46InfのClassやGUIDがわかんねーって書いてるってことは、
レジストリの直接いじる部分もわかんねーってことじゃないの?
俺はあまり詳しくないから、断言できないが・・・。
0278デフォルトの名無しさん
05/03/05 18:22:280279デフォルトの名無しさん
05/03/06 16:06:33自力でドライブのオブジェクトを取得して、アタッチしてる。
0280279
05/03/06 16:10:26ttp://web.archive.org/web/20021216072140/http://www.sysinternals.com/files/FILESRC.ZIP
0281272
05/03/07 13:56:49ありがとうございます!
FilemonはアプリからCreateDeviceしてるんですね・・・。
なんとかBoot時に読み込むようにできないかなぁ・・・。
っていうかそれ以前に、Filemonのソース、XPじゃ動かない・・・_| ̄|○
0282デフォルトの名無しさん
05/03/08 00:36:54NT系はService関連のAPIを使う。
9xは知らん。
0283デフォルトの名無しさん
05/03/08 04:05:40直接レジストリいじってservice登録すればいいと思うけどどうかな?
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services
このへんにSERVICE_AUTO_START属性つけて加えておけばいいかと
0284デフォルトの名無しさん
05/03/08 04:06:260285デフォルトの名無しさん
05/03/08 07:41:500286デフォルトの名無しさん
05/03/08 13:46:100287デフォルトの名無しさん
05/03/08 21:02:450288デフォルトの名無しさん
05/03/10 03:50:54やっぱり通常は 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:33freeのときは出ないように元からなっているような気がするんだが
0291デフォルトの名無しさん
05/03/11 08:57:06任意に入れたデバッグプリントじゃ出力するものが違うんじゃない?
0292デフォルトの名無しさん
05/03/11 11:09:08が、俺も知りたい!
詳細(ヽ゚д)キボンヌ
0293デフォルトの名無しさん
05/03/11 20:36:29ダイアログを出さずに、
USBデバイスドライバをインストールするにはどうしたらいいんでしょう?
1回インストールすれば、別のポートに挿しても自動的に認識してくれればいいんだけど・・・
0294デフォルトの名無しさん
05/03/11 22:33:05詳細は忘れたけどDDKのドキュメントに書いてある
0295デフォルトの名無しさん
05/03/12 06:57:46レスありがとうございます。
もっぺん、ドキュメントとにらめっこしてみます
0296デフォルトの名無しさん
05/03/13 12:45:30「ダイアログを出さずに、 USBデバイスドライバをインストール」という問題と、
「1回インストールすれば、別のポートに挿しても自動的に認識してくれればいい」
という問題は全然別の問題だと思う。
前者については、ドライバとinfファイルをシステムフォルダの\driversと\infに
放り込んだ後、レジストリのどっかにキーを追加するアプリを作ればよかったと思う。
サイプレスのEZ-USBの開発ツールなんかはこれだ。
後者は、基本的にはUSBデバイス側の問題(というかWin2kとxpの仕様)だったはず。
http://support.microsoft.com/default.aspx?scid=kb;ja;818542
ただ、Win2Kに関しては確かにinfファイルを小細工して解決する方法が
あったと思う。
0297デフォルトの名無しさん
05/03/13 19:36:59違いは、最初の一回をWinのデバイスドライバウィザードに任せるか、自アプリで先にやってしまうかの違い。
0298デフォルトの名無しさん
05/03/13 20:03:58こんな短い内容を読んで理解できないのかな?
ドライバがどんな方法でインストールされようが、USBデバイスが
Winの仕様を満たしてなければ、(といってもストリングディスクリプタの
シリアルナンバーを持っていればいいだけなんだけど)やはり挿すポートを変えたり
ハブをかましたりする度にドライバを要求される。
論より証拠自分でやって確認してみて、それから物を言えといいたい。
0299294
05/03/14 10:32:26有用な情報ありがとうございます。
試しにシリアルナンバーを付けたところ、希望する挙動を得られました。
どうしてもPC側で解決できなかったら、これで行きたいと思います。
DDKドキュメントには、
infのCotrolFlagsセクションにInteractiveInstallを追加すればいいようなことが書いてありましたが
電子署名を必要とするらしく、残念ながら試せませんでした
0300293=299
05/03/14 10:33:130301デフォルトの名無しさん
05/03/14 11:11:35デバッグスイッチですが自己解決したので、
一応自分が調べた内容を書かせていただきます。
どうもSOURCESファイルに一文記入すればいいだけみたいです。
NTDEBUG=ntsd
これでDBGがONになるっぽいです。
逆にOFFにするには
NTDEBUG=ntsdnodebug
みたいです。
0302289
05/03/14 11:13:40C_DEFINES=/DBG
みたいなのをSOURCESに追加すればいいみたいです。
でもこれだと/DBGのみの指定になっちゃうんで、
C_DEFINES=$(C_DEFINES)/DBG
みたいにすると追加になるみたいです。
0303デフォルトの名無しさん
05/03/14 21:23:150304デフォルトの名無しさん
2005/03/28(月) 18:58:550305デフォルトの名無しさん
2005/03/29(火) 17:54:45なんて無茶な話でつか?
Targetの動作テストに使います。
エンドポイント0にコマンド送るのと、Bulk転送出来れば良いかなぁ。
でも、PictBridgeとかUSBクラスがテスト出来るようであればもっとうれしい。
0306デフォルトの名無しさん
2005/04/12(火) 22:33:17なんか WinDbg との接続が異常に遅くなった。
ホストおよびターゲットは、Win2k SP4 および WinXP SP2 を、マトリックスで
すべて試した。
早いときでも 1 分くらい、酷いときは、5分くらい経ってからやっと繋がる。
始めは、ありえないと思いつつも、シリアルの同期がとれないのかと思い、
baudrate を 19200 程度まで下げてみたり、ホストマシンを変えて試して
みたが変わらず。
シンボルサーバが重くなってて、それに引っ張られてるのかと思い、
シンボルサーバの記述を削除してみたが、それでも変わらず。
少し変化があるか?と思えるのが、/fastdetect=com2 を追加したとき。
だが、この M/B はシリアルが 1 つしかないので、なんか釈然としない。
BIOS で COM の IRQ、I/O を変えると、少し変化があるような気もするが、
多分気のせいだろう。
結局だましだまし繋がるまで待ってデバッグしてるが、効率悪いことこの上ない。
私以外にも、接続で 1 分以上かかってる人います?
0307デフォルトの名無しさん
2005/06/19(日) 02:51:410308デフォルトの名無しさん
2005/07/09(土) 05:41:19なるべく軽いサンプルソースや、フォーマットを落とせる場所、あるいはそういうものが書いてあるWebページを紹介して下さい。MASMを使ってます。
0309デフォルトの名無しさん
2005/07/09(土) 07:32:250310308
2005/07/16(土) 07:43:340311デフォルトの名無しさん
2005/07/17(日) 00:53:100312308
2005/07/23(土) 06:04:01大体100〜200円くらいで済ませたいのですが・・・
0313デフォルトの名無しさん
NGNGサンプルソースがあればDDKが無くてもドライバが書けると思ってるの?
0314デフォルトの名無しさん
2005/07/23(土) 15:42:39そもそもDDKはいまダウンロード公開はしてないが、どこから拾う気?
CDの送料も払えないような貧乏人にはドライバ書くなんて無理無理。
勉強本だけでいくらかかるやら。
0315デフォルトの名無しさん
2005/07/23(土) 23:46:380316デフォルトの名無しさん
2005/07/24(日) 06:15:56308にそれが期待できると思うか?
0317デフォルトの名無しさん
2005/07/24(日) 10:52:220318デフォルトの名無しさん
2005/07/24(日) 12:18:570319デフォルトの名無しさん
2005/07/24(日) 16:42:300320デフォルトの名無しさん
2005/07/24(日) 20:50:35ここらから拾うつもりです
http://club.shelek.com/viewfiles.php?id=2
0321デフォルトの名無しさん
2005/07/24(日) 21:15:33レジュームしながらおとせばえーやない。
1週間もかからんだろ
0322312
2005/08/27(土) 06:37:36とりあえず、Win98も動かしているのでVXDでも作ってみたいと思うのですが・・・
VXDを作るにはVMM.INCさえあればとりあえずプログラミングできるらしいのですが・・・
もしよければ、VMM.INCのサイズ、および、VMM.INCがさらにインクルードしているファイルの名前とサイズを教えてください。友達にメールで送ってもらえるかもしれないので・・・
0323デフォルトの名無しさん
2005/08/27(土) 09:31:01http://download.microsoft.com/download/win98SE/Install/Gold/W98/EN-US/98DDK.EXE
つーか、友達にRにでも焼いてもらえよ。
0324デフォルトの名無しさん
2005/09/20(火) 16:43:070325デフォルトの名無しさん
2005/09/20(火) 17:24:20なので、とりあえず保守
0326デフォルトの名無しさん
2005/09/21(水) 11:46:07ドライバからマウスイベントを発生させるにはどうすれば良いんでしょうか?
SendInput とか mouse_event とか使えるのでしょうか?
0327デフォルトの名無しさん
2005/09/21(水) 11:52:36ユーザモードで書いてるなら、使えるんじゃね?
0328326
2005/09/21(水) 12:07:34そのデバイスからデータを取得し(これはできました)、そのデータに応じて
マウスカーソルを動かしたいのですが、データは取れてもそのデータを
どうすればマウスを動かす事ができるのか、さっぱりわかりません。
時間はありますので方向性だけでも教えていただけないでしょうか?
0329デフォルトの名無しさん
2005/09/21(水) 12:15:340330326
2005/09/21(水) 13:50:16「ユーザーモード」ドライバを作るって事ですか?
ユーザーモードで動くドライバを作って、カーネルモードで動く
ドライバと連携させるって事でしょうか?。というか、ユーザー
モードで動くドライバってどうやって作るんでしょうか・・・。
根本的な事が全くわかってないので勉強中なのですが、
ゴールまでの過程というか方向性が見えていないので
非常に効率が悪いです・・・。
0331デフォルトの名無しさん
2005/09/21(水) 13:50:37デバイス側を変えられるなら、
デバイスをHIDマウスに準拠させて、ドライバを不要にすると良い
と、少し方向違いのレスを付けてみる
0332デフォルトの名無しさん
2005/09/21(水) 14:09:180333326
2005/09/21(水) 17:30:28本当はそうするのが一番良いんですが・・・。
>>332
DDKサンプルにあるやつですね。
Mouclassを絡めて調査&勉強してみます。
ありがとうございました。
0334デフォルトの名無しさん
2005/09/21(水) 19:34:47HidRegisterMinidriver
0336デフォルトの名無しさん
2005/11/09(水) 18:05:25「ハードウェアの追加」から手動で infを経由して自前ドライバのインストールは可能なんですが、
これをセットアッププログラムから楽チンにインストールさせるミッションを課せられており試行
錯誤中です。
Infを見ると、自前の "Class" 、"ClassGuid" が定義されていて正常にインストールされている環境
を見るとドライバはその配下に入りインストールされています。 "\Root\xxxxxx\0000"
CreateServiceでドライバをインストールすると登録はできました。
しかし変なデバイスインスタンスIDにマップされています。しかも動きません。
もちろん、原因はこちらが正しいデバイスインスタンスの登録と指定をしていないからだと思うので
すが、これをWin32APIから行う方法はあるのでしょうか?
無理やりレジストリにデバイスインスタンスを書き込んでリブートしちゃおうかとも思いましたが、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum ってSYSTEMアカウントからしか書けないように
なっているんですね。
よろしくお願いします。
0337デフォルトの名無しさん
2005/11/09(水) 19:15:47それらしい方法が書いてあるらしい本が引っかかったよ。
http://www.gihyo.co.jp/books/syoseki-contents.php/4-7741-1666-1
なんかinfファイルにダミーのinf放り込んで細工することでも出来た記憶があるけど
これは正当な方法じゃないんだろうな。。
0338デフォルトの名無しさん
2005/11/09(水) 19:16:440339デフォルトの名無しさん
2005/11/09(水) 20:41:24http://members.at.infoseek.co.jp/x1resource/xilinx/giveio/giveio.htm
は参考にならんだろうか。
0340デフォルトの名無しさん
2005/11/09(水) 21:20:540341336
2005/11/10(木) 11:30:13情報どうもです。本チェックしてみます。
setup API を使うと INF経由でインストールできそうな気配がありますね。
>>339
情報どうもです。早速ダウンロードしてみましたが単に CreateService
しているだけでした。残念。
>>340
情報どうもです。Driver Install Frameworks Tools 2.0 ですね。
チェックしていますが、まだ未調査です。
SYSTEMアカウントじゃないと触れないレジストリがあるので、ダミーのサービス
を登録しドライバ関連のレジストリ(デバイスインスタンス)をいじった後に
ダミーサービスを削除し、リブートといった臭い方法で逃げるかなぁ・・・
0342デフォルトの名無しさん
2005/11/10(木) 11:46:52>>337の本、持ってるけどCreateServiceしてるだけだにゃー
0343デフォルトの名無しさん
2005/11/11(金) 06:12:04確保したいのですが、うちだと16MB以上は確保できません。(Win32、x64ともに同じです)
コレは仕様ですか?
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
\Session Manager\Memory Management
のレジストリキーをいじれば何とかなりそうな気がしたのですが
うまくいきませんでした。
0344デフォルトの名無しさん
2005/11/16(水) 18:53:04こちらは128M程度確保できました。
利用可能メモリとの兼ね合い なんでしょうかね。
たんまり取るにはどうすればいいのでしょうね。
NonPagedPool あたりの引数??
0345デフォルトの名無しさん
2005/11/16(水) 18:53:29こちらは128M程度確保できました。
利用可能メモリとの兼ね合い なんでしょうかね。
たんまり取るにはどうすればいいのでしょうね。
NonPagedPool あたりの引数??
0346344
2005/11/16(水) 18:54:340347デフォルトの名無しさん
2005/11/22(火) 11:19:14NonPagedPool 総容量はシステム毎に限りがあったと思う。
ひとつのサービスが確保しすぎると他にしわ寄せが行くと思われ。
0348デフォルトの名無しさん
2005/11/22(火) 11:22:14参考になりそうな検索結果が出たけど
深く調べる気力がないので神の降臨を待とう。
0349デフォルトの名無しさん
2005/11/22(火) 21:44:34NonPagedPoolの初期量と最大量は起動時に(多分物理メモリ総量から)算出されて、
最大量の範囲内で必要に応じて増減するぽい。
物理メモリ1Gで最大200MBくらいって例があるから、>>343の実装メモリが少ないんじゃ?
0350デフォルトの名無しさん
2005/11/22(火) 22:35:010351デフォルトの名無しさん
2005/12/02(金) 03:20:47x64対応なのってこれだけなんだよね・・・。
けど、俺クレカ持って無いから送ってもらうやつ出来ないし・・・orz
何故かこれだけネット上探しても落ちてない。
散々商業ソフトとかヤバ目のは落ちまくってるくせに、こういう時に限ってないんだよね。
MSも何で落とせるようにしないんでしょ・・・。
0352デフォルトの名無しさん
2005/12/02(金) 08:31:34ttp://www.microsoft.com/japan/whdc/devtools/ddk/orderddkcd.mspx
0353デフォルトの名無しさん
2005/12/02(金) 09:08:480354デフォルトの名無しさん
2005/12/02(金) 09:31:150355351
2005/12/02(金) 13:24:270356デフォルトの名無しさん
2005/12/02(金) 13:36:460357351
2005/12/02(金) 14:09:46部活はあるので、そろそろ行かないといけません。
0358デフォルトの名無しさん
2005/12/02(金) 16:28:42XPのアクチに見られるようにXP以降のM$はシブチンだね
それ以前はDDKもフリーでDLできた
なので転がってるのはそれらばかりだね
(´-`).。oO(そういやアクチってサポート期間過ぎたら期間限定でしか使えないOSになるのか?)
0359デフォルトの名無しさん
2005/12/02(金) 16:51:41その通り。
実はMSのアクチの狙いは割れ対策なんかじゃなくて
OSを買い換えてもらう為のものだったりするんじゃないかと思うんだが・・・。
この前、OSの利用調査でいつまでたってもWin98使いが消えなかったのでMSが頭を抱えてた。
そういうのも確実に戦略としてある気がする。
0360デフォルトの名無しさん
2005/12/02(金) 17:16:05米国の消費者はサポート期間過ぎたら期間限定になるというのは猛反発しそうだな
結局、アクチ管理の鯖管理維持費で苦しくなるだけなのにな…
0361デフォルトの名無しさん
2005/12/02(金) 17:28:300362デフォルトの名無しさん
2005/12/02(金) 17:41:48サポート期限が切れたらアクティベーションが不要になるパッチを出すという話を聞いたことがあるが。
0363デフォルトの名無しさん
2005/12/02(金) 17:42:16動画処理とかじゃ不十分な性能だけど日本独自のコピワンデジタル放送じゃ
意味無いし…
0364デフォルトの名無しさん
2005/12/02(金) 19:19:17開発キットを無償提供しないのは今時意味分かんないなぁ
0365デフォルトの名無しさん
2005/12/02(金) 20:20:47どこのサイトにあります?
自分が知ってる所は、XPまででした・・・orz
0366デフォルトの名無しさん
2005/12/02(金) 22:02:530367デフォルトの名無しさん
2005/12/02(金) 22:08:10自分のbit torrentの事ですよね?
落としたいファイルのtorrentファイルをどこかのサイトから落とさないといけないような・・・
0368デフォルトの名無しさん
2005/12/02(金) 22:09:35と言うのは消し忘れです。
0369デフォルトの名無しさん
2005/12/02(金) 23:18:340370デフォルトの名無しさん
2005/12/02(金) 23:37:44マジタスカタ
0371デフォルトの名無しさん
2005/12/03(土) 16:10:080372デフォルトの名無しさん
2005/12/03(土) 17:39:190373デフォルトの名無しさん
2005/12/07(水) 21:30:08神じゃないし、カメレスだが最低でも256Mは取れる筈
↓この辺参照
http://support.microsoft.com/default.aspx?scid=kb;ja;312362
http://support.microsoft.com/default.aspx?scid=kb;ja;126402
0374デフォルトの名無しさん
2005/12/07(水) 21:33:43サウンドカードのドライバを実装する際のエントリポイントなどの情報が書かれてる資料はありませんか?
WDMドライバの本の上巻下巻にも書いてなく、DDK2003のソースにも無いので困ってます。
当然MSDNにもないし・・・。
0375デフォルトの名無しさん
2005/12/12(月) 14:29:020376デフォルトの名無しさん
2005/12/16(金) 18:58:46またはどこかに上げてもらうこと出来ませんか?
一応ログ見て、shelekは項目はあれど落とせない(TOPに戻る)
ssarangは、403でページが見られない。
"DDK_XP.ISO"でぐぐって、****.szipc.comって所にあることはあったけど重い。
Irvineで1〜2kしか落とせず、42時間なんて待てないッス。
よろしくお願いします。
0377デフォルトの名無しさん
2005/12/16(金) 19:55:36メアド晒したら送っちゃる
0378デフォルトの名無しさん
2005/12/16(金) 20:11:580379376
2005/12/16(金) 20:57:58メアドでも、うpに時間掛かるんじゃ・・・
>378
ありがとう。今落としてます。
0380デフォルトの名無しさん
2006/01/21(土) 23:21:43http://www.roland.co.jp/cs/faq/faq.cfm?ln=jp&Dst=0&Faq=JP05-10655&dsp=1
この問題で使用ができません
「Windows XP/2000 において、MIDIやオーディオ・デバイスのインストール可能台数には上限があります。」
「Windows の制限であり、ドライバの問題ではありません」
別のハードウェア・オーディオデバイスをPCIに追加しても全然普通に動きました。
私にはROLANDのコメントが事実だとは思えません。
どなたかこの辺りの実情について情報を頂けないでしょうか。
0381デフォルトの名無しさん
2006/01/28(土) 00:29:57IoCallDriver を呼ぶ前に IoSetCompletionRoutine でデータの受信
処理をタイムアウト可能にしています。タイムアウト処理は正常に
行われるのですが、例えばタ受信完了間際にタイムアウトになった
場合、それまで受信していた(?)データが欠落するといった事は
ありえるのでしょうか?
感覚的な疑問なので根本的に間違っているかもしれませんが
ご存知の方、ご教授願います。
0382デフォルトの名無しさん
2006/02/12(日) 05:44:49DDK って一応無料で手にはいるんですね。
0383デフォルトの名無しさん
2006/02/13(月) 10:28:43WindowsDDK各種についてのスレ
http://pc8.2ch.net/test/read.cgi/tech/1049116134/325-327
漏れは試してないが、いちおう無料で手に入るようだ
0384デフォルトの名無しさん
2006/02/20(月) 10:47:02Win2Kに同じデバイスを2つ挿すと片方は
正常に認識されるもののもう片方が常に
ドライバのインストールを促され、再起動を
要求されてしまいます。
WinXPでは問題ないのですが・・・。
考えられる原因は何でしょうか?
0385デフォルトの名無しさん
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
どうか宜しくお願い致します。
0386デフォルトの名無しさん
2006/02/22(水) 00:26:15板違い
0387デフォルトの名無しさん
2006/02/24(金) 02:09:23SCSI_PASS_THROUGHでCDBにWRITE(0x3B)のコマンドを入れてDeviceIoControlしたんですが、
DeviceIoControlは1で正常終了しても、SCSI StatusがCHECK CONDITIONになって、WRITEできていません。
SENSE見ると、INVALID REQUESTのINVALID FIELD in CDBってなります。
CreateFile(\\.\scsi0:でREADとWRITEを指定するだけじゃ駄目ですか?)
0388デフォルトの名無しさん
2006/03/03(金) 08:57:58これが理由じゃないのか?
つーかこれってドライバの質問?
0389デフォルトの名無しさん
2006/04/20(木) 15:12:16ハードウェアの検出ウィザードを使用しないインストールってどうすれば
いいのでしょうか?
DPInst を使用しましたが、inf の選択が無くなるだけで、ウィザード自体は
ユーザーが操作を行わなければいけません。ドライバをインストールし
USBデバイスを繋いだらすぐ使えるようにしたいのです。
参考になるサイトなどありましたら教えてください。
0390デフォルトの名無しさん
2006/04/20(木) 15:34:02結局、わかんなくてデバイスのファームをHID準拠に作り直しちゃった・・・
0391デフォルトの名無しさん
2006/05/17(水) 01:17:350392デフォルトの名無しさん
2006/05/17(水) 07:10:26はいはい、昨日筆おろしに行ったんですね、うまくいった?
0393デフォルトの名無しさん
2006/05/17(水) 07:20:25俺は風俗。それ以来ずっと風俗。
0394デフォルトの名無しさん
2006/06/01(木) 00:07:28SCSIコマンドの送受信を行いたいんですがドライバを差し替えないで、
usbstore.sysのままで行えないでしょうか?
0395デフォルトの名無しさん
2006/06/01(木) 04:07:410396デフォルトの名無しさん
2006/06/01(木) 21:19:47SPTIじゃアカンの?
0397394
2006/06/01(木) 23:58:17情報ありがとうございます。
こんな便利なものがあるのですね。
とりあえず、やりたいことができるか調べてみたいと思います。
0398デフォルトの名無しさん
2006/06/04(日) 14:37:21Device側が送るべきデータを持っていなければ、
ずっとReadFileを抜けずに待ち状態になってしまいます。
ReadFile自体はアプリケーションとは別スレッドで行っているとした場合、
任意のタイミング(キャンセルボタン押下)でReadFileを止めさせる場合には、
どのような方法が良いでしょうか?
0399デフォルトの名無しさん
2006/06/04(日) 17:12:50やるとしたら、
データ待ちうけ部分をKeWaitForMultipleObjecとかで待って
中断イベントも待つようにして、DeviceIoControlでイベント発行・・・かな
0400デフォルトの名無しさん
2006/06/05(月) 00:34:25今までLinuxやUnixでの開発しか経験ないので
資料集めから始めたいのですがどの資料はみなさん
どんなの読んでいますか?
0401デフォルトの名無しさん
2006/06/20(火) 12:21:50winvpn_1.zip
0403デフォルトの名無しさん
2006/07/18(火) 20:16:22デバイスが返答しない場合にタイムアウトさせるにはどうすれば良かですか?
0404デフォルトの名無しさん
2006/07/18(火) 22:22:39ドライバを書く力もつくと考えていいのでしょうか?
0405デフォルトの名無しさん
2006/07/18(火) 22:43:100406デフォルトの名無しさん
2006/07/19(水) 03:16:35それなりになんでも出来るでしょう
あとはルールを知ってるか知らないかだけ
0407デフォルトの名無しさん
2006/07/19(水) 06:14:58WorkQueueで待ってイベントがタイムアウトしたらキャンセルとか。
>>404
そんな考えはダメ。
0408デフォルトの名無しさん
2006/07/19(水) 08:33:42UsbBuildVendorRequestは単なるマクロで、urbに必要な情報を代入するだけ
urbを下のドライバに渡すときに使ってる関数のリファレンスを読めば載ってるかと
0410デフォルトの名無しさん
2006/07/27(木) 14:39:390411デフォルトの名無しさん
2006/07/27(木) 14:40:28HIDマウスなんだけど、特殊なベンダーリクエストが来ると
LEDが光ります。(フィードバック)
これは普通にPCに挿すと、普通のHIDマウスとしか認識しないんだけど
専用デバイスドライバをインストールすると、(HIDドライバーをすげ替える)
LEDによるフィードバックが味わえるようになるという。
とりあえずwindows2000/xpで動作確認した所、okだったんだけど、
ドライバーのインストールで気になる事が。
windows2000では普通にインストールできるのに、
windowsXPにインストールすると、その時挿していたusbポート以外では、
HIDマウスとして認識してしまうという不具合が出ました。
(手動で一つ一つ、ドライバーの更新という作業が必要)
どうしてこんな事が起きるのか・・・・orz
0412デフォルトの名無しさん
2006/07/27(木) 14:46:27ドライバー
INFファイル
インストーラー、
どれが悪いのか・・・。
親切心で、デバイスにリポートディスクリプターなんか載せたのが
悪かったのかな。
単純に、hidマウスデライバのプライオリティが下げられれば
良いだけな気がするんだが、方法がわからん。
0413デフォルトの名無しさん
2006/07/27(木) 15:03:21↓じゃ回避できないか?
既存の USB デバイスが新規デバイスとして認識される
http://support.microsoft.com/default.aspx?scid=kb;ja;818542
0414デフォルトの名無しさん
2006/08/04(金) 15:35:58ttp://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.
0415デフォルトの名無しさん
2006/08/04(金) 23:05:37情報�dクス
早速DLしますた。
0416デフォルトの名無しさん
2006/09/04(月) 22:50:02「どのプロセス」が「どのファイル」を作成,変更したかを
リアルタイム取得する方法を探しているのですが,
デバイスドライバーを自作する必要があると聞いてこちらに来ました.
Filemonのように高度なものでなく,ReadDirectoryChangesWで取得できる
情報が「どのプロセス」によってもたらされたものかを知りたいのですが,
サンプルコードや参考書などがあればご教授お願いします.
0417デフォルトの名無しさん
2006/09/05(火) 04:05:31ntinternalではもう公開してないが、ぐぐれば見つかる。
0418416
2006/09/07(木) 12:57:02ありがとうございます.>>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++もサンプルコードをいじる程度しかできない初心者なのですが,
どなたか教えていただけませんか
0419デフォルトの名無しさん
2006/09/07(木) 13:18:01・・・悪いことは言わん、アキラメロ
XPのコマンドプロンプトでopenfiles使った方が幸せになれるぞw
方法を知りたいなら、buildを通す必要は無いし、
Filemonのような事をしたいなら、FILEM.SYSを使えば良いだけだから、
やはり、FILEM.SYSのbuildは不要。
十年早いと言うか、諦めた方が良いね。
0422デフォルトの名無しさん
2006/09/07(木) 19:09:020423416
2006/09/07(木) 22:40:10ありがとうございます.
とりあえず,ビルドだけはできたのですが皆様のおっしゃるとおり
理解するのはほぼ不可能なのであきらめます.
0424デフォルトの名無しさん
2006/09/11(月) 12:52:150425デフォルトの名無しさん
2006/09/13(水) 11:42:11能力があっても意欲が無いのとどっちが会社的には良いのだろうか? 藁
漏れは両方無いけど 核爆
0426デフォルトの名無しさん
2006/09/14(木) 05:05:10意欲があって能力が無いのも
どっちも社会的に有害
まあ漏れもなんだが
,'⌒,ー、 _ ,,.. X
〈∨⌒ /\__,,.. -‐ '' " _,,. ‐''´
〈\ _,,r'" 〉 // // . ‐''"
,ゝ `く/ / 〉 / ∧_,. r ''"
- - - -_,,.. ‐''" _,.〉 / / . {'⌒) ∠二二> - - - - - - -
_,.. ‐''" _,,,.. -{(⌒)、 r'`ー''‐‐^‐'ヾ{} +
'-‐ '' " _,,. ‐''"`ー‐ヘj^‐' ;; ‐ -‐ _- ちょっくら逝ってくる
- ‐_+ ;'" ,;'' ,'' ,;゙ ‐- ー_- ‐
______,''___,;;"_;;__,,___________
///////////////////////
0427デフォルトの名無しさん
2006/10/06(金) 15:06:55日付: 利用できません
バージョン: 0.0.0.1
のように、バージョンは表示されますが日付が表示されません。
INFにDriverVer=mm/dd/yyyy,versionは書いてありますが、
もしかしてデジタル署名しないと日付は表示されないんでしょうか?
0428デフォルトの名無しさん
2006/10/06(金) 15:17:22デジタル署名は関係ない
そのINF使って、再インストールしてみたら?
0429デフォルトの名無しさん
2006/10/06(金) 21:17:37どもです。
ttp://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign_perOS.mspx
Windows 2000でやってたんですが、2000だと無署名のドライバの日付は無視されるみたいで
(削除 → 再起動 → インストールとかもしてみました)
XPだとOKでした。(署名してないという警告はもちろん出ますが)
0430デフォルトの名無しさん
2006/10/09(月) 11:11:170431デフォルトの名無しさん
2006/10/17(火) 01:58:39WRTIE_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ポート空間は不要だと認識しているのですが、正しいでしょうか。
よろしくお願いします。
0432デフォルトの名無しさん
2006/10/17(火) 03:27:260433427
2006/10/18(水) 01:13:27>>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だと警告は出るものの、日付が認識されて、更新もできます。
0434デフォルトの名無しさん
2006/10/21(土) 09:46:36atapi.sysを使うためのカーネルレベル関数を教えていただけないでしょうか。
PCIIDEのソース例はありますが、atapi.sysよりもハード側のレイヤの
バスドライバであって、参考になりません。
PCに付属のIDEポートを直接駆動してATAPIコマンドを入力したいのです。
よろしくおねがいします。
0435デフォルトの名無しさん
2006/10/21(土) 17:20:40pass throughじゃ駄目なのか?
0436デフォルトの名無しさん
2006/12/07(木) 21:45:38tp://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
0437デフォルトの名無しさん
2007/01/19(金) 15:51:17(既にWHQL取ってるような大メーカーさんは別にして)皆さんどのように
対応します?
0438デフォルトの名無しさん
2007/01/19(金) 21:57:400439デフォルトの名無しさん
2007/01/22(月) 12:20:54Bcdedit.exe -set TESTSIGNING ON
でOK。
0440デフォルトの名無しさん
2007/01/24(水) 21:05:26すると、(セーフモードみたいに)画面の四隅に「テストモード」って出るんだな。
インストーラでこっそりTESTSIGNING ONしようと思ったけどだめだは・・・・
0441デフォルトの名無しさん
2007/01/25(木) 00:23:33カーネルでは信頼するものしか動かせなくする
という話だが。
0442デフォルトの名無しさん
2007/01/25(木) 18:58:21ttp://hp.vector.co.jp/authors/VA000363/release/index.htm
のVer2.20ソースを参考に
RAMDISKを作ろうと思っています。
このソース自体がうまくビルドできないのですが、
Windows Server 2003 SP1 DDKでは
ビルドできないんでしょうか?
0443デフォルトの名無しさん
2007/01/26(金) 08:48:23それと違う環境でビルドするなら、ソース直すくらいはしなきゃならんこともあるだろ
0444デフォルトの名無しさん
2007/02/18(日) 22:04:560445デフォルトの名無しさん
2007/02/18(日) 23:01:31ない。
0446デフォルトの名無しさん
2007/02/18(日) 23:13:18カーネルだけが知っているということですか?
0447デフォルトの名無しさん
2007/02/19(月) 00:35:49そう。内部用のAPIじゃないとわからん。
0448デフォルトの名無しさん
2007/02/19(月) 03:48:580449デフォルトの名無しさん
2007/02/19(月) 05:50:09MmGetPhysicalAddress
0451デフォルトの名無しさん
2007/02/19(月) 08:54:25マルチにマジレスカコイイ!
0452sage
2007/03/07(水) 02:25:36皆さんどうやっています?
0453デフォルトの名無しさん
2007/03/19(月) 02:58:29ターゲットマシンが全く応答してくれず、2日無駄にしました。
このスレの
>>21, >>25, >>27
を読んでいれば、もっと早く気づけたのに・・・。
ちなみに、ターゲットマシンは、ThinkPadで
ドッキングステーションに載ってるCOMポートにつないでやろうとしました。
0454デフォルトの名無しさん
2007/03/19(月) 07:49:330455デフォルトの名無しさん
2007/03/19(月) 08:25:400456デフォルトの名無しさん
2007/03/19(月) 09:35:240457デフォルトの名無しさん
2007/03/19(月) 11:28:220458デフォルトの名無しさん
2007/03/19(月) 14:44:300459デフォルトの名無しさん
2007/05/28(月) 12:45:02専用ハード/専用デバイスドライバを必要とするアプリがあり、これまでは、
アプリのインストーラでinfファイル/sysファイルを%WINDOWS%\infおよび
%WINDOWS%\system32\driversにあらかじめコピーしておくことで、ユーザー
がドライバインストール時に在り処を指定しなくても済むようにしていまし
た。(WHQL未取得なので警告は出ますが・・・)
Vista-x64及びLonghorn対応のためドライバ署名のためのcatファイルが必要に
なりますが、この場合も上記同様、ユーザーがドライバの在り処を指定しなく
てもインストールできるようにすることは可能でしょうか?
catファイルを%WINDOWS%\system32\CatRootにコピーする等、試行錯誤してみ
ましたがだめでした。
アドバイスいただけたら幸いです。
0460デフォルトの名無しさん
2007/05/30(水) 01:49:270462デフォルトの名無しさん
2007/06/04(月) 18:14:170463デフォルトの名無しさん
2007/07/08(日) 14:14:45まず何を勉強したほうがいいのでしょうか?
ドライバプログラミングの入門書から勉強しようかなと思ってるんですが(´・ω・`)
ハードの知識はちょびっとあります。Windowsの知識はあんまりないです(´・ω・`)
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ありがとうございます。わかりやすいです(´・ω・`)
0466デフォルトの名無しさん
2007/07/10(火) 00:53:47ホリエモンみたいは暑苦しい姿を彷彿とさせる名前だな
0467デフォルトの名無しさん
2007/07/10(火) 08:21:280468デフォルトの名無しさん
2007/07/23(月) 23:52:23こんなに手間取ると思わなんだ・・・・・
以上、チラシの裏でした
0469デフォルトの名無しさん
2007/08/02(木) 09:32:19そのチラ裏が妙〜〜に気になった。
ターゲットOSは、Vista 64bit版でつか?
MS社の方針変更の可能性濃厚なんで
おおまかな手続きの流れをよければ語って
もらえマイカ。
いずれ全てのドライバが署名必要となるのか・・・orz。
0470468
2007/08/02(木) 14:20:49とりあえずVista64bit対応のためでつ。
WindowsServer2008以降32bit版もKMCS必要なことは知ってますよね。(Server2008x86-CTP版で必要なことを確認済み)
>MS社の方針変更の可能性濃厚なんで
方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?
>おおまかな手続きの流れをよければ語って
>もらえマイカ。
手順等は
http://www.microsoft.com/japan/whdc/winlogo/drvsign/kmcs_walkthrough.mspx
の画面右のdoc参照。
他に知りたいことがあれば、具体的に書いてもらえば可能な範囲で答えるが・・・・
0471469
2007/08/02(木) 17:45:32>方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?
やめるという情報はないでつ。むしろ、32bitとかも求められるとなると、
いずれSP3辺りでXPなんかもそうなるのかなと・・・。XPのサポートが
延びてるしまだまだ使われるはずなので。
手順docのリンクとんくすでつ。
認証ツールいくつかあるみたいだけれど、おすすめとかありますか?
後、対応化にあたって苦労した話なんか聞かせてもらえるとこれから
認証手続きする人に役立つと思いまつ。
あ、SDK+WDK(withDDK)辺りはインスト済み前提で話してもらっていいでつ。
0472デフォルトの名無しさん
2007/08/02(木) 21:23:37んな事したら発狂する顧客が随分出そうな気配。
0473468
2007/08/02(木) 22:24:17>いずれSP3辺りでXPなんかもそうなるのかなと・・
私も>>472と同じくこれは無いと思います。
>認証ツールいくつかあるみたいだけれど、おすすめとかありますか?
認証ツールとは?
>後、対応化にあたって苦労した話なんか聞かせてもらえるとこれから
>認証手続きする人に役立つと思いまつ。
自分で(Verisign等から)電子証明書を購入し、自分の作ったドライバに自分で
電子署名するなら、特に難しい点は無いと思います。
(KMCS_Walkthrough.docの手順をそのとおり辿るだけ)
私の場合、お客からの請負で作成した(アプリに含む)ドライバにお客の会社の
電子証明書でお客に電子署名してもらわなければならない故に以下で手間取り
ました。
(1) 電子署名とは何か、なぜ必要なのかを理解してもらう。
(2) 電子証明書を購入してもらう。
(3) 電子署名をしてもらう。
(1)は説明不要でしょう。
(2)は私がでは無く客先の担当者が苦労したのですが、でかい会社のため、法務・
総務・購買などに(1)が必要だったようで、電子証明書を購入だけで2ヶ月か
かりました。
0474468
2007/08/02(木) 22:25:03ていうような事務屋さんが仕切っているわけですから、WDKのインストールを含め、
KMCS_Walkthrough.docの手順をやってもらうなど、まず不可能。
で、仕方が無いので、公開鍵・秘密鍵ファイルのありかとパスワードを入力する
ための専用ダイアログアプリとそこから一連の手順を自動実行するバッチ(+α)
を作成し、WDKの中で必要なツール等と合わせてお客に渡し、署名してもらい
ました。
KMCS_Walkthrough.docを見てもらえばわかりますが、Cross-Certificateの関
連で、テスト用電子証明書で署名する手順と本物の電子証明書で署名する手順
が異なるため、上記バッチの確認が(本物の電子証明書がない)自分のところで
できず、苦労しました。
参考:
catファイルの作成にMakeCat/Signability/Inf2Catの3つの選択肢がありますが、
* MakeCatは面倒
* Signablityはファイルをコピーしただけでは使えない(COMの登録が必要)
なので、Inf2Catがお勧めです。
以上、ご参考まで
0475469
2007/08/03(金) 00:44:14実際の流れに沿った詳細な解説ありがとうございます。
おそらく、実際に対応してみないと見えてこないことが多々あると思われ、
>>468さんの情報は今後実施する多くの方に貴重な内容だったと思われまつ。
結果として、お客様自身に電子証明書手続きしてもらうことが
一番大変だったということでつね。PCの事をよくわからない事務屋さんに
ドライバの署名してもらう為のバッチ処理、作るのかなり難易度高そうでつ・・・。
0476デフォルトの名無しさん
2007/08/13(月) 23:51:32ユーザが読むべきデータがまだ無い場合はブロッキングしたいのですが、
どのような機能を使えば良いのでしょうか?
初歩的っぽい質問で申し訳ないのですが、探しても中々でてこないので・・・
どなたかご教授いただければ幸いです。
0477デフォルトの名無しさん
2007/08/14(火) 09:29:51「まだ読み出すべきデータがない」と言ってすぐに戻る。
0478デフォルトの名無しさん
2007/08/14(火) 11:35:50データができたときに割り込みがあるなら、それをトリガにしてIRPを完了かなぁ。
割り込みなくてポーリングでしかわからないなら、ワーカースレッドを起動して
スレッド内でデータができたらIRP完了するのかな。
0479デフォルトの名無しさん
2007/08/14(火) 13:52:12>>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
入門書としては少し難しいが、実装上のノウハウがひととおり書かれている。
0480476
2007/08/14(火) 13:59:27>>478
>>479
ご回答ありがとうございます!
一応Linux上でのドライバ開発の経験はあるもので、
Linuxだとディスパッチルーチンに相当する部分でスリープしてしまって良く、
それと同じようなことをしようとあがいてました。
もっとWindowsでの事情をちゃんと考慮すべきでした・・・
おぼろげながらどうやればいいかわかってきた気がするので、
またがんばってみようと思います。
ありがとうございました
0481デフォルトの名無しさん
2007/08/22(水) 19:11:190482デフォルトの名無しさん
2007/08/22(水) 19:54:19あとここの本
http://www.osr.com/fsinternals.shtml
日本語の情報はほとんどない
しかしMSのサンプルソースは読みにくい気がするのは俺だけ?
0484デフォルトの名無しさん
2007/08/25(土) 19:04:45FILEM.SYSを利用して,ファイルがどのプロセスから読み書きされているか
調べるツールを作成しようと考えています.
このスレで上げられているFilemonのソース見て,
DeviceIoControlでアプリ側からフィルタドライバ側へアクセスしているだろう
ということは分かったのですが,フィルタドライバ側からのデータは
どのようにして受信するのでしょうか?
初歩的な質問で申し訳ございませんがよろしくお願いします.
0485デフォルトの名無しさん
2007/08/26(日) 00:59:560486デフォルトの名無しさん
2007/09/04(火) 21:51:37亀レスだが、邦訳出てる。
Windows NTファイルシステム詳解
NT4基本に書かれてるけど、大筋はかわってないとオモ。
あと、 ttp://www.acc.umu.se/~bosse/
キャッシュマネジャがすごくイヤな感じだった。
0487481
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、ユーザーが意識していないタイミングで、リクエストがばんばん発生するので
地道に解析しながらやるしかなさそうです。
0488デフォルトの名無しさん
2007/09/05(水) 18:13:06まず動かすんだったらキャッシュマネージャを無視して処理してもいいんじゃ?
0489481
2007/09/05(水) 18:43:08IFSKitはすでにあります。
しかし、添付のドキュメントはほぼフィルタドライバについてだったりして
期待するようなことはあまり書いてないです。
新しくでたVistaのDDKだと、FileSystemのソースもDDKに入るようになったので
IFSKIT自体無くなるのか?
いろいろ見た結果FAT32のサンプルとNTファイルシステム詳細みながら
やるのがよさそうなのでそれでがんばります。
0490デフォルトの名無しさん
2007/09/05(水) 20:17:24IFSはDDKと統合されてWDKっていう扱いになったんじゃなかったか?
MSはころころ名前変えてくれるよな
0491デフォルトの名無しさん
2007/09/06(木) 04:32:54WDKに統合されて誰でもタダで入手できるようになった
0492デフォルトの名無しさん
2007/09/15(土) 14:07:06「Vistaではドライバ未対応のため使えないデバイスが出てくる」
と言われてた気がするんだけど、
具体的にドライバの何が問題?
32bit-Vistaなら、XPのWDMドライバもそのまま使える?
0493デフォルトの名無しさん
2007/09/15(土) 15:03:52一応これまでのドライバモデルも動くらしいが、当然Aeroは動かないっぽい。
Vista は持ってないので、実際に試したことがないので詳しくはわからないです。
ファイルシステムとかプリンタあたりはどうなんだろう。
ここは専門外なのでわかりません。
あとは、電源関連あたりの処理が変わっているらしいので、サスペンドレジューム休止状態などで
不具合が出てしまうデバイスがあるかもしれません。
上記の注意点の条件に当てはまらなければ、原理的にはXPのドライバでも動くはずです。
なにか忘れてることがあるかもしれませんが、そんな感じです。
0494デフォルトの名無しさん
2007/09/18(火) 23:16:57Microsoftからも情報出てましたね。
http://www.microsoft.com/japan/whdc/devtools/WDK/DrvCompat_Vista.mspx
電源周りに変更ありですか。。。
XPの時もあまり関わりたくないのに
結構複雑で困ったんだよな。
0495デフォルトの名無しさん
2007/09/22(土) 11:57:46Vista-x86にて動作する仮想ディスプレイドライバ作っているんだけど、
WDKのmirrorドライバのソースと下記URLを参考したらコード43エラーでて認識してくれん。
http://www.codeproject.com/system/driverdev6asp.asp
XPDM,WDDMは共存できない。ってことらしいんだが、WDDMの情報がまったくでてこない。
参考になりそうなサイトしっている方いたら教えてくれませんか?
0496デフォルトの名無しさん
2007/09/28(金) 02:18:34おそらく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中身がDDKのbulkusbそのまんまとは限らないと思う・・・
仮に、中身がほぼ同一だとしたら、
GUIDは、オマイの使ってるデバイスにあわせる必要がある
0498デフォルトの名無しさん
2007/09/28(金) 12:04:46ありがとう。
デバイスとは、製品版のSYSファイルから取り出せますか?
INFにはimageのクラスGUIDと、USDClassというのしかなかったです。
上位と下位みたいだからこれ以外みたいですが。
TWAIN用のDLLとかワンプッシュボタン用のEXEから知ることもできるでしょうか。
現状で動作させると、組み込みはできますが、データソースはデバイスが見つからないというエラーです。
0499デフォルトの名無しさん
2007/09/28(金) 12:34:14まー、その辺のファイルのどっかに書いてあるでそ
逆アセすりゃ、分かるんでない?
0500デフォルトの名無しさん
2007/09/28(金) 23:56:10SYSの逆汗したことないです
dumpbinでも分かりませんでした
GUIDだけ合わせてもだめ?
0501デフォルトの名無しさん
2007/09/29(土) 09:59:56どこのGUIDを合わせなきゃいけないか理解してる?
分かってないなら、
bulkusbと一緒に付いてるサンプルの実行ファイルのソース読め
あと、逆汗ムリつーなら、CreateFileにフックかけて引数調べるとかでも良いかと
0502デフォルトの名無しさん
2007/09/30(日) 03:08:00理解していません。。
infには2箇所ありました。だけど、SYSには依存していないっぽいのでinfは無関係みたい。
製品版のSYSからとってソースに書くという事実は分かります。
場所は、496の場所かと。
mofにもなんからしいのがある気がします。
APIをフックするのも分かりません。やったことないです。
とりあえずソース見て、そしてフックも勉強します。
EXEなりのCreateFileのところの引数を調べるってことですよね、多分。
W32dsmで見てみます。
0503デフォルトの名無しさん
2007/10/01(月) 13:32:45どんなデータのやり取りをしているかは自分で調べないとだめでしょ
んで、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とりあえずWinXP環境からバスをチェックして、
ベンダ情報があっているデバイス番号とか機能番号は確認しました。
そこでPCIとPCとの共有メモリの情報を見たいのですが、
どうすればいいのでしょうか?
0506デフォルトの名無しさん
2007/10/13(土) 09:03:410507:デフォルトの名無しさん
2007/10/15(月) 00:06:36その先頭アドレス取得、Winアプリからそのアドレスのデータを読むことはできました。
(意味不明なデータですが、初期化されてないからと思ってます)
ただ、デバイスマネージャのメモリ一欄にその基板用に取得した
アドレスが表示されてません。
ドライバ上で仮想アドレスの先頭を取得するだけではダメなんでしょうか?
アドレス取得後、デバイスマネージャに教える関数とかあるんですか?
WDMがよくわからなくて、XP環境でNTのドライバの本見ながら作ってます、、
0508デフォルトの名無しさん
2007/10/15(月) 02:04:03それがPCI device。そうじゃないとP2P bridgeとかで問題がでるはず。
0509.
2007/10/15(月) 20:13:34書かれていないわけだが・・・
0510デフォルトの名無しさん
2007/10/16(火) 05:33:07WDMかWDFを勉強しなよw PnPに対応しないと、やりたい事はできないよ。
0511デフォルトの名無しさん
2007/10/18(木) 11:35:57通常のPCIデバイスとしてBIOS/OSが認識して初めてWDMの話が出てくるわけだから
デバドラ開発以前の問題に思えるんだが。
そもそもそのWinアプリって何?って話なんだが。
基盤ってあたりで、XilinxとかでPCIデバイス開発したいような気もするんだけど
それなら本読めば書いてあるし、ここで聞いてる理由もわからんな
0512509
2007/10/19(金) 12:38:20レガシードライバで強引に物理リソースに
アクセスしていると思うんだが・・・
リソース割り当て&コンフィギュレーションは
されているが、専用ドライバがインストール
されていないからデバイスマネージャ上で
リソース確認できないんじゃないか?
Winアプリとは前述レガシードライバ経由で
メモリ、I/O、コンフィギュレーションスペースに
アクセスするアプリとみた。
ってここでエスパーしてもしょうがないな。
0513デフォルトの名無しさん
2007/10/19(金) 15:42:35もう本人は見てないんじゃない?
0514:デフォルトの名無しさん
2007/10/19(金) 22:27:36みなさん参考になるコメントたくさんありがとうございます。
経過報告ですが、なんとか試験的に動作できるものは作れてました。
結局、WDM的な作り方ではなく、NT用のデバイスドライバを元にして作りました。
WDMでは裏でしていることが多いようで、自分には不向きなようでした。
NT的な方法でなんでもソースに書いてとりあえず動いてます。
はじめてドライバを触るし、ゼロから作るため、いろいろ思考錯誤しましたが、
これから、それをWDM的に変更していくつもりです。
あと質問ですが、DMAをするには基板側にそういった仕様、機能がないとできないのでしょうか?
ドライバでソースを書くだけでなんとかなるものなのでしょうか?
0515デフォルトの名無しさん
2007/10/20(土) 00:51:04ソースだけで何とかしているだけでDMAでないと思うが…
汎用的に使用可能なDMAって組み込まれてたっけ?
PCIはDMA転送のモードがあるからボードの受け側が対応しているならできるとおもうけど
DMA : Direct Memory Access
メモリ<>メモリもしくはデバイス<>メモリ のデータ転送で
CPUを通さずにデータを転送させる機能
0516デフォルトの名無しさん
2007/10/20(土) 01:04:26趣味で作ってるならいいんだが、そうじゃないなら最初からWDMで書いたほうが良いよ。
PnPとパワーマネージメントはWDMじゃないと、きちんと対応することは難しい。
PnPなんて抜き差ししないから関係ないとか思ってると、後で困る事が多いよ。
0517デフォルトの名無しさん
2007/10/20(土) 09:27:53極端な表現をすればデバイスも偶然動いているだけ。
PCIデバイスのDMAとはデバイスがバスマスタになってトランザクションを
発行しなければならないのでデバイスが対応していなければならない。
0518:デフォルトの名無しさん
2007/11/02(金) 01:30:04返事遅れました。すみません。
趣味というか、興味本位ではじめたドライバの勉強でしたが、
PCI基板を2つPCにさして動かすことはできました。
多少は勉強になったようですが、所詮学生の勉強レベルですね。
就職前にデバイスドライバの勉強でもしようと思いましたが、
修論に専念します。
先生がドライバを簡単に作れるツールがあれば、買ってくれるようなことを
言われたので探してるとこでした。
いろいろありがとうございました。
0519デフォルトの名無しさん
2007/11/04(日) 02:41:06http://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:11Virtual Audio Cableのようなソフトウェアオンリーの仮想オーディオドライバを作ろうと思うですけれども
ユーザモードのアプリからカーネルモードのPortCls KSフィルタの中のミニポートのインスタンスを見つけ出して
直接通信するにはどんな方法を使ったらよいですか?
0522デフォルトの名無しさん
2007/11/07(水) 14:43:46普通の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を試してみるです。有り難うございます。
0525デフォルトの名無しさん
2007/11/17(土) 06:05:03なんとか、VS2005でコンパイル -> VMWare上のXPでデバッグ という流れを
作りたくて、いろいろいじっています。ドライバに関してはほとんど初心者です。
vsprintf という関数を使うと、"外部参照が未解決"となるので、VSの設定で、
"すべての規定のライブラリの無視"を "はい" に変更していたのを "いいえ" に
戻して、コンパイル、インストールしてみたのですが、インストールに失敗します。
インストールは、以下のサイトの、"DIP.zip"てのを使っていてエラーは "Error: 3" と
だけしか出ません。
ttp://ruffnex.oc.to/kenji/windriver/
vsprintf をコメントアウトすると、正常に動くので、原因はこいつで間違いないと思うの
ですが、なぜインストール出来なくなるのかがわかりません。
よろしければ、こうなる理由を教えてください。よろしくお願いします。
>よろしければ、こうなる理由を教えてください。よろしくお願いします。
よろしくないから、教えない。
0527デフォルトの名無しさん
2007/11/17(土) 11:43:49一つだけ。ユーザモードとカーネルモードでは基本的に使えるライブラリもAPIセットも違います。
0528デフォルトの名無しさん
2007/11/17(土) 12:27:08あなたには、ドライバ開発は5年早い。
0529デフォルトの名無しさん
2007/11/17(土) 13:13:40根本的に勘違いしていました。ありがとうございました。
0530デフォルトの名無しさん
2007/11/17(土) 23:40:07まずは自分で貼ったURLのサイトを100回読むことだ。
0531チラシ
2007/12/27(木) 13:46:15_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それから500msくらい後から、DPCの処理がされています。
漠然とした質問ですが、原因をご教授ねがえないでしょうか?
0533デフォルトの名無しさん
2007/12/31(月) 00:13:19他のデバイスの割り込み処理が入ってるんじゃね?
もしくは自分のデバイスがさらに割り込んでるとか。
0534デフォルトの名無しさん
2008/01/06(日) 13:19:56http://recwav.dip.jp/
音声でメッセージを伝えよう
http://recwav.dip.jp/M_RECWAV_Media.asp?Speech=1221925210420080106131222
0535デフォルトの名無しさん
2008/01/06(日) 22:46:361 Winアプリ側でReadFile
2 いろいろ処理され、PCI基板のメモリにデータセット(基板側で処理されます)
3 基板が割り込み発生
4 DPCの中で、RtlCopyMemoryでPCI基板のメモリからReadFileのバッファにコピー
データは、200KB〜300KBですが、
4のRtlCopyMemoryに100msくらいかかります。
何かの設定で、バスの速度を早くするとかあるのでしょうか?
それとも、DMA処理とか使って、データのコピー方法を検討する必要があるのでしょうか?
ちなみにその場合、基板内にDMAコントローラがなくても可能なものでしょうか?
詳しいかたお願いします。
0536デフォルトの名無しさん
2008/01/06(日) 23:11:44507か?
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そこそこ行儀が良いと仮定してもread cycleで4byte毎にバストランザクション発生させてんだろ。
1回のトランザクションに何サイクル必要か仕様見て実際に計算すれば予想できるじゃないか。
できるところまで突っ走るのも良いけど、ちゃんと基礎も勉強しないと役に立たない知識になるぞ。
0539デフォルトの名無しさん
2008/01/07(月) 22:46:41非バスマスタならFIFO乗っけるなりして
性能あげるしかないと思うけど・・・
0540デフォルトの名無しさん
2008/01/10(木) 21:10:23Windows 2000/XP/Vista(32bit)でドライバをロード/アンロードできるCUIのツールがあれば教えてください
>hogehoge.exe c:\fugagufa\foo.sys
スレ違いなのは承知していますが、プログラマ以外では使わないツールだろうと考えていますので、
こちらで質問させていただきました。よろしくお願いします
0541デフォルトの名無しさん
2008/01/10(木) 21:47:40ツールとしては見たこと無い
というか、自分も欲しいw
0542デフォルトの名無しさん
2008/01/10(木) 21:53:260543デフォルトの名無しさん
2008/01/10(木) 21:56:45WDK(ドライバ開発キット)に入っているサンプルのdevconツールなんてどうでしょう。
devconは、CUIアプリケーションで指定デバイスを有効/無効できます。
ドライバの有効/無効でロード/アンロードと同じ動作が出来るのではないかと思います。
他にもインストール/アンインストール等もできます。
WDKの入手方法
http://www.microsoft.com/japan/whdc/DevTools/WDK/WDKpkg.mspx
0544デフォルトの名無しさん
2008/01/10(木) 22:23:09ありがとう。
devconはデバイスの管理のようですね。
私の場合は542さんが示していただいているように純粋なアンロード・ロード機能があるもので、
もうすこし汎用的なツールがどこかしらにあるだろうと期待して質問してみました
ちょっとなさそうであれば、チープな実装で片手間に書きます(絶対あると思ってたので。。。
0545デフォルトの名無しさん
2008/01/12(土) 18:33:37CUIってところが問題なのか。
自分でちゃっちゃと書くか、driverloaderあたりをwshで叩くかかな?
0546540
2008/01/13(日) 17:31:06とりあえずかいたのでよければどうぞー
0547デフォルトの名無しさん
2008/01/13(日) 19:39:01乙andありがとう
0548デフォルトの名無しさん
2008/01/19(土) 01:46:52VFW-WDMラッパーの問題で片方ずつしか使用できません。
VFW経由では2台同時使用は出来ないのでしょうか?
例えば、USBポート拡張PCカードを使うなど、何らかの方法でVFW経由の使用が可能でしょうか?
0549デフォルトの名無しさん
2008/01/21(月) 10:00:04自分でドライバを書く気が無いならスレ違い
もし書く気があるなら、そのラッパーの問題とやらを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やっぱりgoogleとtry&errorなデバッグだけじゃ十分な知識が揃いにくいですね
0553548
2008/01/26(土) 09:57:41レスくれた人どうも。
0554ぱーぷりん
2008/02/01(金) 10:01:51ご存知の方教えてください。DDK内を検索しても見つかりませんでした。
0555デフォルトの名無しさん
2008/02/01(金) 10:48:210556デフォルトの名無しさん
2008/02/02(土) 16:34:22今wav等のHDD上のオーディオファイルをオーディオ入力に渡すというアプリを作るために
仮想オーディオ入力ドライバを作りたいんだけど、
ドライバの情報がWEB上探してもあまり見つからなくて難航してます。
参考になりそうなサイトとか知ってたら教えて下さい。
ちなみに、これを実現するにはオーディオファイルを開くアプリと、
アプリからの入力を受け付ける仮想オーディオ入力ドライバがあれば良くて、
同時にマイク等からのオーディオ入力も行うにはフィルタドライバにすれば良いと思ってるんだけど合ってます?
0557556
2008/02/02(土) 16:55:37上位ドライバとして作って、他の上位ドライバへ転送するような処理をさせればいいのかな?
0558556
2008/02/02(土) 18:27:02過疎杉
0559デフォルトの名無しさん
2008/02/02(土) 18:48:070560デフォルトの名無しさん
2008/02/02(土) 18:57:370562デフォルトの名無しさん
2008/02/02(土) 20:18:060563デフォルトの名無しさん
2008/02/03(日) 03:24:29このスレで質問する人の大半が
目的とやりたいことがあってない
0564デフォルトの名無しさん
2008/02/08(金) 15:37:36BIOSの設定を、Windowsから変更することできませんか?
WDM(デバイスドライバ)経由でできたりしないのでしょうか?
BIOSの時計は、Windowsから同期(変更)しているみたいだから、
できそうな気がするのですが・・・
0565デフォルトの名無しさん
2008/02/08(金) 20:18:500566デフォルトの名無しさん
2008/02/08(金) 22:29:510567デフォルトの名無しさん
2008/02/09(土) 00:05:090568デフォルトの名無しさん
2008/02/10(日) 15:54:56設定方法次第。
I/O経由なら可能だろうけど、
保存場所がメモリアドレスに出てきていたら、不可能な場合もある。
0570デフォルトの名無しさん
2008/02/10(日) 20:11:16CMOSのI/O portのlockはHALが持っているから勝手にアクセスすると
トラブルの原因になる。
DDKではobsoleteと書かれているがHalGetBusDataの引数に
BUS_DATA_TYPEでCmosがあるからそれを使えばアクセス可能だと
思われる。
0571デフォルトの名無しさん
2008/02/10(日) 21:34:09目標は各種ループバックデバイスが作れるレベルです。
0572デフォルトの名無しさん
2008/02/10(日) 21:59:43お前に言いたい事は、
目的によって実装が全然異なるのに「各種」なんてあるわけない。
その程度の事がわかるぐらいになってからドライバを書け。
そもそもDRM対策で個人ドライバ開発者が厳しい状況に置かれている
事を理解しろ。
0573デフォルトの名無しさん
2008/02/11(月) 00:42:06DDK落としてtoasterで心行くまで遊べばいいと思う。
実際より書籍が好きなら忘れてくれ。
0574デフォルトの名無しさん
2008/02/17(日) 21:47:25複数の異なるアドレスからデータを非同期に読みたいのです。
例えば4つのスレッドからドライバにアクセス(ReadFie、IO_CTRL_・・・等)する場合に、
複写元にデータが入ったタイミングで割り込みきて、
DPCで複写先(スレッド毎に異なる場所)にコピーするとき、
ISR、DPCでどのスレッドからのReadFileがきたのかを
判断する基準てあるのでしょうか?
ISRには独自データを追加する場所もないようです。
ISR、DPCを複数用意する手段があるのでしょうか?
0575デフォルトの名無しさん
2008/02/18(月) 08:23:37リクエスト元のスレッドなんて意識するような作りをしちゃいかんだろ。
何の為のIRPだ。
readに対する応答処理として、それは誤っている。
故に、死ね。
0577デフォルトの名無しさん
2008/02/18(月) 12:38:07複数のアドレスとring3のスレッドが一対一対応しているなら
アドレスの数だけ新しいデバイスオブジェクトを作っちまったら
どうだ?
どうしてもダメなら
・プロセスID、スレッドID等の情報をドライバに登録する
DeviceControlをつくり、読み書きの前にスレッド情報を
登録しておく。
・ReadFileはやめて
DeviceIoContro(
ハンドル,
スレッド識別読み取りコード,
上記情報バッファのアドレス,
上記情報バイト数,
読み取りデータ格納バッファアドレス,
読み取るバイト数,
...
);
・WriteFileはやめて
DeviceIoContro(
ハンドル,
スレッド識別書き込みコード,
上記情報に書き込みデータを付加したバッファのアドレス,
上記情報 + 書き込むバイト数,
NULL,
0UL,
...
);
実装としては果てしなくダサいな・・・
0578デフォルトの名無しさん
2008/02/18(月) 17:23:470579デフォルトの名無しさん
2008/02/19(火) 21:27:42WDMで書くのをやめる。
0580デフォルトの名無しさん
2008/02/20(水) 12:33:39まずドライバに持たせたバッファにコピーするだろw
0581デフォルトの名無しさん
2008/02/22(金) 01:51:29解決できない問題があり質問させていただきます。
ドライバは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ディスクリプタに登録しています。
宜しくお願いします。
0582デフォルトの名無しさん
2008/02/25(月) 00:14:32自己レスです。Pinのルーチンが呼ばれない件、解決しました。
Pinの接続設定とPinディスクリプタの設定値に不備があったのが原因でした。
失礼しました。
0583デフォルトの名無しさん
2008/03/03(月) 16:23:26を作ろうとしていますが、インストールで詰まっています。
参考書:滝口著「フィルタドライバプログラミング」では、最も一般的な方法として
DDKのサンプルにある「addfilter.exe」をビルドして使えといっており、たしかに配賦
のためインストーラーが必要になりコマンドラインベースの方法が良いので納得です。
しかし説明に乏しく引数の指定方法がよくわかりません。
usage:
addfilter [/listdevices] [/device device_name] [/add filter] [/remove filter] [/lower]
とありますが、 [/device device_name] というときdevice_nameはどんな指定のしかたをするのでしょうか?
XXXX.sysといったことなのか、それとも何かレジストリキーのようなものなのか。
[/add filter]も同様で何を指定するのか判然としません。
どなたかご存知のかた、教えていただけませんか?
宜しくお願いします。
0584デフォルトの名無しさん
2008/03/03(月) 17:42:21正直あの本の方法は特殊だと思う。
一般的に特定のデバイスで動作させるには、
そのドライバにインストールできるようなInfファイルを書けば良くて
サンプルはDDKについてるから、それとヘルプ参照しながらで
簡単に作れたと思う。
0585デフォルトの名無しさん
2008/03/06(木) 12:34:34ざっとソースを眺めたところ、
device_nameは/listdevicesの出力結果、
filterはHKLM\SYSTEM\CurrentControlSet\Servicesにぶら下がってるキー名
に見えた。
0586デフォルトの名無しさん
2008/03/14(金) 03:44:23Visual Studio 2005 なら正式版あるけどテンプレにドライバなかった
0587デフォルトの名無しさん
2008/03/14(金) 05:52:54Visual Studioに統合もできたはず
0588デフォルトの名無しさん
2008/03/14(金) 11:39:050589デフォルトの名無しさん
2008/03/14(金) 17:24:31本家WHDCサイトも見ておけッ
http://www.microsoft.com/japan/whdc/DevTools/default.mspx
0590デフォルトの名無しさん
2008/03/14(金) 21:03:48ありがとう。探してみるわ
>>589
サー!イエスサー!!
0591デフォルトの名無しさん
2008/03/20(木) 16:36:37wudfddi.hをインクルードすると
構文エラー : 識別子 '_in'
というエラーが出てしまいます。
確か、VS2002や2003で最近のSDKやWDKをコンパイルとすると
この手のエラーが出たような記憶があるのですが、
何とか突破する方法はないでしょうか。
WDKとダウンロードインクルードパスの追加は完了しています。
0592デフォルトの名無しさん
2008/03/23(日) 21:49:58止む無くVC2008をインストールして解決することにしました。
0593デフォルトの名無しさん
2008/05/09(金) 21:00:21それは最近のVC++の/analyzeオプション用の注釈だと思う。
単純に/D__inとかで空に置換してコンパイルできない?
0594デフォルトの名無しさん
2008/05/11(日) 10:33:31VCに最初から入っているPlatformSDKに相当するものとの相性があって
最新のもの同士なら大抵うまくいくが、片方のバージョンが違うと
インクルードがうまくいかないことが多い。
WDKは最近出たものだから余計そうじゃないかと。
逆にPlatformSDK入れてパス通せばうまくいくんじゃないかと。
すでに動いているだろうから余計なことする必要は無いけどね。
0595デフォルトの名無しさん
2008/05/26(月) 21:52:05windows.hがインクルード出来なくて、RegOpenKeyEx()が使えないです。
なにかヒントください。
VC6+XPSP1DDKです。
0596デフォルトの名無しさん
2008/05/26(月) 22:32:31Windows起動中にロードするドライバだとレジストリの場所によっては読めないところもあるので、
注意してくださいね。
0597デフォルトの名無しさん
2008/05/26(月) 22:33:02Windows.hはユーザーモードアプリケーション用であって
ドライバのカーネルモードはntddk.hとかになる。
サンプルをインストールしてよく見てみるべし。
0598デフォルトの名無しさん
2008/05/26(月) 22:36:200599デフォルトの名無しさん
2008/05/28(水) 22:58:32ハードウェアが存在しないのでバスドライバがハードウェアの追加を「検出」することも
ないと思うのですが、実際にはAddDeviceがちゃんと呼び出されるみたいです。
なぜ呼び出されるのでしょうか? MSのサンプルRAMディスクのソースを見ても
特別なことをしているようには見えません。
0600デフォルトの名無しさん
2008/05/29(木) 20:27:50RtlQueryRegistryValuesで読めました。
引数悩んだけど、なんとかなりました。
thx
0601デフォルトの名無しさん
2008/05/30(金) 22:14:07.inf(inx)
0602デフォルトの名無しさん
2008/05/31(土) 09:38:22デバイスマネージャで非表示デバイスの表示をやると出てくるやつがそれだ。
そこに登録されているものは、すべてのデバイスの列挙が終わってから
DriverEntryが呼ばれる。
DriverEntryでの処理が適切であれば、AddDeviceがすぐに呼ばれるはず
AddDevice内で正式に処理を行う。
で、普通のドライバかカーネルモードサービス(という表現を他のところで見たが
これの正式な言い方は知らない)をどこで区別してるかというと
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
が本体のエントリポイント。
だから手順を知っていればInfすらいらないはず
まあ、Inf使ったほうが確実だとは思うけどね。
0603デフォルトの名無しさん
2008/06/02(月) 10:54:45トンクス。(599じゃないけど
自分で追ってみたんだけど、Servicesセクションの、AddServicesディレクティブで指定したセクション内で、
StartType = 3 ; SERVICE_DEMAND_START, bulkusbの場合…PnPで検出する場合はこちら
と指定するか、
StartType = 0 ; SERVICE_BOOT_START, ramdiskの場合…OS起動時に必要なデバイスはこちら
の違いだと、思ってるんですが、、あってます?
あとお聴きしたいんですが、
ramdisk(StartType=0?)の場合、AddDeviceに渡されるPDOって何なんでしょうか?
他のデバイスの場合は、バスドライバが作成した何かだと思うんですが…
0604603
2008/06/03(火) 00:13:00modelsセクションの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ファイルの探索に用いられるのか。
0605603
2008/06/03(火) 01:14:27Walter本(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されるんかな?
ご意見かポインタきぼんぬ。
0606603
2008/06/03(火) 01:34:37ちゃんと読まなきゃダメだな。スレ汚しスマソ
0607デフォルトの名無しさん
2008/06/05(木) 17:31:44プリンタドライバ開発を始めようというところで、ソースコードデバッグがしたいのですが、
ブレークポイントの設定ができずに悩んでます。
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行ずつ実行されているような雰囲気。
どうもシンボルが読み込めていない気がするのですが、どうすれば良いでしょうか?
0608デフォルトの名無しさん
2008/06/05(木) 22:36:094の時点でだめだね
使ってるモジュールがリリース版になってるなどして
ロードしてるモジュールとシンボルが一致して無い。
ロードしてからコンパイルしなおしてるとか
ちゃんとファイルがコピーされているから
日付、サイズをちゃんと確認すべし。
0609デフォルトの名無しさん
2008/06/06(金) 06:14:490610デフォルトの名無しさん
2008/06/06(金) 10:20:16レスありがとうございます!
1.実行用マシンの Server 2003 Checked x86 でリビルドし、プリンタインストール。
2.すぐに解析用マシンにソースとpdbファイルなどをコピー。
3.実行用マシン再起動
としてみましたが、結果変わりませんでした。
何か基本的な手順を抜かしていたりしませんか?
あと基本的な質問なのですが、
実行用マシンで印刷が実行されると、それに必要なモジュールが解析用マシンにロードされるのでしょうか?
そしてモジュールがロードされた後に、pdbなどのシンボルを探してロードするのですか?
>>609
すみません、タイプミスでした。
実際は srv にしていたので、そこは大丈夫かと思います。
0611デフォルトの名無しさん
2008/06/07(土) 00:46:11(DLLって言われた時点で気がつくべきだった)
カーネルデバッグできるのはカーネルモードだけだった気がする
だから、VisualStudioか、WinDbgで、起動してるプロセスにアタッチするように
するしか無いんじゃないかな
0612デフォルトの名無しさん
2008/06/07(土) 09:53:37プロセスにアタッチって1台のマシンでやるわけですか?
0613デフォルトの名無しさん
2008/06/07(土) 16:58:490614デフォルトの名無しさん
2008/06/08(日) 12:05:37INFファイルから起動かけるのって無理かな?
逆に、EXEからINF実行って仕組みが一般的?
0615デフォルトの名無しさん
2008/06/08(日) 14:27:19デバッグするマシンにWinDbgいれれば1台でできるし
開発マシンから見たければ、リモート設定すればできる。
ただ、どっちにしろ、パスだのログインだのアクセス権だの
結構めんどくさい&ひっかかるので注意。
>>614
ExeからInfならSetupDi系関数なら簡単じゃなかったかな
ドライバインストール時に呼ばれる個別設定はCoInstallerDLLだったような・・・
0616デフォルトの名無しさん
2008/06/09(月) 00:42:13デバッガから印刷しなければ1台で問題なし
そもそもWinDbg自体から「プリント」はできないはずでは?
WinDbgを入れて、スプーラにアタッチして
それから、メモ帳などを開いて、印刷実行
これでマシンは1台でOKですよね?
ブレークポイントがうまくつけられない orz
0617610
2008/06/09(月) 13:33:11プロセスにアタッチして、とうとうデバッグができました・・・(;*´∀`*)
「ファイルに出力」ってのを選ぶとプリントプロセッサが動かないらしく、
何もつながってないポートを選んで印刷したらブレークポイント設定できました。
VisualStudioでもデバッグできたので、ビルドもできれば楽になりそう・・・
0618デフォルトの名無しさん
2008/06/12(木) 20:52:15CreateFile(filename〜)を指定して、ファイルを作り出そうとしているんですが
うまくいきません 無論fpt=fopen("log.txt","w") などしても
無駄です。
OUTPUTとしては「印刷物(中間ファイル)」と「コード中に外部ファイルに
書き込んだファイル」
を考えているのですが、、、、ドライブのソースコード中に何を
書いたら外部ファイルをつくりだすこともできるんでしょうか?
要するにコンソールでいえば、fopenして外部ファイルに書き込んで
チェックする作業をドライバでもやりたいのです。
0619デフォルトの名無しさん
2008/06/12(木) 23:16:25コンパイルエラーとかはないの?
デバッグでステップ実行してみたら?
俺は印刷データをビットマップファイルに保存するのに成功してるから、
普通のログファイル作成も問題ないはず。
0620sage
2008/06/12(木) 23:27:10AVStreamのMiniDriverとしてUSBAudioドライバを作っているのですが、
MIDIのストリーム転送機能で、KS(KernelStream)から送られてくる
MIDIデータに不明なデータがあります。
KSから送られてくるMIDIデータは、
不明データ(4バイト)+MIDIメッセージ長(4バイト)+MIDIメッセージ(可変長)
の形式で繰り返し送られてきます。
不明データと書いた最初の4バイトが何を指すものか
知っている方がいたら教えてください。
USBAudioドライバからデバイスには、USBMIDIフォーマットで
転送するため、MIDIメッセージ以外のデータを送る事はないのですが、
制御かなにかで必要となるデータなのでしょうか?
宜しくお願いします。
0621デフォルトの名無しさん
2008/06/12(木) 23:39:29sageさん、思いっきりAGEてるんですけど><
0622デフォルトの名無しさん
2008/06/13(金) 17:26:45WDKをVSに統合したいんですけどどうすればいいんですか?
アプリみたいにVS上でIDEを使って開発したいんです。
WDK: Server 2008
VS: VS2008Pro
0623デフォルトの名無しさん
2008/06/14(土) 01:46:17APIつかってエラー出たならGetLastErrorが基本。
>>620
KS系はPinで定義してあるデータを送るものだから
Pinの定義を調べてみては?
>>622
ddkbuild.cmd
0624デフォルトの名無しさん
2008/06/14(土) 13:49:08老師、感謝
今からGoogle先生を訪問します
0625デフォルトの名無しさん
2008/06/14(土) 19:19:24ありがとうございます。
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データのフォーマットを
探しているのですが、見つけられないでいます。
0626デフォルトの名無しさん
2008/06/14(土) 20:52:39タイムスタンプぢゃないのかしらん
0627デフォルトの名無しさん
2008/06/14(土) 23:20:24定石をありがとう。感謝します。
CreateFile関数はどうやらプリンタドライバ中では使えない様
なんですが、、ZwCreateFileという関数があるのですが
それならプリンタドライバ中でも使えるのか今確認していますが
何か情報をお持ちの方は情報をお願いします。
最悪、スプーラに書き込みを行えばWinDbgなしでもDebug作業が
できることはわかりました。
0628デフォルトの名無しさん
2008/06/15(日) 10:35:18ちょっと聞きたいんだが、仕事でプリンタドライバ作ってるの?
お遊びなら、色々試行錯誤して楽しむのもいいけど、お仕事ならきちんと基礎を身に付けてから
でないと、ユーザーに大きな迷惑をかけることになるよ。
周りにドライバを作り慣れた先輩とかいないの?
0629デフォルトの名無しさん
2008/06/15(日) 10:54:56勉強しつつがんばってくれ、みたいな感じで始まった。
仕事はいろいろともらっている2年生。
嫌ではないが、進んでやりたくはないという状況だなー。
だって全然わからんのだよ・・・orz
>>627
ソースがいま手元になくて分からんけど、
CreateFileWって関数かも?
Unicodeじゃないとだめって制限があるらしいので。
0630デフォルトの名無しさん
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サンプルを実際に動かしてみる(必要なら対象機器を
勉強用に会社に買ってもらう)のが良いんでは。
ドライバもだんだんユーザーモードで作れるようになってきてるみたいだけどね・・・
0631デフォルトの名無しさん
2008/06/15(日) 15:37:49>>611にも書いてるけど
0632デフォルトの名無しさん
2008/06/15(日) 16:31:30そういうのは定番の本で足りちゃうんだよね。
で、ドライバに関してはさらに特殊でカーネルモードですらないっていう
これはMSDN、ぐぐる、サンプルソース見るしかない。
ユーザーモードについては一般的なプログラミング知識があればできると思うけど
GetLastErrorを試してないあたりに、その知識も少ないと感じる。
セキュリティ的な面でユーザーモードといえども使えない関数があるかもしれないから
最低でもGetLastErrorで調べてみろってことなんだが。
とにかくがんばれとしか言いようが無いな。
0633デフォルトの名無しさん
2008/06/18(水) 19:16:3486用には普通にビルドできるんですが、64用にビルドすると
外部参照エラーになってしまいます。WinUsb_Initialize()とかの
関数が軒並みアウトです。
普通にリンカーの餌に、SDKのLib/x64ディレクトリにあるsetupapi.lib
を与えてるんですけど。WINSUB.libなんてのも有りそうで無いみたいだし。
だれかわかる人がいたら教えてください。
環境はVC++2008 / Microsoft SDKs v 6.0A / WinDDK 6000です。
0634デフォルトの名無しさん
2008/06/18(水) 19:19:55WINUSB 正
0635デフォルトの名無しさん
2008/06/19(木) 09:47:14どこを見てるんだ?
普通に DDK の lib 探したら winusb.lib が見つかるわけだが。
winusb.dll 使ううえにダイナミックリンクじゃないんだから lib ファイルがあるに決まってるだろ。
0636デフォルトの名無しさん
2008/06/19(木) 15:04:48そんなに怒らないで。
>>633の彼はドライバ開発したのとがないんだ。
だから、winusb.libも普通にVC2008やPSDKにあると思っている。
さすがに、setupapi.libを与えたには、ぽかーーーんとした
0637デフォルトの名無しさん
2008/06/19(木) 22:12:08これ、ひょっとしてWDKでMFC4.2アプリ開発できるってことですか?
あと、先生方はWDKをVSに統合して、IDE上でドライバプログラム書いているんですか?
0638デフォルトの名無しさん
2008/06/19(木) 22:51:17付いているのだとMSの中の人がどこかのMLで言ってた
0639デフォルトの名無しさん
2008/06/19(木) 22:56:490640デフォルトの名無しさん
2008/06/19(木) 23:06:08それってドライバの話じゃなくてさ
ターゲット環境が変わったら、ライブラリも変えろって話でしょ?
そこらへんはC言語の基礎的な話なので、
どっかでちゃんと理解しといたほうがいいんじゃない?
>>637
できると思うよ。ただ、本来の機能全部入っているかはわからない。
Ioctlなどでドライバを操作したいユーザーモードアプリケーションを作ろうとした場合のためにあると思われる。
カーネルモードのヘッダと一緒にすると不具合が出る部分を出ないようにしたりしてるんじゃないかね
と、嘘かもしれないことを言ってみる。
開発環境は人による。秀丸にこだわってる人も居るだろうし、人それぞれ。
0641デフォルトの名無しさん
2008/06/20(金) 00:20:08自分が使っているVC2005expressでMFC使えないから、ひょっとしたら
WDKと連動してやるとMFCアプリのコンパイル(他人のソースを)できるようになるのかなと
思ったんです。小物のcplを作る程度の物しかそろってないですかね。あと、PrefastもVC2005express
で使えたら良いなと思ったり...
自分みたいなへたれですと、インテリセンスないとどうしようもない
何のtypedefなのか、構造体のメンバなんかがさっぱりなんでIDE必須なんですよね
で、WDKインストールしてもVSに統合されないから、他の人は自分で統合してるのかな
と思ったしだいです。ドライバー職人ぐらいになると、インテリセンス鬱陶しいし、
使い慣れたエディタの方がVSでやるより良いとなるんですか!
0642デフォルトの名無しさん
2008/06/20(金) 00:43:40適当なプロジェクトを作って、ソースファイルを登録して
ヘッダーへのパスを通せば、インテリセンスも使える
エディタとしてならIDE使えるよ。
buildは、それぞれのコマンドプロンプトからだけど。
0643デフォルトの名無しさん
2008/06/20(金) 02:04:370644デフォルトの名無しさん
2008/06/20(金) 05:53:310645デフォルトの名無しさん
2008/06/20(金) 21:28:280646デフォルトの名無しさん
2008/06/20(金) 23:57:36解決したのかな?たぶんKSMUSICFORMAT::TimeDeltaMsだよ。
0647デフォルトの名無しさん
2008/06/22(日) 23:44:130648デフォルトの名無しさん
2008/06/23(月) 22:04:46どのメンバで制御すればよいのでしょうか?。
それらしきものが見当たらないのですが・・。ちなみにプリンタドライバの
開発になります。
0649デフォルトの名無しさん
2008/06/23(月) 22:29:360650デフォルトの名無しさん
2008/06/24(火) 21:11:28その影響では?
0651デフォルトの名無しさん
2008/06/29(日) 18:34:560652デフォルトの名無しさん
2008/06/30(月) 09:45:270653デフォルトの名無しさん
2008/06/30(月) 12:00:23「自分のくっついているデバイス」? 自分をEnumerateしたバスドライバのこと?
「デバイスID」? デバイスインスタンスIDのこと?
質問の意味不明。エスパー登場求む!
0654デフォルトの名無しさん
2008/06/30(月) 13:37:390655デフォルトの名無しさん
2008/06/30(月) 18:29:310656651
2008/06/30(月) 21:48:59例えば、Microsoft ACPI-COmpliant Embedded Controllerをデバイスマネージャのプロパティで見ると、
(少なくとも私の環境はですが)「一致するデバイスID」は*pnp0c09となっています。
これをドライバ内部から調べる方法がないかなと探しています。
もちろんコード中に文字列として"*pnp0c09"を持っていれば良い話なのですが、
そうではなくて、APIなどで、自分がフィルタドライバとしてくっついているデバイスの
「一致するデバイスID」やその他、プロパティの詳細タブで見れるような情報を
取得するような方法をご存知ないでしょうか?
0657デフォルトの名無しさん
2008/06/30(月) 22:03:20IoGetDeviceProperty()や
IoOpenDeviceRegistryKey()からレジストリ読み取りで揃うんじゃね?
0658デフォルトの名無しさん
2008/07/05(土) 00:14:18WinDbgは使えないのでしょうか?。
そもそもWinDbgはカーネルモードの(プリンタ)ドライバですよね?。
ご意見お願いします。
0659デフォルトの名無しさん
2008/07/05(土) 08:55:53某企業ってどこ?
そこのプリンタは買わな・・・・(以下自粛)
0660デフォルトの名無しさん
2008/07/05(土) 10:03:320661デフォルトの名無しさん
2008/07/05(土) 13:33:540662デフォルトの名無しさん
2008/07/07(月) 09:46:040663デフォルトの名無しさん
2008/07/09(水) 12:20:120664デフォルトの名無しさん
2008/07/16(水) 12:39:520665デフォルトの名無しさん
2008/07/28(月) 00:39:170666デフォルトの名無しさん
2008/08/12(火) 22:58:01フィルタドライバのっけて座標やボタンの状態を取得できるところまできたんですが、
連射させるところで行き詰まってしまいました。
ボタンを押したら Read が発生するんですが、次に離すまでRead がこないので
ボタン状態を変更しようにもできません。
なんとかしてボタンを押したことにしたり離したりしたことにできないでしょうか?
できるものなら何かヒントをお願いします。
0667デフォルトの名無しさん
2008/08/12(火) 23:18:07フィルタかけるところが違うんじゃないか?
0668666
2008/08/13(水) 12:29:51そこらへん調べてみます
ありがとうございました
0669デフォルトの名無しさん
2008/08/14(木) 03:07:29もしかしてIRP_MJ_READにデバッグ出力を入れただけだとしたら
下位のドライバがpendingにしてるから次のreadが来ないのでは。
0670デフォルトの名無しさん
2008/08/19(火) 20:26:36どうもです。恥ずかしながら私がアタッチしてたのはリモートデスクトップ用の
マウスクラス(?)のようで、ACPI のほうにアタッチしたら今度はREADそのものが
こない状況になりました。
DDK サンプルの mouclass やら moufiltr を見ると根本的に間違っていた気がします。
とは言え、moufiltr は USB マウスにアタッチしても Read 処理ではなく
MouFiltr_ServiceCallback() で処理するようになっていますが、GPAF のソースを
見ると(ゲームパッドとは言え)、Read で Hid 処理をしてたりするのでゲームパッドと
マウスの構造は同じ Hid でも違うのかなぁ、なんて思ったり。
結局、PS/2やUSBの選択、どの上位フィルタとして作るのが良いのかわからない状況に
なってしまいました。
今は本買って基礎からお勉強中です。フィルタドライバにまで関して言及してある
書籍って少ないですねぇ。
0671デフォルトの名無しさん
2008/08/20(水) 10:33:44ボタンに連射を付けるだけなら普通にmoufiltrで十分だとは思うけど。
連射発行タイミングをチェックするスレッドで
必要に応じてServiceCallback風の動作をすることと、
次の要求が来たときに下位ドライバにコマンドを発行せずに
スルー処理を追加する必要があるはず。
0672デフォルトの名無しさん
2008/08/20(水) 23:01:18どうもです。その ServiceCallback 風の動作をするというのがなかなか敷居が高そうで・・・
海外掲示板とか覗いていたら
「WRITE 時に mouclass の ServiceCallback をコールしたらBSOD になったけどどうすれば良い?」
みたいな内容のスレッドがあって結局未解決のようでした。
とりあえず、そのせんで行ってみて色々試して見ます。
0673672
2008/08/21(木) 22:26:24ありがとうございました。
ところでフィルタドライバは動的にアンロードできないと聞いたんですがXP や VISTAでも無理なんでしょうか?
SCManager 使ってドライバを停止および削除して、SetupDIでフィルタ対象デバイスを再起動させると
フィルタはされなくなるんですが、ドライバそのものはアンロード処理されずにロードされっぱなしになってるようで…
単なるつくりの問題ですか?
0674デフォルトの名無しさん
2008/08/22(金) 02:13:24普通にデバイスいなくなったら元ドライバとセットでアンロードされると思うんだけど。
それでアンロードされてない、ってことは終了処理にミスがあるんじゃね?
スレッド終了うまくいってないとか。
0675673
2008/08/22(金) 23:21:10もっと調べてみます。どもでした。
0676デフォルトの名無しさん
2008/08/23(土) 08:42:14フィルタドライバがWDMならデバイスを抜くとフィルタドライバも開放されるんだけど
私がHIDでやったときは、WDMだとうまくいかなかったのでNTドライバにしました。
そうするとデバイスを抜いただけではアンロードされないですが、SetupDI系の関数で
アンロードさせることはできます。
0677デフォルトの名無しさん
2008/08/23(土) 09:17:20USBデバイスのフィルタドライバを書き、そのデバイスに対し
SetupDiSetClassInstallParamsでDIF_PROPERTYCHANGE/DICS_PROPCHANGE指定して
SetupDiCallClassInstallerを呼び出しいる。
で、無視できない確率でドライバアンロードに失敗する。
自前ドライバの処理でIRP_MN_QUERY_REMOVE_DEVICEに対し
STATUS_SUCCESSを持たせて下位ドライバを呼び出しているのに、
IRP_MN_CANCEL_REMOVE_DEVICEが飛んでくる。
これって、下位ドライバがリムーブを拒否してるんだと思うが
何が原因かわからん。
何か思いつく事があったら教えてください、皆の衆。
0678デフォルトの名無しさん
2008/08/23(土) 21:22:52ありがとうございます。
アンロードされずに残ったドライバを、DriverWalker などでアンロードさせようとしても失敗しちゃうんですよね。
何か解放してないんでしょうねorz
0679デフォルトの名無しさん
2008/08/24(日) 17:21:54動きを見てみればいいんでない?
0680デフォルトの名無しさん
2008/08/25(月) 23:32:13これでCPUのクロック数を変化させることってできますか?
WinRing0
ttp://openlibsys.org/index-ja.html
0681デフォルトの名無しさん
2008/08/25(月) 23:38:070682まつせ
2008/08/25(月) 23:49:320683デフォルトの名無しさん
2008/08/26(火) 21:59:10Host:Vista or XP、Target:Vistaの構成で1394接続って可能ですかね?
手順通りにやってもうまくいきません。
0684デフォルトの名無しさん
2008/08/26(火) 22:20:55Host XP Target Vistaで普通にできてる。
だが、使っている1394アダプタによっては動かないことがある。
VIAの古いチップではだめだった。
外人でも似たような人はいるが具体的な話はまだ見たことが無い。
ホスト側はTIのチップつんだやつにしとけ ぐらいしか書いてないが
今時はTIのチップ積んでることなんてあまりないので難しいかも。
手順に問題が無いのであれば
とりあえずホスト側の1394の交換をしてみることをオススメする。
0685693
2008/08/27(水) 22:37:11ケーブルを疑って新しいケーブルに交換したらうまく動きました。
別のマシンでは動いていたんで、まさかとは思ったんですが・・・
Vistaは1394ネットアダプタがないんで通信できてるのかよくわかんないですね。
ともかくありがとうございました。
0686デフォルトの名無しさん
2008/08/28(木) 23:17:50C言語は多少経験ありますが、ドライバ開発はまったくないので手探り状態で勉強してます。
ディスプレイ関連の操作をしたいのでサンプルソースの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
0687デフォルトの名無しさん
2008/08/28(木) 23:22:390688686
2008/08/28(木) 23:27:46まじですか・・・
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インストールしてあるのは関係ないですよね・・・?
0689デフォルトの名無しさん
2008/08/28(木) 23:27:510690デフォルトの名無しさん
2008/08/28(木) 23:29:47SOURCE とか makefile はちゃんとコピーした?
0691686
2008/08/28(木) 23:30:26フォルダ別に作ってMAKEFILEとSOURCESをコピーして
SORCESの"TARGETNAME"と"SOURCES"だけ編集してビルドしてます。
0692デフォルトの名無しさん
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;
}
だとどうよ?
0694デフォルトの名無しさん
2008/08/29(金) 00:03:06video.h とか使う場合は wdm.h とかの include 無理なんかな。
0695686
2008/08/29(金) 00:08:35そうなんですよね
サンプルのようにDriverEntryの戻り値型と引数型を変更すると
ビルドできるんですが、DriverEntryってどこ調べてもNTSTATUSと
PDRIVER_OBJECT、PUNICODE_STRINGで定義されてるので・・・
0696デフォルトの名無しさん
2008/08/29(金) 01:47:15これはドライバ開発をする人が誰もがはまる。
WDMドライバを開発=フィルタドライバorクラスドライバ
だが、ある程度共通化できるルーチンが多い場合に備えて
クラスドライバをMSが用意し、そこからリクエストをするのがminiportドライバ
miniportでは専用のライブラリ関数が用意されていて
それら以外の関数は使ってはいけない。
したがってntddk.hをインクルードできないし、してはいけないし
MSは共存させるつもりもない。
それでも無理やりやるのは完全にハックになり
サービスパックやパッチが当たっただけで動かなくなる可能性がある。
0697デフォルトの名無しさん
2008/08/29(金) 21:07:590698デフォルトの名無しさん
2008/08/29(金) 22:32:28ServicesレジストリのStartキーが0ならブートローダーのときに呼ばれる。
起動ディスクを読み込むのに必要なデバイスのStartキーはすべて0になっていないと0x7Bが出る。
OSインストール時にIDEデバイスとか登録されてはいるが
カーネルメモリ節約のために必要の無いデバイスはStartが4になっている。
そのためディスクを付け替えたりすると起動しないことがある。
0699デフォルトの名無しさん
2008/08/30(土) 08:39:30minispy、filespyサンプルの処理内容を理解するのに役立つ書籍や入門サイトがあったら教えていただきたいです
目的は、ファイルの上書きやコピーなど高レベルなファイルI/O監視ドライバを作成することです(フックではなくドライバで行いたいです)
サンプルでは低レベルなIO情報まで監視されてしまうため、これを改造できないかなと考えてます
自分は、ドライバ開発経験はなしです。キーボードのフィルタドライバサンプルは、日本語の書籍で勉強し、軽くは理解しています。
…ソースコードが少ないminispyを理解したいんですが、ミニドライバの資料ってあまりみたことないです
0700デフォルトの名無しさん
2008/08/30(土) 13:00:02違ったらよいんだが、
Windows XP フィルタドライバプログラミング [入門と実践]
を読んで「軽くは理解しています。」と思っているなら認識改めたほうがいい。
あれで得た知識(見たサンプル)は全く役にたたない。
0701デフォルトの名無しさん
2008/08/30(土) 16:18:14素朴な疑問だが上書きやコピーといった監視だったら、ドライバつかわんでも
FindFirstChangeNotification()という手もある。
これじゃあなんかまずい理由あるの?
0702デフォルトの名無しさん
2008/08/30(土) 19:59:59フィルタドライバプログラミングではないです。それは参考にしてないです。
API徹底理解っていうムックと。Cマガのバックナンバーです。
「ダミー関数はこんな感じで作って」、「でもPnPのダミー関数は別」ってことくらいしか理解してないです。
filespyを見ても、「なんでこのファンクションを監視するんだ?」って疑問しかわかないんです。かと言って、USBドライバを最終目標にしてる書籍はfilespyの世界とは畑違いな気がして
>>701
あのAPIの詳細は知らないんですが、ファイルを操作したユーザー名やアプリケーション名が取得できるならやってみたいです。
ただ、ローカルだけでなく、リムーバブルやサーバーやネットワークPCも監視が条件なので
0703デフォルトの名無しさん
2008/08/30(土) 21:43:59ローカルならPIDが入ってくるからそこからユーザートークンに変換すればいい
でもネットワークドライブはまた別の話になるよ
リモートのPIDなんか分かってもしょうがないしね
そもそもSMBのリダイレクタのPIDしか入ってこないだろうし
0704デフォルトの名無しさん
2008/08/31(日) 00:32:13それが上書きなのかコピーなのかというような意図?は、カーネルレベルでは
失われているような気がするんだけど。
0705デフォルトの名無しさん
2008/08/31(日) 01:03:30まずはWindows Internals(和訳名インサイドWindows?)読んでみたらどうだ。
0706デフォルトの名無しさん
2008/08/31(日) 07:19:19フィルタドライバで分かるのは削除と同じボリューム内の移動だけだね
というかやりたいこと具体的に言わんと
0707702
2008/08/31(日) 10:10:41minifilterで作っていきたいと思います。ネットワークからリモートログインしてきたユーザーの監視はしません。自分がリモートで操作したファイルは監視します。
>>705
ドライバ系のAPI知識はゼロに近くて、ファイルシステムのフの字も知らないです。インサイドウィンドウズの購入してみます。…でも金がないので会社から借ります
>>706
やりたいのは、フックベースで実現できていたファイル監視をドライバに移植することです。
>>704
コピーや上書きは、フックベースでも追いきれないとこがあったんで「ReadFileで処理したアドレスがWriteFileで処理されたらコピー扱い」みたいなマージをしており、ドライバでもマージしようかなと考えてます
長い旅路になりそうです。ありがとうございました
0708デフォルトの名無しさん
2008/09/02(火) 01:37:50シリアルクロスケーブルを購入したのですが、
どちらのPCにもシリアルポートがないようなのです。
調べてみたところ、USB シリアル変換機というのを利用すれば、
それを経由してシリアル通信ができそうなのですが、
この変換機はPC1台につき1個、つまり2個必要であると考えて問題
ないでしょうか。
また、クロスケーブルではなく、ストレートのシリアルケーブルでは、
デバッグはできないものなのでしょうか。
0709デフォルトの名無しさん
2008/09/02(火) 06:40:140710デフォルトの名無しさん
2008/09/02(火) 14:19:43つまり、シリアルポートがない場合は、
リモートからのデバッグはできないと。
デバッグといっても、DbgPrintの結果を確認したいだけなので、
ローカルでDebugViewを使う方法でもよいのですが、
リモートの方法も気になるところです。
0711デフォルトの名無しさん
2008/09/02(火) 14:59:28>また、クロスケーブルではなく、ストレートのシリアルケーブルでは、
>デバッグはできないものなのでしょうか。
時代が変わって、232cなんて使わなくなってきたのは分かるが・・・
0712デフォルトの名無しさん
2008/09/02(火) 20:03:230713デフォルトの名無しさん
2008/09/02(火) 22:29:21作ってます。
汎用性を持たせるためにinf及びdelファイルを書き換えるだけで
インストーラ、アンインストーラは再コンパイル不要とした作りに
したいと思っています。
そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を
抜き出して行うような方式としたいとおもうのですがなにか
方法(Win32 API)は無いでしょうか。
0714デフォルトの名無しさん
2008/09/03(水) 00:10:22INFが適切なら実行するだけでインストールしてくれる
あと、DPINSTをAPI化したDIFとかいうやつもある。
0715713
2008/09/03(水) 21:16:14たしかにINFのみでインストールだけなら可能なのですが、
コマンド等でカスタマイズも考えているので...
で、自ら調べた結果、GetPrivateProfileStringが
INIだけでなくINFにも使えそうなので、これを組み
合わせて作ろうと思うのですが他に何かいいアイディアは
ありますか?
0716デフォルトの名無しさん
2008/09/03(水) 22:35:580717713
2008/09/10(水) 13:20:32何とかできそうです。
ありがとうございました。
0718デフォルトの名無しさん
2008/09/15(月) 22:45:22インストールしたのですが、なんだかロードされてない感じがします。
(KdPrintなどのデバッグメッセージが表示されない)
起動時に読み込まれるドライバには署名が必須という条件にひっかかかっているのかと思い
Bcdedit.exe /set nointegritychecks ON
を実行してみましたが何も変わりませんでした。
VISTA にインストールするにはどうしたらよいのでしょうか?
ちなみに XP だと問題なく動作しました。
0719デフォルトの名無しさん
2008/09/15(月) 23:36:24フィルタされてるのでは。
KdPrintExかDbgPrintEx使ってみたらどう?
0720デフォルトの名無しさん
2008/09/16(火) 00:28:460721デフォルトの名無しさん
2008/09/16(火) 01:03:020722718
2008/09/16(火) 10:32:18使用してみましたが、結果変わらずでした。フィルタされてないようです。
>>720
してないです。署名はどのような設定だろうと必要なんでしょうか?
テスト用の署名では公開できないと思うので、公開しようと思ったら
リリース用の署名をとらないと駄目ってことでしょうか?
>>721
http://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign.mspx
では x86 も「ロード時に読み込まれるドライバには埋め込み署名が含まれている必要が
あります」とあります。
0723デフォルトの名無しさん
2008/09/16(火) 10:52:05公開前提ならテスト署名で動作確認後にリリース署名確保でいいと思う。
デバイス固有でいいなら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
でロードできるようだが。
0724718
2008/09/16(火) 22:13:50存在しないことになってたんですねorz
テスト署名してみたところ、無事ロードされるようになりました。
でも HD DVD とか Bluray とか再生できなくなるのかな・・・?
みなさん、ありがとうございました。
0725デフォルトの名無しさん
2008/09/17(水) 09:26:140726デフォルトの名無しさん
2008/10/04(土) 02:38:08そこで、事始めに 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 を受信したときに、
頻繁にブルースクリーンが発生します。ファイルサイズが小さな場合は成功するときもあるのですが・・・
スレッド間での排他処理を記述しなければならないのかなとも思いましたが、単にリクエストを下位デバイスに渡すだけでも
そういった処理は記述する必要なのでしょうか?
0727デフォルトの名無しさん
2008/10/05(日) 10:00:09その問題のソースをどこかにアップして、ブルースクリーンの内容を全部書けば
すぐ解決するのになんで答えを省くかな
0728デフォルトの名無しさん
2008/10/07(火) 08:13:49サンプルでは、ドライバ側のFltGetFileInfomationでファイル名取得しとんがやけどその時点てとれるんかな。今日デバッガ準備して確認するけど。暇な人、教えてください(´・ω・`)
0729デフォルトの名無しさん
2008/10/09(木) 20:56:200730デフォルトの名無しさん
2008/10/12(日) 19:20:53ブルースクリーンの内容を書かないと何もいえない。
まずはBSODへの対処の仕方を
MSDNでよく読んで実践してみることをお勧めする。
ただ、フィルタードライバーのR/Wでそういうことが起きているということなら
バッファの取り扱いが適切で無いと推測する。
ファイルシステムの場合、R/Wへのアクセスが3種類ぐらい来るので
それらを適切に扱わないとすぐ問題がでたはず。
>>729
%sではなく%wsとするとちょっといいことがあるかも。
0731デフォルトの名無しさん
2008/10/14(火) 08:04:50ありがとうございます.指摘の通りバッファの扱いが不適切なのかもしれません.
まず,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
0732デフォルトの名無しさん
2008/10/14(火) 08:16:13PDEVICD_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 に値を設定するということでしょうか?
0734727
2008/10/14(火) 13:30:12733さんが正解。
NtWriteFile内のIoGetRelatedDeviceObject()でトップレベル
(あなたのドライバ)のDriverObjectを手に入れて
DriverObject->DriverObject->FastIoDispath->FastIoWrite()でクラッシュしてる。
ebxがFastIoDispathでこれがNULLだから[ebx+0C]にあたる
FastIoWriteをコールするときにds:0023:0000000Cを参照。
0735デフォルトの名無しさん
2008/10/16(木) 08:39:40本当にありがとうございます.
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 など)と“ファイルが見つかりません”
のメッセージが表示されうまく行きませんでした.
後者のファイルもうまく開くようにするための良い方法はありますでしょうか?
質問ばかりで申し訳ありません・・・
何か良い方法などがありましたらお願いします
0736デフォルトの名無しさん
2008/10/16(木) 10:38:44signtool sign /v /s my /n testca test.sys
でドライバファイルに埋め込み署名したところ、ファイルのプロパティの
デジタル署名タブでは「問題ありません」になるのに、CreateService()
で登録してデバイスマネージャのドライバの詳細で確認すると
「デジタル署名されていません。」になってしまいます。
これはテスト証明書だからでしょうか?それとも何か手順が漏れているのでしょうか?
0737デフォルトの名無しさん
2008/10/16(木) 11:17:10テスト証明書だからですね。
テスト証明書を「(あなたが)信頼する発行元」として登録したので、”ファイル”のプロパティーでは「問題ありません」になります。
が、テスト署名の手順ではその証明書(のルートの証明書)へのマイクロソフトのCross-Certificateができないため、
その署名はカーネルモジュールへの署名としては「”マイクロソフトからは”信頼されない証明書による署名」になります。
redirect先に、ファイルを作る。
0739デフォルトの名無しさん
2008/10/16(木) 23:16:23ありがとうございます。
ということは正式な証明書をとれば大丈夫そうですね。
しかし、日本で頼むと6万とか9万超とかなんであんなに高いんだろう。
0740デフォルトの名無しさん
2008/10/19(日) 18:37:59WinXP環境でドライバ設計中に、PAGE_FAULT_IN_NONPAGED_AREA(0x00000050)
という文字を吐くブルースクリーンが頻度は小さいですが出ます。
通常、ドライバの問題であれば、設計中のドライバの名前が表示される
ブルースクリーンが表示されると思うのですが、原因を検討中です。
どういった原因が考えられるか同じような問題に出くわした方がいらしたら
ご教授願います。
ちなみにドライバが画像処理ボード用です。
失せろ。
0742デフォルトの名無しさん
2008/10/19(日) 23:42:27日本に来て勉強しながら頑張ってるのかもしれないぢゃないか
0743デフォルトの名無しさん
2008/10/19(日) 23:55:580744デフォルトの名無しさん
2008/10/20(月) 01:33:530745デフォルトの名無しさん
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
0747デフォルトの名無しさん
2008/10/27(月) 20:18:44CPUのプロセッサ数(コア数?)を取得する方法を探してるんだけど誰かおせーてー
というかデバイスドライバはサンプルとか入門ページとか数なくてホントワケワカメ。
なんで、それ探すために
「WDMデバイスドライバプログラミング完全ガイド下巻」の購入を検討しているんだけど
関数リファレンスとかどこぞで公開されてないんでしょーか?
0748デフォルトの名無しさん
2008/10/27(月) 20:36:43詳細情報を自前で取りに行ったら?
0749デフォルトの名無しさん
2008/10/27(月) 21:48:06とりあえず、
>「WDMデバイスドライバプログラミング完全ガイド下巻」の購入
は止めとけ。
ほとんどがNTドライバの話(WDMでもこの知識は必要だが)で、WDMについては下巻の後半のみ
KeNumberProcessors
0751デフォルトの名無しさん
2008/10/28(火) 05:46:35うおー
ありがとー
リファレンス英語版のMSDNにはあるんだね
特にデバイス制御が目的じゃなくて
APIフックの為にカーネルモードで走らせれる環境が必要で
デバドラ作ってるんだけどガイド本はどうしようかな
しかしほんとに毎日BlueScreen何回見てることやら・・・
0752デフォルトの名無しさん
2008/10/31(金) 12:34:470753デフォルトの名無しさん
2008/10/31(金) 14:55:53参照渡しってDirect-IO(MDL渡し)のことか?
0754デフォルトの名無しさん
2008/10/31(金) 15:37:35MDLはよくわからんが、多分そんな感じ
ドライバがIrp->AssociatedIrp.SystemBufferで取得したparamに値を代入した場合
アプリ側でその値は取得できるのかな?っみたいな。。
0755デフォルトの名無しさん
2008/10/31(金) 16:30:36ttp://www.sciencepark.co.jp/community/report/report27.html
METHOD_BUFFEREDにして、lpOutBufferで読むとか。
0757デフォルトの名無しさん
2008/10/31(金) 23:15:55ドライバ→アプリのデータを、アプリが用意したバッファにドライバがコピーするのでなく、
ドライバの持ってるバッファのアドレスをアプリに渡したいのか??(それは無理)
MDLを知らないってことは基礎知識が全く無いってことだよな、やめとけ
>>756
なぜにlpOutBuffer?
METHOD_BUFFEREDではドライバ側ではIN/OUT同一のバッファだけど、ドライバでバッファにセット
したデータは、lpInBuffer側にしかコピーされないよ
0758デフォルトの名無しさん
2008/10/31(金) 23:51:39ドライバとアプリで同時に読み書きしたいとかそんなところ?
排他制御やら面倒そうだが名前つきのFileMappingで出来るんじゃないかな。
それはともかくWDK SP1が出たね。
0759デフォルトの名無しさん
2008/11/04(火) 13:34:27ドライバ側で、パッドに実装されているボタン以外のイベント(17~32あたり)を発生させることは可能でしょうか?
やりたい事は、可能だと思う。
事前に、適当なreportDescriptorを返すとかで。
元からそのパッドに存在しないボタンに振り替えするのは
760が書いてるようにReportDescriptorをでっちあげる必要がある。
もちろんボタン数が増えてデータサイズが増えたら
Reportもそれに併せて手を入れないといけない。
やる気になればマウスだろうがキーボードだろうがHIDの機能なら全部振り替えできなくもない。
つーか箱○改造版ではキーボード振り替えやってる。
独自ドライバ使ってるデバイスの場合、フィルタでやっても
動作しない可能性があるので、独自にドライバ起こす方が無難。
0762デフォルトの名無しさん
2008/11/04(火) 15:14:22USBでぶっさした機器は直接 HID機器ではない扱いで
HIDドライバが 4アナログ 32点 提供 それのマッピングは任意にできるぜ
0763759
2008/11/05(水) 10:56:55とりあえずreportDescriptorでググってみたが、ezusbやpicのマイコン関連しか出てこない。。
もしかしてこれってWDMより外のはなし?
0764デフォルトの名無しさん
2008/11/05(水) 11:04:12HIDの話しだからWDMの外と言われればそーかもな
USB.org行ってHIDのドキュメント漁ってくるのが確実。
あとは公開されてるゲームパッドドライバのソースを見る。
HID部分についてはWDM以外のLinuxとかでも同じなので
そっち系のソースを見る方が分かりやすいかもね。
「USAGE_PAGE」でググるとソースが見つかりやすい。
>>762
質問者は既存のゲームパッドの動作改造目的なんだから
「マッピング部分を差し替える=ReportDescriptorを差し替える」部分をやらなきゃいけないわけだ。
その方法論について聞かれているわけで、視点がちょっと違うんでない?
0766759
2008/11/06(木) 12:24:36ググってみたが、 ttp://www.tamanegi.org/prog/vtchid/くらいしか見つけられんかった;
とりあえず参考にしてみようと思うが、ソースが複雑過ぎる><
0767デフォルトの名無しさん
2008/11/07(金) 08:12:26ゲームパッドのレポートなんてあっても16バイト程度だろうし、
数回分のデータを見れば(アナログでも)データの配置も分かりそう。
あとはX360Cでググ。
フィルタならLowerでIOCTL_HID_READ_REPORTと
IOCTL_HID_GET_REPORT_DESCRIPTOR差し替えれば
動くような気はするけど。
>>767
上でも書かれているがレポートだけではなく、レポートディスクリプタを変更しないと
ボタンを増やすことはできないよ。
データの配置だけではなく、データの配置の定義を変えないといけない。
0769767
2008/11/07(金) 18:10:58そうか新たにボタンを定義するんでしたな。
レポートディスクリプタって何度PDF読んでも完全に理解出来んかったな…。
あれだけ複雑すぐる。
結局既存のモノをパクって終わらせた思い出。
0770759
2008/11/12(水) 17:02:44つまりデフォルトのreportDescriptorのUsage Maximumを32に書き換えたものを、
IOCTL_HID_GET_REPORT_DESCRIPTORとIOCTL_HID_READ_REPORTで読み込ませればよいということでしょうか。
でもデフォルトのreportDescriptorってどこから取得すればよいのだろう。。。
そーいや標準HIDドライバへの登録で使う前に書き換えないといけないから
IOCTL_INTERNAL_USB_SUBMIT_URB
あたりで抑えておかないとダメか。
768で書いたのは無し、lowerでこっちだけ見て戻りデータも捕まえなきゃ無理か。
フィルタでやるよりソースのある既存ドライバいじって
独自ドライバ仕立てるほうが楽に見えるんだよなぁ。
0772デフォルトの名無しさん
2008/11/25(火) 03:03:43あるドライバ(サウンドドライバ)があって、Windows起動時に
それが読み込まれると、Windowsが落ちます。
だからセーフモードで無効しました。そしたら当たり前ですが、
普通に起動しても正常に起動できます。
正常に起動してからデバイスマネージャからドライバを
有効にしても落ちません。しかも正常に動いているようです。
(もしこの時点で何か思い当たること、試してみるべきことがあったら教えてください)
そこで、Windows起動時はドライバを無効にしておき、起動してから有効にする方法を
とりたいと思っていますが、有効にしてから再起動すると次回起動時は(有効なので)
Windowsが落ちます。
そこで、Windows起動時にautoexec.batのような感じでドライバを強制的に無効にしてから
起動する方法は無いでしょうか? OSは2000ですがXPの方法でもかまいません。
0773デフォルトの名無しさん
2008/11/25(火) 03:08:010774デフォルトの名無しさん
2008/11/25(火) 03:08:40ドライバの起動順を適当に変更してみる。
順位を手動にしておけば再起動してもドライバはロードされない。
devcon.exe。
0775デフォルトの名無しさん
2008/11/25(火) 03:27:55ありがとうございます。
devcon.exeは入れていたのですが、順位変更なんてできたんですね。
IDのことでしょうか? まあやってみます。
0776デフォルトの名無しさん
2008/11/29(土) 18:59:31UNIX環境で言うstdint.h見たいな者を探しています
0777デフォルトの名無しさん
2008/12/01(月) 13:26:04Linuxドライバとして移植しようかと思っているんですけど、
デバイスドライバに関してはまったくの無知なんですよね。
そこで簡単なPCIボードをあつかうWindows用デバイスドライバを
作ってみようかと思うんですけど、何か良いサンプル無いですかね?
PCIボードが簡単に手に入って、ドライバのソースも公開されていて、あまり複雑でないもの。
0778デフォルトの名無しさん
2008/12/01(月) 22:07:280779デフォルトの名無しさん
2008/12/02(火) 19:39:39DO_POWER_PAGEABLEプラグってどういった意味があるのでしょう
とりあえず立てて電源周りの処理もサンプルみながら実装できましたが
わからないと気持ち悪くて
0780デフォルトの名無しさん
2008/12/02(火) 20:13:53それなりの出費をする気があるなら
http://www.adtek.co.jp/seihin/apic/index.html
>>779
DO_POWER_PAGEABLEをセットすると、IRP_MJ_POWERの処理は、PASSIV_LEVELで呼ばれる。
セットされてなければ、DISPATCH_LEVELで呼ばれる(こともある)。
フィルタドライバなら、デバイススタックの他のドライバと同じにする必要あり。
0781デフォルトの名無しさん
2008/12/02(火) 22:02:41thx
それを踏まえてヘルプとか読みあさったらなんとなく理解できました
0782デフォルトの名無しさん
2008/12/04(木) 06:11:17これを無理やり動作させる方法ってないですか?
(WinObjではちゃんと表示されているのですが、動作していない様子です、、、)
ndis使うしかないのでしょうか?
0783デフォルトの名無しさん
2008/12/07(日) 11:56:14どうすればよいのでしょう?
0784でるたん
2008/12/17(水) 15:57:41バッファが少なく、 転送の間隔があいてしまうと、
バッファがあふれデータが喪失してしまうデバイスがターゲットです。
ReadFileを同期的に呼び出すと前のReadFileの完了の処理をしてから
次のReadFileを呼び出すまでの間にデータが喪失してしまいました。
ReadFileを非同期的に複数回呼び出し
完了したものを処理して再びReadFileを呼び出すようにしたところ、
ReadFileの呼び出しの間にデータが喪失する現象は解決しました。
ところが、数時間動作させるとReadFileが
要求したサイズを受信したわけでもなく、
ショートパケットを受信したわけでもないのに早まって完了してしまうことがあります。
ReadFileを1回しか呼ばない場合はこの現象は今のところ確認できていないのですが、
前述のようにデータが喪失してしまいます。
作成したドライバでは特にキュー等は作成しておらず(作成方法もわからないのですが)、
単に下位のドライバに要求を投げています。
ReadFileを複数回呼び出すのはいけないことなのでしょうか?
よろしくお願いいたします。
0785デフォルトの名無しさん
2008/12/18(木) 01:04:14sourcesファイルにINCLUDEセクションってなかったか?
>>784
非同期ってオーバーラップ使ったんだよね?
あれはリクエストが終わったらリクエストが来るまでの
待ち時間に別の処理するためだけにあると思ったほうがいいのではないか。
複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
デバイスドライバの中で適切に処理できているのか確認してみた?
ReadFileってアプリか何かでやってるんだよね?
単にファイルに書けばいいだけだったら、データ受信した瞬間
構造体作ってキューに溜め込んで別のスレッドでファイルに書き出すような処理を
ドライバに入れちゃったほうが早いかもしれない。
0786でるたん
2008/12/19(金) 19:24:07>>785
返信ありがとうございます。
> 複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
> デバイスドライバの中で適切に処理できているのか確認してみた?
そのままUSBバスのドライバに渡されているので
その先でどうなっているのかはわからないです。
何か調べる方法はあるのでしょうか?
大抵は期待したとおりに動いているのですが、
たまたまうまくいっただけなのでしょうか?
デバイスはカメラで映像データが垂れ流しで送られてきています。
ファイルには保存しておらず、単にメモリへ取得できればよいのですが。
0788デフォルトの名無しさん
2008/12/19(金) 22:31:15カーネルモードだと思ってたんだが違うのかな。
私の返事はカーネルモードドライバ+アプリだと
思って書いたので違うかなー。
単純に速度を一度調べたほうがいいと思うよ。
取りこぼしが出たときにタイミングが異常にずれることがあるかとか。
0789デフォルトの名無しさん
2008/12/23(火) 11:48:41ここに乗っている__readcr0を使いたいのですが
ここに書いてあるintrin.hをインクルードしてもそんなものは無いと
いわれてしまいます.
どうやったら使えるようになるのでしょう?
0790デフォルトの名無しさん
2008/12/29(月) 19:30:17理由は、買えなくなる前にかっておこうかと、、
宝くじ買ったほうが良かったかな。
作ればok。
0792デフォルトの名無しさん
2009/01/03(土) 20:22:46個人的にはオレンジのウォルターオニーさんのほうがオススメ。
基本的な概念はそれで、あとはWDKのドキュメント、サンプルとにらめっこ。
0793デフォルトの名無しさん
2009/01/04(日) 21:19:31されたのが痛いな。
0794デフォルトの名無しさん
2009/01/05(月) 02:59:3664bitは署名必須になっちゃったし
次のOSでは32bitも必須になるだろうし
もうドライバ趣味で作ったりとかできないね。
ので、Linux勉強している自分がいる。
0795デフォルトの名無しさん
2009/01/05(月) 06:27:28http://citadel.x10hosting.com/readydriverplus/index.php
0796デフォルトの名無しさん
2009/01/05(月) 23:11:45これからはデバイスドライバの類はユーザーモードで動くようになっていくんでしょう。
趣味で作るだけなら署名無効にすればいいのだしね。
ブートやその他カーネルモードドライバを公開しにくいのは残念だけど
それらのドライバがWindowsの不安定さの一員でもあったのだからしょうがないよ
0797デフォルトの名無しさん
2009/01/07(水) 20:54:21署名無効にできないから問題なんだよ。
毎回F8なんてやってらんね。
それに署名付きが高品質とは限らんし。
0798デフォルトの名無しさん
2009/01/07(水) 21:03:44>>795
0799デフォルトの名無しさん
2009/01/07(水) 22:48:27外で計算してからdeviceiocontrolとかでドライバに結果渡すのとで速さに違いある?
>時間のかかる計算ってドライバの中でやるのと
するな。
0801デフォルトの名無しさん
2009/01/08(木) 20:37:170802デフォルトの名無しさん
2009/01/08(木) 22:38:56落ちる落ちないみたいな品質面もあるけどセキュリティ面もでかい。
また、ウェブサイトが乗っ取られるようなことがあって擦り返られても平気になる。
そんな気はする。
0804デフォルトの名無しさん
2009/01/09(金) 23:21:16でかくねーよ。
ドライバロードさせられる権限あればドライバ使わんでもOS乗っ取れる。
0805デフォルトの名無しさん
2009/01/10(土) 10:46:47単にPC乗っ取ったり、破壊するだけならそうだね。
0806デフォルトの名無しさん
2009/01/26(月) 01:00:02どうよ?
0807デフォルトの名無しさん
2009/01/26(月) 02:36:450808デフォルトの名無しさん
2009/01/30(金) 14:16:03とりあえずWindowsXP用のデバイスドライバをプログラミングする良い入門書とかある?
0809デフォルトの名無しさん
2009/01/30(金) 20:39:300810デフォルトの名無しさん
2009/01/30(金) 21:04:050811デフォルトの名無しさん
2009/01/31(土) 01:26:210812デフォルトの名無しさん
2009/01/31(土) 10:13:47USBチップ積んだ回路にPICとか使ってキーボードやゲームパッドを直接制御した方が簡単だよ
0813デフォルトの名無しさん
2009/01/31(土) 14:19:32とりあえずVMにXP突っ込んで試してみるお
0814デフォルトの名無しさん
2009/02/02(月) 04:42:35入り口から聞く様じゃ作れないな
俺もその用途でドライバ作ったが、結局なんかあったら聞こうと思って開いてたこのスレで
改めて聞くことなんか何も無かった
本も要らない
ググれば全ての必要な情報が揃う
0815デフォルトの名無しさん
2009/02/02(月) 10:31:130816デフォルトの名無しさん
2009/02/07(土) 19:18:22USBのデバイスとのやりとりのデータをキャプチャするソフトはありますでしょうか。
0817デフォルトの名無しさん
2009/02/07(土) 19:34:140818デフォルトの名無しさん
2009/02/08(日) 00:40:03ありがとうございました!
0819デフォルトの名無しさん
2009/02/08(日) 08:05:23ignoreされてんのかwrnに出ないし、動作するけど気持ち悪いんだお(´;ω;`)
0820デフォルトの名無しさん
2009/02/12(木) 09:35:180821デフォルトの名無しさん
2009/02/12(木) 16:33:17WDMデバイスドライバ プログラミング完全ガイド (アスキー)
0822デフォルトの名無しさん
2009/02/19(木) 10:58:17現在PCIデバイスドライバをWDMで作成しているのですが、IoAttachDeviceToDeviceStack
関数で必ずブルースクリーンになってしまいます。
ためしにWDMに付属していたサンプルのPCIデバイスドライバ(PCIDRV.sys)を
インストールしてみたのですが、同じようにIoAttachDeviceToDeviceStack
でブルースクリーンです。
IoCreateDeviceが成功していることは確認しています。
こういった場合、何が原因なのでしょうか?(ハードウェア?)
0823デフォルトの名無しさん
2009/03/11(水) 22:52:520824デフォルトの名無しさん
2009/03/12(木) 09:39:430825デフォルトの名無しさん
2009/03/13(金) 21:40:30盗みは犯罪、イクナイ
0826デフォルトの名無しさん
2009/03/16(月) 09:39:19USBならusbstorの上で取れる。
IDEはシラネ。
0828デフォルトの名無しさん
2009/03/18(水) 19:35:39カーネル空間とユーザー空間とでMutexで同期を取りたいのですが
どちらかで作成した Mutex をもう片方に告知する方法ってありませんか?
おい、やめろ馬鹿
このスレは早くも終了ですね
とりあえず、キレイな方法は無い。
親切に説明してくれてる書籍ってあるんでしょうか
0831デフォルトの名無しさん
2009/04/01(水) 09:00:22「Windows Vista カーネルソフトウェア開発技法」
「Windows Vistaデバイスドライバプログラミング」
とりあえずフリーのWDKのインストールまではできたのですが
wdm.hとntddk.hがコンパイラバージョンが合わないとかで
サンプルがビルドできないorz
とりあえず本待ちだ
もってるVCがバージョン6だからだ
とりあえず7以降のがほしいってことで
0834デフォルトの名無しさん
2009/04/01(水) 15:13:520835デフォルトの名無しさん
2009/04/01(水) 15:17:14基本CUIだぞ。
>>834
パス通したり設定さえやってればVCで動くプロジェクトも作れる。
WDKサンプルのままmakefileとか使った方が手っ取り早いが。
2000用のは作ったことがあるのですよ
なのでだいじょうぶかなぁと
0837デフォルトの名無しさん
2009/04/01(水) 22:39:550838デフォルトの名無しさん
2009/04/02(木) 16:10:48Limuxのカーネル関係勉強してからWindowsをさわろうと思う。
0839デフォルトの名無しさん
2009/04/02(木) 22:56:47どれでビルドしても2000でもXPでもvistaでも使えるようだけど、
各osのビルド環境で別々に作ったドライバを使ったほうがいいの?
0840デフォルトの名無しさん
2009/04/09(木) 14:32:040841デフォルトの名無しさん
2009/04/09(木) 16:04:15どのOSにも存在する機能を使ってるぶんには同じ。
XPとかVistaにしかない関数を使うんなら、OS毎にビルドするなり
ダイナミックロードするなりすればよろし。
0842デフォルトの名無しさん
2009/04/09(木) 19:14:220843デフォルトの名無しさん
2009/04/27(月) 23:19:49IDEの設定についてです。
WinDDK\6001.18002\inc配下に
api
atl21
atl30
crt
ddk
mfc42
wdf
というフォルダがそれぞれありますが、
Visual Studio 2008の
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ
にてインクルードディレクトリを設定しようと考えているのですが、
設定する対象フォルダは「ddk」のみで大丈夫でしょうか?
※インテリセンス機能を使いたいので。。。
宜しくお願いします。
0844デフォルトの名無しさん
2009/04/30(木) 22:21:56ドライバ内で検出する方法があれば教えてください
0845デフォルトの名無しさん
2009/05/04(月) 23:57:22ソースによると思うけれども
手元では、inc\api と inc\ddk をインクルードファイルの設定に入れてる。
>>844
MajorFunction[IRP_MJ_POWER] の中で
IRP_MN_SET_POWERやIRP_MN_QUERY_POWER で引っ掛けて
Parameters.Power.ShutdownType や powerState.SystemState を
見れば、ある程度、判るよ。
というか、普通実装してあるはずだけど。
0846843
2009/05/09(土) 16:04:32ありがとうございます
実はあの後色々錯誤してapiとddkのみ
インクルードファイルに設定することにしました。
再確認できてよかったです。
0847デフォルトの名無しさん
2009/05/10(日) 23:18:12あるデバイスに対して、I/Oの入出力と
割り込みのハンドリングを行うだけの
簡単なドライバを作りたいのですが、
簡単なサンプルソースはどこかに無いでしょうか?
(ソースファイル1つ、ヘッダファイル1つくらいのもの)
DDKのサンプルは少々複雑で・・・。
よろしくお願いします。
0848デフォルトの名無しさん
2009/05/16(土) 05:26:191>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
宜しくお願いします。
Cで書けばOK。
0850デフォルトの名無しさん
2009/05/16(土) 14:58:58build通りました!ありがとうございました!
0851デフォルトの名無しさん
2009/05/19(火) 01:01:24infファイルは自分で書くしかないのでしょうか?
0852デフォルトの名無しさん
2009/05/23(土) 14:34:46MSDN会員だけ先行して公開されてる
0853デフォルトの名無しさん
2009/06/02(火) 00:16:09デバイスマネージャ→ドライバの詳細上のデジタル署名者欄で
署名なしとされてしまう模様。
リリース署名したがVista x64でのこれがどうも気になる。
やっぱロゴテスト合格しないとここは署名なしのままなのかな。
0854デフォルトの名無しさん
2009/06/02(火) 01:06:110855デフォルトの名無しさん
2009/06/10(水) 05:12:17高卒だけど怪しいのみつけた、一応はあらゆるプロトコルの解析ができるみたい
すれ違いだったらすまん
0856デフォルトの名無しさん
2009/09/06(日) 18:21:59UPPERなりLOWERなりにSetupDIで突っ込むんだろうね。
アプリが大変だね。CDB・CBW・タスクファイル・・・
0857デフォルトの名無しさん
2009/10/22(木) 15:24:45フック時に起動させるモジュールの対象パスを取得、コマンド引数を取得したいと思っています。
モジュールの対象パスは取得することは成功したのですが、コマンド引数の文字列の取得を行うことができません。
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 );
これら引数からアプリ起動時のコマンド引数の文字列を取得する方法をご存知の方をご存知の方がいましたら、
教えていただけないでしょうか。よろしくお願いいたします。
0858デフォルトの名無しさん
2009/11/17(火) 00:07:07PCやってるなんてお�hるかもしれんのう。
0859デフォルトの名無しさん
2009/11/17(火) 00:07:240860デフォルトの名無しさん
2009/11/17(火) 02:30:380861デフォルトの名無しさん
2009/12/10(木) 15:08:06サンプル見てもコンパイルの仕方すら分からない状況ですが
まあそれは調べたらあったのでいいとして
アプリケーションとどうやって通信するのかとか、ドライバ自体をどうやってシステムに登録するのかとか
ほとんど何も分からないし調べても出てこないんですが
サンプルコードでもあれば教えてください
0862デフォルトの名無しさん
2009/12/10(木) 15:46:58まずはWDDFの書籍買って一から勉強しろ。
0863デフォルトの名無しさん
2009/12/10(木) 21:30:27geekなサイトにもぐりこんでだいたいやり方は分かった
0864862
2009/12/10(木) 22:49:39いや、アフォでなければ分かる。
WDKあるならドキュメント読めば全部きっちり載ってる。
英語が面倒で見てすらいないんだろ。
大体、
> サンプルコードでもあれば教えてください
って、network\ndis\filterにndisのlowerfilterがあるわけだが。
ろくに探しもしてないことが明白。
0865デフォルトの名無しさん
2009/12/13(日) 23:04:150866デフォルトの名無しさん
2009/12/23(水) 16:54:59これ見るとIoIsWdmVersionAvailableの引数が
Vistaと7で同じになってるんだけど誤記じゃないの?
RtlIsNtDdiVersionAvailableのほうを使うべきと書いてあるのはこの問題があるから?
でもこの関数をXP以前のOSで使おうとしてもライブラリのリンクができない。
0867デフォルトの名無しさん
2010/01/05(火) 12:43:34いったいどういう仕組みなんだろ?
ユーザーランドのコードを対応するものに変換してくれるとか?
0868デフォルトの名無しさん
2010/02/17(水) 06:46:430869デフォルトの名無しさん
2010/02/18(木) 08:09:490871デフォルトの名無しさん
2010/02/18(木) 16:45:20ありがとうございます。
助かりました。
0872デフォルトの名無しさん
2010/02/22(月) 09:51:03GetLastErrorでアクセス拒否が返されるんですが、何が悪いですか。
ドライバ側:
(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が悪い・・・?
0873デフォルトの名無しさん
2010/02/22(月) 09:52:56開発、動作とも WinXP で CheckBuild(6001.18002) で動作させてます。
0875872
2010/02/22(月) 10:59:39return CompleteIrp(Irp,STATUS_SUCCESS,0);
で記述してますが、その前のDebugPrintExが表示されないので
そもそもIRP_MJ_CREATE前の I/Oマネージャによるアクセス権限チェックで
弾かれてるような印象です。
0876デフォルトの名無しさん
2010/02/22(月) 22:56:350877872
2010/02/23(火) 08:29:56CreateFile( ifDetail->DevicePath,
GENERIC_READ,
0,
NULL, OPEN_EXISTING, 0, NULL);
にしてみましたが、ダメでした。
WinDDKサンプルの Toaster Bus だとうまく I/O できるので、
その辺の差異を見ないといけない・・・にしてもよくわからない。
0878872
2010/02/23(火) 08:34:14Toaster Bus だと inf で Registry にアクセス権の設定をして、
IoCreateDevice で FILE_DEVICE_SECURE_OPEN を指定してますが・・・
0879デフォルトの名無しさん
2010/02/23(火) 19:28:270880デフォルトの名無しさん
2010/02/23(火) 21:56:34単純にCreateFileするユーザーのアクセス権限で
Administrators指定して開けばいける気がする。
0881872
2010/02/24(水) 11:13:23あと CUI なプログラムなので、
(1) DOS窓開始ユーザを Administrator で実行して実行してみたり、
(2) Explorerから実行ファイル右クリックで別ユーザ→Administrator指定して実行してみたり
でも変わらずです。
Class が UNKNOWN なドライバだけどUpper や Lower がいるはずもないし・・・
うちのマシン環境が腐ってる・・・?OS入れ直ししてみた方がいいんでしょうか。
0882872
2010/02/24(水) 16:20:44CreateFile の 第1引数のパスの末尾に"\\" を追加するとうまくいきました
・・・が、そういう仕様ですか?
MSDN みてますが、第1引数 lpFileName の指定で特筆無いし・・・
本当に正しいのか良く分からないです。
0883デフォルトの名無しさん
2010/02/24(水) 19:52:08てかなんで\\を追加とかいう不可思議な発想に至ったのか
0884872
2010/02/24(水) 21:41:20Windows Vista デバイスドライバプログラミングの書籍にあるサンプルプログラムに
Detail で DevicePath を取得したあと \\hoge を追加したパスで
CreateFile してて、それだとうまくいきました。
んで、色々パスを試したら \\ を追加すれば
動くって所に(たまたま)行き着いた、ってトコです。
0885デフォルトの名無しさん
2010/02/25(木) 06:31:060887デフォルトの名無しさん
2010/02/25(木) 13:57:170888872
2010/02/25(木) 14:28:58結局今のPCの環境がおかしい・・・何が違うんだorz
OS入れなおしてみるか・・・。お騒がせ(?)しました。
0889872
2010/02/25(木) 14:42:18転載OKなんかな。
http://www.sbcr.jp/books/download/art.asp?newsid=2095
からダウンロードして展開できたソース 1-8\open_close_final\VistaSample2
をまんま使用。
どういう仕組みでメモリ破壊してるんでしょう??
0890デフォルトの名無しさん
2010/02/25(木) 14:49:330891872
2010/02/25(木) 14:54:20HANDLE 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);
0892872
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;
}
0893872
2010/02/25(木) 15:00:561-8\open_close_final\VistaSample1 が対応するドライバで、
inf の クラスとGUIDを Unknown に変更して使ってみてます。
ってそういう意味じゃない?
0894デフォルトの名無しさん
2010/02/25(木) 16:53:480895デフォルトの名無しさん
2010/02/25(木) 19:06:210896デフォルトの名無しさん
2010/02/25(木) 20:05:18アンインストールをちゃんとやらないでドライバだけいれたから
レジストリがおかしくなってるか、ドライバが実は古いままとか
そういうのはないかな。別のPCでも大丈夫なあたり。
できれば仮想環境とかですぐに元に戻せる環境を使って
最初から今のドライバでうまくいくか試したほうが速いと思う。
今の自分のドライバのGUIDに変なエントリがないか調べてみるのもあり。
あと、正直勉強不足だった。
\\つけた後にオプションとかやるんだな。
ただ列挙したデバイスインターフェイスのGUID+4桁の数字
ちなみに俺はおっさんなので、SetupDi使うのがめんどくさくて
CreateDeviceの固定された名前でどうにかしてしまうことが多い。
0897デフォルトの名無しさん
2010/02/25(木) 20:06:59消しすぎた。
デバイスインターフェイスのGUID+4桁の数字
でアクセスできるのが普通だと思うから
サンプルがそれでちゃんと動くかどうか確認してみたほうがよい
と書くつもりだった。
>SetupDiEnumDeviceInterfaces(
>deviceInformationHandle,
>NULL, pGuid, 0, &interfaceDeviceData);
0決め打ちはマズイと書いてみる。
0899デフォルトの名無しさん
2010/02/28(日) 09:37:30File 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
0900デフォルトの名無しさん
2010/04/20(火) 23:53:44WinUsb_ControlTransfer()使うんだ、と言うところまでは理解した……つもりなのだが、
いざ実行してみるとFALSEが返ってGetLastError()はERROR_GEN_FAILUREになる。
ReadPipeとWritePipeはうまく行ってるので、WINUSB_INTERFACE_HANDLEがとれてないという
ことは無いと思うのだけど、ドコのナニに問題があるのか全然分からない。
同じところで詰まった人、ヒントで良いんでおしえてくだちいorz
0901デフォルトの名無しさん
2010/08/07(土) 04:07:36ComPortのドライバを作っていまして、
ドライバの割り込み待ち中に、通信先の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の勉強はごく最近始めたもので、
知識不足な点が多いとは思いますが、宜しくお願いいたします。
0902デフォルトの名無しさん
2010/08/07(土) 05:30:44>ドライバはシリアル受信等の割り込みがあるまで、そこで待ち続ける必要があるようなのですが、
常識的に考えて、ソレはアリエナイ。
queueにでも突っ込んでおいて、STATUS_PENDINGを返して、
指定の状態変化が起きたらcompleteする感じで良いハズ。
0904901 ソース 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へ続きます----
0905901 ソース 2/2
2010/08/07(土) 11:54:56NTSTATUS 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;
}
簡略化しましたがこれが全貌です。
以上、お時間のある方いらっしゃいましたらお相手していただけると嬉しいです。
0906901
2010/08/08(日) 01:04:22KeWaitForSingleObjectでタイムアウトを設定し、
STATUS_PENDINGを返すようにしました。
しかし、自作のWin32アプリからドライバへ、DeviceIoControl関数により
IOCTL_SERIAL_WAIT_ON_MASKを送信してみたところ、
すぐにDeviceIoControl関数から抜けて次の処理を行ってしまい、
一般に出回っているComPortのドライバと同じふるまい(DeviceIoControl関数から抜けなくなる)
をさせることができませんでした。
0907デフォルトの名無しさん
2010/08/08(日) 04:13:26他のシリアルドライバとの違いなのか、
シリアルドライバとして正しい振る舞いがわからないのか。
手っ取り早いのはMS標準シリアルドライバでどう動くのか確認して、同じように実装すること。
挙動を見る限り、その比較対象のドライバはPENDING抜けしてないでしょ。
フリーズする/しないはアプリ側の作りの違いだと思うから、そこは気にしなくてもよさそうじゃね?
0908デフォルトの名無しさん
2010/08/08(日) 19:32:35KeWaitForで固まるのが困るときはタイムアウト設定したり
スレッド別に用意したりすると思うが、別にドライバに限った話じゃないし
話を聞いた感じだと、
アプリ側でスレッドつくるべきなんじゃないかと思うけどね。
0909デフォルトの名無しさん
2010/08/09(月) 21:14:21ドライバと通信を行うWin32アプリは、一般に出回っているシリアル通信ソフトを考えています。
また、参考にしていたシリアルドライバはMS標準のものです。
整理しますと、自作のシリアルドライバとMS標準のものでは次の違いが発生しています。
自作のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
アプリ側の処理がそこから先に進まないうえ、
Win32アプリ(のGUI)がフリーズする
MS標準のシリアルドライバとシリアル通信ソフト(Win32アプリ)での挙動:
Win32アプリからドライバへ、DeviceIoControl関数でシリアルデータ受信割り込み待ち命令を送信すると
アプリ側の処理がそこから先に進まなくなるにも関わらず、
Win32アプリ(のGUI)はフリーズしない
これらから、MS標準のシリアルドライバと同じ挙動をさせるには
Win32アプリをDeviceIoControl関数から抜けなくさせ、
なおかつアプリのGUIが固まらないようにしなければならないと解釈しています。
どなたかお時間のある方いらっしゃいましたら
ヒントを頂けると嬉しいです。
0910デフォルトの名無しさん
2010/08/10(火) 04:02:52アプリがフリーズしているように見えるかどうかはWindowsから送られてくる
メッセージ処理をしているかどうかで決まる。
だからDeviceIoControlで止まっていたらアプリは必ずフリーズする。
だから>>908のように、「固まって困る場合=メッセージ処理したい場合」として
スレッドやタイムアウトをするべきであると書いた。
よって、MS標準のドライバの場合はOKで、
自作のはフリーズするというのは理にかなっていない。
もう一度アプリ側の調査をよくよくやってみることをおすすめする。
0911デフォルトの名無しさん
2010/08/10(火) 14:50:45受信通知条件が違っているとその辺の処理の扱いが変わってくるからな。
0912デフォルトの名無しさん
2010/10/06(水) 20:08:19方法ってありますか。
解像度の変更が出来ないソフトがあって困ってます。
0913デフォルトの名無しさん
2010/10/07(木) 10:14:42特定ソフトだけの問題ならアプリ側のアクセスをどうにかするほうが楽そう
0914デフォルトの名無しさん
2010/10/21(木) 20:54:35非PnPなのでDPInstは諦めてdevconのソースを流用しているんだが、
これだとデバイスを削除した後にドライバ・パッケージがシステム内に残ったままになる
(devconのremoveコマンドとdp_deleteコマンドの中身を組み合わせてる)
誰か、ドライバ・パッケージまで削除できる良い方法を知らない?
DIFxAPIと組み合わせれば何とかなるのかな?
0915デフォルトの名無しさん
2010/10/23(土) 00:02:11・\RootのなんとかにするとDPInstでもインストールできなかったっけ?
と思ってToasterみてたらよくわからんGUIDだった。
とにかく、Inf/Inxをちゃんと書けばDPInstが使えると思う
・どうしても無理ならDIFxなんとかを改造すれば使える
DPInstのコアAPIなのでこっちならパッケージのインストール、アンインストールができるはず。
多分DIFxPkgsあたりだろうけど、できるかどうかはわからん。
0916sage
2010/10/27(水) 18:12:47自己レス
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の仕様なんだろうか?
0917デフォルトの名無しさん
2010/10/27(水) 21:02:04それはDPInstもそうなってるので、仕様だと思う。
DPInstでインストールするとドライバの日付やバージョンで管理するらしく
複数残ったままになる。ただ、アプリケーションの追加と削除に項目として残るので
普通に全部アンインストールすれば問題ない。
0918デフォルトの名無しさん
2010/12/12(日) 19:39:33windows7上で、magicmouseを動かしたいんで、
ドライバを、書いてくれっ!
現状だと、スワイプが使えないんだ!
0919デフォルトの名無しさん
2010/12/12(日) 23:17:360920デフォルトの名無しさん
2010/12/12(日) 23:19:54すまない、
誘導してくれないか。
0921デフォルトの名無しさん
2010/12/13(月) 10:49:51http://hibari.2ch.net/test/read.cgi/software/127868739
この辺か?
0922デフォルトの名無しさん
2010/12/13(月) 18:22:15>windows7上で、magicmouseを動かしたいんで、
ドライバ署名の問題もあるから自分で書けばいいじゃんw。
0923デフォルトの名無しさん
2011/01/28(金) 22:05:12とあるアプリケーションの音を、劣化なしに録音したいのですが、
録音デバイスはマイクとライン入力程度で、まともな手段で録音出来ません。
とりあえず、ollydbgで見てみたら、waveOutWriteは呼ばれず、DSoundから
直接DeviceIOControlが呼ばれており、DirectX系から、ハードウェアが
直接制御されているようです。あと、WriteFileはコールされていませんでした。
ここで、DeviceIOControl 関数の引数inBuffをじゃっかん弄っても、音に変化が
なさそう(?)でした。この関数でバッファ転送してると思ってたので、行き詰まって
しまいました。
なんか勘違いとかしてるんでしょうか?
もしくは、上記の目的のために、別の手段はありませんでしょうか?
0924デフォルトの名無しさん
2011/01/28(金) 22:12:290925デフォルトの名無しさん
2011/01/28(金) 23:10:07大抵は、サウンドチップの製造元のドライバ入れれば、
ステレオミキサーから録音できるようになる。
0926デフォルトの名無しさん
2011/01/28(金) 23:56:410927923
2011/01/29(土) 00:00:14COMで実装されてるぽい(たぶん)ので、上手いことフック出来ません。
そもそもCOMもDirectSound詳しくないのですが、COMあたりから
攻めた方が賢いでしょうか?
>>925
そうなんですか!ちょい調べてみます。
納入先にそれを要求するのは厳しいかもしれませんが、検討してみます。
0929デフォルトの名無しさん
2011/01/29(土) 00:28:410930デフォルトの名無しさん
2011/01/29(土) 00:46:180931923
2011/01/29(土) 01:19:39>>930
説明不足ですいません。
このスレの趣旨に基づき、質問を絞ります。
- とあるソフトが発する音を横取りするのが最終目的。win全体の音でも構わない
- フックする場所は、ユーザーモードであればどこまでも構わない。
- 目的のために、ハードウェア導入、もしくはハードウェア依存のドライバ導入など、ハードウェアに関する作業は極力避けたい
- そのソフトをollydbgで覗くと、DSOUNDからDeviceIOCOntrolが頻繁にコールされており、恐らくDirectX系が使われている
現状
- ollydbgにて、DeviceIOControlの引数inBufferをちょくちょく弄っても正常に音が鳴っている「ぽい」し、WriteFileもコールされてないので、詰まった
質問
- 上記の目的は、DeviceIOControlのフックにより達成できるか?出来るのであれば、どういう手法、攻め方をすればいいか
- そもそも、何か大きな勘違いをしていないか
waveOut系で音を鳴らすアプリケーションであれば、恐らくなんとかフック・横取りできる程度のスキルは
あるつもりなんですが、DeviceIOControl とか、低級な制御には余り詳しくなく、また適切なスレも無いために、
このスレでさせて頂いた次第です。
どうぞよろしく願いします。
0932デフォルトの名無しさん
2011/01/29(土) 01:22:380934923
2011/01/29(土) 12:45:52>>933
Unlock関数のフックで、スタックからwaveが引き抜けそうです。
COMの解析は初めてでしたが、思ったより簡単で助かりました。
ありがとうございました。
0935デフォルトの名無しさん
2011/02/04(金) 20:35:45KeyboardClassServiceCallback内でZwOpenFile使うとブルースクリーンになってしまうだよな。。
kbdclass内じゃファイルアクセス処理は使えないんけ?
(フィルタドライバ内では使えてたんだけど。。)
0936デフォルトの名無しさん
2011/02/04(金) 20:37:210937935
2011/02/04(金) 21:19:40わかってる。
お手軽にキー入れ替えをやってみたくてね。
ファイルにキー入れ替え情報を設定して、それを読み込んで反映できないかなって。。
(KeyboardClassServiceCallback内って書いたけど、これじゃキーが押されるたびに
ファイルアクセスしてしまうから、ドライバ起動時にやるべきか。もちろん出来ればの話だけど)
0938デフォルトの名無しさん
2011/02/04(金) 22:08:08IRQLと、そのそれぞれのレベルで使える関数の制限について勉強してね
設定を読み出すなら、ふつーにレジストリ経由が無難。
0940935
2011/02/05(土) 02:47:20確かにZwOpenFileはIRQLがPASSIVE_LEVELのときのみ使用可能って書いてあるね。。。
DriverEntry内ではIRQLがPASSIVE_LEVELだったので、ファイルの情報を
DriverEntryで取得して内部変数で保持する方法で今回は逃げてみるよ。
とりあえず今自分のやりたいことは出来そうだけど、こりゃ本腰いれて勉強しないと
難しいね。
参考書買って勉強してきま
>>938
>>939
感謝!
0941デフォルトの名無しさん
2011/03/05(土) 02:30:07.47moufltrを書き換えて使えばいいんですかね?
単純なフィルタ機能だけじゃなくボタンを押してない時にボタンを押したりするのを
アプリからの制御でやろうかと思いまして
moufltrはたぶんPS/2用のフィルタになるんだと思うんですが
hidとは違うフォルダにあるんで勝手にそう思ってるだけなんだけども
USBにもこれは適用出来るんですか?
0942941
2011/03/05(土) 13:55:54.31ドライバ更新でインストールしてアッパーフィルタにmoufiltrが出てるんだけど
DebugViewには何のメッセージも出てきません
どこから手をつけていいかも分からない状態なんで
とりあえず動くものを手にいれたいんですがどうしたらいいんでしょう?
0944デフォルトの名無しさん
2011/03/05(土) 17:15:44.380945デフォルトの名無しさん
2011/03/05(土) 18:39:00.61SetCursorPos(...)やPostMessage(...,WM_LBUTTONxxxx,...)で出来そうに思うが・・・
0946デフォルトの名無しさん
2011/03/05(土) 19:16:20.210947デフォルトの名無しさん
2011/03/05(土) 19:42:58.48入力の生成の部分のことですか?
何か動くものがほしくてmouclassもVMWare上のXP SP3に入れてみて
WPFも解除してデバイス表示で上書き出来てるのは確認しましたが
やっぱりDebugViewにはそれらしいメッセージは出てきません
>>944
VM上ではACIPI\PNP0F13だからPS/2だと思うんですが動いてないから違うんですかね
>>945
今はテスト用にVM上のXPにドライバを入れてますが
普段はVM上で別のOSやアプリを動かしててホストからコントロールするわけですが
なぜかVMはプログラムで生成された入力情報は完全に遮断してしまってるんで
VMの中身が操作出来ないんです
それにドライバの作り方にも興味があるんであえてやってみようかと
checked build
0949デフォルトの名無しさん
2011/03/06(日) 19:16:46.56Inf2catがうまく通らない rramdisk.infをどう修正すればいいやら・・・・
0950デフォルトの名無しさん
2011/03/10(木) 21:42:54.63CatalogFile=toaster.cat
これがあると勝手にやってくれたような記憶があるんだが。
0951デフォルトの名無しさん
2011/03/14(月) 20:33:47.880952デフォルトの名無しさん
2011/03/25(金) 08:47:27.84IOCTLのコードを追加してInputデータを与えようとしてて
サンプルは動くところまで確認して
独自のIOCTLコードを発行しても反応がない
たぶんこの行でインプットがあるせいではじかれてるのかと思い削除してみると
UNREFERENCED_PARAMETER(InputBufferLength);
コールバック関数定義の部分
KbFilter_EvtIoDeviceControlFromRawPdo(
IN WDFQUEUE Queue,
IN WDFREQUEST Request,
IN size_t OutputBufferLength,
IN size_t InputBufferLength, *
の一番したの行でc2220エラーが出てコンパイルが通りません
何のことですかね?
C++は熟知してるけど、まるで違う言語を扱ってるくらい動作が違う
0953デフォルトの名無しさん
2011/03/25(金) 09:49:47.02パラメーターを受け取るとこまで出来た
なんじゃこりゃ
0954デフォルトの名無しさん
2011/03/25(金) 14:26:09.93嘘だ。
0955デフォルトの名無しさん
2011/03/25(金) 16:52:49.26次に同じ要領でマウスドライバも作ってますがrawpdoをkbfiltrからコピペしてみて
コンパイルしてインストールしたけどIOCTL用のデバイス名が出てこない
そもそもドライバが動いてなさそうなんですが
問題はEvtDeviceAddで何か失敗してるんだろうけど
マウスドライバは起動時に読み込まれるからDebugViewでメッセージが取れない
起動時のメッセージを見る方法ってどうすればいいんですか?
0956デフォルトの名無しさん
2011/03/25(金) 17:58:57.120957デフォルトの名無しさん
2011/03/25(金) 20:43:20.67他の部分がバグってるっぽいですが
それも問題になるんですか?
0958デフォルトの名無しさん
2011/03/25(金) 20:48:48.91ちゃんとコールバックされてますね
0959デフォルトの名無しさん
2011/03/25(金) 21:04:26.32いずれにしても起動時のデバッグメッセージが拾えるともっと早く解決したんですけどね
0961デフォルトの名無しさん
2011/03/26(土) 00:07:39.88話になんねー
0962デフォルトの名無しさん
2011/03/26(土) 00:17:43.880963デフォルトの名無しさん
2011/03/26(土) 04:18:08.15他の人が、何がひどいかをあえて説明すると
PCもう一台用意して、WinDbgをインストールし
シリアルか1394でリモートデバッグの設定をすれば
起動時からデバッグメッセージ拾える。
あとC++熟知しているなら、
UNREFERENCED_PARAMETERのマクロが何やってるかぐらいは確認すべき。
0964デフォルトの名無しさん
2011/03/26(土) 04:18:51.880965デフォルトの名無しさん
2011/03/26(土) 06:52:08.35情報をありがとうございます。
2台は用意出来ないんですが
それって仮想シリアルポートドライバみたいなのが必要ってことですか?
0966デフォルトの名無しさん
2011/03/26(土) 07:13:27.08ずいぶん前に数度試しただけだから詳細は覚えてないが
VMWareだと仮想PC上の仮想シリアルがパイプになっているので
WinDbg側からはパイプに接続すればよかった。
と思ったがVMWareじゃなくてVirtualPCだったかもしれん。
仮想PCを起動するとパイプが作られるのでそれをWinDbgで開く
みたいな感じだった
先にWinDbgでひらいておこうとするとパイプがないと怒られたはず。
自分はHW固有のドライバ作ってたので
その環境は作ってはみたものの使い道なくてあまり使わなかった。
0967デフォルトの名無しさん
2011/03/26(土) 09:02:16.23パイプですか、よく分かりませんがキーワードで調べれば出てきそうですね。
貴重な情報をありがとうございます。
0968デフォルトの名無しさん
2011/03/29(火) 13:54:19.16ReportDescritorを返すところまでは呼ばれてて
その後びっくりマークになって正常に起動出来ませんでしたとかになる
他のコールバックは呼ばれてる様子もないしDescriptorの問題なんだろうけど
どっかに動くキーボード用のDescriptorってありますか?
とりあえず検索して出てきたのとHut1.1に載ってるサンプルは試したけど駄目でした
0969デフォルトの名無しさん
2011/03/29(火) 14:43:33.510970デフォルトの名無しさん
2011/03/29(火) 15:48:07.14ホストがWin7 64でVMWareがあるけどPs/2だから
対応してるツールがないんです
それとちょっとだけ進展が
キーボードはブートデバイスだから
ブートデバイスIDを指定してやったら認識はしましたが
なぜか8個もキーボードが出てきてしまいました
0971デフォルトの名無しさん
2011/03/29(火) 21:33:22.00マウスとキーボードを動かそうとしてるんですが
マウスを動かすのに7byteのデータ
ReportID, Button, X, Y, WheelをIOCTL_HID_READ_REPORTで渡すとマウスが動く
これは確認しました
でキーボードを9byte
ReportID, Modifier, Reversed, Code[6]を同じように発行すると反応なし
何が間違ってるんでしょう?
0972デフォルトの名無しさん
2011/03/30(水) 08:57:09.17おかげさまでキーボードとマウスの仮想USBドライバが完成しました
0973デフォルトの名無しさん
2011/03/31(木) 19:10:30.77解決方法はありますか?
0974デフォルトの名無しさん
2011/03/31(木) 19:27:29.86関数が定義されていない
急に出た理由までは知らんw
0975デフォルトの名無しさん
2011/03/31(木) 20:05:36.97精度は適当でいいんですが
0976デフォルトの名無しさん
2011/03/31(木) 20:14:20.97わかりました
0977デフォルトの名無しさん
2011/04/02(土) 22:02:10.86cdecl呼び出しにしてもリンクエラーが出てしまいます。
関数の定義はint func(PSTRUCT st)といった単純なものです。
外部のAPIを一切使わないようにして完全に単体で動くようにしてます。
何か呼び出し規約が特別なものなんでしょうか?
0978デフォルトの名無しさん
2011/04/02(土) 22:32:56.010979デフォルトの名無しさん
2011/04/02(土) 22:51:45.33間違いなくついてます。/MT /MD どっちの出力でも駄目です。
__stdcallも駄目です。
0980デフォルトの名無しさん
2011/04/02(土) 23:20:12.910981デフォルトの名無しさん
2011/04/02(土) 23:28:51.000982デフォルトの名無しさん
2011/04/02(土) 23:41:28.46ダミーの関数を作ってみたらいけてstdcallで行けるのを確認しました。
問題は解決してないんですが
なぜかその関数だけがLNK2019で唯一の違いが引数だけです。
ダミーの方がunsigned short エラーの方が構造体のポインタ
構造体の宣言は
#pragma pack(1)
typedef struct _ST {
.....
} ST, *PST;
関数の宣言は
unsigned short Func(PST pst);
です。
宣言をいじったりしてるけど原因が分かりません。
>>981
結局バイナリ化したら元が何から来たかなんて関係なくないですか?
0983デフォルトの名無しさん
2011/04/02(土) 23:50:18.260984デフォルトの名無しさん
2011/04/03(日) 00:01:35.04内部処理で文句を言うのにこのエラーしか出ないとかいうのは許せない
error LNK2019: unresolved external symbol _Func@4 referenced in fution _ParentFunc@16
0985デフォルトの名無しさん
2011/04/03(日) 00:20:58.250986デフォルトの名無しさん
2011/04/03(日) 00:34:50.800987デフォルトの名無しさん
2011/04/03(日) 01:04:34.54http://www.packetizer.com/security/sha1/
これのsha-c.zipの中身はC言語で計算するだけだからこれで完結してるはずなんだけど
ためしにこのsha1.cを直接sourcesに入れて呼び出したらリンクエラーが出る
0988デフォルトの名無しさん
2011/04/03(日) 01:45:52.690989デフォルトの名無しさん
2011/04/03(日) 03:46:09.990991デフォルトの名無しさん
2011/04/03(日) 05:52:48.10DDKのlibの形式はextern "C" + __stdcallです。
両方ともセットしないとうまくリンク出来ません。
0992デフォルトの名無しさん
2011/04/03(日) 08:33:07.49おまい・・・人の話を聞かないタイプだなw。
0993デフォルトの名無しさん
2011/04/03(日) 11:12:55.95DDK/libに関係なく、C⇔C++間で関数呼び出しがある場合は、extern "C" が必ず必要なんだが。
なんか最近、WDM/デバドラ以前にCの基本が解ってない人が多すぎる・・・
0994デフォルトの名無しさん
2011/04/03(日) 14:15:49.210995デフォルトの名無しさん
2011/04/03(日) 15:19:00.25extern "C"がC言語を表すのはしってたけど、__stdcallをつけるのとつけないので
また違いが出てくるとまでは知りませんでした。
0996デフォルトの名無しさん
2011/04/03(日) 19:53:27.11ある。
ふつーにsetで出てくるし。
0998デフォルトの名無しさん
2011/04/04(月) 11:44:57.20setにそんな使い方があるとは、どうもありがとうございます。
レス数が950を超えています。1000を超えると書き込みができなくなります。