Рекомендации по написанию процедур AddDevice
При написании процедуры 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.