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 alto 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 tiempo de creación de secciones).

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

Al devolver, 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 los procesos secundarios creados 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_LARGE_PAGES, MEM_RESERVE y MEM_TOP_DOWN. 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 , consulte la descripción de la rutina VirtualAlloc .

[in] Win32Protect

Especifica el tipo de protección para la región de las páginas confirmadas inicialmente. Los controladores intermedios y de dispositivo deben establecer este valor en PAGE_READWRITE.

Valor devuelto

ZwMapViewOfSection 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 de direcciones ya reservado o el tipo de atributo de caché especificado entra en conflicto con el atributo de caché existente del intervalo de direcciones. Por ejemplo, si la memoria que se asigna se encuentra dentro de una página grande que ya está asignada como totalmente almacenada en caché, es ilegal solicitar asignar esta memoria como combinada sin caché o escritura.
STATUS_INVALID_PAGE_PROTECTION El valor especificado para el parámetro Protect no es válido.
STATUS_SECTION_PROTECTION El valor especificado para el parámetro AllocationType no es compatible con el tipo de protección especificado 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.

Si la sección especificada no existe o no se permite el acceso solicitado, ZwMapViewOfSection devuelve un error.

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 MmAllocatePagesForMdl 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 "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 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
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

MEMORY_CACHING_TYPE

MmAllocatePagesForMdl

Uso de las versiones Nt y Zw de las rutinas nativas de Servicios del sistema

VirtualAlloc

ZwCurrentProcess

ZwOpenSection

ZwUnmapViewOfSection