3

Windows のユーザーランドからドライバーと通信するにはどうすればよいですか? (違いがある場合は Vista です。) ドライバー サイトからサービスと通信できますか? また、どのように通信しますか?

私は実際にはそれほど怠け者ではないので、おそらく上司に本を買ってもらう必要がありますが、どれがどれかわかりません. また、MSDN からコマンドやセクションを推測するのは、検索する適切な用語がないため、かなりの神経と時間を必要とします。ドキュメントで検索する用語を教えてもらえますか?

4

5 に答える 5

3

OSRオンラインは、Windowsドライバーの作成に関する優れた情報源です。

カーネルモードでデバイスに名前を付ける方法(セキュリティにアクセスするためのリンク付き)。

基本的なパスは次のとおりです。

命名関数の1つ(WdfDeviceInitAssignNameなど)を使用してデバイスオブジェクトに名前を付けます。

あなたがするサービスで:

hDev = CreateFile( <obj name>, ..., OVERLAPPED )

DeviceIOControl( hDev, .. , OVERLAPPED);

while( !end )
   SleepEx( 100, true /*bAltertable*/ );

...

ドライバには、サービスからの要求をキューに入れるIRPキューがあります。サービスを呼び出すときは、IRPの1つを完了します。

注意:少し複雑です...使用しているドライバーフレームワーク/モデルによって異なります。NDISフィルタードライバーでこれを1回だけ実行する必要がありました。さらに情報が必要な場合は、もう一度質問してください。

于 2009-07-16T14:06:20.103 に答える
1

クリストファーへのコメントとしてではなく、リンクを維持するための答えとしてこれを行う必要があります。

再度、感謝します。そして、このチュートリアルのおかげで、まもなく別の答えを追加することができます。ネーミングなどです。に

IoCreateSymbolicLink(&usDosDeviceName、&usDriverName);

私が必要としていたこと。(複雑なトピックを簡単に理解できるようにするために、上記のチュートリアルをお勧めします)

ユーザーランドプログラムは、ファイルハンドルを開くことでドライバーと通信できます。

CreateFile("\\\\。\\Example"、 
于 2009-07-16T14:23:46.750 に答える
1

上記の内容に加えて、「ドライバー サイトからサービスと通信できますか、またどのように通信できますか?」という質問です。

これは通常、「逆呼び出し」と呼ばれるものを通じて行われます。IOCTL を送信して、ドライバーが要求されたデータでいっぱいになるまでブロックします。

また、注文する本に関しては、Greg Hoglund Rootkits の基本的なドライバー (つまり、Hello World ドライバー) の作成に関する本を実際に楽しみました。OSR オンラインは優れています。Windows NT Device Driver Development は古いものですが、今でも素晴らしいものです。OSR には、素晴らしい書籍の古典的な復刻版があります。

実際には、Microsoft の WDK に付属しているサンプルは、おそらく多くの質問に答えてくれるでしょう。

于 2009-07-16T15:42:02.757 に答える
0

すぐにビルドして実行できるWDK サンプル SIOCTLが最善の策です。わずか数百行のコード (ほとんどがコメントとスペース) で、ユーザー <==> カーネル通信方式の公式な方法である Windows I/O モデルをすばやく開始して理解することができます。

すべての Windows ドライバー学習者は、これから始める必要があります。

于 2012-12-12T17:18:37.533 に答える
0

書籍について: 「Windows Driver Foundation を使用したドライバーの開発」は、ドライバーのプログラミングを学習するための回答として推奨されています。

于 2009-07-17T06:21:09.880 に答える