Compartir a través de


Función ZwSetInformationVirtualMemory (ntifs.h)

La rutina ZwSetInformationVirtualMemory realiza una operación en una lista especificada de intervalos de direcciones en el espacio de direcciones del usuario de un proceso.

Sintaxis

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

Parámetros

[in] ProcessHandle

Especifica un identificador abierto para el proceso en el contexto del que se va a realizar la operación. Este identificador no puede ser válido. Use la macro NtCurrentProcess , definida en Ntddk.h, para especificar el proceso actual.

[in] VmInformationClass

Especifica el tipo de operación que se va a realizar. Establezca en VmPrefetchInformation definido en la enumeración VIRTUAL_MEMORY_INFORMATION_CLASS , consulte ntddk.h.

[in] NumberOfEntries

Número de entradas de la matriz a las que apunta el parámetro VirtualAddresses . Este parámetro no puede ser 0.

[in] VirtualAddresses

Puntero a una matriz de MEMORY_RANGE_ENTRY estructuras en las que cada entrada especifica un intervalo de direcciones virtuales que se va a procesar. Los intervalos de direcciones virtuales pueden cubrir cualquier parte del espacio de direcciones del proceso accesible por el proceso de destino.

[in] VmInformation

Puntero a un búfer que contiene información de memoria. El formato y el contenido del búfer dependen de la clase de información especificada.

Si VmInformationClass es VmPrefetchInformation, este parámetro no puede ser NULL y debe apuntar a una variable ULONG establecida en 0.

[in] VmInformationLength

Tamaño del búfer al que apunta VmInformation.

Si VmInformationClass es VmPrefetchInformation, debe ser sizeof (ULONG).

Valor devuelto

ZwSetInformationVirtualMemory devuelve STATUS_SUCCESS si se ejecuta correctamente o el código de error NTSTATUS adecuado en caso de error.

Comentarios

Los controladores llaman a la rutina ZwSetInformationVirtualMemory que conocen el conjunto de direcciones a las que accederán. Si es probable que estas direcciones ya no residan en la memoria (es decir, se han paginado en el disco), llamar a esta rutina en esos intervalos de direcciones antes de que el acceso reduzca la latencia general porque aporta eficazmente esos intervalos de direcciones desde el disco mediante solicitudes de E/S simultáneas grandes siempre que sea posible.

ZwSetInformationVirtualMemory permite a los controladores usar eficazmente el hardware del disco mediante la emisión de E/S simultáneas grandes siempre que sea posible cuando el controlador proporciona una lista de intervalos de direcciones de proceso a los que se va a acceder. Incluso para un único intervalo de direcciones (por ejemplo, una asignación de archivos), la rutina puede proporcionar mejoras de rendimiento mediante la emisión de una única E/S grande en lugar de las muchas E/S más pequeñas que se emitirían a través de errores de página.

Los controladores llaman a esta rutina exclusivamente para la optimización del rendimiento: la captura previa no es necesaria para acceder a los intervalos de direcciones de destino. La memoria capturada previamente no se agrega al espacio de trabajo del proceso de destino; se almacena en caché en memoria física. Cuando el proceso de destino accede a los intervalos de direcciones previamente capturados, se agregan al conjunto de trabajo.

Dado que esta llamada no es necesaria para el funcionamiento correcto del controlador, se trata como una sugerencia fuerte por parte del sistema y está sujeta a restricciones de memoria física habituales donde puede producir un error total o parcial en condiciones de memoria baja. También puede crear presión de memoria si se llama con intervalos de direcciones grandes, por lo que las aplicaciones solo deben capturar previamente los intervalos de direcciones que realmente usarán.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 10, versión 1511.
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs, PowerIrpDDis