Función MmCopyMemory (ntddk.h)
La rutina MmCopyMemory copia el intervalo especificado de memoria virtual o física en el búfer proporcionado por el autor de la llamada.
Sintaxis
NTSTATUS MmCopyMemory(
[in] PVOID TargetAddress,
[in] MM_COPY_ADDRESS SourceAddress,
[in] SIZE_T NumberOfBytes,
[in] ULONG Flags,
[out] PSIZE_T NumberOfBytesTransferred
);
Parámetros
[in] TargetAddress
Puntero a un búfer proporcionado por el autor de la llamada. Este búfer debe estar en memoria no paginable.
[in] SourceAddress
Estructura de MM_COPY_ADDRESS , pasada por valor, que contiene la dirección virtual o la dirección física de los datos que se van a copiar en el búfer al que apunta TargetAddress.
[in] NumberOfBytes
Número de bytes que se van a copiar de SourceAddress a TargetAddress.
[in] Flags
Marcas que indican si SourceAddress es una dirección virtual o una dirección física. Los siguientes bits de marca se definen para este parámetro.
Bit de marca | Descripción |
---|---|
MM_COPY_MEMORY_PHYSICAL | SourceAddress especifica una dirección física. |
MM_COPY_MEMORY_VIRTUAL | SourceAddress especifica una dirección virtual. |
Estos dos bits de marca son mutuamente excluyentes. El autor de la llamada debe establecer uno u otro, pero no ambos.
[out] NumberOfBytesTransferred
Puntero a una ubicación en la que la rutina escribe correctamente el número de bytes copiados correctamente de la ubicación SourceAddress en el búfer en TargetAddress.
Valor devuelto
MmCopyMemory devuelve STATUS_SUCCESS si todo el intervalo se ha copiado correctamente. De lo contrario, se devuelve un estado de error y el autor de la llamada debe inspeccionar el valor de salida al que apunta el parámetro NumberOfBytesTransferred para determinar cuántos bytes se copiaron realmente.
Comentarios
Los controladores en modo kernel pueden llamar a esta rutina para acceder de forma segura a direcciones físicas o virtuales arbitrarias.
Si se establece la marca MM_COPY_MEMORY_PHYSICAL, SourceAddress debe apuntar a la memoria normal que está bajo control del sistema operativo. MmCopyMemory devolverá un código de estado de error para las direcciones físicas que hacen referencia al espacio de E/S, que incluye dispositivos asignados a memoria y tablas de firmware. Para acceder a la memoria física en el espacio de E/S, los controladores pueden usar la rutina MmMapIoSpace .
Si se establece la marca MM_COPY_MEMORY_VIRTUAL, SourceAddress puede apuntar a un búfer en el espacio de direcciones del sistema o a un búfer en el espacio de direcciones del usuario del proceso actual. Si el autor de la llamada no controla la duración de la asignación que contiene la dirección de origen especificada, MmCopyMemory podría producir un error o podría devolver datos incoherentes, pero no provocará un bloqueo del sistema, incluso para las direcciones del sistema que no son válidas y desencadenaría una comprobación de errores si se hace referencia directamente. MmCopyMemory devolverá un código de estado de error para las direcciones virtuales del sistema que hacen referencia al espacio de E/S.
Si la memoria en la dirección virtual especificada por SourceAddress no es residente, MmCopyMemory intentará convertirla en residente.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 8.1. |
Plataforma de destino | Universal |
Encabezado | ntddk.h |
Library | Ntoskrnl.lib |
IRQL | <= APC_LEVEL |