内核中获取进程路径学习

Linux内核开发入门:从环境搭建到模块编程实战指南 1. 背景与核心概念:为什么需要学习操作系统底层开发? 在当前的软件开发领域,无论是云计算、物联网还是人工智能,其底层基石都离不开操作系统。许多开发者精通上层应用框架,却对系统如何调度进程、管理内存、处理中断等核心机制感到陌生。当线上服务出现性能瓶颈、系统卡死或驱动兼容性问题时,这种“黑盒”状态往往让人束手无策。本文旨在为你打开这扇门,系统性地拆解基于 Linux 内核的操作系统开发全貌。 Linux 内核是什么? 简单来说,内核是操作系统的“大脑”和“心脏”。它负责管理系统的所有硬件资源(如CPU、内存、 阅读详情

NTSTATUS PsGetProcessPathByPid( IN ULONG Pid ,char* FilePath)
{
NTSTATUS       status;

char       path[256] = {0};
char       disk[10] = {0};
STRING        ansi_path;
STRING        ansi_disk;
UNICODE_STRING     uni_path;
UNICODE_STRING     uni_disk;
  
PEPROCESS       pEprocess;
PFILE_OBJECT      FileObject;
PVOID       Object;

status = PsLookupProcessByProcessId(Pid,&pEprocess);

if(!NT_SUCCESS(status))
{
   DbgPrint("EPROCESS Error");
   return STATUS_UNSUCCESSFUL;
} DbgPrint("EPROCESS 0x%0.8X",pEprocess);

if( !MmIsAddressValid( (PULONG)( (ULONG)pEprocess+0x138 ) ) )//EPROCESS+0x138 -> SectionObject

{   DbgPrint("SectionObject Error");
   return STATUS_UNSUCCESSFUL;
} Object = (PVOID)(*(PULONG)((ULONG)pEprocess+0x138));

if( !MmIsAddressValid( (PULONG)( (ULONG)Object+0x014 ) ) )//SectionObject+0x014 -> Segment
{
   DbgPrint("Segment Error");
   return STATUS_UNSUCCESSFUL;
} Object = (PVOID)(*(PULONG)( (ULONG)Object+0x014 ));
  
if( !MmIsAddressValid( (PULONG)((ULONG)Object+0x000) ) )//Segment+0x000 -> ControlAera
{
   DbgPrint("ControlAera Error");
   return STATUS_UNSUCCESSFUL;
} Object = (PVOID)(*(PULONG)( (ULONG)Object+0x000 ));
  
if( !MmIsAddressValid( (PULONG)( (ULONG)Object+0x024 ) ) )//ControlAera+0x024 -> FilePointer(FileObject)
{
   DbgPrint("FilePointer Error");
   return STATUS_UNSUCCESSFUL;
} Object = (PVOID)(*(PULONG)( (ULONG)Object+0x024 ));
  
FileObject = Object;
ObReferenceObjectByPointer((PVOID)FileObject,0,NULL,KernelMode);
RtlInitUnicodeString(&uni_path,FileObject->FileName.Buffer); //获取路径名
RtlVolumeDeviceToDosName(FileObject->DeviceObject,&uni_disk); //获取盘符名
ObDereferenceObject(FileObject);

RtlUnicodeStringToAnsiString(&ansi_path,&uni_path,TRUE);
RtlUnicodeStringToAnsiString(&ansi_disk,&uni_disk,TRUE);

strcat(path,&ansi_path.Buffer[0]);
strcat(disk,&ansi_disk.Buffer[0]);

RtlFreeAnsiString(&ansi_path);
RtlFreeAnsiString(&ansi_disk);
  
if( strlen(path)+strlen(disk) < 256 )
{
   strcat(FilePath,disk);
   strcat(FilePath,path);
}
else
{
   strcat(FilePath,disk);
   memcpy( FilePath,path,256-strlen(disk)-1 );
   *(FilePath + 256) = 0;
}
return STATUS_SUCCESS;
}

获得系统所有进程的路径 获得系统所有进程的路径献给辞职的好兄弟。。。。 立即下载

相关推荐

KernelEx-开源

KernelEx是开放源代码兼容性层,旨在允许在Microsoft Windows 98和Microsoft Windows Millennium操作系统上运行仅Windows 2000 / XP的应用程序。

Windows Api 封装 C++ 库

Windows Api 封装 C++ 库 还在天天翻MSDN看API参数吗,还在无数次的造轮子吗,还在一个项目里面看见各种版本的封装库吗,还在天天和同事撕逼吗,还在加班调试自己写的BUG吗。 有了这个库,一切烦恼皆没有,6点下班。 包含操作系统相关、网络、进程、文件、内存、字符串等常见winapi封装。...

liwen930723的专栏 769

ring0 ssdt hook sys驱动 得到进程全路径.zip

ring0 ssdt hook sys驱动 得到进程全路径.zip

在驱动中获取进程全路径

本文转自 http://xiabl.blog.ccidnet.com/blog.php?do=showone&itemid=129339&typ=blog仅作收藏  在驱动中获取进程全路径系统具备:WinDbg, Windows Symbol Packages (http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.msp

leon 3229

LIGGGHTS开源离散元仿真:从基础安装到高级应用实战

本文详细介绍了LIGGGHTS开源离散元仿真软件的基础安装、脚本编写及高级应用实战。从颗粒自由落体模拟到工业级复杂系统建模,涵盖CFD-DEM耦合、高性能计算优化等关键技术,帮助用户快速掌握这一强大的颗粒仿真工具。特别适合需要处理颗粒系统仿真的科研人员和工程师。

l1k9j8h7g6的博客 621

Informer:比Transformer更有效的长时间序列预测

目录 AAAI 2021最佳论文:比Transformer更有效的长时间序列预测 Background Why attention Methods:the details of Informer Solve_Challenge_1:最基本的一个思路就是降低Attention的计算量,仅计算一些非常重要的或者说有代表性的Attention即可,一些相近的思路在近期不断的提出,比如Sparse-Attention,这个方法涉及了稀疏化Attention的操作,来减少Attention计算量,然后涉及的

To be a better man 1万+

在内核驱动中,获得到当前进程的全路径

版权所有,转载请注明出处:【在内核驱动中,获得到当前进程的全路径】http://www.3600safe.com/?post=129 引用: http://www.3600safe.com/tb.php?sc=f23899&id=129   在内核驱动中,获得到当前进程的全路径 作者:A盾电脑防护 ⁄ 时间:2012年08月14日 ⁄ 分类: 进程/进程对象 ⁄ 评论:

jianghui3132749的专栏 1757

FPGA新手必看:Quartus生成jic文件全流程详解(附AS/JTAG模式选择指南)

本文详细解析了在Quartus中生成JIC文件以固化FPGA程序到Flash的全流程。核心在于理解JIC文件作为连接JTAG调试与AS固化的桥梁作用,并重点阐述了Convert Programming Files工具的关键配置步骤、AS与JTAG模式的选择逻辑,以及烧录过程中的常见问题排查指南,帮助开发者实现程序断电不丢失。

weixin_29271053的博客 277

驱动层得到进程的完整路径

在得到进程EProcess之后,对于进程完整路径的获得一般有两种方法,一种是访问的进程的PEB结构,在PEB结构中保存有进程的完整路径,另一种方法就是采用访问_FILE_OBJECT的方法。   访问PEB的方法便存在线程靠挂的问题,因为运行于Ring0层的线程是无法去访问用户地址空间的,需要将线程暂时靠挂到目标呢进程,进而去访问进程的PEB结构。我一般都采用的访问_FILE_OBJE...

weixin_30337251的博客 420

【VeriStand】从零构建HIL测试平台:核心概念、硬件选型与实战配置指南

本文详细介绍了如何从零构建HIL测试平台,涵盖核心概念、硬件选型与实战配置指南。重点解析了VeriStand生态系统的优势,包括开箱即用特性、与LabVIEW的黄金搭档配合及Python支持。通过实战案例和硬件选型建议,帮助工程师高效搭建可靠的HIL测试平台,提升测试效率与安全性。

weixin_29250573的博客 329

SolidWorks草图绘制实战:如何用图片参考快速搞定智能小车底板设计

本文详细介绍了在SolidWorks中利用图片参考进行草图绘制的实战方法,以智能小车底板设计为例,帮助设计师快速将概念转化为精准三维模型。通过插入、对齐参考图片并高效描图,结合参数化约束与尺寸驱动,大幅提升设计效率和准确性,尤其适合新手入门与老手优化工作流。

rust6ferris的博客 219

Linux内核应该怎么去学习

内核是操作系统的核心,负责管理计算机硬件资源。它提供了进程管理、内存管理、文件系统、网络通信等基础功能。Linux内核起源于1991年,由Linus Torvalds创建,因其开源特性,成为全球最广泛使用的操作系统之一。本节将介绍Linux内核的起源、发展历程及其在操作系统中的核心地位。内核架构是理解内核工作原理的关键。它由多个子系统组成,包括进程管理、内存管理、文件系统、网络通信等。这些子系统协同工作,共同构成了一个高效、稳定的操作系统核心。

977

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 394

Linux内核开发终极指南:从新手到贡献者的完整路径

Linux内核作为开源世界的基石,其开发过程看似神秘复杂,实则有着清晰的学习路径和参与方式。本文将为你揭开Linux内核开发的面纱,从基础概念到实际贡献,提供一套完整的入门指南,帮助你从新手成长为合格的内核贡献者。 ## 内核开发基础:理解核心概念 ### 处理器架构与指令执行 计算机的中央处理器(CPU)是所有计算的核心,它通过**取指-执行周期**不断运行指令。CPU从内存中读取指令,执

gitblog_00972的博客 894

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

坚韧与专注 1万+

优化翼型形状的遗传算法实现

在每一代种群中,通过计算每个个体的适应度值,选择具有较高适应度值的个体,并使用交叉和变异算子对它们进行操作,从而生成新的个体。具体而言,我们将采用一个参数化的翼型模型,其中包括几何设计变量,如角度、弯曲和厚度等,以及性能指标,如升阻比和扭矩等。总之,本文提供了一个基于遗传算法的优化方法,用于寻找最优的翼型形状,并提供MATLAB源代码。需要注意的是,上述代码中的objFunc函数是一个示例性质的目标函数,实际应用中需要根据具体的问题进行修改。1.初始化一个随机的种群,其中每个个体代表一个参数化的翼型模型。

与其临渊羡鱼,不如退而结网 518

Munder Difflin花费计数器复盘:成本回零Bug的完整事故报告

Munder Difflin 是一个本地多 Agent 编排工具(local multi-agent harness),它能把你现有的 Claude Code、Codex 订阅组成一支"Agent 办公室",每个 Agent 卡片上都会显示自己的花费(美元数字)。而正是这个**花费计数器**,被我们自己的事故复盘发现:它一直低估了真实成本 **59%**。这篇完整事故报告会带你复盘这个"成本回零B

gitblog_06851的博客 338

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

系统中正在运行的进程数量和等待运行时间的可运行进程数量计算猜测

运行队列进程中的正在运行进程数量和等待运行时间的进程数量计算

jetliu05的博客 501

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

douyin-downloader 免费批量下载抖音无水印视频的完整指南:一条链接存下作者全部作品

300 条视频,手动单条保存加清理,粗算要 5 小时起步。更麻烦的是,作者每更新一条,这套动作就得重来一遍。瓶颈不在手速,而在流程:人只要还在环里,数量一涨,耗时线性翻倍。 [douyin-downloader](https://link.gitcode.com/i/27c28f612fbb16530af1f547acaaedee) 把这件事从人工流程换成了脚本流程。它是免费开源的 Python

gitblog_01072的博客 394

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

操作系统学习终极指南:从零基础到实战高手的完整路径

极客时间电子书(GitHub推荐项目精选/ge/geektime-books)是一个汇集各类优质技术学习资源的开源项目,其中包含多本与操作系统学习相关的实战指南,能帮助零基础学习者系统掌握操作系统知识并提升实战能力。 ## 一、操作系统入门必备书籍推荐 📚 想要入门操作系统,选择合适的学习书籍至关重要。在极客时间电子书中,有两本非常适合初学者的经典著作。 ### 1.1 《趣谈Linux操

gitblog_00283的博客 1091

windows 内核下获取进程路径

windows 内核下获取进程路径 思路:1):在EPROCESS结构中获取。此时要用到一个导出函数:PsGetProcessImageFileName,申明如下: NTSYSAPI UCHAR * PsGetProcessImageFileName( __in PEPROCESS Process ); 此函数获取的是一个简单的进程名,...

865

windows 内核中获取当前进程路径

BOOLEAN getCurProcPath( PEPROCESS curproc, PUNICODE_STRING uni_ImagePathName ) { /* wdbg cmd : dt _EPROCESS 0xFFFFFA801AB1D940 0xFFFFFA801AB1D940 == curproc +0x3e8 Peb : 0x000007f...

d2262272d的博客 953

Linux 下获取进程所在文件的路径

Linux 应用层和内核态获取进程所在文件的路径的方法

小立仔 1万+

linux 内核获取进程全路径,linux内核获取进程的全路径3种方法

本文档的CopyRight归jonathan所有,可自由转载,转载时请保持文档的完整性。/*----------------------------------------------------------------------------------------------------------------------------*/在linux内核获取进程全路径方式类似Windows内核...

weixin_36229423的博客 401
上一篇: PE导出/输入表————文件影射
下一篇: 获得DISK的DeviceObject
普通网友
博客等级 码龄17年 1粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值