Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.174] |
|
Сообщ.
#1
,
|
|
|
Перебираю установленные фильтры посредством вызова FwpmFilterEnum0(), соответственно имею на каждый фильтр структуру FWPM_FILTER0. И всё бы хорошо, но хотелось бы ещё получить путь к драйверу конкретного фильтра.
|
Сообщ.
#2
,
|
|
|
Для получения пути к драйверу, связанному с фильтром, можно использовать функцию FwpmFilterGetById0() для получения структуры FWPM_FILTER0 по идентификатору фильтра. Затем можно использовать поле providerKey в полученной структуре для получения информации о драйвере.
Ниже приведен пример на C++, который демонстрирует использование функций FwpmFilterEnum0() и FwpmFilterGetById0() для перечисления фильтров и получения пути к драйверу для конкретного фильтра: #include <Windows.h> #include <fwpmu.h> #include <iostream> #pragma comment(lib, "Fwpuclnt.lib") int main() { DWORD numFilters = 0; FWPM_FILTER0* filters = nullptr; FWPM_FILTER_ENUM_TEMPLATE0 enumTemplate = {}; // Инициализация структуры enumTemplate enumTemplate.providerKey = FWPM_GENERAL_CONTEXT_PROVIDER; enumTemplate.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4; // Получение списка фильтров DWORD result = FwpmFilterEnum0( nullptr, // дескриптор сессии, если NULL, будет создан автоматически &enumTemplate, // шаблон перечисления nullptr, // начальный индекс &filters, // указатель на массив фильтров &numFilters // количество фильтров в массиве ); if (result != ERROR_SUCCESS) { std::cerr << "Failed to enumerate filters. Error: " << result << std::endl; return 1; } for (DWORD i = 0; i < numFilters; i++) { FWPM_FILTER0& filter = filters[i]; GUID filterId = filter.filterId; // Получение дополнительной информации о фильтре по его идентификатору FWPM_FILTER0* filterInfo = nullptr; result = FwpmFilterGetById0( nullptr, // дескриптор сессии, если NULL, будет создан автоматически &filterId, // идентификатор фильтра &filterInfo // указатель на структуру с информацией о фильтре ); if (result != ERROR_SUCCESS) { std::cerr << "Failed to get filter info. Error: " << result << std::endl; continue; } // Получение пути к драйверу из поля providerKey в структуре FWPM_FILTER0 wchar_t* driverPath = filterInfo->providerKey; std::wcout << "Filter path: " << driverPath << std::endl; // Освобождение памяти, выделенной для информации о фильтре FwpmFreeMemory0(reinterpret_cast<void**>(&filterInfo)); } // Освобождение памяти, выделенной для списка фильтров FwpmFreeMemory0(reinterpret_cast<void**>(&filters)); return |