FirewallMonitor: added menuitem 'View > Windows Firewall' , Implemented [MS-FASP]: Firewall and Advanced Security Protocol Specification

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@4993 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
dmex
2012-04-22 21:37:10 +00:00
parent 1cd8781f05
commit 3982beebf8
19 changed files with 4056 additions and 34 deletions
@@ -12,6 +12,335 @@
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_FW MENU
BEGIN
POPUP "Event"
BEGIN
MENUITEM "&Copy\aCtrl+C", ID_EVENT_COPY
END
END
IDR_FIREWALLMENU MENU
BEGIN
POPUP "Properties"
BEGIN
MENUITEM "Disable", ID_PROPERTIES_DISABLE, INACTIVE
MENUITEM SEPARATOR
MENUITEM "Cut", ID_PROPERTIES_CUT, INACTIVE
MENUITEM "Copy", ID_PROPERTIES_COPY, INACTIVE
MENUITEM "Delete", ID_PROPERTIES_DELETE, INACTIVE
MENUITEM SEPARATOR
MENUITEM "Properties", ID_PROPERTIES
END
END
IDR_MENUGENERAL MENU
BEGIN
POPUP "Options"
BEGIN
MENUITEM SEPARATOR
MENUITEM "Exit", ID_OPTIONS_EXIT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_FIREWALL DIALOGEX 0, 0, 519, 276
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Windows Firewall"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Close",ID_CLOSE,462,255,50,14
CONTROL "",IDC_FIREWALL_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,120,18,392,234
CONTROL "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_TRACKSELECT | TVS_FULLROWSELECT | WS_BORDER | WS_HSCROLL | WS_TABSTOP,7,18,108,234
END
IDD_RULEGENERAL DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "General",IDC_STATIC,6,6,276,110
EDITTEXT IDC_EDIT1,54,32,222,12,ES_AUTOHSCROLL
LTEXT "Name:",IDC_STATIC,54,20,22,8
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,18,36,30
EDITTEXT IDC_EDIT2,54,60,222,38,ES_AUTOHSCROLL
LTEXT "Description:",IDC_STATIC,54,48,39,8
CONTROL "Enabled",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,54,102,41,10
CONTROL "Allow the connection",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,26,128,82,10
CONTROL "Allow the connection if secure",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,26,141,111,10
CONTROL "Block the connection",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,26,154,81,10
END
IDD_RULEADVANCED DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Profiles",IDC_STATIC,6,6,276,66
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,18,36,30
LTEXT "Specify profiles to which this rule applies:",IDC_STATIC,54,18,138,8
CONTROL "Domain",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,30,108,10
CONTROL "Public",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,43,108,10
CONTROL "Private",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,56,108,10
GROUPBOX "Interfaces",IDC_STATIC,6,78,276,66
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,90,36,30
LTEXT "Specify interfaces to which this rule applies:",IDC_STATIC,54,90,144,8
GROUPBOX "Edge Traversal",IDC_STATIC,6,150,276,90
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,162,36,30
COMBOBOX IDC_COMBO1,66,174,192,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Specify interfaces to which this rule applies:",IDC_STATIC,54,162,144,8
COMBOBOX IDC_COMBO2,66,102,192,12,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
IDD_RULEUSERS DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Authorized Users",IDC_STATIC,6,6,276,109
GROUPBOX "Exceptions",IDC_STATIC,6,120,275,109
CONTROL "Only allow connections from these users:",IDC_CHECK1,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,147,10
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,12,30,210,78
PUSHBUTTON "Add",IDC_BUTTON1,228,30,50,14
PUSHBUTTON "Remove",IDC_BUTTON2,228,48,50,14
CONTROL "Skip this rule for connections from these users:",IDC_CHECK2,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,132,166,10
CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,12,144,210,81
PUSHBUTTON "Add",IDC_BUTTON3,228,144,50,14
PUSHBUTTON "Remove",IDC_BUTTON4,228,162,50,14
CONTROL "<a>Firewall Rule Properties Page: Users Tab</a>",IDC_SYSLINK1,
"SysLink",WS_TABSTOP,6,234,132,12
END
IDD_RULESCOPE DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Local IP Address",IDC_STATIC,6,6,276,109
GROUPBOX "Exceptions",IDC_STATIC,6,120,275,109
PUSHBUTTON "Add",IDC_BUTTON1,228,42,50,14
PUSHBUTTON "Remove",IDC_BUTTON2,228,77,50,14
PUSHBUTTON "Add",IDC_BUTTON3,228,156,50,14
PUSHBUTTON "Remove",IDC_BUTTON4,228,192,50,14
CONTROL "<a>Firewall Rule Properties Page: Scope Tab</a>",IDC_SYSLINK1,
"SysLink",WS_TABSTOP,6,234,132,12
CONTROL "Any IP Address",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,12,18,65,10
CONTROL "These IP Address",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,12,30,72,10
CONTROL "Any IP Address",IDC_RADIO4,"Button",BS_AUTORADIOBUTTON,12,132,65,10
CONTROL "These IP Address",IDC_RADIO5,"Button",BS_AUTORADIOBUTTON,12,145,72,10
PUSHBUTTON "Edit",IDC_BUTTON5,228,59,50,14
PUSHBUTTON "Edit",IDC_BUTTON6,228,174,50,14
LISTBOX IDC_LIST1,12,42,210,66,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_LIST2,12,156,210,66,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END
IDD_RULECOMPUTERS DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Authorized Computers",IDC_STATIC,6,6,276,109
GROUPBOX "Exceptions",IDC_STATIC,6,120,275,109
CONTROL "Only allow connections from these computers:",IDC_CHECK1,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,18,163,10
CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,12,30,210,78
PUSHBUTTON "Add",IDC_BUTTON1,228,30,50,14
PUSHBUTTON "Remove",IDC_BUTTON2,228,48,50,14
CONTROL "Skip this rule for connections from these computers:",IDC_CHECK2,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,132,182,10
CONTROL "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,12,144,210,81
PUSHBUTTON "Add",IDC_BUTTON3,228,144,50,14
PUSHBUTTON "Remove",IDC_BUTTON4,228,162,50,14
CONTROL "<a>Firewall Rule Properties Page: Computers Tab</a>",IDC_SYSLINK1,
"SysLink",WS_TABSTOP,6,234,149,12
END
IDD_RULEEXECUTABLE DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Programs",IDC_STATIC,6,6,276,54
GROUPBOX "Services",IDC_STATIC,6,66,276,48
CONTROL "All programs that meet the specified conditions",IDC_RADIO1,
"Button",BS_AUTORADIOBUTTON,54,18,165,10
CONTROL "This program:",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,54,30,60,10
EDITTEXT IDC_EDIT1,66,42,156,14,ES_AUTOHSCROLL
PUSHBUTTON "Browse",IDC_BUTTON1,228,42,50,14
LTEXT "Specify the services to which this rule applies.",IDC_STATIC,54,78,148,8
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,18,36,30
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,78,36,30
PUSHBUTTON "Customize",IDC_BUTTON2,54,90,50,14
CONTROL "<a>Firewall Rule Properties Page: Programs and Services Tab</a>",IDC_SYSLINK1,
"SysLink",WS_TABSTOP,6,234,186,12
END
IDD_RULEPORTS DIALOGEX 0, 0, 289, 249
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
GROUPBOX "Protocols and Ports",IDC_STATIC,6,6,276,150
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME,12,18,36,30
CONTROL "<a>Firewall Rule Properties Page: Protocols and Ports Tab</a>",IDC_SYSLINK1,
"SysLink",WS_TABSTOP,6,234,186,12
COMBOBOX IDC_COMBO1,114,18,156,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO2,114,54,156,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_COMBO3,114,108,156,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_EDIT1,114,72,156,14,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2,114,126,156,14,ES_AUTOHSCROLL
LTEXT "Protocol Type:",IDC_STATIC,54,19,48,8
LTEXT "Protocol Number:",IDC_STATIC,54,36,56,8
LTEXT "Local Port:",IDC_STATIC,54,54,35,8
LTEXT "Remote Port:",IDC_STATIC,54,108,44,8
LTEXT "Example: 80,443, 5000-5010",IDC_STATIC,114,90,96,8
LTEXT "Example: 80,443, 5000-5010",IDC_STATIC,114,144,96,8
GROUPBOX "ICMP",IDC_STATIC,6,162,276,48
LTEXT "Internet Control Message Protocol (ICMP) settings",IDC_STATIC,12,174,162,8
PUSHBUTTON "Customize",IDC_BUTTON2,12,186,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_FIREWALL, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 512
TOPMARGIN, 7
BOTTOMMARGIN, 269
END
IDD_RULEGENERAL, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULEADVANCED, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULEUSERS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULESCOPE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULECOMPUTERS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULEEXECUTABLE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
IDD_RULEPORTS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 282
TOPMARGIN, 7
BOTTOMMARGIN, 242
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info
//
IDD_RULEADVANCED DLGINIT
BEGIN
IDC_COMBO2, 0x403, 19, 0
0x6f4c, 0x6163, 0x206c, 0x7241, 0x6165, 0x4e20, 0x7465, 0x6f77, 0x6b72,
"\000"
IDC_COMBO2, 0x403, 14, 0
0x6552, 0x6f6d, 0x6574, 0x4120, 0x6363, 0x7365, 0x0073,
0
END
#endif // English resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_FIREWALLICON ICON "resources\\firewall.ico"
IDI_ICONHOME ICON "resources\\home.ico"
IDI_HOMEICON ICON "resources\\home2.ico"
IDI_ICONPUBLIC ICON "resources\\public.ico"
IDI_WFICON ICON "resources\\wfirewall.ico"
IDI_ICONWORK ICON "resources\\work.ico"
IDI_ICONINBOUND ICON "resources\\inbound.ico"
IDI_ICONMONITOR ICON "resources\\monitor.ico"
IDI_ICONOUTBOUND ICON "resources\\outbound.ico"
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// English (Australia) resources
@@ -83,20 +412,6 @@ BEGIN
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_FW MENU
BEGIN
POPUP "Event"
BEGIN
MENUITEM "&Copy\aCtrl+C", ID_EVENT_COPY
END
END
#endif // English (Australia) resources
/////////////////////////////////////////////////////////////////////////////
@@ -170,12 +170,23 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="fwdialog.c" />
<ClCompile Include="fwtab.c" />
<ClCompile Include="main.c" />
<ClCompile Include="monitor.c" />
<ClCompile Include="fw.c" />
</ItemGroup>
<ItemGroup>
<None Include="CHANGELOG.txt" />
<None Include="resources\firewall.ico" />
<None Include="resources\home.ico" />
<None Include="resources\home2.ico" />
<None Include="resources\inbound.ico" />
<None Include="resources\monitor.ico" />
<None Include="resources\outbound.ico" />
<None Include="resources\public.ico" />
<None Include="resources\wfirewall.ico" />
<None Include="resources\work.ico" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="FirewallMonitor.rc" />
@@ -184,6 +195,7 @@
<ClInclude Include="fwtabp.h" />
<ClInclude Include="fwmon.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="wf.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
@@ -13,6 +13,9 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
<Filter Include="Resource Files\icons">
<UniqueIdentifier>{479e3232-66c7-4bb6-9a23-68e80f37e9b4}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.c">
@@ -24,14 +27,42 @@
<ClCompile Include="monitor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="fwdialog.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="fw.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="CHANGELOG.txt" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="FirewallMonitor.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
<None Include="resources\firewall.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\home.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\home2.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\inbound.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\monitor.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\outbound.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\public.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\wfirewall.ico">
<Filter>Resource Files\icons</Filter>
</None>
<None Include="resources\work.ico">
<Filter>Resource Files\icons</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ClInclude Include="resource.h">
@@ -43,5 +74,13 @@
<ClInclude Include="fwtabp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="wf.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="FirewallMonitor.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>
+439
View File
@@ -0,0 +1,439 @@
#include "fwmon.h"
#include "wf.h"
static BOOLEAN IsFwApiInitialized = FALSE;
static BOOLEAN IsFwApiConnectivityLost = FALSE;
static HMODULE FwApiLibraryHandle = NULL;
static FW_POLICY_STORE_HANDLE PolicyStoreHandles[4];
#define MAIN_POLICY_STORE PolicyStoreHandles[0]
#define GPRSOP_POLICY_STORE PolicyStoreHandles[1]
#define DYNAMIC_POLICY_STORE PolicyStoreHandles[2]
#define DEFAULT_POLICY_STORE PolicyStoreHandles[3]
static POLICYSTORE pcProfiles[] =
{
{ FW_STORE_TYPE_LOCAL, FW_POLICY_ACCESS_RIGHT_READ_WRITE, FALSE },
{ FW_STORE_TYPE_GP_RSOP, FW_POLICY_ACCESS_RIGHT_READ, FALSE },
{ FW_STORE_TYPE_DYNAMIC, FW_POLICY_ACCESS_RIGHT_READ, FALSE },
{ FW_STORE_TYPE_DEFAULTS, FW_POLICY_ACCESS_RIGHT_READ, FALSE }
};
static POLICYSTORE gpoProfiles[] =
{
{ FW_STORE_TYPE_GPO, FW_POLICY_ACCESS_RIGHT_READ_WRITE, FALSE },
{ FW_STORE_TYPE_INVALID, FW_POLICY_ACCESS_RIGHT_INVALID, FALSE },
{ FW_STORE_TYPE_INVALID, FW_POLICY_ACCESS_RIGHT_INVALID, FALSE },
{ FW_STORE_TYPE_DEFAULTS, FW_POLICY_ACCESS_RIGHT_READ, TRUE }
};
static _FWOpenPolicyStore FWOpenPolicyStore_I = NULL;
static _FWClosePolicyStore FWClosePolicyStore_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWRestoreDefaults FWRestoreDefaults_I = NULL;
static _FWGetGlobalConfig FWGetGlobalConfig_I = NULL;
static _FWSetGlobalConfig FWSetGlobalConfig_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWAddFirewallRule FWAddFirewallRule_I = NULL;
static _FWSetFirewallRule FWSetFirewallRule_I = NULL;
static _FWDeleteFirewallRule FWDeleteFirewallRule_I = NULL;
static _FWDeleteAllFirewallRules FWDeleteAllFirewallRules_I = NULL;
static _FWEnumFirewallRules FWEnumFirewallRules_I = NULL;
static _FWVerifyFirewallRule FWVerifyFirewallRule_I = NULL;
static _FWFreeFirewallRules FWFreeFirewallRules_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWGetConfig FWGetConfig_I = NULL;
static _FWSetConfig FWSetConfig_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWAddConnectionSecurityRule FWAddConnectionSecurityRule_I = NULL;
static _FWSetConnectionSecurityRule FWSetConnectionSecurityRule_I = NULL;
static _FWDeleteConnectionSecurityRule FWDeleteConnectionSecurityRule_I = NULL;
static _FWDeleteAllConnectionSecurityRules FWDeleteAllConnectionSecurityRules_I = NULL;
static _FWEnumConnectionSecurityRules FWEnumConnectionSecurityRules_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWAddAuthenticationSet FWAddAuthenticationSet_I = NULL;
static _FWSetAuthenticationSet FWSetAuthenticationSet_I = NULL;
static _FWDeleteAuthenticationSet FWDeleteAuthenticationSet_I = NULL;
static _FWDeleteAllAuthenticationSets FWDeleteAllAuthenticationSets_I = NULL;
static _FWEnumAuthenticationSets FWEnumAuthenticationSets_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWAddCryptoSet FWAddCryptoSet_I = NULL;
static _FWSetCryptoSet FWSetCryptoSet_I = NULL;
static _FWDeleteCryptoSet FWDeleteCryptoSet_I = NULL;
static _FWDeleteAllCryptoSets FWDeleteAllCryptoSets_I = NULL;
static _FWEnumCryptoSets FWEnumCryptoSets_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWEnumPhase1SAs FWEnumPhase1SAs_I = NULL;
static _FWEnumPhase2SAs FWEnumPhase2SAs_I = NULL;
static _FWDeletePhase1SAs FWDeletePhase1SAs_I = NULL;
static _FWDeletePhase2SAs FWDeletePhase2SAs_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWEnumProducts FWEnumProducts_I = NULL;
static _FWFreeProducts FWFreeProducts_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWAddMainModeRule FWAddMainModeRule_I = NULL;
static _FWSetMainModeRule FWSetMainModeRule_I = NULL;
static _FWDeleteMainModeRule FWDeleteMainModeRule_I = NULL;
static _FWDeleteAllMainModeRules FWDeleteAllMainModeRules_I = NULL;
static _FWEnumMainModeRules FWEnumMainModeRules_I = NULL;
static _FWFreeMainModeRules FWFreeMainModeRules_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWQueryFirewallRules FWQueryFirewallRules_I = NULL;
static _FWQueryConnectionSecurityRules FWQueryConnectionSecurityRules_I = NULL;
static _FWQueryMainModeRules FWQueryMainModeRules_I = NULL;
static _FWQueryAuthenticationSets FWQueryAuthenticationSets_I = NULL;
static _FWQueryCryptoSets FWQueryCryptoSets_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWEnumNetworks FWEnumNetworks_I = NULL;
static _FWFreeNetworks FWFreeNetworks_I = NULL;
static _FWEnumAdapters FWEnumAdapters_I = NULL;
static _FWFreeAdapters FWFreeAdapters_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
static _FWStatusMessageFromStatusCode FWStatusMessageFromStatusCode_I = NULL;
static _FWExportPolicy FWExportPolicy_I = NULL;
static _FWImportPolicy FWImportPolicy_I = NULL;
static _FWRestoreGPODefaults FWRestoreGPODefaults_I = NULL;
static _FwIsGroupPolicyEnforced FwIsGroupPolicyEnforced_I = NULL;
static _FWChangeNotificationCreate FWChangeNotificationCreate_I = NULL;
static _FWChangeNotificationDestroy FWChangeNotificationDestroy_I = NULL;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
VOID BuildQueryForDirection(FW_QUERY query, FW_DIRECTION direction)
{
FW_MATCH_VALUE fw_match_value = { 0 };
FW_QUERY_CONDITION fw_query_conditionArray[1];
// FW_QUERY_CONDITION fw_query_conditionArray2[1];
// fw_query_conditionArray[0] = { 0 };
fw_query_conditionArray[0].matchKey = FW_MATCH_KEY_DIRECTION;
fw_query_conditionArray[0].matchType = FW_MATCH_TYPE_EQUAL;
fw_match_value.type = FW_DATA_TYPE_UINT32;
//fw_match_value.data = new FW_MATCH_VALUE_DATA();
if (direction != FW_DIR_BOTH)
{
query.dwNumEntries = 1;
// fw_match_value.data.uInt32 = (uint) direction;
//fw_query_conditionArray[0].matchValue = fw_match_value;
}
// else
// {
// query.dwNumEntries = 2;
// fw_match_value.data.uInt32 = 1;
// fw_query_conditionArray[0].matchValue = fw_match_value;
// fw_query_conditionArray2 = new FW_QUERY_CONDITION[1];
// fw_query_conditionArray2[0].matchKey = FW_MATCH_KEY.FW_MATCH_KEY_DIRECTION;
// fw_query_conditionArray2[0].matchType = FW_MATCH_TYPE.FW_MATCH_TYPE_EQUAL;
// fw_match_value = new FW_MATCH_VALUE();
// fw_match_value.type = FW_DATA_TYPE.FW_DATA_TYPE_UINT32;
// fw_match_value.data = new FW_MATCH_VALUE_DATA();
// fw_match_value.data.uInt32 = 2;
// fw_query_conditionArray2[0].matchValue = fw_match_value;
// }
// FW_QUERY_CONDITIONS[] fw_query_conditionsArray = new FW_QUERY_CONDITIONS[query.dwNumEntries];
// fw_query_conditionsArray[0].dwNumEntries = 1;
// GCHandle item = GCHandle.Alloc(fw_query_conditionArray, GCHandleType.Pinned);
// fw_query_conditionsArray[0].pAndedConditions = Marshal.UnsafeAddrOfPinnedArrayElement(fw_query_conditionArray, 0);
// gchandles.Add(item);
// if (direction == FW_DIRECTION.FW_DIR_BOTH)
// {
// fw_query_conditionsArray[1].dwNumEntries = 1;
// item = GCHandle.Alloc(fw_query_conditionArray2, GCHandleType.Pinned);
// fw_query_conditionsArray[1].pAndedConditions = Marshal.UnsafeAddrOfPinnedArrayElement(fw_query_conditionArray2, 0);
// gchandles.Add(item);
// }
// item = GCHandle.Alloc(fw_query_conditionsArray, GCHandleType.Pinned);
// query.pORConditions = Marshal.UnsafeAddrOfPinnedArrayElement(fw_query_conditionsArray, 0);
// gchandles.Add(item);
}
BOOLEAN IsFirewallApiInitialized(
VOID
)
{
return IsFwApiInitialized;
}
BOOLEAN InitializeFirewallApi(
VOID
)
{
int index = 0;
// Check if Vista+ ??
if (FwApiLibraryHandle) // already initialized...
return TRUE;
FwApiLibraryHandle = LoadLibraryW(L"FirewallAPI.dll");
if (!FwApiLibraryHandle)
return FALSE;
// Missing FwAlloc/FwFree and various FwFreexxx and other functions....
FWOpenPolicyStore_I = (_FWOpenPolicyStore)GetProcAddress(FwApiLibraryHandle, "FWOpenPolicyStore");
FWClosePolicyStore_I = (_FWClosePolicyStore)GetProcAddress(FwApiLibraryHandle, "FWClosePolicyStore");
FWRestoreDefaults_I = (_FWRestoreDefaults)GetProcAddress(FwApiLibraryHandle, "FWRestoreDefaults");
FWGetGlobalConfig_I = (_FWGetGlobalConfig)GetProcAddress(FwApiLibraryHandle, "FWGetGlobalConfig");
FWSetGlobalConfig_I = (_FWSetGlobalConfig)GetProcAddress(FwApiLibraryHandle, "FWSetGlobalConfig");
FWAddFirewallRule_I = (_FWAddFirewallRule)GetProcAddress(FwApiLibraryHandle, "FWAddFirewallRule");
FWSetFirewallRule_I = (_FWSetFirewallRule)GetProcAddress(FwApiLibraryHandle, "FWSetFirewallRule");
FWDeleteFirewallRule_I = (_FWDeleteFirewallRule)GetProcAddress(FwApiLibraryHandle, "FWDeleteFirewallRule");
FWDeleteAllFirewallRules_I = (_FWDeleteAllFirewallRules)GetProcAddress(FwApiLibraryHandle, "FWDeleteAllFirewallRules");
FWEnumFirewallRules_I = (_FWEnumFirewallRules)GetProcAddress(FwApiLibraryHandle, "FWEnumFirewallRules");
FWVerifyFirewallRule_I = (_FWVerifyFirewallRule)GetProcAddress(FwApiLibraryHandle, "FWVerifyFirewallRule");
FWFreeFirewallRules_I = (_FWFreeFirewallRules)GetProcAddress(FwApiLibraryHandle, "FWFreeFirewallRules");
FWGetConfig_I = (_FWGetConfig)GetProcAddress(FwApiLibraryHandle, "FWGetConfig");
FWSetConfig_I = (_FWSetConfig)GetProcAddress(FwApiLibraryHandle, "FWSetConfig");
FWAddConnectionSecurityRule_I = (_FWAddConnectionSecurityRule)GetProcAddress(FwApiLibraryHandle, "FWAddConnectionSecurityRule");
FWSetConnectionSecurityRule_I = (_FWSetConnectionSecurityRule)GetProcAddress(FwApiLibraryHandle, "FWSetConnectionSecurityRule");
FWDeleteConnectionSecurityRule_I = (_FWDeleteConnectionSecurityRule)GetProcAddress(FwApiLibraryHandle, "FWDeleteConnectionSecurityRule");
FWDeleteAllConnectionSecurityRules_I = (_FWDeleteAllConnectionSecurityRules)GetProcAddress(FwApiLibraryHandle, "FWDeleteAllConnectionSecurityRules");
FWEnumConnectionSecurityRules_I = (_FWEnumConnectionSecurityRules)GetProcAddress(FwApiLibraryHandle, "FWEnumConnectionSecurityRules");
FWAddAuthenticationSet_I = (_FWAddAuthenticationSet)GetProcAddress(FwApiLibraryHandle, "FWAddAuthenticationSet");
FWSetAuthenticationSet_I = (_FWSetAuthenticationSet)GetProcAddress(FwApiLibraryHandle, "FWSetAuthenticationSet");
FWDeleteAuthenticationSet_I = (_FWDeleteAuthenticationSet)GetProcAddress(FwApiLibraryHandle, "FWOpenPolicyStore");
FWDeleteAllAuthenticationSets_I = (_FWDeleteAllAuthenticationSets)GetProcAddress(FwApiLibraryHandle, "FWDeleteAllAuthenticationSets");
FWEnumConnectionSecurityRules_I = (_FWEnumConnectionSecurityRules)GetProcAddress(FwApiLibraryHandle, "FWEnumConnectionSecurityRules");
FWAddCryptoSet_I = (_FWAddCryptoSet)GetProcAddress(FwApiLibraryHandle, "FWAddCryptoSet");
FWSetCryptoSet_I = (_FWSetCryptoSet)GetProcAddress(FwApiLibraryHandle, "FWSetCryptoSet");
FWDeleteCryptoSet_I = (_FWDeleteCryptoSet)GetProcAddress(FwApiLibraryHandle, "FWDeleteCryptoSet");
FWDeleteAllCryptoSets_I = (_FWDeleteAllCryptoSets)GetProcAddress(FwApiLibraryHandle, "FWDeleteAllCryptoSets");
FWEnumCryptoSets_I = (_FWEnumCryptoSets)GetProcAddress(FwApiLibraryHandle, "FWEnumCryptoSets");
FWEnumPhase1SAs_I = (_FWEnumPhase1SAs)GetProcAddress(FwApiLibraryHandle, "FWEnumPhase1SAs");
FWEnumPhase2SAs_I = (_FWEnumPhase2SAs)GetProcAddress(FwApiLibraryHandle, "FWEnumPhase2SAs");
FWDeletePhase1SAs_I = (_FWDeletePhase1SAs)GetProcAddress(FwApiLibraryHandle, "FWDeletePhase1SAs");
FWDeletePhase2SAs_I = (_FWDeletePhase2SAs)GetProcAddress(FwApiLibraryHandle, "FWDeletePhase2SAs");
FWEnumProducts_I = (_FWEnumProducts)GetProcAddress(FwApiLibraryHandle, "FWEnumProducts");
FWFreeProducts_I = (_FWFreeProducts)GetProcAddress(FwApiLibraryHandle, "FWFreeProducts");
FWStatusMessageFromStatusCode_I = (_FWStatusMessageFromStatusCode)GetProcAddress(FwApiLibraryHandle, "FWStatusMessageFromStatusCode");
FWExportPolicy_I = (_FWExportPolicy)GetProcAddress(FwApiLibraryHandle, "FWExportPolicy");
FWImportPolicy_I = (_FWImportPolicy)GetProcAddress(FwApiLibraryHandle, "FWImportPolicy");
FWRestoreGPODefaults_I = (_FWRestoreGPODefaults)GetProcAddress(FwApiLibraryHandle, "FWRestoreGPODefaults");
FwIsGroupPolicyEnforced_I = (_FwIsGroupPolicyEnforced)GetProcAddress(FwApiLibraryHandle, "FwIsGroupPolicyEnforced");
FWChangeNotificationCreate_I = (_FWChangeNotificationCreate)GetProcAddress(FwApiLibraryHandle, "FWChangeNotificationCreate");
FWChangeNotificationDestroy_I = (_FWChangeNotificationDestroy)GetProcAddress(FwApiLibraryHandle, "FWChangeNotificationDestroy");
for (index = 0; index < 4; index++)
{
FWOpenPolicyStore_I(
FW_SEVEN_BINARY_VERSION,
NULL,
pcProfiles[index].StoreType,
pcProfiles[index].AccessRight,
FW_POLICY_STORE_FLAGS_NONE,
&PolicyStoreHandles[index]
);
}
IsFwApiInitialized = TRUE;
return TRUE;
}
VOID FreeFirewallApi(
VOID
)
{
if (FWClosePolicyStore_I)
{
ULONG i;
for (i = 0; i < _countof(PolicyStoreHandles); i++)
{
FWClosePolicyStore_I(PolicyStoreHandles[i]);
PolicyStoreHandles[i] = NULL;
}
}
FWOpenPolicyStore_I = NULL;
FWClosePolicyStore_I = NULL;
FWRestoreDefaults_I = NULL;
FWGetGlobalConfig_I = NULL;
FWSetGlobalConfig_I = NULL;
if (FwApiLibraryHandle)
{
FreeLibrary(FwApiLibraryHandle);
FwApiLibraryHandle = NULL;
}
IsFwApiInitialized = FALSE;
}
BOOLEAN ValidateFirewallConnectivity(
ULONG returnValue
)
{
if (!IsFwApiConnectivityLost && ((returnValue == 6) || (returnValue == 0x6b5)))
{
IsFwApiConnectivityLost = TRUE;
//ShowWarning( InvalidPolicyHandles or RpcConnection );
return FALSE;
}
return TRUE;
}
BOOLEAN FwIsGroupPolicyEnforced(
__in PWCHAR wszMachine,
__in FW_PROFILE_TYPE Profiles
)
{
BOOLEAN isEnforced = FALSE;
ValidateFirewallConnectivity(FwIsGroupPolicyEnforced_I(NULL, Profiles, &isEnforced));
return (isEnforced == TRUE);
}
VOID FwStatusMessageFromStatusCode(
__in FW_RULE_STATUS code
)
{
ULONG pcchMsg = 0;
FWStatusMessageFromStatusCode_I(code, NULL, &pcchMsg);
}
VOID EnumerateFirewallRules(
__in FW_POLICY_STORE Store,
__in FW_PROFILE_TYPE Type,
__in FW_DIRECTION Direction,
__in PFW_WALK_RULES Callback,
__in PVOID Context
)
{
UINT32 uRuleCount = 0;
ULONG result = 0;
FW_POLICY_STORE_HANDLE storeHandle = NULL;
PFW_RULE2_0 pRules = NULL;
switch (Store)
{
case FW_POLICY_STORE_MAIN:
storeHandle = MAIN_POLICY_STORE;
break;
case FW_POLICY_STORE_GPRSOP:
storeHandle = GPRSOP_POLICY_STORE;
break;
case FW_POLICY_STORE_DYNAMIC:
storeHandle = DYNAMIC_POLICY_STORE;
break;
case FW_POLICY_STORE_DEFAULT:
default:
storeHandle = DEFAULT_POLICY_STORE;
break;
}
result = FWEnumFirewallRules_I(
storeHandle,
FW_RULE_STATUS_CLASS_ALL,
Type,
FW_ENUM_RULES_FLAG_INCLUDE_METADATA | FW_ENUM_RULES_FLAG_RESOLVE_NAME | FW_ENUM_RULES_FLAG_RESOLVE_DESCRIPTION | FW_ENUM_RULES_FLAG_RESOLVE_APPLICATION,
&uRuleCount,
&pRules
);
if (ValidateFirewallConnectivity(result))
{
while (pRules != NULL && (pRules = pRules->pNext))
{
if (Direction == FW_DIR_BOTH)
{
if (!Callback || !Callback(pRules, Context))
break;
}
else
{
if (pRules->Direction == Direction)
{
if (!Callback || !Callback(pRules, Context))
break;
}
}
}
FWFreeFirewallRules_I(pRules);
}
//FW_PROFILE_TYPE_CURRENT
//result = FWEnumFirewallRules_I(DYNAMIC_POLICY_STORE, wFilteredByStatus, FW_PROFILE_TYPE_CURRENT, wFlags, &NumRules, &pRule);
// internal void Reload(string[] ruleIdFilter)
//{
// uint num;
// IntPtr ptr;
// FW_QUERY fw_query;
// List<IntPtr> idBuffer = new List<IntPtr>();
// this.Rules = new List<FirewallRule>();
// FW_ENUM_RULES_FLAGS fw_enum_rules_flags = FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_NONE;
// if (this.resolveKeywords)
// {
// fw_enum_rules_flags = (FW_ENUM_RULES_FLAGS) ((ushort) (fw_enum_rules_flags | (FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_RESOLVE_APPLICATION | FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_RESOLVE_DESCRIPTION | FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_RESOLVE_NAME)));
// }
// if (this.resolveGPOName)
// {
// fw_enum_rules_flags = (FW_ENUM_RULES_FLAGS) ((ushort) (fw_enum_rules_flags | FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_RESOLVE_GPO_NAME));
// }
// if (this.onlyEffective)
// {
// fw_enum_rules_flags = (FW_ENUM_RULES_FLAGS) ((ushort) (fw_enum_rules_flags | FW_ENUM_RULES_FLAGS.FW_ENUM_RULES_FLAG_EFFECTIVE));
// }
// fw_query.dwNumEntries = 0;
// fw_query.pORConditions = IntPtr.Zero;
// fw_query.Status = this.onlyStatusOK ? (FW_RULE_STATUS.FW_RULE_STATUS_OK | FW_RULE_STATUS.FW_RULE_STATUS_PARTIALLY_IGNORED) : ((FW_RULE_STATUS) (-65536));
// fw_query.wSchemaVersion = 0x20a;
// List<GCHandle> gchandles = new List<GCHandle>();
// if (this.direction != FW_DIRECTION.FW_DIR_INVALID)
// {
// FwRuleUtilities.BuildQuery(ref fw_query, this.direction, ref ruleIdFilter, ref idBuffer, ref gchandles);
// }
// IntPtr ptr2 = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(FW_QUERY)));
// uint num3 = 0;
// try
// {
// Marshal.StructureToPtr(fw_query, ptr2, false);
// num3 = FirewallRuleAPI.FWQueryFirewallRules(this.policyHandle, ptr2, (ushort) fw_enum_rules_flags, out num, out ptr);
// }
// finally
// {
// Marshal.FreeCoTaskMem(ptr2);
// FwRuleUtilities.FreeIntPtrs(ref idBuffer);
// FwRuleUtilities.FreeGCHandles(gchandles.ToArray());
// }
// if (num3 == 0)
// {
// IntPtr pNext = ptr;
// for (int i = 0; i < num; i++)
// {
// FW_RULE fw_rule = (FW_RULE) Marshal.PtrToStructure(pNext, typeof(FW_RULE));
// pNext = fw_rule.pNext;
// FirewallRule item = FirewallRuleFromFWRule(fw_rule);
// this.Rules.Add(item);
// }
// FirewallRuleAPI.FWFreeFirewallRules(ptr);
// }
//}
//
}
@@ -0,0 +1,745 @@
#include "fwmon.h"
#include "wf.h"
#include <Shellapi.h>
#define NUMBER_OF_CONTROLS 3
#define NUMBER_OF_BUTTONS 7
#define NUMBER_OF_SEPARATORS 2
#define TVITEM_OVERVIEW 0
#define TVITEM_MONITOR 1
#define TVITEM_PRIVATEPROFILE 2
#define TVITEM_PRIVATEINBOUND 3
#define TVITEM_PRIVATEOUTBOUND 4
#define TVITEM_PUBLICPROFILE 6
#define TVITEM_PUBLICINBOUND 7
#define TVITEM_PUBLICOUTBOUND 8
#define TVITEM_STANDARDPROFILE 10
#define TVITEM_STANDARDINBOUND 11
#define TVITEM_STANDARDOUTBOUND 12
#define TVITEM_DOMAINPROFILE 14
#define TVITEM_DOMAININBOUND 15
#define TVITEM_DOMAINOUTBOUND 16
HWND TextboxHandle = NULL;
ULONG StatusMask = 0;
ULONG IdRangeBase = 0;
ULONG ToolBarIdRangeBase = 0;
ULONG ToolBarIdRangeEnd = 0;
static INT_PTR CALLBACK SettingsDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
{
PFIREWALL_CONTEXT context;
if (uMsg == WM_INITDIALOG)
{
context = (PFIREWALL_CONTEXT)lParam;
SetProp(hwndDlg, L"Context", (HANDLE)context);
}
else
{
context = (PFIREWALL_CONTEXT)GetProp(hwndDlg, L"Context");
if (uMsg == WM_DESTROY)
RemoveProp(hwndDlg, L"Context");
}
if (!context)
return FALSE;
switch (uMsg)
{
case WM_INITDIALOG:
{
PhCenterWindow(hwndDlg, (IsWindowVisible(GetParent(hwndDlg)) && !IsIconic(GetParent(hwndDlg))) ? GetParent(hwndDlg) : NULL);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hwndDlg, IDCANCEL);
break;
case IDOK:
EndDialog(hwndDlg, IDOK);
break;
}
}
break;
}
return FALSE;
}
static INT CALLBACK MainPropSheet_Callback(
__in HWND hwndDlg,
__in UINT uMsg,
__inout LPARAM lParam
)
{
switch (uMsg)
{
case PSCB_INITIALIZED:
{
// load our application icon, it'll be shared with Windows, do not free.
HANDLE hbicon = LoadImageW(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_FIREWALLICON),
IMAGE_ICON,
GetSystemMetrics(SM_CXICON),
GetSystemMetrics(SM_CYICON),
LR_SHARED
);
// property sheets only set the ICON_SMALL, set our ICON_BIG for Taskbar/alt-tab previews.
SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hbicon);
}
break;
case PSCB_PRECREATE:
// Add some missing Window styles to the PropertySheet.
((LPDLGTEMPLATE)lParam)->style |= WS_MINIMIZEBOX;
break;
case PSCB_BUTTONPRESSED:
{
switch (lParam)
{
case PSBTN_FINISH:
case PSBTN_OK:
case PSBTN_APPLYNOW:
case PSBTN_CANCEL:
break;
}
} break;
}
return FALSE;
}
BOOLEAN CALLBACK WfAddRules1(
__in PFW_RULE2_0 FwRule,
__in PVOID Context
)
{
PFIREWALL_CONTEXT context = (PFIREWALL_CONTEXT)Context;
INT lvItemIndex = PhAddListViewItem(context->ListViewHandle, MAXINT, FwRule->wszName, (PVOID)FwRule);
if (FwRule->wszLocalApplication)
{
HICON icon = PhGetFileShellIcon(FwRule->wszLocalApplication, L".exe", TRUE);
// Icon
if (icon)
{
INT imageIndex = ImageList_AddIcon(ListView_GetImageList(context->ListViewHandle, LVSIL_SMALL), icon);
PhSetListViewItemImageIndex(context->ListViewHandle, lvItemIndex, imageIndex);
DestroyIcon(icon);
}
else
{
PhSetListViewItemImageIndex(context->ListViewHandle, lvItemIndex, 0);
}
}
if (FwRule->wszEmbeddedContext)
{
WCHAR szSubitemText[260];
swprintf_s(
szSubitemText,
_countof(szSubitemText),
L"%s",
FwRule->wszEmbeddedContext
);
//SHGetLocalizedName(FwRule->wszEmbeddedContext, FwRule->wszEmbeddedContext, cch, &tt);
ListView_SetItemText(context->ListViewHandle, lvItemIndex, 1, szSubitemText);
}
return TRUE;
}
static NTSTATUS FWRulesEnumThreadStart(
__in PVOID Parameter
)
{
PFIREWALL_CONTEXT context = (PFIREWALL_CONTEXT)Parameter;
if (InitializeFirewallApi())
{
EnumerateFirewallRules(FW_POLICY_STORE_DYNAMIC, context->Flags, context->Direction, WfAddRules1, context);
}
return STATUS_SUCCESS;
}
HTREEITEM TreeViewAddItem(
HWND hTreeView,
HTREEITEM hParent,
LPWSTR lpText,
INT Image,
INT SelectedImage,
LPARAM param
)
{
TV_INSERTSTRUCTW Insert = { 0 };
Insert.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
Insert.hInsertAfter = TVI_LAST;
Insert.hParent = hParent;
Insert.item.lParam = param;
Insert.item.iSelectedImage = SelectedImage;
Insert.item.iImage = Image;
Insert.item.pszText = lpText;
return TreeView_InsertItem(hTreeView, &Insert);
}
INT_PTR CALLBACK FirewallDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
)
{
PFIREWALL_CONTEXT context;
if (uMsg == WM_INITDIALOG)
{
context = (PFIREWALL_CONTEXT)lParam;
SetProp(hwndDlg, L"Context", (HANDLE)context);
}
else
{
context = (PFIREWALL_CONTEXT)GetProp(hwndDlg, L"Context");
if (uMsg == WM_DESTROY)
RemoveProp(hwndDlg, L"Context");
}
if (!context)
return FALSE;
switch (uMsg)
{
case WM_INITDIALOG:
{
TV_INSERTSTRUCTW Insert = { 0 };
HTREEITEM root = NULL;
{
ULONG idIndex = 0;
ULONG imageIndex = 0;
IdRangeBase = PhPluginReserveIds(NUMBER_OF_CONTROLS + NUMBER_OF_BUTTONS);
ToolBarIdRangeBase = IdRangeBase + NUMBER_OF_CONTROLS;
ToolBarIdRangeEnd = ToolBarIdRangeBase + NUMBER_OF_BUTTONS;
// Create the rebar.
context->ReBarHandle = CreateWindowExW(
WS_EX_TOOLWINDOW,
REBARCLASSNAME,
NULL,
WS_CHILD | WS_BORDER | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CCS_NODIVIDER | CCS_TOP | RBS_DBLCLKTOGGLE | RBS_VARHEIGHT,
0, 0, 0, 0,
hwndDlg,
NULL,
(HINSTANCE)PluginInstance->DllBase,
NULL
);
// Create the toolbar.
context->ToolBarHandle = CreateWindowExW(
0,
TOOLBARCLASSNAME,
NULL,
WS_CHILD | CCS_NORESIZE | CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT,
0, 0, 0, 0,
context->ReBarHandle,
(HMENU)(IdRangeBase),
(HINSTANCE)PluginInstance->DllBase,
NULL
);
// Create the searchbox
TextboxHandle = CreateWindowExW(
0,
WC_EDIT,
NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER,
0, 0, 0, 0,
context->ReBarHandle,
(HMENU)(IdRangeBase + 1),
(HINSTANCE)PluginInstance->DllBase,
NULL
);
// Set the toolbar struct size.
SendMessage(context->ToolBarHandle, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
// Set the extended toolbar styles.
SendMessage(context->ToolBarHandle, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DOUBLEBUFFER | TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_HIDECLIPPEDBUTTONS);
// Add the rebar controls and attach our windows.
{
REBARINFO ri = { sizeof(REBARINFO) };
REBARBANDINFO rBandInfo = { sizeof(REBARBANDINFO) };
rBandInfo.fMask = RBBIM_STYLE | RBBIM_ID | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE;
rBandInfo.fStyle = RBBS_HIDETITLE | RBBS_NOGRIPPER | RBBS_FIXEDSIZE;
//no imagelist to attach to rebar
SendMessage(context->ReBarHandle, RB_SETBARINFO, 0, (LPARAM)&ri);
// Get the toolbar size and add the toolbar.
rBandInfo.wID = (IdRangeBase + 1);
rBandInfo.cyMinChild = HIWORD(SendMessage(context->ToolBarHandle, TB_GETBUTTONSIZE, 0, 0)) + 2; // Height
rBandInfo.hwndChild = context->ToolBarHandle;
SendMessage(context->ReBarHandle, RB_INSERTBAND, -1, (LPARAM)&rBandInfo);
// Add the textbox, slightly smaller than the toolbar.
rBandInfo.wID = (IdRangeBase + 2);
rBandInfo.cxMinChild = 180;
rBandInfo.cyMinChild -= 5;
rBandInfo.hwndChild = TextboxHandle;
SendMessage(context->ReBarHandle, RB_INSERTBAND, -1, (LPARAM)&rBandInfo);
}
// Set Searchbox control font.
SendMessage(TextboxHandle, WM_SETFONT, (WPARAM)PhApplicationFont, FALSE);
Edit_SetCueBannerText(TextboxHandle, L"Search Firewall");
{
TBBUTTON tbButtonArray[] =
{
{ I_IMAGENONE, ToolBarIdRangeBase + (idIndex++), TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_SHOWTEXT | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L" Firewall" },
{ I_IMAGENONE, ToolBarIdRangeBase + (idIndex++), TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_SHOWTEXT | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L" View" },
{ I_IMAGENONE, ToolBarIdRangeBase + (idIndex++), TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_SHOWTEXT | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L" Tools" },
{ I_IMAGENONE, ToolBarIdRangeBase + (idIndex++), TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_SHOWTEXT | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L" Help" }
};
// Add the buttons to the toolbar.
SendMessage(context->ToolBarHandle, TB_ADDBUTTONS, _countof(tbButtonArray), (LPARAM)tbButtonArray);
}
}
context->TreeViewHandle = GetDlgItem(hwndDlg, IDC_TREE1);
context->ListViewHandle = GetDlgItem(hwndDlg, IDC_FIREWALL_LIST);
PhSetControlTheme(context->ListViewHandle, L"explorer");
PhSetListViewStyle(context->ListViewHandle, FALSE, FALSE);
PhSetExtendedListView(context->ListViewHandle);
PhSetControlTheme(context->TreeViewHandle, L"explorer");
TreeView_SetExtendedStyle(
context->TreeViewHandle,
TVS_EX_DOUBLEBUFFER,
TVS_EX_DOUBLEBUFFER
);
ListView_SetImageList(context->ListViewHandle, ImageList_Create(20, 20, ILC_COLOR32 | ILC_MASK, 0, 1), LVSIL_SMALL);
ListView_SetImageList(context->ListViewHandle, ImageList_Create(32, 32, ILC_COLOR32 | ILC_MASK, 0, 1), LVSIL_NORMAL);
TreeView_SetImageList(context->TreeViewHandle, ImageList_Create(22, 22, ILC_COLOR32 | ILC_MASK, 0, 1), TVSIL_NORMAL);
PhInitializeLayoutManager(&context->LayoutManager, hwndDlg);
PhAddLayoutItem(&context->LayoutManager, context->ReBarHandle, NULL, PH_ANCHOR_LEFT | PH_ANCHOR_TOP | PH_ANCHOR_RIGHT);
PhAddLayoutItem(&context->LayoutManager, context->TreeViewHandle, NULL, PH_ANCHOR_LEFT | PH_ANCHOR_TOP | PH_ANCHOR_BOTTOM);
PhAddLayoutItem(&context->LayoutManager, context->ListViewHandle, NULL, PH_ANCHOR_ALL);
PhAddLayoutItem(&context->LayoutManager, GetDlgItem(hwndDlg, ID_CLOSE), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT);
{
HICON hIcon;
hIcon = LoadImage(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_WFICON),//IDI_FIREWALLICON),
IMAGE_ICON,
24,
24,
LR_CREATEDIBSECTION | LR_SHARED
);
ImageList_AddIcon(TreeView_GetImageList(context->TreeViewHandle, TVSIL_NORMAL), hIcon);
DestroyIcon(hIcon);
hIcon = LoadImage(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_ICONMONITOR),
IMAGE_ICON,
24,
24,
LR_CREATEDIBSECTION | LR_SHARED
);
ImageList_AddIcon(TreeView_GetImageList(context->TreeViewHandle, TVSIL_NORMAL), hIcon);
DestroyIcon(hIcon);
hIcon = LoadImage(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_FIREWALLICON),
IMAGE_ICON,
24,
24,
LR_CREATEDIBSECTION | LR_SHARED
);
ImageList_AddIcon(TreeView_GetImageList(context->TreeViewHandle, TVSIL_NORMAL), hIcon);
DestroyIcon(hIcon);
hIcon = LoadImage(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_ICONWORK),
IMAGE_ICON,
24,
24,
LR_CREATEDIBSECTION | LR_SHARED
);
ImageList_AddIcon(TreeView_GetImageList(context->TreeViewHandle, TVSIL_NORMAL), hIcon);
DestroyIcon(hIcon);
hIcon = LoadImage(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDI_ICONPUBLIC),
IMAGE_ICON,
24,
24,
LR_CREATEDIBSECTION | LR_SHARED
);
ImageList_AddIcon(TreeView_GetImageList(context->TreeViewHandle, TVSIL_NORMAL), hIcon);
DestroyIcon(hIcon);
}
TreeViewAddItem(context->TreeViewHandle, NULL, L"Overview", 0, 0, TVITEM_OVERVIEW);
TreeViewAddItem(context->TreeViewHandle, NULL, L"Monitoring", 1, 1, TVITEM_MONITOR);
root = TreeViewAddItem(context->TreeViewHandle, NULL, L"Inbound", 2, 2, 0);
TreeViewAddItem(context->TreeViewHandle, root, L"Private", 2, 2, TVITEM_PRIVATEINBOUND);
TreeViewAddItem(context->TreeViewHandle, root, L"Public", 2, 2, TVITEM_PUBLICINBOUND);
TreeViewAddItem(context->TreeViewHandle, root, L"Standard", 2, 2, TVITEM_STANDARDINBOUND);
root = TreeViewAddItem(context->TreeViewHandle, root, L"Domain", 2, 2, TVITEM_DOMAININBOUND);
TreeView_EnsureVisible(context->TreeViewHandle, root);
root = TreeViewAddItem( context->TreeViewHandle, NULL, L"Outbound", 3, 3, 1);
TreeViewAddItem(context->TreeViewHandle, root, L"Private", 3, 3, TVITEM_PRIVATEINBOUND);
TreeViewAddItem(context->TreeViewHandle, root, L"Public", 3, 3, TVITEM_PUBLICOUTBOUND);
TreeViewAddItem(context->TreeViewHandle, root, L"Standard", 3, 3, TVITEM_STANDARDOUTBOUND);
root = TreeViewAddItem(context->TreeViewHandle, root, L"Domain", 3, 3, TVITEM_DOMAINOUTBOUND);
TreeView_EnsureVisible(context->TreeViewHandle, root);
root = TreeViewAddItem(context->TreeViewHandle, NULL, L"Security Rules", 4, 4, 2);
TreeViewAddItem(context->TreeViewHandle, root, L"Private", 4, 4, 0);
TreeViewAddItem(context->TreeViewHandle, root, L"Public", 4, 4, 0);
TreeViewAddItem(context->TreeViewHandle, root, L"Standard", 4, 4, 0);
TreeViewAddItem(context->TreeViewHandle, root, L"Domain", 4, 4, 0);
PhAddListViewColumn(context->ListViewHandle, 0, 0, 0, LVCFMT_LEFT, 400, L"Name");
PhAddListViewColumn(context->ListViewHandle, 1, 1, 1, LVCFMT_LEFT, 150, L"Group");
//SendMessage(context->ReBarHandle, RB_SETWINDOWTHEME, 0, (LPARAM)L"Media"); //Media/Communications/BrowserTabBar/Help
//SendMessage(context->ToolBarHandle, TB_SETWINDOWTHEME, 0, (LPARAM)L"Media"); //Media/Communications/BrowserTabBar/Help
SetFocus(context->TreeViewHandle);
PhCenterWindow(hwndDlg, PhMainWndHandle);
}
break;
case WM_SIZE:
{
PhLayoutManagerLayout(&context->LayoutManager);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case ID_PROPERTIES:
{
#define MAX_NUMPAGES 7
UINT nPages = 0;
PROPSHEETPAGEW pSheetPage = { sizeof(PROPSHEETPAGEW) };
HPROPSHEETPAGE pSheetPageHandles[MAX_NUMPAGES] = { 0 };
pSheetPage.dwFlags = PSP_DEFAULT | PSP_USETITLE;
pSheetPage.hInstance = (HINSTANCE)PluginInstance->DllBase;
pSheetPage.lParam = (LPARAM)context;
pSheetPage.pszTitle = L"General";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULEGENERAL);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Advanced";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULEADVANCED);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Scope";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULESCOPE);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Users";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULEUSERS);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Computers";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULECOMPUTERS);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Programs and Services";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULEEXECUTABLE);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
pSheetPage.pszTitle = L"Protocols and Ports";
pSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_RULEPORTS);
pSheetPage.pfnDlgProc = SettingsDlgProc;
pSheetPageHandles[nPages++] = CreatePropertySheetPageW(&pSheetPage);
{
// Create the property sheet
PROPSHEETHEADERW psh = { sizeof(PROPSHEETHEADERW) };
psh.dwFlags = PSH_USECALLBACK | PSH_USEICONID;
psh.pszIcon = MAKEINTRESOURCE(IDI_FIREWALLICON);
psh.pszCaption = L"Rule Properties";
psh.hwndParent = hwndDlg;
psh.hInstance = (HINSTANCE)PluginInstance->DllBase;
psh.nPages = nPages;
psh.phpage = pSheetPageHandles;
psh.pfnCallback = MainPropSheet_Callback;
PropertySheetW(&psh);
}
}
break;
case IDCANCEL:
case ID_CLOSE:
{
FreeFirewallApi();
EndDialog(hwndDlg, IDOK);
}
break;
}
}
break;
case WM_NOTIFY:
{
LPNMHDR data = (LPNMHDR)lParam;
switch (data->code)
{
case TVN_SELCHANGING:
{
if (data->hwndFrom == context->TreeViewHandle)
{
LPNMTREEVIEW pnkd = (LPNMTREEVIEW)lParam;
INT index = (INT)pnkd->itemNew.lParam;
ListView_DeleteAllItems(context->ListViewHandle);
ImageList_RemoveAll(ListView_GetImageList(context->ListViewHandle, LVSIL_SMALL));
//FW_PROFILE_TYPE_INVALID = 0,
//FW_PROFILE_TYPE_DOMAIN = 0x001,
//FW_PROFILE_TYPE_STANDARD = 0x002,
//FW_PROFILE_TYPE_PRIVATE = FW_PROFILE_TYPE_STANDARD,
//FW_PROFILE_TYPE_PUBLIC = 0x004,
//FW_PROFILE_TYPE_ALL = 0x7FFFFFFF,
// FW_PROFILE_TYPE_CURRENT = 0x80000000,
//FW_PROFILE_TYPE_NONE = FW_PROFILE_TYPE_CURRENT + 1
switch (index)
{
case TVITEM_PRIVATEPROFILE:
{
context->Flags = FW_PROFILE_TYPE_PRIVATE;
context->Direction = FW_DIR_BOTH;
}
break;
case TVITEM_PRIVATEINBOUND:
{
context->Flags = FW_PROFILE_TYPE_PRIVATE;
context->Direction = FW_DIR_IN;
}
break;
case TVITEM_PRIVATEOUTBOUND:
{
context->Flags = FW_PROFILE_TYPE_PRIVATE;
context->Direction = FW_DIR_OUT;
}
break;
case TVITEM_PUBLICPROFILE:
{
context->Flags = FW_PROFILE_TYPE_PUBLIC;
context->Direction = FW_DIR_BOTH;
}
break;
case TVITEM_PUBLICINBOUND:
{
context->Flags = FW_PROFILE_TYPE_PUBLIC;
context->Direction = FW_DIR_IN;
}
break;
case TVITEM_PUBLICOUTBOUND:
{
context->Flags = FW_PROFILE_TYPE_PUBLIC;
context->Direction = FW_DIR_OUT;
}
break;
case TVITEM_STANDARDPROFILE:
{
context->Flags = FW_PROFILE_TYPE_STANDARD;
context->Direction = FW_DIR_BOTH;
}
break;
case TVITEM_STANDARDINBOUND:
{
context->Flags = FW_PROFILE_TYPE_STANDARD;
context->Direction = FW_DIR_IN;
}
break;
case TVITEM_STANDARDOUTBOUND:
{
context->Flags = FW_PROFILE_TYPE_STANDARD;
context->Direction = FW_DIR_OUT;
}
break;
case TVITEM_DOMAINPROFILE:
{
context->Flags = FW_PROFILE_TYPE_DOMAIN;
context->Direction = FW_DIR_BOTH;
}
break;
case TVITEM_DOMAININBOUND:
{
context->Flags = FW_PROFILE_TYPE_DOMAIN;
context->Direction = FW_DIR_IN;
}
break;
case TVITEM_DOMAINOUTBOUND:
{
context->Flags = FW_PROFILE_TYPE_DOMAIN;
context->Direction = FW_DIR_OUT;
}
break;
default:
{
context->Flags = FW_PROFILE_TYPE_NONE;
context->Direction = FW_DIR_INVALID;
}
break;
}
PhCreateThread(0, FWRulesEnumThreadStart, context);
}
}
break;
case NM_DBLCLK:
{
//if (data->hwndFrom == hListView)
//{
// LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE) lParam;
// LPORIGINCONTENT content = ListViewGetlParam(lpnmitem->iItem);
// PWCHAR itemPath = content->CdKey;
// if (itemPath != NULL)
// {
// INT ItemIndex = ListView_GetNextItem(hListView, -1, LVNI_FOCUSED);
// }
//// if (IS_INSTALLED_ENUM(SelectedEnumType))
//// ShowInstalledAppInfo(-1);
//// if (IS_AVAILABLE_ENUM(SelectedEnumType))
//// ShowAvailableAppInfo(-1);
//}
}
break;
case TBN_DROPDOWN:
{
#define lpnm ((LPNMHDR)lParam)
#define lpnmTB ((LPNMTOOLBAR)lParam)
if (lpnmTB->iItem == 1)
{
// Get the coordinates of the button.
RECT rc;
HMENU hMenuLoaded;
HMENU hPopupMenu;
TPMPARAMS tpm = { sizeof(TPMPARAMS) };
SendMessage(lpnmTB->hdr.hwndFrom, TB_GETRECT, (WPARAM)lpnmTB->iItem, (LPARAM)&rc);
// Convert to screen coordinates.
MapWindowPoints(lpnmTB->hdr.hwndFrom, HWND_DESKTOP, (LPPOINT)&rc, 2);
// Get the menu.
hMenuLoaded = LoadMenu((HINSTANCE)PluginInstance->DllBase, MAKEINTRESOURCE(IDR_MENUGENERAL));
// Get the submenu for the first menu item.
hPopupMenu = GetSubMenu(hMenuLoaded, 0);
// Set up the pop-up menu.
// In case the toolbar is too close to the bottom of the screen,
// set rcExclude equal to the button rectangle and the menu will appear above
// the button, and not below it.
tpm.rcExclude = rc;
// Show the menu and wait for input.
// If the user selects an item, its WM_COMMAND is sent.
TrackPopupMenuEx(
hPopupMenu,
TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
rc.left,
rc.bottom,
hwndDlg,
&tpm
);
DestroyMenu(hMenuLoaded);
}
}
break;
case NM_RCLICK:
{
if (data->hwndFrom == context->ListViewHandle)
{
POINT pt;
HMENU hPopupMenu = GetSubMenu(LoadMenuW((HINSTANCE)PluginInstance->DllBase, MAKEINTRESOURCEW(IDR_FIREWALLMENU)), 0);
GetCursorPos(&pt);
SetForegroundWindow(context->ListViewHandle);
TrackPopupMenu(hPopupMenu, 0, pt.x, pt.y, 0, hwndDlg, NULL);
DestroyMenu(hPopupMenu);
}
}
break;
}
}
break;
}
return FALSE;
}
+27
View File
@@ -1,14 +1,34 @@
#ifndef FWMON_H
#define FWMON_H
#define STRICT
#define WIN32_LEAN_AND_MEAN
#define CINTERFACE
#define COBJMACROS
#undef __cplusplus
#include <phdk.h>
#include "wf.h"
#include "resource.h"
extern PPH_PLUGIN PluginInstance;
#define SETTING_PREFIX L"ProcessHacker.FirewallMonitor."
#define SETTING_NAME_FW_TREE_LIST_COLUMNS (SETTING_PREFIX L"FwTreeListColumns")
#define SETTING_NAME_FW_TREE_LIST_SORT (SETTING_PREFIX L"FwTreeListSort")
typedef struct _FIREWALL_CONTEXT
{
HWND ListViewHandle;
HWND TreeViewHandle;
HWND ReBarHandle;
HWND ToolBarHandle;
FW_PROFILE_TYPE Flags;
FW_DIRECTION Direction;
PH_LAYOUT_MANAGER LayoutManager;
} FIREWALL_CONTEXT, *PFIREWALL_CONTEXT;
typedef struct _FW_EVENT_ITEM
{
LARGE_INTEGER Time;
@@ -64,4 +84,11 @@ VOID SaveSettingsFwTreeList(
VOID
);
INT_PTR CALLBACK FirewallDlgProc(
__in HWND hwndDlg,
__in UINT uMsg,
__in WPARAM wParam,
__in LPARAM lParam
);
#endif
+50 -4
View File
@@ -23,6 +23,7 @@
#include "fwmon.h"
#include "resource.h"
#define FIREWALL_MENUITEM 1
VOID NTAPI LoadCallback(
__in_opt PVOID Parameter,
@@ -44,11 +45,17 @@ VOID NTAPI MainWindowShowingCallback(
__in_opt PVOID Context
);
VOID NTAPI MenuItemCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
);
PPH_PLUGIN PluginInstance;
PH_CALLBACK_REGISTRATION PluginLoadCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginUnloadCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginShowOptionsCallbackRegistration;
PH_CALLBACK_REGISTRATION MainWindowShowingCallbackRegistration;
PH_CALLBACK_REGISTRATION PluginMenuItemCallbackRegistration;
LOGICAL DllMain(
__in HINSTANCE Instance,
@@ -90,6 +97,12 @@ LOGICAL DllMain(
NULL,
&PluginShowOptionsCallbackRegistration
);
PhRegisterCallback(
PhGetPluginCallback(PluginInstance, PluginCallbackMenuItem),
MenuItemCallback,
NULL,
&PluginMenuItemCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackMainWindowShowing),
@@ -99,13 +112,13 @@ LOGICAL DllMain(
);
{
static PH_SETTING_CREATE settings[] =
PH_SETTING_CREATE settings[] =
{
{ StringSettingType, SETTING_NAME_FW_TREE_LIST_COLUMNS, L"" },
{ IntegerPairSettingType, SETTING_NAME_FW_TREE_LIST_SORT, L"0,2" }
};
PhAddSettings(settings, sizeof(settings) / sizeof(PH_SETTING_CREATE));
PhAddSettings(settings, _countof(settings));
}
}
break;
@@ -119,7 +132,10 @@ VOID NTAPI LoadCallback(
__in_opt PVOID Context
)
{
NOTHING;
INITCOMMONCONTROLSEX icex = { sizeof(INITCOMMONCONTROLSEX) };
icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES;
InitCommonControlsEx(&icex);
}
VOID NTAPI UnloadCallback(
@@ -143,5 +159,35 @@ VOID NTAPI MainWindowShowingCallback(
__in_opt PVOID Context
)
{
InitializeFwTab();
//InitializeFwTab();
PhPluginAddMenuItem(PluginInstance, PH_MENU_ITEM_LOCATION_VIEW, NULL, FIREWALL_MENUITEM, L"Windows Firewall", NULL);
}
VOID NTAPI MenuItemCallback(
__in_opt PVOID Parameter,
__in_opt PVOID Context
)
{
PPH_PLUGIN_MENU_ITEM menuItem = (PPH_PLUGIN_MENU_ITEM)Parameter;
if (menuItem != NULL)
{
switch (menuItem->Id)
{
case FIREWALL_MENUITEM:
{
PFIREWALL_CONTEXT context = PhAllocate(sizeof(FIREWALL_CONTEXT));
ZeroMemory(context, sizeof(FIREWALL_CONTEXT));
DialogBoxParam(
(HINSTANCE)PluginInstance->DllBase,
MAKEINTRESOURCE(IDD_DIALOG1),
NULL,
FirewallDlgProc,
(LPARAM)context
);
}
break;
}
}
}
+7 -8
View File
@@ -22,10 +22,7 @@
#include "fwmon.h"
#include <Winsock2.h>
#ifndef INCLUDED_FWPMU
#define INCLUDED_FWPMU
#include <fwpmu.h>
#endif
PH_CALLBACK_DECLARE(FwItemAddedEvent);
PH_CALLBACK_DECLARE(FwItemModifiedEvent);
@@ -35,7 +32,7 @@ PH_CALLBACK_DECLARE(FwItemsUpdatedEvent);
HANDLE EngineHandle;
HANDLE EventHandle;
VOID CALLBACK DropEventCallback(__inout VOID* pContext, __in const FWPM_NET_EVENT* pEvent)
VOID CALLBACK DropEventCallback(__inout PVOID pContext, __in const FWPM_NET_EVENT* pEvent)
{
SYSTEMTIME st;
FILETIME ft;
@@ -311,8 +308,6 @@ VOID StopFwMonitor(
VOID
)
{
FWP_VALUE0 value = { 0 };
if (EventHandle)
{
FwpmNetEventUnsubscribe(
@@ -325,13 +320,17 @@ VOID StopFwMonitor(
if (EngineHandle)
{
FWP_VALUE0 value = { 0 };
value.type = FWP_UINT32;
value.uint32 = 0;
// Disable collection of NetEvents
FwpmEngineSetOption(EngineHandle,
FwpmEngineSetOption(
EngineHandle,
FWPM_ENGINE_COLLECT_NET_EVENTS,
&value);
&value
);
FwpmEngineClose(EngineHandle);
+59 -3
View File
@@ -4,15 +4,71 @@
//
#define IDR_MENU1 101
#define IDR_FW 101
#define IDD_DIALOG1 102
#define IDD_FIREWALL 102
#define IDI_FIREWALLICON 103
#define IDD_RULEGENERAL 104
#define IDR_FIREWALLMENU 105
#define IDI_ICONHOME 106
#define IDI_HOMEICON 107
#define IDI_ICONPUBLIC 108
#define IDI_WFICON 109
#define IDI_ICONWORK 110
#define IDI_ICONINBOUND 111
#define IDI_ICONMONITOR 112
#define IDI_ICONOUTBOUND 113
#define IDD_DIALOG2 114
#define IDD_RULEADVANCED 114
#define IDR_MENU2 115
#define IDR_MENUGENERAL 115
#define IDD_RULEUSERS 117
#define IDD_DIALOG3 118
#define IDD_RULESCOPE 118
#define IDD_RULECOMPUTERS 119
#define IDD_RULEEXECUTABLE 120
#define IDD_RULEPORTS 121
#define IDC_FIREWALL_LIST 1001
#define IDC_TREE1 1002
#define IDC_EDIT1 1003
#define IDC_EDIT2 1004
#define IDC_CHECK1 1005
#define IDC_RADIO1 1006
#define IDC_CHECK2 1006
#define IDC_RADIO2 1007
#define ID_CLOSE 1007
#define IDC_RADIO3 1008
#define IDC_CHECK3 1008
#define IDC_RADIO4 1009
#define IDC_RADIO5 1010
#define IDC_COMBO1 1013
#define IDC_COMBO2 1014
#define IDC_LIST1 1014
#define IDC_BUTTON1 1015
#define IDC_COMBO3 1015
#define IDC_BUTTON2 1016
#define IDC_LIST2 1017
#define IDC_BUTTON3 1018
#define IDC_BUTTON4 1019
#define IDC_SYSLINK1 1020
#define IDC_BUTTON5 1021
#define IDC_BUTTON6 1022
#define ID_EVENT_COPY 40001
#define ID_PROPERTIES_EDIT 40002
#define ID_PROPERTIES_DELETE 40003
#define ID_PROPERTIES_PROPERTIES 40004
#define ID_PROPERTIES_DISABLE 40005
#define ID_PROPERTIES_CUT 40006
#define ID_PROPERTIES_COPY 40007
#define ID_PROPERTIES 40008
#define ID_OPTIONS_EXIT 40009
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_RESOURCE_VALUE 122
#define _APS_NEXT_COMMAND_VALUE 40010
#define _APS_NEXT_CONTROL_VALUE 1022
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

File diff suppressed because it is too large Load Diff