add microsoft accounts upn #7409

Signed-off-by: si458 <simonsmith5521@gmail.com>

si458 committed Jan 31, 2026 at 12:11 UTC aa864349e307a3a95a0407e69af8294eb9a28d8f
1 file changed +24 -19
agents/meshcore.js
+24 -19
@@ -208,26 +208,31 @@ function getLogonCacheKeys() {
208
209 function getJoinState() {
210 if (process.platform != 'win32') { return -1; }
211 -
211 var isAzureAD = false;
212 var isOnPrem = false;
214 -
213 + var isHybrid = false;
214 + var isMicrosoft = false;
215 // 1 Azure AD / Entra ID
216 try {
217 const joinInfo = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\CloudDomainJoin\\JoinInfo');
218 isAzureAD = Array.isArray(joinInfo.subkeys) && joinInfo.subkeys.length > 0;
219 } catch (e) {}
220 -
220 // 2 On-prem AD
221 try {
222 const tcpip = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters','Domain');
223 isOnPrem = !!(tcpip !== "" || null);
224 } catch (e) {}
226 -
227 - if (isAzureAD && isOnPrem) return 12;
228 - if (isAzureAD) return 1;
225 + // 4 Hybrid AD
226 + isHybrid = isAzureAD && isOnPrem;
227 + // 8 Microsoft Account
228 + try {
229 + const userAccounts = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'SOFTWARE\\Microsoft\\IdentityStore\\LogonCache\\D7F9888F-E3FC-49b0-9EA6-A85B5F392A4F');
230 + isMicrosoft = Array.isArray(userAccounts.subkeys) && userAccounts.subkeys.length > 0;
231 + } catch (e) {}
232 + if (isMicrosoft) return 8;
233 + if (isHybrid) return 4;
234 if (isOnPrem) return 2;
230 -
235 + if (isAzureAD) return 1;
236 return 0;
237
238 }
@@ -783,30 +788,30 @@ function onUserSessionChanged(user, locked) {
788 else if (user && !locked && (JSON.stringify(a[i]) === JSON.stringify(user))) { meshCoreObj.lusers.splice(meshCoreObj.lusers.indexOf(un), 1); }
789 if (u.indexOf(un) == -1) { u.push(un); } // Only push users in the list once.
790 if ((a[i].Domain != null && a[i].Domain == 'AzureAD') || getJoinState() == 1 ){
786 - // AzureAD to-do
787 - // var userGUID = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\CloudDomainJoin\\JoinInfo');
788 - // if (userGUID != null){
789 - // var user = require('win-registry').QueryKey(require('win-registry').HKEY.LocalMachine, 'SYSTEM\\CurrentControlSet\\Control\\CloudDomainJoin\\JoinInfo\\' + userGUID.subkeys[0], 'UserEmail');
790 - // if (user != null) u[i].UPN = user;
791 - // }
791 var userobj = getLogonCacheKeys();
793 -
792 if(userobj && userobj.length > 0){
795 -
793 for (var j = 0; j < userobj.length; j++) {
794 var u = userobj[j];
798 -
799 - if (u && u.SAM && u.SAM[0].trim().toLowerCase() === a[i].Username) {
795 + if (u && u.SAM && u.SAM[0].trim() === a[i].Username) {
796 meshCoreObj.upnusers.push(u.UPN);
797 break;
798 }
799 }
804 -
800 }
806 -
801 } else if (a[i].Domain != null) {
802 if (ret != null && ret.PartOfDomain === true) {
803 meshCoreObj.upnusers.push(a[i].Username + '@' + ret.Domain);
804 + } else if (getJoinState() == 8) { // One account with Microsoft Account
805 + var userobj = getLogonCacheKeys();
806 + if(userobj && userobj.length > 0){
807 + for (var j = 0; j < userobj.length; j++) {
808 + var u = userobj[j];
809 + if (u && u.SAM && u.SAM.length == 0 && u.UPN && u.UPN != '') {
810 + meshCoreObj.upnusers.push(u.UPN);
811 + break;
812 + }
813 + }
814 + }
815 }
816 }
817 }