VOID
RtlMoveMemory(
IN PVOID Destination,
IN CONST VOID *Source,
IN ULONG Length
);
RtlMoveMemory moves memory either forward or backward, aligned or unaligned, in 4-byte blocks, followed by any remaining bytes.
The (Source + Length) can overlap the Destination range passed in to RtlMoveMemory.
Callers of RtlMoveMemory can be running at any IRQL if both memory blocks are resident. Otherwise, the caller must be running at IRQL < DISPATCH_LEVEL.