getmodulefilenamew函数产生误报(缓冲区溢出),因为它接受第二个参数作为缓冲区 - 在我们的例子中是固定大小。
但仔细查看其文档:http://msdn.microsoft.com/en-us/library/ms683197%28v=vs.85%29.aspx
引用:如果缓冲区太小而无法容纳模块名称,则字符串将截断为nSize字符(包括终止空字符),函数返回nSize,函数将最后一个错误设置为ERROR_INSUFFICIENT_BUFFER。
作为可信赖的第三方人员可以确认或拒绝此问题为误报。谢谢你的帮助!
===
HMODULE applicationModule = GetModuleHandleW(NULL);
WCHAR processName[MAX_PATH];
memset(processName, 0, sizeof(processName));
GetModuleFileNameW(applicationModule, processName, sizeof(processName));
===
问题与GetModuleFileNameW函数一致
扫描由Veracode静态分析仪提供。
答案 0 :(得分:2)
您的问题是您传递的nSize
值不正确。您传递的是字节数,但是您应该传递字符数MAX_PATH
。这些值不同,因为宽字符的大小为2个字节。
所以,是的,您的代码中存在错误。如果模块名称足够长,Windows将尝试将最多520个字符写入只有260个空间的缓冲区。