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

如何从进程句柄获取进程SID?附OpenProcess句柄示例

获取进程SID并用于文件权限设置的正确方法
  • 调用GetSecurityInfo()处理进程对象时,第二个参数SE_OBJECT_TYPE必须指定为SE_KERNEL_OBJECT——因为进程属于Windows内核对象类型。
  • 我们只需要获取所有者SID,因此安全信息标志传OWNER_SECURITY_INFORMATION即可。

示例代码

DWORD dwErr = 0;
PSID pProcessSid = nullptr;

// 从进程句柄提取所有者SID
dwErr = GetSecurityInfo(
    hProcess,
    SE_KERNEL_OBJECT,
    OWNER_SECURITY_INFORMATION,
    &pProcessSid,
    nullptr,  // 不需要组SID,传空
    nullptr,  // 不需要DACL,传空
    nullptr,  // 不需要SACL,传空
    nullptr   // 不需要接收安全描述符指针,传空
);

if (dwErr == ERROR_SUCCESS && pProcessSid != nullptr) {
    // 这里可以用pProcessSid构造文件权限的ACE
    // 例如:创建允许该进程SID访问文件的ACE,再调用SetNamedSecurityInfo设置到目标文件
    // 注意:GetSecurityInfo返回的pProcessSid是进程安全描述符的内部指针,无需手动释放
} else {
    // 处理错误,可调用GetLastError()获取详细错误码
}

关键注意事项

  • 你的hProcess已经用PROCESS_ALL_ACCESS打开,包含了READ_CONTROL权限(获取安全信息必需),满足调用条件。
  • 如果需要同时获取组SID或其他安全信息,可组合对应的标志,比如OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION。
  • 获取到SID后,可通过BuildExplicitAccessWithName或AddAccessAllowedAce等函数构造访问控制项,再应用到目标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:15:40