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

Win32 SeCreateClientSecurityFromSubjectContext未复制调用方PrimaryGroup问题

设备驱动模拟调用方时主组未被捕获的问题

问题描述

我尝试在设备驱动中通过捕获并存储安全上下文来模拟调用方,但主组未被捕获(即TOKEN_PRIMARY_GROUP始终返回默认组,而非进程中设置的主组)。相关代码如下:

SECURITY_QUALITY_OF_SERVICE sec_qos;

SeCaptureSubjectContext(&sec_ctx);
sec_qos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
sec_qos.ImpersonationLevel = SecurityImpersonation;
sec_qos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
sec_qos.EffectiveOnly = 0;
status = SeCreateClientSecurityFromSubjectContext(&sec_ctx, &sec_qos, 1, &new_sec_ctx);

请问这是Bug还是我操作有误?

问题分析与解决

这不是Bug,是你调用SeCreateClientSecurityFromSubjectContext时的参数设置错误。

  • 你传入的第三个参数CreateFullToken为1(TRUE),此时函数会创建仅包含有效权限和默认主组的简化令牌,不会保留原调用方的主组信息,这就是问题根源。
  • 要完整保留原调用方的主组属性,需将该参数改为0(FALSE),函数会生成包含完整身份属性的模拟安全上下文。

修改后的代码:

SECURITY_QUALITY_OF_SERVICE sec_qos;

SeCaptureSubjectContext(&sec_ctx);
sec_qos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
sec_qos.ImpersonationLevel = SecurityImpersonation;
sec_qos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
sec_qos.EffectiveOnly = 0;
// 将CreateFullToken参数设为0以保留完整身份属性
status = SeCreateClientSecurityFromSubjectContext(&sec_ctx, &sec_qos, 0, &new_sec_ctx);

补充说明:

  • 当CreateFullToken为TRUE时,系统会忽略原令牌的主组、登录SID等非基础属性,生成符合默认安全策略的令牌,适用于仅需权限验证的场景。
  • 若需复刻调用方完整身份(包括主组),必须将该参数设为FALSE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:26:22