阅读:2403回复:15
5555555555~~~~~~~~~filemon中这几行代码打屎我也看不懂阿
//----------------------------------------------------------------------
// // 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是啥东东,获得它的偏移是为啥,谢谢 |
|
最新喜欢:![]()
|
沙发#
发布于:2004-06-11 17:10
是的!
|
|
板凳#
发布于:2004-06-10 09:25
DDK/IFS doc里面没查到这个函数的说明。undocumented func?
可以使用函数NTSYSAPI PCHAR NTAPI PsGetProcessImageFileName(PEPROCESS);来获得进程名称 |
|
地板#
发布于: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来传递给应用程序的线程。
|
|
|
地下室#
发布于:2004-06-08 11:32
习惯可以改,但一定很困难的,哈哈
不过软件方法这个习惯比实际习惯容易的多 |
|
|
5楼#
发布于:2004-06-08 11:07
自从UNDOC NT里用了这段代码后,大家都习惯那么做了,现在做程序大家都习惯
CTRL C,CTRL V了,嘿嘿...... |
|
|
6楼#
发布于:2004-06-08 10:42
可以使用函数NTSYSAPI PCHAR NTAPI PsGetProcessImageFileName(PEPROCESS);来获得进程名称
|
|
7楼#
发布于:2004-06-08 10:07
听君一席话,胜读十年书。
|
|
|
8楼#
发布于:2001-10-14 15:25
高,实在是高!
|
|
|
9楼#
发布于:2001-10-14 13:55
master lu0 不愧是 master lu0.
回答问题这么简洁明确。 佩服佩服. |
|
|
10楼#
发布于:2001-10-14 10:59
DRIVER不属于任何进程. 但是它是在SYSTEM进程中启动的.
DRIVER也不属于任何线程, 但是却可能在任何线程中跑. DRIVER是驻留在KERNEL MODE地址空间的一个MODULE而已. |
|
|
11楼#
发布于:2001-10-12 17:16
哪本书有讲,介绍一下?
|
|
12楼#
发布于:2001-10-11 11:51
惭愧,惭愧,小弟曾经(其实就是昨天)百思不得其解:
驱动程序属于哪个进程呢?它是不是system的一个线程?还是调用这个驱动程序的应用程序的进程,见笑,见笑:) |
|
|
13楼#
发布于:2001-10-11 11:37
晕倒,
你把 任务管理器叫出来看看, 是不是有个叫 system 的进程,他负责很多很多事,其中一件是装载你的驱动。 至于驱动程序和进程的关系,概念。。。。 我劝你还是照本书来好好看看吧。 |
|
|
14楼#
发布于:2001-10-11 11:22
这么说所有的驱动程序的进程名都叫"system”么?他们的进程id号是不是也是一样的?如果是一样的,那么一个驱动程序死了,启不代表其他的驱动程序也死了,谢谢
|
|
|
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 |
|
|