Макрос IoReleaseRemoveLock (wdm.h)
IoReleaseRemoveLock освобождает блокировку удаления, полученную с предыдущим вызовом IoAcquireRemoveLock.
Синтаксис
void IoReleaseRemoveLock(
[in] RemoveLock,
[in] Tag
);
Параметры
[in] RemoveLock
Указатель на структуру IO_REMOVE_LOCK, которую вызывающий объект передал предыдущему вызову IoAcquireRemoveLock.
[in] Tag
Указатель на предоставленный вызывающим тегом, который был передан предыдущему вызову IoAcquireRemoveLock.
Если драйвер указал тег тега при получении блокировки, драйвер должен указать тот же тег при освобождении блокировки.
Если вызов IoAcquireRemoveLock не указал тега, этот параметр NULL.
Возвращаемое значение
Никакой
Замечания
Драйвер вызывает IoReleaseRemoveLock после завершения операции ввода-вывода, для которой она называется IoAcquireRemoveLock.
- Для операций ввода-вывода (включая энергопотребление и PnP IRPs), которые задают подпрограмму IoCompletion, драйвер должен вызывать IoReleaseRemoveLockв подпрограмме IoCompletion, после вызова IoCompleteRequest.
- Для операций ввода-вывода, не устанавливающих подпрограмму IoCompletion, драйвер должен вызывать IoReleaseRemoveLock после передачи текущего драйвера IRP следующему нижнему драйверу, но перед выходом из подпрограммы отправки.
IoReleaseRemoveLock уменьшает количество невыполненных приобретений блокировки удаления. Если число переходит к нулю, и драйвер получил запрос IRP_MN_REMOVE_DEVICE, IoReleaseRemoveLock задает внутреннее событие. Когда драйвер готов к удалению объекта устройства, он вызывает аналогичную подпрограмму, IoReleaseRemoveLockAndWait. Драйвер выполняет этот вызов только в коде отправки для запроса IRP_MN_REMOVE_DEVICE. Подпрограмма IoReleaseRemoveLockAndWait не возвращается, пока IoReleaseRemoveLock задает событие, указывающее, что число приобретений равно нулю. После IoReleaseRemoveLockAndWait драйвер может безопасно отсоединить и удалить объект устройства.
Дополнительные сведения см. в разделе Using Remove Locks.