Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [BC++] Права доступа к файлам. Ограничение прав доступа на время работы 
:(
    Опции темы
MuForum
  Дата 7.2.2008, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе время суток!

Существует программа, которая должна на время работы блокировать доступ к файлам, чтобы файл могли только читать. (То есть: записывать что-либо в файл, удалять, перезаписывать файл и т.д. нельзя!)


- Я попробовал реализовать данное действие при помощи функции: 'sopen()', но проблема в том, что права доступа действуют только на первые 46 файлов, после 46 файла с файлами можно делать что хочешь...

Код

// .h
#include <fcntl.h>
#include <sys\stat.h>
#include <share.h>
#include <io.h>
......
......
......
// .cpp

for(int i=1; i < 101; i++)
{
  byte FName[255];
  sprintf(FName, "Data\\checkfile_%d.txt", i);
  sopen(FName, O_RDONLY, SH_DENYWR, S_IREAD);
}



# Задача: На время работы программы, нужно блокировать доступ к файлам. (Количество файлов порядка 100).


P.S. -> '#define HANDLE_MAX 200' данная строчка не помогла... =(

Это сообщение отредактировал(а) MuForum - 8.2.2008, 00:06


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Можно, например, в OnCreate формы установить атрибут файлов "Только для чтения". А в OnClose - сбросить этот атрибут.
В это тебе поможет:
Код

FileSetAttr("путь к файлу", Атрибуты);



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#2, artsb - Есть ещё нюанс, мне нужно сделать так, чтобы аттрибуты файлов никакая другая программа не могла изменить!

Это сообщение отредактировал(а) MuForum - 8.2.2008, 00:25


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(MuForum @  8.2.2008,  00:13 Найти цитируемый пост)
сделать так, чтобы аттрибуты файлов никакая другая программа не могла изменить! 

По-моему это не реально...

Добавлено через 35 секунд
А вы попробуйте поставить атрибут "Системный".


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#4, artsb - А кто мешает сделать это например?

Код

FileSetAttr(FileName, 0);// сброс всяких read-only и т.д.


Это сообщение отредактировал(а) MuForum - 8.2.2008, 00:26


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Цитата(MuForum @ 8.2.2008,  00:25)
#4, artsb - А кто мешает сделать это например?

Код

FileSetAttr(FileName, 0);// сброс всяких read-only и т.д.

Ну это понятно. Я вижу только один вариант - задавать атрибуты в таймере.
А что у вас за файлы такие, что им кто-то хочет нагадить? smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#6, artsb - Это необходимо для защиты файлов от Клиента одной Online игры.


P.S. -> Игроки заменяют один файл и могут проходить в закрытые зоны. (То есть мне надо это пресекать)
- Сделать таймер на проверку каждые 5 минут например глупо. (Так как в этом интервале игрок сможет поменять нужные файлы, и остаться в секретной зоне. Затем сработает таймер и проверка, обнаружиться, что файл был изменен -> Disconnect, и что смысл, если затем этот игрок снова проделает это?!)

P.S. -> А ставить проверку каждые 30 секунд например не разумно + Нагрузка на систему...


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



То что нагрузка это точно. И то что глупо - тоже.
Но вы попробуйте всё-таки поставить атрибут "Системный". Может поможет.

Добавлено через 3 минуты и 4 секунды
Вот ещё нашёл:
Код

FileSetReadOnly("путь к файлу", true);




--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#8, artsb - Не поможет, так как в любой момент кто-то сможет просто сбить настройки файлов... =(


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



А если не говорить клиентам где файлы лежат??? smile


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#10, artsb - У файлов фиксированная директория, которую я изменять не могу!


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
artsb
Дата 8.2.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



А если засовывать файлы в архивы с паролем?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
MuForum
Дата 8.2.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



#12, artsb - Не пройдёт, яж уже написал, что файлами ещё пользуется клиент игры, в котором я ничего менять не могу, И перемещать файлы тоже!


P.S. -> Мне нужно сделать просто так, чтобы нужные мне файлы можно было только читать и всё. (И чтобы изменять этот приоритет никакая другая программа пока моя включена не могла!)



------------
В 'VC#' я сделал бы так:
Код

        private List<FileInfo> FileList = new List<FileInfo>();
        private class FileInfo
        {
            public FileStream FS = null;
        }
......
......
......
for(int i=1; i < 30; i++)
FileList[i].FS = new FileStream(APath, FileMode.Open, FileAccess.Read, FileShare.Read);


Это сообщение отредактировал(а) MuForum - 8.2.2008, 10:25


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
ama_kid
Дата 8.2.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(MuForum @  7.2.2008,  23:55 Найти цитируемый пост)
проблема в том, что права доступа действуют только на первые 46 файлов, после 46 файла с файлами можно делать что хочешь.
Дело в том, что в системе процессу разрешено открыть только FOPEN_MAX=50 файлов, но три файла заняты на stdin, stdout, stderr, поэтому физически можно открыть только 47 файлов... Изменить значение этой константы, имхо, можно только перекомпиляцией CRT, поэтому придётся искать другой способ...

Цитата(MuForum @  8.2.2008,  10:00 Найти цитируемый пост)
Мне нужно сделать просто так, чтобы нужные мне файлы можно было только читать и всё. (И чтобы изменять этот приоритет никакая другая программа пока моя включена не могла!)
Получается, что этот клиент тоже не сможет записать в свой файл свои данные?



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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(MuForum @ 7.2.2008,  23:55)
Доброе время суток!

Существует программа, которая должна на время работы блокировать доступ к файлам, чтобы файл могли только читать. (То есть: записывать что-либо в файл, удалять, перезаписывать файл и т.д. нельзя!)


- Я попробовал реализовать данное действие при помощи функции: 'sopen()', но проблема в том, что права доступа действуют только на первые 46 файлов, после 46 файла с файлами можно делать что хочешь...

Кончились handle'ы, sopen перестал открывать файлы

Цитата

P.S. -> '#define HANDLE_MAX 200' данная строчка не помогла... =(
После этой строчки надо пересобирать CRT

Попробуй открывать файлы с блокировкой через Win32 API:

Код

CreateFile(
 "my_file",
 FILE_ALL_ACCESS,
 FILE_SHARE_READ,
 NULL,
 OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,
 NULL);

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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