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

Подпрограмма IoInitializeRemoveLock инициализирует блокировку удаления для объекта устройства.

Синтаксис

void IoInitializeRemoveLock(
  [in]  Lock,
  [in]  Tag,
  [in]  Maxmin,
  [in]  HighWater
);

Параметры

[in] Lock

Указатель на предоставленную вызывающей IO_REMOVE_LOCK структуру, которая инициализируется этой подпрограммой со сведениями о блокировке, включая счетчик и событие синхронизации. Модуль записи драйверов должен выделить эту структуру как часть расширения устройства объекта устройства.

[in] Tag

Указывает тег для идентификации создателя блокировки. Средства записи драйверов обычно используют строку из 4 символов, указанную в обратном порядке, например теги, используемые для ExAllocatePoolWithTag.

Система ввода-вывода использует этот параметр, если включена проверка драйверов . Вызывающий объект всегда должен предоставлять ненулевое значение тега для этого параметра.

[in] Maxmin

Указывает максимальное количество минут, в течение которых должна удерживаться эта блокировка. Нулевое значение означает отсутствие ограничений. Это значение обычно используется во время отладки, чтобы определить подпрограмму драйвера, которая удерживает блокировку дольше, чем ожидалось.

Система ввода-вывода использует этот параметр, если включена проверка драйверов.

[in] HighWater

Указывает максимальное число необработанных приобретений, разрешенных при блокировке. Используйте значение 0, чтобы не указать максимальное значение. HighWatermark должен иметь <значение = 0x7FFFFFFF.

Система ввода-вывода использует этот параметр, если включена проверка драйверов.

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

None

Remarks

Драйвер может использовать блокировку удаления для отслеживания невыполненных операций ввода-вывода на устройстве и определения того, когда драйвер может удалить свой объект устройства в ответ на запрос IRP_MN_REMOVE_DEVICE .

Перед вызовом IoInitializeRemoveLock драйвер должен выделить IO_REMOVE_LOCK структуру в расширении устройства. Драйвер обычно вызывает IoInitializeRemoveLock в своей процедуре AddDevice , когда драйвер инициализирует остальную часть расширения устройства для объекта устройства.

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

Так как драйвер сохраняет структуру IO_REMOVE_LOCK в расширении устройства объекта устройства, блокировка удаления удаляется, когда драйвер удаляет расширение устройства в рамках обработки запроса IRP_MN_REMOVE_DEVICE .

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

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

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

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait