Как фильтровать / различать фактические и «фиктивные» события, захваченные Windows API NotifyIpInterfaceChange () - PullRequest
0 голосов
/ 31 января 2019

Мне нужно фиксировать изменения сетевого интерфейса, т.е. события сетевого подключения / отключения в службе Windows на основе C ++.Функция Windows API NotifyIpInterfaceChange () захватывает все необходимые события, но проблема заключается в том, что она также захватывает / запускает много других «фиктивных» (событий, которые не связаны с изменениями сетевого интерфейса).И количество захваченных дополнительных событий не имеет никакой разницы в значениях MIB_IPINTERFACE_ROW параметров.

В соответствии с этим кажется, что событие вызывается для изменений вскорости сети, но нет никакой информации о пороге изменения скорости, и изменения скорости не могут быть проверены в поднятом событии.

Не существует согласованного шаблона (с точки зрения количества дополнительных событий, времениэто события или конкретное сетевое соединение, которое запускает эти дополнительные события), которое можно использовать для дальнейшего устранения неполадок

Функция, которая регистрирует обратный вызов при запуске службы Windows -

bool NetworkInterfaceHelper::initNotification(PVOID Callback,PVOID CallerContext,HANDLE NotificationHandle) {
    PIPINTERFACE_CHANGE_CALLBACK interfaceChangeCallback = (PIPINTERFACE_CHANGE_CALLBACK)Callback;
    return 
        NotifyIpInterfaceChange(
            TARGET_FAMILIY, 
            interfaceChangeCallback, 
            CallerContext, 
            INITIAL_NOTIFICATION,
            &NotificationHandle
        ) == NO_ERROR;
}

Я понимаю, что можетбыть альтернативным методом (ами) обнаружения изменений сетевого интерфейса с использованием C ++, но мне нужно исправить это, если это возможно, используя существующую кодовую базу.Я упомянул Мне нужно событие для обнаружения интернет-соединения / разъединения , но для этого потребуется перезапись кода, что нежелательно, если есть исправление для текущего варианта использования.

Среда: Windows-7 64-разрядная и Windows 10 64-разрядная.C ++ служба Windows.Visual Studio 2017 Community Edition.Windows SDK версии 10.0.16299.0

1 Ответ

0 голосов
/ 01 февраля 2019

Отфильтруйте / дифференцируйте их в функции обратного вызова (MIB_IPINTERFACE_ROW.connected).

Функция NotifyIpInterfaceChange :

регистрируется для уведомления об изменениях все IP-интерфейсы, IPv4-интерфейсы или IPv6-интерфейсы на локальном компьютере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...