Метод 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 драйвера может возвращать следующие интерфейсы:
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 |