System32下的进程
#include <windows.h>
#include <stdio.h>
#include<TlHelp32.h>
#include<psapi.h>
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;
}
非System32下的进程
#include <windows.h>
#include <stdio.h>
#include<TlHelp32.h>
#include<psapi.h>
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;
}
每个进程内的模 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;
}
这里列出来的实在是太多了