Программирование для Windows NT

       

Функция WndProc_OnCreate


Напомним, что при создании окна его функции окна передается сообщение WM_CREATE. Функция WndProc_OnCreate, определенная в нашем приложении, выполняет обработку этого сообщения.

Прежде всего, функция резервирует область виртуальной памяти размером MEMBLOCK_SIZE байт, вызывая функцию VirtualAlloc с параметром MEM_RESERVE:

lpReserved = VirtualAlloc(NULL, MEMBLOCK_SIZE,

  MEM_RESERVE, PAGE_NOACCESS);

Через первый параметр мы передаем функции VirtualAlloc значение NULL, поэтому операционная система сама определит для нас начальный адрес резервируемой области. Этот адрес мы сохраняем во временной локальной переменной lpReserved.

В случае ошибки выводится соответствующее сообщение. Если же резервирование адресного пространства выполнено успешно, функция получает память в использование, вызывая для этого функцию VirtualAlloc еще раз, но уже с параметром MEM_COMMIT:

lpMemoryBuffer = VirtualAlloc(lpReserved,

  MEMBLOCK_SIZE, MEM_COMMIT, PAGE_NOACCESS);

Так как в качестве первого параметра функции VirtualAlloc передается значение lpReserved, выделение страниц памяти выполняется в зарезервированной ранее области адресов.

При невозможности получения памяти в диапазоне зарезервированных адресов мы отдаем зарезервированные адреса системе и завершаем работу приложения, запрещая создание его главного окна:

VirtualFree(lpReserved, 0, MEM_RELEASE);

return FALSE;

Заметим, что мы могли бы и не вызывать функцию VirtualFree, так как после завершения процесса операционная система Microsoft Windows NT автоматически освобождает все распределенные для него ранее страницы виртуальной памяти.

Последнее, что делает обработчик сообщения WM_CREATE, это получение идентификатора меню Set protection и отметку в этом меню строки PAGE_NOACCESS:

hSetMenu = GetSubMenu(GetMenu(hWnd), 1);

CheckMenuItem(hSetMenu,

  ID_SETPROTECTION_PAGENOACCESS, MF_CHECKED);

Использованные при этом функции были описаны в главе “Меню” 13 тома “Библиотеки системного программиста”, который называется “Операционная система Microsoft Windows 3.1 для программиста. Часть третья”.



Содержание раздела