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


Указание монопольного доступа к объектам устройств

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

Для стека устройств WDM, имеющего как PDO, так и FDO, монопольное свойство может быть задано только INF-файлом с помощью директивы INF AddReg. PDO — это именованный объект в стеке, но драйвер шины (а не драйвер функции) создает PDO от имени драйвера функции. Единственный способ задать драйверу шины монопольный флаг для PDO — это inf-файлы класса или устройства. (Вызов подпрограммы IoCreateDevice создает FDO; установка монопольного флага для FDO не влияет.)

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

Диспетчер операций ввода-вывода обеспечивает исключительность для именованных объектов устройств независимо от имени. Например, предположим, что объект устройства имеет имя \Device\DeviceName. Затем диспетчер ввода-вывода применяет исключительность для запроса на открытие "\Device\DeviceName\Filename1", за которым следует "\Device\DeviceName\Имя_файла2". Если два объекта в стеке устройств называются (что не рекомендуется), диспетчер ввода-вывода позволяет открыть один дескриптор для каждого объекта. В такой ситуации драйверы должны обеспечивать исключительность в своих функциях обратного вызова DRIVER_DISPATCH . Диспетчер ввода-вывода также не применяет эксклюзивность для открытий относительно другого дескриптора файла. Дополнительные сведения о запросах на открытие файлов в пространстве имен устройства см. в разделе Управление доступом к пространству имен устройства.