Имеется TDI-фильтр, перехватывающий TCP-трифик.
При поступлении IRP с кодом TDI send он складывается в очередь,
затем с помощью WorkItem (или SystemThread, реализовал оба варианта)
выбирается оттуда. Затем происходит анализ содержимого и в зависимости
от результата происходит IoCallDriver или IoCompleteRequest с кодом
STATUS_ACCESS_DENIED.
При этом наблюдаю странную картину. Когда запускаю в режиме SERVICE_DEMAND_START,
все работает отлично. Но стоит запустить как SERVICE_SYSTEM_START (порядок загрузки
при этом меняется: TCPIP -> мой драйвер -> netbt), обнаруживаются ужасные тормоза.
Возможно ли при этом как-то ограничить размер очереди. Я подозреваю, что при
SERVICE_SYSTEM_START отложенных IRP скапливается великое множество и WorkItem
попросту отбирает все системное время, оставляя систему на гододном пайке.
Как решить подобный вопрос? Заранее благодарен за совет.