Макрос 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 , чтобы освободить блокировку, когда она больше не нужна.
Дополнительные сведения см. в разделе Использование удаления блокировок.