IWDFDriver::CreateDevice 方法 (wudfddi.h)

[警告: UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的 UMDF 驅動程式都應該使用 UMDF 2 來撰寫。 未將新功能新增至 UMDF 1,且較新版本的 #D8F6B60CD96F94B1CB87D6A3DDF1CD2C2 上不支援 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