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 |