テクニカル ドキュメント #45



Doc ID: 45
製品: WinDriver
Version:  --

COPY_TO_USER_OR_KERNEL および COPY_FROM_USER_OR_KERNEL とは何ですか?また、いつ使用しますか?

COPY_TO_USER_OR_KERNEL および COPY_FROM_USER_OR_KERNEL マクロは、Kernel PlugIn 内からユーザー モードのメモリ アドレスにアクセスする際に、ユーザー モードのメモリ アドレスから/へデータ (必要に応じて) をコピーするのに使用されます。データをコピーすることによって、たとえユーザー モード プロセスのコンテキストが、IO オペレーションの最中に変更しても、ユーザー モードのアドレスを正常に使用することができます。これは特に長いオペレーション (ユーザー モード プロセスのコンテキストの変更) には最適です。
[コピーを行うのにマクロを使用することで、対応するすべての OS の汎用的な解決策となります]。

KP_IntAtIrql() または KP_IntAtDpc() 関数ないからユーザー モード データへアクセスする場合、これらの関数を実行する前に、先ず、Kernel PlugIn の変数にデータをコピーしてください。

WinDriver\include\kpstdlib.h ヘッダ ファイルに、COPY_TO_USER_OR_KERNEL および COPY_FROM_USER_OR_KERNEL マクロを定義します。

COPY_TO_USER_OR_KERNEL マクロを使用した例、サンプルの kptest.c ファイル (WinDriver\kerplug\kptest\kermode ディレクトリ以下) の KP_Call() の実装を参照してください。または、DriverWizard で生成した \kerplug\kp_xxx.c ファイル (WinDriver v5.20 以降) の KP_XXX_Call() の実装を参照してください

ユーザー モードと Kernel PlugIn ルーティン (例、KpIntAtIrql() および KpIntAtDpc()) 間のデータ バッファの共有に関しては、テクニカル ドキュメント #41 を参照してください。