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

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock