能力值:
( LV13,RANK:240 )
|
-
-
2 楼
应该是执行完毕后才设置的。比如本来流程是 1 CreateEvent ----->2没错误------>3SetLasterror 你在中途设置了,那不被后面的给覆盖了?? 比如在1 2之间你设置,最后还是会被覆盖的吧,猜测的
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不用设置lasterror,内核中错误都是按照返回值返回的,只要你返回了错误码,到返回R3的时候,系统会自动将你的错误码转化为R3的错误码并设置好。如果你在R0设置了,那返回R3时候,系统还是会再次设置一遍啊,跟没设置一样。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
谢谢你的回复,我通过RtlNtStatusToDosError(ns)转了一下,转出来是317 但是getlasterror应该是183 已经存在,不知道 哪里搞错了,难道又转了一次么?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
你没看到关键,你在HOOK R0的NtCreateEvent的时候设置的lasterror,但不管你设置什么值,当NtCreateEvent返回后,肯定带着一个返回值,这个返回值会转成R3的lasterror并设置上,也就是说,你设置完后,系统还会根据NtCreateEvent的返回值再次设置一遍,你之前设置的,被覆盖了,所以你的返回值是不生效的。如果你要设置有效的lasterror,你不用设置这个值,需要什么lasterror,直接在NtCreateEvent的时候按照R0的STATUS,返回即可。比如你想lasterror为0,那你在NtCreateEvent返回的时候,保证他返回STATUS_SUCCESS就可以了。
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
恩 你的意思我已经明白了,我是想这样,应为我不是什么错误都让他返回success的,我想先判断一下是不是我要的183这个号再修改那个ns返回为success,所以我先把ns转换一下 判断跟183相等不相等,但是我转换出来不是183.。
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
原来317好像是没有找到这个ns对应的win32error码,不知道为啥
|
能力值:
( 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
|
能力值:
( LV3,RANK:20 )
|
-
-
9 楼
谢谢你 我查到返回的应该是这个STATUS_OBJECT_NAME_EXISTS,不知道为啥在你发给我的那个里面没有,但是我在msdn上已经找到了。非常感谢~
|
|
|