能力值:
( LV2,RANK:10 )
|
-
-
2 楼
ZwQuerySystemInformation不会设置LastError的,它的调用状态是在返回值里。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
大哥有吧 不然我咋能获取到
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
Zw不会设置LastError
你获取到的 是前面其他API设置的
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
大哥 前面获取的都是零 表示没有错误
|
能力值:
( LV12,RANK:210 )
|
-
-
6 楼
大哥,Zw/Nt系列函数是系统调用的封装,User Mode部分实现在ntdll.dll里面
; __stdcall NtQuerySystemInformation(x, x, x, x)
public _NtQuerySystemInformation@16
_NtQuerySystemInformation@16 proc near
mov eax, 0ADh ; NtQuerySystemInformation
; RtlGetNativeSystemInformation
mov edx, 7FFE0300h
call dword ptr [edx]
retn 10h
_NtQuerySystemInformation@16 endp
你看看,哪里来的LastError?你又没调用RtlNtStatusToDosError。
它的返回值是NTSTATUS,已经代表了成功和失败的状态信息,没必要再搞个LastError来多此一举。
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
LZ的逻辑很混乱
GetLastError是用户层的API
而ZwQuerySystemInformation是系统功能调用,其返回值代表调用状态
还是先理清思路再说,是写驱动?还是写App?
驱动里面无法直接调用用户层的GetLastError
并且调用了ntdll.dll里面的ZwQuerySystemInformation之后,也不会立刻设置LastError
所以LZ调用ZwQuerySystemInformation之后再调用GetLastError本身就是一个严重的低级错误
|
|
|