关于前篇提到的几个疑问的个人理解

1.PsGetCurrentProcess()获取的当前进程是哪个进程?

 这个根据执行环境而定。

对于DriverEntry,则看是谁最终负责加载的驱动:如果是服务式加载,那么得到的是Sytem进程的EPROCESS;如果是采用NTDLL.DLL中的ZwSetSystemInformation来实现加载,那么得到的EPROCESS则是调用此函数的任意进程。(卸载也应该是一样的)

对于分发函数。分发函数的执行方式是系统回调,因此ring3上任何进程都可能触发这个回调,所以PsGetCurrentProcess()的执行根据你的需求而定。理论上,它可以获取任意进程的EPROCESS。

 

2.比较字符串时我想用lstrcmpi,却提示未定义。那么哪些ring3时编程的东西现在可以用呢?

 

首先ring3的windows API 是不能用了。c运行时库部分函数可以使用,但是从安全考虑,一些字符串的处理函数最好不要用,就像前几篇中的驱动例子那样是不太好的。如《寒江独钓》所述:对于比较涉及底层的,比如内存管理、文件读写、网络、线程等,都别使用c运行库来实现。另外还有诸如此类的言语,归结起来就是:除了算法思想,最好脱胎换骨用内核的编程方式。

 好吧,一招把我们打回解放前,我们假装自己才开始学编程吧。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值