Почему filterId в DISCARD_METADATA равно нулю? - PullRequest
0 голосов
/ 06 мая 2019

Я написал программу для проверки пакетов на уровнях DISCARD WFP. Чтобы узнать причину и отфильтровать идентификатор сброса, я использую следующий код:

if (FWPS_IS_METADATA_FIELD_PRESENT(inMetaValues, FWPS_METADATA_FIELD_DISCARD_REASON))
    {
        FWPS_DISCARD_METADATA0 discardData = inMetaValues->discardMetadata;
        FWPS_DISCARD_MODULE0 discardModule = discardData.discardModule;
        UINT32 discardReason = discardData.discardReason;
        UINT64 discardFilter = discardData.filterId;
        switch (discardModule)
        {
        case FWPS_DISCARD_MODULE_NETWORK:
            PrintNetworkDiscardReason(discardReason);
            break;

        case FWPS_DISCARD_MODULE_TRANSPORT:
            PrintTransportDiscardReason(discardReason);
            break;

        case FWPS_DISCARD_MODULE_GENERAL:
            if (FWPS_DISCARD_FIREWALL_POLICY == discardReason)
            {
                PRINT_MSG("DISCARD_REASON: FWPS_DISCARD_FIREWALL_POLICY");
            }
            else if (FWPS_DISCARD_IPSEC == discardReason)
            {
                PRINT_MSG("DISCARD_REASON: FWPS_DISCARD_IPSEC");
            }
            break;
        }

        PRINT_MSG("DISCARD FILTER: %x", discardFilter);
    }

Запишите правильно filterId записи, когда пакет сбрасывается брандмауэром Windows (на некотором эль-уровне), но filterId равен нулю, когда антивирус блокирует пакеты (на уровне FWPS_LAYER_INBOUND_IPPACKET_V4_DISCARD).

Можно ли получить filterId фильтра, который отбрасывает эти пакеты?

...