Windows のユーザーランドからドライバーと通信するにはどうすればよいですか? (違いがある場合は Vista です。) ドライバー サイトからサービスと通信できますか? また、どのように通信しますか?
私は実際にはそれほど怠け者ではないので、おそらく上司に本を買ってもらう必要がありますが、どれがどれかわかりません. また、MSDN からコマンドやセクションを推測するのは、検索する適切な用語がないため、かなりの神経と時間を必要とします。ドキュメントで検索する用語を教えてもらえますか?
OSRオンラインは、Windowsドライバーの作成に関する優れた情報源です。
カーネルモードでデバイスに名前を付ける方法(セキュリティにアクセスするためのリンク付き)。
基本的なパスは次のとおりです。
命名関数の1つ(WdfDeviceInitAssignNameなど)を使用してデバイスオブジェクトに名前を付けます。
あなたがするサービスで:
hDev = CreateFile( <obj name>, ..., OVERLAPPED )
DeviceIOControl( hDev, .. , OVERLAPPED);
while( !end )
SleepEx( 100, true /*bAltertable*/ );
...
ドライバには、サービスからの要求をキューに入れるIRPキューがあります。サービスを呼び出すときは、IRPの1つを完了します。
注意:少し複雑です...使用しているドライバーフレームワーク/モデルによって異なります。NDISフィルタードライバーでこれを1回だけ実行する必要がありました。さらに情報が必要な場合は、もう一度質問してください。
クリストファーへのコメントとしてではなく、リンクを維持するための答えとしてこれを行う必要があります。
再度、感謝します。そして、このチュートリアルのおかげで、まもなく別の答えを追加することができます。ネーミングなどです。に
IoCreateSymbolicLink(&usDosDeviceName、&usDriverName);
私が必要としていたこと。(複雑なトピックを簡単に理解できるようにするために、上記のチュートリアルをお勧めします)
ユーザーランドプログラムは、ファイルハンドルを開くことでドライバーと通信できます。
CreateFile("\\\\。\\Example"、
上記の内容に加えて、「ドライバー サイトからサービスと通信できますか、またどのように通信できますか?」という質問です。
これは通常、「逆呼び出し」と呼ばれるものを通じて行われます。IOCTL を送信して、ドライバーが要求されたデータでいっぱいになるまでブロックします。
また、注文する本に関しては、Greg Hoglund Rootkits の基本的なドライバー (つまり、Hello World ドライバー) の作成に関する本を実際に楽しみました。OSR オンラインは優れています。Windows NT Device Driver Development は古いものですが、今でも素晴らしいものです。OSR には、素晴らしい書籍の古典的な復刻版があります。
実際には、Microsoft の WDK に付属しているサンプルは、おそらく多くの質問に答えてくれるでしょう。
すぐにビルドして実行できるWDK サンプル SIOCTLが最善の策です。わずか数百行のコード (ほとんどがコメントとスペース) で、ユーザー <==> カーネル通信方式の公式な方法である Windows I/O モデルをすばやく開始して理解することができます。
すべての Windows ドライバー学習者は、これから始める必要があります。
書籍について: 「Windows Driver Foundation を使用したドライバーの開発」は、ドライバーのプログラミングを学習するための回答として推奨されています。