CreateProcessA () изменяет внешне не связанное константное целое число - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь получить исполняемый файл, чтобы скопировать себя на рабочий стол и запустить копию. Для этого я использую CopyFile () и CreateProcessA (). Хотя код на самом деле работает, вызов CreateProcessA () внутри оператора if каким-то образом модифицирует постоянное целое число, являющееся частью условия if, вызывая выполнение операторов if и else. Я не очень понимаю, как это может произойти. Вот код

const int wtf {create_duplicate()};
if (wtf != 0) {
    std::cout << "Duplicate created" << std::endl;
    std::cout << wtf << " != 0 " << std::endl;
    STARTUPINFO info {sizeof(info)};
    PROCESS_INFORMATION processInfo;

    if (CreateProcessA(R"(C:\Users\maxlu\Desktop\test.exe)", "",
           nullptr, nullptr, true, 0,
           nullptr, nullptr, &info, &processInfo)) {
        WaitForSingleObject(processInfo.hProcess, INFINITE);
        CloseHandle(processInfo.hProcess);
        CloseHandle(processInfo.hThread);
    }
} else {
    std::cout << wtf << " == 0 " << std::endl;
    std::cout << "Duplicate not created" << std::endl;

Это вывод кода:

Duplicate created
1 != 0
0 == 0
Duplicate not created

1 Ответ

4 голосов
/ 05 марта 2020

Скорее всего:

  1. Программа печатает "Duplicate созданный" "1! = 0", потому что create_duplicate () завершился успешно.

  2. The программа запускает еще одну собственную копию.

  3. Во второй копии create_duplicate () возвращает 0.

  4. Вторая копия печатает "0 == 0 "" Дубликат не создан. "

Переменная не изменена. Запускаются две копии программы, и каждая копия имеет собственную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...