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


Макрос IoReleaseRemoveLockAndWait (wdm.h)

IoReleaseRemoveLockAndWait освобождает блокировку удаления, которую водитель приобрел в предыдущем вызове IoAcquireRemoveLock, и ожидает, пока не будут освобождены все приобретения блокировки.

Синтаксис

void IoReleaseRemoveLockAndWait(
  [in]  RemoveLock,
  [in]  Tag
);

Параметры

[in] RemoveLock

Указатель на структуру IO_REMOVE_LOCK, которую вызывающий объект передал в предыдущем вызове IoAcquireRemoveLock.

[in] Tag

Указатель на тег, предоставленный вызывающим, который был передан в предыдущем вызове IoAcquireRemoveLock.

Если драйвер указал тег тега при получении блокировки, драйвер должен указать тот же тег при освобождении блокировки.

Если вызов IoAcquireRemoveLock не указалтега , этот параметр NULL.

Возвращаемое значение

Никакой

Замечания

Драйвер обычно вызывает эту подпрограмму в коде отправки для запроса IRP_MN_REMOVE_DEVICE. Чтобы разрешить выполнение запросов ввода-вывода в очереди, каждый драйвер должен вызывать IoReleaseRemoveLockAndWaitпосле передачи IRP в следующий нижний драйвер и , прежде чем выпуск памяти, вызовы IoDetachDeviceили вызовы IoDeleteDevice. IoReleaseRemoveLockAndWait подпрограмма ожидает, пока водитель шины отменит какие-либо irPs, которые могут быть невыполненными (например, IRP_MN_WAIT_WAKE IRP).

Драйвер должен получить блокировку удаления перед вызовом IoReleaseRemoveLockAndWait. Как правило, драйвер вызывает IoAcquireRemoveLock в начале процедуры DispatchPnp перед инструкцией switch. В результате блокировка приобретается для каждой операции PnP, включая приобретение, необходимое перед вызовом IoReleaseRemoveLockAndWait в коде, который обрабатывает IRP_MN_REMOVE_DEVICE.

Чтобы освободить блокировку из кода, отличного от кода отправки IRP_MN_REMOVE_DEVICE, используйте IoReleaseRemoveLock.

После вызова IoReleaseRemoveLockAndWait для определенной блокировки удаления последующие вызовы IoAcquireRemoveLock для той же блокировки удаления завершится ошибкой. IoReleaseRemoveLockAndWait не возвращается до тех пор, пока не будут освобождены все невыполненные приобретения блокировки удаления.

После IoReleaseRemoveLockAndWait драйвер должен рассмотреть состояние, в котором устройство готово к удалению и не может выполнять операции ввода-вывода. Поэтому драйвер не должен вызывать процедуру IoInitializeRemoveLock для повторной инициализации блокировки удаления. Нарушение этого правила при проверке драйвера с помощью средства проверки драйверов приведет к проверке ошибок.

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

Требования

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

См. также

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock