Jungo WinDriver: FAQ

FAQ



Tip: このページで探している回答が見つからない場合、テクニカル ドキュメントも参照してください。

.
一般的な問題

. 価格およびライセンスの問題

. テクニカル情報 - WinDriver

. Kernel PlugIn の問題

. Windows の問題

. WindowsCE の問題

. Linux の問題

. Cardbus の問題

. Parallel/Serial の問題

. 割り込みの問題

. DMA の問題

 質問

一般的な問題

*   参考: テクニカル ドキュメント - 一般的な問題

価格とライセンスの問題

*  参考: テクニカル ドキュメント - ライセンスと配布の問題

テクニカル情報 - WinDriver

*  参考: テクニカル ドキュメント - WinDriver

Kernel PlugIn の問題

*  参考: テクニカル ドキュメント - KernelPlugIn

Windows の問題

*  参考: テクニカル ドキュメント - Windows

Windows CE の問題

*  参考: テクニカル ドキュメント - Windows CE

Linux の問題

*  参考: テクニカル ドキュメント - Linux

CardBus の問題

*  参考: テクニカル ドキュメント - CardBus

Parallel/Serial の問題

*  参考: テクニカル ドキュメント - Serial と Parallel ポート

Interrupt の問題

*  参考: テクニカル ドキュメント - 割り込み

DMA の問題

*  参考: テクニカル ドキュメント - DMA

 

 一般的な問題

WinDriver を使用すると、 カーネル モードでプログラムをする必要はありません。 よって、私は実際にはドライバを作成していないのでしょうか?
デバイス ドライバとは、ハードウェアをコントロールするソフトウェア モジュールです。現在のオペレーティング システムには、このソフトウェア モジュールが多くの場合カーネル モード (ring 0) に存在します。 ただし、WinDriver を使用すると、WinDriver の低レベルなカーネル ドライバ (windrvr6.sys/vxd/o または windrvr.sys/vxd/o - OS および WinDriver のバージョンによって異なります) を使用して、このコードをユーザー モードで記述できます。 したがって、ドライバ開発の知識を必要としません [WinDriver アーキテクチャを参照してください]。
WinDriver にはまた、Kernel PlugIn 機能があり、ユーザー モードで開発したコードをカーネル モードに移行することができます (PCI/ISA の場合)。
作成したドライバがユーザー モードまたはカーネル モードのいずれかとしても、 そのコードはハードウェアをコントロールするので、それはドライバと言うことができます。

WinDriver を購入すると、自分自身でデバイス ドライバを開発する必要はありませんか?
WinDriver を使用すると、次の利点があります:

  • コスト削減 - 開発工数を 90% 削減

  • 信頼性 - WinDriver は、数千項目に及ぶテストを実施しています。また市場で多く使用されているプラットフォームでデバッグを行っております。そのため、開発時間を短縮できるだけでなく、デバッグの時間も削減できます。

  • 市場性 - WinDriver は、現在のマーケットに適応してるので、WinDriver を使用すれば、大幅に開発時間を短縮できます。

  • 柔軟性 - WinDriver は、Windows Server 2003、XP、2000、NT 4.0、Me、98 および Linux、Solaris、Windows CE および VxWorks に対応しています。 - たとえ 1 つのプラットフォームに対してのみドライバが必要でも、WinDriver を使用すれば、他のプラットフォームでも動作させることが可能です [各ハードウェアのタイプ (PCI/ISA/USB) に対する対応する OS に関しては、テクニカル ドキュメント #4 を参照してください]。

  • 安定性 - WinDriver を使用すると、OS のカーネルを意識する必要はありません。 WinDriver のカーネル モジュールが、ハードウェアとのトランザクションをすげて行います。 この方法でカーネル モードのドライバ (Jungo の経験豊富なエンジニアが開発) を実現します。このドライバは、ほとんど全ての利用可能な OS/プラットフォーム/BIOS の組合せでテストを行っているので、高い安定性があります。

デバイス ドライバの開発またはカーネル プログラミングの経験は必要ですか?
いいえ、必要ありません。WinDriver を使用すると、ユーザー モードでデバイス ドライバのコーディングを行います。 WinDriver は、WinDriver API を実装する低レベルなカーネル モード ドライバ (windrvr6.sys/vxd/o または windrvr.sys/vxd/o - OS および WinDriver のバージョンによって異なります) を提供しています (WinDriver アーキテクチャ を参照してください)。従って、お好きな開発環境を使用して、ユーザー モードでドライバをプログラムおよびデバッグ でき、さらにデバイス ドライバの開発時間を大幅に削減できます。

推奨する開発ステップ:

  1. DriverWizard (WinDriver/wizard/wdwizard) を開きます。[Windows の場合、Windows のスタート アップ メニューから DriverWizard を起動します (スタート --> プログラム --> WinDriver --> DriverWizard) またはデスクトップから ショートカット アイコンをクリックします]。

  2. グラフィカルな Wizard を使用して、コードを1行も記述せずに、 ハードウェアを簡単に診断します。PCI/ISA の場合 - ハードウェア リソース (メモリ/IO/レジスタ) を read/write し、 割り込みを listen します。 USB の場合 - パイプへデータを転送し、デバイスのリセットなどをします。

  3. ツールバーから "Generate Code" オプションを選択、または "Next>>" ボタンを押下します。対象とするコンパイラを選択し、DriverWizard が対象のデバイスのドライバ アプリケーションの雛型を生成します。生成されたコードには、WinDriver の API を使用して、検出および定義した対象のハードウェアにアクセスする便利な構造体および関数があります。

    DriverWizard を使用して、C、Delphi (Pascal) または Visual Basic のコードを生成できます [現在、WinDriver USB v6.00 から、Delphi のコード生成は対応していません]。DriverWizard はまた、32 ビット コンパイラ (MSDEV、Borland C++ Builder および Borland Delphi) の makefiles とビルド環境を生成します。

    WinDriver のサンプルを雛型として、ドライバの開発を行えます。特に、拡張サポートを行っている PLX、Altera、Cypress などのハードウェア用のサンプルを各ディレクトリ以下にサンプルを用意しています。拡張サポートを行っている PCI および USB のチップセットに関しては、WinDriver のユーザー マニュアルを参照してください。汎用的なサンプルは、WinDriver/samples (C)、WinDriver/vb/samples (Visual Basic) および WinDriver/delphi/samples (Delphi/Pascal) ディレクトリ以下にあります。

  4. マニュアルやヘルプを使用して、生成された診断コードを編集したり、対象のハードウェアに対して、必要に応じて、機能を追加を行います。

    WinDriver のユーザー マニュアルとヘルプ ファイルは、WinDriver/docs ディレクトリ以下にあります。また、Windows の場合、スタート アップ メニューからアクセスできます。弊社、Web サイトにて日本語マニュアルを用意しています。

  5. 32 ビット コンパイラを使用して、コードをコンパイルおよびビルドします。

終了!

購入前に製品の評価をできますか?
はい。弊社では、WinDriver ツールキットのフル機能を備えた評価版を用意しています。 評価版は弊社 Web サイトよりダウンロード可能です。評価版の制限に関しては、WinDriver のユーザー マニュアルおよびテクニカル ドキュメント #9 を参照してください。

WinDriver は後方互換性がありますか?
v11.50 およびそれ以降のバージョンでは、ライセンス チェックの変更および VID Lock の導入により、バージョン間の互換性がありません。

それ以前のバージョンでは、WinDriver の基本的には後方互換性があるようにデザインされていますが、動作保証はしておりません。

1台の PC に複数のバージョンの WinDriver ベースのドライバ アプリケーションをインストールする場合には、バージョンごとにカーネル ドライバ (.sys ファイル) の名前を変更することを推奨いたします。.sys ファイルの名前変更に関しては、WinDriver のユーザー マニュアルの「15.2 WinDriver のカーネルドライバの名称変更」のセクションを参照してください。

また、バージョンによっては、既知の問題として後方互換に関する問題が発生する場合もあります。リリースノートを参照してください。
例: WinDriver v4.32 でコンパイルしたコードは、v4.32 の windrvr.sys/vxd ファイルと v5.05 のファイルを置き換えれば、リコンパイルせずに動作します (Windows 98/Me/2000/XP での PCI/USB ハードウェアの場合、新しいバージョンの DriverWizard で登録したデバイスの INF ファイルを置き換える必要もあります)。

ただし、v6.00 で、低レベルなカーネル モジュールの名前を "windrvr6" ("windrvr" の代わりに) に変更しました。従って、WinDriver の以前のバージョン (v5.22 およびそれ以前) で開発したコードを使用するには、まず新しいバージョンのヘッダ ファイルでコードをリビルドする必要があります (テクニカル ドキュメント #116 を参照してください)。

新しいドライバ モジュールの機能をフルに活用し、新しいバージョンで提供される不具合の修正と強化点を十分に反映させるには、常にドライバ プロジェクトをアップグレードし、新しいドライバを使用し、新しいドライバを配布することを推奨いたします。

注意: Kernel PlugIn は、後方互換性はありません。
従って、新しいバージョンの WinDriver にアップグレードする際には、新しいバージョンの WinDriver を使用して、Kernel PlugIn ドライバをリビルドする必要があります。

質問/問い合せはできますか?
ご質問/お問合せは、お問合せはフォームより承っております。 お問合せの際には、製品名、バージョン番号、ライセンス コード、OS、氏名、会社名、Email アドレス、電話番号および質問内容を明記の上、送信ボタンを押下してください。

製品に関する問題をお問合せの際には、現象の詳細情報、操作手順、どのステップで現象が発生したか、エラーの内容 (エラー メッセージが表示される場合はその内容) をご報告ください。

以下の情報を明記してください:

  1. 一般情報:
    • ご使用の OS: 例、Windows NT 4.0 SP5、Windows 98 SE、Windows 2000 SP1、Windows CE v2.11、RedHat Linux 7.2 kernel version 2.2.14-20

    • ご使用の WinDriver のバージョン: 例、6.00、5.22、5.05、4.31

    • Debug Monitor ユーティリティ (wddebug_gui、または wddebug) のバージョン情報を含むすべての出力内容: Debug Monitor を起動し、デバッグ レベルを 'Trace' に設定し、問題を再現し、Debug Monitor の出力内容をご提供ください (バージョン情報を含む全てのログ)。

  2. ライセンス の問題: Debug Monitor のログに加え、ソフトウェアを購入時に取得した license registration string が正確に登録されているかご確認ください。また、開発環境のコンピュータの registration code をご確認ください。開発環境のコンピュータの DriverWizard を起動して、[Licensing Information] ウィンドウを開き、File --> Register WinDriver で、license registration string を確認できます。

  3. PCI に関する問題: Debug Monitor のログに加え、pci_dump ユーティリティ プログラム (WinDriver/util ディレクトリ以下にあります) のログ、および対象のカードの vendor ID および device ID をご報告ください。

  4. インストール に関する問題: Debug Monitor のログに加え、実際に実行したインストール手順 (どのファイルをどのディレクトリにコピーし、また wdreg ユーティリティの使用方法および INF ファイルのインストールなど) および各ステップの実行結果、エラーメッセージの内容 (表示される場合) などをご報告ください。Plug-and-Play Windows プラットフォーム (Windows Server 2003/XP/2k/Me/98) の場合、 インストールした PC の <WINDIR>\setupapi.log ファイルをご提供ください。

40日ほど前に Windows PC に WinDriver をインストールしました。再度、製品を評価したいのですが、評価期間終了のメッセージが表示されます。アンインストールしてリインストールしても駄目でした。
評価版の期間延長は、お問合せフォームよりお問合せください。 WinDriver のツールキットの評価版の制限に関しては、WinDriver のユーザー マニュアルおよびテクニカル ドキュメント #9 を参照してください。

USB ポートがついた Microsoft Side Winder のドライバが必要です。そのドライバを提供していますか?
Jungo 社では、デバイス ドライバの記述を行うツールキットを提供しています。既製品のドライバは提供していません。既製品のドライバに関しては、以下のページのリストを参照してください: http://www.jungo.com/resource_index4.html

WinDriver のアンインストール方法を教えてください。
コンピュータから WinDriver を完全にアンインストールする方法は、以下のサイト「アンインストール手順」 を参照してください。注意: Web 上のアンインストール手順は最新の WinDriver のバージョンを対象としています。古いバージョンをご使用の場合は、WinDriver のユーザー マニュアルの関連する章を参照してください。

戻る

 

 価格とライセンスの問題

WinDriver のライセンスの購入方法?
弊社ショッピング ページからご購入いただけます。製品購入申込書に必要な情報を記入して、郵送または FAX にてお送りください。

ライセンスを購入時に他に何が同封されますか?
WinDriver の製品版をご購入いただくと、ライセンス コードの発行、ユーザー マニュアルおよび 2 ヶ月間のインストールおよびドライバの配布に関するサポートおよび無償アップグレードがご提供されます。

2ヵ月後、テクニカル サポートおよび無償アップグレードを受けれますか?
2ヶ月間のサポートおよび無償アップグレードが終了後、テクニカル サポートおよびアップグレードを受けるには、年間サポート プラン SSP (サポート サブスクリプション プラン) を購入する必要があります。弊社ショッピング ページよりお申し込みください。製品購入申込書に必要な情報を記入して、 郵送または FAX にてお送りください。
SSP に関する詳細情報は、価格一覧ページを参照してください。価格一覧ページにも記載してありますが、サポート期間中に SSP を更新すると新規でご購入するよりも非常にお買い得となっております (2ヶ月間の無償サポート期間も含みます)。 SSP をご購入後、技術的な問い合せの際には、有償サポート フォームよりお問合せください。お問合せの際は FAQ を参照してください。

WinDriver で開発したドライバは、配布数に制限はありますか? また、ロイヤリティ料は掛かりますか?
ライセンスを購入後は、WinDriver を使用して開発したドライバはお客様自身のドライバとなります。ライセンスはドライバ開発用に発行されます。作成した実行ファイル EXE/DLL ファイルは無料で無制限に配布できます。ライセンス料は掛かりません。WinDriver を使用して、ドライバ開発キットを作成した場合は例外です。 WinDriver のヘッダ ファイルまたは license registration string を配布することはできないので、第 3 者は WinDriver を使用したドライバを開発できません。詳細は、WinDriver のユーザー マニュアルのドライバの配布を参照してください。

WinDriver の評価版を登録後、 WinDriver で作成したアプリケーション (評価版で動作) は、DriverWizard を起動するまで、動作しません。PC を再起動後、DriverWizard を起動するまで、再びプログラムは動作しません。WinDriver のサンプル プログラムも同様です。何が悪いのでしょうか?
WinDriver の登録版を使用する際には、コードに license registration string を登録する必要があります。

登録したツールキットの DriverWizard で生成されたコードには、license registration string が含まれます (コードを生成する前に Wizard で license registration string を登録する必要があります)。ただし、評価版を使用中に DriverWizard を使用してコードを生成した場合、または WinDriver のサンプル コードを使用する場合、そのコードに license registration string を登録する必要があります [WinDriver v5.20 以降、DriverWizard の評価版で生成されたコードは、デモ用の license string が登録されるので、登録版の license registration string に置き換える必要があります]。

メモ, DriverWizard でライセンスの登録が完了後、DriverWizard のすべてのセッションは自動的にライセンスが有効になります。

コードから license registration string を登録する方法は、WinDriver のユーザー マニュアル WD_License() API の説明を参照してください [WinDriver v5.05b またはそれ以前をご使用の場合、各バージョンの WinDriver/redist/register/register.txt registration ファイルを参照してください]。

コード中で、WD_Open() 関数を呼んだ後に直ぐに、WD_License() 関数を呼んで、その他の WinDriver API 関数を呼びます。

WinDriver を使用してドライバを開発しましたが、そのドライバは開発環境でしか動作しません。開発環境以外のマシンにドライバを配布する方法を教えてください。
WinDriver をインストールすると、そのマシンのみが開発マシンとなるようにDriverWizard などをロックします (どの PC でも DriverWizard を使用できる WinDriver のフローティング ライセンスを除いて)。コードを記述しビルド後、そのドライバをインストールし起動します。WinDriver を使用して作成したデバイス ドライバは、無制限にロイヤリティ無料で配布できますが、ドライバ開発ツールキットとして配布することはできません (FAQ を参照してください)。
WinDriver を使用して開発したドライバの配布方法は、WinDriver のユーザー マニュアルおよびテクニカル ドキュメントの関連項目ライセンスと配布セクションを参照してください。ドライバの配布を行う前に、コードに license registration string が登録されていることをご確認ください。ユーザー マニュアルおよび関連する以下の FAQ を参照してください: #reg1 および #lfc19

戻る

 

 テクニカル情報 - WinDriver

Debug Monitor ユーティリティとは? 起動方法は? 'Trace' モードとは?
The Debug Monitor ユーティリティ (別名 Monitor Debug Messages - 以前のバージョン) - wddebug_gui (グラフィック バージョン) または wddebug (非グラフィック バージョン)、 WinDriver util ディレクトリ以下にあります - は、WinDriver のカーネル モジュールから詳細なデバッグ情報のログを採取するアプリケーション プログラムです。このユーティリティの使用方法に関しては、テクニカル ドキュメント #12 (wddebug_gui) またはテクニカル ドキュメント #13 を参照してください (wddebug - グラフィックをサポートしていない OS 用、Linux、Solaris および Windows CE はテクニカル ドキュメント #13 を参照、VxWorks はテクニカル ドキュメント #14 を参照してください)。

注意: Debug Monitor はまた、WinDriver のモジュールをインストールした対象の PC 上でも起動します。WinDriver のツールキットをインストールしていない対象の PC で使用することができます。たとえば、お客様の PC で問題が発生した場合に、デバッグ プログラムを起動することができます。詳細は、FAQ を参照してください。

作成したアプリケーションを起動するとシステムがクラッシュします。よって、Debug Monitor ログにデバッグ情報を取得できません。システムがクラッシュする際に、他にデバッグ情報を取得する方法はありますでしょうか?
はい。テクニカル ドキュメント #44 の説明のとおり、Debug Monitor からデバッグ情報をカーネル デバッガへ送信することができます。
Windows の場合、ハング/クラッシュの場合に、デバッグ情報を保存するには、他の PC にカーネル デバッガをインストールし、この PC と開発環境 PC 間でデバッグ セッションを確立する必要があります。
Linux の場合、再起動後、デバッグ ログ /var/log/messages を検索してください。

WinDriver を使用して、どのように正確なタイマーを実装しますか?
WinDriver は、正確な sleep タイムを取る API を提供します (1 microseconds resolution) - WD_Sleep().

デフォルトでは、WD_Sleep()busy sleep を実行します。

non-busy sleep を実行する必要がある場合:

  • ~17,000 milliseconds resolution で十分な場合、WD_SLEEP 構造体の dwOptions フィールドの SLEEP_NON_BUSY フラグを設定してください。non-busy sleep を実行するために WD_Sleep() に渡します。
    または標準的な OS の sleep 関数 (例、Sleep()WaitForSingleObject() など) を使用してください。標準的な OS の sleep 関数を使用するのではなく、WD_Sleep() を使用すると、コードの互換性が保たれます。

  • より高い resolution が必要な場合、Win95 の VTD (Virtual Timer Device) を使用して、Kernel PlugIn アプリケーションを記述できます。タイマーを実行するコードがカーネル モードのコードであることは問題です。ユーザー モードからカーネル モードへデータを転送するようにコードを記述する必要があります。そして、カーネル モードからユーザー モードへ結果を元に戻す必要があります。

MSVC++ を使用して、簡単にコードをデバッグできますか?
はい! 記述したデバイス ドライバのコードは、通常の Win32 ユーザー モードで起動します。従って、MSVC++ を使用して、コードをコンパイルおよびデバッグできます。
WinDriver を使用して記述したドライバ コードのデバッグに関する詳細情報は、テクニカル ドキュメント #19 を参照してください。

ISA カード用に 20 以上の 'hardware items' (I/O、メモリおよび割り込みなど) を定義する必要があります。この場合、windrvr.h ヘッダ ファイルの WD_CARD_ITEMS の値が増加しました (WD_CARD_ITEMS WD_ITEMS 構造体の配列として、WD_CARD 構造体の Item メンバー を定義したため)。 しかし、現在 WD_CardRegister() は動作しません。何故でしょうか?
対象のカードの WD_CARD_ITEMS items よりも多く定義する必要がある場合 (現在、windrvr.h ファイルの WD_CARD_ITEMS の定義によると 20 items です)、コード中で、WD_CARD_ITEMS の値は編集しないでください。代わりに、コードから WD_CardRegister() を呼んでください。[WD_CardRegister() の単一の呼び出しで、対象のカードのすべてのリソースをロックする必要はありません]。代わりに、複数のメモリ/IO アドレス範囲を単一の BAR 定義へグループ化することを検討してください。つまり、全体のリソース item count がデフォルトの 20 items の制限を越えません。

windrvr.h の定義は一切、変更しないでください。期待した結果を得られず、問題が発生する場合があります。

WinDriver の登録版をインストールしましたが、Jungo から提供されたサンプル プログラム (PCI Bus Diagnostics、Parallel Port Sample など) が動作しません。何が問題でしょうか?
サンプル プログラムは評価版として記述されています (評価期間中はライセンス無しで配布および使用できます)。ソース コードを編集して、コードから license registration string を登録できます - FAQ を参照してください。

作成した WD_Transfer() メモリ転送ルーティンの処理が非常に遅いです。速度を上げることはできますか?
WD_CardRegister() in:
cardReg.Card.Item[i].I.Mem.dwUserDirectAddress で返される適切なメモリ範囲のベース物理アドレスの仮想ユーザー モードのマッピングを使用して、 WD_Transfer() への呼び出しをダイレクト メモリ アクセスに置き換えることができます。
('i' は、WD_ITEMS 'Item' 配列のメモリ ベース アドレスの index 番号を表します)。
WinDriver のユーザー マニュアル (関数レファレンスの WD_CardRegister() の説明と「パフォーマンスの向上」の章を参照してください) およびテクニカル ドキュメント #74#17 を参照してください。テクニカル ドキュメント #17 には、WinDriver を使用したドライバのパフォーマンスの別の向上方法を紹介しています。

作成したドライバを対象のマシンにインストールしましたが、開発環境用のマシンでは発生しなかった問題が発生します。開発環境用のマシンと同様に対象のマシン上でも Debug Monitor ユーティリティを起動することができますか?
WinDriver の Debug Monitor ユーティリティはどのマシンでも起動します (開発マシンにのみロック ダウンされる WinDriver DriverWizard ユーティリティとは違い)。このため、開発マシンの WinDriver/util ディレクトリから wddebug_gui ファイル (または wddebug - 非グラフィカルなプラットフォームの場合) を対象のマシンにコピーして、起動できます。Debug Monitor ユーティリティに関する詳細情報は、WinDriver のユーザー マニュアルと次の FAQ とテクニカル ドキュメント: テクニカル ドキュメント #12 (wddebug_gui)、テクニカル ドキュメント #13 (wddebug - Linux/Solaris/Windows CE) およびテクニカル ドキュメント #14 (wddebug.out - VxWorks) を参照してください。

戻る

 

 Kernel PlugIn の問題

Kernel PlugIn は無料ですか? 使用するのにライセンスは必要ですか?
Kernel PlugIn は、WinDriver ツールキットに付属されています。
追加のライセンスを購入する必要はありません。

Kernel PlugIn のプロジェクトをビルドするのに Microsoft の DDK は必要ですか?
Kernel PlugIn を使用して、SYS ドライバ (Windows XP/2k/NT または Windows Me/98 の場合) を開発する場合、SYS ファイルをリンクするために WinNT/2000/XP DDK の ntoskrnl.lib ファイルが必要です。そのため対象の OS に Microsoft 社の DDK をインストールする必要があります。Microsoft 社の DDK ライブラリに関する詳細情報は以下を参照してください: http://www.microsoft.com/whdc/devtools/ddk/default.mspx
[注意: DDK を使用して、Kernel PlugIn ドライバをビルドするには、BASEDIR または DDKROOT 環境変数を設定する必要があります。WinDriver のユーザー マニュアルおよび FAQ を参照してください]。
Kernel PlugIn を使用して、VxD ドライバ (Windows 98/Me) を作成する場合には、ドライバをビルドするために Microsoft 社の DDK をインストールする必要はありません。ただし、作成した Kernel PlugIn アプリケーションに DDK 関数を呼び出しを追加する場合には、必要です。[注意: OS 独自の DDK 関数を使用すると、ドライバの互換性が損なわれます]。

1 秒間 (一般的に) に期待できる割り込みの回数はいくつですか?
WinDriver の Kernel PlugIn 機能を使用すると、割り込みを一つもミスせずに、1 秒間に 100,000 以上の割り込みを処理できます。
Kernel PlugIn 割り込み処理コードのサンプルでは、DriverWizard を使用して、デバイスのコードを生成 (PCI デバイスの場合、コードを生成する前に Winzard で割り込みをクリアするためにデータを定義します) するか、カーネルでの ISA の割り込み処理のサンプル Kernel PlugIn KPTEST コード - WinDriver\kerplug\kermode\kptest.c - を参照にします。

ユーザー モードでは、1 秒間におよそ 5,000-10,000 の割り込みを処理できます。しかし、Windows は Real Time OS ではないので、割り込みをミスする可能性があります (ただし、割り込みをミスした際に、ミスした回数を WinDriver はお知らせします)。

WinDriver を使用した割り込み処理の説明は、テクニカル ドキュメント #48 を参照してください。

ドライバ コードは常に物理メモリ内でロックされますか?
はい。

カーネルでロックされたメモリをどのように割り当てますか (Kernel PlugIn 割り込みルーティン内から使用可能)?
WinDriver は、カーネル モードのメモリの割り当てに malloc() および free() を実装します (テクニカル ドキュメント #34 を参照してください)。割り当てたメモリをロックするので、Kernel PlugIn 割り込みルーティンでこのメモリを使用することもできます。
ユーザー モードおよび Kernel PlugIn アプリケーション間でメモリを共有することもできます。テクニカル ドキュメント #41 を参照してください。

Kernel PlugIn で割り込みを処理する際に、ユーザー モードで割り込みハンドラーを削除することはできますか?
はい - ユーザー モードの割り込みハンドラー ルーティンを削除することができます。
また、Kernel PlugIn で割り込み処理のいくつかを実装でき、そして残りのいくつかをユーザー モードで実装できます。KP_IntAtDpc() の戻り値が、ユーザー モードの割り込みハンドラー ルーティンを実行する回数となります。

Kernel PlugIn 機能を使用して、VxD または SYS ドライバ ファイルを作成できますか?
Kernel PlugIn を使用して、add-on VxD/SYS/o カーネル ドライバ (OS によって異なります) を作成して、必要に応じて WinDriver の機能を拡張します。作成した Kernel PlugIn ドライバは、スタンド アロンではありません - 有効にするユーザー モードのドライバとのみ動作します。
[注意: WinDriver の Kernel PlugIn 機能を使用する際には、windrvr6.sys/vxd/o または windrvr.sys/vxd/o ドライバ モジュールをインストールする必要があります (OS および WinDriver のバージョンによって異なります)]。

WinDbg などのカーネル デバッガを使用して、参照することができる Kernel PlugIn からのデバッグ情報をどのように出力しますか?
WinDriver の Debug Monitor ユーティリティのデバッグ情報をカーネル デバッガへ送信することができます - テクニカル ドキュメント #44 を参照してください。WinDriver の WD_DebugAdd() API (v5.03 およびそれ以降) を使用して、Kernel PlugIn (またはユーザー モード) のコードから Debug Monitor へデバッグ メッセージを出力できます (必要に応じて、カーネル デバッガへ直接情報を送信することもできます)。ユーザー モードまたは Kernel PlugIn 関数内から WD_DebugAdd() を呼びことができます (KP_IntAtIrql() も含まれます)。
Kernel PlugIn コードの内側から KdPrint() (Windows NT/2K/XP の場合) または DbgPrint() (Windows 98/Me/NT/2K/XP の場合) の呼び出しを追加することもできます。DDK 関数は、カーネル デバッガで出力内容を参照することができます。

作成したアプリケーションの close 処理で PC がハングします。 WD_IntDisable() で失敗しています。何が原因でしょうか? Kernel PlugIn を使用して、割り込みを処理しています。
この現象は、Kernel PlugIn から割り込みを有効にし、割り込みを無効にするためにユーザー モードから同時に WD_IntDisable() を呼ぶ際に起きます。割り込みが有効 (Kernel PlugIn から有効にした) だったので、WD_IntDisable() で割り込みを無効にできず、WD_IntDisable() への戻りを待っている間に PC がハングします。

有効な解決策としては、アトミック操作として WD_IntDisable() を呼びます。それによって、Kernel PlugIn 割り込みルーティンが割り込みを有効にする前に割り込みの無効に成功します。

Kernel に Kernel PlugIn モジュールを挿入すると (insmod を使用)、多くの unresolved symbols エラーが発生します。
FAQ を参照してください。

SYS/VxD ファイルに新しい関数を記述する場合、 __cdecl を使用して宣言する必要がありますか?
いいえ。WinDriver が使用する callback のみが __cdecl として宣言する必要があります。

戻る

 

 Windows の問題

WDM デバイス ドライバとは何ですか? また、WinDriver は WDM をサポートしていますか?
デバイス ドライバを記述する際は、開発者は、Win 9X および Win NTX 用にデバイス ドライバを別々に記述する必要があります。Windows 98、Me、2000 および XP プラットフォーム間で入力デバイスへアクセスするコードを統一するために、Microsoft 社は、クロス プラットフォーム オペレーティング システム サポートを開発しました。この新しいサポートをWindows Driver Model または WDM と言います。WDM は、Windows NT ドライバ モデルをベースとし、Plug and Play およびパワー マネージメントのサポートを修正し、多くのマルチメディア デバイス タイプの使用され、USB や 1394 デバイスなどの他の多くのデバイス タイプに使用されています。
WinDriver v5.20 以降、WinDriver の API を実装する windrvr.sys カーネル モジュールが (v6.00 以降では、windrvr6.sys ) フル WDM ドライバとなります。

注意: WDM を Windows 98、Me、2000 および XP で共有します。Windows 95 および Windows NT 4.0 は、WDM にサポートされていません。ただし、WinDriver は、Windows 98、Me、2000 および XP および Windows NT 4.0 でのクロス プラットフォーム サポートを提供します。また同様に、その他のオペレーティング システム - Windows CE、Linux、 Solaris (PCI/ISA の場合) および VxWorks (PCI/ISA の場合) に対しても同様です。

Windows XP マシンに WinDriver で作成したドライバをインストールしました。 Windows が以下のメッセージを表示します:
"   The software you are installing for this hardware has not
    passed Windows Logo Testing ... and may impair or destabilize
    the correct operation of your system...
"
(インストールしようとしてるソフトウェアは、Windows XP との互換性を検証する Windows ロゴ テストに合格していません)
これは問題でしょうか? メッセージを表示させない方法はありますか?

このメッセージは、実際にはエラー メッセージではありません。また、ドライバのインストールに問題があるわけでもありません。このドライバが、Microsoft 社の WHQL (Windows Hardware Quality Labs) のテストおよびデジタル署名を受けていないことを Windows XP が示すためにこのメッセージを表示しています。

このメッセージを消すには、Microsft 社に問合せし、デジタル署名を取得してください。詳細は、次の項目を参照してください。

WinDriver は、Microsoft のデジタ署名を取得していますか? WinDrive で開発したドライバでデジタル署名を取得するには?
WinDriver は、WHQL に完全に準拠します。WinDriver for Windows を使用して開発したドライバを Microsoft 社の WHQL (Windows Hardware Quality Labs) のテストに申請し、ドライバに Microsoft 社のデジタル署名を取得することができます。WinDriver ベースのドライバで、既に Microsoft 社からデジタル署名の取得に成功したユーザー様が数多くいます。
Microsoft 社の WHQL テストおよび WHQL 認定の取得方法に関する詳細は、次の Microsoft 社の Web サイトを参照してください: http://www.microsoft.com/whdc/whql/default.mspx

戻る

 

 Windows CE の問題

Windows CE 用のデバッグ ユーティリティはありますか?
はい - Windows CE 上でも Debug Monitor ユーティリティを使用できます。
詳細情報は、テクニカル ドキュメント #13 を参照してください。

CE NDIS ドライバを作成しています。CE IP スタックと talk します。
作成したドライバから NIC ハードウェアにアクセスする必要があります。WinDriver で実現可能ですか?

はい。 Windows CE では、NDIS ドライバを含むデバイス ドライバは、DLL です。よって、NDIS ネットワーク ドライバは Windows CE API を使用して、ハードウェアと talk します。

Windows CE のシリアル ポートの NDIS ドライバを作成してます。WinDriver で実現可能ですか?
はい。 Windows CE では、NDIS ドライバを含むデバイス ドライバは、DLL です。よって、NDIS ネットワーク ドライバは Windows CE API を使用して、ハードウェアと talk します。

戻る

 

 Linux の問題

Kernel に Kernel PlugIn モジュールを挿入すると (insmod を使用)、多くの unresolved symbols エラーが発生します。
まず初めに、'insmod' windrvr6.o (または windrvr.o - v5.22 またはそれ以前の場合) をご確認ください。Kernel PlugIn モジュールは、windrvr6.o (以前のバージョンはwindrvr.o) に依存します。
Kernel PlugIn ドライバのビルド方法は、テクニカル ドキュメント #62 を参照してください。

Linux にカーネル バッファを割り当てようとし、100KB バッファの割り当てはできますが、150KB の割り当てはできません。何が必要でしょうか?
これは Linux カーネルの制限事項です。デフォルトでは、カーネル バッファの割り当てに最大 128KB 割り当てることができます。ただし、カーネルをリコンパイルしてより大きいサイズにすることは可能です。また、可能にするパスもあります。詳細は、テクニカル ドキュメント #64 を参照してください。

戻る

 

CardBus の問題

WinDriver は、PCI ドライバを使用したラップトップの CardBus スロットをサポートしてますか?
はい。WinDriver PCI ツールキットおよび API を使用して、CardBus ドライバを開発します。詳細は、テクニカル ドキュメント #94 を参照してください。

注意: Plug-and-Play (PnP) オペレーティング システムでは、WinDriver で対象のデバイスを処理するには、対象のデバイスの INF ファイルを生成しインストールする必要があります (DriverWizard を使用して、INF ファイルを作成できます)。INF ファイルは、対象のデバイスが windrvr6.sys と動作するように登録します (v5.2X の場合 windrvr.sys、以前のバージョンの場合 wdpnp.sys/wdusb.sys )。

戻る

 

Parallel / Serial Port の問題

パラレル ポートを持つ通信機器に WinDriver を使用しています。ECP モードの場合、正常に動作するコンピュータもありますが、正常に動作しないコンピュータもあります。
これはハードウェアの問題と思われます。さまざまなコンピュータ上のパラレル ポート モードの BIOS の仕様の実装のためです。それは BIOS 内でプログラムされているので、WinDriver ではこの現象をコントロールできません。BIOS またはコンピュータの製造元にお問合せください。

戻る

 

Interrupt の問題

現在、ユーザー モード ハンドラーの割り込みと有効に 25ms を掛かっています。 これが、アプリケーションのハンドラーとして期待できるパフォーマンスですか? 割り込み処理をより早く処理するために割り込み処理を Kernel PlugIn に移行する予定です。
ユーザー モードのハンドラーでは、1秒間に 10,000 割り込みまで処理できます (ただし、多くの要素に依存しますので、正確な数を明言することはできません)。約 25ms の待ち時間は発生しないはずですが、場合によります。WinDriver の Kernel PlugIn 機能を使用すると、この現象は起きないでしょう。ただし、長い割り込みを無効にするような不適切なデバイス ドライバの記述がある場合には、パフォーマンスの向上を実現できません。そのような不適切なドライバを識別、更新もしくは削除する必要があります。詳細は、テクニカル ドキュメント #48 を参照してください。

DriverWizard を使用して、レベル センシティブな割り込みを処理するコードを生成しました。WD_IntWait() の戻り後、割り込みステータス レジスタを read しましたが、割り込みが発生していないようです。複数のカードで割り込みを共有してる場合、これは問題です。
PCI の割り込みが発生した場合、レベル センシティブな割り込みをクリア (認識) するために、WinDriver は割り込みステータス レジスタを writes/reads します。割り込みを有効にする際に、予めコードに設定した情報に従って、カーネルで直接これを実行します。割り込みをクリアする前に、つまり割り込みハンドラー ルーティン内からこの値を後で参照するには、割り込み転送コマンドの適切な read コマンドを設定する必要があります。このコマンドは、InterruptEnable() (/InterruptThreadEnable() 以前のバージョンの場合)/WD_IntEnable() へ渡される WD_INTERRUPT 構造体の dwCmd field に設定され、 WD_INTERRUPT 構造体 (int.dwOptions |= INTERRUPT_CMD_COPY) の dwOptions フィールドの INTERRUPT_CMD_COPY フラグに設定されます。
詳細は、WinDriver のユーザー マニュアルおよびテクニカル ドキュメント #104#75 を参照してください。

DriverWizard を使用して、PCI ボードの割り込みを listen しましたが、次のエラーが表示されました:
" WARNING!! You did not choose an Access Register
for this level sensitive interrupt.
If you do not want to specify a register you will
have to manually change the code generated by DriverWizard.
".
以前の WinDriver のバージョン (v.4.33) の DriverWizard では、 次のエラー メッセージが表示されます: " The register assigned to this interrupt does not exist ".

PCI はレベル センシティブな割り込みを使用します。レベル センシティブな割り込みを受信すると直ぐにカーネルで認識およびクリアされます。このため、割り込みステータス レジスタを定義する必要があり、割り込みをクリアするために read/write する必要があります。 これは、認識されないレベル センシティブな割り込みが PC をハングするために予防策です。WinDriver の DriverWizard で PCI 割り込みを Listen する方法は、テクニカル ドキュメント #105 を参照してください。WinDriver を使用した PCI 割り込みの処理方法に関しては、テクニカル ドキュメント #75 および WinDriver のユーザー マニュアルを参照してください。

注意: WinDriver のドキュメント類に記載されてありますが、Plug-and-Play (PnP) オペレーティング システム (Windows 98/Me/2000/XP) で WinDriver を使用して正確に PCI 割り込みを処理するには、初めに対象のデバイスの INF ファイルをインストールし、WinDriver の PnP ドライバ (windrvr6.sys、以前のバージョンでは - windrvr.sys/ wdpnp.sys/wdusb.sys, バージョンに依存します) と動作するように登録する必要があります。

戻る

 

DMA の問題

WD_DMALock() を使用して、大きなメモリ ブロック (1 MB 以上) をロックできません。Debug Monitor には、 Scatter/Gather でロックの失敗が表示されています。
WD_DMALock() 関数を使用して、Scatter/Gather (S/G) DMA 用に大きい DMA バッファ (1 MB 以上) をロックするには (すなわち、KERNEL_BUFFER_ALLOC DMA オプション フラグを設定しない)、以下の手順に従ってください:

NOTE 高レベルな WDC_DMASGBufLock() 関数を使用する場合 (WinDriver v7.00 以降で利用可能)、大きい DMA バッファをロックするのに同じ設定を実行する必要はありません; この関数が既に処理しています。低レベルな WD_DMALock() 関数を使用する場合のみ、以下のステップが必要です。

  1. WD_DMALock()pDmaparameter として渡されるアドレスの WD_DMA 構造体の dwOptions フィールドに DMA_LARGE_BUFFER フラグを設定します (Contiguous Buffer DMA とは違い、Scatter/Gather DMA を実行する場合のみ、このフラグが必要となります)。

  2. 以下の方法で、ロックが必要なページ数を計算し、WD_DMA 構造体の dwPages フィールドに割り当てます:

    dwPagesNeeded = transferCount / 4096 + 2;

    transferCount は、ロックするバイト数です。

  3. 注意: デフォルトでは、WD_DMA 構造体は、256 ページ分の情報を格納できます (= WD_DMA_PAGES, WinDriver\include\windrvr.h で定義)。256 ページ以上ロックする場合、すべてのページ情報を格納するために十分なメモリが必要です。必要な追加のページの情報 (アドレスとバイト数) を格納するのに十分なメモリを割り当てるには、以下を実行します:

    WD_DMA *pDma;
    pDma = (WD_DMA *)malloc(sizeof(WD_DMA) + sizeof(WD_DMA_PAGE)*(dwPagesNeeded - WD_DMA_PAGES));

メモリの割り当てに失敗する場合 (上記の手順に従って WDC_DMASGBufLock または WD_DMALock のいずれかを使用して)、メモリを割り当てるのに十分なシステム リソースがあるか確認してください (メモリをマップする、カーネルおよびユーザーモードの両方のアドレス空間)。
Windows では、非ページ プールのサイズを増やす必要がある場合があります (メモリの割り当てから)。詳細は、テクニカル ドキュメント #58 を参照してください。バッファ全体をロックできない場合、バッファを小さくしてみてください。

WinDriver を使用した DMA 実行に関する詳細情報は、WinDriver ユーザー マニュアルの第 8 章「実行に当たっての問題」の「DMA の実行」セクションと WinDriver DMA API の関数レファレンスを参照してください。

Windows で DMA のメモリ バッファをロックしました。ユーザー モードのポインタを使用してメモリに直接アクセスすると、malloc() で割り当てた "regular" メモリ バッファのアクセスよりも 5 倍遅いです。何故でしょうか?
"Regular" メモリ (stack、heap など) をオペレーティング システムでキャッシュします。 WD_DMALock() を使用する際に、DMA safe にするためにデータを非キャッシュにします。よって、メモリ アクセスが遅くなります。
注意: これは DMA の正しい動作です。

Contiguous Buffer DMA を実行する際に、WDC_DMAContigBufLockdwOptions パラメータの DMA_ALLOW_CACHE フラグを設定するか、WD_DMALock() (低レベルな WinDriver API を使用する場合) へ渡される WD_DMA 構造体の dwOptions フィールドに直接 DMA_ALLOW_CACHE フラグを設定し、キャッシュ DMA バッファを割り当てます。Windows x86 および x86_64 プラットフォームで実行する場合、このフラグを常に設定することを推奨します。(Note: DMA_ALLOW_CACHE フラグは、WinDriver v5.21 以降で利用可能です)。

ユーザーモードでメモリを割り当てた場合、そのアドレスを WDC_DMASGBufLock() か低レベルな WD_DMALock() 関数に渡し、Scatter/Gather DMA バッファをロックし、WD_DMAUnlock() の呼び出しでメモリ バッファをアンロックし、アクセス速度の観点で他の "regular" メモリのように機能します。

戻る