Макрос 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 |