首页
社区
课程
招聘
[求助]ring0 设置lasterror为啥不生效呢
发表于: 2013-9-23 08:28 6724

[求助]ring0 设置lasterror为啥不生效呢

2013-9-23 08:28
6724
ring0 hook了NtCreateEvent,调用完之后设置lasterror的值为0,
NtCurrentTeb()->LastErrorValue = 0;可是ring3还是通过getlasterror获取到了错误码,是不是时机不对啊,这个lasterrorvalue不是在调用原函数里面去设置的?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1392
活跃值: (5107)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
应该是执行完毕后才设置的。比如本来流程是 1 CreateEvent  ----->2没错误------>3SetLasterror 你在中途设置了,那不被后面的给覆盖了?? 比如在1 2之间你设置,最后还是会被覆盖的吧,猜测的
2013-9-23 09:06
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不用设置lasterror,内核中错误都是按照返回值返回的,只要你返回了错误码,到返回R3的时候,系统会自动将你的错误码转化为R3的错误码并设置好。如果你在R0设置了,那返回R3时候,系统还是会再次设置一遍啊,跟没设置一样。
2013-9-23 09:47
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
谢谢你的回复,我通过RtlNtStatusToDosError(ns)转了一下,转出来是317 但是getlasterror应该是183 已经存在,不知道 哪里搞错了,难道又转了一次么?
2013-9-23 12:18
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你没看到关键,你在HOOK R0的NtCreateEvent的时候设置的lasterror,但不管你设置什么值,当NtCreateEvent返回后,肯定带着一个返回值,这个返回值会转成R3的lasterror并设置上,也就是说,你设置完后,系统还会根据NtCreateEvent的返回值再次设置一遍,你之前设置的,被覆盖了,所以你的返回值是不生效的。如果你要设置有效的lasterror,你不用设置这个值,需要什么lasterror,直接在NtCreateEvent的时候按照R0的STATUS,返回即可。比如你想lasterror为0,那你在NtCreateEvent返回的时候,保证他返回STATUS_SUCCESS就可以了。
2013-9-23 12:25
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
恩 你的意思我已经明白了,我是想这样,应为我不是什么错误都让他返回success的,我想先判断一下是不是我要的183这个号再修改那个ns返回为success,所以我先把ns转换一下 判断跟183相等不相等,但是我转换出来不是183.。
2013-9-23 12:33
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
原来317好像是没有找到这个ns对应的win32error码,不知道为啥
2013-9-23 13:42
0
雪    币: 4817
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那你要干什么我就不清楚了。你用什么转化成WIN32错误码,然后再跟183比较的?
刚才看了下,WIN32错误码为183的是ERROR_ALREADY_EXISTS,对应的R0错误码是STATUS_OBJECT_NAME_COLLISION(0xC0000035),你必须要拿到STATUS_OBJECT_NAME_COLLISION这个错误码,才可以转化为183啊。
给你张WIN32错误码和R0错误码的对应表
http://blog.csdn.net/syf442/article/details/5284327
2013-9-23 14:10
0
雪    币: 48
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
谢谢你 我查到返回的应该是这个STATUS_OBJECT_NAME_EXISTS,不知道为啥在你发给我的那个里面没有,但是我在msdn上已经找到了。非常感谢~
2013-9-23 18:13
0
游客
登录 | 注册 方可回帖
返回
//