代码之家  ›  专栏  ›  技术社区  ›  Alexander Stohr

替代函数pathcombine()和pathchcombine()

  •  0
  • Alexander Stohr  · 技术社区  · 6 年前

    我正在为windows 7和windows 10编写代码,希望我的应用程序只有一个主二进制文件。

    在这个应用程序中,我想连接一个路径和一个文件名,以便消除所有相对路径规范。 现在我发现,当使用pathCombine()函数时,我是可移植的,但函数本身在设计上有可能在某些输入条件下产生缓冲区溢出问题。 对于pathchcombine(),通过提供结果缓冲区大小的额外参数来提高安全性,但它在前面提到的平台上不可用(该函数仅在Win8或更高版本上可用-可能随API-MS-Win-Core-Path-L1-1-0.dll提供,也可能仅由Windows Kernelbase.dll提供)。

    如何解决这个问题,使我可以保持一个单一的二进制文件,不需要提供额外的dll,仍然保持对缓冲区溢出的节省? windows 7有什么替代功能可以为我服务吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alexander Stohr    6 年前

    指示溶液:

    我需要使用pathcombine(),因为它是在win7上工作的唯一选项。

    我必须提供一个最大路径的结果缓冲区(越小风险越大无用)。

    我不得不承认,即使win10可能支持32kb或更大的路径长度,也没有任何简单的解决方案(如单个api调用)可以处理任何由平台决定的限制和/或由内容决定的结果长度。-有一些函数变体(考虑到pathalloccanonicalize)可以进行动态分配,因此调用者不需要任何结果前的知识,但是所有这些函数似乎都只在win8或更高版本中可用。