Fungsi IoAllocateIrp (wdm.h)

Rutinitas IoAllocateIrp mengalokasikan IRP, mengingat jumlah lokasi tumpukan I/O untuk setiap driver yang berlapis di bawah pemanggil, dan, secara opsional, untuk pemanggil. Lihat juga IoAllocateIrpEx.

Sintaks

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

Parameter

[in] StackSize

Menentukan jumlah lokasi tumpukan I/O yang akan dialokasikan untuk IRP. Nilai ini setidaknya harus sama dengan StackSize objek perangkat driver berikutnya yang lebih rendah, tetapi bisa lebih besar dari nilai ini. Driver panggilan tidak perlu mengalokasikan lokasi tumpukan di IRP untuk dirinya sendiri.

[in] ChargeQuota

Mengatur ini ke TRUE menyebabkan memori yang dialokasikan untuk IRP dikenakan biaya terhadap kuota untuk proses saat ini. Harus diatur ke FALSE oleh driver perantara. Ini dapat diatur ke TRUE hanya oleh driver tingkat tertinggi yang dipanggil dalam konteks utas yang berasal dari permintaan I/O yang drivernya mengalokasikan IRP lain.

Menampilkan nilai

IoAllocateIrp mengembalikan pointer ke IRP, yang dialokasikan dari ruang sistem yang tidak di-patahkan, atau NULL jika IRP tidak dapat dialokasikan.

Keterangan

Rutinitas IoAllocateIrp tidak mengaitkan IRP dengan utas. Driver yang mengalokasikan harus membebaskan IRP alih-alih menyelesaikannya kembali ke manajer I/O.

Driver tingkat menengah atau tertinggi dapat memanggil IoAllocateIrp untuk membuat RUN untuk permintaan yang dikirimnya ke driver tingkat bawah. Driver seperti itu harus menginisialisasi IRP dan harus mengatur rutinitas IoCompletion-nya di IRP yang dibuatnya sehingga pemanggil dapat membuang IRP ketika driver tingkat bawah telah menyelesaikan pemrosesan permintaan.

IoAllocateIrp secara otomatis menginisialisasi anggota IRP. Jangan gunakan IoInitializeIrp untuk menginisialisasi IRP sebelum penggunaan pertamanya. (Anda dapat menggunakan IoInitializeIrp untuk menggunakan kembali IRP yang telah Anda gunakan dalam keadaan khusus tertentu. Lihat Menggunakan kembali RUNPS untuk detailnya.)

Driver tingkat menengah atau tertinggi juga dapat memanggil IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest atau IoBuildSynchronousFsdRequest untuk menyiapkan permintaan yang dikirimnya ke driver tingkat bawah. Hanya driver tingkat tertinggi yang dapat memanggil IoMakeAssociatedIrp.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI ForwardedAtBadIrqlAllocate(wdm), HwStorPortProhibitedDDIs(storport), IoAllocateComplete(wdm), IoAllocateForward(wdm), IoAllocateFree(wdm), IoAllocateIrpSignalEventInCompletion(wdm), IoAllocateIrpSignalEventInCompletion2(wdm), IoAllocateIrpSignalEventInCompletion3(wdm), IoAllocateIrpSignalEventInCompletionTimeout(wdm), IoFreeIrp(storport), IoReuseIrp(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), SpNoWait(storport), StorPortStartIo(storport)

Lihat juga

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine