SERVICE_SYSTEM_START vs SERVICE_DEMAND_START

Home Forums Discussions General SERVICE_SYSTEM_START vs SERVICE_DEMAND_START

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
      Keymaster

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

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

      Viewing 2 posts - 1 through 2 (of 2 total)
      • You must be logged in to reply to this topic.