Función ZwMapViewOfSectionEx (wdm.h)
La rutina ZwMapViewOfSectionEx asigna una vista de una sección al espacio de direcciones virtuales de un proceso de asunto.
Sintaxis
NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
[in] ULONG ExtendedParameterCount
);
Parámetros
[in] SectionHandle
Identificador de un objeto de sección. Este identificador se crea mediante una llamada correcta a ZwCreateSection o ZwOpenSection.
[in] ProcessHandle
Identificador del objeto que representa el proceso en el que se debe asignar la vista. Use la macro ZwCurrentProcess para especificar el proceso actual. El identificador debe haberse abierto con PROCESS_VM_OPERATION acceso.
[in, out] BaseAddress
Puntero a una variable que recibe la dirección base de la vista. Si el valor de este parámetro no es NULL, la vista se asigna a partir de la dirección virtual especificada redondeada hacia abajo hasta el siguiente límite de dirección de 64 kilobytes.
[in, out, optional] SectionOffset
Puntero a una variable que recibe el desplazamiento, en bytes, desde el principio de la sección hasta la vista. Si este puntero no es NULL, el desplazamiento se redondea hacia abajo hasta el siguiente límite de tamaño de granularidad de asignación.
[in, out] ViewSize
Puntero a una variable SIZE_T. Si el valor inicial de esta variable es cero, ZwMapViewOfSectionEx asigna una vista de la sección que comienza en SectionOffset y continúa hasta el final de la sección. De lo contrario, el valor inicial especifica el tamaño de la vista, en bytes. ZwMapViewOfSectionEx siempre redondea este valor hasta el múltiplo más cercano de PAGE_SIZE antes de asignar la vista.
Al devolver, el valor recibe el tamaño real, en bytes, de la vista.
[in] AllocationType
Especifica un conjunto de marcas que describe el tipo de asignación que se va a realizar para la región de páginas especificada. Las marcas válidas son MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK y MEM_REPLACE_PLACEHOLDER. Aunque no se permite MEM_COMMIT, se implica a menos que se especifique MEM_RESERVE. Para obtener más información sobre las marcas MEM_XXX , vea la descripción de las rutinas VirtualAlloc y MapViewOfFile3 .
[in] PageProtection
Especifica la protección de página que se va a aplicar a la vista asignada.
Para los objetos de sección creados con el atributo SEC_IMAGE, el parámetro PageProtection no tiene ningún efecto y se puede establecer en cualquier valor válido, como PAGE_READONLY.
Para los objetos de sección creados con el atributo SEC_IMAGE_NO_EXECUTE, el valor PageProtection debe establecerse en PAGE_READONLY.
Para las secciones que no son de imagen, el valor del parámetro PageProtection debe ser compatible con la protección de páginas de la sección que se especificó cuando se llamó a ZwCreateSection.
ZwMapViewOfSectionEx siempre establece el tipo de caché de las páginas asignadas para que coincidan con el tipo de caché proporcionado cuando se creó el objeto de sección. Por ejemplo, si se llamó a ZwCreateSection con la marca SEC_NOCACHE, ZwMapViewOfSectionEx asignará las páginas sin almacenar en caché, independientemente de si el parámetro PageProtection incluye o no la marca PAGE_NOCACHE.
[in, out, optional] ExtendedParameters
Puntero opcional a uno o varios parámetros extendidos de tipo MEM_EXTENDED_PARAMETER. Para obtener más información sobre los parámetros extendidos, vea la descripción de la rutina MapViewOfFile3 .
[in] ExtendedParameterCount
Especifica el número de elementos de la matriz ExtendedParameters.
Valor devuelto
ZwMapViewOfSectionEx devuelve un valor NTSTATUS. Entre los valores devueltos posibles se incluyen los siguientes:
Código devuelto | Descripción |
---|---|
STATUS_SUCCESS | La rutina realizó correctamente la operación solicitada. |
STATUS_CONFLICTING_ADDRESSES | El intervalo de direcciones especificado entra en conflicto con un intervalo que ya está reservado. |
STATUS_INVALID_PAGE_PROTECTION | El valor especificado para el parámetro PageProtection no es válido. |
STATUS_SECTION_PROTECTION | El valor especificado para el parámetro PageProtection no es compatible con la protección de página especificada cuando se creó la sección. |
Comentarios
Varias vistas diferentes de una sección se pueden asignar simultáneamente al espacio de direcciones virtuales de uno o varios procesos.
No use ZwMapViewOfSectionEx para asignar un intervalo de memoria de \Device\PhysicalMemory al modo de usuario, a menos que el controlador haya asignado directamente el intervalo de memoria a través de MmAllocatePagesForMdlEx u otro método que garantice que ningún otro componente del sistema haya asignado el mismo intervalo de memoria con un valor de MEMORY_CACHING_TYPE diferente.
Las aplicaciones de usuario no pueden acceder directamente a \Device\PhysicalMemory a partir de Windows Server 2003 con Service Pack 1 (SP1) y solo pueden acceder a él si el controlador pasa un identificador a la aplicación.
Para obtener más información sobre los objetos de sección, vea Objetos y vistas de sección.
Si la llamada a esta función se produce en modo de usuario, debe usar el nombre "NtMapViewOfSectionEx" en lugar de "ZwMapViewOfSectionEx".
En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Servicios del sistema nativo de Windows se pueden comportar de forma diferente en la forma en que controlan e interpretan los parámetros de entrada. Para obtener más información sobre la relación entre las versiones NtXxx y ZwXxx de una rutina, vea Using Nt and Zw Versions of the Native System Services Routines.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 11, versión 24H2 |
Encabezado | wdm.h |
Consulte también
Uso de las versiones Nt y Zw de las rutinas nativas de Servicios del sistema