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) |