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 方法可以傳回下列介面:
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 |