枚举驱动 NtQuerySystemInformation(100)

  • 主题发起人 主题发起人 Leehawk
  • 开始时间 开始时间
L

Leehawk

Unregistered / Unconfirmed
GUEST, unregistred user!
我的枚举驱动用到ntdll.dll里的NtQuerySystemInformation;这样的做法在XP下是没问题的,结果也正常,在WIN2000下就不行。Len:= 0;NtQuerySystemInformation(11, nil, 0, @Len); //获取长度Buffer:= AllocMem(Len);try NtQuerySystemInformation(11, Buffer, Len, @ReturnLen);finally.....end;第一次调用NtQuerySystemInformation,以获取长度,WIN2000下总是返回0;我把第一个参数换成5,结果还是返回0。各位大侠,用NtQuerySystemInformation枚举驱动,WIN2000下不支持么?还是有做错的地方?
 
使用loadlibrary, GetProcAddress导出这个函数后再试验
 
该函数确实是使用loadlibrary, GetProcAddress来导出。在XP系统上枚举没有问题,WIN2000才有这样的错误。
 
问题我已经解决了。WIN2000下第一次调用没有返回长度,只有循环尝试加大缓冲区大小:Len:= 0;Buffer:= AllocMem(Len);try d:= NtQuerySystemInformation(11, Buffer, Len, @ReturnLen); while (d = $C0000004) or (d = $C0000005) do //STATUS_ACCESS_VIOLATION or STATUS_INFO_LENGTH_MISMATCH begin FreeMem(Buffer, Len); Inc(Len, $2000); Buffer:= AllocMem(Len); d:= NtQuerySystemInformation(11, Buffer, Len, @ReturnLen); end; if d = ERROR_SUCCESS then begin ....... end;finally FreeMem(Buffer, Len);end这个问题大概也不成问题了吧,WIN2000现在基本都没人用了。:)
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
I
回复
0
查看
596
import
I
后退
顶部