diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 1b53760..a30ef32 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2250,10 +2250,13 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('win-bcd', Buffer.from('eJzVV21v2zYQ/m7A/+HmD5XcqkqXFQPmIBi8xG2NJHYXpQ2COAho6SyzkUmXovyywP99R73Y8lvbtWix8oNFkce755473dEHT6uVEzmeKx4ONRy++PUPaAuNEZxINZaKaS5FtVKtnHMfRYwBJCJABXqI0Bwznx75jgPvUcUkDYfuC7CNQC3fqtWPqpW5TGDE5iCkhiRG0sBjGPAIAWc+jjVwAb4cjSPOhI8w5XqYWsl1uNXKTa5B9jUjYUbiY3oblMWAaYMWaAy1HjcODqbTqctSpK5U4UGUycUH5+2TVsdrPSe05sQ7EWEcg8KPCVfkZn8ObExgfNYniBGbglTAQoW0p6UBO1VccxE6EMuBnjKF1UrAY614P9FrPBXQyN+yADHFBNSaHrS9GvzV9NqeU61ct6/edN9dwXXz8rLZuWq3POhewkm3c9q+anc79PYKmp0bOGt3Th1AYoms4GysDHqCyA2DGBBdHuKa+YHM4MRj9PmA++SUCBMWIoRygkqQLzBGNeKxiWJM4IJqJeIjrtMkiLc9IiNPDwx5g0T4RgZC1Gc4j+16tfKYRWHCFJGq4RgeF0fZkj/kUUALOde2lS7cj5X0yQmr7uIM/VeUGXa+5KKY3FpTLgKurDt4BrVez5vHGke/HfZ6fT/AgGtzqubArZW/Ww5YByiSkZk8+olSKPTCuquXUbixDmSi6aEIkGUdrS9LYVsB04xULF20/To8ptmbnnp2DL6rpUdhFaFdP4LFlgFUarcmo2hDfMq4bs24ts3yisGIC4wJ4SZol8yO7LobU9C1bfVUT1iFwvSMGw/5wGjbeC2Um6SwjQVuUjqVqWc7efwKBFo+UMgJQipzy+8Km7A0WIg+4JzksgMlg2WRCYsSXAl9kFykmnJ/StKUO7ek8I6E00P51iJ70G6iiEl6mkOLrVS06ewqGQvxNHrLXE31bx6Pl8edzPB6Sv/AHCYk6ynswArVz5TOZXoDjFDjVoB+MLUZipTIHRT/ZNyW2EVhupbHBnghA/RQTahg23H27LARlj+JnGXi77nC0DSoOZF8Td0tjc8+gTdnrRv3XPosuqDmSkWBCPRuvKvWRa93kvF4IoVWMvJQ01I2p8gQqr6UtNRBPZXqodezKGYlcA6IJIqMumzN2kweHn+Ra1nrCcuptO7D0Uouq1mPlJcDlkS6AZaQAi0oehbJ024mRQrcvxNU84ye8DtSYZIEfKb9IdgfHzDNgvVSRpDcHDQcH+/njG4eX5wT5OxWD9iXBqfLD/nHJ0p9vRmkPNmz9f612Pw26KKkmdI2ffvs+1aeeJhQbZiKZekpFtLao9JfU4dSJL8cm6T/M52XikTDevG/urKkmny6DcoI3UiGdllT/eizJYoPYJUo969RoOL+BVPxkEVE8Fu6CGhUHv8HTTa/hCdPVtGQJgRMUYzraarPfn9prQI4kkFCmOgqLJWmi8pWBu8sio3dy87q2O4Pp7Fn3Snyq1FMnO1y1dheypM1owmjGD/j14ZvZuT3mUYxcfI7TCN/Oqum21hNna/l5Wu4CXNAYQ7oW7gq+Mreuv0P6GtTCanAvFWS/sjoub3OnQM1U0+MpprzKRob5ca7vrshvFYtPyNnRnr33d+Qym3lexXT7tg4ZopPNnuf3n7KV+7yiOl/uGk+k/ru/T1+muEz+tN52NgvYEbRxiyv+ap1f9E9bd13WlfX3cuzvZCK0VfIHj4hU7Ty/wrgmwwvdi8XVia7dO84k7f82Q7W9zC+9KPTvbxonu90YsNQ6TWt24t/ATXtbrU=', 'base64'));"); // win-dispatcher a helper to run JavaScript as a particular user. Refer to modules/win-dispatcher.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'));"); + 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('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', 'base64'));"); + + // 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'));"); #endif #ifdef _FREEBSD diff --git a/modules/win-dispatcher.js b/modules/win-dispatcher.js index 45c934c..5d64733 100644 --- a/modules/win-dispatcher.js +++ b/modules/win-dispatcher.js @@ -73,7 +73,7 @@ function dispatch(options) s.write(h); s.write(d); } - d = Buffer.from(JSON.stringify({ command: 'launch', value: { module: this.parent.options.launch.module, method: this.parent.options.launch.method, args: this.parent.options.launch.args } })); + d = Buffer.from(JSON.stringify({ command: 'launch', value: { split: this.parent.options.launch.split?true:false, module: this.parent.options.launch.module, method: this.parent.options.launch.method, args: this.parent.options.launch.args } })); h.writeUInt32LE(d.length + 4); s.write(h); s.write(d); @@ -156,10 +156,18 @@ function connect(ipc) case 'launch': var obj = require(cmd.value.module); global._proxyStream = obj[cmd.value.method].apply(obj, cmd.value.args); - global._proxyStream.pipe(this, { end: false }); - this.pipe(global._proxyStream, { end: false }); - - global._proxyStream.on('end', function () { process.exit(); }); + if (cmd.value.split) + { + global._proxyStream.out.pipe(this, { end: false }); + this.pipe(global._proxyStream.in, { end: false }); + global._proxyStream.out.on('end', function () { process.exit(); }); + } + else + { + global._proxyStream.pipe(this, { end: false }); + this.pipe(global._proxyStream, { end: false }); + global._proxyStream.on('end', function () { process.exit(); }); + } this.on('end', function () { process.exit(); }); break; } diff --git a/modules/win-systray.js b/modules/win-systray.js index 633eb5a..efb5621 100644 --- a/modules/win-systray.js +++ b/modules/win-systray.js @@ -21,11 +21,57 @@ var WM_CLOSE = 0x0010; function postMessage(tid) { - console.log('Post WM_QUIT to: ' + tid); var gm = require('_GenericMarshal'); var user = gm.CreateNativeProxy('User32.dll'); user.CreateMethod('PostThreadMessageA'); - user.PostThreadMessageA(tid, WM_QUIT, 0, 0); + user.PostThreadMessageA(tid, WM_QUIT); +} + +function localsystem_createTrayIcon(trayOptions) +{ + var retVal = new promise(function (res, rej) { this._res = res; this._rej = rej; }); + if (trayOptions.user == null) + { + trayOptions.user = require('user-sessions').getUsername(require('user-sessions').consoleUid()); + } + trayOptions.split = true; + retVal.trayOptions = trayOptions; + retVal._dispatcher = require('win-dispatcher').dispatch({ user: trayOptions.user, modules: [], launch: { module: 'win-systray', method: 'createTrayIcon', args: [trayOptions], split: true } }); + retVal._dispatcher.ret = retVal; + retVal._dispatcher.on('connection', function (connection) + { + this.ret.connection = connection; + this.ret.connection.ret = this.ret; + this.ret.connection.on('data', function (c) + { + var val = c.toString(); + if (val.includes('<>').shift(); + this.ret.tid = parseInt(t); + } + else if (val.includes('<>').shift()); + if (this.ret.trayOptions.menuItems[i].func != null) + { + this.ret.trayOptions.menuItems[i].func.call(this.ret.trayOptions); + } + } + }); + this.ret._cleanup = function _cleanup() { _cleanup.ret._dispatcher.invoke('remove', [_cleanup.ret.tid]); }; + this.ret._cleanup.ret = this.ret; + process.on('exit', this.ret._cleanup); + }); + retVal.remove = function () + { + if (this._cleanup != null) + { + this._cleanup(); + process.removeListener('exit', this._cleanup); + } + }; + return (retVal); } function createTrayIcon(trayOptions) @@ -48,52 +94,65 @@ function createTrayIcon(trayOptions) { options.env[c1e] = process.env[c1e]; } - try + + if (!trayOptions.split) { - options.uid = trayOptions.tsid == null ? require('user-sessions').consoleUid() : trayOptions.tsid; - if (options.uid == (cid = require('user-sessions').getProcessOwnerName(process.pid).tsid)) + try { - delete options.uid; - } - else - { - if (trayOptions.tsid != null && cid != 0) + options.uid = trayOptions.tsid == null ? require('user-sessions').consoleUid() : trayOptions.tsid; + if (options.uid == (cid = require('user-sessions').getProcessOwnerName(process.pid).tsid)) { - retVal._rej('Insufficient permission to set tray icon as uid: ' + trayOptions.tsid); - return (retVal); + delete options.uid; + } + else + { + if (trayOptions.tsid != null && cid != 0) + { + retVal._rej('Insufficient permission to set tray icon as uid: ' + trayOptions.tsid); + return (retVal); + } + retVal.options.type = require('child_process').SpawnTypes.USER; } - retVal.options.type = require('child_process').SpawnTypes.USER; } - } - catch (ee) - { - retVal._rej('Cannot set tray icon when a user is not logged in'); - return (retVal); + catch (ee) + { + retVal._rej('Cannot set tray icon when a user is not logged in'); + return (retVal); + } } retVal.child = require('child_process').execFile(process.env['windir'] + '\\System32\\WindowsPowerShell\\v1.0\\powershell.exe', ['powershell', '-noprofile', '-nologo', '-command', '-'], retVal.options); retVal.child.ret = retVal; retVal.child.on('exit', function () { this.ret._res(); }); retVal.child.descriptorMetadata = 'win-systray'; - retVal.child.stdout.on('data', function (c) - { - var val = c.toString(); - if(val.includes('<>').shift(); - this.parent.ret.tid = parseInt(t); - } - else if (val.includes('<>').shift()); - if (this.parent.ret.trayOptions.menuItems[i].func != null) - { - this.parent.ret.trayOptions.menuItems[i].func.call(this.parent.ret.trayOptions); - } - } - }); - retVal.child.stderr.on('data', function (c) { }); + if (!trayOptions.split) + { + retVal.child.stdout.on('data', function (c) + { + var val = c.toString(); + if (val.includes('<>').shift(); + this.parent.ret.tid = parseInt(t); + } + else if (val.includes('<>').shift()); + if (this.parent.ret.trayOptions.menuItems[i].func != null) + { + this.parent.ret.trayOptions.menuItems[i].func.call(this.parent.ret.trayOptions); + } + } + }); + } + else + { + retVal.out = retVal.child.stdout; + retVal.in = retVal.child.stdin; + } + + retVal.child.stderr.on('data', function (c) { }); retVal.child.stdin.write('$signature_gctid = $env:_tidsig\r\n'); retVal.child.stdin.write('Add-Type -MemberDefinition $signature_gctid -Name MyName -Namespace MyNameSpace -PassThru\r\n'); retVal.child.stdin.write('$tid = [MyNameSpace.MyName]::GetCurrentThreadId();\r\n'); @@ -129,15 +188,34 @@ function createTrayIcon(trayOptions) retVal.child.stdin.write('[void][System.Windows.Forms.Application]::Run($appContext)\r\n'); retVal.child.stdin.write('$Main_Tool_Icon.dispose();\r\n'); retVal.child.stdin.write('exit\r\n'); - retVal._cleanup = function _cleanup() { postMessage(_cleanup.self.tid); }; + retVal._cleanup = function _cleanup(tid) + { + if (process.exitting) + { + postMessage(_cleanup.self.tid); + } + else + { + postMessage(tid ? tid : _cleanup.self.tid); + } + }; retVal._cleanup.self = retVal; process.on('exit', retVal._cleanup); - retVal.remove = function () + retVal.remove = function (tid) { - this._cleanup(); + this._cleanup(tid); process.removeListener('exit', this._cleanup); }; return (retVal); } -module.exports = { createTrayIcon: process.platform == 'win32' ? createTrayIcon : function () { throw (process.platform + ' not supported') } }; +if (require('user-sessions').getProcessOwnerName(process.pid).tsid == 0) +{ + module.exports = { createTrayIcon: process.platform == 'win32' ? localsystem_createTrayIcon : function () { throw (process.platform + ' not supported') } }; +} +else +{ + module.exports = { createTrayIcon: process.platform == 'win32' ? createTrayIcon : function () { throw (process.platform + ' not supported') } }; +} + + \ No newline at end of file