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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0720デフォルトの名無しさん2008/09/16(火) 00:28:46
テスト用の署名はしたん?
0721デフォルトの名無しさん2008/09/16(火) 01:03:02
x86はまだ署名はいらんと思うが
07227182008/09/16(火) 10:32:18
>>719
使用してみましたが、結果変わらずでした。フィルタされてないようです。

>>720
してないです。署名はどのような設定だろうと必要なんでしょうか?
テスト用の署名では公開できないと思うので、公開しようと思ったら
リリース用の署名をとらないと駄目ってことでしょうか?

>>721
http://www.microsoft.com/japan/whdc/winlogo/drvsign/drvsign.mspx

では x86 も「ロード時に読み込まれるドライバには埋め込み署名が含まれている必要が
あります」とあります。
0723デフォルトの名無しさん2008/09/16(火) 10:52:05
>>722
公開前提ならテスト署名で動作確認後にリリース署名確保でいいと思う。
デバイス固有でいいなら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

でロードできるようだが。
07247182008/09/16(火) 22:13:50
>>723
存在しないことになってたんですねorz

テスト署名してみたところ、無事ロードされるようになりました。
でも HD DVD とか Bluray とか再生できなくなるのかな・・・?

みなさん、ありがとうございました。
0725デフォルトの名無しさん2008/09/17(水) 09:26:14
x64じゃダメだろーけど、x86なら自分で署名して、それを信頼する発行元とかに突っ込めばなんとかならんもんかね
0726デフォルトの名無しさん2008/10/04(土) 02:38:08
現在、各ドライブ(C:, D:, ...)のフィルタドライバを作成しています。
そこで、事始めに 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
>>726
その問題のソースをどこかにアップして、ブルースクリーンの内容を全部書けば
すぐ解決するのになんで答えを省くかな
0728デフォルトの名無しさん2008/10/07(火) 08:13:49
フィルタドライバのサンプルminispyで日本語ファイル名が取得でっきん(´・ω・`)

サンプルでは、ドライバ側のFltGetFileInfomationでファイル名取得しとんがやけどその時点てとれるんかな。今日デバッガ準備して確認するけど。暇な人、教えてください(´・ω・`)
0729デフォルトの名無しさん2008/10/09(木) 20:56:20
ウニコードからアンシーに変換してデバッグプリントしたらちゃんと日本語名格納されてました。ごめんなさい(´・ω・`)
0730デフォルトの名無しさん2008/10/12(日) 19:20:53
>>726
ブルースクリーンの内容を書かないと何もいえない。
まずはBSODへの対処の仕方を
MSDNでよく読んで実践してみることをお勧めする。

ただ、フィルタードライバーのR/Wでそういうことが起きているということなら
バッファの取り扱いが適切で無いと推測する。
ファイルシステムの場合、R/Wへのアクセスが3種類ぐらい来るので
それらを適切に扱わないとすぐ問題がでたはず。

>>729
%sではなく%wsとするとちょっといいことがあるかも。
0731デフォルトの名無しさん2008/10/14(火) 08:04:50
>>730
ありがとうございます.指摘の通りバッファの扱いが不適切なのかもしれません.
まず,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:13
続き.以下のようなコードで,フィルタドライバをattachしました.

PDEVICD_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 に値を設定するということでしょうか?
0733 ◆0uxK91AxII 2008/10/14(火) 08:57:07
とりあえず、FastIoDispatchを埋めてみるとか。
07347272008/10/14(火) 13:30:12
>>731
733さんが正解。

NtWriteFile内のIoGetRelatedDeviceObject()でトップレベル
(あなたのドライバ)のDriverObjectを手に入れて
DriverObject->DriverObject->FastIoDispath->FastIoWrite()でクラッシュしてる。
ebxがFastIoDispathでこれがNULLだから[ebx+0C]にあたる
FastIoWriteをコールするときにds:0023:0000000Cを参照。
0735デフォルトの名無しさん2008/10/16(木) 08:39:40
>>733,734
本当にありがとうございます.
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:44
x86 の XP/VISTA で makecert でテスト用の証明書を作り、

 signtool sign /v /s my /n testca test.sys

でドライバファイルに埋め込み署名したところ、ファイルのプロパティの
デジタル署名タブでは「問題ありません」になるのに、CreateService()
で登録してデバイスマネージャのドライバの詳細で確認すると
「デジタル署名されていません。」になってしまいます。

これはテスト証明書だからでしょうか?それとも何か手順が漏れているのでしょうか?
0737デフォルトの名無しさん2008/10/16(木) 11:17:10
>>736
テスト証明書だからですね。

テスト証明書を「(あなたが)信頼する発行元」として登録したので、”ファイル”のプロパティーでは「問題ありません」になります。
が、テスト署名の手順ではその証明書(のルートの証明書)へのマイクロソフトのCross-Certificateができないため、
その署名はカーネルモジュールへの署名としては「”マイクロソフトからは”信頼されない証明書による署名」になります。
0738 ◆0uxK91AxII 2008/10/16(木) 11:50:44
>>735
redirect先に、ファイルを作る。
0739デフォルトの名無しさん2008/10/16(木) 23:16:23
>>737
ありがとうございます。
ということは正式な証明書をとれば大丈夫そうですね。
しかし、日本で頼むと6万とか9万超とかなんであんなに高いんだろう。
0740デフォルトの名無しさん2008/10/19(日) 18:37:59
ご相談です。
WinXP環境でドライバ設計中に、PAGE_FAULT_IN_NONPAGED_AREA(0x00000050)
という文字を吐くブルースクリーンが頻度は小さいですが出ます。
通常、ドライバの問題であれば、設計中のドライバの名前が表示される
ブルースクリーンが表示されると思うのですが、原因を検討中です。
どういった原因が考えられるか同じような問題に出くわした方がいらしたら
ご教授願います。
ちなみにドライバが画像処理ボード用です。
0741 ◆0uxK91AxII 2008/10/19(日) 20:54:36
>>740
失せろ。
0742デフォルトの名無しさん2008/10/19(日) 23:42:27
事情も知らずに失せろは如何なものか
日本に来て勉強しながら頑張ってるのかもしれないぢゃないか
0743デフォルトの名無しさん2008/10/19(日) 23:55:58
たとえそうであっても、来るなと言うよ。
0744デフォルトの名無しさん2008/10/20(月) 01:33:53
とりあえず自国民に聞けでFAじゃなかろうか
0745デフォルトの名無しさん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
0746 ◆0uxK91AxII 2008/10/24(金) 09:32:26
読取のcallbackが着たら、テキトーに弾く。
でも、開くときに弾く方が、OSの挙動として正しいと思う。
0747デフォルトの名無しさん2008/10/27(月) 20:18:44
今カーネルモードのデバイスドライバから
CPUのプロセッサ数(コア数?)を取得する方法を探してるんだけど誰かおせーてー

というかデバイスドライバはサンプルとか入門ページとか数なくてホントワケワカメ。
なんで、それ探すために
「WDMデバイスドライバプログラミング完全ガイド下巻」の購入を検討しているんだけど
関数リファレンスとかどこぞで公開されてないんでしょーか?
0748デフォルトの名無しさん2008/10/27(月) 20:36:43
OpenLibSys参考にハードにアクセスして
詳細情報を自前で取りに行ったら?
0749デフォルトの名無しさん2008/10/27(月) 21:48:06
>>747
とりあえず、
>「WDMデバイスドライバプログラミング完全ガイド下巻」の購入
は止めとけ。
ほとんどがNTドライバの話(WDMでもこの知識は必要だが)で、WDMについては下巻の後半のみ
0750 ◆0uxK91AxII 2008/10/27(月) 22:43:37
>>747
KeNumberProcessors
0751デフォルトの名無しさん2008/10/28(火) 05:46:35
>>748-750
うおー
ありがとー


リファレンス英語版のMSDNにはあるんだね
特にデバイス制御が目的じゃなくて
APIフックの為にカーネルモードで走らせれる環境が必要で
デバドラ作ってるんだけどガイド本はどうしようかな
しかしほんとに毎日BlueScreen何回見てることやら・・・
0752デフォルトの名無しさん2008/10/31(金) 12:34:47
DeviceIoControl()のlpInBufferって参照渡しにできる?
0753デフォルトの名無しさん2008/10/31(金) 14:55:53
>>752
参照渡しってDirect-IO(MDL渡し)のことか?
0754デフォルトの名無しさん2008/10/31(金) 15:37:35
>>753
MDLはよくわからんが、多分そんな感じ
ドライバがIrp->AssociatedIrp.SystemBufferで取得したparamに値を代入した場合
アプリ側でその値は取得できるのかな?っみたいな。。
0755デフォルトの名無しさん2008/10/31(金) 16:30:36
lpInBufferの方は、どっちに指定しても読み取り専用のバッファIO扱いだったはず

ttp://www.sciencepark.co.jp/community/report/report27.html
0756 ◆0uxK91AxII 2008/10/31(金) 20:30:39
>>754
METHOD_BUFFEREDにして、lpOutBufferで読むとか。
0757デフォルトの名無しさん2008/10/31(金) 23:15:55
>>752が何をやりたいのかワカラン
ドライバ→アプリのデータを、アプリが用意したバッファにドライバがコピーするのでなく、
ドライバの持ってるバッファのアドレスをアプリに渡したいのか??(それは無理)
MDLを知らないってことは基礎知識が全く無いってことだよな、やめとけ

>>756
なぜにlpOutBuffer?
METHOD_BUFFEREDではドライバ側ではIN/OUT同一のバッファだけど、ドライバでバッファにセット
したデータは、lpInBuffer側にしかコピーされないよ
0758デフォルトの名無しさん2008/10/31(金) 23:51:39
データ設定してDeviceIoControlするのが面倒だからポインタで渡して
ドライバとアプリで同時に読み書きしたいとかそんなところ?
排他制御やら面倒そうだが名前つきのFileMappingで出来るんじゃないかな。

それはともかくWDK SP1が出たね。
0759デフォルトの名無しさん2008/11/04(火) 13:34:27
複数ボタン同時押しで、別のボタン押下イベントが発生する、ゲームパッド用フィルタドライバを作ろうと思っているのですが、
ドライバ側で、パッドに実装されているボタン以外のイベント(17~32あたり)を発生させることは可能でしょうか?
0760 ◆0uxK91AxII 2008/11/04(火) 14:13:24
>>759
やりたい事は、可能だと思う。
事前に、適当なreportDescriptorを返すとかで。
0761 ◆8eAmylDLLs 2008/11/04(火) 15:09:22
>>759
元からそのパッドに存在しないボタンに振り替えするのは
760が書いてるようにReportDescriptorをでっちあげる必要がある。
もちろんボタン数が増えてデータサイズが増えたら
Reportもそれに併せて手を入れないといけない。

やる気になればマウスだろうがキーボードだろうがHIDの機能なら全部振り替えできなくもない。
つーか箱○改造版ではキーボード振り替えやってる。

独自ドライバ使ってるデバイスの場合、フィルタでやっても
動作しない可能性があるので、独自にドライバ起こす方が無難。
0762デフォルトの名無しさん2008/11/04(火) 15:14:22
CHの3点セット の造りみたいだな

USBでぶっさした機器は直接 HID機器ではない扱いで
HIDドライバが 4アナログ 32点 提供 それのマッピングは任意にできるぜ
07637592008/11/05(水) 10:56:55
>>760-762 ありがと
とりあえずreportDescriptorでググってみたが、ezusbやpicのマイコン関連しか出てこない。。
もしかしてこれってWDMより外のはなし?
0764デフォルトの名無しさん2008/11/05(水) 11:04:12
>>763
HIDの話しだからWDMの外と言われればそーかもな
0765 ◆8eAmylDLLs 2008/11/05(水) 11:58:51
>>763
USB.org行ってHIDのドキュメント漁ってくるのが確実。
あとは公開されてるゲームパッドドライバのソースを見る。

HID部分についてはWDM以外のLinuxとかでも同じなので
そっち系のソースを見る方が分かりやすいかもね。
「USAGE_PAGE」でググるとソースが見つかりやすい。


>>762
質問者は既存のゲームパッドの動作改造目的なんだから
「マッピング部分を差し替える=ReportDescriptorを差し替える」部分をやらなきゃいけないわけだ。
その方法論について聞かれているわけで、視点がちょっと違うんでない?
07667592008/11/06(木) 12:24:36
>>764-765 ありがと
ググってみたが、 ttp://www.tamanegi.org/prog/vtchid/くらいしか見つけられんかった;
とりあえず参考にしてみようと思うが、ソースが複雑過ぎる><
0767デフォルトの名無しさん2008/11/07(金) 08:12:26
ボタンの番号分かってんなら難しくないんでないの?
ゲームパッドのレポートなんてあっても16バイト程度だろうし、
数回分のデータを見れば(アナログでも)データの配置も分かりそう。
0768 ◆8eAmylDLLs 2008/11/07(金) 09:58:40
>>766
あとはX360Cでググ。
フィルタならLowerでIOCTL_HID_READ_REPORTと
IOCTL_HID_GET_REPORT_DESCRIPTOR差し替えれば
動くような気はするけど。

>>767
上でも書かれているがレポートだけではなく、レポートディスクリプタを変更しないと
ボタンを増やすことはできないよ。
データの配置だけではなく、データの配置の定義を変えないといけない。
07697672008/11/07(金) 18:10:58
>>768
そうか新たにボタンを定義するんでしたな。

レポートディスクリプタって何度PDF読んでも完全に理解出来んかったな…。
あれだけ複雑すぐる。
結局既存のモノをパクって終わらせた思い出。
07707592008/11/12(水) 17:02:44
>>767-768 ありがと
つまりデフォルトのreportDescriptorのUsage Maximumを32に書き換えたものを、
IOCTL_HID_GET_REPORT_DESCRIPTORとIOCTL_HID_READ_REPORTで読み込ませればよいということでしょうか。
でもデフォルトのreportDescriptorってどこから取得すればよいのだろう。。。
0771 ◆8eAmylDLLs 2008/11/12(水) 17:55:06
>>770
そーいや標準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:01
馬鹿は消えろ
0774デフォルトの名無しさん2008/11/25(火) 03:08:40
>>772
ドライバの起動順を適当に変更してみる。
順位を手動にしておけば再起動してもドライバはロードされない。
devcon.exe。
0775デフォルトの名無しさん2008/11/25(火) 03:27:55
>>774
ありがとうございます。

devcon.exeは入れていたのですが、順位変更なんてできたんですね。
IDのことでしょうか? まあやってみます。
0776デフォルトの名無しさん2008/11/29(土) 18:59:31
WindowsDDK内で,整数の型はどのようなものがあるのでしょうか?
UNIX環境で言うstdint.h見たいな者を探しています
0777デフォルトの名無しさん2008/12/01(月) 13:26:04
あるWindows用PCIデバイス&ドライバを解析して
Linuxドライバとして移植しようかと思っているんですけど、
デバイスドライバに関してはまったくの無知なんですよね。

そこで簡単なPCIボードをあつかうWindows用デバイスドライバを
作ってみようかと思うんですけど、何か良いサンプル無いですかね?
PCIボードが簡単に手に入って、ドライバのソースも公開されていて、あまり複雑でないもの。
0778デフォルトの名無しさん2008/12/01(月) 22:07:28
( ´-`).。oO(PT1がターゲットかな…)
0779デフォルトの名無しさん2008/12/02(火) 19:39:39
フィルタードライバー作ってるのですが
DO_POWER_PAGEABLEプラグってどういった意味があるのでしょう
とりあえず立てて電源周りの処理もサンプルみながら実装できましたが
わからないと気持ち悪くて
0780デフォルトの名無しさん2008/12/02(火) 20:13:53
>>777
それなりの出費をする気があるなら
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:41
>>780
thx
それを踏まえてヘルプとか読みあさったらなんとなく理解できました
0782デフォルトの名無しさん2008/12/04(木) 06:11:17
VistaSP1でipfltdrv.sysが動作しないんですが、
これを無理やり動作させる方法ってないですか?
(WinObjではちゃんと表示されているのですが、動作していない様子です、、、)

ndis使うしかないのでしょうか?
0783デフォルトの名無しさん2008/12/07(日) 11:56:14
buildコマンドで別途インクルードパスを指定したいのですが
どうすればよいのでしょう?
0784でるたん2008/12/17(水) 15:57:41
USBドライバを作成しています。

バッファが少なく、 転送の間隔があいてしまうと、
バッファがあふれデータが喪失してしまうデバイスがターゲットです。

ReadFileを同期的に呼び出すと前のReadFileの完了の処理をしてから
次のReadFileを呼び出すまでの間にデータが喪失してしまいました。

ReadFileを非同期的に複数回呼び出し
完了したものを処理して再びReadFileを呼び出すようにしたところ、
ReadFileの呼び出しの間にデータが喪失する現象は解決しました。

ところが、数時間動作させるとReadFileが
要求したサイズを受信したわけでもなく、
ショートパケットを受信したわけでもないのに早まって完了してしまうことがあります。

ReadFileを1回しか呼ばない場合はこの現象は今のところ確認できていないのですが、
前述のようにデータが喪失してしまいます。

作成したドライバでは特にキュー等は作成しておらず(作成方法もわからないのですが)、
単に下位のドライバに要求を投げています。

ReadFileを複数回呼び出すのはいけないことなのでしょうか?
よろしくお願いいたします。
0785デフォルトの名無しさん2008/12/18(木) 01:04:14
>>783
sourcesファイルにINCLUDEセクションってなかったか?

>>784
非同期ってオーバーラップ使ったんだよね?
あれはリクエストが終わったらリクエストが来るまでの
待ち時間に別の処理するためだけにあると思ったほうがいいのではないか。

複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
デバイスドライバの中で適切に処理できているのか確認してみた?

ReadFileってアプリか何かでやってるんだよね?
単にファイルに書けばいいだけだったら、データ受信した瞬間
構造体作ってキューに溜め込んで別のスレッドでファイルに書き出すような処理を
ドライバに入れちゃったほうが早いかもしれない。
0786でるたん2008/12/19(金) 19:24:07

>>785
返信ありがとうございます。


> 複数回リクエストと書いてあるが、オーバーラップのリクエストを待たずに別のリクエストを出したときに
> デバイスドライバの中で適切に処理できているのか確認してみた?

そのままUSBバスのドライバに渡されているので
その先でどうなっているのかはわからないです。

何か調べる方法はあるのでしょうか?

大抵は期待したとおりに動いているのですが、
たまたまうまくいっただけなのでしょうか?

デバイスはカメラで映像データが垂れ流しで送られてきています。
ファイルには保存しておらず、単にメモリへ取得できればよいのですが。
0787 ◆0uxK91AxII 2008/12/19(金) 19:58:45
垂れ流しなら、多少消えたところで、問題は無いね。
0788デフォルトの名無しさん2008/12/19(金) 22:31:15
USBドライバ作成って書いてあったから
カーネルモードだと思ってたんだが違うのかな。

私の返事はカーネルモードドライバ+アプリだと
思って書いたので違うかなー。

単純に速度を一度調べたほうがいいと思うよ。
取りこぼしが出たときにタイミングが異常にずれることがあるかとか。
0789デフォルトの名無しさん2008/12/23(火) 11:48:41
http://msdn.microsoft.com/ja-jp/library/ewd38ezs(VS.80).aspx
ここに乗っている__readcr0を使いたいのですが
ここに書いてあるintrin.hをインクルードしてもそんなものは無いと
いわれてしまいます.

どうやったら使えるようになるのでしょう?
0790デフォルトの名無しさん2008/12/29(月) 19:30:17
WDMデバイスドライバプログラミング完全ガイド上下買ってしまった、、
理由は、買えなくなる前にかっておこうかと、、
宝くじ買ったほうが良かったかな。
0791 ◆0uxK91AxII 2008/12/29(月) 19:37:25
>>789
作ればok。
0792デフォルトの名無しさん2009/01/03(土) 20:22:46
>>790
個人的にはオレンジのウォルターオニーさんのほうがオススメ。
基本的な概念はそれで、あとはWDKのドキュメント、サンプルとにらめっこ。
0793デフォルトの名無しさん2009/01/04(日) 21:19:31
Vista以降、署名の問題で個人のドライバ作成が事実上アウトに
されたのが痛いな。
0794デフォルトの名無しさん2009/01/05(月) 02:59:36
32bitは警告が出るだけでいいんだけどね。
64bitは署名必須になっちゃったし
次のOSでは32bitも必須になるだろうし
もうドライバ趣味で作ったりとかできないね。
ので、Linux勉強している自分がいる。
0795デフォルトの名無しさん2009/01/05(月) 06:27:28
これでも使ったら?
http://citadel.x10hosting.com/readydriverplus/index.php
0796デフォルトの名無しさん2009/01/05(月) 23:11:45
>>794
これからはデバイスドライバの類はユーザーモードで動くようになっていくんでしょう。
趣味で作るだけなら署名無効にすればいいのだしね。
ブートやその他カーネルモードドライバを公開しにくいのは残念だけど
それらのドライバがWindowsの不安定さの一員でもあったのだからしょうがないよ
0797デフォルトの名無しさん2009/01/07(水) 20:54:21
アホか?

署名無効にできないから問題なんだよ。
毎回F8なんてやってらんね。

それに署名付きが高品質とは限らんし。
0798デフォルトの名無しさん2009/01/07(水) 21:03:44
>>797
>>795
0799デフォルトの名無しさん2009/01/07(水) 22:48:27
時間のかかる計算ってドライバの中でやるのと
外で計算してからdeviceiocontrolとかでドライバに結果渡すのとで速さに違いある?
0800 ◆0uxK91AxII 2009/01/07(水) 23:53:23
>>799
>時間のかかる計算ってドライバの中でやるのと
するな。
0801デフォルトの名無しさん2009/01/08(木) 20:37:17
IRQL = PASSIVE_LEVELなら問題なし。
0802デフォルトの名無しさん2009/01/08(木) 22:38:56
>>797
落ちる落ちないみたいな品質面もあるけどセキュリティ面もでかい。
また、ウェブサイトが乗っ取られるようなことがあって擦り返られても平気になる。

0803 ◆0uxK91AxII 2009/01/09(金) 01:04:05
>>801
そんな気はする。
0804デフォルトの名無しさん2009/01/09(金) 23:21:16
>>802
でかくねーよ。
ドライバロードさせられる権限あればドライバ使わんでもOS乗っ取れる。
0805デフォルトの名無しさん2009/01/10(土) 10:46:47
>>804
単にPC乗っ取ったり、破壊するだけならそうだね。
0806デフォルトの名無しさん2009/01/26(月) 01:00:02
C++でドライバってどうよ?
どうよ?
0807デフォルトの名無しさん2009/01/26(月) 02:36:45
別に
0808デフォルトの名無しさん2009/01/30(金) 14:16:03
ゲーム用にキーボード入力をアプリケーション側で操作するソフト作りたいんだけど,
とりあえずWindowsXP用のデバイスドライバをプログラミングする良い入門書とかある?
0809デフォルトの名無しさん2009/01/30(金) 20:39:30
アプリでやらない理由を教えてくれ。
0810デフォルトの名無しさん2009/01/30(金) 21:04:05
ネトゲのBOTかマクロを作ろうとしてユーザモードからだと弾かれるからだろ
0811デフォルトの名無しさん2009/01/31(土) 01:26:21
うんそうです.
0812デフォルトの名無しさん2009/01/31(土) 10:13:47
>>808
USBチップ積んだ回路にPICとか使ってキーボードやゲームパッドを直接制御した方が簡単だよ
0813デフォルトの名無しさん2009/01/31(土) 14:19:32
マイコンとか更に知識なくて大変そうだ
とりあえずVMにXP突っ込んで試してみるお
0814デフォルトの名無しさん2009/02/02(月) 04:42:35
>>808
入り口から聞く様じゃ作れないな
俺もその用途でドライバ作ったが、結局なんかあったら聞こうと思って開いてたこのスレで
改めて聞くことなんか何も無かった
本も要らない
ググれば全ての必要な情報が揃う
0815デフォルトの名無しさん2009/02/02(月) 10:31:13
箱○ドライバのソースと、仮想HIDドライバのソース組み合わせれば可能だしな。
0816デフォルトの名無しさん2009/02/07(土) 19:18:22
ネットワークのパケットキャプチャのように、
USBのデバイスとのやりとりのデータをキャプチャするソフトはありますでしょうか。
0817デフォルトの名無しさん2009/02/07(土) 19:34:14
SniffUsb
0818デフォルトの名無しさん2009/02/08(日) 00:40:03
>>817
ありがとうございました!
0819デフォルトの名無しさん2009/02/08(日) 08:05:23
6001.18002に変えたら2 Warningsとか出るようになったお……
ignoreされてんのかwrnに出ないし、動作するけど気持ち悪いんだお(´;ω;`)
■ このスレッドは過去ログ倉庫に格納されています