<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=431965&amp;view=findpost&amp;p=3888893</guid>
        <pubDate>Thu, 30 Mar 2023 19:39:23 +0000</pubDate>
        <title>WFP путь к бинарнику фильтра</title>
        <link>https://forum.sources.ru/index.php?showtopic=431965&amp;view=findpost&amp;p=3888893</link>
        <description><![CDATA[MaIron: Для получения пути к драйверу, связанному с фильтром, можно использовать функцию FwpmFilterGetById0() для получения структуры FWPM_FILTER0 по идентификатору фильтра. Затем можно использовать поле providerKey в полученной структуре для получения информации о драйвере.<br>
<br>
Ниже приведен пример на C++, который демонстрирует использование функций FwpmFilterEnum0() и FwpmFilterGetById0() для перечисления фильтров и получения пути к драйверу для конкретного фильтра:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;Windows.h&#62;</div><div class="code_line">#include &#60;fwpmu.h&#62;</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma comment(lib, &quot;Fwpuclnt.lib&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD numFilters = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FWPM_FILTER0* filters = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FWPM_FILTER_ENUM_TEMPLATE0 enumTemplate = {};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Инициализация структуры enumTemplate</div><div class="code_line">&nbsp;&nbsp; &nbsp;enumTemplate.providerKey = FWPM_GENERAL_CONTEXT_PROVIDER;</div><div class="code_line">&nbsp;&nbsp; &nbsp;enumTemplate.layerKey = FWPM_LAYER_ALE_AUTH_CONNECT_V4;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Получение списка фильтров</div><div class="code_line">&nbsp;&nbsp; &nbsp;DWORD result = FwpmFilterEnum0(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nullptr, &nbsp; &nbsp; &nbsp; &nbsp;// дескриптор сессии, если NULL, будет создан автоматически</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&amp;enumTemplate, &nbsp;// шаблон перечисления</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;nullptr, &nbsp; &nbsp; &nbsp; &nbsp;// начальный индекс</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&amp;filters, &nbsp; &nbsp; &nbsp; // указатель на массив фильтров</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&amp;numFilters &nbsp; &nbsp; // количество фильтров в массиве</div><div class="code_line">&nbsp;&nbsp; &nbsp;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (result != ERROR_SUCCESS)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cerr &#60;&#60; &quot;Failed to enumerate filters. Error: &quot; &#60;&#60; result &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (DWORD i = 0; i &#60; numFilters; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;FWPM_FILTER0&amp; filter = filters[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;GUID filterId = filter.filterId;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Получение дополнительной информации о фильтре по его идентификатору</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;FWPM_FILTER0* filterInfo = nullptr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;result = FwpmFilterGetById0(</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nullptr, &nbsp; &nbsp; &nbsp; &nbsp;// дескриптор сессии, если NULL, будет создан автоматически</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;filterId, &nbsp; &nbsp; &nbsp;// идентификатор фильтра</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;filterInfo &nbsp; &nbsp; // указатель на структуру с информацией о фильтре</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (result != ERROR_SUCCESS)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;std::cerr &#60;&#60; &quot;Failed to get filter info. Error: &quot; &#60;&#60; result &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Получение пути к драйверу из поля providerKey в структуре FWPM_FILTER0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;wchar_t* driverPath = filterInfo-&#62;providerKey;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::wcout &#60;&#60; &quot;Filter path: &quot; &#60;&#60; driverPath &#60;&#60; std::endl;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Освобождение памяти, выделенной для информации о фильтре</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;FwpmFreeMemory0(reinterpret_cast&#60;void**&#62;(&amp;filterInfo));</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Освобождение памяти, выделенной для списка фильтров</div><div class="code_line">&nbsp;&nbsp; &nbsp;FwpmFreeMemory0(reinterpret_cast&#60;void**&#62;(&amp;filters));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>MaIron</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=431965&amp;view=findpost&amp;p=3883337</guid>
        <pubDate>Fri, 16 Dec 2022 21:38:30 +0000</pubDate>
        <title>WFP путь к бинарнику фильтра</title>
        <link>https://forum.sources.ru/index.php?showtopic=431965&amp;view=findpost&amp;p=3883337</link>
        <description><![CDATA[GAGARIN: Перебираю установленные фильтры посредством вызова <strong class='tag-b'>FwpmFilterEnum0()</strong>, соответственно имею на каждый фильтр структуру <strong class='tag-b'>FWPM_FILTER0</strong>. И всё бы хорошо, но хотелось бы ещё получить путь к драйверу конкретного фильтра.]]></description>
        <author>GAGARIN</author>
        <category>C/C++: Системное программирование и WinAPI</category>
      </item>
	
      </channel>
      </rss>
	