この質問は、Google で検索することで解決できることを知っています。しかし、プログラムされたドライバーにアプリケーションを接続するために、夜をかけて検索しました。検索を開始すると、ユーザーモードとカーネルモードの間で情報を共有する方法に関するいくつかのテクニックを読みました。これらのテクニックは次のとおりです。
• I/O リクエスト
• 同期と通知
• 共有ハンドル
• 共有メモリ
このホワイト ペーパーでは、これらの手法について説明します。しかし、私は混乱しています!!! どのテクニックが一番いいですか???I/O 要求の場合: ええと...、私はそれを完全には理解していませんが、アプリケーションが I/O 操作を要求するたびにデータを交換することについて (簡単に) 知っていることと、このmsdn の記事では I/O 制御コードについて説明しています.
私は多くの複雑な記事を読みましたが、ドライバーとのデータ交換で遅れることなくプログラムを高速に動作させるための正しい方法にたどり着く道がわかりません。
だから、私は尋ねました:私のアプリケーションをカーネルに接続する最良の方法は何ですか?? そして、私は「最善の方法」を意味します。これは私のドライバーコードです:
#include <ntddk.h>
VOID
Unload(
IN PDRIVER_OBJECT DriverObject
)
{
DbgPrint("Driver Unloaded");
};
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPathName
)
{
DbgPrint("Driver Loaded");
DriverObject->DriverUnload = Unload;
return STATUS_SUCCESS;
};
ご覧のとおり、ドライバーは単純です。ロード時に「Driver loaded」を出力し、アンロード時に「Driver unloaded」を出力する以外は何もしません。私が欲しいのは、このドライバーがユーザーから受信して印刷できるようにし、プログラムがドライバーから受信して印刷できるようにすることだけです。私はコードを作成したくありません。あなたから私を導きたいだけです。私は何をしなければなりませんか? それを行う最良の方法は何ですか?
どうもありがとうございます