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

调用WTSEnumerateSessionsEx触发C6387告警的原因与解决方法咨询

警告触发原因

C6387是Visual Studio内置静态代码分析工具基于SAL(源代码注解语言)规则抛出的警告,含义为「传入的参数可能不符合接口的输入规范,存在无效值风险」。
你遇到的该警告属于已知的SDK注解偏差问题:

  • 旧版本Windows SDK头文件中,WTSEnumerateSessionsEx接口的ppSessionInfo参数(你代码中传入&info的第四个参数)的SAL注解被错误标注为_Inout_类型,而非正确的_Out_类型。
  • 静态分析器按照错误的_Inout_规则校验时,要求参数指向的info变量在传入时为非NULL有效值,但你将info初始化为了NULL,因此触发警告。

代码运行正常的原因是注解本身错误:ppSessionInfo是纯输出参数,函数内部会直接分配内存并将地址写入*ppSessionInfo,完全不会读取你传入的初始NULL值,因此逻辑上没有问题。

修复方案

  • 方案1(最推荐,无副作用):在调用语句前增加单行警告抑制指令,仅关闭当前行的C6387警告,不影响其他代码的静态分析校验,修改后代码如下:
WTS_SESSION_INFO_1* info = NULL;
DWORD info_count = 0;
DWORD level = 1;
// 抑制因SDK注解错误触发的C6387警告
#pragma warning(suppress: 6387)
WTSEnumerateSessionsEx(WTS_CURRENT_SERVER_HANDLE, &level, 0, &info, &info_count);

// 业务逻辑处理...

// 记得用完后释放WTS分配的内存
if (info != NULL) {
    WTSFreeMemory(info);
}
  • 方案2:升级到最新版Windows SDK,微软已在后续版本中修正了该参数的SAL注解错误,升级后该警告会自动消失。
  • 不推荐的方案:将info初始化为非NULL的临时值,这种方式会引入不必要的代码,还有内存泄漏风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:42:01