Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows StringCbPrintf(strsafe.h)是WinAPI的一部分吗?_Windows_Winapi_Crt - Fatal编程技术网

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

Windows StringCbPrintf(strsafe.h)是WinAPI的一部分吗?,windows,winapi,crt,Windows,Winapi,Crt,我不确定StringCbPrintf和定义它的include文件strsafe.h是否属于WinAPI。一方面,Microsoft在其WinAPI站点上记录该函数,并且strsafe.h位于Windows SDK目录结构下,这表明(至少对我来说)它确实是WinAPI的一部分。另一方面,strsafe.h包括属于CRT的stdio.h等。我一直认为WinAPI完全独立于CRT(但不是相反)。可能,我对WinAPI和CRT之间关系的假设是错误的。因此,我的问题是:StringCbPrintf是Win

我不确定
StringCbPrintf
和定义它的include文件
strsafe.h
是否属于WinAPI。一方面,Microsoft在其WinAPI站点上记录该函数,并且
strsafe.h
位于Windows SDK目录结构下,这表明(至少对我来说)它确实是WinAPI的一部分。另一方面,
strsafe.h
包括属于CRT的
stdio.h
等。我一直认为WinAPI完全独立于CRT(但不是相反)。可能,我对WinAPI和CRT之间关系的假设是错误的。因此,我的问题是:
StringCbPrintf
是WinAPI的一部分吗?

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

StrSafe API有点奇怪,因为它既没有自己的.DLL,也没有自己的导出函数。我认为它是这样开发的,因为它需要支持已经发布的旧版本的Windows。它是在WinXP service pack安全推送期间创建的:

在2002年2月和3月期间,所有应用程序开发 微软停止了,开发者也参与了安全推送 倡议目标是检查所有代码的安全性 漏洞并修复这些问题。的 Security Push是一个名为 “strsafe.lib”和一个名为“strsafe.h”的相关头文件 库可通过平台SDK下载 从MSDN网站下载,并作为 Visual C++ .NET 2003 .< /P> 据我所知,Michael Howard和David LeBlanc还收录了StruSur.h的一个副本,但我不确定它们是否是原作者(David LeBlanc是Suffin的作者):

您可以在中的配套内容中找到Strsafe.h的副本 文件夹Secureco2\Strsafe


msvcrt.dll现在基本上是一个系统文件,只有Windows95没有它。您不应该将它用作C运行时,但是来自Microsoft的SDK代码可能可以毫无问题地使用它

msvcrt.dll现在是一个“已知dll”,意思是由Windows拥有和构建。这是为了将来 仅由系统级组件使用


如果您还想使用msvcrt.dll作为C运行时,那么您必须回答的主要问题是-哪个.dll正在导出这些函数。@montonero据我所知,StringCbPrintf()似乎是在Strsafe.h中定义的(而不仅仅是声明的),而不是从system32目录中的任何dll导出的。此函数的MSDN页面仅列出此头文件,而对于例如lstrcat(),则列出了Winbase.h和kernel32.dll。@montonero-StringCbPrintf是在strsafe.h中实现的内联函数。内部it最终调用从不同dll导出的
\u vsnwprintf
\u vsnwprintf不是从WinAPI dll导出的,它只会增加我的确认,因为我觉得,
StringCbPrintf
应与CRT一起记录,其头文件应位于CRT目录/ies中。@RenéNyffenegger
\u vsnwprintf
从几个不同的DLL导出。包括用户模式下的msvcrt.dll和ntdll.dll。在内核模式下,这由ntoskrnl.exe导出。这是否是winapi的一部分-相关问题。