WinUSBを利用したUSBデバイスドライバ開発の方法

お世話になります。初めまして、ShuUと申します。

これまで、VB6,VC++6,VB.NETでアプリケーション開発をして来ました。
この度、社内開発したUSB機器に対するデバイスドライバを開発するという
仕事が降って来たため、困っています。

まず、ターゲットデイバスの開発者からは、下記サイトで紹介されている
"uusbd.sys"や"uusbd.sys"を使用して、動作確認を行ったとのことで、
これと同等の機能が欲しいとのことでした。
http://www.otto.to/~kasiwano/

このうち、実際に使用しているのは、"Uusbd_Open_mask","Uusbd_Close",
"Uusbd_OpenPipe","Uusbd_Check"の4つだそうで、モジュールの名称や
パラメータなどは、変更しても構わないとのことでした。

VC++でDLLを作成することはあっても、デバイスドライバ(sys)は経験が
無いため、いろいろ探した結果、下記サイトで"winusb.sys"や"winusb.dll"
が存在することを見つけ、こちらのサイトまで辿り着きました。
http://hpcgi1.nifty.com/~kokubu/index.cgi?WinUSB

とりあえず、WDK(6001.18001)を入手してみましたが、インストールした
フォルダの中には"winusb.sys"や"winusb.dll"は無く、作り方も分からない
というのが現状です。

"winusb.sys"や"winusb.dll"の作り方について、開発方法や参考となる
サイトなどがあれば、教えて頂きたく存じます。

尚、ターゲットOSは、WindowsXPとWindowsVistaです。

以上、宜しくお願いします。

こんにちは。 ドライ

こんにちは。

ドライバ関連のサイトで、参考になるサイトというのはあまりありません。
MSDNまたはWDKのヘルプを隅々まで読破するのが一番手っ取り早いです。

参考になるのはこのWord文書。
http://www.microsoft.com/whdc/connect/usb/winusb_howto.mspx
あとこちらのMSDN。
http://msdn.microsoft.com/en-us/library/aa476426.aspx

いまちょっと調べたらこんなページがありました。
http://winusb.at.webry.info/200709/article_3.html

がんばってください。

>

> ドライ氏

ご返信有難う御座います。

ご提示のWord文章とウェブログから、INFファイルは作成できそうです。
(INFファイル作成はWord文章、セットアップ作成はウェブログを参考に)

MSDNについては、WinUSB.DLLのAPIリファレンスが
http://msdn.microsoft.com/en-us/library/aa476437.aspx
にありましたので、これからuusbd.dllとの対応を見てみます。

問題の解決、または進展がありましたら、
再び、こちらに投稿させて頂きます。

がんばりますよ。:-)

新たな疑問が生じま

新たな疑問が生じましたので、投稿します。

まず、WinUSBを使用する構成は、以下のようになるものと思います。
[ユーザーアプリケーション](exe)
 ↑[ユーザーリンクライブラリ](WinUSB API群を利用するdll)
  ↑[WinUSB.DLL](Microsoft社提供WinUSB API群)
   ↑[WinUSB.SYS](Microsoft社提供WinUSB デバイスドライバ)
    ↑[ユーザーデバイス](ハードウェア)

ここで、[WinUSB.DLL]と[WinUSB.SYS]は、[ユーザーアプリケーション]を
インストールするターゲットOSに同梱されているものと考えておりました。

MSDN サブスクリプションを利用して、Windows XPとVistaをダウンロードして、
手持ちのパソコンにセットアップしたところ、いずれのOSにも、[WinUSB.DLL]と
[WinUSB.SYS]が入っていたためです。(WindowsUpdate前に確認)

しかしながら、2005年初頭に購入したらしいOEMパソコンのWindows XP SP2には、
[WinUSB.DLL]と[WinUSB.SYS]が入っておりませんでした。

っということは、世の中には、[WinUSB.DLL]と[WinUSB.SYS]が入っていない
Windows XPが存在するということになります。

「winusb_howto.mspx」を見ると、Windows XP SP2か、これ以降では、
WinUSBがサポートされるという記述があるのですが、[WinUSB.DLL]と[WinUSB.SYS]が
入っていないWindows XP SP2に対しては、何らかの方法で[WinUSB.DLL]と
[WinUSB.SYS]をインストールする必要が生じると思います。

この場合の対応について、[WinUSB.DLL]と[WinUSB.SYS]の再配布可能パッケージ
などが存在するのでしょうか?

(ご提示を頂いた資料のどこかに書いてあるのかも知れませんが……)

以上、宜しくお願いします。

はじめまして、ShuUさ

はじめまして、ShuUさん。NORIといいます。

私は最近、winusb.sysについて、ちょっといじってみた者です。

私もまだよくわかっていないので、偉そうなことは言えませんが、
試した結果からわかること(本当にそれが正しい認識かどうか
わかりませんが)をコメントしたいと思います。

winusb.sysとwinusb.dllですが、MSDN(DVD)を使用して
インストールしたXPには、これらのファイルは入っていないようでした。
(Vista(日本語Business使用)には入っていました。)

よくわからなかったので、私はwinusb.sysについては、最初はVistaから
コピーして使おうとしていました。

winusb.dllについては、INFで指定するDLL、WdfCoInstaller01005.dll
(最新WDKはWdfCoInstaller01007.dll)とWinUSBCoInstaller.dllですが、
これらが何か働いてインストールされたような感じです。

また、winusb.sysについても、結局これらのDLLによりインストールされたような
感じを受けます。

つまり、両ファイルとも、INFで指定するDLLがインストールされるときに
いっしょにインストールされているような感じを受けました。

インストールできた、のか、できてしまった、のかわかりませんが、
これでもwinusb.dll、winusb.sysは使えているようです。

ちょっといいかげんで参考になるかわかりませんが・・・。
(もし混乱させてしまったとしたら、申し訳ありません。)

> NORI氏

ご返信有難う御座います。

NORI氏のお話ですと、[WinUSB.DLL]と[WinUSB.SYS]については、
デバイスドライバのインストール(登録)時に作られるらしいとのことで、一先ず安心しました。

また、MSDN(DVD)版のWindows XPには入っていないらしいとの件については、
ダウンロード可能なWindows XP Professionalのうち、
・ja_windows_xp_professional_with_service_pack_3_x86_dvd_x14-80464.iso
・jp_winxp_pro_with_sp2.iso
・JP_WinXP_PRO_x86_build2600_ISO.IMG
の3つを試してみましたが、すべて[WinUSB.DLL]と[WinUSB.SYS]が
\SYSTEM32 配下に存在しました。

ダウンロード版では、何らかの対応を施しているのかも知れません。

本件については、肝心のUserDLLが出来たら、引き続き、検証してみたいと思います。
ご情報、有難う御座いました。

P.S.
次は「How to Use the WinUSB API」のサンプルからDLLを作って、
uusbdを使用している動作確認ソフトから動かせれば……。
(何日掛かるだろう?)

こんにちは、ShuUさん

こんにちは、ShuUさん。NORIです。

逆に情報をいただき、恐縮です。

ダウンロード版では、WinUSB関係入っているのですね!
同じOSのはずなのにちょっと納得いきませんが・・・。

お仕事がんばってください。

遅い返信ですが... WinU

遅い返信ですが...

WinUSB.DLLとWinUSB.SYS等のWinUSB関連ファイルは、WinUSBCoInstaller.dllに含まれ、ドライバのインストール時に展開されます。
以前調べた時に確認しましたし、WinUSB関連のホワイトペーパーにも載っていました。
正しいINFファイルを書けば、Windows2000にもインストール可能です。

古いDDK(6000)では、Release NoteにXPへのインストール方法が解説してありましたね。