2

Visual Basic .Net for Windows XP以降でISAカードに何かを書き込む方法はありますか?(Win XP以降には制限があるため、ポートにデータを直接書き込むことはできません)

私もいくつかの調査を行いましたが、状況を理解した場合、2つの選択肢しかありません。

  1. ドライバーを書く(非常に問題のあるオプション:))または

  2. シリアル/パラレルポートとkernel32同様のドライバで既存のドライバを使用してみてください。

他にオプションがない場合、ISAポートに使用するには、「シリアル/パラレルポートの使用」をどのように変更する必要がありますか?

4

1 に答える 1

1

最近のバージョンのWindowsでは、ユーザーアプリケーションからの直接ポートI/Oは許可されていません。プログラムはリング0ではなくリング3で実行されています。アプリケーションに代わってポートI/Oを実行するには、何らかのドライバーが必要です。

最初に行うことは、カードの製造元に連絡して、ボード用のWindowsドライバーが作成されているかどうかを確認することです。

Windowsドライバーが利用できず、基本的なレジスターの読み取りと書き込み(割り込みやDMAなし)のみを実行する場合は、ダウンロードしてポートI/Oを実行できるライブラリがいくつかあります。基本的に、ライブラリには、リング0に配置され、I/Oを実行するダミーの「ドライバー」が含まれています。私はWinIOで最も経験があります。

WinIOにはC/C ++ APIがあり、.Net/CLRはありません。マネージコードからWinIO関数を呼び出すには、P/Invokeを使用する必要があります。

周りを検索すると、マネージコード用のAPIを提供するWinIOに似たツールキットが見つかる場合があります。(編集:これは私がブックマークしたDirectIOと呼ばれるものです。)

WinIOの最大の問題は、基本的なレジスタの読み取り/書き込みに制限されていることです。割り込みまたはDMAが必要な場合は、運が悪いです。その時点で、「実際の」ドライバーを作成する必要があります。

ドライバーを書くことは、初心者にとってはかなり大きな仕事になる可能性があります(あなたが台無しにすることがたくさんあります)。まず、 Windows Driver Kitのコピーを入手し、 Microsoftのカーネルモードドライバーフレームワークを学習する必要があります。JungoWinDriverのコピーを購入することも検討できます。WinDriverは、ドライバー開発を大幅に簡素化するサードパーティのツールですが、1回限りのプロジェクトにはかなりの費用がかかります。

于 2012-11-06T17:26:16.667 に答える