Freigeben über


Warnung C6277

NULL-Anwendungsname mit einem nicht zizierten Pfad im Aufruf von "Funktionsname": Führt zu einer Sicherheitslücke, wenn der Pfad Leerzeichen enthält

Diese Warnung gibt an, dass der Anwendungsnameparameter NULL ist und dass leerzeichen im Namen des ausführbaren Pfads vorhanden sein können.

Hinweise

Sofern der Name der ausführbaren Datei nicht voll qualifiziert ist, besteht wahrscheinlich ein Sicherheitsproblem. Ein böswilliger Benutzer könnte eine nicht autorisierte ausführbare Datei mit demselben Namen vor dem Pfad einfügen. Um diese Warnung zu korrigieren, können Sie den Anwendungsnamen angeben, anstatt NULL zu übergeben. Wenn Sie alternativ null für den Anwendungsnamen übergeben, verwenden Sie Anführungszeichen um den ausführbaren Pfad.

Codeanalysename: CREATEPROCESS_ESCAPE

Beispiel

Der folgende Beispielcode generiert Warnung C6277. Die Warnung wird durch den NULL-Anwendungsnamen und den Namen des ausführbaren Pfads mit einem Leerzeichen verursacht. Aufgrund der Analyse von Leerzeichen durch die Funktion besteht das Risiko, dass eine andere ausführbare Datei ausgeführt werden kann. Weitere Informationen finden Sie unter CreateProcessA.

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

Um die Ursache dieser Warnung zu beheben, schließen Sie den Pfad der ausführbaren Datei in Anführungszeichen ein, wie im folgenden Beispiel dargestellt:

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