Compartir a través de


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

ZwCreateSection

ZwOpenSection

ZwMapViewOfSectionEx

ZwUnmapViewOfSection

MapViewOfFile3