Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Интерфейсы устройств доступны как для компонентов режима ядра, так и для приложений пользовательского режима. Код пользовательского режима может использовать функции CfgMgr32 (например, CM_Get_Device_Interface_List) или функции SetupDiXxx (см. функции интерфейса устройства SetupDi) для получения сведений о зарегистрированных, включенных интерфейсах устройств. Затем приложение в пользовательском режиме может использовать API ввода-вывода, такие как CreateFile , для получения дескриптора устройства для отправки ввода-вывода в него. Чтобы получать уведомления об активации и деактивации интерфейсов устройств и о том, как реагировать на эти действия, см. раздел о регистрации для уведомлений о появлении интерфейса устройства и удалении устройства.
Прежде чем компоненту режима ядра можно будет использовать определенное устройство или файловый объект, он должен выполнить следующие действия:
Определите, зарегистрирован и включен ли требуемый класс интерфейса устройства.
Драйвер может зарегистрировать в диспетчере PnP уведомление, если экземпляр интерфейса устройства включен или отключен. Чтобы зарегистрировать, компонент вызывает IoRegisterPlugPlayNotification. Эта подпрограмма хранит адрес обратного вызова, предоставленного драйвером, который вызывается всякий раз, когда экземпляр экземпляра интерфейса устройства включен или отключен для указанного класса устройства. Подпрограммы обратного вызова получают структуру DEVICE_INTERFACE_CHANGE_NOTIFICATION , содержащую строку Юникода, представляющую символьную ссылку экземпляра интерфейса. Дополнительные сведения см . в уведомлении об изменении интерфейса устройства PnP .
Драйвер или другой компонент режима ядра также может вызывать IoGetDeviceInterfaces , чтобы получить список всех зарегистрированных экземпляров интерфейса устройства для определенного класса интерфейса устройства. Возвращенный список содержит указатели на строки символьной ссылки Юникода, определяющие экземпляры интерфейса устройства.
Получите указатель на объект устройства или файла, соответствующий экземпляру интерфейса.
Чтобы получить доступ к определённому объекту устройства, драйвер должен вызвать IoGetDeviceObjectPointer, передав строку Unicode для нужного интерфейса в параметре ObjectName. Чтобы получить доступ к файловому объекту, драйвер должен вызвать InitializeObjectAttributes, передав строку Unicode в параметр ObjectName, а затем передать успешно инициализированную структуру атрибутов при вызове ZwCreateFile.