Fungsi IoSetCancelRoutine (wdm.h)

Rutinitas IoSetCancelRoutine menyiapkan rutinitas Batal yang disediakan driver untuk dipanggil jika IRP tertentu dibatalkan.

Sintaks

PDRIVER_CANCEL IoSetCancelRoutine(
  [in] PIRP           Irp,
  [in] PDRIVER_CANCEL CancelRoutine
);

Parameter

[in] Irp

Penunjuk ke IRP yang dimasukkan ke dalam atau dihapus dari status yang dapat dibatalkan.

[in] CancelRoutine

Menentukan titik masuk dari rutinitas Batal yang disediakan penelepon untuk dipanggil jika IRP yang ditentukan dibatalkan atau NULL jika IRP yang diberikan dihapus dari status yang dapat dibatalkan. Rutinitas ini dinyatakan sebagai berikut:

VOID
(*PDRIVER_CANCEL)(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

Nilai kembali

IoSetCancelRoutine mengembalikan nilai Irp-CancelRoutine > sebelumnya. Jika sebelumnya tidak ada batalkan rutinitas yang ditetapkan, atau jika pembatalan IRP sudah berlangsung, IoSetCancelRoutine mengembalikan NULL.

Keterangan

Rutinitas ini dapat menonaktifkan rutinitas Batal yang saat ini diatur dalam IRP.

Driver harus menahan sistem membatalkan kunci putar saat memanggil rutinitas ini jika driver menggunakan antrean perangkat yang disediakan manajer I/O di objek perangkat. Driver berjalan di IRQL = DISPATCH_LEVEL setelah memanggil IoAcquireCancelSpinLock sampai melepaskan kunci putar batal dengan IoReleaseCancelSpinLock.

Jika driver mengelola antrean RUN sendiri, maka driver tidak perlu menahan kunci putar batal saat memanggil rutinitas ini. IoSetCancelRoutine menggunakan intrinsik pertukaran yang saling dikunci untuk mengatur alamat rutin Batalkan sebagai operasi atomik. Pengurangan penggunaan kunci putar batal dapat meningkatkan performa driver dan performa sistem secara keseluruhan.

Rutinitas Pembatalan Driver dipanggil di IRQL = DISPATCH_LEVEL dengan kunci putar batal ditahan. Rutinitas Batalkan harus melepaskan kunci putar batal sebelum mengembalikan kontrol.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
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 IrpCancelField(wdm), StartIoCancel(wdm)

Lihat juga

IoAcquireCancelSpinLock

IoReleaseCancelSpinLock