информационная безопасность
без паники и всерьез
 подробно о проекте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
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Ещё одна параллельная проблема возникла 22.09.09 12:25  Число просмотров: 1663
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Хочу отобразить не весь файл, а небольшую её часть (64 кб, если быть точным). Пишу:
lpAllContexts = (LPCLIENT_CONTEXT) MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 65536*dwContextIndex, 65536);

---
Функция завершается с ошибкой номер 5 (отказано в доступе). Опытным путём установил, что значение 49784 в последнем параметре функцию устраивает, а 49785 и тем более мои 65536 уже нет. С чем это связано?
<programming>
[Win32] Нет доступа на запись в файле отображаемом в память 22.09.09 07:56  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 22.09.09 08:11  Количество правок: 5
<"чистая" ссылка> <обсуждение закрыто>
Поторопился закрыть свою предыдущую тему. Возникла проблема. В главном процессе создаю файл отображаемый в память:
hFile = CreateFile("page.swp", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, NULL, sizeof(CLIENT_CONTEXT), "FastJobSwap");
lpContext = (LPCLIENT_CONTEXT) MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

---
Заполняю его нужными мне данными, и далее пытаюсь открыть этот файл в дочернем процессе:
hMap = OpenFileMapping(PAGE_READWRITE, FALSE, "FastJobSwap");
lpContext = (LPCLIENT_CONTEXT) MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

---
MapViewOfFile возвращает ошибку номер 5 (отказано в доступе). Если поменять флаг FILE_MAP_ALL_ACCESS на FILE_MAP_READ, то всё работает, все данные передаются в том виде, в каком мне надо (FILE_MAP_WRITE, как и следовало ожидать тоже не работает).

Как сделать так, чтобы был доступ к отображённому файлу также и на запись, а не только на чтение?
Ещё одна параллельная проблема возникла 22.09.09 12:25  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Хочу отобразить не весь файл, а небольшую её часть (64 кб, если быть точным). Пишу:
lpAllContexts = (LPCLIENT_CONTEXT) MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 65536*dwContextIndex, 65536);

---
Функция завершается с ошибкой номер 5 (отказано в доступе). Опытным путём установил, что значение 49784 в последнем параметре функцию устраивает, а 49785 и тем более мои 65536 уже нет. С чем это связано?
а размер файла достаточен, чтобы при текущем dwContextIndex не вылететь за его границу? 22.09.09 12:32  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <обсуждение закрыто>
Нет, не достаточен :)). Прошу прощения. Глупая ошибка. PS. Спасибо, dl. У тебя самый удобный форум из тех, что я видел. 22.09.09 12:39  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
[Win32] Если процесс дочерний, то зачем переоткрывать объект, если можно просто унаследовать хендл? 22.09.09 08:31  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>


http://msdn.microsoft.com/en-us/library/ms724466
Спасибо за полезную информацию. И у меня ещё одна проблема возникла 22.09.09 09:46  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Родительский процесс создаёт событие hEvent, передаёт этот хендл дочернему процессу, и далее ждёт, когда дочерний процесс установит его. Функция SetEvent в дочернем процессе возвращает FALSE. Вызов той же функции в родительском процессе даёт TRUE.

Числовое представление хэндла и в родительском и в дочернем процессах совпадают. Как обойти эту ситуацию? Как в дочернем процессе получить доступ к хэндлу родительского процесса?
что значит передает? 22.09.09 11:25  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <обсуждение закрыто>
Просто передает значение? Тогда объект нужно создавать как наследуемый. А проще создавать именованный, как и mapfile, не надо возиться с передачей значений.
Спасибо, вариант с именованными значениями мен подошёл. 22.09.09 12:17  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
[win32] вот на этой ссылке парень говорит, что у него всё заработало, когда он security_attributes добавил. попробовал пойти его путём, но mapviewoffile по-прежнему жалуется, что у неё нет доступа. 22.09.09 08:10  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 22.09.09 08:11  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>


StartService & SetHook & OpenFileMapping все вместе не работает
Парень отсюда помог. решение оказалось простым: openfilemapping(file_map_all_access,... 22.09.09 08:30  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>


Нет доступа на запись в файле отображаемом в память
1




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


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