Movatterモバイル変換


[0]ホーム

URL:


Skip to main content

This browser is no longer supported.

Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

Download Microsoft EdgeMore info about Internet Explorer and Microsoft Edge
Table of contentsExit editor mode

CopyMemory function

Feedback

In this article

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 theRtlCopyMemory 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 theMoveMemory function.

Security Remarks

The first parameter,Destination, must be large enough to holdLength bytes ofSource; 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 ifDestination is a stack-based buffer. Be aware that the last parameter,Length, is the number of bytes to copy intoDestination, not the size of theDestination.

Examples

The following code example shows a safer way to useCopyMemory. Alternatively, you could use thememcpy_s orwmemcpy_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 XP [desktop apps only]

Minimum supported server

Windows Server 2003 [desktop apps only]

Header

WinBase.h (include Windows.h)

DLL

Kernel32.dll

See also

FillMemory

Memory Management Functions

MoveMemory

SecureZeroMemory

ZeroMemory


  • Last updated on

In this article