winnt.h

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).