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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0398デフォルトの名無しさん2006/06/04(日) 14:37:21
アプリケーションからReadFileを同期処理として呼び出したときに、
Device側が送るべきデータを持っていなければ、
ずっとReadFileを抜けずに待ち状態になってしまいます。

ReadFile自体はアプリケーションとは別スレッドで行っているとした場合、
任意のタイミング(キャンセルボタン押下)でReadFileを止めさせる場合には、
どのような方法が良いでしょうか?
0399デフォルトの名無しさん2006/06/04(日) 17:12:50
アプリを非同期で書いた方が良いと思うけど・・・

やるとしたら、
データ待ちうけ部分をKeWaitForMultipleObjecとかで待って
中断イベントも待つようにして、DeviceIoControlでイベント発行・・・かな
0400デフォルトの名無しさん2006/06/05(月) 00:34:25
仮想LANドライバ書きたいのですが
今までLinuxやUnixでの開発しか経験ないので
資料集めから始めたいのですがどの資料はみなさん
どんなの読んでいますか?
0401デフォルトの名無しさん2006/06/20(火) 12:21:50
winpcap のそーす?
0402 ◆0uxK91AxII 2006/06/20(火) 13:17:54
>>400
winvpn_1.zip
0403デフォルトの名無しさん2006/07/18(火) 20:16:22
UsbBuildVendorRequest(URB_FUNCTION_CLASS_INTERFACE)で
デバイスが返答しない場合にタイムアウトさせるにはどうすれば良かですか?
0404デフォルトの名無しさん2006/07/18(火) 22:22:39
WDMであるデバイス用のドライバが書ければ、Linux用の
ドライバを書く力もつくと考えていいのでしょうか?
0405デフォルトの名無しさん2006/07/18(火) 22:43:10
全然違うよ
0406デフォルトの名無しさん2006/07/19(水) 03:16:35
ハードに直接アクセスする部分が書けるなら
それなりになんでも出来るでしょう

あとはルールを知ってるか知らないかだけ
0407デフォルトの名無しさん2006/07/19(水) 06:14:58
>>403
WorkQueueで待ってイベントがタイムアウトしたらキャンセルとか。

>>404
そんな考えはダメ。
0408デフォルトの名無しさん2006/07/19(水) 08:33:42
>>403
UsbBuildVendorRequestは単なるマクロで、urbに必要な情報を代入するだけ
urbを下のドライバに渡すときに使ってる関数のリファレンスを読めば載ってるかと
04094032006/07/19(水) 20:38:20
>>407
>>408
ありが�dございます。>>381あたりと同じでいいんですかね?もちょっとがんばってみます。
0410デフォルトの名無しさん2006/07/27(木) 14:39:39
あげ
0411デフォルトの名無しさん2006/07/27(木) 14:40:28
ある特殊なデバイスを作りました。
HIDマウスなんだけど、特殊なベンダーリクエストが来ると
LEDが光ります。(フィードバック)
これは普通にPCに挿すと、普通のHIDマウスとしか認識しないんだけど
専用デバイスドライバをインストールすると、(HIDドライバーをすげ替える)
LEDによるフィードバックが味わえるようになるという。

とりあえずwindows2000/xpで動作確認した所、okだったんだけど、
ドライバーのインストールで気になる事が。
windows2000では普通にインストールできるのに、
windowsXPにインストールすると、その時挿していたusbポート以外では、
HIDマウスとして認識してしまうという不具合が出ました。
(手動で一つ一つ、ドライバーの更新という作業が必要)
どうしてこんな事が起きるのか・・・・orz
0412デフォルトの名無しさん2006/07/27(木) 14:46:27
インストーラーは、installshield 11.5 のウイザードのみ使用。

ドライバー
INFファイル
インストーラー、

どれが悪いのか・・・。

親切心で、デバイスにリポートディスクリプターなんか載せたのが
悪かったのかな。
単純に、hidマウスデライバのプライオリティが下げられれば
良いだけな気がするんだが、方法がわからん。
0413デフォルトの名無しさん2006/07/27(木) 15:03:21
>>411-412
↓じゃ回避できないか?
既存の USB デバイスが新規デバイスとして認識される
http://support.microsoft.com/default.aspx?scid=kb;ja;818542
0414デフォルトの名無しさん2006/08/04(金) 15:35:58
いつの間にかDDKがダウンロードできるんだが
ttp://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
>>414
情報�dクス
早速DLしますた。
0416デフォルトの名無しさん2006/09/04(月) 22:50:02
他のスレからこちらに来ました.

「どのプロセス」が「どのファイル」を作成,変更したかを
リアルタイム取得する方法を探しているのですが,
デバイスドライバーを自作する必要があると聞いてこちらに来ました.
Filemonのように高度なものでなく,ReadDirectoryChangesWで取得できる
情報が「どのプロセス」によってもたらされたものかを知りたいのですが,
サンプルコードや参考書などがあればご教授お願いします.
0417デフォルトの名無しさん2006/09/05(火) 04:05:31
filemonのソース。
ntinternalではもう公開してないが、ぐぐれば見つかる。
04184162006/09/07(木) 12:57:02
>>417
ありがとうございます.>>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
>>418
・・・悪いことは言わん、アキラメロ

XPのコマンドプロンプトでopenfiles使った方が幸せになれるぞw
0420 ◆0uxK91AxII 2006/09/07(木) 14:08:59
>>418
方法を知りたいなら、buildを通す必要は無いし、
Filemonのような事をしたいなら、FILEM.SYSを使えば良いだけだから、
やはり、FILEM.SYSのbuildは不要。

十年早いと言うか、諦めた方が良いね。
0421 ◆0uxK91AxII 2006/09/07(木) 14:10:41
x やはり、FILEM.SYSのbuildは不要。
o やはり、FILEMON.EXEのbuildは不要。
0422デフォルトの名無しさん2006/09/07(木) 19:09:02
こんばんは、ボクfilemonです
04234162006/09/07(木) 22:40:10
>>418-421
ありがとうございます.
とりあえず,ビルドだけはできたのですが皆様のおっしゃるとおり
理解するのはほぼ不可能なのであきらめます.
0424デフォルトの名無しさん2006/09/11(月) 12:52:15
net files
0425デフォルトの名無しさん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
>>427
デジタル署名は関係ない

そのINF使って、再インストールしてみたら?
0429デフォルトの名無しさん2006/10/06(金) 21:17:37
>>428
どもです。
ttp://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign_perOS.mspx

Windows 2000でやってたんですが、2000だと無署名のドライバの日付は無視されるみたいで
(削除 → 再起動 → インストールとかもしてみました)
XPだとOKでした。(署名してないという警告はもちろん出ますが)

0430デフォルトの名無しさん2006/10/09(月) 11:11:17
もうちょっとそちらの状況を晒してほしい
0431デフォルトの名無しさん2006/10/17(火) 01:58:39
はじめまして。WinXPのWDMを開発しています。
WRTIE_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:26
ポートが0x378じゃないというオチ
04334272006/10/18(水) 01:13:27
>>430
>>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:36
XP SP2 DDKを使っています。
atapi.sysを使うためのカーネルレベル関数を教えていただけないでしょうか。

PCIIDEのソース例はありますが、atapi.sysよりもハード側のレイヤの
バスドライバであって、参考になりません。

PCに付属のIDEポートを直接駆動してATAPIコマンドを入力したいのです。
よろしくおねがいします。
0435デフォルトの名無しさん2006/10/21(土) 17:20:40
atapi.sysを使ってport直叩きなんてできんぞ。

pass throughじゃ駄目なのか?
0436デフォルトの名無しさん2006/12/07(木) 21:45:38
スレ違いだけど、俺用メモ
tp://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
Vista-x64以降は署名の無いドライバは使えない事に対して、
(既にWHQL取ってるような大メーカーさんは別にして)皆さんどのように
対応します?
0438デフォルトの名無しさん2007/01/19(金) 21:57:40
普通に署名を付加します。
0439デフォルトの名無しさん2007/01/22(月) 12:20:54
テスト署名して、
Bcdedit.exe -set TESTSIGNING ON
でOK。
0440デフォルトの名無しさん2007/01/24(水) 21:05:26
Bcdedit.exe -set TESTSIGNING ON
すると、(セーフモードみたいに)画面の四隅に「テストモード」って出るんだな。
インストーラでこっそりTESTSIGNING ONしようと思ったけどだめだは・・・・
0441デフォルトの名無しさん2007/01/25(木) 00:23:33
デジタルコンテンツの暗号化とかのために、
カーネルでは信頼するものしか動かせなくする
という話だが。
0442デフォルトの名無しさん2007/01/25(木) 18:58:21
初歩的な質問かもしれないのですが、

ttp://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:56
仮想空間アドレスがどの物理メモリに割り当てられているか知る術がありますか。
0445デフォルトの名無しさん2007/02/18(日) 23:01:31
>>444
ない。
0446デフォルトの名無しさん2007/02/18(日) 23:13:18
>>445
カーネルだけが知っているということですか?
0447デフォルトの名無しさん2007/02/19(月) 00:35:49
>>446
そう。内部用のAPIじゃないとわからん。
0448デフォルトの名無しさん2007/02/19(月) 03:48:58
WDMでも使えたかどうかは知らないけどNT用のDDIにあったような
0449デフォルトの名無しさん2007/02/19(月) 05:50:09
厨房スレだな。
MmGetPhysicalAddress
04504442007/02/19(月) 06:56:51
>>449
ありがとうございます。
0451デフォルトの名無しさん2007/02/19(月) 08:54:25
>>449
マルチにマジレスカコイイ!
0452sage2007/03/07(水) 02:25:36
WinIo.dllでRTCを弄りたいのですが
皆さんどうやっています?
0453デフォルトの名無しさん2007/03/19(月) 02:58:29
WinDbgを使ったKernel Debugにおいて、
ターゲットマシンが全く応答してくれず、2日無駄にしました。

このスレの
>>21, >>25, >>27

を読んでいれば、もっと早く気づけたのに・・・。

ちなみに、ターゲットマシンは、ThinkPadで
ドッキングステーションに載ってるCOMポートにつないでやろうとしました。
0454デフォルトの名無しさん2007/03/19(月) 07:49:33
wdmってddkよりめんどい?
0455デフォルトの名無しさん2007/03/19(月) 08:25:40
え゛?
0456デフォルトの名無しさん2007/03/19(月) 09:35:24
wdf
0457デフォルトの名無しさん2007/03/19(月) 11:28:22
もう、春だからなぁ・・・
0458デフォルトの名無しさん2007/03/19(月) 14:44:30
あと、少しで終わるよなー
0459デフォルトの名無しさん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:27
DIFxフレームワーク使ってセットアップかければいいじゃん。
04614592007/05/30(水) 06:52:04
>>460
ありがとうございます。 こんなものがあるのを知りませんでした。
大変助かりました。
0462デフォルトの名無しさん2007/06/04(月) 18:14:17
memcard.sys ねぇ・・・orz
0463デフォルトの名無しさん2007/07/08(日) 14:14:45
Filemonのソースを解析したいんですが、ソースの内容がわからないです(´・ω・`)


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

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

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

いずれ全てのドライバが署名必要となるのか・・・orz。
04704682007/08/02(木) 14:20:49
>>469
とりあえずVista64bit対応のためでつ。
WindowsServer2008以降32bit版もKMCS必要なことは知ってますよね。(Server2008x86-CTP版で必要なことを確認済み)
>MS社の方針変更の可能性濃厚なんで
方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?

>おおまかな手続きの流れをよければ語って
>もらえマイカ。
手順等は
http://www.microsoft.com/japan/whdc/winlogo/drvsign/kmcs_walkthrough.mspx
の画面右のdoc参照。
他に知りたいことがあれば、具体的に書いてもらえば可能な範囲で答えるが・・・・
04714692007/08/02(木) 17:45:32
>>470
>方針変更とは? KMCS義務をやっぱりやめるなんて情報があるの?
やめるという情報はないでつ。むしろ、32bitとかも求められるとなると、
いずれSP3辺りでXPなんかもそうなるのかなと・・・。XPのサポートが
延びてるしまだまだ使われるはずなので。

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

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

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

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

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

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

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

(1)は説明不要でしょう。
(2)は私がでは無く客先の担当者が苦労したのですが、でかい会社のため、法務・
総務・購買などに(1)が必要だったようで、電子証明書を購入だけで2ヶ月か
かりました。
04744682007/08/02(木) 22:25:03
一番の難関は(3)です。電子証明書(の秘密鍵)の管理は「DOSプロンプトって何?」
ていうような事務屋さんが仕切っているわけですから、WDKのインストールを含め、
KMCS_Walkthrough.docの手順をやってもらうなど、まず不可能。
で、仕方が無いので、公開鍵・秘密鍵ファイルのありかとパスワードを入力する
ための専用ダイアログアプリとそこから一連の手順を自動実行するバッチ(+α)
を作成し、WDKの中で必要なツール等と合わせてお客に渡し、署名してもらい
ました。
KMCS_Walkthrough.docを見てもらえばわかりますが、Cross-Certificateの関
連で、テスト用電子証明書で署名する手順と本物の電子証明書で署名する手順
が異なるため、上記バッチの確認が(本物の電子証明書がない)自分のところで
できず、苦労しました。

参考:
catファイルの作成にMakeCat/Signability/Inf2Catの3つの選択肢がありますが、
* MakeCatは面倒
* Signablityはファイルをコピーしただけでは使えない(COMの登録が必要)
なので、Inf2Catがお勧めです。


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

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

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

どなたかご教授いただければ幸いです。
0477デフォルトの名無しさん2007/08/14(火) 09:29:51
ブロックしたらだめ。完了ルーチンなり割り込みなりを設定して
「まだ読み出すべきデータがない」と言ってすぐに戻る。
0478デフォルトの名無しさん2007/08/14(火) 11:35:50
読むべきデータがないならSTATUS_PENDINGでいったん返しておいて、
データができたときに割り込みがあるなら、それをトリガにしてIRPを完了かなぁ。
割り込みなくてポーリングでしかわからないなら、ワーカースレッドを起動して
スレッド内でデータができたらIRP完了するのかな。
0479デフォルトの名無しさん2007/08/14(火) 13:52:12
>>476
>>477が書いているようにディスパッチルーチンの中で時間のかかる処理の完了を待ってはならない。
>>478のようにディスパッチルーチンではSTATUS_PENDINGを返しておき、割り込みなりポーリング
なりで処理の完了を確認した時点で、IoCompleteRequest()で呼び出し側に完了を伝える。
ドライバ側で上記の実装をしておけば、アプリ側は
同期IO:ReadFile()は処理の完了まで抜けてこない
非同期IO(Overlapped-I/O):ReadFile()は処理の完了を待たない
のどちらでも実装できる。

>>476の質問の書き込みから見て、これらの説明だけではチンプンカンプンでしょう。
何か本を買って一通りの勉強をすることを強く勧める。
例: http://www.ascii.co.jp/books/books/detail/4-7561-3913-2.shtml
入門書としては少し難しいが、実装上のノウハウがひととおり書かれている。
04804762007/08/14(火) 13:59:27
>>477
>>478
>>479
ご回答ありがとうございます!
一応Linux上でのドライバ開発の経験はあるもので、
Linuxだとディスパッチルーチンに相当する部分でスリープしてしまって良く、
それと同じようなことをしようとあがいてました。
もっとWindowsでの事情をちゃんと考慮すべきでした・・・

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

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

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

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

キャッシュマネジャがすごくイヤな感じだった。
04874812007/09/05(水) 14:41:25
はまってて質問したこと忘れてました・・・

>>482
DDKサンプル、OSRは大体見てます。
NTファイルシステム詳細は会社にはあるのですが
個人でも買いたいと思ってます。(が売ってません・・・)

>>483
とりあえずDLはしておきました。

>>486
ファイルシステムの場合、OSからのリクエストが
Undocumentedな上に、SPが当たったりすると、動作が変わるのが嫌らしいです。

キャッシュマネージャを利用しようとすると、IRP_MJ_READ/IRP_MJ_WRITEに対して
2回コールされます。
最初はキャッシュフラグOnでOS側から。このときにキャッシュマネージャーのファンクションをコールします(CcCopyRead)
するとキャッシュマネージャ、VMMを経て、またIRP_MJ_READが呼ばれますが、このときはフラグがありません。
で、キャッシュなしということで、ディスクから読み込んで〜
という風になりますが、マルチスレッドを考慮して適切に排他/共有ロックをかけないといけないですし

さらに、先読み、遅延書き込み、によって通常の読み書きより優先度の高い処理が別スレッドで発生したり
Explorerや、AntiVirus、ユーザーが意識していないタイミングで、リクエストがばんばん発生するので
地道に解析しながらやるしかなさそうです。
0488デフォルトの名無しさん2007/09/05(水) 18:13:06
UndocumentedつーかIFSKITはDDKとは別に購入しなければならなかったんじゃないかな?

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

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

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

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

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

XPDM,WDDMは共存できない。ってことらしいんだが、WDDMの情報がまったくでてこない。
参考になりそうなサイトしっている方いたら教えてくれませんか?
0496デフォルトの名無しさん2007/09/28(金) 02:18:34
HELP DDKのサンプルで製品版と互換にする方法教えてもらえませんか。
おそらくGUIDをそろえるんだと思います。
NECのスキャナのドライバでブルースクリーンになるので調べたら、
内部名がbulkusbでDDKのサンプルらしく、KB調べたらバグありらしいので
ドライバの供給はもう終わっているので、自分で修正しようとしています。
bulidしてリネームしてDiriversにコピーしたけどだめでした。

ソースだと、
// {6068EB61-98E7-4c98-9E20-1F068295909A}
DEFINE_GUID(GUID_CLASS_I82930_BULK,
0x873fdf, 0x61a8, 0x11d1, 0xaa, 0x5e, 0x0, 0xc0, 0x4f, 0xb1, 0x72, 0x8b);
ここのところがわかりません。0x6060eb,0x61...のようになるはずなんじゃないかと。
0497デフォルトの名無しさん2007/09/28(金) 04:13:06
bulkusbと書いてあるからと言って、
中身がDDKのbulkusbそのまんまとは限らないと思う・・・

仮に、中身がほぼ同一だとしたら、
GUIDは、オマイの使ってるデバイスにあわせる必要がある
■ このスレッドは過去ログ倉庫に格納されています