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
点击两个按钮触发事件

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

600

被折叠的 条评论
为什么被折叠?



