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 的記憶體,以針對目前進程的配額收費。 此參數只能由在線程內容中呼叫的最高層級驅動程式設定 TRUE ,該驅動程式源自驅動程式配置另一個 IRP 的 I/O 要求。 中繼驅動程式應將此參數設定為 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 。) 中繼或最高層級驅動程式也可以呼叫 IoBuildDeviceIoControlRequestIoBuildAsynchronousFsdRequestIoBuildSynchronousFsdRequest 來設定傳送至較低層級驅動程式的要求。 只有最高層級的驅動程式可以呼叫 IoMakeAssociatedIrp

規格需求

需求
最低支援的用戶端 從 Windows 10 (1507 版 1507) 開始提供
目標平台 Universal
標頭 wdm.h (包括 wdm.h、ntddk.h、ntifs.h)
程式庫 ntoskrnl.lib
Dll ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

另請參閱

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine