Поделиться через


Метод IWDFDriver::CreateDevice (wudfddi.h)

[Предупреждение: UMDF 2 является последней версией UMDF и заменяет UMDF 1. Все новые драйверы UMDF должны быть написаны с помощью UMDF 2. В UMDF 1 новые функции не добавляются, а поддержка UMDF 1 в более новых версиях Windows 10 ограничена. Универсальные драйверы 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.

Комментарии

Интерфейс IUnknown , который драйвер предоставляет для параметра pCallbackInterface , может поддерживать несколько интерфейсов. Платформа вызывает метод QueryInterface предоставленного интерфейса IUnknown несколько раз, чтобы получить интерфейсы, поддерживаемые драйвером. Метод QueryInterface драйвера может возвращать следующие интерфейсы:

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallbackHardware

IPnpCallbackHardware2

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPowerPolicyCallbackWakeFromS0

IPowerPolicyCallbackWakeFromSx

При изменении состояния устройства платформа вызывает метод, связанный с изменением (например, метод IPnpCallback::OnD0Entry ), чтобы уведомить драйвер.

Если вызов CreateDevice выполнен успешно, драйвер должен в конечном итоге вызвать метод IWDFDevice::Release . Обратите внимание, что платформа имеет собственное количество ссылок на объект .

Дополнительные сведения см. в разделе Добавление устройства.

Примеры

В следующем примере кода показана реализация метода OnDeviceAdd интерфейса IDriverEntry . Платформа вызывает 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