как обнаружить недопустимые команды, передаваемые в процесс создания - PullRequest
3 голосов
/ 31 мая 2011

В настоящее время я работаю над программой, которая запускает программу, указанную пользователем. передается как строка, введенная пользователем. Мой вопрос заключается в том, как сделать так, чтобы оно выдавало исключение или проверялось, передано ли значение «insIn ». В настоящее время, если пользователь вводит «notepad.exe», он запускает его правильно, но если он вводит что-то фальшивое, например «asdf», или что-то подобное, он все равно создает процесс.

try {
    wchar_t* commandLine = new wchar_t [CP_MAX_COMMANDLINE];
    wcsncpy_s(commandLine, CP_MAX_COMMANDLINE, passedIn.c_str(), passedIn.size() +1);
    CreateProcess(NULL, 
        commandLine, 
        NULL, NULL,
        false,CREATE_NEW_CONSOLE,NULL,
        NULL,
        &sinfo,
        &pi);

    delete [] commandLine;
}
catch (int e) {
    cout << "An exception occurred. Exception Nr. " << e << endl;
}

Я надеялся, что мой улов схватит его, но это не так. Могу ли я что-нибудь сделать, чтобы проверить, vaild ли он?

Спасибо!

1 Ответ

3 голосов
/ 31 мая 2011

Цитирование документации функции (которая должна была быть первой проверенной вами):

Если функция завершается успешно, возвращаемое значение ненулевое.

Если функция не работает, возвращаемое значение равно нулюЧтобы получить расширенную информацию об ошибке, позвоните GetLastError.

Итак, проверьте возвращаемое значение функции.

...