다음을 통해 공유


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

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

CreateDevice 메서드는 새 프레임워크 디바이스 개체를 구성하고 만듭니다.

구문

HRESULT CreateDevice(
  [in]           IWDFDeviceInitialize *pDeviceInit,
  [in, optional] IUnknown             *pCallbackInterface,
  [out]          IWDFDevice           **ppDevice
);

매개 변수

[in] pDeviceInit

만들 새 디바이스의 구성 속성을 나타내는 IWDFDeviceInitialize 인터페이스에 대한 포인터입니다.

[in, optional] pCallbackInterface

프레임워크가 드라이버가 새 디바이스 개체에 제공하는 인터페이스를 가져오는 데 사용하는 IUnknown 인터페이스에 대한 포인터입니다. 이러한 인터페이스는 관련 이벤트가 발생할 때 프레임워크가 호출하는 콜백 함수를 제공합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

[out] ppDevice

새 디바이스 개체에 대한 IWDFDevice 인터페이스에 대한 포인터를 수신하는 버퍼에 대한 포인터입니다.

반환 값

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

설명

드라이버가 pCallbackInterface 매개 변수에 제공하는 IUnknown 인터페이스는 여러 인터페이스를 지원할 수 있습니다. 프레임워크는 제공된 IUnknown 인터페이스의 QueryInterface 메서드를 여러 번 호출하여 드라이버가 지원하는 인터페이스를 검색합니다. 드라이버의 QueryInterface 메서드는 다음 인터페이스를 반환할 수 있습니다.

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallbackHardware

IPnpCallbackHardware2

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPowerPolicyCallbackWakeFromS0

IPowerPolicyCallbackWakeFromSx

디바이스 상태가 변경되면 프레임워크는 변경과 관련된 메서드(예: IPnpCallback::OnD0Entry 메서드)를 호출하여 드라이버에 알립니다.

CreateDevice 호출에 성공하면 드라이버는 결국 IWDFDevice::Release 메서드를 호출해야 합니다. 프레임워크에는 개체에 대한 자체 참조 수가 있습니다.

자세한 내용은 디바이스 추가를 참조하세요.

예제

다음 코드 예제에서는 IDriverEntry 인터페이스의 OnDeviceAdd 메서드 구현을 보여줍니다. 프레임워크는 디바이스가 컴퓨터에 추가되면 OnDeviceAdd 를 호출합니다.

HRESULT 
CDriver::OnDeviceAdd(
 IWDFDriver* pDriver,
 IWDFDeviceInitialize* pDeviceInit
    )
{
 IUnknown   *pDeviceCallback = NULL;
 IWDFDevice *pIWDFDevice     = NULL;
 IUnknown   *pIUnkQueue      = NULL;    

    //
    // Create the device callback object.
    //
    HRESULT hr = CDevice::CreateInstance(&pDeviceCallback);

    //
    // Set device properties
    //
    if (S_OK == hr) {
        pDeviceInit->SetLockingConstraint(WdfDeviceLevel);
        // To register as the power-policy owner for 
        // the device stack, call the following:
        // pDeviceInit->SetPowerPolicyOwnership(TRUE);

        // For a filter driver, call the following:
        // pDeviceInit->SetFilter();
    }

    //
    // Request that the framework create a device object.
    // The device callback object is passed to inform the 
    // framework about the PnP callback functions the driver supports.
    //
    if (S_OK == hr) {
        hr = pDriver->CreateDevice(pDeviceInit, 
                                   pDeviceCallback,
                                   &pIWDFDevice);
    }

    //
    // Create the queue callback object.
    //

    if (S_OK == hr) {
        hr = CQueue::CreateInstance(&pIUnkQueue);
    }

    //
    // Configure the default queue. 
    // The queue callback object is passed to inform the 
    // framework about the queue callback functions the driver supports.
    //
    if (S_OK == hr) {
        IWDFIoQueue * pDefaultQueue = NULL;
        hr = pIWDFDevice->CreateIoQueue(
                       pIUnkQueue,
                       TRUE,                  // bDefaultQueue
                       WdfIoQueueDispatchParallel,
                       TRUE,                  // bPowerManaged
                       FALSE, //bAllowZeroLengthRequests
                       &pDefaultQueue);
        SAFE_RELEASE(pDefaultQueue);
    }

    SAFE_RELEASE(pDeviceCallback);
    SAFE_RELEASE(pIWDFDevice);
    SAFE_RELEASE(pIUnkQueue);    

    return hr;
}

요구 사항

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

추가 정보

IDriverEntry::OnDeviceAdd

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallback::OnD0Entry

IPnpCallbackHardware

IPnpCallbackSelfManagedIo

IWDFDevice

IWDFDeviceInitialize

IWDFDriver