![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Интересно, что возвращает эта функция. Большая просьба к freezeman обращать внимания не только на ошибки компиляции, но и на предупреждения... Добавлено @ 19:50 Как Вы это определили? Это сообщение отредактировал(а) feodorv - 11.5.2012, 19:50 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| freezeman |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Я пробовал и VOID тип указывать... при BOOL возвращаю TRUE или FALSE в зависимости от результата заполнения...
Я считываю определенный файл, прежде спроецированный в память и возвращаю true... но если изменить файл на диске (т.е. спроецированный и на диске отличаются), то программа считывает файл на ЖД, хотя код заполнения буфера выполняется...
|
||||||
|
|||||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Зачем? Вам ведь нужно всё указать так же как у оригинальной ReadFile. А там стоит однозначное BOOL
Для своей обработки, да, возвращаете. А здесь:
??? Так вывод сделать очень сложно, так как после внесения изменений в файл они скорее всего отразятся и на проекции файла (станут когерентными). Windows не гарантирует когерентности, но, тем не менее, скорее всего когерентность будет. Но тут я Вам сказать ничего определённого не смогу, так как с Detour не знаком... Добавлено через 56 секунд Всегда? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Здесь вызывается оригинальная функция, если файл, с которого происходит чтение, не найден в проекции.
После изменение файла на диске, я в отдельном приложении проверяю проекцию, она не изменяется... Я сделал проекцию в памяти, т.е. сначала считал файл, а потом эти данные отразил в память с параметром CreateFileMapping(INVALID_HANDLE_VALUE, ... таким образом, к файлу на диске проекция не привязана... Я когда изучал перехват, рассматривал примеры, читал документацию, я так понял, что функция перехватывается, т.е. заменяется оригинальная на мою, а не сначала моя функция ReadFile отрабатывает, потом оригинал.... Думаю здесь что-то не так в перехвате, не может перехват таким образом работать, это очень не полезно!! |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Вынесу в отдельную тему сюда (( а то первоначально была о другом ...
|
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
А где return значения, которое возвращается из оригинальной функции? Или всё равно, что она вернула? Тогда какое возвращаемое значение уйдёт пользователю из MyReadFile? Компилятор разве не вопит, что не все "control paths return a value"? Так же важный вопрос:
Что ж... Тут я не советчик... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Не вопит, я проверял и так: return RealReadFile...
Нет, если режим Overlapped, то получаем смещение. Это сообщение отредактировал(а) freezeman - 12.5.2012, 11:03 |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Странный, однако, у Вас компилятор. Обязательно нужно return RealReadFile... А если не Overlapped, то смещение всегда 0??? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
да, это правильно.
Ну я думаю, что да. Неправильно? По поводу перехвата ReadFile... Я выяснил, что считывание происходит через так называемую прослойку ntdll.dll, поэтому и перехват был некорректный... Это сообщение отредактировал(а) freezeman - 12.5.2012, 14:27 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
||||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Неправильно. Нужно узнать смещение из описателя файла (пользуясь функцией SetFilePointer) Удалось исправить? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| freezeman |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Нет, но я знаю как... пока времени нет на исправление
Спасибо, попробую... Нужно узнать смещение и исходя из него считывать (позиция будет в мой shift записана), так? |
||||
|
|||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Конечно. Аналогично Overlapped, только придётся повозиться, чтобы узнать смещение... Когда исправишь, напиши, что и как исправил, ладно? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| freezeman |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Ок, обязательно. Спасибо за помощь. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |