Здравствуйте, Alexey Frolov, Вы писали:
AF>А что вы имеете ввиду под "минифильтр иногда возвращает странные адреса"? Можете пример кода набросать и указать где неправильные адреса и как вы к ним обращаетесь?
Обычный коллбак-фильтр реестра. При обработке RegNtQueryValueKey (ссылка на описание класса
http://msdn.microsoft.com/en-us/library/ff560991(v=VS.85).aspx). В некоторых случаях ResultLength (A pointer to a variable that receives (from the system) the amount of valid data, in bytes, in the KeyValueInformation buffer) указывает куда-то в глубину космоса.
Обработка полученной информации была взята из RegMon-а, и выглядит в общих чертах так:
switch(KeyValueInformation):
case KeyValueFullInformation:
{
PKEY_VALUE_FULL_INFORMATION FullInfo = (PKEY_VALUE_FULL_INFORMATION)KeyValueInformation;
switch(FullInfo->Type) //тип выявляется корректно
{
case REG_SZ:
case REG_EXPAND_SZ:
case REG_MULTI_SZ:
{
WCHAR s[256];
s[0]=((PWCHAR)((PCHAR) FullInfo + FullInfo->DataOffset))[0]; //допустим если сделать так, то вылетит БСОД.
}
..............
}