在内核中,通过进程ID,得到进程名称,有多种方法。

我使用了两种方法,第一种是使用ZwOpeProcess得到句柄

然后ObReferenceObjectByHandle函数得到PEPROCESS结构,然后

char *ProcessName = (char*)EProcess + 0x174;

第二种方法是得到PEPROCESS结构之后,使用PsGetProcessImageFileName函数得到进程名。

具体代码如下:

[cpp] view plaincopy
  1. #include<ntddk.h>
  2. #include<wdm.h>
  3. UCHAR* PsGetProcessImageFileName(PEPROCESS Process);
  4. NTSTATUS Unload(IN PDRIVER_OBJECT  DriverObject)
  5. {
  6. DbgPrint("驱动已经卸载/n");
  7. }
  8. void GetProcessName(ULONG dwPid)
  9. {
  10. HANDLE ProcessHandle;
  11. NTSTATUS status;
  12. OBJECT_ATTRIBUTES  ObjectAttributes;
  13. CLIENT_ID myCid;
  14. PEPROCESS EProcess;
  15. InitializeObjectAttributes(&ObjectAttributes,0,0,0,0);
  16. myCid.UniqueProcess = (HANDLE)dwPid;
  17. myCid.UniqueThread = 0;
  18. //打开进程,获取句柄
  19. status = ZwOpenProcess (&ProcessHandle,PROCESS_ALL_ACCESS,&ObjectAttributes,&myCid);
  20. if (!NT_SUCCESS(status))
  21. {
  22. DbgPrint("打开进程出错/n");
  23. return;
  24. }
  25. //得到EPROCESS,结构中取进程名
  26. status = ObReferenceObjectByHandle(ProcessHandle,FILE_READ_DATA,0,KernelMode,&EProcess, 0);
  27. if (status == STATUS_SUCCESS)
  28. {
  29. char *ProcessName = (char*)EProcess + 0x174;
  30. char *PsName = PsGetProcessImageFileName(EProcess);
  31. DbgPrint("ProcessName is %s/n",ProcessName);
  32. DbgPrint("PsName is %s/n",PsName);
  33. ZwClose(ProcessHandle);
  34. }
  35. else
  36. {
  37. DbgPrint("Get ProcessName error");
  38. }
  39. }
  40. NTSTATUS
  41. DriverEntry(
  42. IN PDRIVER_OBJECT  DriverObject,
  43. IN PUNICODE_STRING  RegistryPath
  44. )
  45. {
  46. DbgPrint("驱动已经加载了/n");
  47. GetProcessName(2044);
  48. DriverObject->DriverUnload = Unload;
  49. return STATUS_SUCCESS;
  50. }

通过进程ID得到进程名相关推荐

  1. Windows下根据进程id获得进程名

    //根据进程id获得进程名 wstring GetModuleName(DWORD dwPid) {HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS ...

  2. VC++如何根据进程名获取进程ID

    VC++如何根据进程名获取进程ID #include <Tlhelp32.h> UINT GetProcessIdByName(LPCTSTR pszExeFile) { UINT nPr ...

  3. win32根据进程名获取进程ID或者终止进程

    第一部分: 根据进程名获取进程ID. 首先我们需要了解三个windows API函数: HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWO ...

  4. 根据进程名杀死进程 -kill进程名

    知道进程名怎样杀死这个进程. #pkill 进程名  或是 #killall 进程名 的确这个两个命令都能做到这些,而且我们平时一般知道进程名需要杀死进程的时候也都是用的这两个命令.可是他叫我用kil ...

  5. java通过进程名称杀进程_根据进程名杀死进程 -kill进程名

    知道进程名怎样杀死这个进程. #pkill 进程名 或是 #killall 进程名 的确这个两个命令都能做到这些,而且我们平时一般知道进程名需要杀死进程的时候也都是用的这两个命令.可是他叫我用kill ...

  6. 易语言通过进程名称获取进程ID

    通过系统映像的名称来获取进程的PID,有了PID就可以通过(进程_ID取窗口句柄) 获取窗口句柄,有了句柄就可以大漠后台绑定窗口,所以最终目的还是通过进程名称来获取进程所在窗口的句柄,用来窗口的绑定操 ...

  7. WIN32进程快照以及进程ID和句柄查找

    要对进程进行某种操作,就必须首先知道该进程的进程句柄或者进程ID,否则一切无从谈起,对于程序自己创建的子进程来说,CreateProcess函数返回了进程句柄和进程ID,但如果需要调试系统中已经运行的 ...

  8. linux如何查询进程ID和关闭进程

    1.查看端口占用的进程号 (1)比如要查询8080 端口 lsof -i:8080 COMMAND:进行成名,如上说明8080被一个server进程占用 PID:进程的ID,一般杀掉进程时就是指定进程 ...

  9. pgrep java是什么意思_pgrep查找正在运行的进程ID

    pgrep是一个命令行实用程序,根据给定的条件查找正在运行的程序的进程id.它可以是完整的或部分的进程名.运行该进程的用户或其他属性. 如何使用pgrep命令 语法: pgrep [options] ...

最新文章

  1. 解读Raft(二 选举和日志复制)
  2. UML系统分析与设计01-准备
  3. qt中json构造一个数组_告别撸单元格!我来分享Excel中如何利用一条公式得到一个数组...
  4. C++——多态实现原理分析
  5. 101 Tips to MySQL Tuning and Optimization
  6. P2486 [SDOI2011]染色
  7. php怎么调试小程序,教你如何配置微信小程序
  8. In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column...
  9. 前端倒计时不准的问题
  10. python查找元素的下标 leetcode 392
  11. Nuxt项目支持import写法的最新解决方案
  12. Flash MX 2004 中的文本遮罩
  13. python中如何反解函数_PyTorch中反卷积的用法详解
  14. 学习笔记DL003:神经网络第二、三次浪潮,数据量、模型规模,精度、复杂度,对现实世界冲击...
  15. Boost Asio Work类
  16. 物联网(工程师)+嵌入式学习路线图各个阶段
  17. 人工智能研究中心快递柜——代码分析四
  18. 计算机组成原理笔记——机器指令
  19. Java实验3 第十二题:财务应用程序:信用卡号的合法性
  20. 徒步穿越神农架无人区

热门文章

  1. 自动化办公 Python 操控 Word
  2. Elixir 1.3带来新的语言功能、API和改进后的工具
  3. Report Studio值提示通过prompt宏函数给sql查询传参
  4. 《More Effective C++》读书笔记
  5. 【世界上最优秀的逆向分析工具】IDA Pro6.1绿色版
  6. 演进式数据库开发技术的障碍
  7. SUN PORTAL 7.2安装在windows 的问题解决办法!
  8. 我要放弃RedHat Linux了
  9. go 读取 json 配置文件
  10. Leaflet获取可视范围内4个顶点