建立 I/O 佇列
架構佇列物件代表 I/O 佇列,這是驅動程式所接收之 I/O 要求的容器。 每個驅動程式都可以為每個裝置建立一或多個 I/O 佇列。 架構佇列物件會定義一組 事件回呼函式, 驅動程式可以提供,以及驅動程式可以呼叫的一組物件方法。
當架構收到導向至其中一個驅動程式裝置的 I/O 要求時,架構會將要求放在適當的 I/O 佇列中。 如果您的驅動程式註冊了一個或多個 要求處理程式,則每當有 I/O 要求可用時,架構都可以通知您的驅動程式。 或者,您的驅動程式可以輪詢 I/O 佇列中是否有要求。
大部分驅動程序都會在其 EvtDriverDeviceAdd 回呼函式中建立 I/O 佇列。 為了建立裝置的 I/O 佇列,驅動程式會呼叫架構佇列物件的 WdfIoQueueCreate 方法(這會建立架構佇列物件)。 驅動程式會將 WDF_IO_QUEUE_CONFIG 結構提供給 方法。 此結構包含佇列的組態資訊,例如佇列的 分派方法,以及 要求處理程式的指標, 框架在佇列中有要求時呼叫。 結構也會指出佇列是否會進行 電源管理,以及驅動程式是否支援佇列 I/O 請求的零長度緩衝區。
如果驅動程式將 DefaultQueueWDF_IO_QUEUE_CONFIG 結構的成員設定為 TRUE,佇列會變成 裝置的預設 I/O 佇列。 如果您的驅動程式建立預設 I/O 佇列,則架構會將所有裝置的 I/O 要求置於此佇列中,除非您建立其他佇列以接收部分要求。 驅動程式可以呼叫 WdfDeviceGetDefaultQueue 方法來取得裝置預設 I/O 佇列的控制代碼。
如果您想要針對裝置使用多個 I/O 佇列,驅動程式可以呼叫 WdfIoQueueCreate,視需要建立多個佇列物件。 如果驅動程式建立多個佇列,它可以呼叫 WdfDeviceConfigureRequestDispatching,這會指示架構將不同類型的要求導向至不同的佇列。 例如,您可以指定所有讀取要求都會傳遞至一個佇列,而所有寫入要求都會傳遞至另一個佇列。
如果您的驅動程式建立一組 I/O 佇列,並呼叫 WdfDeviceConfigureRequestDispatching,將驅動程式可以接收的每個類型要求導向至特定佇列,驅動程式就不需要預設佇列。
如果驅動程式未針對特定類型的要求提供 I/O 佇列,並且您的驅動程式是函式驅動程式,則框架會以完成狀態值 STATUS_INVALID_DEVICE_REQUEST 來完成該類型的要求。 如果您的驅動程式是篩選驅動程式,且已呼叫 WdfFdoInitSetFilter,架構會自動將這些要求轉送至驅動程式堆疊中的下一個較低驅動程式。 因此,例如,如果篩選驅動程式不處理讀取要求,則不需要提供接收讀取要求的 I/O 佇列。
如需驅動程式如何使用 I/O 佇列的範例,請參閱 I/O 佇列的範例。