第一次课进行分类代码

System32下的进程

#include 
#include 
#include
#include

int main()
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;

    // 获取进程快照
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("创建进程快照失败!错误码:%d\n", GetLastError());
        return 1;
    }

    // 设置进程快照结构体大小
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // 获取第一个进程的信息
    if (!Process32First(hProcessSnap, &pe32))
    {
        printf("获取第一个进程信息失败!错误码:%d\n", GetLastError());
        CloseHandle(hProcessSnap);
        return 1;
    }

    // 遍历进程快照,输出System32路径下的进程
    do
    {
        wchar_t szProcessPath[MAX_PATH];
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pe32.th32ProcessID);

        // 获取进程路径
        if (hProcess)
        {
            if (GetModuleFileNameEx(hProcess, NULL, szProcessPath, MAX_PATH))
            {
                if (wcsstr(szProcessPath, L"\\System32\\") != NULL)
                {
                    printf("进程ID:%d,进程路径:%ls\n", pe32.th32ProcessID, szProcessPath);
                }
            }
            CloseHandle(hProcess);
        }

    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

    return 0;
}

第一次课进行分类代码_第1张图片

非System32下的进程

#include 
#include 
#include
#include

int main()
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;

    // 获取进程快照
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("创建进程快照失败!错误码:%d\n", GetLastError());
        return 1;
    }

    // 设置进程快照结构体大小
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // 获取第一个进程的信息
    if (!Process32First(hProcessSnap, &pe32))
    {
        printf("获取第一个进程信息失败!错误码:%d\n", GetLastError());
        CloseHandle(hProcessSnap);
        return 1;
    }

    // 遍历进程快照,输出非System32路径下的进程
    do
    {
        wchar_t szProcessPath[MAX_PATH];
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pe32.th32ProcessID);

        // 获取进程路径
        if (hProcess)
        {
            if (GetModuleFileNameEx(hProcess, NULL, szProcessPath, MAX_PATH))
            {
                // 判断进程路径是否不包含System32目录
                if (wcsstr(szProcessPath, L"\\System32\\") == NULL)
                {
                    printf("进程ID:%d,进程路径:%ls\n", pe32.th32ProcessID, szProcessPath);
                }
            }
            CloseHandle(hProcess);
        }

    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

    return 0;
}

第一次课进行分类代码_第2张图片
第一次课进行分类代码_第3张图片
第一次课进行分类代码_第4张图片

每个进程内的模 system32 路径下的模块有哪些,非system32下的模块有哪些

int main()
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;

    // 获取进程快照
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        printf("创建进程快照失败!错误码:%d\n", GetLastError());
        return 1;
    }

    // 设置进程快照结构体大小
    pe32.dwSize = sizeof(PROCESSENTRY32);

    // 获取第一个进程的信息
    if (!Process32First(hProcessSnap, &pe32))
    {
        printf("获取第一个进程信息失败!错误码:%d\n", GetLastError());
        CloseHandle(hProcessSnap);
        return 1;
    }

    // 遍历进程快照,输出每个进程内的System32路径下的模块
    do
    {
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID);

        if (hProcess)
        {
            HMODULE hMods[1024];
            DWORD cbNeeded;

            // 获取模块句柄数组
            if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
            {
                // 获取模块路径
                for (unsigned int i = 0; i < cbNeeded / sizeof(HMODULE); i++)
                {
                    wchar_t szModuleName[MAX_PATH];

                    if (GetModuleFileNameEx(hProcess, hMods[i], szModuleName, MAX_PATH))
                    {
                        // 判断模块路径是否位于System32目录下
                        if (wcsstr(szModuleName, L"\\System32\\") != NULL)
                        {
                            printf("进程ID:%d,模块路径:%ls\n", pe32.th32ProcessID, szModuleName);
                        }
                    }
                }
            }

            CloseHandle(hProcess);
        }

    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);

    return 0;
}

第一次课进行分类代码_第5张图片
第一次课进行分类代码_第6张图片
第一次课进行分类代码_第7张图片
这里列出来的实在是太多了

你可能感兴趣的:(上课内容,学习)