WdfMemoryCopyToBuffer 함수(wdfmemory.h)
[KMDF 및 UMDF에 적용]
WdfMemoryCopyToBuffer 메서드는 지정된 메모리 개체의 버퍼 내용을 지정된 대상 버퍼에 복사합니다.
구문
NTSTATUS WdfMemoryCopyToBuffer(
[in] WDFMEMORY SourceMemory,
[in] size_t SourceOffset,
[out] PVOID Buffer,
[in] size_t NumBytesToCopyTo
);
매개 변수
[in] SourceMemory
원본 버퍼를 나타내는 프레임워크 메모리 개체에 대한 핸들입니다.
[in] SourceOffset
원본 버퍼의 시작부터 오프셋(바이트)입니다. 복사 작업은 원본 버퍼의 지정된 오프셋에서 시작됩니다.
[out] Buffer
대상 버퍼에 대한 포인터입니다.
[in] NumBytesToCopyTo
원본 버퍼에서 대상 버퍼로 복사할 바이트 수입니다. 이 값은 원본 버퍼의 크기보다 크지 않아야 합니다.
반환 값
WdfMemoryCopyToBuffer 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
잘못된 매개 변수가 감지되었습니다. |
|
SourceOffset 매개 변수가 너무 크거나 NumBytesToCopyTo 매개 변수가 원본 버퍼 크기보다 큰 바이트 오프셋입니다. |
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
프레임워크는 드라이버가 SourceMemory 매개 변수가 포함할 수 있는 원본 버퍼보다 더 많은 바이트를 복사하도록 허용하지 않습니다.
프레임워크 메모리 개체에 대한 자세한 내용은 메모리 버퍼 사용을 참조하세요.
페이지 가능 메모리 풀에서 원본 또는 대상 버퍼를 할당한 경우 IRQL <= APC_LEVEL WdfMemoryCopyToBuffer 메서드를 호출해야 합니다. 그렇지 않으면 모든 IRQL에서 메서드를 호출할 수 있습니다.
예제
다음 코드 예제에서는 새 버퍼를 할당하고 메모리 개체 버퍼의 내용을 새 버퍼에 복사합니다.
PVOID pOutputBuffer = NULL;
NTSTATUS status = STATUS_SUCCESS;
pOutputBuffer = ExAllocatePoolWithTag(
NonPagedPool,
MY_BUFFER_LENGTH,
MY_POOL_TAG
);
if (pOutputBuffer != NULL){
status = WdfMemoryCopyToBuffer(
outputMemoryHandle,
0,
pOutputBuffer,
MY_BUFFER_LENGTH
);
}
else{
status = STATUS_INSUFFICIENT_RESOURCES;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
머리글 | wdfmemory.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | 모든 수준(설명 섹션 참조) |
DDI 규정 준수 규칙 | BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWriteA(kmdf) |