次の方法で共有


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

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallbackHardware

IPnpCallbackHardware2

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

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

関連項目

IDriverEntry::OnDeviceAdd

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallback::OnD0Entry

IPnpCallbackHardware

IPnpCallbackSelfManagedIo

IWDFDevice

IWDFDeviceInitialize

IWDFDriver