информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Если процесс дочерний, то зачем переоткрывать объект, если можно просто унаследовать хендл? 22.09.09 08:31  Число просмотров: 1335
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>


http://msdn.microsoft.com/en-us/library/ms724466
<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-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach