我正在为Windows 7和Windows 10进行编码,并且只想为我的应用程序使用一个主二进制文件。
在此应用程序中,我想连接路径和文件名,以便消除所有相对路径规范。 现在,我发现使用PathCombine()函数时我可以移植,但是该函数本身可以通过设计在某些输入条件下创建缓冲区溢出问题。 对于PathCchCombine(),可通过提供结果缓冲区大小的额外参数来提高安全性,但该参数在第一个提到的平台上不可用(该功能仅在Win8或更高版本上可用-可能与api-ms-win-core-path-一起提供l1-1-0.dll或仅通过Windows KernelBase.dll)。
如何解决该问题,以便我可以保留一个二进制文件,不需要提供额外的DLL,并且仍然可以防止缓冲区溢出? Windows 7是否有一些其他功能可以满足我的需求?
答案 0 :(得分:0)
指示的解决方案:
我需要使用PathCombine(),因为它是Win7上唯一的选项。
我必须提供MAX_PATH的结果缓冲区(较小的有风险,较大的是无用的)。
我必须接受,即使Win10可能支持32kB或更长的路径长度,也没有简单的解决方案(如单个API调用)可与任何平台确定的限制和/或内容确定的结果长度一起使用。 -有一些功能变体(例如PathAllocCanonicalize)可以动态分配,因此调用方不需要任何预结果知识,但是所有这些功能似乎仅在Win8或更高版本中可用。