Fungsi IoCsqInsertIrpEx (wdm.h)

Rutinitas IoCsqInsertIrpEx menyisipkan IRP ke dalam antrean IRP yang aman untuk pembatalan driver.

Sintaks

NTSTATUS IoCsqInsertIrpEx(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context,
  [in, optional]  PVOID               InsertContext
);

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 . IoCsqInsertIrpEx 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.

[in, optional] InsertContext

Penunjuk ke nilai konteks yang ditentukan driver. Parameter ini diteruskan ke rutinitas CsqInsertIrpEx driver, jika memilikinya. Jika tidak, parameter ini diabaikan.

Nilai kembali

Jika parameter Csqdiinisialisasi dengan IoCsqInitialize, IoCsqInsertIrpEx selalu mengembalikan STATUS_SUCCESS. Jika Csqdiinisialisasi dengan IoCsqInitializeEx, IoCsqInsertIrpEx mengembalikan nilai yang dikembalikan oleh rutinitas CsqInsertIrpEx driver.

Keterangan

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

  1. Memanggil rutinitas CsqAcquireLock antrean untuk mengunci antrean.
  2. Jika struktur IO_CSQ antrean diinisialisasi oleh IoCsqInitialize, IoCsqInsertIrpEx memanggil rutinitas CsqInsertIrp antrean untuk menyisipkan IRP. Jika struktur IO_CSQ antrean diinisialisasi oleh IoCsqInitializeEx, IoCsqInsertIrpEx memanggil rutinitas CsqInsertIrpEx antrean untuk menyisipkan IRP, dan meneruskan parameter InsertContext sebagai parameter InsertContextCsqInsertIrpEx.
  3. Memanggil rutinitas CsqReleaseLock antrean untuk membuka kunci antrean.
Jika IRP yang akan dimasukkan telah dibatalkan, IoCsqInsertIrpEx tidak mencoba memasukkan IRP ke dalam antrean.

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 IoCsqInsertIrpEx harus berjalan pada IRQL <= DISPATCH_LEVEL. Rutinitas panggilan balik driver harus berfungsi dengan benar di IRQL ini.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Server 2003 dan versi yang lebih baru dari sistem operasi Windows. Rutinitas ini juga tersedia di pustaka Csq.lib yang dikirim dengan Windows Driver Kit (WDK) dan Driver Development Kit (DDK) untuk Windows Server 2003. Driver yang juga harus berfungsi untuk Windows XP, 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

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp