gpt4 book ai didi

c++ - 代码分析不懂_In_opt_参数注解?

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:19 25 4
gpt4 key购买 nike

看起来像 SAL 错误。代码:

    PAAFILEFILTER_PROTECTED_FILE curFile = NULL;

try
{
status = GetProtectedFile(FileIdInfo, instanceContext, &curFile);
if(!NT_SUCCESS(status))
{
TraceError("Can't GetProtectedFile with status: %!STATUS!\n", status);
leave;
}
...


finally
{
if(NT_SUCCESS(status))
{
LogMessage(AAFILEFILTER_FILE_UNPROTECTED, NULL, NULL, NULL, 0, (PUCHAR)FileIdInfo, sizeof(AAFILE_ID_INFORMATION));
}
else
{
TraceProtectedFile(curFile);
}
}

易观分析给我C6102 - Using variable from failed function call

TraceProtectedFile(curFile) 行;但是 TraceProtectedFile 有原型(prototype)

_In_opt_ PAAFILEFILTER_PROTECTED_FILE protectedFile

_In_opt_ mean “_In_opt_ 与 _In_ 相同,不同之处在于输入参数允许为 NULL,因此,该函数应对此进行检查。” .. 如果 CA 无法处理,请不要理解这么简单的事情那它能干什么:(

最佳答案

这看起来像是错误处理结构的问题,而不是 _In_opt_ 参数。

如果 leave 与标准 C++ 异常处理混合时,足以混淆 SAL,以至于它无法识别 finally 永远不会被命中,我不会感到惊讶. leave 不是标准 C++ 异常的一部分,并且是特定于 MSVC 的,用于 structured exception handling .

好消息是,SAL 的困惑暗示其他开发人员可能对这样的错误处理同样感到惊讶。您可能应该考虑将 GetProtectedFile 调用移到您的 try/finally 之外,因为所有这些代码都假定 curFile 已成功初始化:

PAAFILEFILTER_PROTECTED_FILE curFile = NULL;

status = GetProtectedFile(FileIdInfo, instanceContext, &curFile);
if(!NT_SUCCESS(status))
{
TraceError("Can't GetProtectedFile with status: %!STATUS!\n", status);
return; // Return whatever is appropriate here
}

// The rest of your code can assume curFile initialized successfully

try
{
...
}
finally
{
if(NT_SUCCESS(status))
{
LogMessage(AAFILEFILTER_FILE_UNPROTECTED, NULL, NULL, NULL, 0, (PUCHAR)FileIdInfo, sizeof(AAFILE_ID_INFORMATION));
}
else
{
TraceProtectedFile(curFile);
}
}

关于c++ - 代码分析不懂_In_opt_参数注解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36354026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com