Функция 68, подфункция 22 - открыть именованную область памяти.
Параметры:
- eax = 68 - номер функции
- ebx = 22 - номер подфункции
- ecx = имя области. Максимум 31 символ, включая завершающий ноль
- edx = размер области в байтах для SHM_CREATE и SHM_OPEN_ALWAYS
- esi = флаги открытия и доступа:
- SHM_OPEN = 0x00 - открыть существующую область памяти.
Если область с таким именем не существует,
функция вернёт код ошибки 5.
- SHM_OPEN_ALWAYS = 0x04 - открыть существующую или создать новую
область памяти.
- SHM_CREATE = 0x08 - создать новую область памяти.
Если область с таким именем уже существует,
функция вернёт код ошибки 10.
- SHM_READ = 0x00 - доступ только на чтение
- SHM_WRITE = 0x01 - доступ на чтение и запись
Возвращаемое значение:
- eax = указатель на область памяти, 0 при ошибке
- при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
edx = 0 - успех, иначе - код ошибки
- при открытии существующей области (SHM_OPEN или SHM_OPEN_ALWAYS):
edx = код ошибки (при eax=0) или размер области в байтах
Коды ошибок:
- E_NOTFOUND = 5
- E_ACCESS = 10
- E_NOMEM = 30
- E_PARAM = 33
Замечания:
- Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
- Если создаётся новая область, то флаги доступа устанавливают
максимальные права доступа для остальных процессов. Попытка
открытия другим потоком с неразрешёнными правами провалится
с кодом ошибки E_ACCESS.
- Процесс, создавший область, всегда имеет доступ на запись.