Попытка удалить файл .exe, используя путь из реестра Windows и метод DeleteFile () - PullRequest
0 голосов
/ 23 марта 2019

Так что мне нужно отсканировать реестры Windows, отобразить их все на консоли и затем проверить, какое из этих значений имеет то же имя, которое установлено в коде

Когда программа находит значение с целевым именем Iнеобходимо прервать процесс и удалить его с оборудования, используя DeleteFile ().

Итак, я сделал все, получил путь к месту назначения файла .exe, но когда я использую DeleteFile ();файл не удаляется

void EndProcess(HANDLE snap, HANDLE &process, PROCESSENTRY32 pe32, TCHAR 
virusName[], TCHAR valuePath[], wofstream &file)
{
    process = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID);
    if (TerminateProcess(process, 1))
    {
        cout << "Virus process is found and successfully terminated!" << 
    endl;
        file << "Virus process is found and successfully terminated!" << 
    endl;
        CloseHandle(process);
        DeleteFile(valuePath);
    }
    else
    {
        cout << "Failed to terminate Virus process!" << endl;
        file << "Failed to terminate Virus process!" << endl;
    }
}

1 Ответ

1 голос
/ 25 марта 2019

TerminateProcess асинхронный, он инициирует завершение и немедленно возвращается.То есть, нет уверенности в том, что процесс был прекращен.Простым решением является добавление Sleep() для задержки.

Если вам необходимо убедиться, что процесс завершен, вызовите функцию WaitForSingleObject с дескриптором процесса.Также вам нужно добавить право доступа SYNCHRONIZE при открытии дескриптора процесса:

void EndProcess(HANDLE snap, HANDLE &process, PROCESSENTRY32 pe32, TCHAR
    virusName[], TCHAR valuePath[], wofstream &file)
{
    process = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, pe32.th32ProcessID);
    if (TerminateProcess(process, 1))
    {
        cout << "Virus process is found and successfully terminated!" <<
            endl;
        file << "Virus process is found and successfully terminated!" <<
            endl;
        WaitForSingleObject(process, INFINITE);
        CloseHandle(process);
        DeleteFile(valuePath);
    }
    else
    {
        cout << "Failed to terminate Virus process!" << endl;
        file << "Failed to terminate Virus process!" << endl;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...