这次是要需要获取Cuckoo沙箱中当前运行的进程ID,就想了个办法==,直接写个程序,将进程ID打印出来后,Cuckoo沙箱运行结束后会上传运行截图,这样我就能知道当前我运行的进程ID是多少了,无可厚非,能解决问题就行。
写这篇文章是因为在写代码的时候遇到了一些问题,首先大脑里没有出现获取进程ID的WIN 32 API,只想到了通过遍历进程快照来获取,但是那几个API名字有点长(CreateToolhelp32Snapshot,Process32First,Process32Next,就问你长不长……),没有记住,于是就去搜了下,想看看是否存在这样直接获取进程ID的API,只是我没有记住罢了,但是搜索了一些却没有结果,没办法,只能用遍历进程快照的方法来获取当前运行进程的ID了,参考了CSDN上的一篇文章中相关的代码,每次参考别人代码,总是运行后报错,得不到和博主同样的运行效果!这次当然也一样,改了下代码后(一波三折,必须承认代码这东西长时间不敲,就容易出错)总算是出现我想要的结果了-进程PID,我是通过判断进程名来打印我当前进程的PID,代码如下:
#include "stdafx.h"
#include <windows.h>
#include <TlHelp32.h>
int _tmain(int argc, _TCHAR* argv[])
{
/************************************************************************/
/* 功能:
通过遍历进程快照获取当前进程PID
/************************************************************************/
HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProceessnap == INVALID_HANDLE_VALUE)
{
printf_s("创建进行快照失败\n");
return -1;
}
else
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
BOOL hProcess = Process32First(hProceessnap, &pe32);
while (hProcess)
{
WCHAR * ProcessName = L"ProcessID.exe";
if (!wcscmp(pe32.szExeFile, ProcessName))
{
printf("进程名:%ls -------------------------进程ID:%d\n",pe32.szExeFile,pe32.th32ProcessID);
break;
}
hProcess = Process32Next(hProceessnap, &pe32);
}
}
CloseHandle(hProceessnap);
system("pause");
return 0;
}
我在这里遇到了2个问题:
1、打印的进程名总是只出现第一个字符,我知道是Char类型和Wchar类型字符区别的问题,这个花了点时间,因为忘记了怎么输出Wchar类型的字符串了,这下记住了,Wchar类型的字符串输出,使用格式化字符 %ls。
2、输出进程ID时也出问题了,总是和任务管理器中的进程ID不一样!仔细查看了代码后发现是取pe32进程ID字段时取错了,改了后就正确了,那个博主的代码就写错了,恳请各位大佬写代码时注意下,不要给别人挖坑了
更简单的办法:(我同事过来说你获取当前进程ID,调用API不就好了,TMD,我就硬生生的没有想起来,不得不承认,最近搞的人神经兮兮……唉唉)
DWORD ProcessID = GetCurrentProcessId();
printf("---%d\n---", ProcessID);
参考链接:
https://blog.csdn.net/qq78442761/article/details/54646010