Пример |
В следующем примере выполняется резервирование виртуальной памяти объемом 1 Мбайт во время запуска приложения. Когда пользователь выбирает пункт меню .Test!, выделяются и используются 70 Кбайт виртуальной памяти. Значения размещаются в каждом блоке памяти объемом 1 Кбайт. Доступ ко всему выделенному блоку памяти изменяется на доступ только для чтения. Происходит доступ к значению в блоке памяти и его отображение в окне сообщения. Затем предпринимается попытка изменить значение в памяти, что приводит к возникновению ситуации нарушения защиты. В этом примере для перехвата исключений, связанных с нарушением защиты, применяется конструкция try.. .except. Обработка исключительных ситуаций в такой форме может применяться в языке Visual C++ компании Microsoft. На рис. 11.4 показано окно сообщения, отображаемое при попытке приложения изменить значение в памяти, предназначенной только для чтения. |
|||||||
VirtualAllocEx • Windows 98 • Windows 2000 |
||||||||
Описание |
Функция VirtualAllocEx аналогична функции VirtualAlloc, за исключением того, что функция VirtualAlloc распределяет память в адресном пространстве вызывающего процесса, а функция VirtualAllocEx может распределить память для любого указанного процесса. |
|||||||
Синтаксис |
LPVOID VirtualAllocEx( HANDLE hProcess, LPVOID IpvAddress, DWORD dwSize, DWORD dwAUocationType, DWORD dwProtect) |
|||||||
Параметры hProcess |
HANDLE. Дескриптор процесса, для которого должна быть распределена память. Дескриптор должен обеспечивать доступ PROCESS_VM_OPERATION. |
|||||||
IpvAddress |
LPVOID. Указатель на желаемый начальный адрес области. При резервировании памяти адрес округляется в меньшую сторону, до следующей границы 64 Кбайт. При выделении памяти адрес округляется в меньшую сторону до границы следующей страницы. Для определения размеров страницы на хост-компьютере применяется функция GetSystemlnfo. Если этот параметр установлен равным NULL, место распределения области памяти определяет система. |
|||||||
dwSize |
DWORD. Размер области памяти в байтах. Если параметр IpvAddress равен1 NULL, это значение округляется в большую сторону до границы следующей страницы. В ином случае распределенные страницы включают все страницы, содержащие один или несколько байтов в диапазоне от IpvAddress до (IpvAddress + dwSize). |
|||||||
dw Allocation Type |
DWORD. Тип выполняемого распределения. В приложении может быть указано любое сочетание флажков, перечисленных в табл. 11.11. |
|||||||
dwProtect |
DWORD. Тип защиты доступа для выделенных страниц. С любым из флажков, перечисленных в табл. 11.12, могут быть объединены модификаторы PAGE_GUARD и PAGE_NOCACHE. |
|||||||
Возвращаемое значение |
LPVOID. В случае успешного выполнения базовый адрес распределенной области страниц; в ином случае возвращаемое значение — NULL. |
|||||||
Включаемый файл |
winbase.h |
|||||||
См. также |
VirtualAlloc, VirtualFreeEx |
|||||||
VirtualFree • Windows 98 • Windows 2000 |
||||||||
Описание |
Функция VirtualFree освобождает или отменяет выделение (или выполняет то и другое) для ряда страниц в виртуальном адресном пространстве вызывающего процесса. Чтобы можно было освободить страницы, все они должны быть в одинаковом состоянии (зарезервированы или выделены) и должна одновременно освобождаться вся область, первоначально зарезервированная функцией VirtualAlloc. Если была выделена только часть страниц в первоначально зарезервированной области, приложение должно вначале вызвать функцию VirtualFree, чтобы отменить выделение страниц, а затем снова вызвать VirtualFree, чтобы освободить весь блок. |
|||||||
Синтаксис |
BOOL VirtualFree( LPVOID IpvAddress, DWORD dwSize, DWORD dwFreeType ) |
|||||||
Параметры |
||||||||
IpvAddress |
LPVOID. Указатель на базовый адрес области страниц, которая должна быть освобождена. Если параметр dwFreeType включает флажок MEMJRELEASE, этот параметр должен представлять собой базовый адрес, возвращенный функцией VirtualAlloc при резервировании области страниц. |
|||||||
dwSiu |
DWORD. Размер в байтах области, которая должны быть освобождена. Если параметр dwFreeType включает флажок MEM_RELEASE, этот параметр должен иметь значение 0. |
|||||||
dwFreeType |
DWORD. Тип операции освобождения. Может быть указан один из флажков, перечисленных в табл. 11.13. |
|||||||
Таблица 11.13. Флажки функции VirtualFree |
||||||||
Флажок |
Описание |
|||||||
MEM DECOMMIT |
Отменить выделение указанной области выделенных страниц |
|||||||
MEM_RELEASE |
Освободить указанную область зарезервированных страниц |
|||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
|||||||
Включаемый файл |
winbase.h |
|||||||
См. также |
VirtualAlloc |
|||||||
Пример |
См. пример для функции VirtualAlloc. |
|||||||
VirtualFreeEx + Windows 98 + Windows 2000 |
||||||||
Описание |
Функция VirtualFreeEx аналогична функции VirtualFree, за исключением того, что функция VirtualFree освобождает память в адресном пространстве вызывающего процесса, а функция VirtualFreeEx может освободить память для любого указанного процесса. |
|||||||
Синтаксис |
BOOL VirtuaIFreeEx( HANDLE hProcess, LPVOID IpvAddress, DWORD dwSize, DWORD dwFreeType ) |
|||||||
Параметры |
||||||||
hProcess |
HANDLE. Дескриптор процесса, для которого должна быть освобождена память. Дескриптор должен обеспечивать доступ PROCESS_VM_OPERATION. |
|||||||
IpvAddress |
LPVOID. Указатель на базовый адрес области страниц, которая должна быть освобождена. Если параметр dwFreeType включает флажок MEM_RELEASE, данный параметр должен представлять собой базовый адрес, возвращенный функцией VirtualAllocEx при резервировании области страниц. |
|||||||
dwSize |
DWORD. Размер в байтах области, которая должны быть освобождена. Если параметр dwFreeType включает флажок MEM_RELEASE, этот параметр должен иметь значение 0. |
|||||||
dwFreeType |
DWORD. Тип операции освобождения. Может быть указан один из флажков, перечисленных в табл. 11.13. |
|||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
|||||||
Включаемый файл |
winbase.h |
|||||||
См. также |
VirtualAllocEx |
|||||||
VirtualLock • Windows 98 • Windows 2000 |
||||||||
Описание |
Функция VirtualLock блокирует указанную область виртуального адресного пространства процесса в памяти, благодаря чему последующий доступ к этой области не вызывает ошибку отсутствия страницы. Максимальное число страниц, которые могут быть заблокированы, равно 30. Этот предел установлен преднамеренно, чтобы предотвратить неблагоприятное снижение производительности. Блокировка страниц в памяти может ухудшить производительность системы, поскольку уменьшает доступный объем оперативной памяти и вынуждает систему выводить другие важные страницы в файл подкачки. |
|||||||
Синтаксис |
BOOL VirtualLock( LPVOID IpvAddress, DWORD dwSize ) |
|||||||
Параметры IpvAddress |
LPVOID. Указатель на базовый адрес области страниц, которая должна быть заблокирована. |
|||||||
dwSize |
DWORD. Размер в байтах области, которая должна быть заблокирована. |
|||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
|||||||
Включаемый файл |
winbase.h |
|||||||
См. также |
VirtualUnlock, VirtualAlloc |
|||||||
Пример |
См. пример для функции VirtualAlloc. |
|||||||
VirtualProtect + Windows 98 * Winrln«ic ->nnn |
||||||||
Описание |
VirtualProtect изменяет защиту доступа ряда выделенных страниц в виртуальном адресном пространстве вызывающего процесса. |
|||||||
Синтаксис |
BOOL VirtuaIProtect( LPVOID IpvAddress, DWORD dwSize, DWORD dwNewProtect, PDWORD pdwOldProtect ) |
|||||||
Параметры IpvAddress |
LPVOID. Указатель на базовый адрес области страниц, для которой должны быть изменены атрибуты защиты доступа. |
|||||||
dwSize |
DWORD. Размер в байтах области, для которой должны быть изменены атрибуты защиты доступа. |
|||||||
dwNewProtect |
DWORD. Новый тип защиты доступа. С любым из флажков, перечисленных в табл. 11.12, могут быть объединены модификаторы PAGE_GUARD и PAGE_NOCACHE. |
|||||||
pdwOldProtect |
PDWORD. Указатель на переменную, которая принимает предыдущее значение защиты доступа к первой странице в указанной области страниц. |
|||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
|||||||
Включаемыйфайл |
wirthucp hW1IIU*1>C.1I |
|||||||
См. также |
VirtualAlloc |
|||||||
Пример |
См. пример для функции VirtualAlloc. |
|||||||
VirtualProtectEx + Windows 98 * winHnu/c ->nnn |
||||||||
Описание |
VirtualProtectEx аналогична функции VirtualProtect, за исключением того, что она может действовать в виртуальном адресном пространстве других процессов, тогда как функция VirtualProtect действует только в рамках вызывающего процесса. |
|||||||
Синтаксис |
BOOL VirtualProtectEx( HANDLE hProcess, LPVOID IpvAddress, DWORD dwSize, DWORD dwNewProtect, PDWORD pdwOldProtect ) |
|||||||
Параметры |
||||||||
hProcess |
HANDLE. Дескриптор процесса, для которого должна быть изменена защита памяти. Дескриптор должен обеспечивать |
|||||||
IpvAddress |
LPVOID. Указатель на базовый адрес области страниц, для которой должны быть изменены атрибуты защиты доступа. |
|||||||
dwSize |
DWORD. Размер в байтах области, для которой должны быть изменены атрибуты защиты доступа. |
|||||||
dwNewProtect |
DWORD. Новый тип защиты доступа. С любым из флажков, перечисленных в табл. 11.12, могут быть объединены модификаторы PAGE_GUARD и PAGE_NOCACHE. |
|||||||
pdwOldProtect |
PDWORD. Указатель на переменную, которая принимает предыдущее значение доступа к первой странице в указанной области страниц. |
|||||||
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
|||||||
Включаемый файл |
winbase.h |
|||||||
См. также |
VirtualAlloc |
|||||||
VirtualQuery * Windows 98 * Windows 2000 |
||||||||
Описание |
Функция VirtualQuery предоставляет информацию о ряде страниц в виртуальном адресном пространстве вызывающего процесса. |
|||||||
Синтаксис |
DWORD VirtualQuery( LPCVOID IpvAddress, PMEMORY_BASIC_INFORMATION pmbiBuffer, DWORD dwLength ) |
|||||||
Параметры IpvAddress |
LPCVOID. Указатель на базовый адрес области страниц, для которого должен быть выполнен запрос. |
|||||||
pmbiBuffer |
PMEMORY_BASIC_INFORMATION. Указатель на структуру MEMORY_BASIC_INFORMATION, в которой возвращается информация об указанном диапазоне страниц. См. приведенное ниже определение структуры MEMORY_BASIC_INFORMATION. |
|||||||
dwLength |
DWORD. Размер в байтах буфера, указанного параметром pmbiBuffer. |
|||||||
Возвращаемое значение |
DWORD. Фактическое число байтов, возвращенных в информационном буфере. |
|||||||
Включаемый файл |
winbase.h |
|||||||
Определение MEMORY_BASIC_INFORMATION typedef struct _MEMORY_BASIC_INFORMATIONFVOID BaseAddress ; // Базовый адрес области FVOID AllocationBase ; // Базовый адрес распределения DWORD AllocationProtect ; // Начальное состояние защиты доступа DWORD RegionSize; // Размер области в байтах DWORD State; // Выделенная, зарезервированная, свободная DWORD Protect; // Текущее состояние защиты доступа DWORD Type; // Тип страниц } MEMORY BASIC INFORMATION, *PMEMORY_BASIC_INFORMATION; |
||||||||
BaseAddress |
PVOID. Указатель на базовый адрес области страниц. |
|||||||
AllocationBase |
PVOID. Указатель на базовый адрес диапазона страниц, распределенных функцией VirtualAlloc. |
|||||||
AllocationProtect |
DWORD. Зашита доступа, указанная при первоначальном распределении области. С любым из флажков в табл. 11.12 могут быть объединены модификаторы PAGE_GUARD и PAGE_NOCACHE |
|||||||
RegionSize |
DWORD. Размер в байтах области, начинающейся с базового адреса, в которой все страницы имеют одинаковые атрибуты. |
|||||||
State |
DWORD. Состояние страниц в области. Этот параметр может иметь одно из значений, перечисленных в табл. 11.14. |
|||||||
Protect |
DWORD. Защита доступа к страницам в области. Может быть указан один из флажков, перечисленных для члена AllocationProtect. |
|||||||
Type |
DWORD. Тип страниц в области. Допустимые типы перечислены в табл. 11.15. |
|||||||
Таблица 11.14. Значения члена State структуры MEMORY_BASIC_INFORMATION |
||||||||
Значение члена структуры State Описание |
||||||||
МЕМ_СОММ1Т |
Страницы выделены. |
|||||||
MEM_FREE |
Страницы недоступны для вызывающего процесса и подлежат распределению. |
|||||||
MEM_RESERVE |
Страницы зарезервированы. |
|||||||
Таблица 1 1. 15. Значения члена Туре структуры MEMORY_BASIC_INFORMATION |
||||||||
Значение члена Туре |
Описание |
|||||||
MEMJMAGE |
Страницы памяти отображены в представление раздела |
изображения. |
||||||
MEM_MAPPED |
Страницы памяти отображены в представление раздела. |
|||||||
MEM_PRIVATE |
Страницы памяти являются приватными. |
|||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.