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. GenInfはあるけど、EditInfは無いんでつね。 >Signature="$Windows NT$" >Provider=%Company% $とか%てなんなん? >>576-578 infについて知りたいっていうならMSDNだろ・・・jk サンクス>>581 > >>575 WDKのbulkusbのサンプル このサンプル弄ったとして、GUIDは変えないとマズイ? ドライバ作成中に間違って、 >C:\WINDOWS\system32\drivers フォルダを空っぽにしてしまいましたorz ドライバが無いせいで内蔵CD-ROMを認識しなくなったのですが、 どうすれば良いでしょう? WinXPインスコCDのイメージをハードディスクに落して、 setup.exeを実行して「Windows XP をインストールする」 を行いましたが、 「コンピュータの Windows のバージョンが CD に収録されているバージョンより新しいた め、セットアップを続行できません。」エラーです。 ドライバディスクにもないので、Windows標準ドライバなんでしょうが、 インストロールできません(><;) ドライバ作るくらいなら、PC起動しなくなるくらいよくある話し 1つ賢くなったということで、Windows再インストールしとけ ここって質問してええんかな? 今までDDKでコンパイルしていたドライバが WDKでコンパイルするとafxres.hが見つからないというエラーが出て、 それは#include "afxres.h"をフルパスで宣言すれば回避できるのは分かるんだが 普通にコンパイル時になめるパスを追加できればいいんじゃ?と 誰かそういうパスの追加方法知らない? >>587 sourcesファイルに、INCLUDESあるだろーからそこに足せばいいだけじゃね? >>588 >>587 だが、ありがとん。 sourcesファイルにINCLUDES=$(BASEDIR)\inc\mfc42; と追加したらできた。 ただ、既にINCLUDES=$(BASEDIR)\inc;という 宣言はしていたのにそこの下位フォルダのmfc42フォルダが WDKから見えなくなったってのは結構不思議だ。 __halt のような組み込み関数を拡張子cppのファイルから呼び出そうとすると '__halt': identifier not found とコンパイルエラーになってしまいます。 拡張子cからはそのまま呼び出せるのですが、C++から直接呼び出すことは可能でしょうか? 方法があれば教えていただけると嬉しいです ttp://www.hsjp.net/upload/index.html up48941.zip (←例としてのソース) バージョンは 6001.18001 です :環境 VC++2005pro WDK 6001.18001 :やりたいこと サンプルソース UsbViewをコンパイルしたい。 (USBからシリアルコードをひっぱりたい)\WINDDK\6001.18001\src\usb\usbview :やったこと 新規プロジェクト作成>Win32>Win32プロジェクト>空のプロジェクト プロジェクト>プロパティ>リンカ>コマンドライン CFGMGR32.LIB COMCTL32.LIB setupapi.lib を追加 ツール>オプション>プロジェクトおよびソリューション>VC++ディレクトリ ディレクトリを表示するプロジェクト>インクルードファイル> C:\WINDDK\6001.18001\inc\api C:\WINDDK\6001.18001\inc\crt を追加 ディレクトリを表示するプロジェクト>ライブラリファイル> C:\WINDDK\6001.18001\lib\wlh を追加 :エラー エラー #include <version.h> が見つかりません。 警告が200以上、、、。 warning C4133: '関数' : 'CHAR [数字]' と 'LPCWSTR' の間で型に互換性がありません。 :わからないこと エラーをなくしたいのと、恐らく間違っているであろう開発環境を正しく設定したい、、、orz :参考URL http://slashdot.jp/ ~fslasht/journal/391690 >>592 プログラム>Windows Driver Kits>WDK 6001.18001>Build Environments>好きな環境選べ コンソールが開いたら CD \WINDDK\6001.18001\src\usb\usbview nmake >>593 レス遅くなってすみません。 サンクスです。 コンパイル通りました。 質問: 1. ○○.sys のドライバをリソースとして実行ファイルに組み込むことは可能ですか? 2. 1が可能な場合 FindResource関数にリソースタイプ(RT_○○)の正しい値がわからない。 1について わからないところ: リソースファイル(○○.sys)をCreateService(にかわるもの)にわたしたいが、なにか適当な関数が見つからない。 2について わからないところ: リソースの読み込みは HRSRC hres = FindResource( GetModuleHandle(NULL), in_path, RT_STRING ); HGLOBAL hmem = LoadResource( GetModuleHandle(NULL), hres ); char *lplock = static_cast< char * >( LockResource( hmem ) ); でやっています。 FindResourceのリソースタイプ(RT_STRING)があっているのか不安。 RT_STRINGとしてリソースにしたなら、RT_STRINGでFindResourceするしかないだろ。 どっちかというとRT_RCDATAのほうがふさわしいと思う。 >>596 さっそくのレスありがとうございます。 RT_RCDATA を使って読み込んでみます。 今VC++2005を使っているのですが、 ソリューションエクスプローラー>○○.sysをクリック> ファイルのプロパティ>ファイルの種類をRCファイルに設定で大丈夫でしょうか? >>597 こんな時間にレスサンクスです。 リソース扱ったことないです、、、orz。 char *lplock = static_cast< char * >( LockResource( hmem ) ); から相変わらず、CreateServiceに値を渡す方法がわかりません。 (CreateServiceに代わる関数が見つかりません、、、orz) GetSystemDirectoryでpathを取って、そこのdrivers直下にでも書き出せば良い。 >>600 レスサンクスです。 1度ファイルに書き出してから、やってみたいと思います。 GetSystemDirectory関数は初めて知りました。 貴重な情報ありがとうございます。 質問:STLのvectorが使いたい。 環境: MFC(VC++2005Pro)で現在開発しています。 プロジェクト>プロパティ>構成プロパティ>C/C++>全般 追加のインクルードディレクトリで以下を設定しています。 C:\WINDDK\6001.18001\inc\crt C:\WINDDK\6001.18001\inc\api エラー: #include <vector>を行うと、 c:\program files\microsoft visual studio 8\vc\include\iosfwd(34) : error C2146: 構文エラー : ';' が、識別子 'fpos_t' の前に必要です。 以下、とんでもない数のエラーが出ます。 解決のため、なにかしらヒントなりいただければと思います。 MFC()笑 とりあえず、makefileでやるべき。 先生方、(フィルタ)ドライバ側からレジストリキー読んだり、 書き込んだりする関数についてサイト、書籍知ってたら教えてください。 ttp://www5a.biglobe.ne.jp/~crab/winddk/kernel/index/index01.html とりあえず↑を見つけたのだがよくわかんね。 ZwOpenKey使いたいんですが、失敗します。 RtlInitUnicodeString( &RegPath, REG_KEY_PATH ); InitializeObjectAttributes( &Attr, &RegPath, OBJ_CASE_INSENSITIVE, NULL, NULL ); 恐らく、↑でパスの指定ミスってると思うんですが、 #define REG_PATH L"\\HEKY_CURRENT_USER\\Software\\TEST_01" ってやったらダメだったのですが、正しくはどのように書くんでしょうか? レスアリガタス。 ZwEnumerateValueKey使ってキーの値を取得したいんですが、 その場合、キーの指定っていうのはどうやるんすか? ZwEnumerateKeyで列挙してから使うんでつか? >>612 >キーの指定 ZwCreateKey kernelModeで列挙っていうのは、どうも嫌なモノを作ろうとしているように見える。 >>613 レスアリガタス。 頭悪いんでまとめると、キーを指定して値とりたい場合っつーのは、 ZwOpenKey使わないで、ZwCreateKey使えでFA? ZwCreateKeyの第2引数は、\\HEKY_CURRENT_USER\\Software\\TEST_01指定でOK? >kernelModeで列挙っていうのは、どうも嫌なモノを作ろうとしているように見える。 ZwEnumerateValueKey使うのは、レジストリのキーの値を取得する関数を他にシラネからです。 レジストリに書き込んである値はインストールパスとインストールした日付です。 Windowsアプリで言う、SHRegGetUSValue関数みたいなのがあればいいのだが、 見つからなかったっす。 スマソ。間違えた。 >>614 間違い >ZwCreateKeyの第2引数は、\\HEKY_CURRENT_USER\\Software\\TEST_01指定でOK? 訂正 ZwCreateKeyの第2引数は、KEY_QUERY_VALUE指定して、InitializeObjectAttributes関数でのパスの指定で \\HEKY_CURRENT_USER\\Software\\TEST_01指定でOK? 俺、頭マヂ悪い >HEKY_CURRENT_USER 諦めれ。 つーかマニュアル読め中坊^o^ >HEKY_CURRENT_USER いるわけないやん・・・・。 レス3つも北。愛が伝わってきた。 厨房らしくサンプルソースにグレップかけて、いろいろ見てみた。 "\\Registry\\Machine\\Software\\TEST_01" の指定でとりあえず、HKEY_LOCAL_MACHINE以下にあるキーは取得できそう。 サンプルにHKEY_CURRENT_USER以下のレジストリを扱う処理がなかったと 思ったんけど、探しきれていない? "\\Registry\\User\CurrentUser\\ こんな感じだと思うんだけど、、、。 うまく開けない、、、。 教えてエロい人。 current userって誰を期待している? ここまで書いてもわかんないならあきらめろ。 ツンデレスアリガタス。 とりあえず、HKEY_LOCAL_MACHINE以下の可変長データ取得できるようになったお。 HKEY_CURRENT_USERは無理っぽいお。 みなさまの暖かい助言により、なんとか目的が達成できそうです。 チラ裏スマソ。 >>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。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる