2012-02-21 5 views
1

私はいくつかのWindows 7のドライバ開発を開始しています。明確でない1つのことは、マネージコードプログラムがドライバーからの情報にアクセスする方法(例えば、デジタルI/Oカードを使用して通信する方法)です。マネージコードからのデバイスドライバとのインターフェイス - P/Invokeなし?

たとえば、ドライバ(カーネルまたはユーザモード)はPCI/PCIeカード上のレジスタへのアクセスを管理しますが、レジスタデータの読み書きは、管理コード(C#、VB .NET)を介して。

私はWin32API呼び出しのようにP/Invokeに頼る必要はありません。

これはメモリ共有(IOCTL)の問題ですか、P/Invokeを「隠す」ために中間管理されたDLLを使用するのですか?

ありがとうございます!

答えて

1

あなたがWindows 7のドライバ開発に飛び込むしたい場合は、すべてでマネージコードを使用しないでください。しかし、特定のドライバの機能を呼び出すことを希望する場合は、さまざまな手法を使用することができ、P/Invokeがおそらく最も簡単です。

理由は簡単です。デバイスドライバはその性質上管理されていないため、P/Invokeなどの技術を使用する必要があります。ここにはhow you can invoke device driversの例があります。ここにはhow to talk to a USB deviceがあります。

私はP /呼び出しに対するあなたの怒りを理解しています。しかし、どういうわけか、管理対象と非管理対象のギャップを埋める必要があります。あなたはすべて手で(自分のマーシャラーとすべてを使って)行うことができますが、通常のP/Invokeが仕事に合わない場合は、それに頼るようにしてください。もちろん、インターフェースの細部を行うクラスの薄いレイヤーセットを作成することで、複雑さを隠すことができます。そして、この独自のライブラリをマネージコードから自由に呼び出すことができます。

+0

応答をありがとう。私は、管理されていないドライバコードの開発にはうってつけです。あなたが言うように、p/invokeを使わずに「管理対象と非管理対象のギャップを橋渡しする」ことはできません。私はサードパーティのベンダーのハードウェアドライバを常時使用していますので、C#でp/invokeを使用する必要はありません。彼らは常にクラスの中間セットでp/invokeを隠していますか? – ddechow

+0

@ddechow:あなたはP /呼び出しを使用せずにすることによって得ることができるならば、明らかにそれらのドライバのベンダーはあなたのための橋渡しを行い、いくつかのライブラリーを与えています。見つけたい場合は、それらを呼び出すか、提供しているアセンブリのいずれかでリフレクタを使用してください。私はベンダー、ドライバー、ライブラリを知らないので、ドライバーのベンダーがこれをどのようにしたのか、私には分かりません。 – Abel

関連する問題