首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringCbPrintf (strsafe.h)是WinAPI的一部分吗?

StringCbPrintf (strsafe.h)是WinAPI的一部分吗?
EN

Stack Overflow用户
提问于 2019-02-28 17:28:51
回答 2查看 571关注 0票数 1

我不确定StringCbPrintf和定义它的包含文件strsafe.h是否属于WinAPI。一方面,微软在其WinAPI站点上记录了该函数,而strsafe.h位于Windows SDK目录结构下,这表明(至少对我而言)它确实是WinAPI的一部分。另一方面,strsafe.h包括属于阴极射线管的stdio.h等。我一直认为WinAPI是完全独立于显像管的(但反之亦然)。可能,我对WinAPI和CRT之间关系的假设是错误的。因此我的问题是:StringCbPrintf是WinAPI的一部分吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-01 02:46:31

StrSafe应用程序接口有点奇怪,因为它没有自己的.DLL,也没有自己的导出函数。我假设它是以这种方式开发的,因为它需要支持已经发布的旧版本的Windows。它是在WinXP service pack安全推送期间创建的:

在2002年2月和3月期间,微软的所有应用程序开发都停止了,开发人员参与了安全推动计划。目标是检查所有代码中可能存在的安全漏洞,并修复这些问题。安全推送的One of the outcomes是一个名为"strsafe.lib“的安全字符串函数库,带有一个名为”strsafe.h“的相关标头。该库可通过Platform SDK获得,该平台SDK可从MSDN网站下载,并作为Visual C++.NET 2003的一部分自动安装。

据我所知,Michael Howard和David LeBlanc在Writing Secure Code (Second Edition)中也包含了一份strsafe.h的副本,但我不确定他们是否是原始作者(David LeBlanc是SafeInt的作者):

你可以在Secureco2\Strsafe文件夹的随附内容中找到一份Strsafe.h的副本。

msvcrt.dll现在基本上是一个系统文件,只有Windows95没有它。您不应该使用它作为您的C运行时,但微软的SDK代码可能会使用它没有问题。

Windows现在是一个“已知的动态链接库”,也就是说it is a system component是由

拥有并构建的。它仅供系统级组件将来使用。

如果你也想使用msvcrt.dll作为你的C运行时,那么你必须为StrSafe.h的Windows7使用use the WDK,但是当你使用StrSafe.h的内联版本时,只要你链接到一个包含所需的<=类型函数的.lib,那么它来自哪个vsnprintf应该并不重要。还有一个StrSafe.lib文件,但微软建议您使用内联版本。

您说得对,Windows API应该独立于CRT,但StrSafe也支持像StringCbGetsA这样的标准输入函数,并且他们没有选择将这些函数分离到单独的头中。再加上需要一个现有的 vsnprintf类型函数来完成实际工作,这意味着StrSafe在某种程度上附加到了CRT上,尽管它本应供所有WinAPI开发人员使用。

对于它是否是WinAPI的一部分,可能没有真正的答案,因为它有点主观。因为它包含在SDK的include文件夹中,所以人们可能会认为Microsoft认为它是SDK/API组件,而不是CRT组件。

票数 2
EN

Stack Overflow用户

发布于 2019-02-28 18:13:15

如果它不是在Windows中实现的,并且没有从它的DLL中导出(例如,从kernel32.dll中导出CreateFile()或CloseHandle() ),我会说它不是WinAPI的一部分,即使它最终调用了在Windows中实现的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54922292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档