Fungsi IoCsqInsertIrp (wdm.h)

Rutinitas IoCsqInsertIrp menyisipkan IRP dalam antrean IRP yang aman untuk pembatalan pengemudi.

Sintaks

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

Parameter

[in, out] Csq

Arahkan ke struktur IO_CSQ untuk antrean IRP pembatalan aman driver. Struktur ini harus diinisialisasi oleh IoCsqInitialize atau IoCsqInitializeEx.

[in, out] Irp

Arahkan ke IRP yang akan diantrekan.

[out, optional] Context

Arahkan ke struktur IO_CSQ_IRP_CONTEXT . IoCsqInsertIrp menginisialisasi struktur ini dengan informasi konteks untuk IRP yang disisipkan. Driver meneruskan nilai ini ke IoCsqRemoveIrp untuk menghapus IRP dari antrean. Konteks dapat berupa NULL jika driver tidak akan menggunakan IoCsqRemoveIrp untuk menghapus IRP ini dari antrean.

Nilai kembali

Tidak ada

Keterangan

IoCsqInsertIrp menggunakan rutinitas pengiriman antrean untuk menyisipkan IRP. Rutinitas IoCsqInsertIrp :

  1. Memanggil rutinitas CsqAcquireLock antrean untuk mengunci antrean.
  2. Memanggil rutinitas CsqInsertIrp antrean untuk menyisipkan IRP.
  3. Menandai IRP sebagai tertunda.
  4. Memanggil rutinitas CsqReleaseLock antrean untuk membuka kunci antrean.
Jika IRP yang akan dimasukkan telah dibatalkan, IoCsqInsertIrp tidak mencoba memasukkan IRP ke dalam antrean.

Driver juga dapat menggunakan IoCsqInsertIrpEx untuk memasukkan IRP ke dalam antrean. Untuk antrean yang ditentukan oleh IoCsqInitializeEx, IoCsqInsertIrpEx menyediakan kemampuan tambahan. Untuk informasi selengkapnya, lihat Antrean IRP Batal-Aman.

Perhatikan bahwa rutinitas IoCsqXxx menggunakan anggota DriverContext[3] dari IRP untuk menyimpan informasi konteks IRP. Driver yang menggunakan rutinitas ini untuk mengantre runtime integrasi harus membiarkan anggota tersebut tidak digunakan.

Penelepon IoCsqInsertIrp harus berjalan di IRQL <= DISPATCH_LEVEL. Rutinitas panggilan balik driver harus bekerja dengan benar di IRQL tersebut.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows XP dan versi Windows yang lebih baru. Driver yang juga harus bekerja di Windows 2000 dan Windows 98/Me dapat menautkan ke Csq.lib untuk menggunakan rutinitas.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan)
Aturan kepatuhan DDI IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm) , RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Lihat juga

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp