WindowsDDK各種についてのスレ
■ このスレッドは過去ログ倉庫に格納されています
Microsoft Windows Driver Development Kits http://www.microsoft.com/ddk/ 注意: いつの間にやらDLできなくなってる。 CDを注文する以外に方法はない。しかも送料が$25。 古いバージョンについて Microsoft Windows DDK Version Retirements The Microsoft® Windows® 2000 DDK, the Microsoft Windows 98 DDK, and the Microsoft Windows NT® 4.0 DDK are no longer be available for purchase or download on this site. >>622 CURRENTとUSERを英和辞書で引いてみ 謎が氷解するだろう ハードウェアidや互換性idをデバイスマネージャで見ると PCI\VEN_102C&DEV_00E0&REV_04 PCI\VEN_102C&DEV_00E0 PCI\VEN_102C&DEV_00E0&CC_030000 PCI\VEN_102C&CC_030000 というふうに複数あったりしますが、 SetupDiGetDeviceRegistryPropertyで取得するとき どれが取れるかはどういう風に決まってるんでしょうか? デバイスマネージャで見れてるものが取得されるに決ってるじゃん >>624 SPDRP_HARDWAREIDのことを言っているのであればREG_MULTI_SZなので全部取れるはず。 >>625-626 文字列間に\0があるから最初のひとつしか取れてないと勘違いしてただけでした。 テレビーチューナーのドライバをx64用に作るのは難しい? ペンギンなら解析の情報はここにあるんだけど。 ttp://linux.paken.org/index.php?CX23416GYC-STVLP%A4%CE%B2%F2%C0%CF WDK のサンプル usbview を参考に USB デバイスを列挙するサンプルを書いてます。 WDK は C:\WinDDK\6001.18002 にインストールしています。 ttp://support.microsoft.com/default.aspx?scid=kb;JA;259695 を元に、SetupDiEnumDeviceInterfaces と SetupDiGetDeviceInterfaceDetail に変更しようとしているのですが、この場合は SetupDiGetClassDevs の 第一パラメータにクラス GUID を指定しないといけないようです。 そこで、enum.c にあるように「(LPGUID)&GUID_CLASS_USB_HOST_CONTROLLER」 を指定してみたのですが、リンクエラーになります。 GREP してたどってみると、 wdf.lib に実体があるようなので、C:\WinDDK\6001.18002\lib\wnet\i386 を ライブラリディレクトリに追加して #pragma comment(lib, "wdf.lib") を書き加えてみましたが、さらにたくさんのリンクエラーが出るようになりました (wdf.lib の未解決シンボル)。 どのように設定すればリンクできるのでしょうか。 ググっても情報が少ないので参ります…。 忘れてました。 コンパイラは Visual C++ 2005 です。 とりあえずコンソールアプリとして作っています。 >>632 どうも。 #pragma comment(lib, "setupapi.lib") は追加してあって、GUID_CLASS_USB_HOST_CONTROLLER を使わない SetupDi のサンプルはビルドできています。 エラーに出てくるシンボルを grep して、片っ端から追加してるんですが、 こんな方法しかないんでしょうか…。 なんでGUID_CLASS_USB_HOST_CONTROLLERを追加するとリンクエラーになるわけ? コンパイルエラーだろ? ライブラリじゃなくて、インクルードファイル探せよ それがですねえ、追加してあるんですよ。 今プリプロセッサ関係はこんな感じ。 #include "stdafx.h" #include <stdio.h> #include <windows.h> #include <setupapi.h> #include <devguid.h> #include <regstr.h> #include <usbiodef.h> #pragma comment(lib, "setupapi.lib") これでビルドすると、 エラー 4 error LNK2001: 外部シンボル "_GUID_DEVINTERFACE_USB_DEVICE" は未解決です。 UsbDevTest.obj って怒られます。 それで wdf.lib 追加すると芋づる式に。 それなら、devguid.hじゃなくて、initguid.hをインクルードするように 通りました、ありがとうございます! そういや setupapi.lib って、パス追加してないのに何でリンクできるんだろうと思ったら、 C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib にもいたんですね。 はあ、やっとスタートラインにたどり着きました…。 しかもデバイス取れてねぇ…。 z_/o ビルドができないとか言っている奴はなんでVC++でやろうとするかねぇ。 どうせデバッグできないんだからCUIでやればいいのに。 結局私の想像以上に面倒なようでしたので、 ttp://www.usefullcode.net/2007/02/usbusb.html のサイトのサンプルを参考にさせてもらっています。 それで、目的の USB メモリを探してアクセスしたいのですが、 アクセス用の名前をどうやって取得するかで躓いています。 WMI の CIM_LogicalDevice クラスを使えば「\\.\PHYSICALDRIVE?」 の形で取得ができるのですが、Setup Di API と共通する 情報が得られません。私が見つけられないだけだと思うのですが…。 WMI 使わなくてもアクセス用の名前は得られるのでしょうか。 アドバイスいただけると幸いです。 >>639 一応マイクロソフトのサンプルや、上記サイトのコードなどは ブレークかけて見たりできてますけど、そういう意味ではなくてでしょうか? うーん、WMI から得られる情報で、PNPDeviceID の中にシリアル番号が 含まれてるっぽいですね。とりあえずこれが一致するかみて、実際にデバイスを 開いて中身を確かめるって感じでいけばいいかな…。 SetupDiEnumDeviceInterfaces・SetupDiGetInterfaceDeviceDetailで PSP_DEVICE_INTERFACE_DETAIL_DATAを取得して それのDevicePathでファイル開いて DeviceIoControlでIOCTL_STORAGE_GET_DEVICE_NUMBERでとった番号と USBの物理ディスクの番号を比較したらいい どうもありがとうございます。でもこれって GUID_DEVINTERFACE_DISK を指定して 列挙したときの DevicePathじゃないと取れないのでは。 USB のシリアル番号が欲しいんで、USBview のように、 GUID_CLASS_USB_HOST_CONTROLLER からたどって列挙したデバイス情報から USBの物理ディスクの番号を知りたいんです。 何かボケてるでしょうか。 >>644 何したいのかいまいち見えてこないけど 最終的にUSBメモリのシリアル番号を取れればいいわけ? USBViewと同じ方法でインターフェースデスクリプタ読んで、 それがマスストレージクラスになってるUSBデバイスのシリアル番号を取得じゃダメ? スミマセンわかりにくくて。 USB メモリにプロテクトドングルを兼ねさせるということで、 (1) シリアル番号はあらかじめわかっている (2) USB デバイスを列挙してシリアル番号を探す (3) そのシリアル番号のドライブは?←ここが問題 と、大雑把にはこうです。 で、あれこれ試した結果、苦肉の策が >>642 だったんですが、 もっとスマートな方法があればと思って四苦八苦してます。 おお、いつの間にかWDK 7.0.0がダウンロードできるようになってるな。 ドライバ作成の初心者です。 フィルタドライバで、別プロセスが作成(書き込み)したファイルを監視し そのパスをユーザモード側(自分のプログラム)に通知を行うドライバを作成したいと思います。 (アンチウイルスソフトの常駐監視機能のような機能) このあたりの勉強を行いたいのですが、参考になる書籍や、サンプルソースなどご存知のかたが いましたら教えていただけないでしょうか?(書籍を見たところほとんどがUSBドライバなどの本ばかりでした) 現状はWDKのサンプルソース(src\filesys\配下)やネットで調べていますが、なにぶん始めての領域で どこからスタートすれば良いのかも悩んでいるところです。 WDKのサンプルで一番参考になりそうソースを教えていただければ大変参考になります。 USBデバイスをPCIデバイスに擬似的に変換(又はエミュレート)する方法ってあるのでしょうか? そういえば、実USBデバイスをエミュレートする疑似USBデバイスソフトあれば デバッグ楽かもしれん、と思いつつ作りかたが分からずに挫折したなあ昔。 >>648 書籍といったら「Windows NT ファイルシステム詳説」くらいしか知らないけど絶版。 原書ならUSのAmazonで買えるようだが。 原書のサンプルは以下のExamples以下よりダウンロード可能。 ttp://oreilly.com/catalog/9781565922495/ あとはntifsとかでぐぐったらいくつか出てくるんじゃないかな。フリー版IFSとか ttp://www.acc.umu.se/~bosse/ >> 651 返信遅れました。申し訳ありません。 ”Windows NT ファイルシステム詳説”の日本語版は、なぜか会社にありました。 本はあれども、知識を持っている人がいないので1から勉強してみたいとおもいます。 また、FileMonの昔のソースを見つけましたので、これのドライバの部分がとても参考になりそうです。 ご教授ありがとうございました。 KMDFでドライバを作成した場合、WdfCoInstaller01009.dllの再配布は可能でしょうか? WDMで、LPCバスに接続されている機器をI/Oポート経由でアクセスしたいのですが、 ポートのマッピングの方法を教えてください。 HalTranslateBusAddressの引数にLPCバスタイプが存在しないので、どうした良いものなのか。 よろしくお願いします。 LPCはソフトウェア的にはISA互換と考えていいはず。 それはともかくHalTranslateBusAddressを使いたい理由が不明。 >>656 亀レスですいません。レスありがとうございます。 色々と混乱していまして.... I/Oポートアドレスの割り当ては、IoAssignResourcesを使えばよろしいのですか? >657 I/Oのみ使用するISA Bus(X-Bus)ボードなら src/general/portio のサンプルがほぼそのまま使えるよ! どんなリソースが、どこから、どれだけボードに割り当てられたかは IRP_MN_START_DEVICEでわかるよ! ボードがなくてもドライバのインストールができる(試験用ドライバ では物理リソースにアクセスしないようしておきます)ので、 クラッシュしても中田氏しても大丈夫なPCを用意してWinDbgで ドライバや制御アプリの動きをみてみるといいよ! ハ_ハ ('(゚∀゚∩ できるよ! ヽ 〈 ヽヽ_) ここまで書いて「いまさらISAボードの新製はねぇか?」と思ったが、 せっかく書いたのでこのまま投稿させていただきます。 LPC deviceだとISAPNP対応するかACPIのDSDTに記述がないとOSが認識できないし リソースも割り当てられないからIRP_MN_START_DEVICEは飛んでこないよ。 *.infの記述とデバイス マネージャの設定で、来た気がする。 DDKの選びかたについて質問があります。 VISTA以前はDDKが主流だったそうです。 しかし現在、WDKがDDKに置き換わっているようです。 私のPCはOSがWindowsXPなのですが、旧来のDDKをなんとかして手に入れてるべきなのか それともWDKを入れればよいのかどちらでしょうか? とりあえず、どんなOSも最新のWDKを入れて開発しておけばいいという考え方は間違っていますでしょうか? 回答よろしくお願いいたします。 ここまで無駄に長文だと読んだだけで腹が立つなw XP以降がターゲットの場合DDKとWDKどっちがいいの?の、たったこれだけの内容に何行使うんだよ XP以降がターゲットとは言ってないんじゃないか? 最近のlink.exeは/VXDオプションをサポートしないしターゲットによってはDDKが必要 >>668 ということは開発するものによってはDDKを使う必要もあるのでしょうか? XPのできるだけ深いレベルでのデバイスドライバを開発したいのですが、 一般的に言って、そういった開発でWDKを用いても大丈夫といえそうですか? 95/98/ME:vxd 98/ME/2K/XP/Vista/7:WDM 2K/XP/Vista/7:KMDF XP/Vista/7:UMDF DDK:vxd/wdm WDK:wdm/kmdf/umdf テキトーだけどこんな感じ >>668 ググりゃ即答えが出るような事をわざわざ長文で聞くような低レベルな奴が 非NT系OSをサポートする気のわけ無いだろうよw それにあの分量書いてvdxサポートの事を抜かしたと言うなら、本物の馬鹿だから何教えても無駄と言う帰結 単に、あるときからDDKはWDKに名称変更しましたというだけのこと。 Windows 2000以前: DDK Windows XP以降: WDK って認識でOK。 デバイスドライバの勉強したいんですけど、何から始めたらいいですかね? サンプルコードみてもチンプンカンプンです すみません、質問ですorz Win32のアプリと32bitドライバがあるのですが、 Win64で動作させてみようとしたところ、32bitドライバをWin64が認識しません。(当たり前か) 将来的には、フル64bitしたいのですが、当面「Win32アプリ+64bitドライバ」の形体でしのぎたいと思っています。 「Win32アプリ+64bitドライバ」は可能なのでしょうか? 可能だとすれば、サンプルとか情報がどこかに落ちてないでしょうか? 可能じゃなかったらどうやって64bit OSで32bitアプリを動かすんだ >>680 基本的に32bitドライバとアクセスするのと一緒だからサンプルは見つからないと思う つ [d] >32bitドライバとアクセスするのと一緒 そうなんですか。意外でした。。。 IoIs32bitProcess + IOCTLぐらいじゃね引っかかるのは ドライバのソースを改造したいと思っています。 ドライバの中でOutputDebugString@Win32APIはコールできますか? cygwin/gcc系ソースなのですが、ドライバの中の人の状態が分からないと不安です。。。 そのソースを見てそんな疑問を持てるレベルならやめた方がいい jkを有難うございました。 DbgPrintでググって使い方も見つけますた\(^o^)/ ttp://ruffnex.oc.to/kenji/windriver/ USBのデバイスって入力デバイスとか、イメージングデバイスとか規定のクラスに属していないとだめなの? 例えばPCからUSBでデータをデバイスに送信して、モータを制御するとかそういうことをやるにはどんなデバイスクラスにすればよいの? I/O Stack Locations ttp://www.osronline.com/ddkx/kmarch/irps_8lgn.htm の中の人って、ダンプ出来るんですか? つ [d] なるほど、ドライバだからメモリアクセス無問題ってことですねw USBデバイスから受けたデータが化けているかどうか調べたいのです。 デバイス送信データのメモリダンプを行いたいのですが、、、 ダンプツールだとかI/Oスタックロケーションのダンプコードとか、 ありますでしょうか? すみませんlibusb-win32使ってて躓いてます。教えて下さいorz ホストからターゲットへ、 CLEAR_FEATUREっていうのを送信した後、 リトライの嵐っぽいです。 sysのソースを見ても、 LIBUSB_IOCTL_CLEAR_FEATURE のcaseでclear_feature(...)をコールしてるっぽいし。 LIBUSBの定数っぽいですが、アプリはコールしてないし。。。 OSがコールしてるのでしょうか??? もしそうなら、どういう時に発生するのでしょうか? どっかのエンドポイントが死んだからCLEAR_FEATUREで復活させようとしてるんじゃね? あっそういうもんですか。 エンドポイントしぼーんで、OSが復活の呪文? I/Oスタックロケーションをダンプされたことのあるかた、 やり方(コードw)を教えて下さいorz 64bitのIMM32 IMEを開発するにも2003 SP1 DDKが必要 Windows Driver Model相談室スレで何度か質問でみた KernelStream のビデオ/オーディオドライバ とかって何を参考に、みなさん組んでますか? 書籍を何冊かみたけど、その辺が参考になるものが見当たらなくて・・・ 64bitのデバドラ署名って、なんちゃってじゃ無理? 必ず証明書チェインのルートがMicrosoftである必要あり? DEBUGONで署名なしでも導入できるけど気持ち悪いし。 AVStreamのサンプルをベースにいろいろお試し中だが、KsStudioでしょっぱなからDeviceIoControl が出まくる… ソースのメソッドのNTSTATUSの値はSTATUS_SUCCESSだから、何か必要なものが抜けてるんだろけど 何をすればいいのかわからんw Querying for structure size for KSEVENT_TYPE_SETSUPPORT SyncIoctl: DeviceIoControl failed. Last Error = 0x00000490 SyncGetSupportedEventSets: size query failed Getting property KSPROPERTY_PIN_CTYPES kbfiltr からKEYBOARD_INPUT_DATA を生成して ServiceCallBack 送信しても DirectInput なるクライアントは無反応、な理由は何が考えられますか。 ・DirectInput 利用時とそれ以外で、通過するスタックが異なる ・仮想キー生成方法がおかしい たぶん後者のような希ガスだけど原因よくわからんし・・・ DirectInput なクライアントでなければ動くだけに。 Windows Liveに入会して、Connectに登録して…… Win98/Me/2K用のWDKを手に入れて……めんどいなぁ。 ドライバ開発はサンプルとかを1行づつ変えて挙動を自分で調べていくしかないな 最後まで調べ上げてようやく、根本的に違うサンプルを見てることに気がつく それを何度か繰り返すとようやく本当のサンプルにたどり着くけど 今まで調べた部分も意外に役に立つので決して無駄にはならない 実際、1つドライバを完成させることが出来れば他は応用になるから理解は早いだろうが 完成するソースはサンプルより短くて終わる すでにフィルタドライバがインストールされているデバイスに別のフィルタドライバを入れると、 もともとのフィルタドライバが削除されてしまうんだけど、 これはinfファイルの書き方の問題ですか? WDFの日本語文献の無さに絶望 WDF版Toasterのソース読んでもPDOとデバイススタックが理解できん orz 目的のドライバが取り敢えず動いた サンプルは重要だと再認識 DirectInput系でMJ_READが飛んでこないのは何で? kbfiltr でモニタリングしてるけど何も発生せず・・・ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる