尝试使用窗口注册表中的路径和 DeleteFile() 方法删除.exe文件
Trying to delete .exe file using Path from windows registries and DeleteFile() method
所以我需要扫描Windows注册表,将它们全部显示在控制台上,然后检查哪些值与代码中设置的名称相同
当程序找到具有目标名称的值时,我需要终止它的进程并使用 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;
}
}
终止进程是异步的,它启动终止并立即返回。也就是说,不确定该过程是否已终止。简单的解决方案是为延迟添加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;
}
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 尝试使用窗口注册表中的路径和 DeleteFile() 方法删除.exe文件