Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Вниз

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


~(;_;)~   (2001-12-28 14:48) [0]

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



panov   (2001-12-28 15:10) [1]

Никак.



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

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



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

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



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

2panov не прав :-)

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



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

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



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

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



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

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

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

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



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

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



panov   (2001-12-29 08:12) [9]

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

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

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



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

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



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

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



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

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

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

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



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

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



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

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



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

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



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

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



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

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



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

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

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



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

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

Удачи.



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

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

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



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

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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.025 c
1-66277           BFG                   2002-01-02 20:48  2002.01.21  
Вобще это не один вопрос, а.....вобщем несколько...


4-66402           ДедушкаКо             2001-11-19 14:45  2002.01.21  
Из осн. удалили...не понял почему. Попробую здесь...


1-66251           Egor111               2002-01-03 17:57  2002.01.21  
DCOM.Connections


4-66410           Moscower              2001-11-16 16:13  2002.01.21  
Помогите найти ошибку


4-66401           qwertysdffsfsdfa      2001-11-22 01:19  2002.01.21  
Как читать буфер клавиатуры?