共用方式為


IRP_MN_WRITE_CONFIG

具有設定空間之公車的匯流排驅動程式必須針對其子裝置處理此要求, (子 PDO) 。 函式和篩選驅動程式不會處理此要求。

0x10

主要程式碼

IRP_MJ_PNP

傳送時

驅動程式或其他系統元件會傳送此 IRP 將資料寫入裝置父匯流排的設定空間。

驅動程式或其他系統元件會在任意執行緒內容中,在 IRQL < DISPATCH_LEVEL傳送此 IRP。

輸入參數

Parameters.ReadWriteConfig 是包含下列資訊的結構:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

結構的成員可由不同的匯流排驅動程式以不同的方式解譯,但成員通常定義為:

WhichSpace
指定組態空間。 如需可針對 WhichSpace指定之值的相關資訊,請參閱 IRP_MN_READ_CONFIG

緩衝區
指向包含要寫入之資料的緩衝區。 緩衝區的格式是匯流排特定的。

抵消
指定設定空間中的位移。

長度
指定要寫入的位元組數目。

輸出參數

在 I/O 狀態欄塊中傳回。

I/O 狀態欄塊

匯流排驅動程式會將 Irp-IoStatus.Status > 設定為STATUS_SUCCESS或適當的錯誤狀態,例如STATUS_INVALID_PARAMETER_STATUS_NO_SUCH_DEVICE或STATUS_DEVICE_NOT_READY。

成功時,匯流排驅動程式會將 Irp-IoStatus.Information > 設定為寫入的位元組數目。

如果匯流排驅動程式無法立即完成此要求,它可以標示 IRP 擱置中、傳回STATUS_PENDING,並在稍後完成 IRP。

作業

匯流排驅動程式會為其子裝置處理此 IRP, (子 PDO) 。

函式和篩選驅動程式不會處理此 IRP;它們會將它傳遞至下一個較低驅動程式,但不會變更 Irp-IoStatus.Status > ,而且不會設定 IoCompletion 常式。

如需處理隨插即用次要 IRP的一般規則,請參閱隨插即用

傳送此 IRP

一般而言,函式驅動程式會將此 IRP 傳送至所連接的裝置堆疊,而 IRP 是由父匯流排驅動程式處理。

如需傳送 IRP 的相關資訊,請參閱 處理 IRP 。 下列步驟特別適用于此 IRP:

  • 從分頁集區配置緩衝區,並使用要寫入的資料加以初始化。

  • 設定 IRP 下一個 I/O 堆疊位置中的值:將 MajorFunction 設定為 IRP_MJ_PNP、將 MinorFunction 設定 為 IRP_MN_WRITE_CONFIG,然後在 Parameters.ReadWriteConfig中設定適當的值。

  • IoStatus.Status 初始化為 STATUS_NOT_SUPPORTED。

  • 不再需要 IRP 和緩衝區時解除配置。

驅動程式必須從 IRQL < DISPATCH_LEVEL傳送此 IRP。

如果父匯流排驅動程式匯出這類介面,則驅動程式可以透過匯流排界面常式,在DISPATCH_LEVEL存取匯流排的組態空間。 若要取得匯流排界面,驅動程式會將 IRP_MN_QUERY_INTERFACE 要求傳送至其父匯流排驅動程式。 然後,驅動程式會呼叫介面中傳回的適當常式。

例如,若要從DISPATCH_LEVEL寫入組態空間,驅動程式可以在驅動程式初始化期間呼叫 IRP_MN_QUERY_INTERFACE ,以從父匯流排驅動程式取得 BUS_INTERFACE_STANDARD 介面。 驅動程式會從 IRQL PASSIVE_LEVEL傳送查詢 IRP。 稍後,從 IRQL 的程式碼DISPATCH_LEVEL,驅動程式會呼叫介面中傳回的適當常式,例如 Interface.SetBusData 常式。

規格需求

標頭

Wdm.h (包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另請參閱

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG