XLsoft Corporation/エクセルソフト株式会社
英語 日本語 中国語 韓国語

エクセルソフト,XLsoft,WinDriver,ドライバ,デバイスドライバ,ドライバ開発,Windows ドライバ,Linux ドライバ,PCI ドライバ,USB ドライバ,DDK,ISA ドライバ,Device Driver,ドライバ 作成,Jungo

WinDriver ドライバ開発 .
.
.テクニカル ドキュメント #116
.
. サイト マップ
. 関連リンク
.

Doc ID: 116
製品: WinDriver
Version:  6.02 - 7.x

WinDriver の version 5.22 およびそれ以前から version 6.02 - 7.x にアップグレードする方法

WinDriver のバージョン 6.02 およびそれ以降で開発したドライバは、以前のバージョン (v5.22 およびそれ以前) と競合することなく共存することができます。WinDriver はこれらのバージョンでそれぞれ違うドライバ モジュールを使用します (v6.x およびそれ以降では、windrvr6.sys/o/dll、それ以前のバージョンでは、windrvr.sys/vxd/o/dll を使用します)。WinDriver のバージョン 5.22 およびそれ以前で開発したドライバをバージョン 6.02 およびそれ以降にアップグレードするには、下記の簡単なステップで実現できます。
v7.x から v8.x へのアップグレード方法に関しては、テクニカル ドキュメント #131 を参照してください。 v6.2x から v7.x へのアップグレード方法に関しては、テクニカル ドキュメント #127 を参照してください。 v6.0x から v6.2x またはそれ以降へのアップグレード方法に関しては、テクニカル ドキュメント #84 を参照してください。

このテクニカル ドキュメントには以下の内容が含まれます:


Windows ユーザーのアップグレードの ステップ

  1. アップグレードする新しい WinDriver バージョン 6.x/7.x をインストールします。
    競合を避け、簡単にアップグレードするには、まず初めに既存の WinDriver のインストール ディレクトリの名前を変更します。そして、新しいバージョンのインストール用に WinDriver のインストール ディレクトリ名 (WinDriver) を使用します。

  2. 古いバージョンの WinDriver のプロジェクトを新しい WinDriver のインストール ディレクトリにコピーします (たとえば、WinDriver_522/wizard/my_projects から新しい WinDriver/wizard/my_projects ディレクトリへコピーします)。


  3. ドライバ コードを新しい USB WDU library API (v6.00 以降) または新しい PCI/ISA WDC library API を使用するようにアップグレードすることを推奨いたします。または、以下のガイドラインに従って、下記のプログラム言語用に現在のプロジェクトを新しいプロジェクトに調節してください:

  4. 登録版をご使用の場合、新しいバージョンのライセンス コードを取得して、WD_License() 関数を使用して、新しいライセンスを登録するためにコードを編集してください。新しい WinDriver USB WDU libray (v6.00 以降) または新しい PCI/ISA WDC library (v7.00 以降) を使用してコードをアップグレードする場合、WDU_Init() (USB) または WDC_DriverOpen() (PCI/ISA) 関数を使用して新しいライセンス コードを登録します (WD_License() 関数の使い方はマニュアルを参照してください)。

  5. 新しいバージョンでコードをリビルドしてください。

  6. Windows 98/Me/2000/XP/Server 2003 の場合: 対象のデバイスの新しい INF ファイルをインストールするには:
    ドライバをアップグレードする際に、Plug-and-Play ハードウェア (USB/PCI) のドライバを開発した場合、以前のバージョンの windrvr.sys/wdpnp.sys/wdusb.sys ではなく新しいバージョンの windrvr6.sys と動作するように登録するように対象のハードウェア用の新しい INF ファイルをインストールする必要があります。その新しい INF ファイルは、新しいバージョンの DriverWizard を使用して作成できます。
    [注意: Windows 2000 の場合、Windows が作成した新しい INF ファイルの場所に古い INF ファイルをインストールするのを避けるために、先ず初めに \inf ディレクトリから対象のデバイスの以前の INF ファイルを削除してください。対象のデバイスの vendor および device ID (通常、これらの名前は oem*.inf です。例、oem1.inf) を持つファイルを探して、そのファイルを削除してください。Windows 98 の場合、以前の INF ファイルと新しい INF ファイルを置き換えるために、\inf\other ディレクトリから対象のデバイスの古いバックアップ INF ファイルを削除する必要があります]。

  7. 配布するドライバをアップグレードします。
     トップへ戻る

既存のプロジェクトのコードの調整方法

WinDriver v5.22 またはそれ以前のバージョンで開発した既存のコードを新しいバージョンでサポートするには、以下のステップに従ってください:


C プログラマの場合

  • プロジェクトの #include パスが新しいバージョンのヘッダ ファイルへポイントされていることを確認して下さい。

  • Windows では、プロジェクトに WinDriver\lib\wd_utils.lib library (MSDEV/Visual C++ プロジェクトの場合) または WinDriver\lib\wd_utils_borland.lib library (Borland C++ Builder プロジェクトの場合、v7.00 以降では、wd_utils_borland.lib を使用できます) にリンクを作成することによって、WinDriver\redist\wd_utils.dll を使用できます。
    Linux では、WinDriver v7.00 以降、プロジェクトに共有オブジェクト WinDriver/lib/libwd_utils.so へのリンクを作成できます (makefile を修正し、次のように link flags へ wd_utils を追加します: LFLAGS += -1 wd_util )。
    プロジェクトの関連するライブラリへのリンク方法に関しては、新しいバージョンのサンプル プログラムまたは DriverWizard で生成された MSDEV/Visual C++ および Borland C++ Builder プロジェクトまたは Linux の makefile を参考にして下さい。
    wd_utils.dll / libwd_utils.so を使用する場合、プロジェクトに WinDriver/src ファイルを include する必要はありません。そのため、次のステップは飛ばしてください。

  • 既存の C のプロジェクトに以下のファイルを追加してください (wd_utils.dll / libwd_utils.so を使用しない場合):
    • \WinDriver\src\utils.c
    • \WinDriver\src\status_strings.c
    • \WinDriver\src\windrvr_int_thread.c
    • \WinDriver\src\windrvr_events.c (USB の場合または Plug-and-Play またはパワー マネージメント イベント処理を含むコードがある場合)

    LinuxSolaris ユーザーは、下記で説明するように、2 箇所でプロジェクトの makefile を編集して、これらのファイルを追加する必要があります (WinDriver のサンプル コードおよび DriverWizard で生成されたコードのプロジェクトの makefile は、通常、プロジェクト ディレクトリの linux/ または solaris/ サブ ディレクトリ以下にあります)。

    1. ファイル パスを SRCS ソース ファイルへ追加する必要があります。
    2. 新しいソース ファイルの場合、以下の 2 行を makefile に追加する必要があります:

      <file_name>.o: ~/WinDriver/src/<file_name>.c
           $(CC) -c $(CFLAGS) -o $@ $<

      たとえば、windrvr_int_thread.c ファイルの場合、以下の行を追加します:

      ~/WinDriver/src/windrvr_int_thread.c 
           $(CC) -c $(CFLAGS) -o $@ $<

  • PCI/ISA ドライバの場合、v7.00 以降、WinDriver には新しい WDC library が追加されました。 このライブラリは、標準の WinDriver PCI/ISA API へ便利なラッパー API を提供します。(このライブラリは wd_utils.dll / libwd_utils.so の一部で、WinDriver/src ディレクトリ以下にソース ファイルがあります)。

    新しい WDC API (現在、C でのみ提供されています) に関しては、WinDriver のユーザー マニュアルを参照してください。v7.x 以降の DriverWizard で生成されたプロジェクトは低レベルな標準 WinDriver API を使用せずに、WDC API を使用します。v7.x の pci_diagpcmcia_diagpci_dump および plx のサンプルでも新しい API を使用します。

    WDC は主に標準 WinDriver API へラッパーを提供するので、新しい WDC library を使用するように 古いコードを編集する必要はありません。コードを新しい API を使用するようにアップグレードする場合には、新しい API を使用するようにコードをアップグレードする場合には、新しいサンプルおよび生成されたコードを検証し、古いコードと、新しいコードを比較し、新しい WDC API の使い方を理解するのが最良な方法です。

    注意: WDC APIs を使用するには、プロジェクト/makefile に関連する WinDriver/src/wdc_xxx.c ソース ファイルを含めるか、または、MSDEV (Visual C++) プロジェクトの場合には、プロジェクトに WinDriver\lib\wd_utils.lib ライブラリへリンクを追加するか、Borland C++ Builder プロジェクトの場合には、WinDriver\lib\wd_utils_borland.lib ライブラリへリンクを追加する必要があるので、注意してください (DriverWizard で生成されたプロジェクトおよびサンプル プロジェクトには含まれます)。

  • USB の場合、ドライバ プロジェクトがWinDriver/samples/shared/usb_diag_lib.c ファイルで実装してる関数を呼ぶ場合 (サンプルおよび DriverWizard で生成された WinDriver USB 診断ドライバ プロジェクトをそのまま使用する場合)、以下の追加ステップを実行してください:

    • 既存のプロジェクトで使用してる WinDriver/samples/shared/usb_diag_lib.c ファイルを新しい WinDriver/samples/shared/usb_diag_lib_v52.c ファイルと置き換えてください。

    • プロジェクトで、usb_diag_lib.h を参照してる個所を usb_diag_lib_v52.h (新しい WinDriver を配布した \WinDriver\samples\shared ディレクトリにあります) を参照するように置き換えてください。
       トップへ戻る

Delphi プログラマの場合 (Windows のみ):

  • プロジェクト ファイル (*.dpr) が、新しいバージョンのモジュール (*.pas) をポイントしていることを確認してください。

  • プロジェクト ファイルの "uses" セクションに次のモジュールを追加してください:
    <WinDriver directory path>\delphi\include\status_strings.pas

       トップへ戻る

Visual Basic プログラマの場合 (Windows のみ):

  • プロジェクト ファイル (*.vpb) が、新しいバージョンの windrvr.cls (v6.21 の場合) または windrvr.bas (v6.22 以降の場合) をポイントしていることを確認してください (WinDriver\vb\include ディレクトリ以下にあります)。

  • プロジェクト ファイル (*.vbp) に新しいバージョンの WinDriver\vb\include ディレクトリの wd_utils.cls (v6.21 の場合) または wd_utils.bas (v6.22 以降) を追加してください。

  • 新しいバージョンの WinDriver\redist ディレクトリの wd_utils.dll ファイルが対象のPC の %windir%\system32 ディレクトリにコピーされていることを確認してください (開発環境の PC では、WinDriver をインストール時に自動的にインストールされています)。
       トップへ戻る

新しい API を使用してプロジェクトをアップグレードする方法

新しい USB API へのアップグレードの推奨 (WDU library) - v6.00 以降

WinDriver のバージョン 6.00 から、新しい WDU library で実装される USB API が新しく改良されました。(このライブライは wd_utils.dll / libwd_utils.so の一部です。WinDriver/src ディレクトリ以下にソース ファイルがあります。)

新しいバージョンの機能および改良または改善された機能をフルに活用するために、コードで新しい USB API を使用することを推奨します。新しい WDU API を使用するように古い WinDriver USB ドライバ コードをアップグレードする一般的なガイドラインは、各バージョンの WinDriver のユーザー マニュアルを参照してください。更に、v7.00 またはそれ以降にアップグレードする場合には、プロジェクトに WinDriver/samples/shared/usb_diag_lib.c を include し、プロジェクトを編集してこのファイルの新しいバージョンにリンクを作成し、プロジェク/makefile に新しい WinDriver/samples/diag_lib.c ファイルを追加します。

新しい API へ簡単にアップグレードするには、新しい v6.x/7.x の DriverWizard を使用して対象のデバイスの雛型となるドライバ コードを生成するか、または新しいバージョンの WinDriver\samples\usb_diag サンプルを参照してください。(Delphi および Visual Basic のサンプルは WinDriver の "delphi" および "vb" ディレクトリの "sample" サブディレクトリにあります)。

上記の手順に従うことによって、古い API が新しいバージョンにサポートされるので、これが唯一の推奨方法です。ただし、WinDriver のバージョン 6.00 以降の開発環境では、古い USB API はありませんので、注意してください。

トップへ戻る

PCI/ISA API のアップグレード (WDC library) - v7.00+

WinDriver v7.00以降、標準的な WinDriver PCI/ISA API へ便利なラッパー API を提供する新しい WDC library があります。(このライブラリは、wd_utils.dll / libwd_utils.so の一部で、WinDriver/src ディレクトリ以下にソース ファイルがあります)。

新しい WDC APIs (現在、C のみで提供) の詳細に関しては、WinDriver のユーザー マニュアルを参照してください。DriverWizard で生成された v7.x のプロジェクトでは、低レベルな標準的な WinDriver API ではなく、WDC API を使用します。新しい API はまた、v7.x pci_diag, pcmcia_diag, pci_dumpplx サンプル プログラムでも使用してます。

WDC は主に標準的な WinDriver APIs へラッパーを提供するので、新しい WDC ライブラリを使用するために古いコードを編集する必要はありません。新しい APIs を使用するようにコードをアップグレードする場合には、新しい API を使用するようにコードをアップグレードする場合には、新しいサンプルおよび生成されたコードを検証し、古いコードと、新しいコードを比較し、新しい WDC API の使い方を理解するのが最良な方法です。

トップへ戻る

ドライバの配布のアップグレード

新しいバージョンの配布手順の詳細は、新しいバージョンの WinDriver のユーザー マニュアルの「ドライバの配布」の章を参照してください。Windows の配布手順は、テクニカル ドキュメント #117 も参照してください。

ドライバの配布手順に関しては、以下の変更点に注意してください:
  • WinDriver のカーネル モジュールの名前が "windrvr" から "windrvr6" へ変更されました。

  • Windows の場合、windrvr6.sys 以外の *.sys ファイルは必要ありません (以前のバージョンでは、プラグアンドプレイ Windows システム で wdpnp.sys または wdusb.sys を使用していました)。

  • Windows 98/Me/2000/XP/Server 2003 の場合、WinDriver のバージョン 5.2X で使用していた wd_virtual.inf ファイルが windrvr6.inf ファイルに置き換わりました。

  • Windows の場合、wdreg/wdreg_gui インストール ユーティリティが改良され、installation/uninstallation コマンドが変更されました。Windows 98/Me の場合、wdreg16 ユーティリティを使用します。インストール ユーティリティの使用方法は、WinDriver のユーザー マニュアルを参照してください。

  • Windows の場合、wd_utils.dll を使用するようにプロジェクトをアップグレードした場合、この DLL (WinDriver\redist ディレクトリ以下) を対象の Windows PC の %windir%\system32 ディレクトリに配布する必要があります。

  • Linux の場合、libwd_utils.so を使用するようにプロジェクトをアップグレードした場合、この共有オブジェクト (WinDriver/lib/ ディレクトリ以下) を対象の Linux プラットフォームの /usr/lib ディレクトリに配布する必要があります。

トップへ戻る

.
.
Top へ