WdfMemoryCopyFromBuffer 함수(wdfmemory.h)
[KMDF 및 UMDF에 적용]
WdfMemoryCopyFromBuffer 메서드는 지정된 원본 버퍼의 내용을 지정된 메모리 개체의 버퍼에 복사합니다.
구문
NTSTATUS WdfMemoryCopyFromBuffer(
[in] WDFMEMORY DestinationMemory,
[in] size_t DestinationOffset,
[in] PVOID Buffer,
[in] size_t NumBytesToCopyFrom
);
매개 변수
[in] DestinationMemory
대상 버퍼를 나타내는 프레임워크 메모리 개체에 대한 핸들입니다.
[in] DestinationOffset
대상 버퍼의 시작부터 오프셋(바이트)입니다. 복사 작업은 대상 버퍼의 지정된 오프셋에서 시작됩니다.
[in] Buffer
원본 버퍼에 대한 포인터입니다.
[in] NumBytesToCopyFrom
원본 버퍼에서 대상 버퍼로 복사할 바이트 수입니다. 이 값은 원본 버퍼의 크기보다 크지 않아야 합니다.
반환 값
WdfMemoryCopyFromBuffer는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
잘못된 매개 변수가 감지되었습니다. |
|
DestinationOffset 매개 변수가 지정한 바이트 오프셋이 너무 큽니다. |
|
대상 오프셋에서 시작하여 DestinationOffset 매개 변수가 지정한 대상 버퍼의 크기가 NumBytesToCopyFrom 매개 변수보다 큽니다. |
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
프레임워크는 대상 버퍼가 NumBytesToCopyFrom 매개 변수가 지정하는 데이터의 양을 받을 수 있을 만큼 충분히 큰지 확인합니다.
프레임워크 메모리 개체에 대한 자세한 내용은 메모리 버퍼 사용을 참조하세요.
페이지 가능한 메모리 풀에서 원본 또는 대상 버퍼를 할당한 경우 IRQL <= APC_LEVEL WdfMemoryCopyFromBuffer 메서드를 호출해야 합니다. 그렇지 않으면 모든 IRQL에서 메서드를 호출할 수 있습니다.
예제
다음 코드 예제에서는 I/O 요청의 출력 버퍼를 나타내는 프레임워크 메모리 개체에 대한 핸들을 가져온 다음 다른 버퍼의 내용을 I/O 요청의 출력 버퍼에 복사합니다.
WDFMEMORY memoryBuffer;
NTSTATUS status;
status = WdfRequestRetrieveOutputMemory(
Request,
&memoryBuffer
);
if (!NT_SUCCESS(status)) {
goto Error;
}
status = WdfMemoryCopyFromBuffer(
memoryBuffer,
0,
deviceContext->Buffer,
Length
);
if (!NT_SUCCESS(status)) {
goto Error;
}
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 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) |