Поделиться через


Макрос 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 следующему драйверу ниже, но перед выходом из подпрограммы диспетчеризации.
Каждый вызов IoAcquireRemoveLock должен иметь соответствующий вызов IoReleaseRemoveLock.

IoReleaseRemoveLock уменьшает количество необработанных приобретений блокировки удаления. Если счетчик равен нулю и драйвер получил запрос IRP_MN_REMOVE_DEVICE , IoReleaseRemoveLock задает внутреннее событие. Когда драйвер готов к удалению объекта устройства, он вызывает аналогичную процедуру IoReleaseRemoveLockAndWait. Драйвер выполняет этот вызов только в коде отправки для запроса IRP_MN_REMOVE_DEVICE . Подпрограмма IoReleaseRemoveLockAndWait не возвращается, пока IoReleaseRemoveLock не установит событие, указывающее, что количество приобретений равно нулю. После возврата IoReleaseRemoveLockAndWait драйвер может безопасно отсоединить и удалить объект устройства.

Дополнительные сведения см. в разделе Использование снятия блокировок.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm), RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockMnSurpriseRemove(wdm), RemoveLockQueryMnRemove(wdm), RemoveLockRelease2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePnp(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

См. также раздел

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLockAndWait