IoAllocateIrpEx 函式 (wdm.h)
IoAllocateIrpEx 從系統非分頁集區配置 IRP,可能具有 IRP 擴充功能。
語法
PIRP IoAllocateIrpEx(
PDEVICE_OBJECT DeviceObject,
CCHAR StackSize,
BOOLEAN ChargeQuota
);
參數
DeviceObject
要檢查的裝置物件的指標,以判斷是否要為 IRP 擴充功能新增空間。 當 deviceObject 設定為 DEVICE_WITH_IRP_EXTENSION 時,也會配置 IRP 擴充功能的空間。
StackSize
要配置給 IRP 的堆疊位置數目上限。 StackSize 至少必須等於下一個較低驅動程式裝置物件的 StackSize,但可以大於此值。 呼叫驅動程式不需要為本身配置 IRP 中的堆疊位置。
ChargeQuota
將 ChargeQuota 設定為 TRUE 會導致針對目前進程的配額向 IRP 配置記憶體。 此參數只能由產生驅動程式配置另一個 IRP 之 I/O 要求的線程內容中呼叫的最高層級驅動程式 TRUE。 中繼驅動程式應將此參數設定為 FALSE。
傳回值
IoAllocateIrpEx 會傳回已配置和初始化 IRP 的指標,如果無法配置 IRP,則 NULL。
言論
IoAllocateIrpEx 配置 StackSize 堆疊位置,並初始化 IRP。 它不會將 IRP 與線程產生關聯。 配置驅動程式必須釋放 IRP,而不是將它送回 I/O 管理員。
中繼或最高層級驅動程式可以呼叫 IoAllocateIrpEx,以為其傳送至較低層級驅動程式的要求建立 IRP。 這類驅動程式必須初始化 IRP,而且必須在它建立的 IRP 中設定其 IoCompletion 回呼例程,讓呼叫者可以在較低層級驅動程式完成要求處理時處置 IRP。 IoAllocateIrp 會自動初始化 IRP 的成員。 請勿使用 IoInitializeIrp 在首次使用之前初始化 IRP。 (您可以使用 IoInitializeIrp 重複使用您已在特定特殊情況下使用的 IRP。如需詳細資訊,請參閱 重複使用 IRP。中繼或最高層級驅動程式也可以呼叫 IoBuildDeviceIoControlRequest、IoBuildAsynchronousFsdRequest 或 IoBuildSynchronousFsdRequest,以設定傳送至較低層級驅動程式的要求。 只有最高層級的驅動程式可以呼叫IoMakeAssociatedIrp。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 10 開始提供 (版本 1507) |
目標平臺 | 普遍 |
標頭 | wdm.h (include wdm.h, ntddk.h, ntifs.h) |
連結庫 | ntoskrnl.lib |
DLL | ntoskrnl.exe |
IRQL | <= DISPATCH_LEVEL |