32位/64位WINDOWS驱动之保护特定名字进程

文章介绍了如何在Windows驱动中实现对特定进程的保护,主要涉及通过PsGetCurrentProcess()和PsGetProcessId()获取当前进程信息,使用OpenProcess()函数以及GetProcessName()函数来判断并保护指定名称的进程。同时,提到了在MFC应用层添加UI元素以交互实现进程的保护和解除保护功能。

32位/64位WINDOWS驱动之保护特定名字进程

驱动中进程间的切换
保护特定进程时 条件选择 名字 PID

PsGetCurrentProcess()
PsGetProcessImageFileName //11个有效的字符
PsGetCurrentProcessId() //获取当前进程PID

二、驱动层-进程保护.C

进程保护前面添加代码

//UserMode
		/*
		OpenProcess(
		_In_DWORD dwDesiredAccess,
		_In_BOOL bInheritHandle,
		_In_DWORD dwProcessId
		);
		*/
		//用户层 调用了  OpenProcess NtOpenProcess 进程名 OpenProcess(

		const char*进程名 = PsGetProcessImageFileName(PsGetCurrentProcess());//11个有效的字符
		HANDLE dwProcessId = PsGetProcessId((PEPROCESS)OperationInformation->Object);
		const char*目标进程名 = GetProcessName(dwProcessId);//要保护是这个进程名
		
		KdPrint(("yjx:SYS 进程名=%p dwProcessId =%d 目标进程名=%p \n",进程名, dwProcessId, 目标进程名));//11个字节长度是有效

在这里插入图片描述

2.在添加一个取进程名函数

代码如下:

const char*PsGetProcessImageFileName(PEPROCESS arg1);

const char* GetProcessName(ULONG dwPid)
{
	HANDLE ProcessHandle;
	NTSTATUS status;
	OBJECT_ATTRIBUTES ObjectAttributes;
	CLIENT_ID myCid;
	PEPROCESS EProcess;
	const char *PsName = NULL;
	InitializeObjectAttributes(&ObjectAttributes, 0, 0, 0, 0);

	myCid.UniqueProcess = (HANDLE)dwPid;
	myCid.UniqueThread = 0;

	//打开进程。获取句柄
	status = ZwOpenProcess(&ProcessHandle,PROCESS_ALL_ACCESS, &ObjectAttributes, &myCid);
	if (!NT_SUCCESS(status))
	{
		KdPrint(("yjx:打开进程出错\n"));
		return NULL;
	}

	//得到EPROCESS,结构中取进程名
	status = ObReferenceObjectByHandle(ProcessHandle, FILE_READ_DATA, 0,UserMode,/* KernelMode,*/ &EProcess, 0);
	if (status == STATUS_SUCCESS)
	{
		//char*ProcessName = (char*)EProcess + 0x174; //ImageFileName[11]
		PsName = PsGetProcessImageFileName(EProcess);

		//KdPrint(("ProcessName is%\n",ProcessName));
		KdPrint(("yjx:PsName is %s\n",PsName));

		ZwClose(ProcessHandle);
	}
	else
	{
		KdPrint(("yjx:Get ProcessName error"));
	}
	return PsName;

}

在这里插入图片描述

MFC应用层添加 两个按钮,一个编辑框,一个标签


在这里插入图片描述

移除保护进程按钮属性ID 命名 IDC_BUTTON2_DEL_NAME

点击两个按钮触发事件
在这里插入图片描述

以上就是全部内容了 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a756598009

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值