C6277C6277

avertissement C6277 : nom d’application NULL avec chemin sans guillemets dans l’appel à <fonction > : provoque une faille de sécurité si le chemin d’accès contient des espaceswarning C6277: NULL application name with an unquoted path in call to <function>: results in a security vulnerability if the path contains spaces

Cet avertissement indique que le paramètre de nom d’application est null et il peut y avoir des espaces dans le nom de chemin d’accès au fichier exécutable.This warning indicates that the application name parameter is null and there might be spaces in the executable path name. Dans ce cas, sauf si le nom du fichier exécutable est « complet », un problème de sécurité se pose probablement.In this case, unless the executable name is "fully qualified," there is likely to be a security problem. Un utilisateur malveillant peut insérer un exécutable non autorisé portant le même nom plus haut dans le chemin d'accès.A malicious user might insert a rogue executable with the same name earlier in the path. Pour corriger cet avertissement, vous pouvez spécifier le nom de l’application au lieu de passer une valeur null ou, si vous passez la valeur null pour le nom de l’application, vous pouvez utiliser des guillemets autour du chemin d’accès au fichier exécutable.To correct this warning, you can specify the application name instead of passing null or if you do pass null for the application name, use quotation marks around the executable path.

ExempleExample

L’exemple de code suivant génère cet avertissement, car le paramètre de nom d’application est null et le nom de chemin d’accès au fichier exécutable contient un espace ; un fichier exécutable différent risque d’être exécuté en raison de la façon dont la fonction analyse les espaces.The following sample code generates this warning because the application name parameter is null, and the executable path name has a space in it; there is a risk that a different executable could be run because of the way the function parses spaces. Pour plus d’informations, consultez CreateProcess.For more information, see 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 );
}

Pour corriger cet avertissement, utilisez des guillemets autour du chemin d’accès au fichier exécutable, comme illustré dans l’exemple suivant :To correct this warning, use quotation marks around the executable path, as shown in the following example:

#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 );
}