GetEnvironmentVariable():这个函数是第一个用变量值检查nSize吗?

GetEnvironmentVariable() : Is this function firstly check nSize with variable value?

本文关键字:变量值 检查 nSize 第一个 函数 GetEnvironmentVariable      更新时间:2023-10-16
DWORD WINAPI GetEnvironmentVariable(
_In_opt_  LPCTSTR lpName,
_Out_opt_ LPTSTR  lpBuffer,
_In_      DWORD   nSize
);

getEnvironmentVariable 函数是首先检查 nSize,然后写入 lpBuffer 还是它只是盲目写入并导致缓冲区溢出问题?

Microsoft-MSDN 函数详细信息

如果函数能够容纳nSize字符,则该函数永远不会写入lbBuffer导致溢出lpBuffer

来自 GetEnvironmentVariable 函数的文档:

如果lpBuffer不够大,无法保存数据,则返回值是保存字符串及其终止空字符所需的缓冲区大小(以字符为单位),并且lpBuffer的内容未定义。

该函数必须信任您将正确的大小传递给它,除了nSize参数之外,没有边界检查(而且它真的不可能)。

如果nSize的值大于实际缓冲区,则该函数可能会超出范围写入并导致缓冲区溢出。