Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[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 все вместе не работает
|
|
|