|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
VirtualAllocEx
[New - Windows NT] The VirtualAllocEx function reserves, commits, or both, a region of memory within the virtual address space of a specified process. The function initializes the memory it allocates to zero.
The difference between the VirtualAllocEx function and the VirtualAlloc function is that VirtualAlloc allocates memory within the address space of the calling process, while VirtualAllocEx lets you specify a process.
LPVOID VirtualAllocEx(
HANDLE hProcess, // process within which to allocate memory LPVOID lpAddress, // desired starting address of allocation DWORD dwSize, // size, in bytes, of region to allocate DWORD flAllocationType, // type of allocation DWORD flProtect // type of access protection );
Parameters
hProcess
Handle to a process. The function allocates memory within the virtual address space of this process.
You must have PROCESS_VM_OPERATION access to the process. If you do not, the function fails.
lpAddress
Pointer that specifies a desired starting address for the region of pages that you want to allocate.
If you are reserving memory, the function rounds this address down to the nearest 64-kilobyte boundary. If you are committing memory that is already reserved, the function rounds this address down to the nearest page boundary. To determine the size of a page on the host computer, use the GetSystemInfo function. If lpAddress is NULL, the function determines where to allocate the region.
dwSize
Specifies the size, in bytes, of the region of memory to allocate.
If lpAddress is NULL, the function rounds dwSize up to the next page boundary. If lpAddress is not NULL, the function allocates all pages that contain one or more bytes in the range from lpAddress to (lpAddress+dwSize). This means, for example, that a 2-byte range that straddles a page boundary causes the function to allocate both pages.
flAllocationType
A set of bit flags that specifies the type of memory allocation. You can set one or more of the following flags:
Flag Meaning MEM_COMMIT The function allocates actual physical storage in memory or in the paging file on disk for the specified region of memory pages. The function initializes the memory to zero. An attempt to commit a memory page that is already committed does not cause the function to fail. This means that you can commit a range of pages without first determining the current commitment state of each page.If a memory page is not yet reserved, setting this flag causes the function to both reserve and commit the memory page. MEM_RESERVE The function reserves a range of the process's virtual address space without allocating any actual physical storage in memory or in the paging file on disk. Other memory allocation functions, such as malloc and LocalAlloc, cannot use a reserved range of memory until it is released. You can commit reserved memory pages in subsequent calls to the VirtualAllocEx function. MEM_TOP_DOWN The function allocates memory at the highest possible address.
flProtect
A set of bit flags that specifies access protection for the region of pages you are allocating. You can specify one of the following flags, along with the PAGE_GUARD and PAGE_NOCACHE protection modifier flags, as desired:
Flag Meaning PAGE_READONLY Enables read permission 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 permission and execute permission, an attempt to execute code in the committed region results in an access violation. PAGE_READWRITE Enables both read and write permission to the committed region of pages. PAGE_EXECUTE Enables execute permission 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 permission 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 permission 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.
A set of bit flags that specifies access protection for the region of pages you are allocating. You can specify one of the following flags, along with the PAGE_GUARD and PAGE_NOCACHE protection modifier flags, as desired:
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
The VirtualAllocEx function can perform the following operations:
· Commit a region of pages reserved by a previous call to the VirtualAllocEx function. · Reserve a region of free pages. · Reserve and commit a region of free pages.
You can use VirtualAllocEx to reserve a block of pages and then make additional calls to VirtualAllocEx to commit individual pages from the reserved block. This lets you reserve a range of a process's virtual address space without consuming physical storage until it is needed. Each page of memory in a 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. The VirtualAllocEx function can reserve, or simultaneously reserve and commit, a free page. Reserved The page is 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. The VirtualAllocEx function can commit a reserved page, but it cannot reserve it a second time. You can use the VirtualFreeEx function to release a reserved page in a specified process, 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. The VirtualAllocEx function 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. You can use the VirtualFreeEx function to decommit a committed page in a specified process, or to simultaneously decommit and free 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 is 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. For more information see Guard Pages.
See Also
GlobalAlloc, HeapAlloc, VirtualAlloc, VirtualFree, VirtualFreeEx, VirtualLock, VirtualProtect, VirtualQuery
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
VirtualAllocEx
[Новый - Windows NT] Функция VirtualAllocEx резервирует, совершает, или оба, регион памяти в пределах виртуального пространства адреса определенного процесса. Функция инициализирует память, которую она распределяется в нуль.
Различие между функцией VirtualAllocEx и функция VirtualAlloc -, что VirtualAlloc распределяет память в пределах пространства адреса вызова процесса, тогда как VirtualAllocEx позволяет, Вы определяете процесс.
LPVOID VirtualAllocEx(
РУЧКА hProcess, // обрабатывается в пределах которого, чтобы распределять память LPVOID lpAddress, // желаемый запуск адреса распределения DWORD dwSize, // размера, в байтах, региона, чтобы распределять DWORD flAllocationType, // тип типа распределения DWORD flProtect // защиты доступа );
Параметры
hProcess
Прооперируйте процесс. Функция распределяет память в пределах виртуального пространства адреса этого процесса.
Вы должны иметь доступ PROCESS_VM_OPERATION к процессу. Если Вы делаете нет, функция терпит неудачу.
lpAddress
Указатель, который определяет желаемый запуск адреса для региона страниц, что Вы хотите распределить.
Если Вы резервируете память, функция округляет этот адрес вплоть до ближайшей 64- килобайтной границы. Если Вы совершаете память, которая уже зарезервирована, функция округляет этот адрес вплоть до ближайшей страничной границы. Для того, чтобы определять размер страницы в главном компьютере, используйте функцию GetSystemInfo. Если lpAddress НЕДЕЙСТВИТЕЛЕН, функция определяется где, чтобы распределять регион.
dwSize
Определяет размер, в байтах, региона памяти, чтобы распределяться.
Если lpAddress НЕДЕЙСТВИТЕЛЕН, функция округляет dwSize вплоть до следующей страничной границы. Если lpAddress не НЕДЕЙСТВИТЕЛЕН, функция распределяет все страницы, которые содержат один или более байтов в дипазоне из lpAddress, чтобы (lpAddress+dwSize). Это означает, например, что 2- байтовый дипазон на котором располагается страничные причины границы функция, чтобы распределять обе страницы.
flAllocationType
Набор бита сигнализирует, что определяет тип распределения памяти. Вы можете установить одно или более из следующего флагов:
Значение Флага MEM_COMMIT функция распределяет фактическую физическую память в памяти или в файле подкачки на диске для определенной области страниц памяти. Функция инициализирует память в нуль. Попытка, чтобы совершать страницу памяти, которая не уже совершена заставляет функцию, чтобы терпеть неудачу. Это означает, что Вы можете совершить дипазон страниц без первого, определяющий текущее состояние обязательства каждой страницы.Если страница памяти еще не зарезервирована, устанавливая этот флаг вызывает функцию как в резерв так и совершать страницу памяти. MEM_RESERVE функция резервирует дипазон пространства виртуального адреса процесса не распределяя любую фактическую физическую память в памяти или в файле подкачки на диске. Другое распределение памяти функционирует, как например, malloc и LocalAlloc, не мочь использовать резервный дипазон памяти пока оно не будет выпущено. Вы можете совершить резервные страницы памяти на последующих вызовах в функцию VirtualAllocEx. 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.
Установка бита сигнализирует, что определяет защиту доступа для области страниц, которая Вы распределяете. Вы можете определить одно из следующего флагов, вместе с PAGE_GUARD и флагами модификатора защиты PAGE_NOCACHE, как захотеть:
Обратные Величины
Если функция добивается успеха, обратная величина является базовым адресом размещенной области страниц. Если функция терпит неудачу, обратная величина НЕДЕЙСТВИТЕЛЬНА. Для того, чтобы расширять информацию ошибки, назовите GetLastError.
Замечания
Функция VirtualAllocEx может выполнить следующие операции:
Совершать область страниц зарезервированных предшествующим вызовом в функцию VirtualAllocEx. Резерв область свободных страниц. Резервировать и совершать область свободных страниц.
Вы можете использовать VirtualAllocEx, чтобы резервировать блока страниц затем делать дополнительными вызовами на VirtualAllocEx, чтобы совершать индивидуальные страницы из резервного блока. Это позволяет Вам резервировать дипазон пространства виртуального адреса процесса не поглощая физическую память пока это не будет не нужно. Каждая страница памяти в пространстве виртуального адреса процесса - в одном из трех состояний:
Государственное Значение Освободите страницу не совершен или зарезервирован и не доступно в процесс. Функция VirtualAllocEx может зарезервировать, или одновременно резервировать и совершать, свободную страницу. Резервный страница зарезервирована. Дипазон адресов не может быть использован другими функциями распределения, но страница не доступна и не связала физическую память с ним. Функция VirtualAllocEx может совершить резервную страницу, но это не может зарезервировать это вторично. Вы можете использовать функцию VirtualFreeEx, чтобы выпускать резервной странице в определенном процессе, получении это свободная страница. Совершенная память Медицинского осмотра распределена для страницы, и доступ управлялся кодом защиты. Система инициализирует и загружает каждую совершенную страницу в физическую память только в первой попытке, чтобы читать или записываться на эту страницу. Когда процесс завершается, система выпускает память для совершенных страниц. Функция VirtualAllocEx может совершить уже совершенную страницу. Это означает, что Вы можете совершить дипазон страниц, независимо от того, что они уже совершены, и функция не потерпит неудачу. Вы можете использовать функцию VirtualFreeEx, чтобы decommit совершенная страница в определенный процесс, или на одновременно decommit и освободите совершенную страницу.
Если параметр lpAddress не НЕДЕЙСТВИТЕЛЕН, функция использует lpAddress и параметры dwSize, чтобы вычислять область страниц, которые нужно распределяться. Текущее состояние целого дипазона страниц должно быть совместимым с типом распределения определенного параметром flAllocationType. В противном случае, функция терпит неудачу и ни одна из страниц не распределены. Это требование совместимости не предотвращает совершая уже совершенную страницу; смотри предыдущий список.
Флаг модификатора защиты PAGE_GUARD устанавливает страницы охраны. Действие страниц Охраны как однократные тревоги доступа. Более подробно смотри Страницы Охраны.
Смотри Также
GlobalAlloc, HeapAlloc, VirtualAlloc, VirtualFree, VirtualFreeEx, VirtualLock, VirtualProtect, VirtualQuery
|
|
|
|
| |