Compartilhar via


C6277

Aviso C6277: Nome do aplicativo nulo com um caminho sem aspas na telefonar para <função>: resultados 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 que pode haver espaços no nome do caminho do executável.Nesse caso, a menos que o nome do arquivo executável é "totalmente qualificado," é provável que um problema de segurança.Um usuário mal-intencionado pode inserir um executável não autorizado com o mesmo nome anteriormente no caminho.Para corrigir esse aviso, você pode especificar o nome do aplicativo em vez de passar nulo ou se passar nulo para o nome do aplicativo, coloque entre aspas o caminho do executável.

Exemplo

Exemplo de código a seguir gera este aviso porque o parâmetro de nome do aplicativo for nulo e o nome de caminho executável tem um espaço nele; há um risco que um executável diferente pode ser executado por causa da maneira 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 o caminho do executável, sistema autônomo 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 );
}