質問

.Netの標準ポインターはこれを実行できますか?または、P / invokeに頼る必要がありますか?

オブジェクト参照については話していないことに注意してください。安全でないコードの実際のC#ポインターについて話しています。

役に立ちましたか?

解決

C#は、管理および保護されたランタイムエンジンとして、低レベルのハードウェアアクセスを許可せず、実際のハードウェアに関連付けられたメモリの場所は使用できません。

ポートドライバーを使用するか、適切なWindows APIを使用してC ++またはCで独自に作成して、対象のメモリマップI / O領域にアクセスする必要があります。これは、C#プログラムが可能なよりも低いリングで実行されます。

これは、C#で記述されたドライバーが表示されない理由です。多くの人がC ++でアクセスルーチンを記述していますが、C#の主要なドライバーロジックは記述しています。ただし、同期とタイミングの問題は言うまでもなく、クラッシュと再起動が難しくなる可能性があるため、注意が必要です(ウィンドウはリアルタイムシステムからはほど遠いものの、C ++ではより低いリングでより具体的です)。

-アダム

他のヒント

Adamの答えを展開するには、カーネルドライバーの協力なしにWin32アプリケーションからメモリマップI / Oを実行することさえできません。 Win32アプリが取得するアドレスはすべて、物理アドレスとは関係のない仮想アドレスです。

話していることを行うためにカーネルドライバーを作成するか、特定の物理アドレスに対してI / Oを要求できるAPIを持つドライバーをインストールする必要があります(そのようなドライバーは非常に大きなセキュリティホールが発生するのを待っています、私は想像します)。昔のDOS / Win16やその他のデバイスコードをWin32に移植するのに役立つ開発キットの一部としてこのようなドライバーが装備されていた頃のことを思い出すようです。名前を覚えていないか、まだ存在するかどうかはわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top