mirror of
https://github.com/zodiacon/WFPExplorer
synced 2026-06-08 18:39:31 +00:00
basic network events view
This commit is contained in:
@@ -1,3 +1,11 @@
|
||||
# WFP Explorer
|
||||
|
||||
GUI tool to view Windows Filtering Platform objects (WIP).
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
@@ -87,3 +87,4 @@ struct WFPProviderContextEnumerator : WFPEnumerator<
|
||||
WFPEnumerator(hEngine, ::FwpmProviderContextCreateEnumHandle, ::FwpmProviderContextDestroyEnumHandle, ::FwpmProviderContextEnum) {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+12
-1
@@ -16,6 +16,7 @@
|
||||
#include <ToolbarHelper.h>
|
||||
#include "AppSettings.h"
|
||||
#include "HierarchyView.h"
|
||||
#include "NetEventsView.h"
|
||||
|
||||
const int WINDOW_MENU_POSITION = 4;
|
||||
|
||||
@@ -53,6 +54,7 @@ LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/
|
||||
{ ID_VIEW_PROVIDERS, IDI_PROVIDER },
|
||||
{ ID_VIEW_FILTERS, IDI_FILTER },
|
||||
{ ID_VIEW_LAYERS, IDI_LAYERS },
|
||||
{ ID_VIEW_NETWORKEVENTS, IDI_EVENT },
|
||||
{ ID_VIEW_SUBLAYERS, IDI_SUBLAYER },
|
||||
{ ID_VIEW_CALLOUTS, IDI_CALLOUT },
|
||||
{ ID_VIEW_PROVIDERCONTEXTS, IDI_CONTEXT },
|
||||
@@ -69,7 +71,7 @@ LRESULT CMainFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/
|
||||
images.Create(16, 16, ILC_COLOR32, 8, 4);
|
||||
UINT icons[] = {
|
||||
IDI_SESSION, IDI_FILTER, IDI_PROVIDER, IDI_LAYERS, IDI_SUBLAYER, IDI_CALLOUT,
|
||||
IDI_CONTEXT, IDI_TREE,
|
||||
IDI_CONTEXT, IDI_TREE, IDI_EVENT,
|
||||
};
|
||||
for (auto icon : icons)
|
||||
images.AddIcon(AtlLoadIconImage(icon, 0, 16, 16));
|
||||
@@ -134,6 +136,7 @@ void CMainFrame::InitMenu() {
|
||||
{ ID_VIEW_PROVIDERCONTEXTS, IDI_CONTEXT },
|
||||
{ ID_EDIT_PROPERTIES, IDI_PROPERTIES },
|
||||
{ ID_VIEW_HIERARCHY, IDI_TREE },
|
||||
{ ID_VIEW_NETWORKEVENTS, IDI_EVENT },
|
||||
};
|
||||
for (auto& cmd : cmds) {
|
||||
if (cmd.icon)
|
||||
@@ -244,6 +247,14 @@ LRESULT CMainFrame::OnViewLayers(WORD, WORD, HWND, BOOL&) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CMainFrame::OnViewNetEvents(WORD, WORD, HWND, BOOL&) {
|
||||
auto view = new CNetEventsView(this, m_Engine);
|
||||
view->Create(m_view, rcDefault, nullptr, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0);
|
||||
m_view.AddPage(view->m_hWnd, L"Net Events", 8, view);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CMainFrame::OnViewHierarchy(WORD, WORD, HWND, BOOL&) {
|
||||
auto view = new CHierarchyView(this, m_Engine);
|
||||
view->Create(m_view, rcDefault, nullptr, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, 0);
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
COMMAND_ID_HANDLER(ID_VIEW_PROVIDERCONTEXTS, OnViewProviderContexts)
|
||||
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
|
||||
COMMAND_ID_HANDLER(ID_VIEW_HIERARCHY, OnViewHierarchy)
|
||||
COMMAND_ID_HANDLER(ID_VIEW_NETWORKEVENTS, OnViewNetEvents)
|
||||
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
|
||||
NOTIFY_CODE_HANDLER(TBVN_PAGEACTIVATED, OnPageActivated)
|
||||
COMMAND_ID_HANDLER(ID_OPTIONS_ALWAYSONTOP, OnAlwaysOnTop)
|
||||
@@ -72,6 +73,7 @@ private:
|
||||
LRESULT OnViewProviders(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewProviderContexts(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewLayers(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewNetEvents(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewHierarchy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewSublayers(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnViewCallouts(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
#include "pch.h"
|
||||
#include "NetEventsView.h"
|
||||
#include <Enumerators.h>
|
||||
#include <atltime.h>
|
||||
#include "StringHelper.h"
|
||||
|
||||
CNetEventsView::CNetEventsView(IMainFrame* frame, WFPEngine& engine) : CFrameView(frame), m_Engine(engine) {
|
||||
}
|
||||
|
||||
void CNetEventsView::Refresh() {
|
||||
m_Events = WFPNetEventEnumerator(m_Engine.Handle()).Next<NetEventInfo>(1024);
|
||||
Sort(m_List);
|
||||
m_List.SetItemCountEx((int)m_Events.size(), LVSICF_NOSCROLL);
|
||||
}
|
||||
|
||||
CString CNetEventsView::GetColumnText(HWND, int row, int col) {
|
||||
auto& info = m_Events[row];
|
||||
auto e = info.Data;
|
||||
auto flags = e->header.flags;
|
||||
|
||||
switch (GetColumnManager(m_List)->GetColumnTag<ColumnType>(col)) {
|
||||
case ColumnType::Type: return StringHelper::NetEventTypeToString(e->type);
|
||||
case ColumnType::Time: return CTime(e->header.timeStamp).Format(L"%x %X");
|
||||
case ColumnType::AddressFamily: return StringHelper::AddressFamilyToString(e->header.addressFamily);
|
||||
case ColumnType::Protocol: return StringHelper::IpProtocolToString(e->header.ipProtocol);
|
||||
case ColumnType::ScopeId: return (flags & FWPM_NET_EVENT_FLAG_SCOPE_ID_SET) ? std::to_wstring(e->header.scopeId).c_str() : L"";
|
||||
case ColumnType::LocalPort: return (flags & FWPM_NET_EVENT_FLAG_LOCAL_PORT_SET) ? std::to_wstring(e->header.localPort).c_str() : L"";
|
||||
case ColumnType::RemotePort: return (flags & FWPM_NET_EVENT_FLAG_REMOTE_PORT_SET) ? std::to_wstring(e->header.remotePort).c_str() : L"";
|
||||
case ColumnType::LocalAddress:
|
||||
if (e->header.ipVersion == FWP_IP_VERSION_NONE || (flags & FWPM_NET_EVENT_FLAG_LOCAL_ADDR_SET) == 0)
|
||||
return L"";
|
||||
return e->header.ipVersion == FWP_IP_VERSION_V4
|
||||
? StringHelper::FormatIpv4Address(e->header.localAddrV4)
|
||||
: StringHelper::FormatIpv6Address(e->header.localAddrV6.byteArray16);
|
||||
|
||||
case ColumnType::RemoteAddress:
|
||||
if (e->header.ipVersion == FWP_IP_VERSION_NONE || (flags & FWPM_NET_EVENT_FLAG_REMOTE_ADDR_SET) == 0)
|
||||
return L"";
|
||||
return e->header.ipVersion == FWP_IP_VERSION_V4
|
||||
? StringHelper::FormatIpv4Address(e->header.remoteAddrV4)
|
||||
: StringHelper::FormatIpv6Address(e->header.remoteAddrV6.byteArray16);
|
||||
|
||||
case ColumnType::UserId: return (flags & FWPM_NET_EVENT_FLAG_USER_ID_SET) ? StringHelper::FormatSID(e->header.userId) : CString(L"");
|
||||
case ColumnType::PackageId: return (flags & FWPM_NET_EVENT_FLAG_PACKAGE_ID_SET) ? StringHelper::FormatSID(e->header.packageSid) : CString(L"");
|
||||
case ColumnType::AppId:
|
||||
return (e->header.flags & FWPM_NET_EVENT_FLAG_APP_ID_SET) ?
|
||||
StringHelper::FormatBinary(e->header.appId.data, min(16, e->header.appId.size)) : CString(L"");
|
||||
}
|
||||
return CString();
|
||||
}
|
||||
|
||||
void CNetEventsView::DoSort(SortInfo const* si) {
|
||||
}
|
||||
|
||||
int CNetEventsView::GetRowImage(HWND, int row, int col) const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CNetEventsView::UpdateUI() {
|
||||
}
|
||||
|
||||
LRESULT CNetEventsView::OnCreate(UINT, WPARAM, LPARAM, BOOL&) {
|
||||
m_hWndClient = m_List.Create(m_hWnd, rcDefault, nullptr,
|
||||
WS_CHILD | WS_VISIBLE | LVS_OWNERDATA | LVS_REPORT);
|
||||
m_List.SetExtendedListViewStyle(LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_HEADERDRAGDROP);
|
||||
CImageList images;
|
||||
images.Create(16, 16, ILC_COLOR32 | ILC_MASK, 1, 1);
|
||||
images.AddIcon(AtlLoadIconImage(IDI_EVENT, 0, 16, 16));
|
||||
m_List.SetImageList(images, LVSIL_SMALL);
|
||||
|
||||
auto cm = GetColumnManager(m_List);
|
||||
cm->AddColumn(L"Type", 0, 150, ColumnType::Type);
|
||||
cm->AddColumn(L"Time", 0, 130, ColumnType::Time);
|
||||
cm->AddColumn(L"Protocol", 0, 90, ColumnType::Protocol);
|
||||
cm->AddColumn(L"Address Family", 0, 70, ColumnType::AddressFamily);
|
||||
cm->AddColumn(L"Local Address", LVCFMT_RIGHT, 170, ColumnType::LocalAddress);
|
||||
cm->AddColumn(L"Local Port", LVCFMT_RIGHT, 80, ColumnType::LocalPort);
|
||||
cm->AddColumn(L"Remote Address", LVCFMT_RIGHT, 170, ColumnType::RemoteAddress);
|
||||
cm->AddColumn(L"Remote Port", LVCFMT_RIGHT, 80, ColumnType::RemotePort);
|
||||
cm->AddColumn(L"Scope ID", LVCFMT_RIGHT, 80, ColumnType::ScopeId);
|
||||
cm->AddColumn(L"User ID", 0, 180, ColumnType::UserId);
|
||||
cm->AddColumn(L"App ID", 0, 180, ColumnType::AppId);
|
||||
cm->AddColumn(L"Package ID", 0, 180, ColumnType::PackageId);
|
||||
|
||||
Refresh();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CNetEventsView::OnRefresh(WORD, WORD, HWND, BOOL&) {
|
||||
Refresh();
|
||||
return 0;
|
||||
}
|
||||
|
||||
LRESULT CNetEventsView::OnActivate(UINT, WPARAM, LPARAM, BOOL&) {
|
||||
UpdateUI();
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
#pragma once
|
||||
|
||||
#include <FrameView.h>
|
||||
#include <VirtualListView.h>
|
||||
#include "Interfaces.h"
|
||||
#include <WFPEngine.h>
|
||||
#include "resource.h"
|
||||
#include <WFPEnumerator.h>
|
||||
|
||||
class WFPEngine;
|
||||
|
||||
class CNetEventsView :
|
||||
public CFrameView<CNetEventsView, IMainFrame>,
|
||||
public CVirtualListView<CNetEventsView> {
|
||||
public:
|
||||
CNetEventsView(IMainFrame* frame, WFPEngine& engine);
|
||||
|
||||
void Refresh();
|
||||
|
||||
CString GetColumnText(HWND, int row, int col);
|
||||
void DoSort(SortInfo const* si);
|
||||
//int GetSaveColumnRange(HWND, int&) const;
|
||||
int GetRowImage(HWND, int row, int col) const;
|
||||
//void OnStateChanged(HWND, int from, int to, UINT oldState, UINT newState);
|
||||
//bool OnDoubleClickList(HWND, int row, int col, POINT const& pt);
|
||||
|
||||
BEGIN_MSG_MAP(CNetEventsView)
|
||||
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
|
||||
MESSAGE_HANDLER(WM_CREATE, OnCreate)
|
||||
CHAIN_MSG_MAP(CVirtualListView<CNetEventsView>)
|
||||
CHAIN_MSG_MAP(BaseFrame)
|
||||
ALT_MSG_MAP(1)
|
||||
//COMMAND_ID_HANDLER(ID_EDIT_PROPERTIES, OnProperties)
|
||||
COMMAND_ID_HANDLER(ID_VIEW_REFRESH, OnRefresh)
|
||||
END_MSG_MAP()
|
||||
|
||||
// Handler prototypes (uncomment arguments if needed):
|
||||
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
|
||||
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||||
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
|
||||
|
||||
private:
|
||||
void UpdateUI();
|
||||
|
||||
enum class ColumnType {
|
||||
Time, Type, LocalPort, RemotePort, LocalAddress, RemoteAddress, Flags, EnterpriseId,
|
||||
IPVersion, Protocol, ScopeId, AppId, UserId, PackageId, PolicyFlags, EffectiveName,
|
||||
AddressFamily
|
||||
|
||||
};
|
||||
|
||||
struct NetEventInfo {
|
||||
FWPM_NET_EVENT* Data;
|
||||
};
|
||||
|
||||
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnRefresh(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnProperties(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
|
||||
LRESULT OnActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
|
||||
|
||||
WFPEngine& m_Engine;
|
||||
|
||||
CListViewCtrl m_List;
|
||||
WFPObjectVector<FWPM_NET_EVENT, NetEventInfo> m_Events;
|
||||
};
|
||||
@@ -11,8 +11,7 @@ CProviderContextView::CProviderContextView(IMainFrame* frame, WFPEngine& engine)
|
||||
CString CProviderContextView::GetProviderName(GUID const* key) const {
|
||||
CString name;
|
||||
if (key) {
|
||||
auto provider = m_Engine.GetProviderByKey(*key);
|
||||
if (provider)
|
||||
if (auto provider = m_Engine.GetProviderByKey(*key); provider)
|
||||
name = StringHelper::ParseMUIString(provider->displayData.name);
|
||||
if(name.IsEmpty() || name[0] == L'@')
|
||||
name =StringHelper::GuidToString(*key);
|
||||
@@ -28,11 +27,11 @@ LRESULT CProviderContextView::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM
|
||||
auto cm = GetColumnManager(m_List);
|
||||
cm->AddColumn(L"Context Key", 0, 260, ColumnType::Key);
|
||||
cm->AddColumn(L"Type", 0, 150, ColumnType::Type);
|
||||
cm->AddColumn(L"Name", 0, 220, ColumnType::Name);
|
||||
cm->AddColumn(L"Flags", 0, 100, ColumnType::Flags);
|
||||
cm->AddColumn(L"Data Size", LVCFMT_RIGHT, 90, ColumnType::DataSize);
|
||||
cm->AddColumn(L"Context ID", 0, 120, ColumnType::Id);
|
||||
cm->AddColumn(L"Provider", 0, 240, ColumnType::Provider);
|
||||
cm->AddColumn(L"Name", 0, 220, ColumnType::Name);
|
||||
cm->AddColumn(L"Description", 0, 300, ColumnType::Desc);
|
||||
|
||||
CImageList images;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <ip2string.h>
|
||||
|
||||
#pragma comment(lib, "ntdll")
|
||||
#pragma comment(lib, "ws2_32")
|
||||
|
||||
CString StringHelper::ParseMUIString(PCWSTR input) {
|
||||
if (input == nullptr)
|
||||
@@ -182,6 +183,24 @@ CString StringHelper::WFPProviderContextFlagsToString(UINT32 flags) {
|
||||
return FlagsToString(flags, data);
|
||||
}
|
||||
|
||||
PCWSTR StringHelper::NetEventTypeToString(FWPM_NET_EVENT_TYPE type) {
|
||||
static PCWSTR types[] = {
|
||||
L"IKExt Main Mode Failure",
|
||||
L"IKExt Quick Mode Failure",
|
||||
L"IKExt Extended Mode Failure",
|
||||
L"Classify Drop",
|
||||
L"IPSec Kernel Drop",
|
||||
L"IPSec DoS Protection Drop",
|
||||
L"Classify Allow",
|
||||
L"Capability Drop",
|
||||
L"Capability Allow",
|
||||
L"Classify Drop MAC",
|
||||
L"LPM Packet Arrival",
|
||||
};
|
||||
ATLASSERT(type < _countof(types));
|
||||
return types[type];
|
||||
}
|
||||
|
||||
PCWSTR StringHelper::WFPProviderContextTypeToString(FWPM_PROVIDER_CONTEXT_TYPE type) {
|
||||
static PCWSTR types[] = {
|
||||
L"IPSec Keying",
|
||||
@@ -422,6 +441,63 @@ PCWSTR StringHelper::WFPFieldTypeToString(FWPM_FIELD_TYPE type) {
|
||||
return L"";
|
||||
}
|
||||
|
||||
CString StringHelper::FormatIpv4Address(UINT32 address) {
|
||||
WCHAR buf[32];
|
||||
auto haddr = ntohl(address);
|
||||
::RtlIpv4AddressToString((in_addr const*)&haddr, buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
CString StringHelper::FormatIpv6Address(BYTE const* address) {
|
||||
WCHAR buf[64];
|
||||
::RtlIpv6AddressToString((in6_addr const*)address, buf);
|
||||
return buf;
|
||||
}
|
||||
|
||||
PCWSTR StringHelper::IpProtocolToString(UINT8 protocol) {
|
||||
switch (protocol) {
|
||||
case IPPROTO_HOPOPTS: return L"IPv6 HopxHop Opts";
|
||||
case IPPROTO_ICMP: return L"ICMP";
|
||||
case IPPROTO_IGMP: return L"IGMP";
|
||||
case IPPROTO_GGP: return L"GGP";
|
||||
case IPPROTO_IPV4: return L"IPv4";
|
||||
case IPPROTO_ST: return L"ST";
|
||||
case IPPROTO_TCP: return L"TCP";
|
||||
case IPPROTO_CBT: return L"CBT";
|
||||
case IPPROTO_EGP: return L"EGP";
|
||||
case IPPROTO_IGP: return L"IGP";
|
||||
case IPPROTO_PUP: return L"PUP";
|
||||
case IPPROTO_UDP: return L"UDP";
|
||||
case IPPROTO_IDP: return L"IDP";
|
||||
case IPPROTO_RDP: return L"RDP";
|
||||
case IPPROTO_IPV6: return L"IPv6";
|
||||
case IPPROTO_ROUTING: return L"Routing";
|
||||
case IPPROTO_FRAGMENT: return L"Fragment";
|
||||
case IPPROTO_ESP: return L"ESP";
|
||||
case IPPROTO_AH: return L"AH";
|
||||
case IPPROTO_ICMPV6: L"ICMPv6";
|
||||
case IPPROTO_NONE: return L"IPv6 NNH";
|
||||
case IPPROTO_DSTOPTS: return L"IPv6 Dst Opts";
|
||||
case IPPROTO_ND: return L"ND";
|
||||
case IPPROTO_ICLFXBM: return L"ICLFXBM";
|
||||
case IPPROTO_PIM: return L"PIM";
|
||||
case IPPROTO_PGM: return L"PGM";
|
||||
case IPPROTO_L2TP: return L"L2TP";
|
||||
case IPPROTO_SCTP: return L"SCTP";
|
||||
case IPPROTO_RAW: return L"RAW";
|
||||
};
|
||||
return L"(Unknown)";
|
||||
}
|
||||
|
||||
PCWSTR StringHelper::AddressFamilyToString(FWP_AF af) {
|
||||
switch (af) {
|
||||
case FWP_AF_INET: return L"INET";
|
||||
case FWP_AF_INET6: return L"INET6";
|
||||
case FWP_AF_ETHER: return L"ETHER";
|
||||
}
|
||||
return L"(Unknown)";
|
||||
}
|
||||
|
||||
PCWSTR StringHelper::WFPFilterActionTypeToString(FWP_ACTION_TYPE type) {
|
||||
switch (type) {
|
||||
case FWP_ACTION_BLOCK: return L"Block";
|
||||
|
||||
@@ -12,6 +12,7 @@ struct StringHelper abstract final {
|
||||
static CString WFPSubLayerFlagsToString(UINT32 flags);
|
||||
static CString WFPCalloutFlagsToString(DWORD flags);
|
||||
static CString WFPProviderContextFlagsToString(UINT32 flags);
|
||||
static PCWSTR NetEventTypeToString(FWPM_NET_EVENT_TYPE type);
|
||||
static PCWSTR WFPProviderContextTypeToString(FWPM_PROVIDER_CONTEXT_TYPE type);
|
||||
static PCWSTR WFPFilterActionTypeToString(FWP_ACTION_TYPE type);
|
||||
static PCWSTR WFPConditionMatchToString(FWP_MATCH_TYPE type);
|
||||
@@ -20,6 +21,10 @@ struct StringHelper abstract final {
|
||||
static CString FormatBinary(BYTE const* buffer, ULONG size, int lineSize = 16);
|
||||
static CString FormatSID(PSID const sid);
|
||||
static PCWSTR WFPFieldTypeToString(FWPM_FIELD_TYPE type);
|
||||
static CString FormatIpv4Address(UINT32 address);
|
||||
static CString FormatIpv6Address(BYTE const* address);
|
||||
static PCWSTR IpProtocolToString(UINT8 protocol);
|
||||
static PCWSTR AddressFamilyToString(FWP_AF af);
|
||||
|
||||
template<typename TFlags, typename TValue>
|
||||
static CString FlagsToString(TValue value, TFlags const& data) {
|
||||
|
||||
@@ -78,6 +78,7 @@ BEGIN
|
||||
MENUITEM "Subla&yers", ID_VIEW_SUBLAYERS
|
||||
MENUITEM "&Callouts", ID_VIEW_CALLOUTS
|
||||
MENUITEM "Provider Conte&xts", ID_VIEW_PROVIDERCONTEXTS
|
||||
MENUITEM "&Network Events", ID_VIEW_NETWORKEVENTS
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Refresh", ID_VIEW_REFRESH
|
||||
MENUITEM SEPARATOR
|
||||
@@ -85,6 +86,9 @@ BEGIN
|
||||
END
|
||||
POPUP "&Options"
|
||||
BEGIN
|
||||
MENUITEM "&Append Network Events", ID_OPTIONS_APPENDNETWORKEVENTS
|
||||
MENUITEM "&Resolve Network Addresses", ID_OPTIONS_RESOLVENETWORKADDRESSES
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Always On Top", ID_OPTIONS_ALWAYSONTOP
|
||||
MENUITEM "&Dark Mode", ID_OPTIONS_DARKMODE
|
||||
MENUITEM "&Font...", ID_OPTIONS_FONT
|
||||
@@ -168,6 +172,8 @@ IDI_FIELD ICON "res\\field.ico"
|
||||
|
||||
IDI_TREE ICON "res\\tree.ico"
|
||||
|
||||
IDI_EVENT ICON "res\\event.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
||||
@@ -238,6 +238,7 @@
|
||||
<ClCompile Include="LayerGeneralPage.cpp" />
|
||||
<ClCompile Include="LayersView.cpp" />
|
||||
<ClCompile Include="MainFrm.cpp" />
|
||||
<ClCompile Include="NetEventsView.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
@@ -266,6 +267,7 @@
|
||||
<ClInclude Include="LayerGeneralPage.h" />
|
||||
<ClInclude Include="LayersView.h" />
|
||||
<ClInclude Include="MainFrm.h" />
|
||||
<ClInclude Include="NetEventsView.h" />
|
||||
<ClInclude Include="ProcessHelper.h" />
|
||||
<ClInclude Include="ProviderContextView.h" />
|
||||
<ClInclude Include="ProvidersView.h" />
|
||||
@@ -287,6 +289,7 @@
|
||||
<Image Include="res\Cut.ico" />
|
||||
<Image Include="res\Delete.ico" />
|
||||
<Image Include="res\engine.ico" />
|
||||
<Image Include="res\event.ico" />
|
||||
<Image Include="res\field.ico" />
|
||||
<Image Include="res\filter-disabled.ico" />
|
||||
<Image Include="res\Filter.ico" />
|
||||
|
||||
@@ -90,6 +90,9 @@
|
||||
<ClCompile Include="HierarchyView.cpp">
|
||||
<Filter>Views</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="NetEventsView.cpp">
|
||||
<Filter>Views</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="pch.h">
|
||||
@@ -155,6 +158,9 @@
|
||||
<ClInclude Include="HierarchyView.h">
|
||||
<Filter>Views</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="NetEventsView.h">
|
||||
<Filter>Views</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="WFPExplorer.rc">
|
||||
@@ -240,6 +246,9 @@
|
||||
<Image Include="res\tree.ico">
|
||||
<Filter>Resource Files\Icons</Filter>
|
||||
</Image>
|
||||
<Image Include="res\event.ico">
|
||||
<Filter>Resource Files\Icons</Filter>
|
||||
</Image>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
||||
@@ -85,7 +85,7 @@ int WFPHelper::ShowFilterProperties(WFPEngine& engine, FWPM_FILTER* filter) {
|
||||
return (int)sheet.DoModal();
|
||||
}
|
||||
|
||||
int WFPHelper::ShowSublayerProperties(WFPEngine& engine, WFPSubLayerInfo& layer) {
|
||||
int WFPHelper::ShowSublayerProperties(WFPEngine& engine, FWPM_SUBLAYER* sublayer) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@
|
||||
|
||||
class WFPEngine;
|
||||
|
||||
struct WFPSubLayerInfo;
|
||||
|
||||
struct WFPHelper abstract final {
|
||||
static CString GetProviderName(WFPEngine const& engine, GUID const& key);
|
||||
static CString GetFilterName(WFPEngine const& engine, GUID const& key);
|
||||
@@ -11,7 +9,7 @@ struct WFPHelper abstract final {
|
||||
static CString GetSublayerName(WFPEngine const& engine, GUID const& key);
|
||||
static int ShowLayerProperties(WFPEngine& engine, FWPM_LAYER* layer);
|
||||
static int ShowFilterProperties(WFPEngine& engine, FWPM_FILTER* filter);
|
||||
static int ShowSublayerProperties(WFPEngine& engine, WFPSubLayerInfo& sublayer);
|
||||
static int ShowSublayerProperties(WFPEngine& engine, FWPM_SUBLAYER* sublayer);
|
||||
static int ShowProviderProperties(WFPEngine& engine, FWPM_PROVIDER* provider);
|
||||
};
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -37,6 +37,7 @@
|
||||
#define IDI_TREE 233
|
||||
#define IDR_MENU1 234
|
||||
#define IDR_CONTEXT 234
|
||||
#define IDI_EVENT 235
|
||||
#define IDC_VERSION 1000
|
||||
#define IDC_COPYRIGHT 1001
|
||||
#define IDC_KEY 1001
|
||||
@@ -74,13 +75,16 @@
|
||||
#define ID_VIEW_PROVIDERS 32784
|
||||
#define ID_VIEW_PROVIDERCONTEXTS 32785
|
||||
#define ID_EDIT_PROPERTIES 32786
|
||||
#define ID_VIEW_NETWORKEVENTS 32787
|
||||
#define ID_OPTIONS_APPENDNETWORKEVENTS 32788
|
||||
#define ID_OPTIONS_RESOLVENETWORKADDRESSES 32789
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 235
|
||||
#define _APS_NEXT_COMMAND_VALUE 32787
|
||||
#define _APS_NEXT_RESOURCE_VALUE 236
|
||||
#define _APS_NEXT_COMMAND_VALUE 32790
|
||||
#define _APS_NEXT_CONTROL_VALUE 1019
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 203 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 255 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 222 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 217 KiB |
Reference in New Issue
Block a user