Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать какой-то файл, скажем – «C: Test.cnf» заблокированным?!


Страницы:   1 2

~(;_;)~ ©   (2001-12-28 14:48:00) 

Как сделать какой-то файл, скажем – «C:\Test.cnf» заблокированным, то есть
Что бы его некто кроме как из моей программыне мог открыть, удалить, переместить, или переименовать!
Заранее благодарен!


Fellomena   (2002-01-03 10:57:00) [1]

2 Yaro: ??? про движение планет ? - извини, не помню, imho перепутал меня с кем-то =)
...или я совсем память потеряла 8)


Yaro   (2001-12-30 14:11:00) [2]

>> Almaz - Это сильно сложно, и, если на то пошло, можно пользоваться уже готовыми программами, но для нас, рядовых программистов, наиболее подходящий способ - это OpenFile/CloseFile - Ето наиболее удобный способ, помню я еще прогу на 3-ей делфи писал, чтоб никто мои файлы на работе не трогал :)

>> Fellomena - Помнишь про движение планет? Извини, в твоем случае я помочь не могу, у тебя вся изначальная система для этого не была предназначена... Надо было переделывать весь алгоритм, но времени у меня было не так много... Так что извини...


Almaz   (2001-12-30 00:30:00) [3]

Господа, единственным вариантом абсолютной защиты файла будет написание собственного драйвера, который затем прописывается в системе и, как и положено драйверу, загружается вместе с виндой. В этом драйвере используя IFS менеджер ставим hook на все файловые операции - и все.
Таким же образом можно защитить и каталог.

Удачи.


Вадим   (2001-12-29 15:26:00) [4]

>Fellomena (29.12.01 11:28)
>(можно конечно hook вешать, но возни с ними...)

И на что же hook вешать?


panov   (2001-12-29 11:49:00) [5]

>Aleksey Pavlov (29.12.01 11:46)
Вот про это разговор и идет.
Наконец-то автор получил ответ:-)
"написать dll которая будет загружаться в контексте процесса Explorer-a"


Aleksey Pavlov   (2001-12-29 11:46:00) [6]

>> panov:
А я и не говорил, что после уничтожения процесса, открывшего файл таким образом, файл будет оставаться заблокированным.
Но что мешает вам, к примеру, написать dll которая будет загружаться в контексте процесса Explorer-a и с которой ваша программа будет работать ?
В итоге, ваша программа передаёт в dll имена файлов, доступ к которым должен быть ограничен и завершает свою работу, а dll остаётся в памяти и работает, вплоть до уничтожения процесса Explorer-а.


panov   (2001-12-29 11:33:00) [7]

>Aleksey Pavlov (29.12.01 11:25)
После окончания выполнения программы файл освобождается.
Приведи рабочий пример, как после выхода из программы файл остается заблокированным.


Fellomena   (2001-12-29 11:28:00) [8]

Действительно, способ предложенный Алексеем работает - я не раз им пользовалась.
Но я слышала, что с помощью Stream-ов можно по тому же алгоритму заблокировать каталог, но когда в конструктор класса TFileStream передаю имя каталога - возникает исключение 8(
Есть мысли по этому поводу.
(можно конечно hook вешать, но возни с ними...)


gek   (2001-12-29 11:28:00) [9]

>>Aleksey Pavlov
Практически то же FileOppen


Aleksey Pavlov   (2001-12-29 11:25:00) [10]

panov, SergVlad неправы.
Про TFileStream слышали ?
Так вот:

var
FileToLock: TFileStream;
begin
FileToLock:=TFileStream.Create("myfile.txt", параметр);

Параметр - это способ открытия файла, посмотрите в help-е, не поленитесь, этот параметр может быть таким, что файл открывается только на чтение, только на запись и на то и на то, а так жетак, что никакоеиное приложение вообщене может использовать его.
Не забудте сделать FileToLock.free; когда надо будет "освободить" файл.


Alx2   (2001-12-29 09:54:00) [11]

В поддержку panov"a:
В теории алгоритмов строго доказан факт, что невозможно построить алгоритм, способный доказать корректность любых других алгоритмов. (Под корректностью можно понимать хотя бы конечное время работы алгоритма).


SergVlad   (2001-12-29 09:45:00) [12]

Для платформ Форточек panov абсолютно прав, если задача ставиться в общем случае.


panov   (2001-12-29 08:12:00) [13]

>~(;_;)~ (28.12.01 20:34)
"Panov не прав по любому, сделать можно все – главное знать как это делать!"

- Не все. Например, напиши программу, которая найдет ошибки в ядре WINDOWS, а также защитит твой компьютер от любых вирусов.

Если я не прав, тогда ответь - в чем?
Ты что, свою программу вечно собираешься держать в рабочем состоянии?
Т.е. при загрузке Windows запустил свою программу, и будет она работать, пока пользователь компьютер не выключит?
А если он твою программу убьет?
Да же если "скрытый" сервис напишешь - и его можно убить.


Song   (2001-12-28 20:53:00) [14]

hMYLockedFile в Ващем случае это просто переменная. А так как функция OpenFile открывает файл и возвращает хэндл, то её тип - целый.


~(;_;)~   (2001-12-28 20:34:00) [15]

Panov не прав по любому, сделать можно все – главное знать как это делать!
Я тут нашел что-то вот:

hMyLockedFile := OpenFile( "c:\test.cn", ofStruct, OF_CREATE Or OF_READWRITE Or OF_SHARE_EXCLUSIVE );

Но почему-то этот код не работает, говорит что не знает что такое hMyLockedFile!
Может кто вспомнил?
Та подскажет мне, что ссс делать, может что в uses пихать надо просто?
Правда эта функция только блокирует доступ к файлу, но пока и этого достаточно будет!


panov   (2001-12-28 19:30:00) [16]

>Nikolay © (28.12.01 17:43)
А кто же файл тогжа блокировать будет, если программа будет закрыта?


Yuri-7   (2001-12-28 18:11:00) [17]

Установи ему атрибуты "только чтение" и "скрытый", а чтобы никто понять ничего не смог, еще и перекодируй его.


Nikolay   (2001-12-28 17:43:00) [18]

2panov не прав :-)

если ее открыть для записи/чтения то никто с
ним больше ничего не сделает только по
закрытию проги желательно файлик закрывать :+)


Delphimun   (2001-12-28 16:07:00) [19]

Вадим?>
Это идея. Запускать свой прогу на старте виндовс и closefile не делать!
var
a: file;
begin
assignfile(a,"C:\1.txt");
{$i-}
reset(a);
{$i+}
И всё!


Вадим   (2001-12-28 15:50:00) [20]

А если его открыть и не закрывать?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо