다음을 통해 공유


IWDFDriver::CreatePreallocatedWdfMemory 메서드(wudfddi.h)

[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]

CreatePreallocatedWdfMemory 메서드는 지정된 버퍼에 대한 프레임워크 메모리 개체를 만듭니다.

구문

HRESULT CreatePreallocatedWdfMemory(
  [in]           BYTE       *pBuff,
  [in]           SIZE_T     BufferSize,
  [in, optional] IUnknown   *pCallbackInterface,
  [in, optional] IWDFObject *pParentObject,
  [out]          IWDFMemory **ppWdfMemory
);

매개 변수

[in] pBuff

메모리 개체에 대한 드라이버 제공 데이터 버퍼에 대한 포인터입니다.

[in] BufferSize

pBuff가 가리키는 데이터의 크기(바이트)입니다.

[in, optional] pCallbackInterface

프레임워크가 드라이버가 새로 만든 메모리 개체에서 구독하는 개체 관련 이벤트 콜백 함수를 확인하는 데 사용하는 IUnknown 인터페이스에 대한 포인터입니다. 이 매개 변수는 선택적 요소입니다. 드라이버에 알림이 필요하지 않은 경우 드라이버가 NULL 을 전달할 수 있습니다. IUnknown 인터페이스는 개체 정리 및 삭제에 사용됩니다. 드라이버가 유효한 포인터를 전달하는 경우 프레임워크는 IObjectCleanup 인터페이스에 대한 IUnknown 인터페이스에서 QueryInterface를 호출합니다. 프레임워크가 드라이버의 IObjectCleanup 인터페이스를 가져오는 경우 프레임워크는 이후에 드라이버의 IObjectCleanup::OnCleanup 메서드를 호출하여 메모리 개체가 정리되었음을 드라이버에 알릴 수 있습니다.

[in, optional] pParentObject

만든 메모리 개체의 부모 개체에 대한 IWDFObject 인터페이스에 대한 포인터입니다. NULL이면 드라이버 개체가 기본 부모가 됩니다.

[out] ppWdfMemory

새로 만든 WDF 메모리 개체에 대한 IWDFMemory 인터페이스에 대한 포인터를 수신하는 버퍼에 대한 포인터입니다.

반환 값

CreatePreallocatedWdfMemory 는 작업이 성공하면 S_OK 반환합니다. 그렇지 않으면 이 메서드는 Winerror.h에 정의된 오류 코드 중 하나를 반환합니다.

설명

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

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

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

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

예제

다음 코드 예제에서는 버퍼에 대 한 메모리 개체를 만드는 방법을 보여 입니다.

    //
    // Allocate a request.
    hr = wdfDevice->CreateRequest(NULL, NULL, &request);

    // Allocate a buffer and wrap it in a memory object. 
    // Make the memory object a child of the request. 
    // When the request object is deleted, the memory object 
    // is also deleted. 

    if (SUCCEEDED(hr))
    {
       buffer = new BYTE[m_HidDescriptor->wReportLength];

       if (buffer == NULL)
       {
          hr = E_OUTOFMEMORY;
       }
    }

    if (SUCCEEDED(hr))
    {
       CComPtr<IWDFDriver> driver;
       wdfDevice->GetDriver(&driver);

       hr = driver->CreatePreallocatedWdfMemory(
                       buffer,
                       m_HidDescriptor->wReportLength,
                       NULL,
                       request,
                       &memory
                       );
    }

요구 사항

요구 사항
지원 종료 UMDF 2.0 이상에서는 사용할 수 없습니다.
대상 플랫폼 데스크톱
최소 UMDF 버전 1.5
머리글 wudfddi.h(Wudfddi.h 포함)
DLL WUDFx.dll

추가 정보

IObjectCleanup

IObjectCleanup::OnCleanup

IWDFDriver

IWDFMemory

IWDFMemory::SetBuffer

IWDFObject