Copies a block of memory from one location to another.
Syntax
void CopyMemory(
__in PVOID Destination,
__in const VOID *Source,
__in SIZE_T Length
);
Parameters
- Destination [in]
-
A pointer to the starting address of the copied block's destination.
- Source [in]
-
A pointer to the starting address of the block of memory to copy.
- Length [in]
-
The size of the block of memory to copy, in bytes.
Return Value
This function has no return value.
Remarks
This function is defined as the RtlCopyMemory function. Its implementation is provided inline. For more information, see Winbase.h and Winnt.h.
If the source and destination blocks overlap, the results are undefined. For overlapped blocks, use the
MoveMemory function.
Security Remarks
The first parameter, Destination, must be large enough to hold Length bytes of Source; otherwise, a buffer overrun may occur. This may lead to a denial of service attack against the application if an access violation occurs or, in the worst case, allow an attacker to inject executable code into your process. This is especially true if Destination is a stack-based buffer. Be aware that the last parameter, Length, is the number of bytes to copy into Destination, not the size of the Destination.
Examples
The following code example shows a safer way to use
CopyMemory. Alternatively, you could use the memcpy_s or wmemcpy_s function.
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define BUFFER_SIZE 1024
#define COPY_SIZE 512
/*
MyCopyMemory - A wrapper for CopyMemory
buf - destination buffer
pbData - source buffer
cbData - size of block to copy, in bytes
bufsize - size of the destination buffer
*/
void MyCopyMemory(TCHAR *buf, TCHAR *pbData, SIZE_T cbData, SIZE_T bufsize)
{
CopyMemory(buf, pbData, min(cbData,bufsize));
}
void main()
{
TCHAR buf[BUFFER_SIZE] = TEXT("This is the destination");
TCHAR pbData[BUFFER_SIZE] = TEXT("This is the source");
MyCopyMemory(buf, pbData, COPY_SIZE*sizeof(TCHAR), BUFFER_SIZE*sizeof(TCHAR));
_tprintf(TEXT("Destination buffer contents: %s\n"), buf);
}
Requirements
| Minimum supported client | Windows 2000 Professional |
| Minimum supported server | Windows 2000 Server |
| Header | Winbase.h (include Windows.h) |
See Also
- FillMemory
- Memory
Management Functions
- MoveMemory
- SecureZeroMemory
- ZeroMemory
Send comments about this topic to Microsoft
Build date: 9/17/2009