2009-06-15 25 views
26

以前はC/C++で記述しましたが、現在はC#に変換する必要があります。C#でのドライバの作成

誰も私にコード/方法を教えてくれますか?C#でドライバを書く方法は?

現在、私はC++で書かれた古いアプリケーションにいくつか問題があり、LPT1、COMプリンタ、およびその他のUSBドライバのドライバをC#で記述する必要があります。

答えて

22

単にできません。 C#は、仮想マシン(.NET)によって解釈される中間言語を生成します。これらのすべてはユーザーモードで実行され、WDMドライバはカーネルモードで実行されます。

DDKがありますが、VStudioでもサポートされていません(しかし、コンパイルのためにmakefileプロジェクトを作成することはできます)。

ドライバ開発は複雑でブルースクリーンになりがちで、C、カーネル構造、およびmem操作についてよく理解している必要があります。これらのスキルはC#と.NETには必要ありません。そのため、長くて苦しいトレーニングの道があります。

+0

実行前にコードに署名する必要があることを考慮すると、コードがJITされている場合は、(ILでも可能ですが)署名付きドライバを作成することはできません。 (Xbox 360では、すべてのXNA/.NETコードはネイティブコードゲームとは逆のユーザー空間で実行されるため、Microsoftにはこのための「解決策」はありません)。しかし、いくつかのC#OSがありますが、ドライバはC#で完成しています。 –

+2

Windowsのすべてのデバイスドライバでカーネルモードを実行する必要はありません。ビデオドライバと私はオーディオドライバがWindows VistaとWindows 7の両方でユーザーモードで動作すると考えています。また、Microsoftから利用可能なユーザーモードドライバフレームワークもあります。 .NETで動作するかどうかは確かですが、おそらくC/C++ベースのままです。 http://www.microsoft.com/whdc/driver/wdf/UMDF.mspx –

1

C#でドライバを書き込むことはできません。ドライバはハードウェアと話すために特権を昇格して実行する必要があります。適切な環境でマネージコードを実行することはできません。

+0

そうでない場合は、C#で私の前のコードを処理する方法はありますか? –

+0

さて、私たちはあなたのコードが何をしているのか本当に分かりません。あなたはC#でデバイスドライバを書くことについて話していますが、これは不可能です(上記のように)か、C#でデバイスを開いてデータを送信することについて話していますか(ファイルとして開くことができるはずですハンドルへの読み書きのみ)。 –

10

C#でカーネルモードドライバを書き込むことはできません(ランタイムはユーザモードで実行されるため、ring0に入ることはできません)。このSO Q/Aは、あなたが役に立つかもしれないいくつかのリンクを提供しています。

C# driver development?

26

それがユーザーモードで実行されるため、あなたが(Getting Started with UMDFを参照)UMDFを使用している場合、実際にあなたがC#でいくつかのドライバを書くことができます。しかし私の推薦はC/C++を使うことです。

+0

そのリンクはもはやUMDFに直接向かうことはなく、私のGoogle-fuは、C#でユーザモードのドライバを書くことができるということを示していません。 –

+0

@Oran:ありがとう、私はリンクを更新しました。 C#はUMDFには使用されていないと思います。なぜなら、Microsoftはすぐにサポートを提供しておらず、自分で多くのことを行う必要があります(関数、定数、構造体などの宣言)。 –

8

Windowsデバイスドライバを開発するのか、既存のデバイスドライバを介してハードウェアとやりとりするのかは、あなたの説明からは分かりません。

たとえば、シリアルポートに接続されたデバイスとやりとりするには、独自のドライバを作成する必要はなく、実際には.NETのSerialPortクラスからアクセスできます。

でもUSBデバイスは、このようなlibusb-win32ようなフレームワークを通じて(最終的には、マネージコード、および)ユーザ空間からアクセスすることができ、WinUSBなど

関連する問題