SERVICE_SYSTEM_START vs SERVICE_DEMAND_START

Home Forums Discussions General Discussion SERVICE_SYSTEM_START vs SERVICE_DEMAND_START

This topic contains 1 reply, has 2 voices, and was last updated by  Vadim Smirnov 11 years, 6 months ago.

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #5024

    Saturnus
    Participant

    Имеется 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
    попросту отбирает все системное время, оставляя систему на гододном пайке.

    Как решить подобный вопрос? Заранее благодарен за совет.

    #6054

    Vadim Smirnov
    Moderator

    А эти данные из перехваченных send’ов у тебя каким-то образом обрабатываются или ждут до лучших времен пока стартанет ответственное за их обработку приложение?

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

Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.