Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реакция ОС,на закрытие файла 
V
    Опции темы
MakedoneZ
Дата 22.1.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

Репутация: нет
Всего: нет



При нажатии на мои файлы,выскакивает прога,запрашивает ключ шифра,расшифровывает файл.
Далее мне надо,чтоб при закрытии файла,он заново зашифровывался.
Т.е. надо чтоб прога "ждала" закрытия файла,а затем начала шифровку.
Но проверять постоянно таймером,открыт ли файл это не то.
Можно ли как-нибудь моему приложению получить сообщение от ОС,что конкретный файл был только что закрыт?
Если да,то как? Если можно,приведите прожалуйста примитивный пример.
Спасибо... 
PM ICQ   Вверх
MetalFan
Дата 22.1.2007, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



ОС не посылает никаких сообщений при "закрытии" файла, AFAIK.
кто файл открывает? жди завершения процесса, что этот файл открыл. других вариантов в голову не приходит.

Это сообщение отредактировал(а) MetalFan - 22.1.2007, 11:09


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Sunvas
Дата 22.1.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(MetalFan @  22.1.2007,  11:07 Найти цитируемый пост)
AFAIK

Как это расшифровывается? sokr.ru ничего не находит.  smile 


MakedoneZ, что понимаешь под "закрытием файла"? Что значит файл "закрыт"????
Опиши подетальнее свою прогу, ибо понять тебя невозможно.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Romikgy
Дата 22.1.2007, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



имхо лучше делать это в памяти , открыл файл , записал в память , расшифровал, поработал , зашифровал , сохранил в файл


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MetalFan
Дата 22.1.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Sunvas, AFAIK - As Far As I Know (на сколько я знаю)

Romikgy, поиграем в телепатов. я понял, что автору надо открыть другое приложение в котором должен открыться уже расшифрованный файл...

Это сообщение отредактировал(а) MetalFan - 22.1.2007, 13:30


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MakedoneZ
Дата 22.1.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

Репутация: нет
Всего: нет



У меня программа шифровки файлов.
1)Файл шифруется
2)В конец файла вписываются данные о том,какое у него было расширение + номер алгоритма из крипто-библиотеки.
3)Т.к. файл теперь имеет "мое" расширение,то при его открытии запускается моя прога.
(естественно мое расширение зарегистрировано в реестре,со всеми нужными данными).
4)При открытии файла защищенного моей программой,выскакивает InputBox,который предлагает ввести ключ шифра.
5)Из файла вынимаются первичные данные о  его истинном расширении + об алгоритме шифровки.
С учетом ключа файл расшифровывается соответствующим алгоритмом.Этот файл запускается при помощи ShellExecute.И юзер с ним работает,возможно вносит изменения.
6)Моя программа,которая расшифровала файл при его открытии юзером,тихо сидит и ожидает его закрытия.
7)Как только поступает сигнал о том,что юзер закрыл этот файл,она начинает в тихом режиме зашифровывать его обратно.Затем закрывается.


Иными словами,файл остается расшифрованным лишь в момент его работы с юзером у которого есть ключ.Функция шифрования построена так,что она берет данные из одного потока,а зашифрованные данные помещает в другой.В данном случае данные берутся из TFileStream,пишутся в TMemoryStream.
Чтоб не повредить файл,в случае,если вдруг во время расшифровки произойдет ошибка.
А иначе получится что часть файла зашифрована,а чать - открытый текст. 
Также осуществляется проверка целостности и прочее,прочее,но это все не имеет отношения к моему вопросу.Я лишь постарался как можно обширнее описать все.


И вот мой вопрос:
Прочитайте пункт 6.
Как мне получить сообщение о том,что открытый и расшифрованный файл был только что закрыт.Что работа с ним юзером преостановлена.

Добавлено @ 14:17 
Я хочу узнать когда закрылся ЧУЖОЙ файл,открытый МОЕЙ прогой,чтоб зашифровать его заново.
PM ICQ   Вверх
Romikgy
Дата 22.1.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Цитата(MakedoneZ @  22.1.2007,  13:13 Найти цитируемый пост)
Прочитайте пункт 6.
Как мне получить сообщение о том,что открытый и расшифрованный файл был только что закрыт.Что работа с ним юзером преостановлена.

WaitForSingleObject+INFINITE


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
dumb
Дата 22.1.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



MakedoneZ,
можно, например, перехватить CreateFile и CloseHandle, "отловить" хэндл твоего файла, и ждать пока он приплывет в CloseHandle(возможны "косяки", если открывающая программа будет пользовать всякие ReOpenFile/DuplicateHandle)...

но imho в данном случае таймер - самое оно. smile
PM MAIL   Вверх
MakedoneZ
Дата 22.1.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

Репутация: нет
Всего: нет



Цитата(dumb @  22.1.2007,  15:42 Найти цитируемый пост)
но imho в данном случае таймер - самое оно. 

А он не будет тормозить всю систему?
PM ICQ   Вверх
dumb
Дата 22.1.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(MakedoneZ @  22.1.2007,  15:59 Найти цитируемый пост)
А он не будет тормозить всю систему?

нет, не будет(omg, и где набрались то такого?!). интервал ставь где-то 200-500.


PM MAIL   Вверх
MakedoneZ
Дата 23.1.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 22.12.2006
Где: Азербайджан,солне чный Баку

Репутация: нет
Всего: нет



Цитата(Romikgy @  22.1.2007,  14:21 Найти цитируемый пост)
WaitForSingleObject+INFINITE 

Все же реализовал этим способом:
Код

procedure WaitForFileClose(Path: AnsiString);
var
 ShellExecuteInfo: TShellExecuteInfo;

begin
 FillChar(ShellExecuteInfo, SizeOf(TShellExecuteInfo), 0);
 with ShellExecuteInfo do begin
   cbSize := Sizeof(TShellExecuteInfo);
   fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
   Wnd := Application.Handle;
   lpFile := PChar(Path);
   lpVerb := 'Open';
   nShow := 1;
 end;

 if ShellExecuteEx(@ShellExecuteInfo) then
   WaitForSingleObject(ShellExecuteInfo.hProcess,INFINITE);
end;


Всем спасибо за помощь.  smile 

Это сообщение отредактировал(а) MakedoneZ - 23.1.2007, 14:34
PM ICQ   Вверх
dumb
Дата 23.1.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



вообще, метод "кривой", потому что "закрытие файла" != "закрытие приложения". я могу закрыть файл и продолжать работу в ворде. потом, ты проверял что будет, если приложение уже открыто до того, как ты его запустишь со своим файлом?

если ты пишешь только для себя, то "и так сойдет"... в противном случае купи каску. smile
PM MAIL   Вверх
Sansa
Дата 23.1.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Ну, можно проверять сам файл, например попытками открыть его с Share Deny Read в цикле (потоке). И при успешном открытии предполагаем, что приложение уже "отпустило" файл.

Но мне кажется, что надежнее будет перехватывать системные функции, как это делают вирусы и антивирусы. Но тохда есть шанс, что прогу покиляют те же антивирусы по подозрению в саботаже.
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.