Freigeben über


C6277

Warnung C6277: Anwendungsname NULL und Pfad ohne Anführungszeichen im Aufruf von <Funktion>: Dies hat eine Sicherheitsanfälligkeit zur Folge, falls der Pfad Leerzeichen enthält.

Diese Warnung gibt an, dass der Parameter für den Anwendungsnamen NULL ist und der Name des Pfads für die ausführbare Datei Leerzeichen aufweist.In diesem Fall kann ein Sicherheitsproblem auftreten, es sei denn, der Name der ausführbaren Datei ist "vollqualifiziert".Ein böswilliger Benutzer kann eine nicht autorisierte ausführbare Datei mit demselben Namen an früherer Stelle im Pfad einfügen.Um diese Warnung zu korrigieren, können Sie den Anwendungsnamen angeben, statt NULL zu übergeben, oder schließen Sie den Pfad für die ausführbare Datei in Anführungszeichen ein, wenn Sie NULL für den Anwendungsnamen übergeben.

Beispiel

Im folgenden Beispielcode wird diese Warnung generiert, weil der Parameter für den Anwendungsnamen NULL ist und der Name des Pfads für die ausführbare ein Leerzeichen aufweist. Es besteht das Risiko, dass aufgrund der Art und Weise, in der die Funktion Leerzeichen analysiert, eine andere ausführbare Datei ausgeführt wird.Weitere Informationen finden Sie unter 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 );
}

Um diese Warnung zu korrigieren, schließen die den Pfad für die ausführbare 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 );
}