共用方式為


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

BOOL 值,指定是要設定預設 I/O 佇列,還是為裝置建立次要 I/O 佇列。 TRUE 表示要設定預設 I/O 佇列;FALSE 表示要建立次要 I/O 佇列。

[in] DispatchType

WDF_IO_QUEUE_DISPATCH_TYPE型別值,識別驅動程序必須如何從 I/O 佇列接收要求。

[in] bPowerManaged

BOOL 值,指定 I/O 佇列是否為電源管理。 TRUE 表示架構會自動協調使用隨插即用 (PnP) 和裝置電源狀態的 I/O 佇列分派;FALSE 表示沒有自動協調的分派。

[in] bAllowZeroLengthRequests

BOOL 值,指定架構是否直接將長度為零的 I/O 要求放在驅動程式要處理的 I/O 佇列中。 TRUE 表示驅動程式應該接收長度為零的緩衝區的讀取和寫入要求,也就是架構會自動將這些要求類型直接放在驅動程式的 I/O 佇列中。 FALSE 表示架構會完成長度為零的 I/O 要求,而不是將它們放入 I/O 佇列中。

[out] ppIoQueue

變數的指標,會接收新建立 I/O 佇列物件或預設 I/O 佇列物件的 IWDFIoQueue 介面指標。

傳回值

CreateIoQueue 會傳回下列其中一個值:

傳回碼 描述
S_OK
已成功建立 I/O 佇列。
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
I/O 佇列是以下列其中一種方式設定:
  • DispatchType 參數會指定非受控佇列,而且「備註」區段中所指定的 I/O 佇列回呼介面都不支援透過 pCallbackInterface 參數
  • DispatchType 參數會指定手動佇列,而且 透過 pCallbackInterface 參數支援一節中指定的一或多個 I/O 佇列回呼介面。
如需這些組態的詳細資訊,請參閱一節。
 

CreateIoQueue 也可能傳回其他 HRESULT 值。

言論

驅動程式為 pCallbackInterface 參數提供的 IUnknown 介面可支援數個佇列回呼函式。 架構會在提供的 IUnknown 介面上呼叫 QueryInterface 方法,以擷取驅動程式支援的介面方法。 當應用程式執行與所支援介面方法相關的動作時(例如 I/O 讀取要求),架構會呼叫 方法(例如,IQueueCallbackRead::OnRead 方法),以通知驅動程式。 架構會針對下列介面呼叫 QueryInterface

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

當驅動程式傳遞 WdfIoQueueDispatchSequentialWdfIoQueueDispatchParallelCreateIoQueueDispatchType 參數來建立非受控佇列時, CreateIoQueue 只有在驅動程式的佇列回呼物件至少實作上述其中一個介面,並透過 pCallbackInterface 指向的 IUnknown 介面表示支援這類介面時,才能傳回S_OK。

當驅動程式傳遞 WdfIoQueueDispatchManualDispatchType 以建立手動佇列時,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
標頭 wudfddi.h (包括 Wudfddi.h)
DLL WUDFx.dll

另請參閱

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE