warning C6277: NULL application name with an unquoted path in call to <function>: results in a security vulnerability if the path contains spaces
這個警告表示應用程式名稱參數為 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 );
}