阅读:1621回复:19
一个进程的PID在user和kernel里的值一样吗?
我在一个user app里通过getCurrentProcessID得到PID值,把这个值传到kernel里.
然后在kernel里是不是有什么函数可以通过seek这个pid来判断那个user app的存在? 还有,pid的值在user克kernel里的值是一样的吗? |
|
最新喜欢:aasa2 |
驱动老牛
|
沙发#
发布于:2005-02-21 09:11
一样的
|
|
板凳#
发布于:2005-02-21 09:24
PID是不会变的
你的要求是否可以通过在App中用CreateEvent产生一个事件,然后在内核中来检查该事件来实现。 |
|
|
地板#
发布于:2005-02-21 09:44
一般是一样的,但ROOTKIT里可以修改伪造不同ID来欺骗OS,所以不能依赖他来进行判断.....
|
|
|
地下室#
发布于:2005-02-21 09:49
可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息
然后枚举进程链来判断存在否,不过无法发现一些ROOTKIT隐藏的进程信息. |
|
|
5楼#
发布于:2005-02-21 09:55
我在xp中看了一下getcurrentprocess的代码
如下 mov eax,fs:[18] mov eax,[eax+20] ret 可以肯定xp下user mode与kernel mode下id是从同一位置取的是一样的。由此还发现调用getcurrentprocess根本不用进kernel,只在共享区取了一下数据。 但正如我以前所说,win2000中会有问题,以前看getcurrentprocess的代码,居然全部返回0xffffffff(-1)。你要在win2000下,那就真无奈,也不知道在pack中修正没有,没再研究了。 |
|
|
6楼#
发布于:2005-02-21 10:22
我在xp中看了一下getcurrentprocess的代码 我用的就是2000,怎么办啊? 是不是意味着从app里得到的pid,传入PSLOOUUPPROCESSBYPROCESSID时是不能正确找到那个app的? |
|
7楼#
发布于:2005-02-21 10:51
[quote]我在xp中看了一下getcurrentprocess的代码 我用的就是2000,怎么办啊? 是不是意味着从app里得到的pid,传入PSLOOUUPPROCESSBYPROCESSID时是不能正确找到那个app的? [/quote] 那么你看一下返回的ID是否是0xffffffff,如果是,由于按正常情况0xffffffff为-1不能是合法的ID,说明你现在正是这样。打pack试试,也许最新pack已经修正! |
|
|
8楼#
发布于:2005-02-21 11:31
我在xp中看了一下getcurrentprocess的代码 GetCurrentProcess和GetCurrentProcessId,不知道是不是你记错了 GetCurrentProcess就是返回-1 |
|
9楼#
发布于:2005-02-21 11:50
[quote]我在xp中看了一下getcurrentprocess的代码 GetCurrentProcess和GetCurrentProcessId,不知道是不是你记错了 GetCurrentProcess就是返回-1 [/quote] 不好意思,是搞混了,修正一下getcurrentprocessid的代码 如下 mov eax,fs:[18] mov eax,[eax+20] ret GetCurrentProcess就是返回-1的代码如下 or eax, 0xffffffff ret 谢谢大虾指教。 但这是xp下的,在以前在win2000下面试过,会返回错误ID,不一定是0xffffffff,各位如果机器上有装win2000的,请给出getcurrentprocessid的代码,看看到底怎么回事 |
|
|
10楼#
发布于:2005-02-21 15:08
可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息 老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了? |
|
11楼#
发布于:2005-02-21 15:24
[quote]可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息 老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了? [/quote] 微软没导出而已,你需要自己申明使用 NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT PEPROCESS * pEProcess); |
|
|
12楼#
发布于:2005-02-21 15:39
[quote][quote]可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息 老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了? [/quote] 微软没导出而已,你需要自己申明使用 NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT PEPROCESS * pEProcess); [/quote] 在ntoskrnl.exe中 |
|
|
13楼#
发布于:2005-02-21 15:58
谢谢各位,我终于找到那个函数了,原来它是undocumented的啊。
在msdn里是查不到的。 我想问一下, PsLookupProcessByProcessId的返回值status是那些,分别对应什么情况? |
|
14楼#
发布于:2005-02-21 16:14
谢谢各位,我终于找到那个函数了,原来它是undocumented的啊。 除了正常以外,只有STATUS_INVALID_PARAMETER这个错误,发生在调用_ExMapHandleToPointer即映射句柄到指针时从ulProcId转换到 PEPROCESS时发生 |
|
|
15楼#
发布于:2005-02-22 09:18
好的,谢谢各位,开始给分了 :)
分不多,各位笑纳 |
|
16楼#
发布于:2005-02-22 09:20
??
为什么不能给分了? 没有给分按钮啊。而且显示我没登陆 怎么回事啊? |
|
17楼#
发布于:2005-02-22 09:35
?? 我也经常遇到此事 |
|
|
18楼#
发布于:2005-02-22 10:13
再问一个技术问题,
我看到所谓的 VOID(*PCREATE_PROCESS_NOTIFY_ROUTINE) 只有三个参数:IN HANDLE PARENTID,IN HANDLE PROCESSID,IN BOOLEAN CREATE. 那么请问如果我进入自己写的一个这样的callback routine,那么我怎么才能改变我定义再deviceextension里的一个field的值,我怎么才能得到它的指针呢? |
|
19楼#
发布于:2005-02-22 11:07
问题解决了,我声明了一个全局的指针来用
|
|