WdfMemoryCreatePreallocated 함수(wdfmemory.h)

[KMDF 및 UMDF에 적용]

WdfMemoryCreatePreallocated 메서드는 드라이버 제공 메모리 버퍼에 대한 프레임워크 메모리 개체를 만듭니다.

구문

NTSTATUS WdfMemoryCreatePreallocated(
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           __drv_aliasesMem PVOID Buffer,
  [in]           size_t                 BufferSize,
  [out]          WDFMEMORY              *Memory
);

매개 변수

[in, optional] Attributes

새 메모리 개체에 대한 개체 특성을 포함하는 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[in] Buffer

드라이버 제공 버퍼에 대한 포인터입니다.

[in] BufferSize

버퍼가 가리키는 버퍼의 0이 아닌 크기(바이트)입니다.

[out] Memory

새 메모리 개체에 대한 핸들을 받는 위치에 대한 포인터입니다.

반환 값

WdfMemoryCreatePreallocated 는 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 감지되었습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
 

WdfMemoryCreatePreallocated 메서드가 반환할 수 있는 다른 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

설명

WdfMemoryCreatePreallocated 메서드는 드라이버가 이전에 할당하거나 가져온 버퍼에 대한 프레임워크 메모리 개체를 만듭니다.

기존 메모리 버퍼를 나타내는 메모리 개체를 만들어야 하는 경우 드라이버는 WdfMemoryCreatePreallocated 를 호출할 수 있습니다. 예를 들어 드라이버는 내부 I/O 제어 코드를 포함하는 I/O 요청에 대한 버퍼 내에서 드라이버 정의 구조를 수신할 수 있습니다. 드라이버는 WdfMemoryCreatePreallocated 를 호출하여 드라이버가 구조를 I/O 대상으로 전달할 수 있도록 메모리 개체를 만들 수 있습니다.

드라이버가 WdfMemoryCreatePreallocated를 호출한 후 드라이버는 WdfMemoryAssignBuffer 를 호출하여 WdfMemoryCreatePreallocated 가 만든 메모리 개체에 다른 버퍼를 할당할 수 있습니다.

각 메모리 개체의 기본 부모 개체는 WdfMemoryCreatePreallocated라는 드라이버를 나타내는 프레임워크 드라이버 개체입니다. 드라이버가 특정 디바이스 개체, 요청 개체 또는 기타 프레임워크 개체와 함께 사용하는 메모리 개체를 만드는 경우 메모리 개체의 부모를 적절하게 설정해야 합니다. 부모 개체가 삭제되면 메모리 개체가 삭제됩니다. 기본 부모 개체를 변경하지 않으면 I/O 관리자가 드라이버를 언로드할 때까지 메모리 개체가 메모리에 유지됩니다.

드라이버는 WdfObjectDelete를 호출하여 메모리 개체를 삭제할 수도 있습니다.

WdfMemoryCreatePreallocated가 만든 프레임워크 메모리 개체가 삭제되면 프레임워크는 기존 버퍼의 할당을 취소하지 않습니다. 마찬가지로 WdfMemoryAssignBuffer 에 대한 호출은 이전에 할당된 버퍼의 할당을 취소하지 않습니다.

프레임워크 메모리 개체에 대한 자세한 내용은 메모리 버퍼 사용을 참조하세요.

예제

다음 코드 예제에서는 버퍼를 할당한 다음 버퍼에 대한 프레임워크 메모리 개체를 만듭니다.

PVOID  pBuffer = NULL;
WDF_OBJECT_ATTRIBUTES  attributes;
WDFMEMORY  memHandle;

pBuffer = ExAllocatePoolWithTag(
                                NonPagedPool,
                                MY_BUFFER_SIZE,
                                MY_DRIVER_TAG
                                );
if (pBuffer == NULL){
    goto Error;
}
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = requestHandle;

status = WdfMemoryCreatePreallocated(
                                     &attributes,
                                     pBuffer,
                                     MY_BUFFER_SIZE,
                                     &memHandle
                                     );

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfmemory.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWriteA(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보

ExAllocatePoolWithTag

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfMemoryAssignBuffer

WdfMemoryCreate

WdfMemoryCreateFromLookaside