Función ZwMapViewOfSection (wdm.h)
La rutina ZwMapViewOfSection asigna una vista de una sección al espacio de direcciones virtuales de un proceso de asunto.
Sintaxis
NTSYSAPI NTSTATUS ZwMapViewOfSection(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in] ULONG_PTR ZeroBits,
[in] SIZE_T CommitSize,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] SECTION_INHERIT InheritDisposition,
[in] ULONG AllocationType,
[in] ULONG Win32Protect
);
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] ZeroBits
Especifica el número de bits de dirección de orden superior que deben ser cero en la dirección base de la vista de sección. El valor de este parámetro debe ser menor que 21 y solo se usa si BaseAddress es NULL, es decir, cuando el autor de la llamada permite al sistema determinar dónde asignar la vista.
[in] CommitSize
Especifica el tamaño, en bytes, de la región confirmada inicialmente de la vista. CommitSize solo es significativo para las secciones con copia de seguridad de archivos de página y se redondea al múltiplo más cercano de PAGE_SIZE. (En el caso de las secciones que asignan archivos, los datos y la imagen se confirman en el momento de creación de la sección).
[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, ZwMapViewOfSection 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. ZwMapViewOfSection siempre redondea este valor hasta el múltiplo más cercano de PAGE_SIZE antes de asignar la vista.
En la devolución, el valor recibe el tamaño real, en bytes, de la vista.
[in] InheritDisposition
Especifica cómo se va a compartir la vista con procesos secundarios. Los valores posibles son:
ViewShare
La vista se asignará a cualquier proceso secundario que se cree en el futuro.
ViewUnmap
La vista no se asignará a procesos secundarios.
Normalmente, los controladores deben especificar ViewUnmap para este parámetro.
[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] Win32Protect
Especifica la protección de páginas que se va a aplicar a la vista asignada.
En el caso de los objetos de sección creados con el atributo SEC_IMAGE, el parámetro Win32Protect 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 win32Protect debe establecerse en PAGE_READONLY.
En las secciones que no son de imagen, el valor del parámetro Win32Protect debe ser compatible con la protección de páginas de la sección que se especificó cuando se llamó a ZwCreateSection.
ZwMapViewOfSection establece el tipo de caché de las páginas asignadas para que coincidan con el tipo de caché proporcionado al crear el objeto de sección. Por ejemplo, si se llamó a ZwCreateSection con la marca SEC_NOCACHE, ZwMapViewOfSection asignará las páginas sin almacenar en caché, independientemente de si el parámetro Win32Protect incluye o no la marca PAGE_NOCACHE.
Valor devuelto
ZwMapViewOfSection devuelve un valor NTSTATUS. Entre los posibles valores devueltos 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 Win32Protect no es válido. |
STATUS_SECTION_PROTECTION | El valor especificado para el parámetro Win32Protect 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 ZwMapViewOfSection 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 a \Device\PhysicalMemory directamente 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 "NtMapViewOfSection" en lugar de "ZwMapViewOfSection".
En el caso de las llamadas desde controladores en modo kernel, las versiones NtXxx y ZwXxx de una rutina de Windows Native System Services pueden comportarse 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 |
---|---|
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Consulte también
Uso de las versiones Nt y Zw de las rutinas nativas de System Services