I implement a file system filter driver based on registry callback mechanism
provided by MS.
For example, I filter some “RegDeleteValueKey” operations according to
specific key path and name I am interested, I do this like the following:
NTSTATUS RegistryCallback( IN PVOID CallbackContext, IN PVOID Argument1, IN
PVOID Argument2 )
{
REG_NOTIFY_CLASS Type;
PVOID pContext = CallbackContext;
Type = (REG_NOTIFY_CLASS)Argument1;
switch( Type )
{
case RegNtPreDeleteValueKey:
{
PREG_DELETE_VALUE_KEY_INFORMATION pDeleteValue =
(PREG_DELETE_VALUE_KEY_INFORMATION)Argument2;
UNICODE_STRING TargetRegistryName;
RtlInitUnicodeString(&TargetRegistryName,g_wRegPath);
if ( 0 ==
RtlCompareUnicodeString(pDeleteValue->ValueName,&TargetRegistryName,TRUE) )
{
return STATUS_ACCESS_DENIED;
}
}
break;
default:
break;
}
return STATUS_SUCCESS;
}
I found that pDeleteValue->ValueName is only the key name, not including
path,
How do I get full key path? what inside pDeleteValue->Object?
thanks!