建立架構要求物件

架構要求物件代表 I/O 管理員已傳送給驅動程式的 I/O 要求。 架構型驅動程式會藉由呼叫 架構要求物件方法來處理每個 I/O 要求。

每個 I/O 要求都包含 WDM I/O 要求封包 (IRP 結構) ,但架構型驅動程式通常不需要存取 IRP 結構。

大部分的架構要求物件都是由架構所建立,但您的驅動程式也可以建立要求物件。

要求架構所建立的物件

當架構驅動程式從 I/O 管理員收到 I/O 要求封包 (IRP) 時,架構會攔截 IRP 並建立架構要求物件。 架構會將要求物件放入 I/O 佇列中,如果驅動程式已註冊佇列 的要求處理常式 ,則會呼叫適當的處理常式。

下圖說明當架構為讀取作業建立要求物件時所發生的步驟。

說明在架構驅動程式中建立讀取作業之要求物件之步驟的圖表。

下列步驟對應至上圖中的數位:

  1. 使用者模式應用程式會呼叫 Microsoft Win32 ReadFile 函式來讀取檔案。

  2. ReadFile函式會呼叫以核心模式執行的 I/O 管理員。

  3. I/O 管理員會配置 IRP 結構,並將 IRP_MJ_READ 函式程式碼儲存在 結構中。

  4. I/O 管理員會呼叫 driver xDispatchRead標準驅動程式常式,並將指標傳遞至 IRP 結構。 因為 driver x 是以架構為基礎的驅動程式,所以架構會提供驅動程式的 DispatchRead 常式。

  5. 架構會建立代表 IRP 結構的要求物件。 架構會將要求物件新增至其中一個驅動程式的佇列物件。

  6. 架構會呼叫驅動程式的 EvtIoRead 要求處理常式,傳遞佇列物件控制碼和要求物件控制碼。

要求驅動程式所建立的物件

架構型驅動程式也可以建立要求物件。 例如,如果驅動程式收到大於驅動程式 I/O 目標 的資料量讀取或寫入要求,可能會建立要求物件。 在這種情況下,驅動程式可以將資料分割成數個較小的要求,並使用其他要求物件將這些較小的要求傳送至一或多個 I/O 目標。

若要建立要求物件,您的驅動程式應該呼叫 WdfRequestCreate ,後面接著初始化要求的架構物件方法,例如 WdfUsbTargetPipeFormatRequestForRead

如果驅動程式在 WDM 分派常式中收到 WDM IRP,然後使用架構來服務或轉送它們,則驅動程式可以呼叫 WdfRequestCreateFromIrp