Большой вопрос - как использовать события сетевого стека ETW в реальном времени в целом, но меня особенно интересует поставщик Microsoft-Windows-NDIS-PacketCapture .Все остальные поставщики сетевых стеков частично работают, но NDIS-PacketCapture (NDIS-PC) вообще не работает, так что это, пожалуй, самый простой вопрос, который я могу здесь задать.
Я посмотрел на ВСЕ структуры данных, вовлеченные в этот процесс, и сравнил их между каждым провайдером, и все они выглядели одинаково и одинаково,Я посмотрел на все возвращаемые значения из функций и возвращенных структур данных, и они также выглядят одинаково между провайдерами, которых я пробовал.
Я посмотрел на свойства сеанса, вызвав «logman» My Trace Session04 "-ets" и выглядит одинаково для NDIS-PC и TCPIP:
C: \ windows \ system32> logman "My Trace Session 04" -ets
Имя: MyTrace Session 04 Статус:
Запуск корневого пути:% systemdrive% \ PerfLogs \ Admin Сегмент:
Off Расписания: On
Имя: My Trace Session 04 \ My Trace Session 04 Тип:
Трасса Добавить: Выкл. Циклический: Выкл. Перезаписать:
Выкл. Размер буфера: 64 Потерянных буферов: 0 Записано буферов: 0 Таймер очистки буфера: 1 Тип часов: Режим файла производительности: В режиме реального времени
Поставщик: Имя:Microsoft-Windows-NDIS-PacketCapture Guid: {2ED6006E-4729-4609-B423-3EE7BCD678EF} Уровень:
5 (win: Verbose) Ключевые словаAll: 0x0 Ключевые словаAny:
0xffffffffffffffff (Ethernet802.3, WirelessWAN, Tunnel,Nativ e802.11, PacketStart, PacketEnd, ut: SendPath, ut: ReceivePath, ut: L3ConnectPath, ut: L2C onnectPath, ut: ClosePath, ut: аутентификация, ut: конфигурация, ut: глобальная, ut: удалено, ut: PiiPresent, ut: Packet, ut: Address, ut: StdTemplateHint, ut: StateTransition, win: Res ponseTime, Microsoft-Windows-NDIS-PacketCapture / Diagnostic, 0x2,0x4,0x8,0x10,0x20, 0x40,0x80,0x100,0x400,0x800,0x1000,0x8000,0x4000,0x20000,0x40000,0x80000,0x10000 0,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000, 0x20000000,0x400000000000,0x800000000000,0x2000000000000,0x000000000000000000,0x10000000000000,0x20000000000000,0x40000000000000,0x80000000000000,0x1 00000000000000,0x200000000000000,0x400000000000000,0x800000000000000,0x100000000 0000000,0x2000000000000000,0x4000000000000000) Свойства: 0 Тип фильтра:. 0
1060 * Команда успешно завершена
1062 *
Я также попытался запустить сеанс вручную с помощью logman и просто открыть его в коде для обработки, но у меня это тоже не сработало.Я также пытался просто записать в файл ETL, и это тоже не работает.Есть еще много вещей, которые я пробовал, но ничего не работает.
Я сожрал все, что связано с интернетом в реальном времени, в связи с потреблением ETW в реальном времени (MSDN, поиск Google, Stackoverflow и т. Д.), И я не видел ни одного полного примера потребления событий ETW в реальном времени .Во всех примерах показано потребление событий из файла ETL или экспорт записанных событий в файл ETL, а затем просто сказано сделать несколько изменений параметров, чтобы заставить потребление в реальном времени работать.Я считаю, что изменения кода, которые я суммировал выше, отражают эти изменения.
Я нахожусь на Win7 Ultimate с использованием VS2010 SP1, создающего 32-битное консольное приложение.Я также пытался создать 64-битное приложение без каких-либо улучшений.
Два следующих поста актуальны, но для меня это не имело никакого значения, когда я пытался / применялся.В режиме реального времени код копирует имя сеанса в конец структуры свойств, и смещение файла журнала должно быть равно 0.Я не думаю, что у меня есть какие-либо проблемы с выравниванием, поскольку все другие поставщики работают нормально:
Windows ETW: потребитель ядра не получает событий EventCallback или BufferCallback Windows ETW: сбой StartTrace сошибка 87 (ERROR_INVALID_PARAMETER)
Я чувствую, что упускаю что-то маленькое и тривиальное, и это должно просто работать.Буду признателен за любую помощь.