provider button working in sublayer properties

add new sublayer
delete sublayer
This commit is contained in:
Pavel Yosifovich
2024-09-30 21:23:10 -04:00
parent 1f9eec13fd
commit 1ef1aee120
15 changed files with 347 additions and 6 deletions
+10
View File
@@ -111,6 +111,16 @@ WFPObject<FWPM_CALLOUT> WFPEngine::GetCalloutById(UINT32 id) const {
return WFPObject(co);
}
bool WFPEngine::AddSubLayer(FWPM_SUBLAYER const* sl, PSECURITY_DESCRIPTOR sd) {
m_LastError = FwpmSubLayerAdd(m_hEngine, sl, sd);
return m_LastError == ERROR_SUCCESS;
}
bool WFPEngine::DeleteSubLayer(GUID const& key) {
m_LastError = FwpmSubLayerDeleteByKey(m_hEngine, &key);
return m_LastError == ERROR_SUCCESS;
}
uint32_t WFPEngine::GetFilterCount(GUID const& layer) const {
HANDLE hEnum;
m_LastError = FwpmFilterCreateEnumHandle(m_hEngine, nullptr, &hEnum);
+2
View File
@@ -69,6 +69,8 @@ public:
WFPObject<FWPM_SUBLAYER> GetSublayerByKey(GUID const& key) const;
WFPObject<FWPM_CALLOUT> GetCalloutByKey(GUID const& key) const;
WFPObject<FWPM_CALLOUT> GetCalloutById(UINT32 id) const;
bool AddSubLayer(FWPM_SUBLAYER const* sl, PSECURITY_DESCRIPTOR sd = nullptr);
bool DeleteSubLayer(GUID const& key);
private:
HANDLE m_hEngine{ nullptr };
+1 -1
View File
@@ -187,7 +187,7 @@ LRESULT CFiltersView::OnDeleteFilter(WORD, WORD, HWND, BOOL&) {
Refresh();
}
if (deleted < selected)
AtlMessageBox(m_hWnd, std::format(L"Deleted {}/{} filters", deleted, selected).c_str(), IDS_TITLE, MB_ICONINFORMATION);
AtlMessageBox(m_hWnd, std::format(L"Deleted {}/{} filters.", deleted, selected).c_str(), IDS_TITLE, MB_ICONWARNING);
return 0;
}
+16
View File
@@ -19,6 +19,7 @@
#include "NetEventsView.h"
#include "ProviderDlg.h"
#include "NewFilterDlg.h"
#include "NewSubLayerDlg.h"
const int WINDOW_MENU_POSITION = 4;
@@ -446,6 +447,21 @@ LRESULT CMainFrame::OnNewFilter(WORD, WORD, HWND, BOOL&) {
return 0;
}
LRESULT CMainFrame::OnNewSubLayer(WORD, WORD, HWND, BOOL&) {
FWPM_SUBLAYER sl{};
CNewSubLayerDlg dlg(&sl);
if (IDOK == dlg.DoModal()) {
WFPEngine engine;
auto ok = engine.Open();
if (ok) {
ok = engine.AddSubLayer(&sl);
}
AtlMessageBox(m_hWnd, ok ? L"Sublayer added successfully." : L"Failed to add sublayer.",
IDS_TITLE, ok ? MB_ICONINFORMATION : MB_ICONERROR);
}
return 0;
}
void CMainFrame::InitDarkTheme() const {
s_DarkTheme.BackColor = s_DarkTheme.SysColors[COLOR_WINDOW] = RGB(32, 32, 32);
s_DarkTheme.TextColor = s_DarkTheme.SysColors[COLOR_WINDOWTEXT] = RGB(248, 248, 248);
+2
View File
@@ -49,6 +49,7 @@ public:
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_NEW_FILTER, OnNewFilter)
COMMAND_ID_HANDLER(ID_NEW_PROVIDER, OnNewProvider)
COMMAND_ID_HANDLER(ID_NEW_SUBLAYER, OnNewSubLayer)
CHAIN_MSG_MAP(CAutoUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(COwnerDrawnMenu<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
@@ -98,6 +99,7 @@ private:
LRESULT OnToggleDarkMode(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnNewProvider(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnNewFilter(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnNewSubLayer(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
WFPEngine m_Engine;
CFont m_MonoFont;
+126
View File
@@ -0,0 +1,126 @@
#include "pch.h"
#include "resource.h"
#include "NewSubLayerDlg.h"
#include "WFPHelper.h"
#include "StringHelper.h"
#include <WFPEngine.h>
#include <WFPEnumerators.h>
CNewSubLayerDlg::CNewSubLayerDlg(FWPM_SUBLAYER* sublayer) : m_SubLayer(sublayer) {
}
bool CNewSubLayerDlg::IsNewSubLayer() const {
return m_SubLayer->subLayerKey == GUID_NULL;
}
bool CNewSubLayerDlg::UpdateSubLayer() {
GetDlgItemText(IDC_NAME, m_Name);
if (m_Name.IsEmpty()) {
AtlMessageBox(m_hWnd, L"Sublayer name cannot be empty.", L"New Sublayer", MB_ICONWARNING);
return false;
}
CString key;
GetDlgItemText(IDC_KEY, key);
GetDlgItemText(IDC_DESC, m_Desc);
m_SubLayer->displayData.name = m_Name.GetBuffer();
m_SubLayer->displayData.description = m_Desc.GetBuffer();
::CLSIDFromString(key, &m_SubLayer->subLayerKey);
GetDlgItemText(IDC_WEIGHT, key);
m_SubLayer->weight = (UINT16)wcstol(key, nullptr, 0);
//
// get provider
//
auto cb = (CComboBox)GetDlgItem(IDC_PROVIDER);
if (cb.GetCurSel()) {
CString text;
cb.GetLBText(cb.GetCurSel(), text);
m_ProviderKey = StringHelper::ExtractGuid(text);
ATLASSERT(m_ProviderKey != GUID_NULL);
m_SubLayer->providerKey = &m_ProviderKey;
}
return true;
}
LRESULT CNewSubLayerDlg::OnInitDialog(UINT, WPARAM, LPARAM, BOOL&) {
using namespace std;
using namespace std::views;
using namespace std::ranges;
SetDialogIcon(IDI_SUBLAYER);
WFPEngine engine;
if (engine.Open()) {
//
// add providers to combo
//
WFPProviderEnumerator en(engine.Handle());
auto providers = en.Next(256);
struct Data {
CString text;
int type;
};
int selected = -1, i = 0;
auto data = providers | std::views::transform([&](auto& p) {
if (selected < 0 && m_SubLayer->providerKey && IsNewSubLayer() && p->providerKey == *m_SubLayer->providerKey)
selected = i;
i++;
return Data{ p->displayData.name + CString(" (") + StringHelper::GuidToString(p->providerKey) + L")", i - 1 };
}) | to<vector>();
data.insert(data.begin(), { L"(None)", -1 });
InitCombo(IDC_PROVIDER, data.data(), (int)data.size(), selected);
}
if (IsNewSubLayer()) {
SetDlgItemInt(IDC_WEIGHT, 0);
}
else {
SetDlgItemText(IDC_NAME, m_SubLayer->displayData.name);
SetDlgItemText(IDC_DESC, m_SubLayer->displayData.description);
SetDlgItemText(IDC_KEY, StringHelper::GuidToString(m_SubLayer->subLayerKey));
if (m_SubLayer->flags & FWPM_SUBLAYER_FLAG_PERSISTENT)
CheckDlgButton(IDC_PERSISTENT, BST_CHECKED);
}
return 0;
}
LRESULT CNewSubLayerDlg::OnCloseCmd(WORD, WORD wID, HWND, BOOL&) {
if (wID == IDOK) {
if (!UpdateSubLayer())
return 0;
}
EndDialog(wID);
return 0;
}
LRESULT CNewSubLayerDlg::OnGenerateKey(WORD, WORD wID, HWND, BOOL&) {
GUID guid;
::CoCreateGuid(&guid);
WCHAR sguid[64];
::StringFromGUID2(guid, sguid, _countof(sguid));
SetDlgItemText(IDC_KEY, sguid);
return 0;
}
LRESULT CNewSubLayerDlg::OnProviderProperties(WORD, WORD wID, HWND, BOOL&) {
auto cb = (CComboBox)GetDlgItem(IDC_PROVIDER);
auto selected = cb.GetCurSel();
if (selected == 0)
return 0;
CString text;
cb.GetLBText(selected, text);
auto guid = StringHelper::ExtractGuid(text);
WFPEngine engine;
engine.Open();
WFPHelper::ShowProviderProperties(engine, *engine.GetProviderByKey(guid));
return 0;
}
+40
View File
@@ -0,0 +1,40 @@
#pragma once
#include <DialogHelper.h>
class CNewSubLayerDlg :
public CDialogImpl<CNewSubLayerDlg>,
public CDialogHelper<CNewSubLayerDlg> {
public:
enum { IDD = IDD_NEWSUBLAYER };
explicit CNewSubLayerDlg(FWPM_SUBLAYER* sublayer);
bool IsNewSubLayer() const;
BEGIN_MSG_MAP(CNewSubLayerDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
COMMAND_ID_HANDLER(IDC_GENERATE, OnGenerateKey)
COMMAND_ID_HANDLER(IDC_PROVIDER_PROP, OnProviderProperties)
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:
bool UpdateSubLayer();
LRESULT ReportOpenEngineFailure(PCWSTR errorText = nullptr) const;
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnGenerateKey(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnProviderProperties(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
FWPM_SUBLAYER* m_SubLayer;
CString m_Name, m_Desc;
GUID m_ProviderKey;
};
+9
View File
@@ -9,6 +9,8 @@ CSubLayerDlg::CSubLayerDlg(WFPEngine& engine, FWPM_SUBLAYER* sublayer) : m_Engin
}
LRESULT CSubLayerDlg::OnInitDialog(UINT, WPARAM, LPARAM, BOOL&) {
SetDialogIcon(IDI_SUBLAYER);
SetWindowText(std::format(L"Sublayer ({})", m_Sublayer->displayData.name).c_str());
SetDlgItemText(IDC_KEY, StringHelper::GuidToString(m_Sublayer->subLayerKey));
SetDlgItemText(IDC_NAME, StringHelper::ParseMUIString(m_Sublayer->displayData.name));
SetDlgItemText(IDC_DESC, m_Sublayer->displayData.description);
@@ -30,3 +32,10 @@ LRESULT CSubLayerDlg::OnCloseCmd(WORD, WORD wID, HWND, BOOL&) {
EndDialog(wID);
return 0;
}
LRESULT CSubLayerDlg::OnProviderProperties(WORD, WORD wID, HWND, BOOL&) {
ATLASSERT(m_Sublayer->providerKey);
WFPHelper::ShowProviderProperties(m_Engine, *m_Engine.GetProviderByKey(*m_Sublayer->providerKey));
return 0;
}
+2
View File
@@ -14,6 +14,7 @@ public:
BEGIN_MSG_MAP(CSubLayerDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_ID_HANDLER(IDC_PROVIDER_PROP, OnProviderProperties)
COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
END_MSG_MAP()
@@ -26,6 +27,7 @@ public:
private:
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnCloseCmd(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnProviderProperties(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
WFPEngine& m_Engine;
FWPM_SUBLAYER* m_Sublayer;
+71
View File
@@ -4,6 +4,7 @@
#include <SortHelper.h>
#include "resource.h"
#include <WFPEnumerators.h>
#include "WFPHelper.h"
CSublayersView::CSublayersView(IMainFrame* frame, WFPEngine& engine) : CGenericListViewBase(frame), m_Engine(engine) {
}
@@ -37,12 +38,52 @@ LRESULT CSublayersView::OnRefresh(WORD, WORD, HWND, BOOL&) {
return 0;
}
LRESULT CSublayersView::OnDeleteSubLayer(WORD, WORD, HWND, BOOL&) {
int selected = m_List.GetSelectedCount();
ATLASSERT(selected > 0);
if (AtlMessageBox(m_hWnd, L"Delete selected sublayer(s)?", IDS_TITLE, MB_ICONWARNING | MB_YESNO | MB_DEFBUTTON2) == IDNO)
return 0;
int deleted = 0;
for (auto index : SelectedItemsView(m_List)) {
auto const& sl = m_Layers[index];
if (m_Engine.DeleteSubLayer(sl.Data->subLayerKey))
deleted++;
}
if (deleted > 0) {
m_List.SelectAllItems(false);
Refresh();
}
if (deleted < selected)
AtlMessageBox(m_hWnd, std::format(L"Deleted {}/{} sublayers.", deleted, selected).c_str(), IDS_TITLE, MB_ICONWARNING);
return 0;
}
LRESULT CSublayersView::OnProperties(WORD, WORD, HWND, BOOL&) {
auto row = m_List.GetNextItem(-1, LVNI_SELECTED);
if (row >= 0) {
auto& sl = m_Layers[row];
WFPHelper::ShowSublayerProperties(m_Engine, sl.Data);
}
return 0;
}
void CSublayersView::Refresh() {
m_Layers = WFPSubLayerEnumerator(m_Engine.Handle()).Next<SubLayerInfo>(512);
m_List.SetItemCountEx((int)m_Layers.size(), LVSICF_NOSCROLL);
Frame()->SetStatusText(6, std::format(L"{} Sublayers", m_Layers.size()).c_str());
}
void CSublayersView::UpdateUI() const {
auto& ui = Frame()->UI();
auto selected = m_List.GetSelectedCount();
ui.UIEnable(ID_EDIT_PROPERTIES, selected == 1);
ui.UIEnable(ID_EDIT_DELETE, selected > 0);
ui.UIEnable(ID_EDIT_COPY, selected > 0);
ui.UIEnable(ID_EDIT_FINDNEXT, Frame()->GetFindDialog() != nullptr);
}
CString CSublayersView::GetColumnText(HWND, int row, int col) {
auto& sl = m_Layers[row];
auto info = sl.Data;
@@ -106,6 +147,31 @@ CString CSublayersView::GetDefaultSaveFile() const {
return L"sublayers.csv";
}
bool CSublayersView::OnDoubleClickList(HWND, int row, int col, POINT const& pt) {
if (row >= 0) {
auto& sl = m_Layers[row];
WFPHelper::ShowSublayerProperties(m_Engine, sl.Data);
return true;
}
return false;
}
bool CSublayersView::OnRightClickList(HWND, int row, int col, POINT const& pt) const {
if (row < 0)
return false;
CMenu menu;
menu.LoadMenu(IDR_CONTEXT);
return Frame()->TrackPopupMenu(menu.GetSubMenu(2), 0, pt.x, pt.y);
}
LRESULT CSublayersView::OnActivate(UINT, WPARAM activate, LPARAM, BOOL&) {
if (activate)
UpdateUI();
return 0;
}
CString const& CSublayersView::SubLayerInfo::Name() const {
if (m_Name.IsEmpty())
m_Name = StringHelper::ParseMUIString(Data->displayData.name);
@@ -117,3 +183,8 @@ CString const& CSublayersView::SubLayerInfo::Desc() const {
m_Desc = StringHelper::ParseMUIString(Data->displayData.description);
return m_Desc;
}
void CSublayersView::OnStateChanged(HWND, int from, int to, UINT oldState, UINT newState) {
if ((newState & LVIS_SELECTED) || (oldState & LVIS_SELECTED))
UpdateUI();
}
+11
View File
@@ -18,12 +18,18 @@ public:
int GetSaveColumnRange(HWND, int&) const;
int GetRowImage(HWND, int row, int col) const;
CString GetDefaultSaveFile() const;
bool OnDoubleClickList(HWND, int row, int col, POINT const& pt);
bool OnRightClickList(HWND, int row, int col, POINT const& pt) const;
void OnStateChanged(HWND, int from, int to, UINT oldState, UINT newState);
BEGIN_MSG_MAP(CSublayersView)
MESSAGE_HANDLER(WM_ACTIVATE, OnActivate)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
CHAIN_MSG_MAP(CGenericListViewBase<CSublayersView>)
ALT_MSG_MAP(1)
COMMAND_ID_HANDLER(ID_VIEW_REFRESH, OnRefresh)
COMMAND_ID_HANDLER(ID_EDIT_PROPERTIES, OnProperties)
COMMAND_ID_HANDLER(ID_EDIT_DELETE, OnDeleteSubLayer)
CHAIN_MSG_MAP_ALT(CGenericListViewBase<CSublayersView>, 1)
END_MSG_MAP()
@@ -33,6 +39,8 @@ public:
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
private:
void UpdateUI() const;
enum class ColumnType {
Key, Name, Desc, Flags, Weight, Provider, ProviderData,
};
@@ -49,6 +57,9 @@ private:
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnRefresh(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnDeleteSubLayer(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnProperties(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnActivate(UINT, WPARAM activate, LPARAM, BOOL&);
WFPEngine& m_Engine;
+45 -2
View File
@@ -56,8 +56,8 @@ BEGIN
POPUP "&New"
BEGIN
MENUITEM "&Filter...", ID_NEW_FILTER
MENUITEM "&Simple Filter...", ID_NEW_SIMPLEFILTER
MENUITEM "&Provider...", ID_NEW_PROVIDER
MENUITEM "&Sublayer...", ID_NEW_SUBLAYER
END
MENUITEM SEPARATOR
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
@@ -130,6 +130,12 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Properties...\tAlt+Enter", ID_EDIT_PROPERTIES
END
POPUP "sublayer"
BEGIN
MENUITEM "&Delete\tDel", ID_EDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Properties...\tAlt+Enter", ID_EDIT_PROPERTIES
END
END
@@ -421,11 +427,35 @@ BEGIN
PUSHBUTTON "Provider...",IDC_PROVIDER_PROP,323,66,55,14
CHECKBOX "Persistent",IDC_PERSISTENT,50,88,48,10
LTEXT "Weight:",IDC_STATIC,113,89,26,8
EDITTEXT IDC_WEIGHT,148,87,40,14,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_WEIGHT,148,88,40,14,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
LTEXT "Provider Data:",IDC_DATASIZE,21,106,48,8
EDITTEXT IDC_PROVIDERDATA,17,118,347,30,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
END
IDD_NEWSUBLAYER DIALOGEX 0, 0, 385, 185
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "New Sublayer"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
PUSHBUTTON "Cancel",IDCANCEL,200,164,50,14
LTEXT "Key:",IDC_STATIC,31,8,16,8
EDITTEXT IDC_KEY,51,7,248,12,ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
LTEXT "Name:",IDC_STATIC,25,28,22,8
EDITTEXT IDC_NAME,51,27,327,12,ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
LTEXT "Description:",IDC_STATIC,8,49,39,8
EDITTEXT IDC_DESC,51,48,327,12,ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
LTEXT "Provider:",IDC_STATIC,16,68,30,8
PUSHBUTTON "Provider...",IDC_PROVIDER_PROP,323,66,55,14
CONTROL "Persistent",IDC_PERSISTENT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,51,88,48,10
LTEXT "Weight:",IDC_STATIC,113,89,26,8
EDITTEXT IDC_WEIGHT,148,88,44,14,ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
LTEXT "Provider Data:",IDC_DATASIZE,21,106,48,8
EDITTEXT IDC_PROVIDERDATA,17,118,347,30,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "&Generate",IDC_GENERATE,328,7,50,14
COMBOBOX IDC_PROVIDER,51,66,263,112,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "OK",IDOK,134,164,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
@@ -514,6 +544,14 @@ BEGIN
TOPMARGIN, 7
BOTTOMMARGIN, 178
END
IDD_NEWSUBLAYER, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 378
TOPMARGIN, 7
BOTTOMMARGIN, 178
END
END
#endif // APSTUDIO_INVOKED
@@ -644,6 +682,11 @@ BEGIN
0
END
IDD_NEWSUBLAYER AFX_DIALOG_LAYOUT
BEGIN
0
END
/////////////////////////////////////////////////////////////////////////////
//
+2
View File
@@ -372,6 +372,7 @@
<ClCompile Include="MainFrm.cpp" />
<ClCompile Include="NetEventsView.cpp" />
<ClCompile Include="NewFilterDlg.cpp" />
<ClCompile Include="NewSubLayerDlg.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
@@ -408,6 +409,7 @@
<ClInclude Include="MainFrm.h" />
<ClInclude Include="NetEventsView.h" />
<ClInclude Include="NewFilterDlg.h" />
<ClInclude Include="NewSubLayerDlg.h" />
<ClInclude Include="ProcessHelper.h" />
<ClInclude Include="ProviderContextView.h" />
<ClInclude Include="ProviderDlg.h" />
+6
View File
@@ -105,6 +105,9 @@
<ClCompile Include="SubLayerDlg.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
<ClCompile Include="NewSubLayerDlg.cpp">
<Filter>Dialogs</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h">
@@ -188,6 +191,9 @@
<ClInclude Include="SubLayerDlg.h">
<Filter>Dialogs</Filter>
</ClInclude>
<ClInclude Include="NewSubLayerDlg.h">
<Filter>Dialogs</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="WFPExplorer.rc">
+4 -3
View File
@@ -49,7 +49,7 @@
#define IDI_CHECK 247
#define IDI_RADIO 248
#define IDD_SUBLAYER 249
#define IDI_ICON1 251
#define IDD_NEWSUBLAYER 250
#define IDI_INFO 251
#define IDC_VERSION 1000
#define IDC_COPYRIGHT 1001
@@ -118,14 +118,15 @@
#define ID_NEW_PROVIDER 32796
#define ID_EDIT_FINDNEXT 32797
#define ID_VIEW_STATISTICS 32798
#define ID_NEW_SUBLAYER 32799
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 252
#define _APS_NEXT_COMMAND_VALUE 32799
#define _APS_NEXT_CONTROL_VALUE 1036
#define _APS_NEXT_COMMAND_VALUE 32800
#define _APS_NEXT_CONTROL_VALUE 1038
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif