Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > кто пытается удалить мой файл


Автор: AHTOLLlKA 22.5.2009, 13:47
всем привет, суть такая:

моя программа использует временный файл c:\temp\12312.tmp

и какойто сторонний процес пытается его открыть, изменить, удалить.

как определить что за процес это делает ??

Автор: Alexeis 22.5.2009, 14:00
Цитата(AHTOLLlKA @  22.5.2009,  12:47 Найти цитируемый пост)
как определить что за процес это делает ?? 

Может антивирус?

Автор: SneG0K 22.5.2009, 14:04
Цитата(Alexeis @  22.5.2009,  13:00 Найти цитируемый пост)
Может антивирус? 

Не всегда обязательно. Может это пользователь удаляет...
AHTOLLlKA, как узнать, не знаю, но могу тебе предложить права выставить...

Автор: Alexeis 22.5.2009, 14:11
  В данной конкретной ситуации можно посмотреть программой Unlocker. Запретить чтобы другие не лазили можно выставив флаг fmOpenShareExclusive при открытии или создании файла (CreateFile, TFileStream, OpenFile). И еще момент, если нужно сгенерировать уникальное имя для временного файла, то лучше воспользоваться функцией GetTempFileName

Автор: AHTOLLlKA 22.5.2009, 14:11
Цитата(Alexeis @ 22.5.2009,  14:00)
Цитата(AHTOLLlKA @  22.5.2009,  12:47 Найти цитируемый пост)
как определить что за процес это делает ?? 

Может антивирус?

нет, антивируса нету, ни фаеров ни каких других сторонних "предметов" которые могут помешать

файл создан мной, и заблокирован

Код

procedure TForm1.Button1Click(Sender: TObject);
var FS: TFileStream;
begin
  FS:=TFileStream.Create('c:\1.txt', fmOpenRead, fmShareDenyNone);
end;


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

Автор: Alexeis 22.5.2009, 14:15
чтобы запретить нужно сделать 
Код

FS:=TFileStream.Create('c:\1.txt', fmOpenRead or fmOpenShareExclusive);

  Определить реально, в худшем случае можно поставить хук на апи функцию, но думаю что ID процесса получить можно (забыл название функции), затем перечисляя процессы выяснить кому принадлежит.

Автор: AHTOLLlKA 22.5.2009, 14:19
Цитата(Alexeis @  22.5.2009,  14:15 Найти цитируемый пост)
  Определить реально, в худшем случае можно поставить хук на апи функцию, но думаю что ID процесса получить можно (забыл название функции), затем перечисляя процессы выяснить кому принадлежит.


хук к сожалению не вариант ибо метод через чур....


вот в идеале получить pid процесса....

Автор: Alexeis 22.5.2009, 15:05
Цитата(AHTOLLlKA @  22.5.2009,  13:19 Найти цитируемый пост)
вот в идеале получить pid процесса.... 

  Гм.. чуток погуглил есть функция FsRtlAreThereCurrentFileLocks, FsRtlGetNextFileLock, но все это пашет только в kernel mode. 

Автор: AHTOLLlKA 22.5.2009, 15:21
Цитата(Alexeis @  22.5.2009,  15:05 Найти цитируемый пост)
  Гм.. чуток погуглил есть функция FsRtlAreThereCurrentFileLocks, FsRtlGetNextFileLock, но все это пашет только в kernel mode. 

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

вот нашел ReadDirectoryChangesW
в принцыпе подойдет для слежения за файлом...
но по нему не узнать кто изменяет файл...

Автор: Alexeis 22.5.2009, 16:01
Цитата(AHTOLLlKA @  22.5.2009,  14:21 Найти цитируемый пост)
хм.. почемуто мне кажется что это нето, он определит заблокирован файл или нет вроде как..

  Можно узнать зачем это вообще надо? Может есть более простое решение? На счет программ я почитал про 3 аналога, все имеют драйвер в режиме ядра, у одной дополнительно еще хук.

Автор: AHTOLLlKA 22.5.2009, 17:26
я хотел написать мини тулзу которая будет следить за важными файлами, и при попытке кого либо изменить или удалить их... оповещал бы...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)