Функция IoRegisterDeviceInterface (wdm.h)
Программа IoRegisterDeviceInterface регистрирует класс интерфейса устройства , если он еще не зарегистрирован, и создает новый экземпляр класса интерфейса, который драйвер может впоследствии включить для использования приложениями или другими системными компонентами.
Синтаксис
NTSTATUS IoRegisterDeviceInterface(
[in] PDEVICE_OBJECT PhysicalDeviceObject,
[in] const GUID *InterfaceClassGuid,
[in, optional] PUNICODE_STRING ReferenceString,
[out] PUNICODE_STRING SymbolicLinkName
);
Параметры
[in] PhysicalDeviceObject
Указатель на PDO для устройства.
[in] InterfaceClassGuid
Указатель на идентификатор GUID класса, определяющий функциональность (класс интерфейса устройства), зарегистрированный.
[in, optional] ReferenceString
При необходимости указывает на UNICODE_STRING. Строка не должна содержать символы разделителя путей ("/" или "\"). Драйверы функций обычно указывают NULL для этого параметра. Драйверы фильтров должны указывать NULL.
Ссылочные строки используются только несколькими водителями шины, такими как swenum, который использует экземпляры интерфейса устройства в качестве заполнителей для программных устройств, созданных по требованию. При открытии экземпляра интерфейса диспетчер ввода-вывода передает ссылку экземпляра драйверу. Строка становится частью имени экземпляра интерфейса (как добавленный компонент пути). Затем драйвер может использовать ссылочную строку, чтобы различать два экземпляра интерфейса одного класса для одного устройства.
В системах Microsoft Windows 98/Me значение
[out] SymbolicLinkName
Указатель на структуру строки Юникода, выделенную вызывающим объектом. Если эта подпрограмма выполнена успешно, она инициализирует строку Юникода и выделяет буфер строки, содержащий путь режима ядра к символьной ссылке для экземпляра указанного класса интерфейса устройства.
Вызывающий объект должен обрабатывать СимвольныеlinkName как непрозрачный и не должен разобрать его.
Вызывающий объект отвечает за освобождение SymbolicLinkName с помощью RtlFreeUnicodeString, если он больше не нужен.
Возвращаемое значение
IoRegisterDeviceInterface возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные значения возвращаемых ошибок включают следующие значения.
Возвращаемый код | Описание |
---|---|
|
Недопустимые параметры. Возможности включают, что PhysicalDeviceObject не указывает на допустимый PDO или что строка ReferenceString содержит недопустимый символ. |
Замечания
IoRegisterDeviceInterface регистрирует класс интерфейса устройства, если он ранее не зарегистрирован и создает новый экземпляр класса интерфейса. Драйвер может вызывать эту подпрограмму несколько раз для определенного устройства для регистрации нескольких классов интерфейса и создания экземпляров классов. Функция или драйвер фильтра обычно регистрирует интерфейсы устройств в своей подпрограмме AddDevice. Например, драйвер отказоустойчивого тома может зарегистрировать экземпляр интерфейса отказоустойчивого тома и экземпляр интерфейса тома для определенного тома.
Если класс интерфейса устройства ранее не зарегистрирован, диспетчер операций ввода-вывода создает для него раздел реестра, а также постоянное хранилище для конкретного экземпляра под ключом. Драйверы могут получить доступ к этому постоянному хранилищу с помощью IoOpenDeviceInterfaceRegistryKey.
Драйвер регистрирует экземпляр интерфейса один раз, а затем вызывает IoSetDeviceInterfaceState для включения и отключения интерфейса.
Зарегистрированные интерфейсы сохраняются во время перезагрузки операционной системы. Если указанный интерфейс уже зарегистрирован, диспетчер операций ввода-вывода передает имя в СимвольногоlinkName и возвращает STATUS_OBJECT_NAME_EXISTS информационной успешности.
Большинство драйверов используют ссылочной строкой NULL для экземпляра интерфейса устройства. Если драйвер использует строку ссылки, отличной отNULL, ссылку, она должна выполнять дополнительную работу, включая, возможно, управление собственным пространством имен и безопасностью. Драйвер фильтра, предоставляющий интерфейс устройства, должен использовать NULLReferenceString, чтобы избежать конфликтов с другими драйверами в стеке устройств.
Вызывающие функции этой подпрограммы не требуются для удаления регистрации для интерфейса устройства, если он больше не нужен. При необходимости регистрация интерфейса устройства может быть удалена из пользовательского режима.
Вызывающие IoRegisterDeviceInterface должны выполняться в IRQL = PASSIVE_LEVEL в контексте системного потока.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Windows 2000. |
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки |
NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |
правил соответствия DDI |
HwStorPortProhibitedDDIs(storport), IrqlIoPassive3(wdm), PowerIrpDDis(wdm) |