コンテキスト情報の指定
構成マネージャーは、レジストリーフィルタリングドライバーがレジストリ操作にコンテキスト情報を割り当てるためのいくつかの方法を提供します。 レジストリフィルタードライバーでは、以下のことができます:
RegistryCallback ルーチンにコンテキスト情報を割り当てます。
ドライバーが CmRegisterCallback または CmRegisterCallbackEx を呼び出してレジストリ操作の通知を登録するとき、ドライバーはドライバー定義のコンテキスト値を指定できます。 構成マネージャは、構成マネージャがルーチンを呼び出すたびに、このコンテキスト値をドライバーの RegistryCallback ルーチンに渡します。
このコンテキスト情報は、Windows XP からサポートされています。
コンテキスト情報をレジストリ操作に割り当てます。
ドライバーは、ドライバーの RegistryCallback ルーチンが受け取る各 REG_XXX_KEY_INFORMATION 構造の CallContext メンバーに、操作固有のコンテキスト情報を格納できます。 ドライバーがレジストリ操作の事前通知と事後通知の両方を受け取る場合、 REG_POST_OPERATION_INFORMATION 構造は、適切な事前通知構造へのポインターを含みます。 RegistryCallback ルーチンが REG_POST_OPERATION_INFORMATION 構造を受け取ると、その構造の CallContext メンバーは事前通知構造の CallContext メンバーと一致します。
これらの構造の CallContext メンバーは、Windows Vista から使用できます。
コンテキスト情報をレジストリキーオブジェクトに割り当てます。
RegistryCallback ルーチンは、特定レジストリ キー オブジェクトにコンテキスト情報を割り当てることができます。 RegistryCallback ルーチンが CmSetCallbackObjectContext tを呼び出してキーオブジェクトにコンテキスト情報を割り当てる場合、そのオブジェクトに対するすべての操作に対するその後の事前通知と事後通知には、各 REG_XXX_KEY_INFORMATION 構造体の ObjectContext メンバーにコンテキスト値が含まれます。 ドライバーが複数の RegistryCallback ルーチンを提供する場合、ドライバーは、1 つのレジストリキーオブジェクトに対して、各ルーチンに異なるコンテキスト情報を割り当てることができます。
ドライバーが CmSetCallbackObjectContextを呼び出した場合、ドライバーの RegistryCallback ルーチンは、キーオブジェクトのハンドルがクローズされた後に RegNtCallbackObjectContextCleanup 通知を受け取ります。 この通知に応答して、ルーチンは、オブジェクトのコンテキストに割り当てたリソースをリリースする必要があります。 RegistryCallback ルーチンの Argument1 パラメータが RegNtCallbackObjectContextCleanupの場合、 Argument2 パラメータは、コンテキストへのポインターを含む REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION 構造体へのポインターです。
CmSetCallbackObjectContext ルーチンと RegNtCallbackObjectContextCleanup 通知は、Windows Vista から使用できます。