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


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

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

Дополнительные сведения см. в разделе Using Remove Locks.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 2000.
целевая платформа Настольный
заголовка wdm.h (include 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