C6277
警告 C6277:在对 <function> 的调用中使用的 NULL 应用程序名含未加引号的路径: 如果路径中包含空格将导致安全漏洞
此警告意味着应用程序名参数为 null,而且可执行文件的路径名中可能包含空格。 在这种情况下,除非可执行文件的名称是“完全限定的”,否则可能导致安全问题。 恶意用户可能在该路径中插入同名的欺诈性可执行文件。 若要更正此警告,可以指定应用程序名,而不是传递 null。如果您的确要为该应用程序名传递 null,请在可执行文件的路径两侧加上引号。
示例
在下面的代码示例中,由于应用程序名参数为 null,而且可执行文件的路径名中有一个空格,因此生成此警告;函数分析空格的方法可能导致运行一个不同的可执行文件的风险。 有关更多信息,请参见 CreateProcess。
#include <windows.h>
#include <stdio.h>
void f_defective()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"C:\\Program Files\\MyApp",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
若要更正此警告,请在可执行文件的路径两侧加上引号,如下面的示例所示:
#include <windows.h>
#include <stdio.h>
void f ()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"\"C:\\Program Files\\MyApp.exe\"",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}