You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过名称调用NtOpenProcess打开进程?旧Windows语法疑问

Windows旧系统中NtOpenProcess的进程名称语法

在Windows 2000、Windows XP和Windows Server 2003这类旧系统中,NtOpenProcess支持通过对象名称打开进程,但该语法未被官方文档化。根据实际测试与逆向分析,正确的对象名称规则如下:

  • 完整路径格式为\Process\<PID的十六进制小写形式>
  • 必须以反斜杠开头,Process是固定的对象目录名称,不可省略或修改
  • PID需转换为无前缀、小写的十六进制字符串,不需要0x这类前缀

修正后的代码示例

HANDLE handle = 0;
WCHAR b[99];
wsprintfW(b, L"\\Process\\%x", GetCurrentProcessId()); // 补全开头反斜杠,使用小写十六进制PID
UNICODE_STRING name;
RtlInitUnicodeString(&name, b);
OBJECT_ATTRIBUTES oa;
InitializeObjectAttributes(&oa, &name, 0, NULL, NULL);
NTSTATUS status = NtOpenProcess(&handle, SYNCHRONIZE, &oa, NULL);
_tprintf(_T("%X %p\n"), status, handle);

额外说明

  • 调用时必须保证ClientId参数为NULL(示例代码已符合要求)
  • 该功能仅存在于上述旧版本系统中,后续Windows版本已移除通过名称打开进程的支持
  • 需确保调用进程拥有足够权限打开目标进程,否则会返回权限不足的NTSTATUS码

内容的提问来源于stack exchange,提问作者Anders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:18:30