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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
ようこそ、Blue Screenへ(・∀・)
0565デフォルトの名無しさん2008/02/08(金) 20:18:50
BIOSはメーカーによってまったく違う物だけど、そこはどうする気だ?
0566デフォルトの名無しさん2008/02/08(金) 22:29:51
結論から言うと無理
0567デフォルトの名無しさん2008/02/09(土) 00:05:09
デバイス依存で直接IOポート叩く覚悟ならば全くできないことはないんぢゃないかと思いますけれども
0568デフォルトの名無しさん2008/02/10(日) 15:54:56
できますよ
0569 ◆0uxK91AxII 2008/02/10(日) 16:54:50
>>564
設定方法次第。
I/O経由なら可能だろうけど、
保存場所がメモリアドレスに出てきていたら、不可能な場合もある。
0570デフォルトの名無しさん2008/02/10(日) 20:11:16
今でもBIOSの設定情報がCMOS RAMに存在すると仮定した話。

CMOSの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
>>571
お前に言いたい事は、

目的によって実装が全然異なるのに「各種」なんてあるわけない。
その程度の事がわかるぐらいになってからドライバを書け。

そもそもDRM対策で個人ドライバ開発者が厳しい状況に置かれている
事を理解しろ。
0573デフォルトの名無しさん2008/02/11(月) 00:42:06
>>571
DDK落として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
>>574
リクエスト元のスレッドなんて意識するような作りをしちゃいかんだろ。
何の為のIRPだ。
0576 ◆0uxK91AxII 2008/02/18(月) 10:19:11
>>574
readに対する応答処理として、それは誤っている。
故に、死ね。
0577デフォルトの名無しさん2008/02/18(月) 12:38:07
>574
複数のアドレスとring3のスレッドが一対一対応しているなら
アドレスの数だけ新しいデバイスオブジェクトを作っちまったら
どうだ?

どうしてもダメなら
・プロセスID、スレッドID等の情報をドライバに登録する
 DeviceControlをつくり、読み書きの前にスレッド情報を
 登録しておく。
・ReadFileはやめて
 DeviceIoContro(
     ハンドル,
     スレッド識別読み取りコード,
     上記情報バッファのアドレス,
     上記情報バイト数,
     読み取りデータ格納バッファアドレス,
     読み取るバイト数,
     ...
     );
・WriteFileはやめて
 DeviceIoContro(
     ハンドル,
     スレッド識別書き込みコード,
     上記情報に書き込みデータを付加したバッファのアドレス,
     上記情報 + 書き込むバイト数,
     NULL,
     0UL,
     ...
     );
実装としては果てしなくダサいな・・・
0578デフォルトの名無しさん2008/02/18(月) 17:23:47
574は本質的な間違いを犯している。よって終了。
0579デフォルトの名無しさん2008/02/19(火) 21:27:42
>>574
WDMで書くのをやめる。
0580デフォルトの名無しさん2008/02/20(水) 12:33:39
>>574
まずドライバに持たせたバッファにコピーするだろw
0581デフォルトの名無しさん2008/02/22(金) 01:51:29
WindowsXP環境でUSBAudioドライバを作成しています。
解決できない問題があり質問させていただきます。

ドライバは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
>>581
自己レスです。Pinのルーチンが呼ばれない件、解決しました。
Pinの接続設定とPinディスクリプタの設定値に不備があったのが原因でした。
失礼しました。
0583デフォルトの名無しさん2008/03/03(月) 16:23:26
USBデバイスのファンクションドライバの上層に挿入する、ごく普通のフィルタドライバ
を作ろうとしていますが、インストールで詰まっています。
参考書:滝口著「フィルタドライバプログラミング」では、最も一般的な方法として
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
>>583
正直あの本の方法は特殊だと思う。
一般的に特定のデバイスで動作させるには、
そのドライバにインストールできるようなInfファイルを書けば良くて
サンプルはDDKについてるから、それとヘルプ参照しながらで
簡単に作れたと思う。

0585デフォルトの名無しさん2008/03/06(木) 12:34:34
>583
ざっとソースを眺めたところ、
device_nameは/listdevicesの出力結果、
filterはHKLM\SYSTEM\CurrentControlSet\Servicesにぶら下がってるキー名
に見えた。
0586デフォルトの名無しさん2008/03/14(金) 03:44:23
ドライバ作ってみたいんだけど環境は何が必要?
Visual Studio 2005 なら正式版あるけどテンプレにドライバなかった
0587デフォルトの名無しさん2008/03/14(金) 05:52:54
DDK
Visual Studioに統合もできたはず
0588デフォルトの名無しさん2008/03/14(金) 11:39:05
DDKWizard
0589デフォルトの名無しさん2008/03/14(金) 17:24:31
Vistaリリースに伴いDriver Development Kit (DDK) はWindows Driver Kit (WDK)になったッ
本家WHDCサイトも見ておけッ
http://www.microsoft.com/japan/whdc/DevTools/default.mspx
0590デフォルトの名無しさん2008/03/14(金) 21:03:48
>>587-588
ありがとう。探してみるわ

>>589
サー!イエスサー!!
0591デフォルトの名無しさん2008/03/20(木) 16:36:37
UMDFは一般のDLLで開発できるということで手を出してみたのですが、
wudfddi.hをインクルードすると
構文エラー : 識別子 '_in'
というエラーが出てしまいます。
確か、VS2002や2003で最近のSDKやWDKをコンパイルとすると
この手のエラーが出たような記憶があるのですが、
何とか突破する方法はないでしょうか。
WDKとダウンロードインクルードパスの追加は完了しています。
0592デフォルトの名無しさん2008/03/23(日) 21:49:58
>>591
止む無くVC2008をインストールして解決することにしました。
0593デフォルトの名無しさん2008/05/09(金) 21:00:21
>>591
それは最近のVC++の/analyzeオプション用の注釈だと思う。
単純に/D__inとかで空に置換してコンパイルできない?
0594デフォルトの名無しさん2008/05/11(日) 10:33:31
ちがうと思う。

VCに最初から入っているPlatformSDKに相当するものとの相性があって
最新のもの同士なら大抵うまくいくが、片方のバージョンが違うと
インクルードがうまくいかないことが多い。
WDKは最近出たものだから余計そうじゃないかと。

逆にPlatformSDK入れてパス通せばうまくいくんじゃないかと。
すでに動いているだろうから余計なことする必要は無いけどね。
0595デフォルトの名無しさん2008/05/26(月) 21:52:05
ドライバから、レジストリって読みに行けますか?
windows.hがインクルード出来なくて、RegOpenKeyEx()が使えないです。
なにかヒントください。
VC6+XPSP1DDKです。
0596デフォルトの名無しさん2008/05/26(月) 22:32:31
RtlQueryRegistryValuesかな?
Windows起動中にロードするドライバだとレジストリの場所によっては読めないところもあるので、
注意してくださいね。
0597デフォルトの名無しさん2008/05/26(月) 22:33:02
Zw系の関数にある

Windows.hはユーザーモードアプリケーション用であって
ドライバのカーネルモードはntddk.hとかになる。
サンプルをインストールしてよく見てみるべし。
0598デフォルトの名無しさん2008/05/26(月) 22:36:20
あ、Rtlか スマソ
0599デフォルトの名無しさん2008/05/28(水) 22:58:32
RAMディスクみたいな仮想ディスクのドライバを作成した場合、
ハードウェアが存在しないのでバスドライバがハードウェアの追加を「検出」することも
ないと思うのですが、実際にはAddDeviceがちゃんと呼び出されるみたいです。
なぜ呼び出されるのでしょうか? MSのサンプルRAMディスクのソースを見ても
特別なことをしているようには見えません。
0600デフォルトの名無しさん2008/05/29(木) 20:27:50
>>596-598
RtlQueryRegistryValuesで読めました。
引数悩んだけど、なんとかなりました。
thx
0601デフォルトの名無しさん2008/05/30(金) 22:14:07
>599
.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
>>601-602
トンクス。(599じゃないけど

自分で追ってみたんだけど、Servicesセクションの、AddServicesディレクティブで指定したセクション内で、
 StartType = 3 ; SERVICE_DEMAND_START, bulkusbの場合…PnPで検出する場合はこちら
と指定するか、
 StartType = 0 ; SERVICE_BOOT_START, ramdiskの場合…OS起動時に必要なデバイスはこちら
の違いだと、思ってるんですが、、あってます?

あとお聴きしたいんですが、
ramdisk(StartType=0?)の場合、AddDeviceに渡されるPDOって何なんでしょうか?
他のデバイスの場合は、バスドライバが作成した何かだと思うんですが…

06046032008/06/03(火) 00:13:00
StartTypeはなんか違いますね。
modelsセクションの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ファイルの探索に用いられるのか。
06056032008/06/03(火) 01:14:27
「ハードウェアの追加と削除」でRamdisk (WDF版)をインストールしたところ、
Walter本(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されるんかな?
ご意見かポインタきぼんぬ。

06066032008/06/03(火) 01:34:37
walter本の2章に書いてあるわ…<root bus。
ちゃんと読まなきゃダメだな。スレ汚しスマソ
0607デフォルトの名無しさん2008/06/05(木) 17:31:44
WinDBGの使い方について教えてください。

プリンタドライバ開発を始めようというところで、ソースコードデバッグがしたいのですが、
ブレークポイントの設定ができずに悩んでます。

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:09
>>607
4の時点でだめだね
使ってるモジュールがリリース版になってるなどして
ロードしてるモジュールとシンボルが一致して無い。

ロードしてからコンパイルしなおしてるとか
ちゃんとファイルがコピーされているから
日付、サイズをちゃんと確認すべし。
0609デフォルトの名無しさん2008/06/06(金) 06:14:49
src*
0610デフォルトの名無しさん2008/06/06(金) 10:20:16
>>608
レスありがとうございます!

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
じゃあ根本的に違うことやってたんですね・・・orz
プロセスにアタッチって1台のマシンでやるわけですか?
0613デフォルトの名無しさん2008/06/07(土) 16:58:49
デバッガから印刷しなければ1台で問題なし
0614デフォルトの名無しさん2008/06/08(日) 12:05:37
デバイスドライバインストール時に、EXEを実行したいんだけど、
INFファイルから起動かけるのって無理かな?
逆に、EXEからINF実行って仕組みが一般的?
0615デフォルトの名無しさん2008/06/08(日) 14:27:19
>>612
デバッグするマシンにWinDbgいれれば1台でできるし
開発マシンから見たければ、リモート設定すればできる。

ただ、どっちにしろ、パスだのログインだのアクセス権だの
結構めんどくさい&ひっかかるので注意。

>>614
ExeからInfならSetupDi系関数なら簡単じゃなかったかな
ドライバインストール時に呼ばれる個別設定はCoInstallerDLLだったような・・・

0616デフォルトの名無しさん2008/06/09(月) 00:42:13
>>613
デバッガから印刷しなければ1台で問題なし

そもそもWinDbg自体から「プリント」はできないはずでは?
WinDbgを入れて、スプーラにアタッチして
それから、メモ帳などを開いて、印刷実行

これでマシンは1台でOKですよね?

ブレークポイントがうまくつけられない orz
06176102008/06/09(月) 13:33:11
レスしてくれた方ありがとうございました!

プロセスにアタッチして、とうとうデバッグができました・・・(;*´∀`*)
「ファイルに出力」ってのを選ぶとプリントプロセッサが動かないらしく、
何もつながってないポートを選んで印刷したらブレークポイント設定できました。

VisualStudioでもデバッグできたので、ビルドもできれば楽になりそう・・・
0618デフォルトの名無しさん2008/06/12(木) 20:52:15
プリンタドライバのCOREソースコード中に
CreateFile(filename〜)を指定して、ファイルを作り出そうとしているんですが
うまくいきません 無論fpt=fopen("log.txt","w") などしても
無駄です。
OUTPUTとしては「印刷物(中間ファイル)」と「コード中に外部ファイルに
書き込んだファイル」
を考えているのですが、、、、ドライブのソースコード中に何を
書いたら外部ファイルをつくりだすこともできるんでしょうか?

要するにコンソールでいえば、fopenして外部ファイルに書き込んで
チェックする作業をドライバでもやりたいのです。
0619デフォルトの名無しさん2008/06/12(木) 23:16:25
>>618
コンパイルエラーとかはないの?
デバッグでステップ実行してみたら?

俺は印刷データをビットマップファイルに保存するのに成功してるから、
普通のログファイル作成も問題ないはず。
0620sage2008/06/12(木) 23:27:10
MIDIストリームについて教えてください。

AVStreamのMiniDriverとしてUSBAudioドライバを作っているのですが、
MIDIのストリーム転送機能で、KS(KernelStream)から送られてくる
MIDIデータに不明なデータがあります。

KSから送られてくるMIDIデータは、

不明データ(4バイト)+MIDIメッセージ長(4バイト)+MIDIメッセージ(可変長)

の形式で繰り返し送られてきます。

不明データと書いた最初の4バイトが何を指すものか
知っている方がいたら教えてください。

USBAudioドライバからデバイスには、USBMIDIフォーマットで
転送するため、MIDIメッセージ以外のデータを送る事はないのですが、
制御かなにかで必要となるデータなのでしょうか?

宜しくお願いします。
0621デフォルトの名無しさん2008/06/12(木) 23:39:29
>>620
sageさん、思いっきりAGEてるんですけど><
0622デフォルトの名無しさん2008/06/13(金) 17:26:45
老師!
WDKをVSに統合したいんですけどどうすればいいんですか?
アプリみたいにVS上でIDEを使って開発したいんです。
WDK: Server 2008
VS: VS2008Pro
0623デフォルトの名無しさん2008/06/14(土) 01:46:17
>>618
APIつかってエラー出たならGetLastErrorが基本。

>>620
KS系はPinで定義してあるデータを送るものだから
Pinの定義を調べてみては?

>>622
ddkbuild.cmd
0624デフォルトの名無しさん2008/06/14(土) 13:49:08
>>623
老師、感謝
今からGoogle先生を訪問します
0625デフォルトの名無しさん2008/06/14(土) 19:19:24
>>623
ありがとうございます。
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
>>623
定石をありがとう。感謝します。

CreateFile関数はどうやらプリンタドライバ中では使えない様
なんですが、、ZwCreateFileという関数があるのですが
それならプリンタドライバ中でも使えるのか今確認していますが
何か情報をお持ちの方は情報をお願いします。

最悪、スプーラに書き込みを行えばWinDbgなしでもDebug作業が
できることはわかりました。
0628デフォルトの名無しさん2008/06/15(日) 10:35:18
>>627
ちょっと聞きたいんだが、仕事でプリンタドライバ作ってるの?

お遊びなら、色々試行錯誤して楽しむのもいいけど、お仕事ならきちんと基礎を身に付けてから
でないと、ユーザーに大きな迷惑をかけることになるよ。
周りにドライバを作り慣れた先輩とかいないの?
0629デフォルトの名無しさん2008/06/15(日) 10:54:56
>>627ではないが、ドライバのことを知ってる先輩はいない職場で、
勉強しつつがんばってくれ、みたいな感じで始まった。
仕事はいろいろともらっている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:34
WINUSBを使うDLLをX86とx64向けに両刀で書いてるんですが、
86用には普通にビルドできるんですが、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:55
WINSUB 誤
WINUSB 正
0635デフォルトの名無しさん2008/06/19(木) 09:47:14
>>633
どこを見てるんだ?
普通に DDK の lib 探したら winusb.lib が見つかるわけだが。
winusb.dll 使ううえにダイナミックリンクじゃないんだから lib ファイルがあるに決まってるだろ。
0636デフォルトの名無しさん2008/06/19(木) 15:04:48
>>635
そんなに怒らないで。
>>633の彼はドライバ開発したのとがないんだ。
だから、winusb.libも普通にVC2008やPSDKにあると思っている。
さすがに、setupapi.libを与えたには、ぽかーーーんとした
0637デフォルトの名無しさん2008/06/19(木) 22:12:08
あの、先生方、WDKににmfc42ってlibやincがあるんですけど
これ、ひょっとしてWDKでMFC4.2アプリ開発できるってことですか?

あと、先生方はWDKをVSに統合して、IDE上でドライバプログラム書いているんですか?
0638デフォルトの名無しさん2008/06/19(木) 22:51:17
それはコントロールパネルアプレットとかのドライバ付属の小物を開発するために
付いているのだとMSの中の人がどこかのMLで言ってた
0639デフォルトの名無しさん2008/06/19(木) 22:56:49
俺の場合はVSと統合なんて無駄だな。使い慣れたgvimがあればいい。
0640デフォルトの名無しさん2008/06/19(木) 23:06:08
>>633
それってドライバの話じゃなくてさ
ターゲット環境が変わったら、ライブラリも変えろって話でしょ?
そこらへんはC言語の基礎的な話なので、
どっかでちゃんと理解しといたほうがいいんじゃない?

>>637
できると思うよ。ただ、本来の機能全部入っているかはわからない。
Ioctlなどでドライバを操作したいユーザーモードアプリケーションを作ろうとした場合のためにあると思われる。
カーネルモードのヘッダと一緒にすると不具合が出る部分を出ないようにしたりしてるんじゃないかね
と、嘘かもしれないことを言ってみる。

開発環境は人による。秀丸にこだわってる人も居るだろうし、人それぞれ。
0641デフォルトの名無しさん2008/06/20(金) 00:20:08
>>638-640 先生方すばやいレスありがとうございます。

自分が使っているVC2005expressでMFC使えないから、ひょっとしたら
WDKと連動してやるとMFCアプリのコンパイル(他人のソースを)できるようになるのかなと
思ったんです。小物のcplを作る程度の物しかそろってないですかね。あと、PrefastもVC2005express
で使えたら良いなと思ったり...

自分みたいなへたれですと、インテリセンスないとどうしようもない
何のtypedefなのか、構造体のメンバなんかがさっぱりなんでIDE必須なんですよね
で、WDKインストールしてもVSに統合されないから、他の人は自分で統合してるのかな
と思ったしだいです。ドライバー職人ぐらいになると、インテリセンス鬱陶しいし、
使い慣れたエディタの方がVSでやるより良いとなるんですか!
0642デフォルトの名無しさん2008/06/20(金) 00:43:40
>>641
適当なプロジェクトを作って、ソースファイルを登録して
ヘッダーへのパスを通せば、インテリセンスも使える
エディタとしてならIDE使えるよ。

buildは、それぞれのコマンドプロンプトからだけど。
0643デフォルトの名無しさん2008/06/20(金) 02:04:37
適切なコンパイル・リンクオプション渡してやればIDEでもできるだろ
0644デフォルトの名無しさん2008/06/20(金) 05:53:31
エディタとビルドにしか使わないのにIDEと呼ぶのは抵抗がある。
0645デフォルトの名無しさん2008/06/20(金) 21:28:28
おまんことおっぱいしか使わないのにデリヘルと呼ぶのは抵抗がある。
0646デフォルトの名無しさん2008/06/20(金) 23:57:36
>>620
解決したのかな?たぶんKSMUSICFORMAT::TimeDeltaMsだよ。
0647デフォルトの名無しさん2008/06/22(日) 23:44:13
staticdv使ってる?出てからずいぶん経つけど日本語の記事って無いもんだね
0648デフォルトの名無しさん2008/06/23(月) 22:04:46
GDIINFO構造体で「余白」を制御できると聞いたのですが
どのメンバで制御すればよいのでしょうか?。
それらしきものが見当たらないのですが・・。ちなみにプリンタドライバの
開発になります。
0649デフォルトの名無しさん2008/06/23(月) 22:29:36
プリンタドライバはやってんのか
0650デフォルトの名無しさん2008/06/24(火) 21:11:28
最近某企業が求人広告出しまくってたから
その影響では?

0651デフォルトの名無しさん2008/06/29(日) 18:34:56
自分のくっついているデバイスのデバイス名とかデバイスIDなどを知る方法ってあるのでしょうか?
0652デフォルトの名無しさん2008/06/30(月) 09:45:27
Descriptor解析しろ。
0653デフォルトの名無しさん2008/06/30(月) 12:00:23
>>651
「自分のくっついているデバイス」? 自分をEnumerateしたバスドライバのこと?
「デバイスID」? デバイスインスタンスIDのこと?

質問の意味不明。エスパー登場求む!
0654デフォルトの名無しさん2008/06/30(月) 13:37:39
Windowsなら、デバイスマネージャから見れるんじゃね?
0655デフォルトの名無しさん2008/06/30(月) 18:29:31
ttp://support.microsoft.com/kb/126286/ja/
06566512008/06/30(月) 21:48:59
わかりづらくてすみません。
例えば、Microsoft ACPI-COmpliant Embedded Controllerをデバイスマネージャのプロパティで見ると、
(少なくとも私の環境はですが)「一致するデバイスID」は*pnp0c09となっています。
これをドライバ内部から調べる方法がないかなと探しています。

もちろんコード中に文字列として"*pnp0c09"を持っていれば良い話なのですが、
そうではなくて、APIなどで、自分がフィルタドライバとしてくっついているデバイスの
「一致するデバイスID」やその他、プロパティの詳細タブで見れるような情報を
取得するような方法をご存知ないでしょうか?
0657デフォルトの名無しさん2008/06/30(月) 22:03:20
>>656
IoGetDeviceProperty()や
IoOpenDeviceRegistryKey()からレジストリ読み取りで揃うんじゃね?
0658デフォルトの名無しさん2008/07/05(土) 00:14:18
ユーザーモードのプリンタドライバをデバッグしようとしていますが
WinDbgは使えないのでしょうか?。
そもそもWinDbgはカーネルモードの(プリンタ)ドライバですよね?。
ご意見お願いします。
0659デフォルトの名無しさん2008/07/05(土) 08:55:53
>>650
某企業ってどこ?
そこのプリンタは買わな・・・・(以下自粛)
0660デフォルトの名無しさん2008/07/05(土) 10:03:32
キャノンだよ こないだあんあんからスカウトメールきた無視したけど
0661デフォルトの名無しさん2008/07/05(土) 13:33:54
観音なら...当然超優秀な正社員がたくさんいるだろうから、ここで聞くよりそいつらにでも聞けば良いのにな。
0662デフォルトの名無しさん2008/07/07(月) 09:46:04
なんだかんだいってもソフト部分は外注多いよ。
0663デフォルトの名無しさん2008/07/09(水) 12:20:12
キャノソくらいだとハードも外注だと思ってた
0664デフォルトの名無しさん2008/07/16(水) 12:39:52
WinDriverって使い勝手いいですか?
0665デフォルトの名無しさん2008/07/28(月) 00:39:17
オマンコ臭いスイーツは開発すんなよ
■ このスレッドは過去ログ倉庫に格納されています