最近のバージョンの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回限りのプロジェクトにはかなりの費用がかかります。