![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Всем привет.
Столкнулся с такой проблемой. Есть программа. Есть файл с конфигурацией, там все храниться. Его лочит одна плохая программа. И когда моя программа хочет туда записать данные, то она просто падает, так как там еще и ключи шифрования и т.д. Так вот вопрос, как залочить файл так, что бы в него можно было писать данные. Причем нужно именно так (в силу обстоятельст и особенности программы), будет файл, который запускаеться при запуске программы и лочит файл с настройками от всех, но когда основной программе нужно будет записать данные, то будет подаваться комманда и файл защитник будет разрешать запись именно этой программе и никому более вообще. Файл защитник должен быть просто файлом, а не драйвером, службой и т.д. Мне бы примерчик Заранее спасибо. |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Добавлено через 3 минуты и 35 секунд Вообще с файлами нужно работать примерно в таком ключе
Тогда все будет безопасно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| ZBugz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Ну это точно 100% работает на запись, если вредная программа к нему обратиться ? И как его разлочить на время для моей программы, что бы плохая программа не успела влезть, точнее вообще не могла влезть или пусть лазиет, тока записи не мешает ? |
||||
|
|||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Попробуйте, такой файл нельзя даже блокнотом открыть.
Так не нужно разлочивать, просто используйте файловый поток F : TFileStream - для своих операций с данными. Аналогичный код можно сделать на API, если у вас работа с файлом на WinApi. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| ZBugz |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
А вот это что то не понял, мне бы в примере Добавлено через 50 секунд
Да вот незнаю, просто программа не моя, даже не знаю как там все работает. |
||||||
|
|||||||
| CodeMonkey |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
Я так понял, у него два процесса.
Если всё происходит в одном процессе - то как и сказал Alexeis. А если в разных, то я бы не разлочивал, а просто делал бы DuplicateHandle описателя файла во все свои процессы, которым нужен доступ. Ну и плюс синхронизация по мьютексу, чтоб одновременно никто в файл не писал. Тогда все свои имеют доступ с расклонированного хэндла, что ты открыл "F := TFileStream.Create('c:\myfile.txt', fmOpenReadWrite or fmShareExclusive)", а все прочие - обламываются из-за fmShareExclusive. Добавлено через 1 минуту и 16 секунд
А может быть всё же стоит рассказать о том, что у вас происходит? Ну нет здесь телепатов. Сколько у вас процессов? Кто из них ваш? Чей код можете менять? И т.п. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||||
|
|||||||
| ZBugz |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Щас обьясню еще раз Короче, есть программа, написанная не мною, она хранит множество настроек в файле. Есть программа конкурентов, они тырят эти настройки и лочат файл, а когда наша программа пытаеться что то туда записать при завершении работы, она обламываеться и ломаеться в итоге, потому что там еще ключи шифрования. Программист гавнюк, да и особо не разбираеться в том коде, потому что он достался ему по наследству от другова программиста. Ну вот родилась мысль, при страте программы, запускать мой защитник файла, и никого не пускать, кроме нашей программы, в тот момент когда ей надо туда записать данные. Так как тут я чайНеГ |
||||||||
|
|||||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Без вмешательства в код той проги врядли выйдет...
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ZBugz |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Вот кусок кода компонента, я там все переправил на fmOpenReadWrite or fmShareExclusive, но пока еще не перекомпелировали. Это сообщение отредактировал(а) Rrader - 28.4.2009, 15:10 |
||||
|
|||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
А если переименовать файл настроек и хранить в другом месте?
|
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
Ну мысль была такая, но че то видимо не осили программист. Я так и предлагал, что бы каждый раз , к примеру, менялось название файла, ну и само название куда нить шифровать. В итоге был послан на х... Это сообщение отредактировал(а) ZBugz - 24.4.2009, 12:16 |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 38 Всего: 89 |
А ваша программа (основная, не "защитник") на постоянке работает или: запустился, конфиг чё-то почитал, закрылся?
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Проблема ещё может быть в том, что файл настроек может быть заблокирован ДО запуска вашей программы.
Добавлено через 35 секунд Можно попробовать ещё вариант с удалением из процессов вражеской программы. |
|||
|
||||
| Valechik2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 24.4.2009 Репутация: нет Всего: нет |
А есть такая функция API- LockFile называется, пока твоя прога держит его хэндл никто ентот файл не откроет
|
|||
|
||||
| ZBugz |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
В том то и дело что он постоянно открыт и не закрываеться. Добавлено через 3 минуты и 6 секунд
Это тоже есть. Но в этом случае ошибка то будет, но программа работает, если файл разлочить. Хотя я тут вчера тести, залочил файл, все комбинации перепробывал с программой, не падает. Мне уже кажеться, что на самом деле два варианта: или программа в какой то момент файл упускает и закрывает или другая программа тупо портит файл, когда программа его не открыла еще.
Нельзя, политика фирмы Добавлено через 5 минут и 25 секунд
Почитаю на досуге. В любом случаае мне бы примерчик того, как впихнуть комманду защитнику на разлочивание файла, когда основной программе понадобиться что то туда записать, но только именно ей, а не кому другому. |
||||||||
|
|||||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |