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

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

il
Offline Offline
Пол: Мужской

« : 29-08-2007 17:04 » 

Всем привет!

Я написал фильтр драйвер который фильтрует "\Device\LanManRedirector". Фильтр работает. У меня есть два

вопроса:

1. Когда я перепсываю файл в какой-то Share, я хочу узнать путь к файлу куда он будет записан. На сколько я понимаю это делается в IRP Write, да? Кто-то может подсказать как я нахожу путь куда файл записывается?

2. Могу ли я знать размер файла который будет записан?



Зарание благодарю!
Записан
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #1 : 30-08-2007 05:06 » 

Я нашел как знать название файла. Я это делаю вот так:

PIO_STACK_LOCATION pIoStackIrp = NULL;
UNICODE_STRING FileName;

pIoStackIrp = IoGetCurrentIrpStackLocation(Irp);
RtlInitUnicodeString(&FileName, pIoStackIrp->FileObject->FileName.Buffer);

В FileObject есть переменная Size - Размер чего она содержит?

Мне просто надо знать размер файла...

Спасибо!
Записан
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #2 : 30-08-2007 18:18 » 

Я нашел как узнать размер файла, но этот размер правельный только для маленьких файлов. Когда я переписываю большой файл я получаю несколько IRP и в каждом ~61000 Bytes. Могу ли я знать зарание весь размер файла который будет переписан?

Спасибо!
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 31-08-2007 08:34 » 

можете, раз название файла вы знаете)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #4 : 31-08-2007 13:36 » 

Я знаю что я могу, но мне надо знать сколько информации будет вообще переписанно, а не сколько переписывается в данном пакете...
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 31-08-2007 15:17 » 

я имел в виду что раз название вам известно, сами в драйвере откройте файл и посмотрите его длинну)
правда есть шанс что этот запрос все равно через ваш фильтр пойдет...
а сколько будет переписано... большой вопрос. пользователь ведь не обязан весь файл целиком читать. может ему только два байта требуются)
« Последнее редактирование: 31-08-2007 15:19 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #6 : 31-08-2007 16:51 » 

Просто я обратил внимание на то что если в Write IRP я проверяю сколько должно записатся, то если файл маленький то размер правельный, а если файл большой, то IRP Write вызывается несколько раз, и каждый раз записывается часть файла. Но мне нужно зарание знать размер всего файла.

Я надеюсь что есть способ это проверить...
« Последнее редактирование: 31-08-2007 18:46 от HighLander » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 31-08-2007 18:17 » 

HighLander, для чего-для чего есть способ ? )))
Записан

HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #8 : 31-08-2007 18:47 » 

Я имел ввиду проВерить... Улыбаюсь
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 02-09-2007 10:40 » 

HighLander, боюсь что напрямую способа проверки полного размера может и не быть.
формирование данных запросов IRP занимается более высокий уровень ОС... тот, который разбивает API запрос ReadFile на несколько IRP.
он в стеке гораздо выше. это вам тогда не IRP надо перехватывать, а hook на ReadFile ставить)
кроме того еще раз повторяю, что даже при вызове ReadFile может считываться НЕ полная длинна файла) а допустим он может считываться блоками. или вообще не до конца.
смотрите сами)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
HighLander
Постоялец

il
Offline Offline
Пол: Мужской

« Ответ #10 : 02-09-2007 13:50 » 

Хорошо. Огромное спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines