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 で定義されているエラー コードの 1 つを返します。
備考
iUnknownpCallbackInterface パラメーターにドライバーが提供するインターフェイスは、複数のインターフェイスをサポートできます。 フレームワークは、指定された IUnknown インターフェイスの QueryInterface メソッドを複数回呼び出して、ドライバーがサポートするインターフェイスを取得します。 ドライバーの QueryInterface メソッドは、次のインターフェイスを返すことができます。
IFileCallbackCleanup の
IPnpCallback の
IPnpCallbackHardware の
IPnpCallbackHardware2 の
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 |
関連項目
IFileCallbackCleanup の
IPnpCallback の
IPnpCallbackHardware の
IWDFDevice の
IWDFDeviceInitialize の
IWDFDriver の