|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
VirtualAlloc
The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero.
LPVOID VirtualAlloc(
LPVOID lpAddress, // address of region to reserve or commit DWORD dwSize, // size of region DWORD flAllocationType, // type of allocation DWORD flProtect // type of access protection );
Parameters
lpAddress
Specifies the desired starting address of the region to allocate. If the memory is being reserved, the specified address is rounded down to the next 64-kilobyte boundary. If the memory is already reserved and is being committed, the address is rounded down to the next page boundary. To determine the size of a page on the host computer, use the GetSystemInfo function. If this parameter is NULL, the system determines where to allocate the region.
dwSize
Specifies the size, in bytes, of the region. If the lpAddress parameter is NULL, this value is rounded up to the next page boundary. Otherwise, the allocated pages include all pages containing one or more bytes in the range from lpAddress to (lpAddress+dwSize). This means that a 2-byte range straddling a page boundary causes both pages to be included in the allocated region.
flAllocationType
Specifies the type of allocation. You can specify any combination of the following flags:
Flag Meaning MEM_COMMIT Allocates physical storage in memory or in the paging file on disk for the specified region of pages. An attempt to commit an already committed page will not cause the function to fail. This means that a range of committed or decommitted pages can be committed without having to worry about a failure. MEM_RESERVE Reserves a range of the process's virtual address space without allocating any physical storage. The reserved range cannot be used by any other allocation operations (the malloc function, the LocalAlloc function, and so on) until it is released. Reserved pages can be committed in subsequent calls to the VirtualAlloc function. MEM_TOP_DOWN Allocates memory at the highest possible address.
flProtect
Specifies the type of access protection. If the pages are being committed, any one of the following flags can be specified, along with the PAGE_GUARD and PAGE_NOCACHE protection modifier flags, as desired:
Flag Meaning PAGE_READONLY Enables read access to the committed region of pages. An attempt to write to the committed region results in an access violation. If the system differentiates between read-only access and execute access, an attempt to execute code in the committed region results in an access violation. PAGE_READWRITE Enables both read and write access to the committed region of pages. PAGE_EXECUTE Enables execute access to the committed region of pages. An attempt to read or write to the committed region results in an access violation. PAGE_EXECUTE_READ Enables execute and read access to the committed region of pages. An attempt to write to the committed region results in an access violation. PAGE_EXECUTE_READWRITE Enables execute, read, and write access to the committed region of pages. PAGE_GUARD Pages in the region become guard pages. Any attempt to read from or write to a guard page causes the operating system to raise a STATUS_GUARD_PAGE exception and turn off the guard page status. Guard pages thus act as a one-shot access alarm.The PAGE_GUARD flag is a page protection modifier. An application uses it with one of the other page protection flags, with one exception: It cannot be used with PAGE_NOACCESS. When an access attempt leads the operating system to turn off guard page status, the underlying page protection takes over.If a guard page exception occurs during a system service, the service typically returns a failure status indicator. PAGE_NOACCESS Disables all access to the committed region of pages. An attempt to read from, write to, or execute in the committed region results in an access violation exception, called a general protection (GP) fault. PAGE_NOCACHE Allows no caching of the committed regions of pages. The hardware attributes for the physical memory should be specified as "no cache." This is not recommended for general usage. It is useful for device drivers; for example, mapping a video frame buffer with no caching. This flag is a page protection modifier, only valid when used with one of the page protections other than PAGE_NOACCESS.
Return Values
If the function succeeds, the return value is the base address of the allocated region of pages. If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
VirtualAlloc can perform the following operations:
· Commit a region of pages reserved by a previous call to the VirtualAlloc function. · Reserve a region of free pages. · Reserve and commit a region of free pages.
You can use VirtualAlloc to reserve a block of pages and then make additional calls to VirtualAlloc to commit individual pages from the reserved block. This enables a process to reserve a range of its virtual address space without consuming physical storage until it is needed. Each page in the process's virtual address space is in one of three states:
State Meaning Free The page is not committed or reserved and is not accessible to the process. VirtualAlloc can reserve, or simultaneously reserve and commit, a free page. Reserved The range of addresses cannot be used by other allocation functions, but the page is not accessible and has no physical storage associated with it. VirtualAlloc can commit a reserved page, but it cannot reserve it a second time. The VirtualFree function can release a reserved page, making it a free page. Committed Physical storage is allocated for the page, and access is controlled by a protection code. The system initializes and loads each committed page into physical memory only at the first attempt to read or write to that page. When the process terminates, the system releases the storage for committed pages. VirtualAlloc can commit an already committed page. This means that you can commit a range of pages, regardless of whether they have already been committed, and the function will not fail. VirtualFree can decommit a committed page, releasing the page's storage, or it can simultaneously decommit and release a committed page.
If the lpAddress parameter is not NULL, the function uses the lpAddress and dwSize parameters to compute the region of pages to be allocated. The current state of the entire range of pages must be compatible with the type of allocation specified by the flAllocationType parameter. Otherwise, the function fails and none of the pages are allocated. This compatibility requirement does not preclude committing an already committed page; see the preceding list.
The PAGE_GUARD protection modifier flag establishes guard pages. Guard pages act as one-shot access alarms. See Guard Pages.
See Also
GlobalAlloc, HeapAlloc, VirtualFree, VirtualLock, VirtualProtect, VirtualQuery
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
VirtualAlloc
Функция VirtualAlloc резервирует или совершает регион страниц в виртуальном пространстве адреса вызова процесса. Память распределенная этой функцией автоматически инициализирована в нуль.
LPVOID VirtualAlloc(
LPVOID lpAddress, // АДРЕС региона, чтобы резервировать или совершать DWORD dwSize, // размер региона DWORD flAllocationType, // типа типа распределения DWORD flProtect // защиты доступа );
Параметры
lpAddress
Определяет желаемый запуск адреса региона, чтобы распределяться. Если память резервируется, определенный адрес округлен в меньшую сторону на следующую 64- килобайтную границу. Если память уже зарезервирована и совершиться, адрес округлен в меньшую сторону на следующую страничную границу. Для того, чтобы определять размер страницы в главном компьютере, используйте функцию GetSystemInfo. Если этот параметр НЕДЕЙСТВИТЕЛЕН, система определяется где, чтобы распределять регион.
dwSize
Определяет размер, в байтах, региона. Если параметр lpAddress НЕДЕЙСТВИТЕЛЕН, эта величина округлена в большую сторону на следующую страничную границу. В противном случае, размещенные страницы включают все страницы, содержащие один или более байтов в дипазоне из lpAddress, чтобы (lpAddress+dwSize). Это означает, что 2- байтовый дипазон, перекрывающий страничную границу вызывает обе страницы, которые нужно включаться в размещенный регион.
flAllocationType
Определяет тип распределения. Вы можете определить любую комбинацию следующего флагов:
Значение Флага MEM_COMMIT Распределяет физическую память в памяти или в файле подкачки на диске для определенной области страниц. Попытка, чтобы совершать уже совершенную страницу не заставит функцию, чтобы терпеть неудачу. Это означает, что дипазон совершенный или decommitted страницы могут быть совершены без необходимости беспокоиться о неудаче. MEM_RESERVE Резервирует дипазон пространства виртуального адреса процесса не распределяя любую физическую память. Резервный дипазон не может быть использован любыми другими операциями распределения ( функция malloc, функция LocalAlloc, и так далее) пока не будет выпущено. Резервные страницы могут быть совершены на последующих вызовах в функцию VirtualAlloc. MEM_TOP_DOWN Распределяет память по самому верхнему возможному адресу.
flProtect
Определяет тип защиты доступа. Если страницы совершаются, любое из следующего сигнализирует может быть определено, вместе с PAGE_GUARD и флагами модификатора защиты PAGE_NOCACHE, как захотеть:
Значение Флага PAGE_READONLY Приспосабливается прочитанный доступ к совершенной области страниц. Попытка, чтобы записываться в совершенные результаты области в нарушении доступа. Если система различается между только для чтения доступом и выполняет доступ, попытка, чтобы выполнять код в совершенных результатах области в нарушении доступа. PAGE_READWRITE Приспосабливается как прочитанное так и доступ записи к совершенной области страниц. Приспосабливать PAGE_EXECUTE выполняют доступ к совершенной области страниц. Попытка, чтобы читать или записываться в совершенные результаты области в нарушении доступа. Приспосабливать PAGE_EXECUTE_READ выполняют и читают доступ к совершенной области страниц. Попытка, чтобы записываться в совершенные результаты области в нарушении доступа. Приспосабливать PAGE_EXECUTE_READWRITE выполняют, прочитанное, и доступ записи к совершенной области страниц. Страницы PAGE_GUARD в области становятся страницами охраны. Любая попытка, чтобы читаться из или записываться на страницу охраны заставляет операционную систему, чтобы поднимать исключение STATUS_GUARD_PAGE и выключать страничный статус охраны. Таким образом действие страниц Охраны как однократная тревога доступа.Флаг PAGE_GUARD является страничным модификатором защиты. Приложение использует это с одним из других страничных флагов защиты, с одним исключением: не может быть использовано PAGE_NOACCESS. Когда попытка доступа ведет операционную систему, чтобы выключать страничный статус охраны, основная страничная защита превышает.Если страничное исключение охраны происходит в течение системной услуги, услуга обычно возвращает указатель статуса неудачи. PAGE_NOACCESS Выводит из строя весь доступ к совершенной области страниц. Попытка, чтобы читать из, запись на или выполняется в совершенных результатах области в исключение нарушение доступ, назвавших общую защиту (GP) дефект. PAGE_NOCACHE не Допускает никакое кэширование совершенных областей страниц. Аппаратные атрибуты для физической памяти должны быть определены как "никакой кеш." Это не рекомендован для общего использования. Это полезное для драйверов устройства; например, отображая видео фреймовый буфер без кэширования. Этот флаг - страничный модификатор защиты, только правильный когда использовано одной из страничных защит кроме PAGE_NOACCESS.
Обратные Величины
Если функция добивается успеха, обратная величина является базовым адресом размещенной области страниц. Если функция терпит неудачу, обратная величина НЕДЕЙСТВИТЕЛЬНА. Для того, чтобы расширять информацию ошибки, назовите GetLastError.
Замечания
VirtualAlloc МОЖЕТ выполнить следующие операции:
Совершать область страниц зарезервированных предшествующим вызовом в функцию VirtualAlloc. Резерв область свободных страниц. Резервировать и совершать область свободных страниц.
Вы можете использовать VirtualAlloc, чтобы резервировать блока страниц затем делать дополнительными вызовами на VirtualAlloc, чтобы совершать индивидуальные страницы из резервного блока. Это позволяет процесс, чтобы резервировать дипазон своего виртуального пространства адреса не поглощая физическую память пока это не будет не нужно. Каждая страница в пространстве виртуального адреса процесса - в одном из трех состояний:
Государственное Значение Освободите страницу не совершен или зарезервирован и не доступно в процесс. VirtualAlloc МОЖЕТ зарезервировать, или одновременно резервировать и совершать, свободную страницу. Резервный дипазон адресов не может быть использован другими функциями распределения, но страница не доступна и не связала физическую память с ним. VirtualAlloc МОЖЕТ совершить резервную страницу, но это не может зарезервировать это вторично. Функция VirtualFree может выпустить резервную страницу, делающую это свободная страница. Совершенная память Медицинского осмотра распределена для страницы, и доступ управлялся кодом защиты. Система инициализирует и загружает каждую совершенную страницу в физическую память только в первой попытке, чтобы читать или записываться на эту страницу. Когда процесс завершается, система выпускает память для совершенных страниц. VirtualAlloc МОЖЕТ совершить уже совершенную страницу. Это означает, что Вы можете совершить дипазон страниц, независимо от того, что они уже совершены, и функция не потерпит неудачу. VirtualFree МОЖЕТ decommit совершенная страница, выпускающая страничную память, или это может одновременно decommit и выпускать совершенную страницу.
Если параметр lpAddress не НЕДЕЙСТВИТЕЛЕН, функция использует lpAddress и параметры dwSize, чтобы вычислять область страниц, которые нужно распределяться. Текущее состояние целого дипазона страниц должно быть совместимым с типом распределения определенного параметром flAllocationType. В противном случае, функция терпит неудачу и ни одна из страниц не распределены. Это требование совместимости не предотвращает совершая уже совершенную страницу; смотри предыдущий список.
Флаг модификатора защиты PAGE_GUARD устанавливает страницы охраны. Действие страниц Охраны как однократные тревоги доступа. Смотри Страницы Охраны.
Смотри Также
GlobalAlloc, HeapAlloc, VirtualFree, VirtualLock, VirtualProtect, VirtualQuery
|
|
|
|
| |