stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1621回复:19

一个进程的PID在user和kernel里的值一样吗?

楼主#
更多 发布于:2005-02-20 22:01
我在一个user app里通过getCurrentProcessID得到PID值,把这个值传到kernel里.
然后在kernel里是不是有什么函数可以通过seek这个pid来判断那个user app的存在?
还有,pid的值在user克kernel里的值是一样的吗?

最新喜欢:

aasa2aasa2
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-02-21 09:11
一样的
---内核开发合作或提供基础技术服务QQ:22863668 ---
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-21 09:24
PID是不会变的
你的要求是否可以通过在App中用CreateEvent产生一个事件,然后在内核中来检查该事件来实现。
在交流中学习。。。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2005-02-21 09:44
一般是一样的,但ROOTKIT里可以修改伪造不同ID来欺骗OS,所以不能依赖他来进行判断.....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2005-02-21 09:49
可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息
然后枚举进程链来判断存在否,不过无法发现一些ROOTKIT隐藏的进程信息.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
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中修正没有,没再研究了。
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-21 10:22
我在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中修正没有,没再研究了。


我用的就是2000,怎么办啊?
是不是意味着从app里得到的pid,传入PSLOOUUPPROCESSBYPROCESSID时是不能正确找到那个app的?
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-21 10:51
[quote]我在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中修正没有,没再研究了。


我用的就是2000,怎么办啊?
是不是意味着从app里得到的pid,传入PSLOOUUPPROCESSBYPROCESSID时是不能正确找到那个app的? [/quote]
那么你看一下返回的ID是否是0xffffffff,如果是,由于按正常情况0xffffffff为-1不能是合法的ID,说明你现在正是这样。打pack试试,也许最新pack已经修正!
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-02-21 11:31
我在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中修正没有,没再研究了。

GetCurrentProcess和GetCurrentProcessId,不知道是不是你记错了
GetCurrentProcess就是返回-1
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-02-21 11:50
[quote]我在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中修正没有,没再研究了。

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的代码,看看到底怎么回事
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-02-21 15:08
可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息
然后枚举进程链来判断存在否,不过无法发现一些ROOTKIT隐藏的进程信息.


老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
11楼#
发布于:2005-02-21 15:24
[quote]可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息
然后枚举进程链来判断存在否,不过无法发现一些ROOTKIT隐藏的进程信息.


老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了? [/quote]
微软没导出而已,你需要自己申明使用
NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT PEPROCESS * pEProcess);
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-02-21 15:39
[quote][quote]可以通过PSLOOUUPPROCESSBYPROCESSID来通过PID获得EPROCESS信息
然后枚举进程链来判断存在否,不过无法发现一些ROOTKIT隐藏的进程信息.


老兄,我查了,好像没有叫PSLOOKUPPROCESSBYPROCESSID的routine啊,是不是拼错了? [/quote]
微软没导出而已,你需要自己申明使用
NTSTATUS PsLookupProcessByProcessId(IN ULONG ulProcId, OUT PEPROCESS * pEProcess); [/quote]
在ntoskrnl.exe中
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-02-21 15:58
谢谢各位,我终于找到那个函数了,原来它是undocumented的啊。
在msdn里是查不到的。

我想问一下,
PsLookupProcessByProcessId的返回值status是那些,分别对应什么情况?
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-02-21 16:14
谢谢各位,我终于找到那个函数了,原来它是undocumented的啊。
在msdn里是查不到的。

我想问一下,
PsLookupProcessByProcessId的返回值status是那些,分别对应什么情况?

除了正常以外,只有STATUS_INVALID_PARAMETER这个错误,发生在调用_ExMapHandleToPointer即映射句柄到指针时从ulProcId转换到 PEPROCESS时发生
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-02-22 09:18
好的,谢谢各位,开始给分了 :)
分不多,各位笑纳
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-02-22 09:20
??
为什么不能给分了?
没有给分按钮啊。而且显示我没登陆
怎么回事啊?
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-02-22 09:35
??
为什么不能给分了?
没有给分按钮啊。而且显示我没登陆
怎么回事啊?

我也经常遇到此事
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-02-22 10:13
再问一个技术问题,
我看到所谓的 VOID(*PCREATE_PROCESS_NOTIFY_ROUTINE)
只有三个参数:IN HANDLE PARENTID,IN HANDLE PROCESSID,IN BOOLEAN CREATE.
那么请问如果我进入自己写的一个这样的callback routine,那么我怎么才能改变我定义再deviceextension里的一个field的值,我怎么才能得到它的指针呢?
stoneabc
驱动牛犊
驱动牛犊
  • 注册日期2004-12-06
  • 最后登录2007-11-28
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-02-22 11:07
问题解决了,我声明了一个全局的指针来用
游客

返回顶部