C6277
Aviso C6277: Nome do aplicativo nulo com um caminho sem aspas na chamada para <function>: resulta em uma vulnerabilidade de segurança se o caminho contiver espaços
Este aviso indica que o parâmetro de nome do aplicativo é nulo e pode haver espaços no nome do caminho do executável. Nesse caso, a menos que o nome do executável é "totalmente qualificado", é provável que haja um problema de segurança. Um usuário mal-intencionado pode inserir um executável de rogue com o mesmo nome anteriormente no caminho. Para corrigir esse aviso, você pode especificar o nome do aplicativo em vez de passar null ou se você passar null para o nome do aplicativo, use aspas ao redor do caminho do executável.
Exemplo
O exemplo de código a seguir gera este aviso porque o parâmetro de nome do aplicativo é nulo e o nome de caminho do executável tem um espaço nele; Há um risco de um executável diferente pode ser executado devido a forma como a função analisa os espaços. Para obter mais informações, consulte 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 );
}
Para corrigir esse aviso, use aspas ao redor do caminho do executável, como mostrado no exemplo a seguir:
#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 );
}