Compartir a través de


Administración de secciones de memoria

Un controlador puede crear un objeto de sección mediante una llamada a ZwCreateSection, que devuelve un identificador al objeto de sección. Use el parámetro FileHandle para especificar el archivo de respaldo o NULL si la sección no está respaldada por archivos. Se pueden abrir identificadores adicionales para el objeto de sección mediante ZwOpenSection.

Para que los datos que pertenecen a un objeto de sección sean accesibles dentro del espacio de direcciones del proceso actual, se debe asignar una vista de la sección. Los controladores pueden asignar una vista de una sección al espacio de direcciones del proceso actual mediante la rutina ZwMapViewOfSection . El parámetro SectionOffset especifica el desplazamiento de bytes donde comienza la vista dentro de la sección y ViewSize especifica el número de bytes que se van a asignar.

El parámetro Protect especifica las operaciones permitidas en la vista. Especifique PAGE_READONLY para una vista de solo lectura, PAGE_READWRITE para una vista de lectura y escritura y PAGE_WRITECOPY para una vista de copia en escritura.

No se asigna memoria física para una vista hasta que se accede al intervalo de memoria virtual. El primer acceso del intervalo de memoria provoca un error de página; Después, el sistema asigna una página para contener esa ubicación de memoria. Si la sección está respaldada por archivos, el sistema lee el contenido del archivo que corresponde a esa página y lo copia en la memoria. (Tenga en cuenta que los objetos y vistas de sección no utilizado usan algunos grupos paginados y no paginados con fines de contabilidad).

Después de que un controlador ya no use una vista, lo desasignación realizando una llamada a ZwUnmapViewOfSection. Una vez que el controlador ya no usa el objeto de sección, cierra el identificador de sección con ZwClose. Tenga en cuenta que después de asignar la vista y no se asignarán otras vistas, es seguro llamar inmediatamente a ZwClose en el identificador de sección; la vista (y el objeto de sección) continúan existiendo hasta que la vista no está asignada. Esta es la práctica recomendada porque reduce el riesgo de que el controlador no cierre el controlador.