Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При написании подпрограммы AddDevice следует учитывать следующие рекомендации по проектированию:
Если драйвер фильтра определяет, что его подпрограмма AddDevice вызвана для устройства, которое не требует обслуживания, драйвер фильтра должен вернуть STATUS_SUCCESS, чтобы разрешить загрузку оставшейся части стека устройств. Драйвер фильтра не создает объект устройства и не присоединяет его к стеку устройств; Драйвер фильтра просто возвращает успех и позволяет добавлять остальные драйверы в стек.
Драйвер должен предоставлять хранилище, обычно в расширении объекта устройства, для любых объектов, определённых ядром, и исполнительных блокировок, которые он использует. Драйвер также должен предоставлять хранилище для указателей на определенные объекты, полученные от диспетчера ввода-вывода или других системных компонентов.
Возможно, вы решите выделить дополнительную системную память для потребностей драйвера, например, для долгосрочных буферов ввода-вывода или списка ожидания. В этом случае подпрограмма AddDevice может вызывать следующие подпрограммы:
ExAllocatePoolWithTag для страницы или непагрегированного системного пространства памяти
ExInitializePagedLookasideList или ExInitializeNPagedLookasideList для инициализации списка страничных или непагированных lookaside
Если драйвер имеет выделенный устройством поток или ожидает любых объектов диспетчера, определенных ядром, подпрограмма AddDevice может инициализировать объекты диспетчера ядра.
Если драйвер использует какие-либо исполнительные спин-блокировки или предоставляет хранилище для спин-блокировки прерывания, подпрограмма AddDevice может инициализировать эти спин-блокировки. Дополнительные сведения см. в разделе Спин-блокировки.
Усильте безопасность открытия файлов при вызове IoCreateDevice.
Укажите характеристику FILE_DEVICE_SECURE_OPEN при вызове IoCreateDevice. Эта характеристика поддерживается в Windows NT 4.0 с пакетом обновления 5 (SP5) и более поздних версий. Он поручает диспетчеру ввода-вывода выполнять проверки безопасности объекта устройства для всех открытых запросов. Поставщики должны указать эту характеристику при вызовах IoCreateDevice, если характеристика FILE_DEVICE_SECURE_OPEN не установлена в INF-установщике класса устройства или INF устройства, а драйверы не выполняют собственную проверку безопасности при открытии. (Дополнительные сведения см. в разделе "Управление доступом к пространству имен устройств".)
Если драйвер устанавливает характеристику FILE_DEVICE_SECURE_OPEN при вызове IoCreateDevice, диспетчер операций ввода-вывода применяет дескриптор безопасности для объекта устройства к любому относительному открытию или открытиям с хвостовой части имени файла. Например, если FILE_DEVICE_SECURE_OPEN задано для \Device\foo, а если \Device\foo можно открыть только администратором, то \Device\foo\abc также можно открыть администратором. Однако диспетчер ввода-вывода запрещает обычному пользователю открывать \Device\foo и \Device\foo\abc.
Если один из драйверов устройства задает эту характеристику, диспетчер PnP распространяет её на все объекты устройства.
Это важно
DDIs ExAllocatePool, изложенные в этом разделе, были признаны устаревшими в Windows 10 версии 2004 и были заменены ExAllocatePool2 и ExAllocatePool3. Дополнительные сведения см. в разделе Обновление устаревших вызовов ExAllocatePool к ExAllocatePool2 и ExAllocatePool3.