IWDFDriver::CreateDevice メソッド (wudfddi.h)
[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では 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 |
Header | wudfddi.h (Wudfddi.h を含む) |
[DLL] | WUDFx.dll |