テクニカル ドキュメント #43



Doc ID: 43
製品: WinDriver
Version: 9.21 およびそれ以降

64-bit アーキテクチャ用に 32-bit アプリケーションを開発

WinDriver は、以下の 64-bit アーキテクチャのドライバ開発をサポートしています:

  • Windows Intel EM64T または AMD64 (x64)
  • Linux Intel EM64T または AMD64 (x86_64)

デフォルトでは、WinDriver 64-bit バージョンを使用して作成したアプリケーションは、64-bit アプリケーションです。64-bit アプリケーションは、32-bit アプリケーションよりも効率的に動作します。ただし、WinDriver 64-bit バージョンを使用して、対応する 64-bit プラットフォームで動作する 32-bit アプリケーションを作成することもできます。 このドキュメントでは、32-bit アプリケーションを作成するために、以下の二つの方法を紹介します:

NOTE

以下のドキュメントでは、
  • <WD64> は、対象の OS に対して 64-bit WinDriver をインストールしたディレクトリのパスを表します (例、C:\WinDriver64)。<WD32> は、同じ OS で 32-bit WinDriver をインストールしたディレクトリのパスを表します (例、C:\WinDriver)。

  • <ver> は、インストールする WinDriver のバージョンを表します — 例、バージョン 11.00 の場合、1100

64-bit プラットフォーム用に 32-bit WinDriver アプリケーションを開発

64-bit プラットフォーム用に 32-bit WinDriver アプリケーションを作成するには、64-bit WinDriver を使用して、以下を実行します:

  1. WinDriver のユーザー マニュアルに従って (例、DriverWizard を使用してコードを生成するか、WinDriver のサンプルを使用して)、WinDriver のアプリケーションを作成します。

  2. 以下の設定を使用して、ターゲットの OS 用に最適な 32-bit コンパイラーでアプリケーションをビルドします:

    • KERNEL_64BIT プロセッサの定義を追加します。
      NOTE
      makefiles に、-D flag: -DKERNEL_64BIT を使用して定義を追加します。

      64-bit WinDriver に含まれるサンプルおよび DriverWizard で生成された Linux と Windows GCC makefiles、Windows MS Visual Studio のプロジェクトには、既にこの定義が追加されています。

    • 64-bit プラットフォーム — Windows では <WD64>\lib\amd64\x86\wdapi<ver>.lib (例、C:\WinDriver64\lib\amd64\x86\wdapi1100.lib)、Linux では <WD64>/lib/libwdapi<ver>_32.so (例、/c/WinDriver64/lib/libwdapi1100_32.so) で実行する 32-bit アプリケーション用に WinDriver API library/shared object でアプリケーションをリンクします。

      64-bit WinDriver に含まれる 32-bit アプリケーション用のサンプルおよび DriverWizard で生成されたプロジェクトと makefile には、正しいライブラリへリンクされています:
      Windows では、MS Visual Studio プロジェクト ファイルと Windows GCC makefiles は、<WD64>\lib\amd64\x86\wdapi1100.lib とリンクされています。
      Linux では、開発マシンに 64-bit WinDriver のインストールで /usr/lib ディレクトリに libwdapi<ver>.so のシンボリック リンク (<WD64>/lib/libwdapi<ver>_32.so へのリンク)、/usr/lib64 ディレクトリに <WD64>/lib/libwdapi<ver>_32.so (shared object の 64-bit バージョン) を作成します。
      WinDriver のサンプルおよび DriverWizard で生成された makefiles は、これらのシンボリック リンクによって最適な shared object でリンクします (32-bit または 64-bit コンパイラーを使用してコンパイルしたコードに依存します)。

NOTE
  • ターゲットの 64-bit プラットフォームへ対象のアプリケーションを配布する場合、64-bit プラットフォームで実行する 32-bit アプリケーション用に WinDriver API DLL/shared object を一緒に提供する必要があります — Windows では、 <WD64>\redist\wdapi<ver>_32.dll (例、 C:\WinDriver64\redist\wdapi1100_32.dll) / Linux では、<WD64>/lib/libwdapi<ver>_32.so (例、 /c/WinDriver64/lib/libwdapi1100_32.so)。
    このファイルを配布する前に、_32 の部分を削除して、対象の配布パッケージのファイルのコピーの名前を変更します。ターゲットでのインストールでは、関連する OS へ名前を変更した DLL/shared object をコピーする必要があります — Windows では、%windir%\sysWOW64 または Linux では、/usr/lib on Linux。 その他のすべての配布ファイルは、WinDriver のユーザー マニュアルの説明のとおり、他の 64-bit WinDriver のドライバの配布方法と同じです。
  • この方法を使用して作成したアプリケーションは、32-bit プラットフォームでは動作しません。32-bit プラットフォーム用の WinDriver アプリケーションは、KERNEL_64BIT の定義なしでコンパイルする必要があります; 32-bit WinDriver の WinDriver API library/shared object の標準 32-bit バージョンでリンクする必要があります (Windows では、<WD32>\lib\x86\wdapi<ver>.lib / Linux では、<WD32>/lib/libwdapi<ver>.so); かつ標準 32-bit WinDriver API DLL/shared object と一緒に配布する必要があります (Windows では、<WD32>\redist\wdapi<ver>.dll / Linux では、<WD32>/lib/libwdapi<ver>.so)。その他の必要な 32-bit の配布ファイルに関しては、WinDriver のユーザー マニュアルを参照してください。

32-bit および 64-bit の両方のプラットフォーム用に 32-bit アプリケーションを開発

64-bit と 32-bit の両方の WinDriver をお持ちの場合、32-bit および 64-bit の両方のプラットフォームで実行できるシングル 32-bit アプリケーションを作成することもできます。以下の方法で実現できます:

  1. WinDriver API への呼び出しをまとめて処理する DLL (Windows の場合) または shared object (Linux の場合) を作成します。
    DriverWizard で生成したコードまたは WinDriver のサンプルの一つを使用して既に WinDriver のアプリケーションを作成している場合、そのアプリケーションを DLL/shared obejct に変換します。
  2. 対象の DLL/shared object の二つのバージョンをコンパイルします:
    • 32-bit プラットフォーム用のバージョン: このバージョンは、 32-bit WinDriver の標準 32-bit WinDriver API library/shared object を使用して、KERNEL_64BIT の定義なしで、32-bit コンパイラを使用してコンパイルする必要があります — Windows では、<WD32>\lib\x86\wdapi<ver>.lib (例、 C:\WinDriver\lib\x86\wdapi1100.lib) / Linux では、<WD32>/lib/libwdapi<ver>.so (例、 /c/WinDriver/lib/libwdapi1100.so)。
    • 64-bit プラットフォームのバージョン: このバージョンは、 64-bit WinDriver の標準 64-bit WinDriver API library/shared object を使用して、64-bit コンパイラーでコンパイルする必要があります。— Windows では、<WD64>\lib\amd64\wdapi<ver>.lib (例、 C:\WinDriver64\lib\x86\wdapi1100.lib) / Linux では、<WD64>/lib/libwdapi<ver>.so (例、 /c/WinDriver64/lib/libwdapi1100.so)。
  3. 作成した DLL/shared object を使用して WinDriver と通信を行う 32-bit アプリケーションを記述します; DLL/shared object の関連するバージョンをロードするようにアプリケーションを実装する必要があります — 32-bit か 64-bit — 起動するプラットフォームに依存します。
    Note: KERNEL_64BIT の定義なしで、最適な 32-bit コンパイラーを使用してアプリケーションをコンパイルする必要があります。
NOTE

この方法を使用して開発したドライバを配布する際には、各ターゲットのプラットフォーム用の関連するファイルを配布してください:
  • 32-bit プラットフォームの場合、作成した WinDriver-wrapper DLL/shared object の 32-bit バージョン、および 32-bit WinDriver DLL/shared object を含む 32-bit WinDriver の標準 32-bit ファイルと一緒にアプリケーションを配布してください (Windows では、<WD32>\redist\wdapi<ver>.dll / Linux では、<WD32>/lib/libwdapi<ver>.so)。
  • 64-bit プラットフォームの場合、作成した WinDriver-wrapper DLL/shared object の 64-bit バージョン、および 64-bit WinDriver DLL/shared object を含む 64-bit WinDriver の標準 64-bit ファイルと一緒にアプリケーションを配布してください (Windows では、<WD64>\redist\wdapi<ver>.dll / Linux では、<WD64>/lib/libwdapi<ver>.so)。
配布手順の詳細は、WinDriver のユーザー マニュアルを参照してください。