информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяSpanning Tree Protocol: недокументированное применениеЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Не за что, юзай на здоровье ;-) 20.02.04 08:44  Число просмотров: 1195
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
<programming>
[Win32] CreateFile + synchronization 17.02.04 22:46  
Автор: deb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Нужно получить доступ к файлу,
только тогда, когда его никто не использует.

hFile = CreateFile (szFileName,
FILE_READ_DATA,
0, NULL, OPEN_EXISTING, 0, NULL);
Так он его открывает и читает, даже если в это время файл редактирует,
кто-нибудь другой. А надо чтобы отваливался.
Подскажите просто ф-цию в MSDN'е куда глядеть.

Насколько вообще красиво под win2k использовать для файлов
комманды fopen fclose.?

Спасибо.
отвечаю подробно: 18.02.04 15:57  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Нужно получить доступ к файлу,
> только тогда, когда его никто не использует.
>
> hFile = CreateFile (szFileName,
> FILE_READ_DATA,
> 0, NULL,
> OPEN_EXISTING,
> 0,
> NULL);
> Так он его открывает и читает, даже если в это время файл
> редактирует,
> кто-нибудь другой. А надо чтобы отваливался.
> Подскажите просто ф-цию в MSDN'е куда глядеть.
>
> Насколько вообще красиво под win2k использовать для файлов
> комманды fopen fclose.?
>
> Спасибо.
отвечаю подробно:

> Нужно получить доступ к файлу,
> только тогда, когда его никто не использует.

когда ты используешь dwShareMode = 0 ты открываешь файл в екслюзивном доступе.
если какая-то тулза открыла файло с шарингом, то ты етого никак не узнаешь используядокументированныеметоды...
все,тема закрыта.

МСДН вот что говорит об етом флаге:
dwShareMode
[in] Sharing mode of the object. You cannot request a sharing mode that conflicts with the access mode specified in a previous open request whose handle is still open.
If this parameter is zero and CreateFile succeeds, the object cannot be shared and cannot be opened again until the handle is closed. For more information about sharing violations, see the Remarks section.

To enable other processes to share the object while your process has it open, use a combination of one or more of the following values to specify the type of access they can request when they open the object. These sharing options remain in effect until you close the handle to the object.

Value Meaning
FILE_SHARE_DELETE Enables subsequent open operations on the object to request delete access. Otherwise, other processes cannot open the object if they request delete access.
If the object has already been opened with delete access, the sharing mode must include this flag.


Windows Me/98/95: This flag is not supported.


FILE_SHARE_READ Enables subsequent open operations on the object to request read access. Otherwise, other processes cannot open the object if they request read access.
If the object has already been opened with read access, the sharing mode must include this flag.

FILE_SHARE_WRITE Enables subsequent open operations on the object to request write access. Otherwise, other processes cannot open the object if they request write access.
If the object has already been opened with write access, the sharing mode must include this flag.
отвечаю подробно: 18.02.04 16:23  
Автор: deb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> когда ты используешь dwShareMode = 0 ты открываешь файл в
> екслюзивном доступе.
> если какая-то тулза открыла файло с шарингом, то ты етого
> никак не узнаешь используядокументированныеметоды...
> все,тема закрыта.
Хороши же документированныеметоды" если они позволяют,
уже открытый зашаренный файл, открывать в "екслюзивном" режиме.
По моему на лицо не соответствие. Я открываю фаил в "екслюзивном" режиме"
и не могу быть уверен что он открыт именно так.
Что-то тут не так.

> МСДН вот что говорит об етом флаге:
Читать я вообще умею.
Фигню тебе ответил NeuronViking! 18.02.04 17:02  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
> > когда ты используешь dwShareMode = 0 ты открываешь
> файл в
> > екслюзивном доступе.
> > если какая-то тулза открыла файло с шарингом, то ты
> етого
> > никак не узнаешь используядокументированные
> методы...
> > все,тема закрыта.
Как это "не узнаешь"? Узнаешь, получив ошибку 32! Для проверки открой какой-нибудь файл для просмотра FAR'om по F3... А потом прогони свою прогу... Получишь код ошибки 32 — "Процесс не может получить доступ к файлу, так как этот файл занят другим процессом". И это учитывая то, что FAR открывает файл для чтения с максимально "щадящими" FILE_SHARE флагами. Важно то, что ТЫ открываешь файл в экслюзивном режиме.


procedure TForm1.Button1Click(Sender: TObject);
Var aF: THandle;
begin
  aF := CreateFile('C:\test.txt', GENERIC_READ, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if aF = INVALID_HANDLE_VALUE Then RaiseLastWin32Error;
  CloseHandle(aF);
end;

---
[Win32] Это может зависеть от логики редактора... Некоторые вычитают из файла данные и отваливаются от него... 18.02.04 09:38  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
а еще может открыть файл с аттр... 18.02.04 10:03  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а еще может открыть файл с аттр FILE_SHARE_READ|FILE_SHARE_WRITE
Лучше вообще вместо этого атрибута 0 оставить 18.02.04 12:52  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> а еще может открыть файл с аттр
> FILE_SHARE_READ|FILE_SHARE_WRITE
МСДН (CreateFile):

"dwShareMode
[in] Specifies how the object can be shared. If dwShareMode is 0, and CreateFile succeeds, the object cannot be shared and cannot be opened again until the handle is closed."
Не работает 18.02.04 15:55  
Автор: deb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я еще поясню, а то некоторые ответы я вообще непонял, что имелось ввиду.

Есть файл. Несколько прог в него пишут. Доступа к этим прогам у меня нет.
Так вот открываю я файл и начинаю его читать(программно). А какая-то прога
не дописала скажем цену(Т.е. она писала, и тут я такой раз и считал, а она еще не закончила писать). Надо 1500, а я считал 150. Так как прога не закончила
еще писать.
Так вот именно и надо получать доступ к файлу ТОЛЬКО тогда, когда
с ним НЕ РАБОТАЕТ НИ ОДНА ДРУГАЯ ПРОГРАММА.

Вот как это сделать?
а ты открывай файл на запись еще 18.02.04 16:53  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
FILE_SHARE_xxx флаги должен ставить не ты а тот кто файл открыл. Если прога не хочет чтоб никто кроме нее не мог открыть файл на запись она и не поставит FILE_SHARE_WRITE. Только кривые проги могут писать в файл в тоже время оставляя FILE_SHARE_WRITE. Так что попробуй просто сделать CreateFile("..",GENERIC_ALL,..
Да успокойтесь вы, говорят же человеческим языком — если в dwShareMode было указано 0 при открытии файла, то вы или получите эксклюзивный доступ, или отвалитесь с ошибкой! Неважно, что у вас было в dwDesiredAccess!!! 18.02.04 17:12  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Thanks 20.02.04 01:53  
Автор: deb Статус: Незарегистрированный пользователь
<"чистая" ссылка>
HandleX Большое человеческое тебе Thank you very much.
А то признаюсь сбили меня тут столку.
Вообще всем спасибо. Объяснили бестолковому.
Special thanks: amirul. за поддержку моих веток в beginners.

Думаю это не будет offtopic. И мою месагу не удалят.
Не за что, юзай на здоровье ;-) 20.02.04 08:44  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach