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


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

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

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

Никакой

Замечания

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

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

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

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

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

Требования

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

См. также

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait