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

Подпрограмма IoAcquireRemoveLock увеличивает число для блокировки удаления, указывая, что связанный объект устройства не следует отсоединять от стека устройств или удалять.

Синтаксис

NTSTATUS
IoAcquireRemoveLock (
    _Inout_ PIO_REMOVE_LOCK RemoveLock,
    _In_opt_ PVOID          Tag
    );

Параметры

[in] RemoveLock

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

[in, optional] Tag

При необходимости указывает на тег, предоставленный вызывающей стороны, который идентифицирует этот экземпляр получения блокировки удаления. Например, подпрограмма диспетчеризации драйвера обычно задает для этого параметра указатель на IRP, обрабатываемый подпрограммой.

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

Тег не обязательно должен быть уникальным, но должен быть чем-то значимым во время отладки.

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

None

Remarks

Макрос IoAcquireRemoveLock выполняет оболочку и принимает возвращаемое значение IoAcquireRemoveLockEx, которое возвращает NTSTATUS:

Возвращаемое значение Описание
STATUS_SUCCESS Указывает, что вызов выполнен успешно.
STATUS_DELETE_PENDING Значение ошибки, указывающее, что драйвер получил IRP_MN_REMOVE_DEVICE для устройства и вызвал IoReleaseRemoveLockandWait. Эта подпрограмма ожидает очистки всех блокировок перед возвратом управления драйверу.

Если подпрограмма возвращает любое значение, кроме STATUS_SUCCESS, не запускайте новые операции на устройстве.

Драйвер должен инициализировать блокировку удаления с помощью вызова IoInitializeRemoveLock перед использованием блокировки.

Драйвер должен вызвать IoReleaseRemoveLock , чтобы освободить блокировку, когда она больше не нужна.

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

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI CompleteRequestStatusCheck(wdm), MarkDevicePower(wdm), MarkPower(wdm), MarkPowerDown(wdm), MarkQueryRelations(wdm), MarkStartDevice(wdm), MultRemoveLock(wdm), NsRemoveLockMnRemove(wdm), NsRemoveLockMnSurpriseRemove(wdm), NsRemoveLockQueryMnRemove(wdm), PowerDownAllocate(wdm), PowerDownFail(wdm), PowerUpFail(wdm), 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), WmiForward(wdm)

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

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait