共用方式為


C6277

警告 C6277: <function> 呼叫中的 NULL 應用程式名稱含有不具引號的路徑: 如果路徑包含空格,則會導致安全性弱點

這則警告指出應用程式名稱參數為 null,且可執行檔的路徑名稱中可能含有空格。在上述情形中,除非可執行檔名稱是「完整的」,否則可能會產生安全性問題。惡意使用者可能會在路徑前面插入具有相同名稱的惡意可執行檔。若要更正這則警告,您可以指定應用程式名稱,而不要傳遞 null,或者若要傳遞應用名稱的 null,請使用引號將可執行檔的路徑括起來。

範例

下列範例程式碼會因為應用程式的名稱參數為 null,且可執行檔的路徑名稱含有一個空格,而產生這則警告。由於函式剖析空格的方式,所以可能會有執行其他可執行檔的風險。如需詳細資訊,請參閱 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 );
}

若要更正這則警告,請使用引號將可執行檔的路徑括起來,如下列範例所示:

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