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


Метод 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 предоставленного интерфейса IUnkn own несколько раз, чтобы получить интерфейсы, поддерживаемые драйвером. Метод 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 (include Wudfddi.h)
DLL WUDFx.dll

См. также

IDriverEntry::OnDeviceAdd

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallback::OnD0Entry

IPnpCallbackHardware

IPnpCallbackSelfManagedIo

IWDFDevice

IWDFDeviceInitialize

IWDFDriver