通过进程ID得到进程名
2011-05-21 11:38
323 查看
在内核中,通过进程ID,得到进程名称,有多种方法。
我使用了两种方法,第一种是使用ZwOpeProcess得到句柄
然后ObReferenceObjectByHandle函数得到PEPROCESS结构,然后
char *ProcessName = (char*)EProcess + 0x174;
第二种方法是得到PEPROCESS结构之后,使用PsGetProcessImageFileName函数得到进程名。
具体代码如下:
我使用了两种方法,第一种是使用ZwOpeProcess得到句柄
然后ObReferenceObjectByHandle函数得到PEPROCESS结构,然后
char *ProcessName = (char*)EProcess + 0x174;
第二种方法是得到PEPROCESS结构之后,使用PsGetProcessImageFileName函数得到进程名。
具体代码如下:
#include<ntddk.h> #include<wdm.h> UCHAR* PsGetProcessImageFileName(PEPROCESS Process); NTSTATUS Unload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("驱动已经卸载/n"); } void GetProcessName(ULONG dwPid) { HANDLE ProcessHandle; NTSTATUS status; OBJECT_ATTRIBUTES ObjectAttributes; CLIENT_ID myCid; PEPROCESS EProcess; 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)) { DbgPrint("打开进程出错/n"); return; } //得到EPROCESS,结构中取进程名 status = ObReferenceObjectByHandle(ProcessHandle,FILE_READ_DATA,0,KernelMode,&EProcess, 0); if (status == STATUS_SUCCESS) { char *ProcessName = (char*)EProcess + 0x174; char *PsName = PsGetProcessImageFileName(EProcess); DbgPrint("ProcessName is %s/n",ProcessName); DbgPrint("PsName is %s/n",PsName); ZwClose(ProcessHandle); } else { DbgPrint("Get ProcessName error"); } } NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { DbgPrint("驱动已经加载了/n"); GetProcessName(2044); DriverObject->DriverUnload = Unload; return STATUS_SUCCESS; }
相关文章推荐
- 小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?通过该试验加深对句柄的理解!!
- Linux通过进程ID得到相对应的程序
- 通过进程ID得到进程名
- VC怎么通过进程ID得到窗口句柄
- 通过进程ID得到进程名
- 通过进程ID得到进程名
- 通过进程ID得到进程名
- 利用java反射机制,通过图片的id得到图片的名字
- 通过链接服务器查询视图得到“意外的Null值(MessageID:7342)”错误的处理方法
- 枚举Windows系统服务,通过进程ID取服务名
- 通过进程ID获得该进程主窗口的句柄
- 通过进程号ID获得窗口的句柄 .
- Android通过共享用户ID来实现多个Activity进程共享
- 通过进程id获取窗口句柄
- vc通过进程名返回进程id
- VC++ 通过进程名或进程ID获取进程句柄
- 如何通过进程ID获取进程名
- 通过进程ID获得该进程主窗口的句柄或者获得特定窗口句柄
- VC++ 通过进程名或进程ID获取进程句柄
- 通过进程名称得进程ID