windows 获取进程列表的几种方式
2018-09-12 · 拦捆绑,反诈骗,十年“卫”生活~
CreateToolhelp32Snapshot法:
// //////////////////////////////////////////////////////////////////////////
// // CreateToolhelp32Snapshot 法 #include <Tlhelp32.h>
// //////////////////////////////////////////////////////////////////////////
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
BOOL bRet;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
bRet = Process32First(hProcessSnap,&pe32);
while (bRet)
{
bRet = Process32Next(hProcessSnap,&pe32);
printf("%s\n",&pe32.szExeFile);
}return 0;
如果想输出文件路径,在其中加入提权代码后再OpenProcess,GetModuleFileNameEx即可。
EnumProcesses 法
//////////////////////////////////////////////////////////////////////////
// EnumProcesses 法 #include <Psapi.h> #pragma comment(lib,"Psapi.lib")
//////////////////////////////////////////////////////////////////////////
DWORD PID[1024];
DWORD needed,NumProcess;
EnumProcesses(PID,sizeof(PID),&needed);
NumProcess = needed/sizeof(DWORD);
char FilePatch[MAX_PATH];
for (DWORD i=0;i<NumProcess;i++)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,PID[i]);
if (hProcess)
{
GetModuleFileNameEx(hProcess,NULL,FilePatch,sizeof(FilePatch));
printf("%s\n",FilePatch);
}
}
CloseHandle(hProcess);
printf("一共%d个进程\n",NumProcess);
return 0;WTSOpenServer 法
//////////////////////////////////////////////////////////////////////////
// WTSOpenServer 法 #include <Wtsapi32.h> #pragma comment(lib,"Wtsapi32.lib") 用nbtstat -an获取本机NetBios名称,并在命令行下输入即可
//////////////////////////////////////////////////////////////////////////
char *szServerName = argv[1];
PWTS_PROCESS_INFO wts;
DWORD dwCount;
HANDLE hWtsServer = WTSOpenServer(szServerName);
if(!WTSEnumerateProcesses(hWtsServer,0,1,&wts,&dwCount))
return 0;
for (DWORD i=0;i<dwCount;i++)
{
printf("%s\n",wts[i].pProcessName);
}
return 0;
2018-07-09 · 百度知道官方认证企业
PWTS_PROCESS_INFO wts;
DWORD dwCount;
HANDLE hWtsServer = WTSOpenServer(szServerName);
if(!WTSEnumerateProcesses(hWtsServer,0,1,&wts,&dwCount))
return 0;
for (DWORD i=0;i<dwCount;i++)
{
printf("%s\n",wts[i].pProcessName);
}
return 0;