Bagikan melalui


Fungsi IoAllocateIrpEx (wdm.h)

IoAllocateIrpEx mengalokasikan IRP dari kumpulan sistem yang tidak disebarkan, mungkin dengan ekstensi IRP.

Sintaks

PIRP IoAllocateIrpEx(
  PDEVICE_OBJECT DeviceObject,
  CCHAR          StackSize,
  BOOLEAN        ChargeQuota
);

Parameter

DeviceObject

Arahkan ke objek perangkat untuk memeriksa apakah akan menambahkan ruang untuk ekstensi IRP. Ketika DeviceObject diatur ke DEVICE_WITH_IRP_EXTENSION, ruang untuk ekstensi IRP juga dialokasikan.

StackSize

Jumlah maksimum lokasi tumpukan yang akan dialokasikan untuk IRP. StackSize harus setidaknya 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.

ChargeQuota

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

Nilai kembali

IoAllocateIrpEx mengembalikan pointer ke IRP yang dialokasikan dan diinisialisasi, atau NULL jika IRP tidak dapat dialokasikan.

Keterangan

IoAllocateIrpEx mengalokasikan lokasi tumpukan StackSize dan menginisialisasi IRP. Ini 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 IoAllocateIrpEx untuk membuat RUN untuk permintaan yang dikirimnya ke driver tingkat bawah. Driver seperti itu harus menginisialisasi IRP dan harus mengatur rutinitas panggilan balik IoCompletion 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 mulai Windows 10 (versi 1507)
Target Platform Universal
Header wdm.h (termasuk wdm.h, ntddk.h, ntifs.h)
Pustaka ntoskrnl.lib
DLL ntoskrnl.exe
IRQL <= DISPATCH_LEVEL

Lihat juga

IO_STACK_LOCATION

IRP

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoCompletion

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine