(wdm.h) IoAllocateIrp 函式

IoAllocateIrp 例程會針對呼叫端下分層的每個驅動程式配置 I/O 堆棧位置數目,並選擇性地為呼叫端配置 I/O 堆棧位置。 另請參閱 IoAllocateIrpEx

語法

PIRP IoAllocateIrp(
  [in] CCHAR   StackSize,
  [in] BOOLEAN ChargeQuota
);

參數

[in] StackSize

指定要配置給 IRP 的 I/O 堆疊位置數目。 此值至少必須等於下一個較低驅動程式裝置物件的 StackSize ,但可以是大於此值的一個。 呼叫驅動程式本身不需要在 IRP 中設定堆疊位置。

[in] ChargeQuota

將此設定為 TRUE 會導致針對 IRP 配置的記憶體,根據目前進程的配額來收費。 中繼驅動程式應設定為 FALSE 。 這隻能由在源自驅動程式配置另一個 IRP 之 I/O 要求的線程內容中呼叫的高階驅動程式設定為 TRUE

傳回值

IoAllocateIrp 會傳回 IRP 的指標,此指標是從非分頁系統空間配置,如果無法配置 IRP,則傳回 NULL

備註

IoAllocateIrp 例程不會將 IRP 與線程產生關聯。 配置驅動程式必須釋放 IRP,而不是將它送回 I/O 管理員。

中繼或最高層級的驅動程式可以呼叫 IoAllocateIrp ,為傳送至較低層級驅動程式的要求建立IRP。 這類驅動程式必須初始化 IRP,而且必須在它建立的 IRP 中設定其 IoCompletion 例程,以便在較低層級驅動程式完成要求處理時處置 IRP。

IoAllocateIrp 會自動初始化 IRP 的成員。 請勿使用 IoInitializeIrp 先初始化 IRP,再使用。 (您可以使用 IoInitializeIrp 重複使用您已在特定特殊情況下使用的 IRP。如需詳細資訊,請參閱 重複使用 IRP 。)

中繼或最高層級驅動程式也可以呼叫 IoBuildDeviceIoControlRequestIoBuildAsynchronousFsdRequestIoBuildSynchronousFsdRequest 來設定它傳送至較低層級驅動程式的要求。 只有最高層級的驅動程式可以呼叫 IoMakeAssociatedIrp

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 ForwardedAtBadIrqlAllocate (wdm) HwStorPortProhibitedDDIs (storport ) 、 IoAllocateComplete (wdm ) 、 IoAllocateForward (wdm) IoAllocateFree (wdm) IoAllocateIrpSign (wdm) IoAllocateIrpSignalEventInCompletion2 (wdm) IoAllocateIrpSignalEventInCompletion3 (wdm) IoAllocateIrpSignalEventInCompletionTimeout (wdm) IoFreeIrp (storport) IoReuseIrp (wdm) MarkPower (wdm) 、 MarkPowerDown (wdm) MarkQueryRelations (wdm) MarkStartDevice (wdm) SpNoWait (storport) StorPortStartIo (storport)

另請參閱

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine