IWDFDevice::CreateIoQueue メソッド (wudfddi.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、新しいバージョンのWindows 10では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。

CreateIoQueue メソッドは、デバイスに関連付けられている既定の I/O キューを構成するか、デバイスのセカンダリ I/O キューを作成します。

構文

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

パラメーター

[in, optional] pCallbackInterface

ドライバーがキューでサブスクライブするイベント コールバック関数を決定するためにフレームワークが使用する IUnknown インターフェイスへのポインター。 これらは、関連するイベントが発生したときにフレームワークが呼び出す関数です。

UMDF バージョン 1.9 以降の場合、このパラメーターはシーケンシャルまたは並列ディスパッチ方式を使用する I/O キューに必要であり手動ディスパッチメソッドを使用する I/O キューでは省略可能です (NULL にすることができます)。 1.9 より前の UMDF バージョンの場合、このパラメーターはすべてのディスパッチ メソッドに必要です。

[in] bDefaultQueue

既定の I/O キューを構成するか、デバイスのセカンダリ I/O キューを作成するかを指定する BOOL 値。 TRUE は 、既定の I/O キューを構成することを示します。 FALSE は 、セカンダリ I/O キューを作成することを示します。

[in] DispatchType

ドライバーが I/O キューから要求を受信する方法を識別するWDF_IO_QUEUE_DISPATCH_TYPE型指定の値。

[in] bPowerManaged

I/O キューが電源管理されているかどうかを示す BOOL 値。 TRUE は、フレームワークが、プラグ アンド プレイ (PnP) とデバイスの電源状態を使用して I/O キューのディスパッチを自動的に調整することを示します。FALSE は、自動的に調整されたディスパッチがないことを示します。

[in] bAllowZeroLengthRequests

ドライバーが処理できるように、フレームワークが長さ 0 の I/O 要求を I/O キューに直接配置するかどうかを指定する BOOL 値。 TRUE は 、ドライバーが長さ 0 のバッファーを持つ読み取り要求と書き込み要求を受け取る必要があることを示します。つまり、フレームワークは、これらの要求の種類をドライバーの I/O キューに直接自動的に配置します。 FALSE は 、フレームワークが I/O キューに入れるのではなく、長さ 0 の I/O 要求を完了することを示します。

[out] ppIoQueue

新しく作成された I/O キュー オブジェクトまたは既定の I/O キュー オブジェクトの IWDFIoQueue インターフェイスへのポインターを受け取る変数へのポインター。

戻り値

CreateIoQueue は 、次のいずれかの値を返します。

リターン コード 説明
S_OK
I/O キューが正常に作成されました。
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
I/O キューは、次のいずれかの方法で構成されます。
  • DispatchType パラメーターは、非管理キューを指定します。また、pCallbackInterface パラメーターを使用してサポートされる「備考」セクションで指定されている I/O キュー コールバック インターフェイスはありません。
  • DispatchType パラメーターは手動キューを指定し、「解説」セクションで指定されている 1 つ以上の I/O キュー・コールバック・インターフェースは pCallbackInterface パラメーターを介してサポートされます。
これらの構成の詳細については、「解説」セクションを参照してください。
 

CreateIoQueue は、他の HRESULT 値も返す場合があります。

注釈

ドライバーが pCallbackInterface パラメーターに提供する IUnknown インターフェイスでは、いくつかのキュー コールバック関数をサポートできます。 フレームワークは、指定された IUnknown インターフェイスで QueryInterface メソッドを複数回呼び出して、ドライバーがサポートするインターフェイス メソッドを取得します。 サポートされているインターフェイスのメソッド (I/O 読み取り要求など) に関連するアクションをアプリケーションが実行すると、フレームワークはメソッド ( IQueueCallbackRead::OnRead メソッドなど) を呼び出してドライバーに通知します。 フレームワークは、次のインターフェイスに対して QueryInterface を呼び出します。

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

ドライバーが CreateIoQueue の DispatchType パラメーターに対して WdfIoQueueDispatchSequential または WdfIoQueueDispatchParallel を渡して非manual キューを作成すると、CreateIoQueue は、ドライバーのキュー コールバック オブジェクトが上記のインターフェイスの少なくとも 1 つを実装し、pCallbackInterface が指す IUnknown インターフェイスを介したこのようなインターフェイスのサポートを示す場合にのみ、S_OKを返すことができます。

ドライバーが WdfIoQueueDispatchManual for DispatchType を渡して手動キューを作成すると、 CreateIoQueue は、ドライバーのキュー コールバック オブジェクトが上記のコールバック インターフェイスのサポートを実装または示していない場合にのみ、S_OKを返すことができます。 ドライバーのコールバック オブジェクトの詳細については、「 コールバック オブジェクトの作成」を参照してください。

メモ ドライバーは、ドライバーがシーケンシャル キューまたは並列キューに使用する手動キューに対して同じコールバック オブジェクトを使用できません。 つまり、ドライバーが CreateIoQueue の呼び出しで IUnknown インターフェイスに特定のポインターを渡して手動キューを作成した場合、ドライバーは後で CreateIoQueue の呼び出しで IUnknown への同じポインターを渡してシーケンシャル キューまたは並列キューを作成することはできません。
 
ディスパッチ モードの構成の詳細については、「 I/O キューのディスパッチ モードの構成」を参照してください。

また、フレームワークは、指定された IUnknown インターフェイスで QueryInterface を呼び出して、ドライバーが次のいずれかのインターフェイスをサポートしているかどうかを判断します。

IObjectCleanup

IQueueCallbackIoResume

IQueueCallbackIoStop

また、フレームワークは、指定された IUnknown インターフェイスで QueryInterface を呼び出して、ドライバーが IQueueCallbackStateChange インターフェイスをサポートしているかどうかを判断します。 ドライバーのキュー コールバック オブジェクトは、必要に応じて、手動キューに対してのみ IQueueCallbackStateChange のサポートを実装して示すことができます。 ドライバーのキュー コールバック オブジェクトは、シーケンシャル キューまたは並列キューに対する IQueueCallbackStateChange のサポートを実装して示す必要があります。

CreateIoQueue メソッドの使用方法のコード例については、「IWDFDriver::CreateDevice」を参照してください。

要件

要件
サポート終了 UMDF 2.0 以降では使用できません。
対象プラットフォーム デスクトップ
最小 UMDF バージョン 1.5
Header wudfddi.h (Wudfddi.h を含む)
[DLL] WUDFx.dll

こちらもご覧ください

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE