C6277

تحذير C6277: اسم تطبيق قيمة فارغة مسار unquoted في استدعاء إلى <دالة>: نتائج في مشكلة عدم حصانة الأمان في حالة المساحات contaفيs مسار

Th هو التحذير يشير إلى أن معلمة اسم تطبيق هو فارغة وقد يكون هناك مسافات في اسم مسار التشغيل. في ترتيب هو الحالة، إلا إذا كان الاسم القابل للتنفيذ هو هناك "مؤهل بشكل كامل،" هو أن تكون مشكلة في الأمان. قد لمستخدم ضار بإدراج تنفيذي خادعة بنفس اسم السابقة في مسار. إلى تصحيح هذا التحذير، قم بتحديد اسم تطبيق بدلاً من تمرير قيمة فارغة أو إذا قم بتمرير فارغة لاسم تطبيق، استخدم علامات الاقتباس حول مسار التشغيل.

مثال

ينشئ نموذج تعليمات برمجية التالي th هو تحذير لأن تطبيق اسم المعلمة هو قيمة خالية، واسم مسار التشغيل على مسافة في؛ هو rهوk أنه الملف القابل للتنفيذ مختلفة قد يكون تشغيل نظراً للطريقة دالة يوزع المسافات. للحصول على مزيد من المعلومات، راجع 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 );
}