Makro IoReleaseRemoveLockAndWait (wdm.h)
Rutinitas IoReleaseRemoveLockAndWait merilis kunci hapus yang diperoleh driver dalam panggilan sebelumnya ke IoAcquireRemoveLock, dan menunggu sampai semua akuisisi kunci telah dirilis.
Sintaks
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
Parameter
[in] RemoveLock
Arahkan ke struktur IO_REMOVE_LOCK yang diteruskan pemanggil dalam panggilan sebelumnya ke IoAcquireRemoveLock.
[in] Tag
Penunjuk ke tag yang disediakan penelepon yang diteruskan dalam panggilan sebelumnya ke IoAcquireRemoveLock.
Jika driver menentukan Tag saat memperoleh kunci, driver harus menentukan Tag yang sama saat melepaskan kunci.
Jika panggilan ke IoAcquireRemoveLock tidak menentukan Tag, maka parameter ini adalah NULL.
Nilai kembali
Tidak ada
Keterangan
Driver biasanya memanggil rutinitas ini dalam kode pengirimannya untuk permintaan IRP_MN_REMOVE_DEVICE . Untuk memungkinkan permintaan I/O yang diantrekan selesai, setiap driver harus memanggil IoReleaseRemoveLockAndWaitsetelah meneruskan hapus IRP ke driver yang lebih rendah berikutnya, dan sebelum merilis memori, memanggil IoDetachDevice, atau memanggil IoDeleteDevice. Rutinitas IoReleaseRemoveLockAndWait menunggu pengemudi bus membatalkan runtime integrasi apa pun yang mungkin luar biasa (misalnya, IRP IRP_MN_WAIT_WAKE ).
Driver harus memperoleh kunci hapus sebelum memanggil IoReleaseRemoveLockAndWait. Biasanya, driver memanggil IoAcquireRemoveLock di awal rutinitas DispatchPnp-nya , sebelum pernyataan switch. Akibatnya, kunci diperoleh untuk setiap operasi PnP, termasuk akuisisi yang diperlukan sebelum memanggil IoReleaseRemoveLockAndWait dalam kode yang menangani IRP_MN_REMOVE_DEVICE.
Untuk melepaskan kunci dari kode selain kode pengiriman IRP_MN_REMOVE_DEVICE , gunakan IoReleaseRemoveLock.
Setelah IoReleaseRemoveLockAndWait dipanggil untuk kunci penghapusan tertentu, panggilan berikutnya ke IoAcquireRemoveLock untuk kunci penghapusan yang sama akan gagal. IoReleaseRemoveLockAndWait tidak kembali sampai semua akuisisi kunci hapus yang luar biasa telah dirilis.
Setelah IoReleaseRemoveLockAndWait kembali, driver harus mempertimbangkan perangkat berada dalam keadaan di mana perangkat siap untuk dihapus dan tidak dapat melakukan operasi I/O. Oleh karena itu, driver tidak boleh memanggil rutinitas IoInitializeRemoveLock untuk menginisialisasi ulang kunci hapus. Pelanggaran aturan ini saat driver sedang diverifikasi oleh Driver Verifier akan mengakibatkan pemeriksaan bug.
Untuk informasi selengkapnya, lihat Menggunakan Hapus Kunci.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Tersedia dimulai dengan Windows 2000. |
Target Platform | Desktop |
Header | wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h) |
Pustaka | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Aturan kepatuhan DDI | IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm), RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm) |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk