Estructura MEMORY_BASIC_INFORMATION
Definición
typedef struct _MEMORY_BASIC_INFORMATION { // mbi PVOID BaseAddress; // dirección base de la región PVOID AllocationBase; // dirección base de acomodo DWORD AllocationProtect; // protección de acceso inicial DWORD RegionSize; // tamaño de la región en bytes DWORD State; // acomodada, reservada, libre DWORD Protect; // protección de acceso actual DWORD Type; // tipo de páginas } MEMORY_BASIC_INFORMATION; typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
La estructura MEMORY_BASIC_INFORMATION contiene información sobre un rango de páginas en el espacio de direcciones virtual de un proceso. Las funciones VirtualQuery y VirtualQueryEx usan esta estructura.
Descripción
BaseAddress: apunta a la dirección base de la región de páginas.
AllocationBase: apunta a la dirección base de un rango de páginas acomodadas por la función VirtualAlloc. La página apuntada por el miembro BaseAddress estará contenida dentro de este rango de acomodo.
AllocationProtect: especifica la protección de acceso dada cuando la región fue acomodada inicialmente. Una de las banderas siguientes puede estar presente, junto con las banderas modificadoras de protección PAGE_GUARD y PAGE_NOCACHE:
Bandera | Significado |
---|---|
PAGE_READONLY | Permite el acceso de lectura en las páginas de la región asignadas. Un intento de escribir en la región asignada producirá una violación de acceso. Si el sistema diferencia entre acceso de sólo lectura y acceso de ejecución, un intento de ejecutar código en la región asignada también producirá una violación de acceso. |
PAGE_READWRITE | Permite tanto el acceso de lectura como el de escritura en las páginas de la región asignada. |
PAGE_WRITECOPY | Proporciona el acceso copiar-en-lectura (copy-on-write) a la región de páginas asignadas. |
PAGE_EXECUTE | Permite el acceso de ejecución en las páginas de la región asignada. Un intento de leer o escribir en la región asignada provocará una violación de acceso. |
PAGE_EXECUTE_READ | Permite el acceso de ejecución y lectura en las páginas de la región asignda. Un intento de escribir en la región asignada provocará una violación de acceso. |
PAGE_EXECUTE_READWRITE | Permite el acceso de ejecución, lectura y escritura en las páginas de la región asignada. |
PAGE_EXECUTE_WRITECOPY | Permite acceso de ejecución, lectura y escritura a las páginas de la región asignada. Las páginas son de lectura-en-escritura (read-on-write) y copia-en-escritura (copy-on-write). |
PAGE_GUARD | Protege la página con la protección subyacente. Sin embargo, el acceso a la región produce una condición de "entrada en guarda de página" que debe alcanzarse en el proceso. Esta bandera es un modificador de protección de página, sólo válido cuando se usa con una de las protecciones de página distintas de PAGE_NOACCESS. |
PAGE_NOACCESS | Desactiva todos los accesos en las páginas de la región asignada. Cualquier intento de leer desde, escribir o ejecutar en la región asignada provocará una excepción de violación de acceso, llamada un fallo de protección general (GP). |
PAGE_NOCACHE | Permite no "cachear" las páginas de la región asignada. Los atributos del hardware para la memoria física deben ser especificadas como "no cache". Esto no se recomienda para uso general. Es normal para manejadores de dispositivos; por ejemplo, mapear un buffer de cuadros de video sin caché. Esta bandera es un modificador de protección de página, válido sólo cuando se usa con una de las protecciones de páginas que no sean PAGE_NOACCESS. |
RegionSize: especifica el tamaño, en bytes, de la región que empieza en la dirección base en la que todas las páginas tienen atributos idénticos.
State: especifica el estado de las páginas de la región. Se indica uno de los estados siguientes:
Estado | Significado |
---|---|
MEM_COMMIT | Indica páginas asignadas para las que se ha acomodado almacenamiento físico, ya sea en memoria o en el fichero de paginación de disco. |
MEM_FREE | Indica páginas libres no accesibles por el proceso que llama y disponibles para ser acomodadas. Para las páginas libres, la información en los miembros AllocationBase, AllocationProtect, Protect y Type está indefinida. |
MEM_RESERVE | Indica páginas reservadas donde un rango de direcciones del espacio virtual del proceso está reservado sin acomodar ningún tipo de almacenamiento físico. Para las páginas reservadas, la información en el miembro Protect está indefinida. |
Protect: especifica la protección de acceso de las páginas en la región. Se especifica una de las banderas listadas para el miembro AllocationProtect.
Type: especifica el tipo de páginas en la región. Se definen los siguientes tipos:
Tipo | Significado |
---|---|
MEM_IMAGE | Indica que las páginas de memoria en la región están mapeadas a la vista de una sección de imagen. |
MEM_MAPPED | Indica que las páginas de memoria en la región están mapeadas a la vista de una sección<./td> |
MEM_PRIVATE | Indica que las páginas de memoria en la región son privadas (no se comparten con otros procesos). |