diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 1ca809e..ecb93d9 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2365,13 +2365,13 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'));"); // win-firewall is a helper to Modify Windows Firewall Filters. Refer to modules/win-firewall.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-firewall', Buffer.from('eJztPWtz27ay3z3j/4D4C6lTRfbJ6bkzterccR33Hk9T29d2mmYsT4emIIkWRfLyYVkn9X8/u3iQAAhStBs3Sa85E4sEgd3FYl8AFsz23zY3DuJklQbTWU5e7bzaIUdRTkNyEKdJnHp5EEebG5sbbwOfRhkdkyIa05TkM0r2E8+HH/GmT36haQa1yavBDnGxwpZ4tdUbbm6s4oIsvBWJ4pwUGQUIQUYmQUgJvfNpkpMgIn68SMLAi3xKlkE+Y1gEjMHmxgcBIb7OPajsQfUEniZqNeLlSC2Ba5bnye729nK5HHiM0kGcTrdDXi/bfnt0cHh8fvgSqMUW76KQZhlJ6f8VQQrdvF4RLwFifO8aSAy9JYlT4k1TCu/yGIldpkEeRNM+yeJJvvRSurkxDrI8Da6LXOOTJA36q1YATnkR2do/J0fnW+SH/fOj8/7mxvuji3+dvLsg7/fPzvaPL44Oz8nJGTk4OX5zdHF0cgxPP5L94w/kp6PjN31CgUuAhd4lKVIPJAbIQToGdp1TqqGfxJycLKF+MAl86FQ0LbwpJdP4lqYR9IUkNF0EGY5iBsSNNzfCYBHkTAiyeo8Ayd+2kXm3XkqSNIamlOxJHrqOKHJw+LHKMohSOlVrQMlLKEKurFi1zY3tbS/PYbje0OtiOqWp+5Es6TWIYr5Lvvvuu3/2ydIL4D5PC0ruewOgJ3J9oC8O6SCMYTyUBw5yUkQ+doFENM+oX8DArQ7vAGnm9jY3PnJxQQL9WRCOh8pzvFgAG4Bi539o/vLneFyAMLx8C033b70gZLLx8thbUBW0IyBAn/iNwIBXMCFu2fs4c3oDL/Vnbo/sAY67//rW6VV1lWZ4MeJU5rGC34DJPow9QKJ31P8RFMoVRQMa3V4ii8dB6lyRb4gzGp2vspwu/vFqNHoP5fEyO42XND2f0TAcjW7/PtgZjRIsybAEITp9culsH5AtBwBIfgCoLeeqN6wIvK9uaZjRr7oT4sf3chgZ2quNYUrzIo2IO/Ggp7K9bITdGWT5OC5y+ElRdJyhXhxHrjP2cg+oKiXT9XvkI7OJrNU3e8Qf5PE5GIto6vaGIOhDAwFNUxsCLP5DCGxSy6Gj3oHa5O6rnZ0ds98PZRa/kW9rbHuB3cLq95oCo/VM3oEV8eNpFPybjn+iq8yNr2/6xAtDGHNWUCk12DwXFXlOV2iyoWKdwmDivlAaD4LID4sxzVxo1GtWxzENaU4R5CVUvLKKkU584qUZPViMod1JkSdF7uIg6RYojwvwVKoNAhbBGF9eqWZpVkTzDEqx/QBYsnB7gwzsfu46o3QU4T+npzQIg4hmfXLXR3KHJWsI400AgHaG8PO9ADwIaTTNZ0PyzTdBnV0AARp8vB9KWuGJDa7CAYYPyjm8y+BKpc5RVY5RcccpuAMKWEuFgLvmAUDaETlrcnl3BQM3pncnE9fZ1VDIuigDSu2suM649O/0ybgn2Ghpd+uFBbW3RCPy94amaOkRJUjy1hbqnpQUAMVAqgxEZzZUjei9Kp8QTfGaCAbkYZAU2Qylvjc0bJbUJ/gVylNK34SChp6CGwXrmoNtdFPwZZkufYHoA6J8sZ+m3moQZOxX1LboN5ajgLKbK90qsNFV5IvVaRev0vxYRnzCKAdwPJAY/G9B0xXorCue//XT4YfB29j3wp8hgIDh6hPn/MP5xeHPo9FBkaY0yg/iKE/j8Jzm4EZoeguBTAZ3Mwjfxvs+OpzR6NRLwaMjj0ajH8FJLcE6nMYQCq6q5zPsCdhX1iMUcAwCGhwit40T2uLagaogKqi9fR7PIdpCNWP9l7r0e12R5pzVc2A1b6Twet6MHofbZQ1+RVlkLS/nikLtOb0eeU12eno7AwxeGcTt/oy4FRBNzziSXq/e0AKL8w5CSuc0jfPYj0Nn114Lr3IkZGWtKxUVop+ouMNmaNcp9eYN7zlNb1GXOhHEJBJrPzFFZ50pOqOLOKd/Akn7SdJ1zKagdE9Czb1eVDeyNUc9pbmm526csBmQbiwToDaiSznxcatQywO7UEZbv6XMPnrD8hH9Z6pEXGUsTG/BQmEQfIg3hzDzQnUH4QndpM98hKI4Ax/6m1NW1XUmCr1iIiXpBF/wixeyGKJfmVA9oNDnOcd6/x3FKwhODBI+YMyviaJqDI1KwzJWMsvv64BPK8DNVO3zmTm24N6MvJTYRyMW5JtEsXnDFvmdKDOAYRWHdp2WKVYqGXyxcxnB1moi9lWRnQzE4FWSNJRv+DwBAmkQenidGC9q8y7jRcPEqMYkRScUg9I4edLmEqwWp1D+hAEwK6LpQVzUdfX1TnuIGxgmDVC4wZ6kpfLRVeDfe73XwVMjbG4N+mQuPHMmPbTFjGJ9tFwlZs2xBzbLXDLM2iqA4f+2MlXqhXjqs6UbG45aWHtjB4kzwWBvZxh8fyODoir+1FhlFuBl9zqWoaaLwBzhPrkBF2ejfb1n6tUFXJ/3Gy8ePfPX0SAYCjN9DUyrmoAEQD/7fKVAuhlNMYgrSJA9ENOmaoKkshPdZEMDIJlPcxT7raHoonVGNGvoh0FJVpvcCQK0AdP5ArMzmDhZ5Vh2S5gqLYo3pZmD6ZlWSKVNr6KMppwMJuU6ihLjjIMMVy87xDl8AeKTRDpGrPGG0/CnxhvNEUd91eup44/13lqsW/TFioE53ROrWuWoNYizXMEQFc31KskQVq1yKAS1BOaTyHMJwdG7x9czeN+coWnPSi+/R1znJTZDgqE2YwIDaV99fXRMhmsjX3p4Yx3nL53w0qAIB8FtAvwdmm9qIVjt1R9andag6a6w9uoTIeroDC0eTqxit7sZRNTq7axrQq2bLCpc3XepcYXuJKoVQ8VJ0OjP9xFPaPUN93MYdfU+zy6CPLuIZxfx7CL+qIv4q3gIxUfc0jSYrH5BVS2dw1EE85w+6jJui7AbXqEPRnriFWHOHo3NJzaBzBdJn8RyHbfcpNTtGINv5a9ACQP2FmX4wANXxMwBvNALW5i+SCpLyFDZzKHubbRqdbtZMgBJiYowXL8+YwLGbuHeIVBnWUqoTUgNacBLl4gGtCyMWSQv9hiVqAiMG/BXUQK5BdV3ejWTjhcbthu+GXWDm1HQutqJuum+/RPPLbvLNUx8Xafkcfv6Tgs22f8SEm5NKL2uCRX06/JGr8I345sk7QGEsO43yIDb8ILLFvlvovaA7DbVBxveJ8LpltV7tpUqjai53LBur9e2O4SXRW5aitmWdDx/+IDmszReQnRxFEE4EYxFnIJycym6zvK3gBdXu4wZfFCbuGAhz1KkBI8Gz18I/ec7+XIVqwGcGe9sb5OjCVlixl5OZjQF04rpbywnDy3kOKZZ5OSEYnLbYDAgBzPqzzFfMaMUiVpiohrPYASqCMuiFBaZM0bGVa5qp0uiaxa3SUDV1lWIoE8uUrrwEuk3MIMnDscRcxcwj+A3OQbolZcAsjCJQtS7aiZLTdtQWyhjqqTvyLf6YqL7QmJvEDJsKiitcjoe7ootYTWYVTCaHdbwDRIYwZcMmOmtHuMKeD6SyD3gJCp232r1eUIRM8d6AkLDWnuTrrt6z6w+cw0QvKz8ETvMaNqZsTZZJa8GQ1Rn3cMJ0buHZpgZHjt5j7dEHba6/TiCAC6HiWs2q3SxUrmakjo4Ryao5+g72G8VD5t1+Qx77Gi3H8lxDJb2R/Tq8PiBZvB0Af7EUUNrExTMkjFZHHNu5D2DtR+toDn8hac38cILInjkN1ByWlzDLBxK+A2WpMGtl1Ms4netWA/HUwq+zgMeZV7oiJILWcCzgqo+/RDG/rzs0z4mFbaCfwOTODYOjvHwkRxhP46i67iIkGknRQ7P8JcXcKD31oE8F2nI3YZzv8TvVcgZ5YCPpUVCCesXPF+z/rX2iGZ+GiQS5lh57MgGnKlyBrCuAlY2krLr8AwzxDVcBTPlraSMjvlj1FlUqSKqTEoBZxTDIwop3K9ACvUJkkVYcUkHgYlVqBbMZXITr83v1yqCqG3ogafrwbjUg1LqEyH1im4kUjeO43y/PPMgoLUxGg+KpBPPpxerhBEUyIKcF+hkvceDFfAUepF4wiMXULAUt1DKM5N4Jh68Sb1srX7WtdGhUKwJ8ooZDinGbDDf0AlNL+J3GU2RU/hUwH31BlghX3hJsmbEWY7X/nic8m44IT4HScs4lllhZXU849DSQLCmwpGyglYkVaJX1aBEY/UEJzyisyzzWub5qv24dEB8DuJoEkyLlCvSvjAfwi5elUXlfmADzAKj2lwsn0rYZ+JojsP6Vd0fx4eR7yXVYlQD1DcWW9RUVTFIl4oVrgzwWmSKDVpXFU1T4F946ZTmDCH3Zqjpd3j8ZgWSmGkFmK8K800sex9MAk4u6DhmkRqlghCjkLLE17W9sKvXZennqhFWtEl5xPS/tThKa3vJo4C+jA1QXljJWgh+ukq6iIpg9VqaTMNWDsl7Cel9ZbIc1WZdcSmPVuuI1gxGl7onUbj6GQwRH+Ear7qAOFUNTFtFNoxrK8YZPY+L1KePJ6uLfpxAeRqMKRM6mXf9UEQny2h9l049f+5N1xJ0Gno5zHUWa+sxhTnP43Q9yNKTl6JWxrBloNpXwlhH89Vdhe7UCEaaq+lRSEM93SN1qiwS87tV1uRVX4yW7qnmxtDH3WpblnVXxtY4QbPjapWGbxnxzDRH2W/Eoy5strNbltyXKzZf7c7nGWPSX3nn8y++8fmJj5Z+0XuLSv91UfiKO6KdmpzYd6nZlt9E2VxQ4RibcppwPO/B/oX2YC2DrTs8bzxu93aG7T+myybDL5bN8eCmfTKo1ANzVU6H1UwTaG/PjYIXzCSqu2V1e9rILc1gEs1iCrsrEUib+6jj6c1YTBQ2+Lq/VT4m8PwpgK+zE+vs9PY2ecfmr7ijhge1SIWtbqzZCS7TWn/9Xwwwvg5QLZOBrTWRK0n/jiU7S2zWNrRSeKfbQPz4xuw3lml/RrMizDMXE+stKYrasTeecTJnp+LlCRjlNVvtxpidnVtpOF5fnSvh1esbXup2qTw7r/RYbrDx5mvOyrs3gOqmtrd202wq2NneeXWw8kY/J9/xWC/uV1UAtJM/c5n0cKUhqerMWw7J20+8N2xK6eGPcghe09VWZ8kFZf35zic76vg1HRxVggbGNwg1bmV1Ut5kM9BYPMhLcIdlD4tg8K7jrAwr2g70YSdRX1XV/ORHFP3FuKPpT7TA2XK88GlOXxlINE9gfWvFdG1PhGBT5FjNxFGpubYfZMSG9Ff14F7oZflR/bDhUM+aIC60ao/kmDEWX42wGG77+UL6ay0vSfmACcSd8msWag2bIWtJXlLDWPWUFRqb+jpCCxLOCrcBhvgIiMjV+v33Jly8HjhKeUqeFTwiCWJdDh1ebclaD0h5suVnNTKI1Dj0kCN7HVDgZaKwHtCUHH5AqgVej0oFMQmSFpD7s0dQUk/6qEcAlRazkIG8ROV+Tb5drzDtZ3jpr/IQbwNFTQdZH3qo5qHS8dC5Nl5r0rRcDQgbMs7N1x0CKJ2AGqQWDtYp64DixnWOY7LAaQvNnI7j03Ru1IiePsvJUewXhG1J6TMaYzijgXUNjL1gHw6sCFIdiOFB1Zl8WVb7PEC7P2pYaFgTWwHtVWjF4hbtg0M8emHLE8hlnriyF8WOMeCfLZ7SCHjKOWgN0VPNpnVE2qTXol52u3OvIrZ8M0/X5GrJoHk90FDRz3Fu71lDu2sopiM9q+j/axXttGzfZTG+MfETV+KH6knJF1AyQDm17orgSyVVsnXHlEHhSeFqm3KdvBTiogjG27ffOr3ayo9YJzEgPCIwU8hZg1Zf07V/ShSgocpEZe5oqqXGlumccJvxzweaaa5lAqnTb54EyEtJ4SxTBtXMPi01UM/gU7NFu2AyczOddJHj97YLKJ6miSgpMvkgciid8qvGV49ZHQIxN+1jOWDMDnGAijQIMeDlusVu3VsK2neWcKLdUq2vb+jjsSncAio3loIrTq5+3k3fLsK6+FEjZ69qVVvuL73V57D1f9JWwJNvZmg2vW5bu+QAPUH007TK+fkjo371mSZrwkyjDyndnEKhFk994nBK2IH1EVV9LVBbuWtesrNMnGUCj9nS3K62LMl0TA2qDElBbXak2Z6I3ec9a1aQZlhKGM+B5BccSErEauhoRo3GSXuUMct/XFCZsgX7bwlglDAuAPPTqIOm3dltKDfCCduCz25DudHUMhHdbSg3Whrx8W5DudGqbvl3G8qNhjUG7zaUK0PPh4gHp59qKOwOouOANK/PdRyWxtWDjoNjndp0HKIm1/2JBuo/mD8E+A==', 'base64'), '2021-11-03T11:07:09.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-firewall', Buffer.from('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', 'base64'), '2021-11-08T12:56:17.000-08:00');"); // win-systray is a helper to add a system tray icon with context menu. Refer to modules/win-systray.js duk_peval_string_noresult(ctx, "addCompressedModule('win-systray', Buffer.from('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', 'base64'));"); // win-com is a helper to add COM support. Refer to modules/win-com.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-com', Buffer.from('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', 'base64'), '2021-11-02T20:54:38.000-07:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-com', Buffer.from('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', 'base64'), '2021-11-08T11:42:56.000-08:00');"); // win-wmi is a helper to add wmi support using win-com. Refer to modules/win-wmi.js duk_peval_string_noresult(ctx, "addCompressedModule('win-wmi', Buffer.from('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', 'base64'), '2021-11-02T14:31:34.000-07:00');"); @@ -2454,7 +2454,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('util-language', Buffer.from('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', 'base64'));"); // agent-instaler: Refer to modules/agent-installer.js - duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('agent-installer', Buffer.from('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', 'base64'), '2021-11-08T12:56:58.000-08:00');"); // file-search: Refer to modules/file-search.js duk_peval_string_noresult(ctx, "addCompressedModule('file-search', Buffer.from('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', 'base64'));"); diff --git a/modules/agent-installer.js b/modules/agent-installer.js index 2438fb3..bedec39 100644 --- a/modules/agent-installer.js +++ b/modules/agent-installer.js @@ -250,69 +250,6 @@ function installService(params) } } - - if(process.platform == 'win32') - { - var loc = svc.appLocation(); - process.stdout.write(' -> Writing firewall rules for ' + options.name + ' Service...'); - - var rule = - { - DisplayName: options.name + ' Management Traffic (TCP-1)', - direction: 'inbound', - Program: loc, - Protocol: 'TCP', - Profile: 'Public, Private, Domain', - LocalPort: 16990, - Description: 'Mesh Central Agent Management Traffic', - EdgeTraversalPolicy: 'allow', - Enabled: true - }; - require('win-firewall').addFirewallRule(rule); - - rule = - { - DisplayName: options.name + ' Management Traffic (TCP-2)', - direction: 'inbound', - Program: loc, - Protocol: 'TCP', - Profile: 'Public, Private, Domain', - LocalPort: 16991, - Description: 'Mesh Central Agent Management Traffic', - EdgeTraversalPolicy: 'allow', - Enabled: true - }; - require('win-firewall').addFirewallRule(rule); - - rule = - { - DisplayName: options.name + ' Peer-to-Peer Traffic (UDP-1)', - direction: 'inbound', - Program: loc, - Protocol: 'UDP', - Profile: 'Public, Private, Domain', - LocalPort: 16990, - Description: 'Mesh Central Agent Peer-to-Peer Traffic', - EdgeTraversalPolicy: 'allow', - Enabled: true - }; - require('win-firewall').addFirewallRule(rule); - - rule = - { - DisplayName: options.name + ' Peer-to-Peer Traffic (UDP-2)', - direction: 'inbound', - Program: loc, - Protocol: 'UDP', - Profile: 'Public, Private, Domain', - LocalPort: 16991, - Description: 'Mesh Central Agent Peer-to-Peer Traffic', - EdgeTraversalPolicy: 'allow', - Enabled: true - }; - require('win-firewall').addFirewallRule(rule); - process.stdout.write(' [DONE]\n'); - } process.stdout.write(' -> Starting service...'); try { @@ -539,17 +476,18 @@ function serviceExists(loc, params) if(process.platform == 'win32') { process.stdout.write(' -> Checking firewall rules for previous installation...'); - require('win-firewall').removeFirewallRule({ program: loc }).then(function () + if(require('win-firewall').removeFirewallRule({ program: loc })) { // SUCCESS process.stdout.write(' [DELETED]\n'); uninstallService(params); - }, function () + } + else { // FAILED process.stdout.write(' [No Rules Found]\n'); uninstallService(params); - }); + } } else { diff --git a/modules/win-com.js b/modules/win-com.js index 70beb6e..0229c3e 100644 --- a/modules/win-com.js +++ b/modules/win-com.js @@ -45,6 +45,7 @@ function createInstance_finalizer() } function createInstance(RFCLSID, RFIID, options) { + console.info1('CoInitializeEx()'); ole32.CoInitializeEx(0, COINIT_MULTITHREADED); ole32.CoInitializeSecurity(0, -1, 0, 0, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE, 0); diff --git a/modules/win-firewall.js b/modules/win-firewall.js index 51d4176..18add1d 100644 --- a/modules/win-firewall.js +++ b/modules/win-firewall.js @@ -1,5 +1,5 @@ /* -Copyright 2020 Intel Corporation +Copyright 2020-2021 Intel Corporation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,760 +14,485 @@ See the License for the specific language governing permissions and limitations under the License. */ -var promise = require('promise'); -var winreg = require('win-registry'); +const GM = require('_GenericMarshal'); +var OleAut = GM.CreateNativeProxy('OleAut32.dll'); +OleAut.CreateMethod('VariantClear'); -//attachDebugger({ webport: 9995, wait: true }).then(console.log, console.log); +const guidRWRule = "{2C5BC43E-3369-4C33-AB0C-BE9469677AF4}"; +const CLSID_NetFwPolicy2 = "{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD}"; +const CLSID_NetFwRule = "{2C5BC43E-3369-4C33-AB0C-BE9469677AF4}"; +const IID_INetFwPolicy2 = "{98325047-C671-4174-8D81-DEFCD3F03186}"; +const IID_IEnumVARIANT = "{00020404-0000-0000-C000-000000000046}"; +const IID_INetFwRule = '{AF230D27-BABA-4E42-ACED-F524F22CFCE2}'; -function netsecurityExists() +const UnknownFunctions = ['QueryInterface', 'AddRef', 'Release']; +const FirewallFunctions = [ + 'QueryInterface', + 'AddRef', + 'Release', + 'GetTypeInfoCount', + 'GetTypeInfo', + 'GetIDsOfNames', + 'Invoke', + 'get_CurrentProfileTypes', + 'get_FirewallEnabled', + 'put_FirewallEnabled', + 'get_ExcludedInterfaces', + 'put_ExcludedInterfaces', + 'get_BlockAllInboundTraffic', + 'put_BlockAllInboundTraffic', + 'get_NotificationsDisabled', + 'put_NotificationsDisabled', + 'get_UnicastResponsesToMulticastBroadcastDisabled', + 'put_UnicastResponsesToMulticastBroadcastDisabled', + 'get_Rules', + 'get_ServiceRestriction', + 'EnableRuleGroup', + 'IsRuleGroupEnabled', + 'RestoreLocalFirewallDefaults', + 'get_DefaultInboundAction', + 'put_DefaultInboundAction', + 'get_DefaultOutboundAction', + 'put_DefaultOutboundAction', + 'get_IsRuleGroupCurrentlyEnabled', + 'get_LocalPolicyModifyState' +]; +const RulesFunctions = [ + 'QueryInterface', + 'AddRef', + 'Release', + 'GetTypeInfoCount', + 'GetTypeInfo', + 'GetIDsOfNames', + 'Invoke', + 'get_Count', + 'Add', + 'Remove', + 'Item', + 'get__NewEnum' +]; +const EnumVariantFunctions = [ + 'QueryInterface', + 'AddRef', + 'Release', + 'Next', + 'Skip', + 'Reset', + 'Clone' +]; +const RuleFunctions = [ + 'QueryInterface', + 'AddRef', + 'Release', + 'GetTypeInfoCount', + 'GetTypeInfo', + 'GetIDsOfNames', + 'Invoke', + 'get_Name', + 'put_Name', + 'get_Description', + 'put_Description', + 'get_ApplicationName', + 'put_ApplicationName', + 'get_ServiceName', + 'put_ServiceName', + 'get_Protocol', + 'put_Protocol', + 'get_LocalPorts', + 'put_LocalPorts', + 'get_RemotePorts', + 'put_RemotePorts', + 'get_LocalAddresses', + 'put_LocalAddresses', + 'get_RemoteAddresses', + 'put_RemoteAddresses', + 'get_IcmpTypesAndCodes', + 'put_IcmpTypesAndCodes', + 'get_Direction', + 'put_Direction', + 'get_Interfaces', + 'put_Interfaces', + 'get_InterfaceTypes', + 'put_InterfaceTypes', + 'get_Enabled', + 'put_Enabled', + 'get_Grouping', + 'put_Grouping', + 'get_Profiles', + 'put_Profiles', + 'get_EdgeTraversal', + 'put_EdgeTraversal', + 'get_Action', + 'put_Action' +]; + +const protocolNumbers = [ + 'HOPOPT', + 'ICMP', + 'IGMP', + 'GGP', + 'IPv4', + 'ST', + 'TCP', + 'CBT', + 'EGP', + 'IGP', + 'BBN-RCC-MON', + 'NVP-II', + 'PUP', + 'ARGUS', + 'EMCON', + 'XNET', + 'CHAOS', + 'UDP', + 'MUX', + 'DCN-MEAS', + 'HMP', + 'PRM', + 'XNS-IDP', + 'TRUNK-1', + 'TRUNK-2', + 'LEAF-1', + 'LEAF-2', + 'RDP', + 'IRTP', + 'ISO-TP4', + 'NETBLT', + 'MFE-NSP', + 'MERIT-INP', + 'DCCP', + '3PC', + 'IDPR', + 'XTP', + 'DDP', + 'IDPR-CMTP', + 'TP++', + 'IL', + 'IPv6', + 'SDRP', + 'IPv6-Route', + 'IPv6-Frag', + 'IDRP', + 'RSVP', + 'GRE', + 'DSR', + 'BNA', + 'ESP', + 'AH', + 'I-NLSP', + 'SWIPE', + 'NARP', + 'MOBILE', + 'TLSP', + 'SKIP', + 'IPv6-ICMP', + 'IPv6-NoNxt', + 'IPv6-Opts', + '', + 'CFTP', + '', + 'SAT-EXPAK', + 'KRYPTOLAN', + 'RVD', + 'IPPC', + '', + 'SAT-MON', + 'VISA', + 'IPCV', + 'CPNX', + 'CPHB', + 'WSN', + 'PVP', + 'BR-SAT-MON', + 'SUN-ND', + 'WB-MON', + 'WB-EXPAK', + 'ISO-IP', + 'VMTP', + 'SECURE-VMTP', + 'VINES', + 'TTP', + 'IPTM', + 'NSFNET-IGP', + 'DGP', + 'TCF', + 'EIGRP', + 'OSPFIGP', + 'Sprite-RPC', + 'LARP', + 'MTP', + 'AX.25', + 'IPIP', + 'MICP', + 'SCC-SP', + 'ETHERIP', + 'ENCAP', + '', + 'GMTP', + 'IFMP', + 'PNNI', + 'PIM', + 'ARIS', + 'SCPS', + 'QNX', + 'A/N', + 'IPComp', + 'SNP', + 'Compaq-Peer', + 'IPX-in-IP', + 'VRRP', + 'PGM', + '', + 'L2TP', + 'DDX', + 'IATP', + 'STP', + 'SRP', + 'UTI', + 'SMP', + 'SM', + 'PTP', + 'ISIS over IPv4', + 'FIRE', + 'CRTP', + 'CRUDP', + 'SSCOPMCE', + 'IPLT', + 'SPS', + 'PIPE', + 'SCTP', + 'FC', + 'RSVP-E2E-IGNORE', + 'Mobility Header', + 'UDPLite', + 'MPLS-in-IP', + 'manet', + 'HIP', + 'Shim6', + 'WESP', + 'ROHC', + 'Ethernet' +]; + +function ProfileMaskToString(mask) { - var child; - var command = 'Get-Module -ListAvailable -Name netsecurity'; - try - { - if (require('os').arch() == 'x64') - { - child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - } - catch(e) - { - return (false); - } - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - try - { - child.waitExit(2000); - } - catch(e) - { - return (false); - } - - return (child.stdout.str != ''); -} - -function stripUnrecognizedKeys(obj, allowedKeys) -{ - for(var key in obj) - { - if(!allowedKeys.includes(key)) - { - delete obj[key]; - } - } -} - -function parseCmdletOutput(data) -{ - var touched; - var ret = []; - var chunks = data.trim().split('\r\n\r\n'); - var lines, x, obj; - for (var i = 0; i < chunks.length; ++i) - { - obj = {}; touched = false; - lines = chunks[i].split('\r\n'); - for (x = 0; x < lines.length; ++x) - { - var d = lines[x].indexOf(':'); - var key = lines[x].substring(0, d).trim(); - var value = lines[x].substring(d + 1).trim(); - if (key != "") { obj[key] = value; touched = true; } - } - if (touched) { ret.push(obj); } - } - return (ret); -} -function fetchPortFilters(rules) -{ - var i; - if (!Array.isArray(rules)) - { - rules = [rules]; - } - for (i = 0; i < rules.length; ++i) - { - try - { - filter = winreg.QueryKey(winreg.HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules', rules[i].Name); - } - catch(fe) - { - continue; - } - tokens = filter.split('|'); - for (k = 0; k < tokens.length; ++k) - { - if ((tokenX = tokens[k].indexOf('=')) > 0) - { - switch (tokens[k].substring(0, tokenX)) - { - case 'Protocol': - rules[i].Protocol = tokens[k].substring(tokenX + 1); - break; - case 'LPort': - rules[i].LocalPort = tokens[k].substring(tokenX + 1); - break; - case 'RPort': - rules[i].RemotePort = tokens[k].substring(tokenX + 1); - break; - case 'App': - rules[i].Program = tokens[k].substring(tokenX + 1); - break; - } - } - } - } + var val = []; + if((mask & 0x1)==0x1) { val.push('DOMAIN');} + if((mask & 0x2)==0x2) { val.push('PRIVATE');} + if((mask & 0x4)==0x4) { val.push('PUBLIC');} + return (val.join(', ')); } function getFirewallRules(options) { - var p = new promise(function (a, r) { this._res = a; this._rej = r; }); - require('events').EventEmitter.call(p, true) - .createEvent('firewallRule'); + var ret = []; + var hr; + var rules = GM.CreatePointer(); + var unknown = GM.CreatePointer(); + var enumerator = GM.CreatePointer(); + var vvar = GM.CreateVariable(GM.PointerSize == 8 ? 24 : 16); + var fetched = GM.CreateVariable(4); + var tmp, rule; + var val = GM.CreatePointer(); + var val_long = GM.CreateVariable(4); - var retVal = [], filter = []; - var command = 'Get-NetFirewallRule'; - if (options.program) { options.Program = options.program; delete options.program; } - if (options.Program) { command = 'Get-NetFirewallApplicationFilter -Program \\"' + options.Program + '\\" | ' + command; } - if (require('os').arch() == 'x64') + var obj; + + var NetFwPolicy2 = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_NetFwPolicy2), require('win-com').IID_IUnknown); + NetFwPolicy2.funcs = require('win-com').marshalFunctions(NetFwPolicy2, FirewallFunctions); + + hr = NetFwPolicy2.funcs.get_Rules(NetFwPolicy2, rules).Val; + rules.funcs = require('win-com').marshalFunctions(rules.Deref(), RulesFunctions); + + var count = GM.CreateVariable(4); + hr = rules.funcs.get_Count(rules.Deref(), count).Val; + + console.info1('Number of Rules: ' + count.toBuffer().readInt32LE()); + + hr = rules.funcs.get__NewEnum(rules.Deref(), unknown); + unknown.funcs = require('win-com').marshalFunctions(unknown.Deref(), UnknownFunctions); + hr = unknown.funcs.QueryInterface(unknown.Deref(), require('win-com').CLSIDFromString(IID_IEnumVARIANT), enumerator); + enumerator.funcs = require('win-com').marshalFunctions(enumerator.Deref(), EnumVariantFunctions); + + while (hr.Val == 0) { - p.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - p.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - p.options = options; - p.child.parent = p; - p.child.stdout.str = ''; p.child.stdout.on('data', function (c) - { - var command; - this.str += c.toString(); - if(this.parent.parent.listenerCount('firewallRule')>0) + OleAut.VariantClear(vvar); + hr = enumerator.funcs.Next(enumerator.Deref(), 1, vvar, fetched); + + if(hr.Val == 0) { - var i; - if((i=this.str.indexOf('\r\n\r\n'))>=0) + rule = GM.CreatePointer(); + tmp = vvar.Deref(8, GM.PointerSize); + tmp.funcs = require('win-com').marshalFunctions(tmp.Deref(), UnknownFunctions); + hr = tmp.funcs.QueryInterface(tmp.Deref(), require('win-com').CLSIDFromString(IID_INetFwRule), rule); + rule.funcs = require('win-com').marshalFunctions(rule.Deref(), RuleFunctions); + if ((options && options.program && rule.funcs.get_ApplicationName(rule.Deref(), val).Val == 0 && val.Deref().Val != 0 + && options.program.toLowerCase() == val.Deref().Wide2UTF8.toLowerCase()) || !options || !options.program) { - var filter, k, tokens, tokenX; - var j = this.str.substring(0, i); - this.str = this.str.substring(i + 4); - - j = parseCmdletOutput(j); - fetchPortFilters(j); - - for(i=0;i 0) - { - this.parent._res(); - return; - } - - var objArr = parseCmdletOutput(this.stdout.str); - fetchPortFilters(objArr); - this.parent._res(objArr); - }); - - return (p); -} - - -function disableFirewallRules(options) -{ - var ret = new promise(function (a, r) { this._res = a; this._rej = r; }); - var command = 'Disable-NetFirewallRule'; - if (options.program) { options.Program = options.program; delete options.program; } - - if (options.Program) - { - command = 'Get-NetFirewallApplicationFilter -Program \\"' + options.Program + '\\" | ' + command; - } - else - { - var key, value; - for (key in options) - { - value = options[key]; - if (value.indexOf(' ') >= 0) { value = '\\"' + options[key] + '\\"'; } - command += ('-' + key + ' ' + value); - } - } - - if (require('os').arch() == 'x64') - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - - ret.child.ret = ret; - ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); }); - ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); }); - ret.child.on('exit', function () - { - if (this.stderr.str != '') - { - this.ret._rej(this.stderr.str.trim()); - } - else - { - this.ret._res(); - } - }); - - return (ret); -} - -function enableFirewallRules(options) -{ - var ret = new promise(function (a, r) { this._res = a; this._rej = r; }); - if (options.program) { options.Program = options.program; delete options.program; } - - var command = 'Enable-NetFirewallRule'; - if (options.Program) - { - command = 'Get-NetFirewallApplicationFilter -Program \\"' + options.Program + '\\" | ' + command; - } - else - { - var key, value; - for (key in options) - { - value = options[key]; - if (value.indexOf(' ') >= 0) { value = '\\"' + options[key] + '\\"'; } - command += ('-' + key + ' ' + value); - } - } - - if (require('os').arch() == 'x64') - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - - ret.child.ret = ret; - ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); }); - ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); }); - ret.child.on('exit', function () - { - if(this.stderr.str != '') - { - this.ret._rej(this.stderr.str.trim()); - } - else - { - this.ret._res(); - } - }); - - return (ret); -} - - -function verifyValues(optionsInput, keyName, keyValues, defaultValue) -{ - var i, j, tmp, ok; - for (var key in optionsInput) - { - if(keyName.toLowerCase() == key.toLowerCase()) - { - tmp = optionsInput[key]; - delete optionsInput[key]; - - if (keyValues == null) - { - optionsInput[keyName] = tmp; - return; - } - else - { - if (tmp!=null) { tmp = tmp.toString().split(','); } - for (j = 0; j < tmp.length; ++j) + obj = {}; + obj._rule = rule; + obj._rule._i = NetFwPolicy2; + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_Name(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.DisplayName = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_Description(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.Description = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_LocalPorts(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.LocalPorts = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_RemotePorts(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.RemotePorts = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_LocalAddresses(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.LocalAddresses = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_RemoteAddresses(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.RemoteAddresses = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_ApplicationName(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.Program = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_InterfaceTypes(rule.Deref(), val).Val == 0 && val.Deref().Val != 0) { obj.InterfaceTypes = val.Deref().Wide2UTF8; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_Enabled(rule.Deref(), val).Val == 0) { obj.Enabled = val.Deref(0, 2).toBuffer().readInt16LE() != 0; } + val.toBuffer().writeUInt32LE(0); if (rule.funcs.get_Direction(rule.Deref(), val).Val == 0) { - ok = false; - for (i=0;i= 0) { value = '\\"' + options[key] + '\\"'; } - command += ('-' + key + ' ' + value); - } + disableFirewallRules(getFirewallRules(arg)); + return; } - try + var h = 0; + for(var i in arg) { - if (require('os').arch() == 'x64') - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - ret.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } + h |= arg[i]._rule.funcs.put_Enabled(arg[i]._rule.Deref(), 0).Val; } - catch(f) + if (h != 0) { throw ('Error disabling rules'); } +} +function enableFirewallRules(arg) +{ + if (!Array.isArray(arg)) { - ret._rej(f.toString()); + enableFirewallRules(getFirewallRules(arg)); + return; + } + + var h = 0; + for (var i in arg) + { + h |= arg[i]._rule.funcs.put_Enabled(arg[i]._rule.Deref(), -1).Val; + } + if (h != 0) { throw ('Error enabling rules'); } +} +function removeFirewallRule(arg) +{ + var ret = false; + + if (Array.isArray(arg)) + { + for(var i in arg) + { + if (removeFirewallRule(arg[i].DisplayName)) { ret = true; } + } return (ret); } - - ret.child.ret = ret; - ret.child.stdout.str = ''; ret.child.stdout.on('data', function (c) { this.str += c.toString(); }); - ret.child.stderr.str = ''; ret.child.stderr.on('data', function (c) { this.str += c.toString(); }); - ret.child.on('exit', function () + if (typeof (arg) == 'string') { - if(this.stderr.str != '') - { - this.ret._rej(this.stderr.str.trim()); - } - else - { - this.ret._res(); - } - }); - return (ret); -} + var num; + var count = GM.CreateVariable(4); + var rules = GM.CreatePointer(); + var NetFwPolicy2 = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_NetFwPolicy2), require('win-com').IID_IUnknown); + NetFwPolicy2.funcs = require('win-com').marshalFunctions(NetFwPolicy2, FirewallFunctions); -function addFirewallRule(options) -{ - var command = 'New-NetFirewallRule'; - var val = convertOptions(options); - var key; - - for (key in val) - { - if (val[key].toString().indexOf(' ') >= 0) + hr = NetFwPolicy2.funcs.get_Rules(NetFwPolicy2, rules).Val; + rules.funcs = require('win-com').marshalFunctions(rules.Deref(), RulesFunctions); + hr = rules.funcs.get_Count(rules.Deref(), count).Val; num = count.toBuffer().readInt32LE(); + hr = rules.funcs.Remove(rules.Deref(), GM.CreateVariable(arg, { wide: true })); + + if(hr.Val == 0) { - command += (' -' + key + ' \\"' + val[key] + '\\"'); - } - else - { - command += (' -' + key + ' ' + val[key] + ''); - } - } - - var child; - try - { - if (require('os').arch() == 'x64') - { - child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - else - { - child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['/C "' + command + '"']); - } - } - catch(f) - { - // Unable to call powershell - return (true); - } - - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - - if(child.stderr.str.trim() != '') - { - throw (child.stderr.str.trim()); - } -} - -function netsh_parseResults(str) -{ - var ret = []; - var i, j, k, obj, tokens; - var blocks = str.split('\r\n\r\n'); - for(i=0;i 0) + count.toBuffer().writeUInt32LE(0); + hr = rules.funcs.get_Count(rules.Deref(), count).Val; + if(count.toBuffer().readInt32LE() protocolNumbers.length)) { throw ('Invalid Protocol'); } + if (typeof (rule.Protocol) == 'string' && (protocolNumbers.findIndex(function (v) { return (v == rule.Protocol); }) < 0)) { throw ('Invalid Protocol'); } - var command = 'netsh advfirewall firewall show rule name=all verbose'; - p.options = options; - p._results = []; - p.child = require('child_process').execFile(process.env['windir'] + '\\System32\\cmd.exe', ['/C "' + command + '"']); - p.child.ret = p; - p.child.stderr.str = ''; p.child.stderr.on('data', function (c) { this.str += c.toString(); }); - p.child.stdout.str = ''; - p.child.stdout.on('data', function (b) + var hr; + var rules = GM.CreatePointer(); + var profile = 0; + var profile_tmp = rule.Profile.split(','); + for (var i in profile_tmp) { - var key, ok; - this.str += b.toString(); - var eX = this.str.lastIndexOf('\r\n\r\n'); - - if (eX >= 0) + switch(profile_tmp[i].toLowerCase().trim()) { - var rules = netsh_parseResults(this.str.substring(0, eX)); - for (var i in rules) - { - ok = true; - for (key in this.parent.ret.options) - { - if(this.parent.ret.options[key] == null || this.parent.ret.options[key] != rules[i][key]) - { - ok = false; - break; - } - } - if (ok) - { - if (this.parent.ret.listenerCount('firewallRule') > 0) - { - this.parent.ret.emit('firewallRule', rules[i]); - } - else - { - this.parent.ret._results.push(rules[i]); - } - } - } - - if (this.str.length - eX > 4) - { - this.str = this.str.substring(eX + 4); - } - } - }); - p.child.on('exit', function () - { - if (this.ret.listenerCount('firewallRule') > 0) - { - this.ret._res(); - } - else - { - if(this.ret._results.length>0) - { - this.ret._res(this.ret._results); - } - else - { - this.ret._rej('No matches'); - } - } - }); - - - return (p); -} -function netsh_disableFirewallRules(options) -{ - var ret = new promise(function (a, r) { this._res = a; this._rej = r; }); - ret.getp = netsh_getFirewallRules(options); - ret.getp.ret = ret; - ret.getp.then(function (rules) - { - var child; - var command; - for (var i in rules) - { - command = 'netsh advfirewall firewall set rule name="' + rules[i].Name + '"' + ' new enable=no'; - child = require('child_process').execFile(process.env['windir'] + '\\System32\\cmd.exe', ['/C "' + command + '"']); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - } - this.ret._res(); - }, function (e) - { - this.ret._rej(e); - }); - return (ret); -} -function netsh_enableFirewallRules(options) -{ - var ret = new promise(function (a, r) { this._res = a; this._rej = r; }); - ret.getp = netsh_getFirewallRules(options); - ret.getp.ret = ret; - ret.getp.then(function (rules) - { - var child; - var command; - for (var i in rules) - { - command = 'netsh advfirewall firewall set rule name="' + rules[i].Name + '"' + ' new enable=yes'; - child = require('child_process').execFile(process.env['windir'] + '\\System32\\cmd.exe', ['/C "' + command + '"']); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - } - this.ret._res(); - }, function (e) - { - this.ret._rej(e); - }); - return (ret); -} -function netsh_addFirewallRule(options) -{ - var val = convertOptions(options); - convertNetSecurityValues(val); - - if (!val.name) - { - if(val.displayname) - { - val.name = val.displayname + ' ' + require('uuid/v4')(); - delete val.displayname; - } - else - { - val.name = require('uuid/v4')(); + case 'private': + profile |= 0x2; + break; + case 'public': + profile |= 0x4; + break; + case 'domain': + profile |= 0x1; + break; } } - stripUnrecognizedKeys(val, ['name', 'dir', 'action', 'program', 'service', 'description', 'enable', - 'profile', 'localip', 'remoteip', 'localport', 'remoteport', 'protocol', - 'interfacetype', 'rmtcomputergrp', 'rmtusrgrp', 'edge', 'security']); + var newrule = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_NetFwRule), require('win-com').IID_IUnknown); + newrule.funcs = require('win-com').marshalFunctions(newrule, RuleFunctions); - var command = 'netsh advfirewall firewall add rule name="' + val.name + '"' - delete val.name; + hr = newrule.funcs.put_Name(newrule, GM.CreateVariable(rule.DisplayName, { wide: true })); + hr = newrule.funcs.put_Direction(newrule, rule.direction.toLowerCase() == 'inbound' ? 1 : 2); + hr = newrule.funcs.put_ApplicationName(newrule, GM.CreateVariable(rule.Program, { wide: true })); + if (rule.Description) { hr = newrule.funcs.put_Description(newrule, GM.CreateVariable(rule.Description, { wide: true })); } + if (rule.EdgeTraversalPolicy != null) { hr = newrule.funcs.put_EdgeTraversal(newrule, rule.EdgeTraversalPolicy ? -1 : 0); } + if (rule.Enabled != null) { hr = newrule.funcs.put_Enabled(newrule, rule.Enabled ? -1 : 0); } + hr = newrule.funcs.put_Protocol(newrule, typeof (rule.Protocol) == 'number' ? rule.Protocol : protocolNumbers.findIndex(function (v) { return (v == rule.Protocol); })); + hr = newrule.funcs.put_Profiles(newrule, profile); + if (rule.LocalPort) { hr = newrule.funcs.put_LocalPorts(newrule, GM.CreateVariable(rule.LocalPort, { wide: true })); } + if (rule.RemotePort) { hr = newrule.funcs.put_RemotePorts(newrule, GM.CreateVariable(rule.RemotePort, { wide: true })); } - for (var i in val) + + var NetFwPolicy2 = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_NetFwPolicy2), require('win-com').IID_IUnknown); + NetFwPolicy2.funcs = require('win-com').marshalFunctions(NetFwPolicy2, FirewallFunctions); + + hr = NetFwPolicy2.funcs.get_Rules(NetFwPolicy2, rules).Val; + rules.funcs = require('win-com').marshalFunctions(rules.Deref(), RulesFunctions); + + hr = rules.funcs.Add(rules.Deref(), newrule); +} + +//attachDebugger({ webport: 9995, wait: true }).then(console.log, console.log); +module.exports = { - if (val[i].toString().indexOf(' ') >= 0 || val[i].toString().indexOf(',') >= 0) { val[i] = ('"' + val[i] + '"'); } - command += (' ' + i + '=' + val[i]); - } - - var child = require('child_process').execFile(process.env['windir'] + '\\System32\\cmd.exe', ['/C "' + command + '"']); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); -} -function netsh_removeFirewallRule(options) -{ - var ret = new promise(function (a, r) { this._res = a; this._rej = r; }); - ret.options = options; - ret.getp = netsh_getFirewallRules(options); - ret.getp.ret = ret; - ret.getp.then(function (rules) - { - var child, command, key, value; - convertNetSecurityValues(this.ret.options); - - for(var i in rules) - { - command = 'netsh advfirewall firewall delete rule name="' + rules[i].Name + '"'; - for(key in this.ret.options) - { - value = this.ret.options[key].toString(); - if (value.indexOf(' ') >= 0) { value = ('"' + value + '"'); } - command += (' ' + key + '=' + value); - } - - child = require('child_process').execFile(process.env['windir'] + '\\System32\\cmd.exe', ['/C "' + command + '"']); - child.stderr.str = ''; child.stderr.on('data', function (c) { this.str += c.toString(); }); - child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); }); - child.waitExit(); - } - this.ret._res(); - }, function (e) { this.ret._rej(e); }); - return(ret); -} - - -if (netsecurityExists()) -{ - module.exports = - { - getFirewallRules: getFirewallRules, - disableFirewallRules: disableFirewallRules, - enableFirewallRules: enableFirewallRules, - addFirewallRule: addFirewallRule, - removeFirewallRule: removeFirewallRule, - netsecurityExists: netsecurityExists - }; -} -else -{ - module.exports = - { - getFirewallRules: netsh_getFirewallRules, - disableFirewallRules: netsh_disableFirewallRules, - enableFirewallRules: netsh_enableFirewallRules, - addFirewallRule: netsh_addFirewallRule, - removeFirewallRule: netsh_removeFirewallRule, - netsecurityExists: netsecurityExists - }; -} \ No newline at end of file + getFirewallRules: getFirewallRules, + disableFirewallRules: disableFirewallRules, + enableFirewallRules: enableFirewallRules, + addFirewallRule: addFirewallRule, + removeFirewallRule: removeFirewallRule, + netsecurityExists: false + }; \ No newline at end of file