WdfMemoryAssignBuffer 함수(wdfmemory.h)
[KMDF 및 UMDF에 적용]
WdfMemoryAssignBuffer 메서드는 WdfMemoryCreatePreallocated를 호출하여 드라이버가 만든 메모리 개체에 지정된 버퍼를 할당합니다.
구문
NTSTATUS WdfMemoryAssignBuffer(
[in] WDFMEMORY Memory,
[in] PVOID Buffer,
[in] size_t BufferSize
);
매개 변수
[in] Memory
WdfMemoryCreatePreallocated를 호출하여 가져온 프레임워크 메모리 개체에 대한 핸들입니다.
[in] Buffer
드라이버 제공 버퍼에 대한 포인터입니다.
[in] BufferSize
버퍼가 가리키는 버퍼의 0이 아닌 크기(바이트)입니다.
반환 값
WdfMemoryAssignBuffer는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
잘못된 매개 변수가 감지되었습니다. |
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.
설명
메서드는 WdfMemoryCreatePreallocated 가 만든 메모리 개체에 버퍼를 할당할 수 있지만 WdfMemoryCreate 가 만든 메모리 개체에는 할당할 수 없습니다.
Buffer 매개 변수가 가리키는 버퍼는 페이징 가능 또는 페이징할 수 없는 메모리 풀에서 할당할 수 있습니다. 드라이버가 페이저블 풀에서 버퍼를 할당하거나 사용자 모드 애플리케이션에서 제공되었기 때문에 버퍼가 페이저블 풀에 있는 경우 드라이버는 IRQL < DISPATCH_LEVEL 버퍼에만 액세스해야 합니다. (드라이버의 EvtCleanupCallback 및 EvtDestroyCallback 콜백 함수가 제공된 경우 IRQL <= DISPATCH_LEVEL 호출할 수 있습니다.)
프레임워크 메모리 개체에 대한 자세한 내용은 메모리 버퍼 사용을 참조하세요.
예제
다음 코드 예제에서는 버퍼를 할당한 다음 프레임워크 메모리 개체에 버퍼를 할당합니다.
PVOID pNewBuffer = NULL;
pNewBuffer = ExAllocatePoolWithTag(
NonPagedPool,
NEW_BUFFER_SIZE,
MY_DRIVER_TAG
);
if (pNewBuffer == NULL){
goto Error;
}
status = WdfMemoryAssignBuffer(
memHandle,
pNewBuffer,
NEW_BUFFER_SIZE
);
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 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) |