LiaoXF
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2003-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2403回复:15

5555555555~~~~~~~~~filemon中这几行代码打屎我也看不懂阿

楼主#
更多 发布于:2001-10-11 10:00
//----------------------------------------------------------------------
//
// FilemonGetProcessNameOffset
//
// In an effort to remain version-independent, rather than using a
// hard-coded into the KPEB (Kernel Process Environment Block), we
// scan the KPEB looking for the name, which should match that
// of the system process. This is because we are in the system process'
// context in DriverEntry, where this is called.
//
//----------------------------------------------------------------------
ULONG
FilemonGetProcessNameOffset(
    VOID
    )
{
    PEPROCESS       curproc;
    int             i;

    curproc = PsGetCurrentProcess();

    //
    // Scan for 12KB, hoping the KPEB never grows that big!
    //
    for( i = 0; i < 3*PAGE_SIZE; i++ ) {
    
        if( !strncmp( SYSNAME, (PCHAR) curproc + i, strlen(SYSNAME) )) {

            return i;
        }
    }

    //
    // Name not found - oh, well
    //
    return 0;
}


这个KPEB是啥东东,获得它的偏移是为啥,谢谢

最新喜欢:

linwnlinwn
网管
管理员
驱动中牛
驱动中牛
  • 注册日期2004-04-23
  • 最后登录2010-06-17
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望67点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-11 17:10
是的!
Netguy
驱动牛犊
驱动牛犊
  • 注册日期2001-04-02
  • 最后登录2012-05-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-10 09:25
DDK/IFS doc里面没查到这个函数的说明。undocumented func?

可以使用函数NTSYSAPI PCHAR NTAPI PsGetProcessImageFileName(PEPROCESS);来获得进程名称
Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-09 10:37
在windows 2k或者NT,当应用程序的线程call CreateFile,线程运行环境会从user mode切到kernel mode,一般是通过NTDLL.dll来导致切换。在kernel mode 的时候,由IO management来call相对应的driver,driver只不过把相对应的数据放在IRP中交给IO management来传递给应用程序的线程。
I will do the best with what the God gave me.
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-08 11:32
习惯可以改,但一定很困难的,哈哈
不过软件方法这个习惯比实际习惯容易的多
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2004-06-08 11:07
自从UNDOC NT里用了这段代码后,大家都习惯那么做了,现在做程序大家都习惯
CTRL C,CTRL V了,嘿嘿......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
管理员
驱动中牛
驱动中牛
  • 注册日期2004-04-23
  • 最后登录2010-06-17
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望67点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-06-08 10:42
可以使用函数NTSYSAPI PCHAR NTAPI PsGetProcessImageFileName(PEPROCESS);来获得进程名称
linfeng1216
驱动小牛
驱动小牛
  • 注册日期2004-03-10
  • 最后登录2008-12-31
  • 粉丝0
  • 关注0
  • 积分818分
  • 威望89点
  • 贡献值0点
  • 好评度74点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-06-08 10:07
听君一席话,胜读十年书。
这件事很难
LiaoXF
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2003-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-10-14 15:25
高,实在是高!
网管
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-10-14 13:55
master lu0 不愧是 master lu0.


回答问题这么简洁明确。


佩服佩服.
这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-10-14 10:59
DRIVER不属于任何进程. 但是它是在SYSTEM进程中启动的.
DRIVER也不属于任何线程, 但是却可能在任何线程中跑.
DRIVER是驻留在KERNEL MODE地址空间的一个MODULE而已.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
z_j_cd
驱动中牛
驱动中牛
  • 注册日期2001-09-13
  • 最后登录2012-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2001-10-12 17:16
哪本书有讲,介绍一下?
LiaoXF
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2003-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2001-10-11 11:51
惭愧,惭愧,小弟曾经(其实就是昨天)百思不得其解:
  驱动程序属于哪个进程呢?它是不是system的一个线程?还是调用这个驱动程序的应用程序的进程,见笑,见笑:)
网管
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2001-10-11 11:37
晕倒,

你把 任务管理器叫出来看看, 是不是有个叫 system 的进程,他负责很多很多事,其中一件是装载你的驱动。


至于驱动程序和进程的关系,概念。。。。 我劝你还是照本书来好好看看吧。

这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
LiaoXF
驱动牛犊
驱动牛犊
  • 注册日期2001-09-04
  • 最后登录2003-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2001-10-11 11:22
这么说所有的驱动程序的进程名都叫"system”么?他们的进程id号是不是也是一样的?如果是一样的,那么一个驱动程序死了,启不代表其他的驱动程序也死了,谢谢
网管
iamaf~1
驱动小牛
驱动小牛
  • 注册日期2001-09-23
  • 最后登录2003-06-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2001-10-11 10:59
KPEB (Kernel process Environnement Block)

是用来存 process Environnement.

我们并不能明确的知道 process Name 的偏移究竟是多少。(NT和2k也许一样,也许不一样, 因为这个块结构是不公开的。)


FilemonGetProcessNameOffset() 是在DriverEntry中执行的, 这个时候,当前的进程必然是 system, 所以,在当前进程的 KPEB中搜索一下串 system 就可以得到process Name 的偏移。


在  FilemonGetProcess()中, 利用这个偏移来获得其他process的process Name


这个论坛不支持长用户名,害得我iamafraid 只好叫iamaf~1了...
游客

返回顶部