如何通过进程用户名判断Windows系统级进程
时间:2026-08-17 | 作者:极客少年 | 阅读:0这段内容主要讲一件事:如何在 Node.js 里调用 Windows 的 tasklist 命令,把当前所有进程的详细信息连同用户名一起拿到。基于这些信息,就能进一步把系统级进程(比如 Windows PowerShell、svchost.exe)和用户级应用(比如 Discord.exe)清楚地区分开,从而更准确地判断进程所处的权限层级。
这段内容要解决的,其实是在 Node.js 里调用 Windows 的 tasklist 命令,把系统中所有进程的详细信息连同用户名一起拿出来。再据此把系统级进程,例如 Windows PowerShell、svchost.exe,和用户级应用,例如 Discord.exe,清晰区分开。最终实现更准确的进程权限层级判断。
判断系统级进程的关键依据
在 Windows 平台上,判断一个进程是否属于系统级,即以 SYSTEM、LOCAL SERVICE、NETWORK SERVICE 或高权限管理员身份运行,关键依据之一是其所属用户名(User Name)。
常见对应关系如下:
SYSTEM、NT AUTHORITYSYSTEM→ 典型系统核心进程,如winlogon.exe、lsass.exeNT AUTHORITYLOCAL SERVICE/NT AUTHORITYNETWORK SERVICE→ 系统服务进程,如dwm.exe、部分svchost.exe实例DOMAINUser或COMPUTERNAMEUsername→ 普通用户启动的进程,如chrome.exe、Discord.exe
在 Node.js 中获取进程用户名
Node.js 本身不提供跨平台的进程用户信息 API,但可通过标准 Windows 命令行工具 tasklist 高效获取。
推荐使用 /V(详细模式)和 /FO csv(CSV 格式输出)组合。这样可以获得结构化、易解析的数据。
const { spawn } = require('child_process');
function listProcessesWithUser() {
return new Promise((resolve, reject) => {
const tasklist = spawn('tasklist', ['/V', '/FO', 'csv']);
let stdoutData = '';
let stderrData = '';
tasklist.stdout.on('data', (chunk) => {
stdoutData += chunk;
});
tasklist.stderr.on('data', (chunk) => {
stderrData += chunk;
});
tasklist.on('close', (code) => {
if (code !== 0) {
return reject(new Error(`tasklist exited with code ${code}: ${stderrData}`));
}
try {
// 解析 CSV(注意:Windows CSV 可能含双引号包围字段,且含 BOM)
const lines = stdoutData.trim().split('n');
const headers = lines[0].replace(/^"|"$/g, '').split('","');
const processes = lines.slice(1).map(line => {
const values = line.match(/"([^"]*)"/g)?.map(v => v.slice(1, -1)) || [];
return Object.fromEntries(
headers.map((h, i) => [h.trim(), values[i] || ''])
);
});
resolve(processes);
} catch (e) {
reject(new Error('Failed to parse tasklist CSV output: ' + e.message));
}
});
});
}
// 使用示例
listProcessesWithUser()
.then(processes => {
processes.forEach(proc => {
const userName = proc['User Name']?.trim() || '';
const isSystemLevel = [
'SYSTEM',
'NT AUTHORITYSYSTEM',
'NT AUTHORITYLOCAL SERVICE',
'NT AUTHORITYNETWORK SERVICE'
].some(name => userName.toUpperCase() === name.toUpperCase());
console.log(`${proc['Image Name']} (PID: ${proc['PID']}) → User: "${userName}" → ${isSystemLevel ' System-level' : ' User-level'}`);
});
})
.catch(console.error);
实现思路说明
这段代码通过 spawn 启动 tasklist,并传入 /V 和 /FO csv 参数。命令执行后,会收集标准输出和错误输出。
当进程结束时,代码会先检查退出码。如果退出码不是 0,就直接抛出错误。
如果执行成功,再对 CSV 内容进行解析。解析后可拿到每个进程的字段信息,包括 Image Name、PID、User Name 等。
最后,程序会根据 User Name 是否属于 SYSTEM、NT AUTHORITYSYSTEM、NT AUTHORITYLOCAL SERVICE、NT AUTHORITYNETWORK SERVICE,来判断该进程是系统级还是用户级。
注意事项
tasklist /V需要管理员权限才能获取所有进程的用户名;普通权限下,部分系统进程的“User Name”字段可能显示为N/A或被截断。建议以管理员身份运行 Node.js 脚本。- CSV 输出首行为表头,如
"Image Name","PID","Session Name","Session#","Mem Usage","Status","User Name","CPU Time","Window Title"。注意字段顺序可能因系统语言/版本略有差异,应以实际输出为准。 - 某些进程,如
explorer.exe,虽由用户启动,但可能拥有较高完整性级别(Integrity Level)。仅靠用户名不足以完全判定安全上下文。如需更严格判断,可结合Get-Process | Select-Object Name,Id,UserName,Path,StartInfo(PowerShell)或 WMI 查询Win32_Process的Owner属性。 - 该方案仅适用于 Windows;Linux/macOS 需改用
ps -eo pid,user,args等命令,并解析对应字段。
适用场景
掌握此方法后,你可在以下场景中更可靠地区分系统关键进程与第三方应用:
- 自动化运维脚本
- 安全审计工具
- 进程监控应用
这能为权限控制、异常检测等场景提供坚实基础。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 基于Flutter重构的轻量级Windows桌面壁纸软件:从Electron到Dart的体积优化实践
- 时间:2026-08-27
-
- AMD锐龙真实加速频率实测 Windows系统游戏性能更强
- 时间:2026-08-24
-
- Windows Hello红外摄像头开启与设置全步骤指南
- 时间:2026-08-24
-
- 微软Windows系统性能与界面优化后下一步将更新音效设计
- 时间:2026-08-24
-
- 微软修复Windows内存显示问题告别1048576KB困扰
- 时间:2026-08-24
-
- Windows 11右键菜单重新加入刷新功能用户等待终获解决
- 时间:2026-08-23
-
- Edge浏览器关闭下载完成通知的详细设置教程
- 时间:2026-08-23
-
- Windows系统type命令详解:功能、语法与使用实例
- 时间:2026-08-23
精选合集
更多大家都在玩
大家都在看
更多-
- 2026年9月17日小鸡庄园答案
- 时间:2026-09-16
-
- 蚂蚁庄园今日答案2026年9月17日
- 时间:2026-09-16
-
- 蚂蚁庄园小课堂今日最新答案2026年9月17日
- 时间:2026-09-16
-
- 蚂蚁庄园小鸡答题今日答案2026年9月17日
- 时间:2026-09-16
-
- 褪黑素主要由人体哪个器官分泌 蚂蚁庄园今日答案9.17
- 时间:2026-09-16
-
- 蚂蚁庄园今天答题答案2026年9月17日
- 时间:2026-09-16
-
- 蚂蚁庄园答题今日答案2026年9月17日
- 时间:2026-09-16
-
- 研学旅游指导师的核心服务对象是 蚂蚁新村今日答案2026.9.16
- 时间:2026-09-16
