Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La función CopyFromUserToMode copia de forma segura los datos de la memoria en modo de usuario en memoria en modo kernel o en modo de usuario en función del modo de procesador especificado.
Syntax
VOID CopyFromUserToMode(
VOID *Destination,
volatile const VOID *Source,
SIZE_T Length,
KPROCESSOR_MODE Mode
);
Parameters
Destination
[out] Puntero a la ubicación de memoria donde se copiarán los datos.
Source
[in] Puntero a la ubicación de memoria en modo de usuario desde la que se van a copiar los datos.
Length
[in] Número de bytes que se van a copiar.
Mode
[in] Modo de procesador que determina cómo se realiza el acceso a la memoria. El modo puede ser uno de los siguientes valores.
| Value | Meaning |
|---|---|
| KernelMode | El destino apunta a la memoria en modo kernel. La función realiza una copia del modo de usuario a la memoria del kernel con memory_order_relaxed semántica. Consulte Comentarios para obtener más información. |
| UserMode | El destino apunta a la memoria en modo de usuario. La función realiza una copia del modo de usuario a la memoria en modo de usuario con memory_order_relaxed semántica. |
Valor devuelto
None
Remarks
Esta función proporciona una manera segura de copiar datos de la memoria en modo de usuario a memoria en modo kernel o en modo de usuario, con el mecanismo de copia determinado por el modo de procesador especificado. Esto permite operaciones de memoria flexibles que se pueden adaptar a diferentes contextos de ejecución.
Cuando el modo es KernelMode:
La función realiza una copia volátil mediante memory_order_relaxed semántica.
La función no se reconoce como intrínseca del compilador, por lo que el compilador nunca optimizará la llamada (por completo o reemplazará la llamada por una secuencia equivalente de instrucciones).
Cuando se devuelve la llamada, los datos se han copiado de Origen a Destino. El acceso a la memoria de esta función al origen y el destino solo se realizará dentro de la función (por ejemplo, el compilador no puede mover los accesos de memoria fuera de esta función).
La función puede realizar accesos a memoria no asignadas si la plataforma lo permite.
La función puede tener acceso a ubicaciones de memoria más de una vez como parte de su operación de copia.
La función no admite operaciones de copia cuando origen y destino se superponen entre sí.
La función genera una excepción estructurada si se produce un error en la operación de copia, como cuando la dirección de origen no es una dirección válida en modo de usuario, la dirección de destino no es válida para el modo especificado, o bien la dirección no es accesible.
Si va a copiar desde una estructura de tamaño fijo, debe usar ReadStructFromUser en su lugar para evitar el riesgo de pasar el tamaño incorrecto.
El compilador nunca optimizará esta función ni creará accesos adicionales a esta ubicación de memoria antes de llamar a la función o después de que se devuelva la función (a menos que el código fuente realice explícitamente estos accesos).
Esta función funciona en todas las versiones de Windows, no solo en la más reciente. Debe consumir el WDK más reciente para obtener la declaración de función del encabezado usermode_accessors.h . También necesita la biblioteca (umaccess.lib) del WDK más reciente. Sin embargo, el controlador resultante se ejecutará correctamente en versiones anteriores de Windows.
Requirements
| Requirement | Value |
|---|---|
| Cliente mínimo compatible | Ver comentarios |
| Header | usermode_accessors.h |
| Library | umaccess.lib |
| IRQL | Menor o igual que APC_LEVEL |