次の方法で共有


C6277

警告 C6277: <関数> への呼び出しに引用符で囲まれていないパスを伴う 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 );
}