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