【发布时间】:2015-10-15 13:34:13
【问题描述】:
我查看了PnP Configuration Manager functions,发现每个都以这三个宏开头:
CMAPI CONFIGRET WINAPI
我不得不在CfgMgr32.h里面挖掘,找到CMAPI,它的定义是:
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
根据Tim Roberts' article on DLL's in Kernel Mode,这允许CMAPI 的函数在运行时或链接时加载。我们已经知道WINAPI 只是一个macro for a calling convention。
但是CONFIGRET 呢?从CfgMgr32.h中定义为:
//
// Standardized Return Value data type
//
typedef _Return_type_success_(return == 0) DWORD RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;
我从来没有见过这个,这是什么意思?这些函数的返回类型是什么?
【问题讨论】:
-
返回值为documented:"如果操作成功,函数返回CR_SUCCESS。否则返回Cfgmgr32.h中定义的以CR_为前缀的错误码之一。" 特定类型并不是很有趣。它恰好是一个带有SAL Annotations 注释的
DWORD。这个简单地说:“0 表示成功”(参见Annotating Function Behavior)。 SAL 用于静态代码分析工具。 -
很好,我从来不知道 SAL 注释。您为什么不在答案中总结您的评论,以便我接受?谢谢。
-
上面的“这篇文章”链接已失效。请用工作链接替换它。
-
@Laxman 很好,下次我会尝试发布文章标题以帮助人们通过 Google 搜索找到。我已经更新了问题以包含最新的文章。由于历史原因,您也可以在返程机上查看截至2015年10月25日的文章:web.archive.org/web/20151025190943/http://www.wd-3.com/archive/…
标签: c++ winapi driver typedef return-type