Легенда:
   новое сообщение
    закрытая нитка
    новое сообщение
    в закрытой нитке
    старое сообщение
         
		 | 
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
 - Новичкам также крайне полезно ознакомиться с данным документом.
   
  |   |   | 
что значит передает?  22.09.09 11:25  Число просмотров: 1548
 Автор: dl <Dmitry Leonov> 
 | 
 
| 
Просто передает значение? Тогда объект нужно создавать как наследуемый. А проще создавать именованный, как и mapfile, не надо возиться с передачей значений.
 | 
 
| 
<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
 | 
 
| 
 | 
 
 
  |   | 
Спасибо за полезную информацию. И у меня ещё одна проблема возникла  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 все вместе не работает
 | 
 
 
  
 
 | 
 |