通过遍历进程快照获取当前运行进程的PID(C代码)

这次是要需要获取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

猜你喜欢

转载自blog.csdn.net/userpass_word/article/details/80847323