c/c++语言开发共享如何理解windows ddk中的“NTSTATUS”,“NT_SUCCESS”typedef?

两个问题:

1。

在“ntdef.h”中, NTSTATUS定义如下:

typedef __success(return >= 0) LONG NTSTATUS; 

到底是什么“__ success(return> = 0)”?

2。

在“ntstatus.h”中, STATUS_SUCCESS定义为0。

 #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) // ntsubauth 

但是“ntdef.h”中的NT_SUCCESS宏是:

 #define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) 

不应该是“状态== 0”吗?

    __ccess是SpecStrings_strict.h中定义的“高级注释”,它定义如下。

      * __success(expr)T f():表示函数f是否成功  *不是。 如果在退出时为真,那么所有函数的保证(如给定的那样)  *通过其他注释)必须持有。 如果在退出时为false,则调用者  *不应指望任何函数的保证持有。 如果不使用,  *该function必须始终满足其保证。 自动添加到  *以标准方式表示成功的function,例如通过返回  * HRESULT。 

    NT_SUCCESS不对STATUS_SUCCESS (0)进行严格测试的原因可能是其他代码(如STATUS_PENDING实际上并未发生故障。

    片段__success(return >= 0)是SAL注释,它为PreFast工具提供了关于宏的预期语义的线索。 这用于进行静态分析并识别潜在的错误。

    NT_SUCCESS宏测试>= 0因为除了STATUS_SUCCESS之外还有成功代码。 一些成功代码包括有关操作结果的额外信息,尽管目前我只能想到S_FALSE ,它通知调用者操作成功,但结果是错误的。 通常,成功代码等于或大于零,并且失败代码小于零。

    [严格来说, S_FALSE是一个HRESULT ,而不是NT_STATUS ,尽管这两种类型具有相同的大小和相似的约定。]

    这里很好地描述了__ccess。

    对2的回答是否,所有正面代码都是非故障。 它们可能意味着除了OK之外的其他东西。

      以上就是c/c++开发分享如何理解windows ddk中的“NTSTATUS”,“NT_SUCCESS”typedef?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560078.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐