как обнаружить недопустимые команды, передаваемые в процесс создания

#c #winapi #exception #createprocess

#c #winapi #исключение #createprocess

Вопрос:

В настоящее время я работаю над программой, которая запускает программу, указанную пользователем. переданный в виде wstring, введенный пользователем. Мой вопрос в том, как мне заставить его выдавать исключение или проверить, является ли «переданный» недействительным. В настоящее время, если пользователь вводит в «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,
        amp;sinfo,
        amp;pi);

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

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

Спасибо!

Ответ №1:

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

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

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

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

Комментарии:

1. идеально! спасибо, я использовал GetLastError, когда моя программа случайно разбилась. Мне нужно подождать еще 6 минут, прежде чем я смогу пометить это как правильный ответ.