Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: драйвер фильтр файловой системы и теневое копирование  (Прочитано 6577 раз)
0 Пользователей и 1 Гость смотрят эту тему.
marik
Гость
« : 26-01-2008 19:54 » 

Доброго времени суток!!!
Есть драйвер-фильтр файловой системы, который перехватывает MajorFunction драйвера fastfat и есть очень большое желание прикрутить к нему еще и теневое копирование(т.е. сохранение в скрытой директории точных копий файлов копируемых на диск например). В общих чертах я знаю что надо следить за IRP_MJ_WRITE, FastIoWrite.  Но это лишь мое отдаленно представление. Как различить файл уместился целиком в буфер или это только часть какого нить большого файла???  надо ли отслеживать создание FileObject
в общем буду благодарен за любую помощь в освещении этой темы

Записан
ZeRg
Гость
« Ответ #1 : 08-04-2008 12:06 » 

Здравствуй. из входящего Ирпа можно получить FileObject.
И уже по нему судить о файле. Вот так, например:
Код:
	PFILE_OBJECT pFileObject = Irp->Tail.Overlay.OriginalFileObject;

if (NULL == pFileObject)
{
pFileObject = irpSp->FileObject;
}

if (NULL == pFileObject && (Irp->Flags & IRP_ASSOCIATED_IRP) && (Irp->AssociatedIrp.MasterIrp))
{
pFileObject = Irp->AssociatedIrp.MasterIrp->Tail.Overlay.OriginalFileObject;
}
Записан
amisto0x07
Гость
« Ответ #2 : 28-11-2008 13:23 » 

в WDK есть пример sfilter. Из его состава тебе пригодятся функции по работе с именами файлов, над которыми проводятся операции, NLGetFullPathName (см. namelookup.c)
Записан
amisto0x07
Гость
« Ответ #3 : 28-11-2008 13:46 » 

чтоб скопировать файл, для начала нужно получить его хэндл. ==> Нужно обрабатывать IRP_MJ_CREATE - объект файла можно найти в PIO_STACK_LOCATION:
Код:
PIO_STACK_LOCATION stackIrp = GetCurentIrpStackLocation(Irp);

PUNICODE_STRING fileName = stackIrp->FileObject->FileName;

//
// TODO
//
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines