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